mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-21 21:58:03 -06:00
Merge branch 'gizmos_3d' of https://github.com/prusa3d/Slic3r into dev
This commit is contained in:
commit
a5fcdeec23
263 changed files with 107595 additions and 693 deletions
|
@ -159,7 +159,61 @@ 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,7 +233,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);
|
||||
Slic3r::GUI::_3DScene::enable_shader($self->{canvas3D}, 1);
|
||||
Slic3r::GUI::_3DScene::enable_force_zoom_to_bed($self->{canvas3D}, 1);
|
||||
|
||||
|
@ -248,50 +316,50 @@ sub new {
|
|||
}
|
||||
});
|
||||
|
||||
# toolbar for object manipulation
|
||||
if (!&Wx::wxMSW) {
|
||||
Wx::ToolTip::Enable(1);
|
||||
$self->{htoolbar} = Wx::ToolBar->new($self, -1, wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL | wxTB_TEXT | wxBORDER_SIMPLE | wxTAB_TRAVERSAL);
|
||||
$self->{htoolbar}->AddTool(TB_ADD, L("Add…"), Wx::Bitmap->new(Slic3r::var("brick_add.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddTool(TB_REMOVE, L("Delete"), Wx::Bitmap->new(Slic3r::var("brick_delete.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddTool(TB_RESET, L("Delete All"), Wx::Bitmap->new(Slic3r::var("cross.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddTool(TB_ARRANGE, L("Arrange"), Wx::Bitmap->new(Slic3r::var("bricks.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddSeparator;
|
||||
$self->{htoolbar}->AddTool(TB_MORE, L("More"), Wx::Bitmap->new(Slic3r::var("add.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddTool(TB_FEWER, L("Fewer"), Wx::Bitmap->new(Slic3r::var("delete.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddSeparator;
|
||||
$self->{htoolbar}->AddTool(TB_45CCW, L("45° ccw"), Wx::Bitmap->new(Slic3r::var("arrow_rotate_anticlockwise.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddTool(TB_45CW, L("45° cw"), Wx::Bitmap->new(Slic3r::var("arrow_rotate_clockwise.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddTool(TB_SCALE, L("Scale…"), Wx::Bitmap->new(Slic3r::var("arrow_out.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddTool(TB_SPLIT, L("Split"), Wx::Bitmap->new(Slic3r::var("shape_ungroup.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddTool(TB_CUT, L("Cut…"), Wx::Bitmap->new(Slic3r::var("package.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddSeparator;
|
||||
$self->{htoolbar}->AddTool(TB_SETTINGS, L("Settings…"), Wx::Bitmap->new(Slic3r::var("cog.png"), wxBITMAP_TYPE_PNG), '');
|
||||
$self->{htoolbar}->AddTool(TB_LAYER_EDITING, L('Layer Editing'), Wx::Bitmap->new(Slic3r::var("variable_layer_height.png"), wxBITMAP_TYPE_PNG), wxNullBitmap, 1, 0, 'Layer Editing');
|
||||
} else {
|
||||
my %tbar_buttons = (
|
||||
add => L("Add…"),
|
||||
remove => L("Delete"),
|
||||
reset => L("Delete All"),
|
||||
arrange => L("Arrange"),
|
||||
increase => "",
|
||||
decrease => "",
|
||||
rotate45ccw => "",
|
||||
rotate45cw => "",
|
||||
changescale => L("Scale…"),
|
||||
split => L("Split"),
|
||||
cut => L("Cut…"),
|
||||
settings => L("Settings…"),
|
||||
layer_editing => L("Layer editing"),
|
||||
);
|
||||
$self->{btoolbar} = Wx::BoxSizer->new(wxHORIZONTAL);
|
||||
for (qw(add remove reset arrange increase decrease rotate45ccw rotate45cw changescale split cut settings)) {
|
||||
$self->{"btn_$_"} = Wx::Button->new($self, -1, $tbar_buttons{$_}, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
|
||||
$self->{btoolbar}->Add($self->{"btn_$_"});
|
||||
}
|
||||
$self->{"btn_layer_editing"} = Wx::ToggleButton->new($self, -1, $tbar_buttons{'layer_editing'}, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
|
||||
$self->{btoolbar}->Add($self->{"btn_layer_editing"});
|
||||
}
|
||||
# # toolbar for object manipulation
|
||||
# if (!&Wx::wxMSW) {
|
||||
# Wx::ToolTip::Enable(1);
|
||||
# $self->{htoolbar} = Wx::ToolBar->new($self, -1, wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL | wxTB_TEXT | wxBORDER_SIMPLE | wxTAB_TRAVERSAL);
|
||||
# $self->{htoolbar}->AddTool(TB_ADD, L("Add…"), Wx::Bitmap->new(Slic3r::var("brick_add.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddTool(TB_REMOVE, L("Delete"), Wx::Bitmap->new(Slic3r::var("brick_delete.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddTool(TB_RESET, L("Delete All"), Wx::Bitmap->new(Slic3r::var("cross.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddTool(TB_ARRANGE, L("Arrange"), Wx::Bitmap->new(Slic3r::var("bricks.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddSeparator;
|
||||
# $self->{htoolbar}->AddTool(TB_MORE, L("More"), Wx::Bitmap->new(Slic3r::var("add.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddTool(TB_FEWER, L("Fewer"), Wx::Bitmap->new(Slic3r::var("delete.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddSeparator;
|
||||
# $self->{htoolbar}->AddTool(TB_45CCW, L("45° ccw"), Wx::Bitmap->new(Slic3r::var("arrow_rotate_anticlockwise.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddTool(TB_45CW, L("45° cw"), Wx::Bitmap->new(Slic3r::var("arrow_rotate_clockwise.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddTool(TB_SCALE, L("Scale…"), Wx::Bitmap->new(Slic3r::var("arrow_out.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddTool(TB_SPLIT, L("Split"), Wx::Bitmap->new(Slic3r::var("shape_ungroup.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddTool(TB_CUT, L("Cut…"), Wx::Bitmap->new(Slic3r::var("package.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddSeparator;
|
||||
# $self->{htoolbar}->AddTool(TB_SETTINGS, L("Settings…"), Wx::Bitmap->new(Slic3r::var("cog.png"), wxBITMAP_TYPE_PNG), '');
|
||||
# $self->{htoolbar}->AddTool(TB_LAYER_EDITING, L('Layer Editing'), Wx::Bitmap->new(Slic3r::var("variable_layer_height.png"), wxBITMAP_TYPE_PNG), wxNullBitmap, 1, 0, 'Layer Editing');
|
||||
# } else {
|
||||
# my %tbar_buttons = (
|
||||
# add => L("Add…"),
|
||||
# remove => L("Delete"),
|
||||
# reset => L("Delete All"),
|
||||
# arrange => L("Arrange"),
|
||||
# increase => "",
|
||||
# decrease => "",
|
||||
# rotate45ccw => "",
|
||||
# rotate45cw => "",
|
||||
# changescale => L("Scale…"),
|
||||
# split => L("Split"),
|
||||
# cut => L("Cut…"),
|
||||
# settings => L("Settings…"),
|
||||
# layer_editing => L("Layer editing"),
|
||||
# );
|
||||
# $self->{btoolbar} = Wx::BoxSizer->new(wxHORIZONTAL);
|
||||
# for (qw(add remove reset arrange increase decrease rotate45ccw rotate45cw changescale split cut settings)) {
|
||||
# $self->{"btn_$_"} = Wx::Button->new($self, -1, $tbar_buttons{$_}, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
|
||||
# $self->{btoolbar}->Add($self->{"btn_$_"});
|
||||
# }
|
||||
# $self->{"btn_layer_editing"} = Wx::ToggleButton->new($self, -1, $tbar_buttons{'layer_editing'}, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
|
||||
# $self->{btoolbar}->Add($self->{"btn_layer_editing"});
|
||||
# }
|
||||
|
||||
### Panel for right column
|
||||
$self->{right_panel} = Wx::Panel->new($self, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||
|
@ -371,39 +439,39 @@ sub new {
|
|||
EVT_BUTTON($self, $self->{btn_reslice}, \&reslice);
|
||||
EVT_BUTTON($self, $self->{btn_export_stl}, \&export_stl);
|
||||
|
||||
if ($self->{htoolbar}) {
|
||||
EVT_TOOL($self, TB_ADD, sub { $self->add; });
|
||||
EVT_TOOL($self, TB_REMOVE, sub { $self->remove() }); # explicitly pass no argument to remove
|
||||
EVT_TOOL($self, TB_RESET, sub { $self->reset; });
|
||||
EVT_TOOL($self, TB_ARRANGE, sub { $self->arrange; });
|
||||
EVT_TOOL($self, TB_MORE, sub { $self->increase; });
|
||||
EVT_TOOL($self, TB_FEWER, sub { $self->decrease; });
|
||||
EVT_TOOL($self, TB_45CW, sub { $_[0]->rotate(-45, Z, 'relative') });
|
||||
EVT_TOOL($self, TB_45CCW, sub { $_[0]->rotate(45, Z, 'relative') });
|
||||
EVT_TOOL($self, TB_SCALE, sub { $self->changescale(undef); });
|
||||
EVT_TOOL($self, TB_SPLIT, sub { $self->split_object; });
|
||||
EVT_TOOL($self, TB_CUT, sub { $_[0]->object_cut_dialog });
|
||||
EVT_TOOL($self, TB_SETTINGS, sub { $_[0]->object_settings_dialog });
|
||||
EVT_TOOL($self, TB_LAYER_EDITING, sub {
|
||||
my $state = Slic3r::GUI::_3DScene::is_layers_editing_enabled($self->{canvas3D});
|
||||
$self->{htoolbar}->ToggleTool(TB_LAYER_EDITING, ! $state);
|
||||
$self->on_layer_editing_toggled(! $state);
|
||||
});
|
||||
} else {
|
||||
EVT_BUTTON($self, $self->{btn_add}, sub { $self->add; });
|
||||
EVT_BUTTON($self, $self->{btn_remove}, sub { $self->remove() }); # explicitly pass no argument to remove
|
||||
EVT_BUTTON($self, $self->{btn_reset}, sub { $self->reset; });
|
||||
EVT_BUTTON($self, $self->{btn_arrange}, sub { $self->arrange; });
|
||||
EVT_BUTTON($self, $self->{btn_increase}, sub { $self->increase; });
|
||||
EVT_BUTTON($self, $self->{btn_decrease}, sub { $self->decrease; });
|
||||
EVT_BUTTON($self, $self->{btn_rotate45cw}, sub { $_[0]->rotate(-45, Z, 'relative') });
|
||||
EVT_BUTTON($self, $self->{btn_rotate45ccw}, sub { $_[0]->rotate(45, Z, 'relative') });
|
||||
EVT_BUTTON($self, $self->{btn_changescale}, sub { $self->changescale(undef); });
|
||||
EVT_BUTTON($self, $self->{btn_split}, sub { $self->split_object; });
|
||||
EVT_BUTTON($self, $self->{btn_cut}, sub { $_[0]->object_cut_dialog });
|
||||
EVT_BUTTON($self, $self->{btn_settings}, sub { $_[0]->object_settings_dialog });
|
||||
EVT_TOGGLEBUTTON($self, $self->{btn_layer_editing}, sub { $self->on_layer_editing_toggled($self->{btn_layer_editing}->GetValue); });
|
||||
}
|
||||
# if ($self->{htoolbar}) {
|
||||
# EVT_TOOL($self, TB_ADD, sub { $self->add; });
|
||||
# EVT_TOOL($self, TB_REMOVE, sub { $self->remove() }); # explicitly pass no argument to remove
|
||||
# EVT_TOOL($self, TB_RESET, sub { $self->reset; });
|
||||
# EVT_TOOL($self, TB_ARRANGE, sub { $self->arrange; });
|
||||
# EVT_TOOL($self, TB_MORE, sub { $self->increase; });
|
||||
# EVT_TOOL($self, TB_FEWER, sub { $self->decrease; });
|
||||
# EVT_TOOL($self, TB_45CW, sub { $_[0]->rotate(-45, Z, 'relative') });
|
||||
# EVT_TOOL($self, TB_45CCW, sub { $_[0]->rotate(45, Z, 'relative') });
|
||||
# EVT_TOOL($self, TB_SCALE, sub { $self->changescale(undef); });
|
||||
# EVT_TOOL($self, TB_SPLIT, sub { $self->split_object; });
|
||||
# EVT_TOOL($self, TB_CUT, sub { $_[0]->object_cut_dialog });
|
||||
# EVT_TOOL($self, TB_SETTINGS, sub { $_[0]->object_settings_dialog });
|
||||
# EVT_TOOL($self, TB_LAYER_EDITING, sub {
|
||||
# my $state = Slic3r::GUI::_3DScene::is_layers_editing_enabled($self->{canvas3D});
|
||||
# $self->{htoolbar}->ToggleTool(TB_LAYER_EDITING, ! $state);
|
||||
# $self->on_layer_editing_toggled(! $state);
|
||||
# });
|
||||
# } else {
|
||||
# EVT_BUTTON($self, $self->{btn_add}, sub { $self->add; });
|
||||
# EVT_BUTTON($self, $self->{btn_remove}, sub { $self->remove() }); # explicitly pass no argument to remove
|
||||
# EVT_BUTTON($self, $self->{btn_reset}, sub { $self->reset; });
|
||||
# EVT_BUTTON($self, $self->{btn_arrange}, sub { $self->arrange; });
|
||||
# EVT_BUTTON($self, $self->{btn_increase}, sub { $self->increase; });
|
||||
# EVT_BUTTON($self, $self->{btn_decrease}, sub { $self->decrease; });
|
||||
# EVT_BUTTON($self, $self->{btn_rotate45cw}, sub { $_[0]->rotate(-45, Z, 'relative') });
|
||||
# EVT_BUTTON($self, $self->{btn_rotate45ccw}, sub { $_[0]->rotate(45, Z, 'relative') });
|
||||
# EVT_BUTTON($self, $self->{btn_changescale}, sub { $self->changescale(undef); });
|
||||
# EVT_BUTTON($self, $self->{btn_split}, sub { $self->split_object; });
|
||||
# EVT_BUTTON($self, $self->{btn_cut}, sub { $_[0]->object_cut_dialog });
|
||||
# EVT_BUTTON($self, $self->{btn_settings}, sub { $_[0]->object_settings_dialog });
|
||||
# EVT_TOGGLEBUTTON($self, $self->{btn_layer_editing}, sub { $self->on_layer_editing_toggled($self->{btn_layer_editing}->GetValue); });
|
||||
# }
|
||||
|
||||
$_->SetDropTarget(Slic3r::GUI::Plater::DropTarget->new($self))
|
||||
for grep defined($_),
|
||||
|
@ -560,10 +628,10 @@ sub new {
|
|||
my $hsizer = Wx::BoxSizer->new(wxHORIZONTAL);
|
||||
$hsizer->Add($self->{preview_notebook}, 1, wxEXPAND | wxTOP, 1);
|
||||
$hsizer->Add($self->{right_panel}, 0, wxEXPAND | wxLEFT | wxRIGHT, 3);
|
||||
|
||||
|
||||
my $sizer = Wx::BoxSizer->new(wxVERTICAL);
|
||||
$sizer->Add($self->{htoolbar}, 0, wxEXPAND, 0) if $self->{htoolbar};
|
||||
$sizer->Add($self->{btoolbar}, 0, wxEXPAND, 0) if $self->{btoolbar};
|
||||
# $sizer->Add($self->{htoolbar}, 0, wxEXPAND, 0) if $self->{htoolbar};
|
||||
# $sizer->Add($self->{btoolbar}, 0, wxEXPAND, 0) if $self->{btoolbar};
|
||||
$sizer->Add($hsizer, 1, wxEXPAND, 0);
|
||||
|
||||
$sizer->SetSizeHints($self);
|
||||
|
@ -629,13 +697,14 @@ sub on_layer_editing_toggled {
|
|||
Slic3r::GUI::_3DScene::enable_layers_editing($self->{canvas3D}, $new_state);
|
||||
if ($new_state && ! Slic3r::GUI::_3DScene::is_layers_editing_enabled($self->{canvas3D})) {
|
||||
# Initialization of the OpenGL shaders failed. Disable the tool.
|
||||
if ($self->{htoolbar}) {
|
||||
$self->{htoolbar}->EnableTool(TB_LAYER_EDITING, 0);
|
||||
$self->{htoolbar}->ToggleTool(TB_LAYER_EDITING, 0);
|
||||
} else {
|
||||
$self->{"btn_layer_editing"}->Disable;
|
||||
$self->{"btn_layer_editing"}->SetValue(0);
|
||||
}
|
||||
# if ($self->{htoolbar}) {
|
||||
# $self->{htoolbar}->EnableTool(TB_LAYER_EDITING, 0);
|
||||
# $self->{htoolbar}->ToggleTool(TB_LAYER_EDITING, 0);
|
||||
# } else {
|
||||
# $self->{"btn_layer_editing"}->Disable;
|
||||
# $self->{"btn_layer_editing"}->SetValue(0);
|
||||
# }
|
||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, "layersediting", 0);
|
||||
}
|
||||
$self->{canvas3D}->Refresh;
|
||||
$self->{canvas3D}->Update;
|
||||
|
@ -950,6 +1019,8 @@ sub increase {
|
|||
} else {
|
||||
$self->update;
|
||||
}
|
||||
|
||||
$self->selection_changed; # refresh info (size, volume etc.)
|
||||
$self->schedule_background_process;
|
||||
}
|
||||
|
||||
|
@ -1126,8 +1197,7 @@ sub changescale {
|
|||
my $model_object = $self->{model}->objects->[$obj_idx];
|
||||
my $model_instance = $model_object->instances->[0];
|
||||
|
||||
my $object_size = $model_object->bounding_box->size;
|
||||
my $bed_size = Slic3r::Polygon->new_scale(@{$self->{config}->bed_shape})->bounding_box->size;
|
||||
my $object_size = $model_object->instance_bounding_box(0)->size;
|
||||
|
||||
if (defined $axis) {
|
||||
my $axis_name = $axis == X ? 'X' : $axis == Y ? 'Y' : 'Z';
|
||||
|
@ -1135,7 +1205,7 @@ sub changescale {
|
|||
if ($tosize) {
|
||||
my $cursize = $object_size->[$axis];
|
||||
my $newsize = $self->_get_number_from_user(
|
||||
sprintf(L('Enter the new size for the selected object (print bed: %smm):'), unscale($bed_size->[$axis])),
|
||||
L('Enter the new size for the selected object:'),
|
||||
L("Scale along ").$axis_name, L('Invalid scaling value entered'), $cursize, 1);
|
||||
return if $newsize eq '';
|
||||
$scale = $newsize / $cursize * 100;
|
||||
|
@ -1291,7 +1361,9 @@ sub async_apply_config {
|
|||
|
||||
# We also need to reload 3D scene because of the wipe tower preview box
|
||||
if ($self->{config}->wipe_tower) {
|
||||
Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1) if $self->{canvas3D}
|
||||
my $selections = $self->collect_selections;
|
||||
Slic3r::GUI::_3DScene::set_objects_selections($self->{canvas3D}, \@$selections);
|
||||
Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1) if $self->{canvas3D}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1507,6 +1579,8 @@ sub on_process_completed {
|
|||
$self->{preview3D}->reload_print if $self->{preview3D};
|
||||
|
||||
# in case this was MM print, wipe tower bounding box on 3D tab might need redrawing with exact depth:
|
||||
my $selections = $self->collect_selections;
|
||||
Slic3r::GUI::_3DScene::set_objects_selections($self->{canvas3D}, \@$selections);
|
||||
Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1);
|
||||
|
||||
# if we have an export filename, start a new thread for exporting G-code
|
||||
|
@ -1920,23 +1994,25 @@ sub on_config_change {
|
|||
$self->Layout;
|
||||
} elsif ($opt_key eq 'variable_layer_height') {
|
||||
if ($config->get('variable_layer_height') != 1) {
|
||||
if ($self->{htoolbar}) {
|
||||
$self->{htoolbar}->EnableTool(TB_LAYER_EDITING, 0);
|
||||
$self->{htoolbar}->ToggleTool(TB_LAYER_EDITING, 0);
|
||||
} else {
|
||||
$self->{"btn_layer_editing"}->Disable;
|
||||
$self->{"btn_layer_editing"}->SetValue(0);
|
||||
}
|
||||
# if ($self->{htoolbar}) {
|
||||
# $self->{htoolbar}->EnableTool(TB_LAYER_EDITING, 0);
|
||||
# $self->{htoolbar}->ToggleTool(TB_LAYER_EDITING, 0);
|
||||
# } else {
|
||||
# $self->{"btn_layer_editing"}->Disable;
|
||||
# $self->{"btn_layer_editing"}->SetValue(0);
|
||||
# }
|
||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, "layersediting", 0);
|
||||
Slic3r::GUI::_3DScene::enable_layers_editing($self->{canvas3D}, 0);
|
||||
$self->{canvas3D}->Refresh;
|
||||
$self->{canvas3D}->Update;
|
||||
} elsif (Slic3r::GUI::_3DScene::is_layers_editing_allowed($self->{canvas3D})) {
|
||||
# Want to allow the layer editing, but do it only if the OpenGL supports it.
|
||||
if ($self->{htoolbar}) {
|
||||
$self->{htoolbar}->EnableTool(TB_LAYER_EDITING, 1);
|
||||
} else {
|
||||
$self->{"btn_layer_editing"}->Enable;
|
||||
}
|
||||
# if ($self->{htoolbar}) {
|
||||
# $self->{htoolbar}->EnableTool(TB_LAYER_EDITING, 1);
|
||||
# } else {
|
||||
# $self->{"btn_layer_editing"}->Enable;
|
||||
# }
|
||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, "layersediting", 1);
|
||||
}
|
||||
} elsif ($opt_key eq 'extruder_colour') {
|
||||
$update_scheduled = 1;
|
||||
|
@ -2104,20 +2180,21 @@ 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});
|
||||
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);
|
||||
} 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);
|
||||
}
|
||||
# if ($self->{htoolbar}) {
|
||||
# # On OSX or Linux
|
||||
# $self->{htoolbar}->EnableTool($_, $have_objects)
|
||||
# for (TB_RESET, TB_ARRANGE);
|
||||
# } 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);
|
||||
# }
|
||||
|
||||
for my $toolbar_item (qw(deleteall arrange)) {
|
||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, $toolbar_item, $have_objects);
|
||||
}
|
||||
|
||||
my $export_in_progress = $self->{export_gcode_output_file} || $self->{send_gcode_file};
|
||||
my $model_fits = $self->{canvas3D} ? Slic3r::GUI::_3DScene::check_volumes_outside_state($self->{canvas3D}, $self->{config}) : 1;
|
||||
# $model_fits == 1 -> ModelInstance::PVS_Partly_Outside
|
||||
|
@ -2131,17 +2208,56 @@ 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);
|
||||
} 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 ($self->{htoolbar}) {
|
||||
# # On OSX or Linux
|
||||
# $self->{htoolbar}->EnableTool($_, $have_sel)
|
||||
# for (TB_REMOVE, TB_MORE, TB_45CW, TB_45CCW, TB_SCALE, TB_SPLIT, TB_CUT, TB_SETTINGS);
|
||||
#
|
||||
# $self->{htoolbar}->EnableTool(TB_LAYER_EDITING, $layers_height_allowed);
|
||||
#
|
||||
# if ($have_sel) {
|
||||
# my $model_object = $self->{model}->objects->[$obj_idx];
|
||||
# $self->{htoolbar}->EnableTool(TB_FEWER, $model_object->instances_count > 1);
|
||||
# } else {
|
||||
# $self->{htoolbar}->EnableTool(TB_FEWER, 0);
|
||||
# }
|
||||
#
|
||||
# } else {
|
||||
# # On MSW
|
||||
# my $method = $have_sel ? 'Enable' : 'Disable';
|
||||
# $self->{"btn_$_"}->$method
|
||||
# for grep $self->{"btn_$_"}, qw(remove increase rotate45cw rotate45ccw changescale split cut settings);
|
||||
#
|
||||
# if ($layers_height_allowed) {
|
||||
# $self->{"btn_layer_editing"}->Enable;
|
||||
# } else {
|
||||
# $self->{"btn_layer_editing"}->Disable;
|
||||
# }
|
||||
#
|
||||
# if ($have_sel) {
|
||||
# my $model_object = $self->{model}->objects->[$obj_idx];
|
||||
# if ($model_object->instances_count > 1) {
|
||||
# $self->{"btn_decrease"}->Enable;
|
||||
# } else {
|
||||
# $self->{"btn_decrease"}->Disable;
|
||||
# }
|
||||
# } else {
|
||||
# $self->{"btn_decrease"}->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 ($have_sel) {
|
||||
my $model_object = $self->{model}->objects->[$obj_idx];
|
||||
Slic3r::GUI::_3DScene::enable_toolbar_item($self->{canvas3D}, "fewer", $model_object->instances_count > 1);
|
||||
}
|
||||
|
||||
if ($self->{object_info_size}) { # have we already loaded the info pane?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue