mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 12:11:15 -06:00 
			
		
		
		
	Merge branch 'opengl_to_cpp' of https://github.com/prusa3d/Slic3r into gizmos_3d
This commit is contained in:
		
						commit
						da42b42a6c
					
				
					 14 changed files with 1989 additions and 192 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; | ||||
| } | ||||
| 
 | ||||
|  | @ -1919,23 +1990,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; | ||||
|  | @ -2103,20 +2176,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 | ||||
|  | @ -2130,17 +2204,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
	
	 Enrico Turri
						Enrico Turri