mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-20 05:07:51 -06:00
3D scene toolbar actions
This commit is contained in:
parent
a3cdc7e408
commit
ddda5062c2
10 changed files with 749 additions and 20 deletions
|
@ -159,7 +159,63 @@ sub new {
|
|||
}
|
||||
}
|
||||
};
|
||||
|
||||
#======================================================================================================================================================
|
||||
# callbacks for toolbar
|
||||
my $on_action_add = sub {
|
||||
$self->add;
|
||||
};
|
||||
|
||||
my $on_action_delete = sub {
|
||||
$self->remove();
|
||||
};
|
||||
|
||||
my $on_action_deleteall = sub {
|
||||
$self->reset;
|
||||
};
|
||||
|
||||
my $on_action_arrange = sub {
|
||||
$self->arrange;
|
||||
};
|
||||
|
||||
my $on_action_more = sub {
|
||||
$self->increase;
|
||||
};
|
||||
|
||||
my $on_action_fewer = sub {
|
||||
$self->decrease;
|
||||
};
|
||||
|
||||
my $on_action_ccw45 = sub {
|
||||
$self->rotate(45, Z, 'relative');
|
||||
};
|
||||
|
||||
my $on_action_cw45 = sub {
|
||||
$self->rotate(-45, Z, 'relative');
|
||||
};
|
||||
|
||||
my $on_action_scale = sub {
|
||||
$self->changescale(undef);
|
||||
};
|
||||
|
||||
my $on_action_split = sub {
|
||||
$self->split_object;
|
||||
};
|
||||
|
||||
my $on_action_cut = sub {
|
||||
$self->object_cut_dialog;
|
||||
};
|
||||
|
||||
my $on_action_settings = sub {
|
||||
$self->object_settings_dialog;
|
||||
};
|
||||
|
||||
my $on_action_layersediting = sub {
|
||||
my $state = Slic3r::GUI::_3DScene::is_toolbar_item_pressed($self->{canvas3D}, "layersediting");
|
||||
$self->on_layer_editing_toggled($state);
|
||||
};
|
||||
#======================================================================================================================================================
|
||||
|
||||
# Initialize 3D plater
|
||||
if ($Slic3r::GUI::have_OpenGL) {
|
||||
$self->{canvas3D} = Slic3r::GUI::Plater::3D->new($self->{preview_notebook}, $self->{objects}, $self->{model}, $self->{print}, $self->{config});
|
||||
|
@ -179,6 +235,21 @@ sub new {
|
|||
Slic3r::GUI::_3DScene::register_on_gizmo_scale_uniformly_callback($self->{canvas3D}, $on_gizmo_scale_uniformly);
|
||||
Slic3r::GUI::_3DScene::register_on_gizmo_rotate_callback($self->{canvas3D}, $on_gizmo_rotate);
|
||||
Slic3r::GUI::_3DScene::register_on_update_geometry_info_callback($self->{canvas3D}, $on_update_geometry_info);
|
||||
#======================================================================================================================================================
|
||||
Slic3r::GUI::_3DScene::register_action_add_callback($self->{canvas3D}, $on_action_add);
|
||||
Slic3r::GUI::_3DScene::register_action_delete_callback($self->{canvas3D}, $on_action_delete);
|
||||
Slic3r::GUI::_3DScene::register_action_deleteall_callback($self->{canvas3D}, $on_action_deleteall);
|
||||
Slic3r::GUI::_3DScene::register_action_arrange_callback($self->{canvas3D}, $on_action_arrange);
|
||||
Slic3r::GUI::_3DScene::register_action_more_callback($self->{canvas3D}, $on_action_more);
|
||||
Slic3r::GUI::_3DScene::register_action_fewer_callback($self->{canvas3D}, $on_action_fewer);
|
||||
Slic3r::GUI::_3DScene::register_action_ccw45_callback($self->{canvas3D}, $on_action_ccw45);
|
||||
Slic3r::GUI::_3DScene::register_action_cw45_callback($self->{canvas3D}, $on_action_cw45);
|
||||
Slic3r::GUI::_3DScene::register_action_scale_callback($self->{canvas3D}, $on_action_scale);
|
||||
Slic3r::GUI::_3DScene::register_action_split_callback($self->{canvas3D}, $on_action_split);
|
||||
Slic3r::GUI::_3DScene::register_action_cut_callback($self->{canvas3D}, $on_action_cut);
|
||||
Slic3r::GUI::_3DScene::register_action_settings_callback($self->{canvas3D}, $on_action_settings);
|
||||
Slic3r::GUI::_3DScene::register_action_layersediting_callback($self->{canvas3D}, $on_action_layersediting);
|
||||
#======================================================================================================================================================
|
||||
Slic3r::GUI::_3DScene::enable_gizmos($self->{canvas3D}, 1);
|
||||
#======================================================================================================================================================
|
||||
Slic3r::GUI::_3DScene::enable_toolbar($self->{canvas3D}, 1);
|
||||
|
@ -2098,25 +2169,32 @@ sub object_list_changed {
|
|||
|
||||
# Enable/disable buttons depending on whether there are any objects on the platter.
|
||||
my $have_objects = @{$self->{objects}} ? 1 : 0;
|
||||
my $variable_layer_height_allowed = $self->{config}->variable_layer_height && Slic3r::GUI::_3DScene::is_layers_editing_allowed($self->{canvas3D});
|
||||
#===================================================================================================================================================
|
||||
# my $variable_layer_height_allowed = $self->{config}->variable_layer_height && Slic3r::GUI::_3DScene::is_layers_editing_allowed($self->{canvas3D});
|
||||
#===================================================================================================================================================
|
||||
if ($self->{htoolbar}) {
|
||||
# On OSX or Linux
|
||||
$self->{htoolbar}->EnableTool($_, $have_objects)
|
||||
for (TB_RESET, TB_ARRANGE, TB_LAYER_EDITING);
|
||||
$self->{htoolbar}->EnableTool(TB_LAYER_EDITING, 0) if (! $variable_layer_height_allowed);
|
||||
#===================================================================================================================================================
|
||||
for (TB_RESET, TB_ARRANGE);
|
||||
# for (TB_RESET, TB_ARRANGE, TB_LAYER_EDITING);
|
||||
# $self->{htoolbar}->EnableTool(TB_LAYER_EDITING, 0) if (! $variable_layer_height_allowed);
|
||||
#===================================================================================================================================================
|
||||
} else {
|
||||
# On MSW
|
||||
my $method = $have_objects ? 'Enable' : 'Disable';
|
||||
$self->{"btn_$_"}->$method
|
||||
for grep $self->{"btn_$_"}, qw(reset arrange reslice export_gcode export_stl print send_gcode layer_editing);
|
||||
$self->{"btn_layer_editing"}->Disable if (! $variable_layer_height_allowed);
|
||||
#===================================================================================================================================================
|
||||
for grep $self->{"btn_$_"}, qw(reset arrange reslice export_gcode export_stl print send_gcode);
|
||||
# for grep $self->{"btn_$_"}, qw(reset arrange reslice export_gcode export_stl print send_gcode layer_editing);
|
||||
# $self->{"btn_layer_editing"}->Disable if (! $variable_layer_height_allowed);
|
||||
#===================================================================================================================================================
|
||||
}
|
||||
|
||||
#===================================================================================================================================================
|
||||
for my $toolbar_item (qw(deleteall arrange layersediting)) {
|
||||
for my $toolbar_item (qw(deleteall arrange)) {
|
||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, $toolbar_item, $have_objects);
|
||||
}
|
||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, "layersediting", 0) if (! $variable_layer_height_allowed);
|
||||
#===================================================================================================================================================
|
||||
|
||||
my $export_in_progress = $self->{export_gcode_output_file} || $self->{send_gcode_file};
|
||||
|
@ -2132,23 +2210,41 @@ sub selection_changed {
|
|||
my ($self) = @_;
|
||||
my ($obj_idx, $object) = $self->selected_object;
|
||||
my $have_sel = defined $obj_idx;
|
||||
#===================================================================================================================================================
|
||||
my $layers_height_allowed = $self->{config}->variable_layer_height && Slic3r::GUI::_3DScene::is_layers_editing_allowed($self->{canvas3D}) && $have_sel;
|
||||
#===================================================================================================================================================
|
||||
|
||||
$self->{right_panel}->Freeze;
|
||||
if ($self->{htoolbar}) {
|
||||
# On OSX or Linux
|
||||
$self->{htoolbar}->EnableTool($_, $have_sel)
|
||||
for (TB_REMOVE, TB_MORE, TB_FEWER, TB_45CW, TB_45CCW, TB_SCALE, TB_SPLIT, TB_CUT, TB_SETTINGS);
|
||||
|
||||
#===================================================================================================================================================
|
||||
$self->{htoolbar}->EnableTool(TB_LAYER_EDITING, $layers_height_allowed);
|
||||
#===================================================================================================================================================
|
||||
|
||||
} else {
|
||||
# On MSW
|
||||
my $method = $have_sel ? 'Enable' : 'Disable';
|
||||
$self->{"btn_$_"}->$method
|
||||
for grep $self->{"btn_$_"}, qw(remove increase decrease rotate45cw rotate45ccw changescale split cut settings);
|
||||
|
||||
#===================================================================================================================================================
|
||||
if ($layers_height_allowed) {
|
||||
$self->{"btn_layer_editing"}->Enable;
|
||||
} else {
|
||||
$self->{"btn_layer_editing"}->Disable;
|
||||
}
|
||||
#===================================================================================================================================================
|
||||
}
|
||||
|
||||
#===================================================================================================================================================
|
||||
for my $toolbar_item (qw(delete more fewer ccw45 cw45 scale split cut settings)) {
|
||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, $toolbar_item, $have_sel);
|
||||
}
|
||||
|
||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, "layersediting", $layers_height_allowed);
|
||||
#===================================================================================================================================================
|
||||
|
||||
if ($self->{object_info_size}) { # have we already loaded the info pane?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue