diff options
author | bubnikv <bubnikv@gmail.com> | 2018-09-17 16:12:13 +0300 |
---|---|---|
committer | bubnikv <bubnikv@gmail.com> | 2018-09-17 16:12:13 +0300 |
commit | fe3b92870f217a3356094a0a6ad60b25ccf18996 (patch) | |
tree | dd9ebd271884eef3be0270cbb34809738950b390 /lib | |
parent | d934b63424ab76ddcd8a87f272838df611dfcd0c (diff) |
Merged with dev
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Slic3r/GUI.pm | 24 | ||||
-rw-r--r-- | lib/Slic3r/GUI/MainFrame.pm | 12 | ||||
-rw-r--r-- | lib/Slic3r/GUI/Plater.pm | 257 | ||||
-rw-r--r-- | lib/Slic3r/GUI/Plater/3DPreview.pm | 356 |
4 files changed, 371 insertions, 278 deletions
diff --git a/lib/Slic3r/GUI.pm b/lib/Slic3r/GUI.pm index 216be3441..31f614ba9 100644 --- a/lib/Slic3r/GUI.pm +++ b/lib/Slic3r/GUI.pm @@ -334,28 +334,4 @@ sub set_menu_item_icon { } } -sub save_window_pos { - my ($self, $window, $name) = @_; - - $self->{app_config}->set("${name}_pos", join ',', $window->GetScreenPositionXY); - $self->{app_config}->set("${name}_size", join ',', $window->GetSizeWH); - $self->{app_config}->set("${name}_maximized", $window->IsMaximized); - $self->{app_config}->save; -} - -sub restore_window_pos { - my ($self, $window, $name) = @_; - if ($self->{app_config}->has("${name}_pos")) { - my $size = [ split ',', $self->{app_config}->get("${name}_size"), 2 ]; - $window->SetSize($size); - - my $display = Wx::Display->new->GetClientArea(); - my $pos = [ split ',', $self->{app_config}->get("${name}_pos"), 2 ]; - if (($pos->[0] + $size->[0]/2) < $display->GetRight && ($pos->[1] + $size->[1]/2) < $display->GetBottom) { - $window->Move($pos); - } - $window->Maximize(1) if $self->{app_config}->get("${name}_maximized"); - } -} - 1; diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 3f023c06f..c1975cd5d 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -95,7 +95,7 @@ sub new { $self->Fit; $self->SetMinSize([760, 490]); $self->SetSize($self->GetMinSize); - wxTheApp->restore_window_pos($self, "main_frame"); + Slic3r::GUI::restore_window_size($self, "main_frame"); $self->Show; $self->Layout; } @@ -108,7 +108,7 @@ sub new { return; } # save window size - wxTheApp->save_window_pos($self, "main_frame"); + Slic3r::GUI::save_window_size($self, "main_frame"); # Save the slic3r.ini. Usually the ini file is saved from "on idle" callback, # but in rare cases it may not have been called yet. wxTheApp->{app_config}->save; @@ -207,10 +207,12 @@ sub _init_tabpanel { EVT_COMMAND($self, -1, $OBJECT_SELECTION_CHANGED_EVENT, sub { my ($self, $event) = @_; my $obj_idx = $event->GetId; - my $child = $event->GetInt == 1 ? 1 : undef; +# my $child = $event->GetInt == 1 ? 1 : undef; +# $self->{plater}->select_object($obj_idx < 0 ? undef: $obj_idx, $child); +# $self->{plater}->item_changed_selection($obj_idx); - $self->{plater}->select_object($obj_idx < 0 ? undef: $obj_idx, $child); - $self->{plater}->item_changed_selection($obj_idx); + my $vol_idx = $event->GetInt; + $self->{plater}->select_object_from_cpp($obj_idx < 0 ? undef: $obj_idx, $vol_idx<0 ? -1 : $vol_idx); }); # The following event is emited by the C++ GUI implementation on object settings change. diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index d55264112..5a8bf3f8a 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -104,10 +104,11 @@ sub new { # callback to enable/disable action buttons my $enable_action_buttons = sub { my ($enable) = @_; - $self->{btn_export_gcode}->Enable($enable); - $self->{btn_reslice}->Enable($enable); - $self->{btn_print}->Enable($enable); - $self->{btn_send_gcode}->Enable($enable); + Slic3r::GUI::enable_action_buttons($enable); +# $self->{btn_export_gcode}->Enable($enable); +# $self->{btn_reslice}->Enable($enable); +# $self->{btn_print}->Enable($enable); +# $self->{btn_send_gcode}->Enable($enable); }; # callback to react to gizmo scale @@ -230,7 +231,14 @@ sub new { my ($obj_idx, $object) = $self->selected_object; if (defined $obj_idx) { my $vol_idx = Slic3r::GUI::_3DScene::get_first_volume_id($self->{canvas3D}, $obj_idx); - Slic3r::GUI::_3DScene::select_volume($self->{canvas3D}, $vol_idx) if ($vol_idx != -1); + #Slic3r::GUI::_3DScene::select_volume($self->{canvas3D}, $vol_idx) if ($vol_idx != -1); + my $inst_cnt = $self->{model}->objects->[$obj_idx]->instances_count; + for (0..$inst_cnt-1){ + Slic3r::GUI::_3DScene::select_volume($self->{canvas3D}, $_ + $vol_idx) if ($vol_idx != -1); + } + + my $volume_idx = Slic3r::GUI::_3DScene::get_in_object_volume_id($self->{canvas3D}, $vol_idx); + Slic3r::GUI::select_current_volume($obj_idx, $volume_idx) if ($volume_idx != -1); } } }; @@ -368,26 +376,35 @@ sub new { # } ### Panel for right column -# $self->{right_panel} = Wx::Panel->new($self, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - $self->{right_panel} = Wx::ScrolledWindow->new($self, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - $self->{right_panel}->SetScrollbars(0, 1, 1, 1); + $self->{right_panel} = Wx::Panel->new($self, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); +# $self->{right_panel} = Wx::ScrolledWindow->new($self, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); +# $self->{right_panel}->SetScrollbars(0, 1, 1, 1); + + ### Scrolled Window for panel without "Export G-code" and "Slice now" buttons + my $scrolled_window_sizer = $self->{scrolled_window_sizer} = Wx::BoxSizer->new(wxVERTICAL); + $scrolled_window_sizer->SetMinSize([320, -1]); + my $scrolled_window_panel = $self->{scrolled_window_panel} = Wx::ScrolledWindow->new($self->{right_panel}, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + $scrolled_window_panel->SetSizer($scrolled_window_sizer); + $scrolled_window_panel->SetScrollbars(0, 1, 1, 1); # right pane buttons - $self->{btn_export_gcode} = Wx::Button->new($self->{right_panel}, -1, L("Export G-code…"), wxDefaultPosition, [-1, 30], wxNO_BORDER);#, wxBU_LEFT); - $self->{btn_reslice} = Wx::Button->new($self->{right_panel}, -1, L("Slice now"), wxDefaultPosition, [-1, 30], wxBU_LEFT); - $self->{btn_print} = Wx::Button->new($self->{right_panel}, -1, L("Print…"), wxDefaultPosition, [-1, 30], wxBU_LEFT); - $self->{btn_send_gcode} = Wx::Button->new($self->{right_panel}, -1, L("Send to printer"), wxDefaultPosition, [-1, 30], wxBU_LEFT); - $self->{btn_export_stl} = Wx::Button->new($self->{right_panel}, -1, L("Export STL…"), wxDefaultPosition, [-1, 30], wxBU_LEFT); + $self->{btn_export_gcode} = Wx::Button->new($self->{right_panel}, -1, L("Export G-code…"), wxDefaultPosition, [-1, 30],);# wxNO_BORDER);#, wxBU_LEFT); + $self->{btn_reslice} = Wx::Button->new($self->{right_panel}, -1, L("Slice now"), wxDefaultPosition, [-1, 30]);#, wxNO_BORDER);#, wxBU_LEFT); +# $self->{btn_print} = Wx::Button->new($self->{right_panel}, -1, L("Print…"), wxDefaultPosition, [-1, 30], wxBU_LEFT); +# $self->{btn_send_gcode} = Wx::Button->new($self->{right_panel}, -1, L("Send to printer"), wxDefaultPosition, [-1, 30], wxBU_LEFT); + $self->{btn_print} = Wx::Button->new($scrolled_window_panel, -1, L("Print…"), wxDefaultPosition, [-1, 30], wxBU_LEFT); + $self->{btn_send_gcode} = Wx::Button->new($scrolled_window_panel, -1, L("Send to printer"), wxDefaultPosition, [-1, 30], wxBU_LEFT); + #$self->{btn_export_stl} = Wx::Button->new($self->{right_panel}, -1, L("Export STL…"), wxDefaultPosition, [-1, 30], wxBU_LEFT); #$self->{btn_export_gcode}->SetFont($Slic3r::GUI::small_font); #$self->{btn_export_stl}->SetFont($Slic3r::GUI::small_font); $self->{btn_print}->Hide; $self->{btn_send_gcode}->Hide; # export_gcode cog_go.png +#! reslice reslice.png my %icons = qw( print arrow_up.png send_gcode arrow_up.png - reslice reslice.png export_stl brick_go.png ); for (grep $self->{"btn_$_"}, keys %icons) { @@ -494,9 +511,11 @@ sub new { # $self->{preset_choosers}{$group}[$idx] $self->{preset_choosers} = {}; for my $group (qw(print filament sla_material printer)) { - my $text = Wx::StaticText->new($self->{right_panel}, -1, "$group_labels{$group}:", wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); +# my $text = Wx::StaticText->new($self->{right_panel}, -1, "$group_labels{$group}:", wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); + my $text = Wx::StaticText->new($scrolled_window_panel, -1, "$group_labels{$group}:", wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); $text->SetFont($Slic3r::GUI::small_font); - my $choice = Wx::BitmapComboBox->new($self->{right_panel}, -1, "", wxDefaultPosition, wxDefaultSize, [], wxCB_READONLY); +# my $choice = Wx::BitmapComboBox->new($self->{right_panel}, -1, "", wxDefaultPosition, wxDefaultSize, [], wxCB_READONLY); + my $choice = Wx::BitmapComboBox->new($scrolled_window_panel, -1, "", wxDefaultPosition, wxDefaultSize, [], wxCB_READONLY); if ($group eq 'filament') { EVT_LEFT_DOWN($choice, sub { $self->filament_color_box_lmouse_down(0, @_); } ); } @@ -515,26 +534,13 @@ sub new { } my $frequently_changed_parameters_sizer = $self->{frequently_changed_parameters_sizer} = Wx::BoxSizer->new(wxVERTICAL); - Slic3r::GUI::add_frequently_changed_parameters($self->{right_panel}, $frequently_changed_parameters_sizer, $presets); - - my $expert_mode_part_sizer = Wx::BoxSizer->new(wxVERTICAL); - Slic3r::GUI::add_expert_mode_part( $self->{right_panel}, $expert_mode_part_sizer, - $self->{model}, - $self->{event_object_selection_changed}, - $self->{event_object_settings_changed}, - $self->{event_remove_object}, - $self->{event_update_scene}); -# if ($expert_mode_part_sizer->IsShown(2)==1) -# { -# $expert_mode_part_sizer->Layout; -# $expert_mode_part_sizer->Show(2, 0); # ? Why doesn't work -# $self->{right_panel}->Layout; -# } +#! Slic3r::GUI::add_frequently_changed_parameters($self->{right_panel}, $frequently_changed_parameters_sizer, $presets); + Slic3r::GUI::add_frequently_changed_parameters($self->{scrolled_window_panel}, $frequently_changed_parameters_sizer, $presets); my $object_info_sizer; { -# my $box = Wx::StaticBox->new($scrolled_window_panel, -1, L("Info")); - my $box = Wx::StaticBox->new($self->{right_panel}, -1, L("Info")); + my $box = Wx::StaticBox->new($scrolled_window_panel, -1, L("Info")); +# my $box = Wx::StaticBox->new($self->{right_panel}, -1, L("Info")); $box->SetFont($Slic3r::GUI::small_bold_font); $object_info_sizer = Wx::StaticBoxSizer->new($box, wxVERTICAL); $object_info_sizer->SetMinSize([300,-1]); @@ -554,25 +560,26 @@ sub new { ); while (my $field = shift @info) { my $label = shift @info; -# my $text = Wx::StaticText->new($scrolled_window_panel, -1, "$label:", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); - my $text = Wx::StaticText->new($self->{right_panel}, -1, "$label:", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + my $text = Wx::StaticText->new($scrolled_window_panel, -1, "$label:", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); +# my $text = Wx::StaticText->new($self->{right_panel}, -1, "$label:", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); $text->SetFont($Slic3r::GUI::small_font); #!$grid_sizer->Add($text, 0); -# $self->{"object_info_$field"} = Wx::StaticText->new($scrolled_window_panel, -1, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); - $self->{"object_info_$field"} = Wx::StaticText->new($self->{right_panel}, -1, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + $self->{"object_info_$field"} = Wx::StaticText->new($scrolled_window_panel, -1, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); +# $self->{"object_info_$field"} = Wx::StaticText->new($self->{right_panel}, -1, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); $self->{"object_info_$field"}->SetFont($Slic3r::GUI::small_font); if ($field eq 'manifold') { -# $self->{object_info_manifold_warning_icon} = Wx::StaticBitmap->new($scrolled_window_panel, -1, Wx::Bitmap->new(Slic3r::var("error.png"), wxBITMAP_TYPE_PNG)); - $self->{object_info_manifold_warning_icon} = Wx::StaticBitmap->new($self->{right_panel}, -1, Wx::Bitmap->new(Slic3r::var("error.png"), wxBITMAP_TYPE_PNG)); + $self->{object_info_manifold_warning_icon} = Wx::StaticBitmap->new($scrolled_window_panel, -1, Wx::Bitmap->new(Slic3r::var("error.png"), wxBITMAP_TYPE_PNG)); +# $self->{object_info_manifold_warning_icon} = Wx::StaticBitmap->new($self->{right_panel}, -1, Wx::Bitmap->new(Slic3r::var("error.png"), wxBITMAP_TYPE_PNG)); #$self->{object_info_manifold_warning_icon}->Hide; $self->{"object_info_manifold_warning_icon_show"} = sub { if ($self->{object_info_manifold_warning_icon}->IsShown() != $_[0]) { + # this fuction show/hide info_manifold_warning_icon on the c++ side now Slic3r::GUI::set_show_manifold_warning_icon($_[0]); - my $mode = wxTheApp->{app_config}->get("view_mode"); - return if ($mode eq "" || $mode eq "simple"); - $self->{object_info_manifold_warning_icon}->Show($_[0]); - $self->Layout + #my $mode = wxTheApp->{app_config}->get("view_mode"); + #return if ($mode eq "" || $mode eq "simple"); + #$self->{object_info_manifold_warning_icon}->Show($_[0]); + #$self->Layout } }; $self->{"object_info_manifold_warning_icon_show"}->(0); @@ -590,18 +597,19 @@ sub new { } } - my $print_info_sizer = $self->{print_info_sizer} = Wx::StaticBoxSizer->new( -# Wx::StaticBox->new($scrolled_window_panel, -1, L("Sliced Info")), wxVERTICAL); - Wx::StaticBox->new($self->{right_panel}, -1, L("Sliced Info")), wxVERTICAL); + my $print_info_box = Wx::StaticBox->new($scrolled_window_panel, -1, L("Sliced Info")); + $print_info_box->SetFont($Slic3r::GUI::small_bold_font); + my $print_info_sizer = $self->{print_info_sizer} = Wx::StaticBoxSizer->new($print_info_box, wxVERTICAL); +# Wx::StaticBox->new($self->{right_panel}, -1, L("Sliced Info")), wxVERTICAL); $print_info_sizer->SetMinSize([300,-1]); my $buttons_sizer = Wx::BoxSizer->new(wxHORIZONTAL); $self->{buttons_sizer} = $buttons_sizer; $buttons_sizer->AddStretchSpacer(1); - $buttons_sizer->Add($self->{btn_export_stl}, 0, wxALIGN_RIGHT, 0); - $buttons_sizer->Add($self->{btn_reslice}, 0, wxALIGN_RIGHT, 0); - $buttons_sizer->Add($self->{btn_print}, 0, wxALIGN_RIGHT, 0); - $buttons_sizer->Add($self->{btn_send_gcode}, 0, wxALIGN_RIGHT, 0); +# $buttons_sizer->Add($self->{btn_export_stl}, 0, wxALIGN_RIGHT, 0); +#! $buttons_sizer->Add($self->{btn_reslice}, 0, wxALIGN_RIGHT, 0); + $buttons_sizer->Add($self->{btn_print}, 0, wxALIGN_RIGHT | wxBOTTOM | wxTOP, 5); + $buttons_sizer->Add($self->{btn_send_gcode}, 0, wxALIGN_RIGHT | wxBOTTOM | wxTOP, 5); # $scrolled_window_sizer->Add($self->{list}, 1, wxEXPAND, 5); # $scrolled_window_sizer->Add($object_info_sizer, 0, wxEXPAND, 0); @@ -611,24 +619,39 @@ sub new { ### Sizer for info boxes my $info_sizer = $self->{info_sizer} = Wx::BoxSizer->new(wxVERTICAL); $info_sizer->SetMinSize([318, -1]); - $info_sizer->Add($object_info_sizer, 0, wxEXPAND | wxBOTTOM, 5); - $info_sizer->Add($print_info_sizer, 0, wxEXPAND | wxBOTTOM, 5); + $info_sizer->Add($object_info_sizer, 0, wxEXPAND | wxTOP, 20); + $info_sizer->Add($print_info_sizer, 0, wxEXPAND | wxTOP, 20); + + $scrolled_window_sizer->Add($presets, 0, wxEXPAND | wxLEFT, 2) if defined $presets; + $scrolled_window_sizer->Add($frequently_changed_parameters_sizer, 1, wxEXPAND | wxLEFT, 0) if defined $frequently_changed_parameters_sizer; + $scrolled_window_sizer->Add($buttons_sizer, 0, wxEXPAND, 0); + $scrolled_window_sizer->Add($info_sizer, 0, wxEXPAND | wxLEFT, 20); + # Show the box initially, let it be shown after the slicing is finished. + $self->print_info_box_show(0); + + ### Sizer for "Export G-code" & "Slice now" buttons + my $btns_sizer = Wx::BoxSizer->new(wxVERTICAL); + $btns_sizer->SetMinSize([318, -1]); + $btns_sizer->Add($self->{btn_reslice}, 0, wxEXPAND, 0); + $btns_sizer->Add($self->{btn_export_gcode}, 0, wxEXPAND | wxTOP, 5); my $right_sizer = Wx::BoxSizer->new(wxVERTICAL); $self->{right_panel}->SetSizer($right_sizer); $right_sizer->SetMinSize([320, -1]); - $right_sizer->Add($presets, 0, wxEXPAND | wxTOP, 10) if defined $presets; - $right_sizer->Add($frequently_changed_parameters_sizer, 1, wxEXPAND | wxTOP, 0) if defined $frequently_changed_parameters_sizer; - $right_sizer->Add($expert_mode_part_sizer, 0, wxEXPAND | wxTOP, 10) if defined $expert_mode_part_sizer; - $right_sizer->Add($buttons_sizer, 0, wxEXPAND | wxBOTTOM | wxTOP, 10); - $right_sizer->Add($info_sizer, 0, wxEXPAND | wxLEFT, 20); +#! $right_sizer->Add($presets, 0, wxEXPAND | wxTOP, 10) if defined $presets; +#! $right_sizer->Add($frequently_changed_parameters_sizer, 1, wxEXPAND | wxTOP, 0) if defined $frequently_changed_parameters_sizer; +#! $right_sizer->Add($buttons_sizer, 0, wxEXPAND | wxBOTTOM | wxTOP, 10); +#! $right_sizer->Add($info_sizer, 0, wxEXPAND | wxLEFT, 20); # Show the box initially, let it be shown after the slicing is finished. - $self->print_info_box_show(0); - $right_sizer->Add($self->{btn_export_gcode}, 0, wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, 20); +#! $self->print_info_box_show(0); + $right_sizer->Add($scrolled_window_panel, 1, wxEXPAND | wxTOP, 5); +# $right_sizer->Add($self->{btn_reslice}, 0, wxEXPAND | wxLEFT | wxTOP, 20); +# $right_sizer->Add($self->{btn_export_gcode}, 0, wxEXPAND | wxLEFT | wxTOP, 20); + $right_sizer->Add($btns_sizer, 0, wxEXPAND | wxLEFT | wxTOP, 20); 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); + $hsizer->Add($self->{right_panel}, 0, wxEXPAND | wxLEFT | wxRIGHT, 0);#3); my $sizer = Wx::BoxSizer->new(wxVERTICAL); # $sizer->Add($self->{htoolbar}, 0, wxEXPAND, 0) if $self->{htoolbar}; @@ -639,16 +662,21 @@ sub new { $self->SetSizer($sizer); # Send sizers/buttons to C++ - Slic3r::GUI::set_objects_from_perl( $self->{right_panel}, - $frequently_changed_parameters_sizer, - $expert_mode_part_sizer, - $info_sizer, - $self->{btn_export_gcode}, - $self->{btn_export_stl}, - $self->{btn_reslice}, - $self->{btn_print}, - $self->{btn_send_gcode}, - $self->{object_info_manifold_warning_icon} ); + Slic3r::GUI::set_objects_from_perl( $self->{scrolled_window_panel}, + $frequently_changed_parameters_sizer, + $info_sizer, + $self->{btn_export_gcode}, + # $self->{btn_export_stl}, + $self->{btn_reslice}, + $self->{btn_print}, + $self->{btn_send_gcode}, + $self->{object_info_manifold_warning_icon} ); + + Slic3r::GUI::set_model_events_from_perl( $self->{model}, + $self->{event_object_selection_changed}, + $self->{event_object_settings_changed}, + $self->{event_remove_object}, + $self->{event_update_scene}); } # Last correct selected item for each preset @@ -1594,14 +1622,16 @@ sub print_info_box_show { # my $scrolled_window_panel = $self->{scrolled_window_panel}; # my $scrolled_window_sizer = $self->{scrolled_window_sizer}; # return if (!$show && ($scrolled_window_sizer->IsShown(2) == $show)); - my $panel = $self->{right_panel}; + my $panel = $self->{scrolled_window_panel};#$self->{right_panel}; my $sizer = $self->{info_sizer}; - return if (!$sizer || !$show && ($sizer->IsShown(1) == $show)); +# return if (!$sizer || !$show && ($sizer->IsShown(1) == $show)); + return if (!$sizer); Slic3r::GUI::set_show_print_info($show); - return if (wxTheApp->{app_config}->get("view_mode") eq "simple"); +# return if (wxTheApp->{app_config}->get("view_mode") eq "simple"); - if ($show) { +# if ($show) + { my $print_info_sizer = $self->{print_info_sizer}; $print_info_sizer->Clear(1); my $grid_sizer = Wx::FlexGridSizer->new(2, 2, 5, 5); @@ -1609,20 +1639,37 @@ sub print_info_box_show { $grid_sizer->AddGrowableCol(1, 1); $grid_sizer->AddGrowableCol(3, 1); $print_info_sizer->Add($grid_sizer, 0, wxEXPAND); + my $is_wipe_tower = $self->{print}->total_wipe_tower_filament > 0; my @info = ( L("Used Filament (m)") - => sprintf("%.2f" , $self->{print}->total_used_filament / 1000), + => $is_wipe_tower ? + sprintf("%.2f (%.2f %s + %.2f %s)" , $self->{print}->total_used_filament / 1000, + ($self->{print}->total_used_filament - $self->{print}->total_wipe_tower_filament) / 1000, + L("objects"), + $self->{print}->total_wipe_tower_filament / 1000, + L("wipe tower")) : + sprintf("%.2f" , $self->{print}->total_used_filament / 1000), + L("Used Filament (mm³)") => sprintf("%.2f" , $self->{print}->total_extruded_volume), L("Used Filament (g)"), => sprintf("%.2f" , $self->{print}->total_weight), L("Cost"), - => sprintf("%.2f" , $self->{print}->total_cost), + => $is_wipe_tower ? + sprintf("%.2f (%.2f %s + %.2f %s)" , $self->{print}->total_cost, + ($self->{print}->total_cost - $self->{print}->total_wipe_tower_cost), + L("objects"), + $self->{print}->total_wipe_tower_cost, + L("wipe tower")) : + sprintf("%.2f" , $self->{print}->total_cost), L("Estimated printing time (normal mode)") => $self->{print}->estimated_normal_print_time, L("Estimated printing time (silent mode)") => $self->{print}->estimated_silent_print_time ); + # if there is a wipe tower, insert number of toolchanges info into the array: + splice (@info, 8, 0, L("Number of tool changes") => sprintf("%.d", $self->{print}->wipe_tower_number_of_toolchanges)) if ($is_wipe_tower); + while ( my $label = shift @info) { my $value = shift @info; next if $value eq "N/A"; @@ -1639,7 +1686,7 @@ sub print_info_box_show { # $scrolled_window_sizer->Show(2, $show); # $scrolled_window_panel->Layout; - $sizer->Show(1, $show); + $sizer->Show(1, $show && wxTheApp->{app_config}->get("view_mode") ne "simple"); $self->Layout; $panel->Refresh; @@ -1823,6 +1870,7 @@ sub _get_export_file { # (i.e. when an object is added/removed/moved/rotated/scaled) sub update { my ($self, $force_autocenter) = @_; + $self->Freeze; if (wxTheApp->{app_config}->get("autocenter") || $force_autocenter) { $self->{model}->center_instances_around_point($self->bed_centerf); } @@ -1836,6 +1884,7 @@ sub update { $self->{preview3D}->reset_gcode_preview_data if $self->{preview3D}; $self->{preview3D}->reload_print if $self->{preview3D}; $self->schedule_background_process; + $self->Thaw; } # When a printer technology is changed, the UI needs to be updated to show/hide needed preset combo boxes. @@ -1868,7 +1917,8 @@ sub on_extruders_change { my @presets = $choices->[0]->GetStrings; # initialize new choice - my $choice = Wx::BitmapComboBox->new($self->{right_panel}, -1, "", wxDefaultPosition, wxDefaultSize, [@presets], wxCB_READONLY); +# my $choice = Wx::BitmapComboBox->new($self->{right_panel}, -1, "", wxDefaultPosition, wxDefaultSize, [@presets], wxCB_READONLY); + my $choice = Wx::BitmapComboBox->new($self->{scrolled_window_panel}, -1, "", wxDefaultPosition, wxDefaultSize, [@presets], wxCB_READONLY); my $extruder_idx = scalar @$choices; EVT_LEFT_DOWN($choice, sub { $self->filament_color_box_lmouse_down($extruder_idx, @_); } ); push @$choices, $choice; @@ -1895,6 +1945,7 @@ sub on_extruders_change { $choices->[-1]->Destroy; pop @$choices; } + $self->{right_panel}->Layout; $self->Layout; } @@ -2221,12 +2272,56 @@ sub select_object { if (defined $obj_idx) { $self->{objects}->[$obj_idx]->selected(1); # Select current object in the list on c++ side, if item isn't child - if (!defined $child){ - Slic3r::GUI::select_current_object($obj_idx);} +# if (!defined $child){ +# Slic3r::GUI::select_current_object($obj_idx);} # all selections in the object list is on c++ side } else { # Unselect all objects in the list on c++ side - Slic3r::GUI::unselect_objects(); +# Slic3r::GUI::unselect_objects(); # all selections in the object list is on c++ side + } + $self->selection_changed(1); +} + +sub select_object_from_cpp { + my ($self, $obj_idx, $vol_idx) = @_; + + # remove current selection + foreach my $o (0..$#{$self->{objects}}) { + $self->{objects}->[$o]->selected(0); + } + + my $curr = Slic3r::GUI::_3DScene::get_select_by($self->{canvas3D}); + + if (defined $obj_idx) { + if ($vol_idx == -1){ + if ($curr eq 'object') { + $self->{objects}->[$obj_idx]->selected(1); + } + elsif ($curr eq 'volume') { + Slic3r::GUI::_3DScene::set_select_by($self->{canvas3D}, 'object'); + } + + my $selections = $self->collect_selections; + Slic3r::GUI::_3DScene::set_objects_selections($self->{canvas3D}, \@$selections); + Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1); + } + else { + if ($curr eq 'object') { + Slic3r::GUI::_3DScene::set_select_by($self->{canvas3D}, 'volume'); + } + + my $selections = []; + Slic3r::GUI::_3DScene::set_objects_selections($self->{canvas3D}, \@$selections); + Slic3r::GUI::_3DScene::deselect_volumes($self->{canvas3D}); + Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1); + my $volume_idx = Slic3r::GUI::_3DScene::get_first_volume_id($self->{canvas3D}, $obj_idx); + + my $inst_cnt = $self->{model}->objects->[$obj_idx]->instances_count; + for (0..$inst_cnt-1){ + Slic3r::GUI::_3DScene::select_volume($self->{canvas3D}, $vol_idx*$inst_cnt + $_ + $volume_idx) if ($volume_idx != -1); + } + } } + $self->selection_changed(1); } diff --git a/lib/Slic3r/GUI/Plater/3DPreview.pm b/lib/Slic3r/GUI/Plater/3DPreview.pm index 09c2f0b8c..06d1a798b 100644 --- a/lib/Slic3r/GUI/Plater/3DPreview.pm +++ b/lib/Slic3r/GUI/Plater/3DPreview.pm @@ -5,12 +5,12 @@ use utf8; use Slic3r::Print::State ':steps'; use Wx qw(:misc :sizer :slider :statictext :keycode wxWHITE wxCB_READONLY); -use Wx::Event qw(EVT_SLIDER EVT_KEY_DOWN EVT_CHECKBOX EVT_CHOICE EVT_CHECKLISTBOX); +use Wx::Event qw(EVT_SLIDER EVT_KEY_DOWN EVT_CHECKBOX EVT_CHOICE EVT_CHECKLISTBOX EVT_SIZE); use base qw(Wx::Panel Class::Accessor); use Wx::Locale gettext => 'L'; -__PACKAGE__->mk_accessors(qw(print gcode_preview_data enabled _loaded canvas slider_low slider_high single_layer)); +__PACKAGE__->mk_accessors(qw(print gcode_preview_data enabled _loaded canvas slider_low slider_high single_layer double_slider_sizer)); sub new { my $class = shift; @@ -27,47 +27,47 @@ sub new { Slic3r::GUI::_3DScene::enable_shader($canvas, 1); Slic3r::GUI::_3DScene::set_config($canvas, $config); $self->canvas($canvas); - my $slider_low = Wx::Slider->new( - $self, -1, - 0, # default - 0, # min +# my $slider_low = Wx::Slider->new( +# $self, -1, +# 0, # default +# 0, # min # we set max to a bogus non-zero value because the MSW implementation of wxSlider # will skip drawing the slider if max <= min: - 1, # max - wxDefaultPosition, - wxDefaultSize, - wxVERTICAL | wxSL_INVERSE, - ); - $self->slider_low($slider_low); - my $slider_high = Wx::Slider->new( - $self, -1, - 0, # default - 0, # min +# 1, # max +# wxDefaultPosition, +# wxDefaultSize, +# wxVERTICAL | wxSL_INVERSE, +# ); +# $self->slider_low($slider_low); +# my $slider_high = Wx::Slider->new( +# $self, -1, +# 0, # default +# 0, # min # we set max to a bogus non-zero value because the MSW implementation of wxSlider # will skip drawing the slider if max <= min: - 1, # max - wxDefaultPosition, - wxDefaultSize, - wxVERTICAL | wxSL_INVERSE, - ); - $self->slider_high($slider_high); +# 1, # max +# wxDefaultPosition, +# wxDefaultSize, +# wxVERTICAL | wxSL_INVERSE, +# ); +# $self->slider_high($slider_high); - my $z_label_low = $self->{z_label_low} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, - [40,-1], wxALIGN_CENTRE_HORIZONTAL); - $z_label_low->SetFont($Slic3r::GUI::small_font); - my $z_label_high = $self->{z_label_high} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, - [40,-1], wxALIGN_CENTRE_HORIZONTAL); - $z_label_high->SetFont($Slic3r::GUI::small_font); - - my $z_label_low_idx = $self->{z_label_low_idx} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, - [40,-1], wxALIGN_CENTRE_HORIZONTAL); - $z_label_low_idx->SetFont($Slic3r::GUI::small_font); - my $z_label_high_idx = $self->{z_label_high_idx} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, - [40,-1], wxALIGN_CENTRE_HORIZONTAL); - $z_label_high_idx->SetFont($Slic3r::GUI::small_font); +# my $z_label_low = $self->{z_label_low} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, +# [40,-1], wxALIGN_CENTRE_HORIZONTAL); +# $z_label_low->SetFont($Slic3r::GUI::small_font); +# my $z_label_high = $self->{z_label_high} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, +# [40,-1], wxALIGN_CENTRE_HORIZONTAL); +# $z_label_high->SetFont($Slic3r::GUI::small_font); + +# my $z_label_low_idx = $self->{z_label_low_idx} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, +# [40,-1], wxALIGN_CENTRE_HORIZONTAL); +# $z_label_low_idx->SetFont($Slic3r::GUI::small_font); +# my $z_label_high_idx = $self->{z_label_high_idx} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, +# [40,-1], wxALIGN_CENTRE_HORIZONTAL); +# $z_label_high_idx->SetFont($Slic3r::GUI::small_font); - $self->single_layer(0); - my $checkbox_singlelayer = $self->{checkbox_singlelayer} = Wx::CheckBox->new($self, -1, L("1 Layer")); +# $self->single_layer(0); +# my $checkbox_singlelayer = $self->{checkbox_singlelayer} = Wx::CheckBox->new($self, -1, L("1 Layer")); my $label_view_type = $self->{label_view_type} = Wx::StaticText->new($self, -1, L("View")); @@ -102,26 +102,31 @@ sub new { .L("Wipe tower")."|" .L("Custom"); Slic3r::GUI::create_combochecklist($combochecklist_features, $feature_text, $feature_items, 1); + + my $double_slider_sizer = Wx::BoxSizer->new(wxHORIZONTAL); + Slic3r::GUI::create_double_slider($self, $double_slider_sizer, $self->canvas); + $self->double_slider_sizer($double_slider_sizer); my $checkbox_travel = $self->{checkbox_travel} = Wx::CheckBox->new($self, -1, L("Travel")); my $checkbox_retractions = $self->{checkbox_retractions} = Wx::CheckBox->new($self, -1, L("Retractions")); my $checkbox_unretractions = $self->{checkbox_unretractions} = Wx::CheckBox->new($self, -1, L("Unretractions")); my $checkbox_shells = $self->{checkbox_shells} = Wx::CheckBox->new($self, -1, L("Shells")); - my $hsizer = Wx::BoxSizer->new(wxHORIZONTAL); - my $vsizer = Wx::BoxSizer->new(wxVERTICAL); - my $vsizer_outer = Wx::BoxSizer->new(wxVERTICAL); - $vsizer->Add($slider_low, 3, wxALIGN_CENTER_HORIZONTAL, 0); - $vsizer->Add($z_label_low_idx, 0, wxALIGN_CENTER_HORIZONTAL, 0); - $vsizer->Add($z_label_low, 0, wxALIGN_CENTER_HORIZONTAL, 0); - $hsizer->Add($vsizer, 0, wxEXPAND, 0); - $vsizer = Wx::BoxSizer->new(wxVERTICAL); - $vsizer->Add($slider_high, 3, wxALIGN_CENTER_HORIZONTAL, 0); - $vsizer->Add($z_label_high_idx, 0, wxALIGN_CENTER_HORIZONTAL, 0); - $vsizer->Add($z_label_high, 0, 0, 0); - $hsizer->Add($vsizer, 0, wxEXPAND, 0); - $vsizer_outer->Add($hsizer, 3, wxALIGN_CENTER_HORIZONTAL, 0); - $vsizer_outer->Add($checkbox_singlelayer, 0, wxTOP | wxALIGN_CENTER_HORIZONTAL, 5); +# my $hsizer = Wx::BoxSizer->new(wxHORIZONTAL); +# my $vsizer = Wx::BoxSizer->new(wxVERTICAL); +# my $vsizer_outer = Wx::BoxSizer->new(wxVERTICAL); +# $vsizer->Add($slider_low, 3, wxALIGN_CENTER_HORIZONTAL, 0); +# $vsizer->Add($z_label_low_idx, 0, wxALIGN_CENTER_HORIZONTAL, 0); +# $vsizer->Add($z_label_low, 0, wxALIGN_CENTER_HORIZONTAL, 0); +# $hsizer->Add($vsizer, 0, wxEXPAND, 0); +# $vsizer = Wx::BoxSizer->new(wxVERTICAL); +# $vsizer->Add($slider_high, 3, wxALIGN_CENTER_HORIZONTAL, 0); +# $vsizer->Add($z_label_high_idx, 0, wxALIGN_CENTER_HORIZONTAL, 0); +# $vsizer->Add($z_label_high, 0, 0, 0); +# $hsizer->Add($vsizer, 0, wxEXPAND, 0); +# $vsizer_outer->Add($hsizer, 3, wxALIGN_CENTER_HORIZONTAL, 0); +# $vsizer_outer->Add($double_slider_sizer, 3, wxEXPAND, 0); +# $vsizer_outer->Add($checkbox_singlelayer, 0, wxTOP | wxALIGN_CENTER_HORIZONTAL, 5); my $bottom_sizer = Wx::BoxSizer->new(wxHORIZONTAL); $bottom_sizer->Add($label_view_type, 0, wxALIGN_CENTER_VERTICAL, 5); @@ -140,81 +145,83 @@ sub new { my $sizer = Wx::BoxSizer->new(wxHORIZONTAL); $sizer->Add($canvas, 1, wxALL | wxEXPAND, 0); - $sizer->Add($vsizer_outer, 0, wxTOP | wxBOTTOM | wxEXPAND, 5); +# $sizer->Add($vsizer_outer, 0, wxTOP | wxBOTTOM | wxEXPAND, 5); + $sizer->Add($double_slider_sizer, 0, wxEXPAND, 0);#wxTOP | wxBOTTOM | wxEXPAND, 5); my $main_sizer = Wx::BoxSizer->new(wxVERTICAL); $main_sizer->Add($sizer, 1, wxALL | wxEXPAND, 0); $main_sizer->Add($bottom_sizer, 0, wxALL | wxEXPAND, 0); - EVT_SLIDER($self, $slider_low, sub { - $slider_high->SetValue($slider_low->GetValue) if $self->single_layer; - $self->set_z_idx_low ($slider_low ->GetValue) - }); - EVT_SLIDER($self, $slider_high, sub { - $slider_low->SetValue($slider_high->GetValue) if $self->single_layer; - $self->set_z_idx_high($slider_high->GetValue) - }); - EVT_KEY_DOWN($canvas, sub { - my ($s, $event) = @_; - my $key = $event->GetKeyCode; - if ($event->HasModifiers) { - $event->Skip; - } else { - if ($key == ord('U')) { - $slider_high->SetValue($slider_high->GetValue + 1); - $slider_low->SetValue($slider_high->GetValue) if ($event->ShiftDown()); - $self->set_z_idx_high($slider_high->GetValue); - } elsif ($key == ord('D')) { - $slider_high->SetValue($slider_high->GetValue - 1); - $slider_low->SetValue($slider_high->GetValue) if ($event->ShiftDown()); - $self->set_z_idx_high($slider_high->GetValue); - } elsif ($key == ord('S')) { - $checkbox_singlelayer->SetValue(! $checkbox_singlelayer->GetValue()); - $self->single_layer($checkbox_singlelayer->GetValue()); - if ($self->single_layer) { - $slider_low->SetValue($slider_high->GetValue); - $self->set_z_idx_high($slider_high->GetValue); - } - } else { - $event->Skip; - } - } - }); - EVT_KEY_DOWN($slider_low, sub { - my ($s, $event) = @_; - my $key = $event->GetKeyCode; - if ($event->HasModifiers) { - $event->Skip; - } else { - if ($key == WXK_LEFT) { - } elsif ($key == WXK_RIGHT) { - $slider_high->SetFocus; - } else { - $event->Skip; - } - } - }); - EVT_KEY_DOWN($slider_high, sub { - my ($s, $event) = @_; - my $key = $event->GetKeyCode; - if ($event->HasModifiers) { - $event->Skip; - } else { - if ($key == WXK_LEFT) { - $slider_low->SetFocus; - } elsif ($key == WXK_RIGHT) { - } else { - $event->Skip; - } - } - }); - EVT_CHECKBOX($self, $checkbox_singlelayer, sub { - $self->single_layer($checkbox_singlelayer->GetValue()); - if ($self->single_layer) { - $slider_low->SetValue($slider_high->GetValue); - $self->set_z_idx_high($slider_high->GetValue); - } - }); +# EVT_SLIDER($self, $slider_low, sub { +# $slider_high->SetValue($slider_low->GetValue) if $self->single_layer; +# $self->set_z_idx_low ($slider_low ->GetValue) +# }); +# EVT_SLIDER($self, $slider_high, sub { +# $slider_low->SetValue($slider_high->GetValue) if $self->single_layer; +# $self->set_z_idx_high($slider_high->GetValue) +# }); +# EVT_KEY_DOWN($canvas, sub { +# my ($s, $event) = @_; +# Slic3r::GUI::update_double_slider_from_canvas($event); +# my $key = $event->GetKeyCode; +# if ($event->HasModifiers) { +# $event->Skip; +# } else { +# if ($key == ord('U')) { +# $slider_high->SetValue($slider_high->GetValue + 1); +# $slider_low->SetValue($slider_high->GetValue) if ($event->ShiftDown()); +# $self->set_z_idx_high($slider_high->GetValue); +# } elsif ($key == ord('D')) { +# $slider_high->SetValue($slider_high->GetValue - 1); +# $slider_low->SetValue($slider_high->GetValue) if ($event->ShiftDown()); +# $self->set_z_idx_high($slider_high->GetValue); +# } elsif ($key == ord('S')) { +# $checkbox_singlelayer->SetValue(! $checkbox_singlelayer->GetValue()); +# $self->single_layer($checkbox_singlelayer->GetValue()); +# if ($self->single_layer) { +# $slider_low->SetValue($slider_high->GetValue); +# $self->set_z_idx_high($slider_high->GetValue); +# } +# } else { +# $event->Skip; +# } +# } +# }); +# EVT_KEY_DOWN($slider_low, sub { +# my ($s, $event) = @_; +# my $key = $event->GetKeyCode; +# if ($event->HasModifiers) { +# $event->Skip; +# } else { +# if ($key == WXK_LEFT) { +# } elsif ($key == WXK_RIGHT) { +# $slider_high->SetFocus; +# } else { +# $event->Skip; +# } +# } +# }); +# EVT_KEY_DOWN($slider_high, sub { +# my ($s, $event) = @_; +# my $key = $event->GetKeyCode; +# if ($event->HasModifiers) { +# $event->Skip; +# } else { +# if ($key == WXK_LEFT) { +# $slider_low->SetFocus; +# } elsif ($key == WXK_RIGHT) { +# } else { +# $event->Skip; +# } +# } +# }); +# EVT_CHECKBOX($self, $checkbox_singlelayer, sub { +# $self->single_layer($checkbox_singlelayer->GetValue()); +# if ($self->single_layer) { +# $slider_low->SetValue($slider_high->GetValue); +# $self->set_z_idx_high($slider_high->GetValue); +# } +# }); EVT_CHOICE($self, $choice_view_type, sub { my $selection = $choice_view_type->GetCurrentSelection(); $self->{preferred_color_mode} = ($selection == $self->{tool_idx}) ? 'tool' : 'feature'; @@ -243,6 +250,12 @@ sub new { $self->gcode_preview_data->set_shells_visible($checkbox_shells->IsChecked()); $self->refresh_print; }); + + EVT_SIZE($self, sub { + my ($s, $event) = @_; + $event->Skip; + $self->Refresh; + }); $self->SetSizer($main_sizer); $self->SetMinSize($self->GetSize); @@ -392,62 +405,69 @@ sub load_print { sub reset_sliders { my ($self) = @_; $self->enabled(0); - $self->set_z_range(0,0); - $self->slider_low->Hide; - $self->slider_high->Hide; - $self->{z_label_low}->SetLabel(""); - $self->{z_label_high}->SetLabel(""); - $self->{z_label_low_idx}->SetLabel(""); - $self->{z_label_high_idx}->SetLabel(""); +# $self->set_z_range(0,0); +# $self->slider_low->Hide; +# $self->slider_high->Hide; +# $self->{z_label_low}->SetLabel(""); +# $self->{z_label_high}->SetLabel(""); +# $self->{z_label_low_idx}->SetLabel(""); +# $self->{z_label_high_idx}->SetLabel(""); + + Slic3r::GUI::reset_double_slider(); + $self->double_slider_sizer->Hide(0); } sub update_sliders { my ($self, $n_layers) = @_; - my $z_idx_low = $self->slider_low->GetValue; - my $z_idx_high = $self->slider_high->GetValue; +# my $z_idx_low = $self->slider_low->GetValue; +# my $z_idx_high = $self->slider_high->GetValue; $self->enabled(1); - $self->slider_low->SetRange(0, $n_layers - 1); - $self->slider_high->SetRange(0, $n_layers - 1); +# $self->slider_low->SetRange(0, $n_layers - 1); +# $self->slider_high->SetRange(0, $n_layers - 1); - if ($self->{force_sliders_full_range}) { - $z_idx_low = 0; - $z_idx_high = $n_layers - 1; - } elsif ($z_idx_high < $n_layers && ($self->single_layer || $z_idx_high != 0)) { - # search new indices for nearest z (size of $self->{layers_z} may change in dependence of what is shown) - if (defined($self->{z_low})) { - for (my $i = scalar(@{$self->{layers_z}}) - 1; $i >= 0; $i -= 1) { - if ($self->{layers_z}[$i] <= $self->{z_low}) { - $z_idx_low = $i; - last; - } - } - } - if (defined($self->{z_high})) { - for (my $i = scalar(@{$self->{layers_z}}) - 1; $i >= 0; $i -= 1) { - if ($self->{layers_z}[$i] <= $self->{z_high}) { - $z_idx_high = $i; - last; - } - } - } - } elsif ($z_idx_high >= $n_layers) { - # Out of range. Disable 'single layer' view. - $self->single_layer(0); - $self->{checkbox_singlelayer}->SetValue(0); - $z_idx_low = 0; - $z_idx_high = $n_layers - 1; - } else { - $z_idx_low = 0; - $z_idx_high = $n_layers - 1; - } +# if ($self->{force_sliders_full_range}) { +# $z_idx_low = 0; +# $z_idx_high = $n_layers - 1; +# } elsif ($z_idx_high < $n_layers && ($self->single_layer || $z_idx_high != 0)) { +# # search new indices for nearest z (size of $self->{layers_z} may change in dependence of what is shown) +# if (defined($self->{z_low})) { +# for (my $i = scalar(@{$self->{layers_z}}) - 1; $i >= 0; $i -= 1) { +# if ($self->{layers_z}[$i] <= $self->{z_low}) { +# $z_idx_low = $i; +# last; +# } +# } +# } +# if (defined($self->{z_high})) { +# for (my $i = scalar(@{$self->{layers_z}}) - 1; $i >= 0; $i -= 1) { +# if ($self->{layers_z}[$i] <= $self->{z_high}) { +# $z_idx_high = $i; +# last; +# } +# } +# } +# } elsif ($z_idx_high >= $n_layers) { +# # Out of range. Disable 'single layer' view. +# $self->single_layer(0); +# $self->{checkbox_singlelayer}->SetValue(0); +# $z_idx_low = 0; +# $z_idx_high = $n_layers - 1; +# } else { +# $z_idx_low = 0; +# $z_idx_high = $n_layers - 1; +# } - $self->slider_low->SetValue($z_idx_low); - $self->slider_high->SetValue($z_idx_high); - $self->slider_low->Show; - $self->slider_high->Show; - $self->set_z_range($self->{layers_z}[$z_idx_low], $self->{layers_z}[$z_idx_high]); +# $self->slider_low->SetValue($z_idx_low); +# $self->slider_high->SetValue($z_idx_high); +# $self->slider_low->Show; +# $self->slider_high->Show; +# $self->set_z_range($self->{layers_z}[$z_idx_low], $self->{layers_z}[$z_idx_high]); + + Slic3r::GUI::update_double_slider($self->{force_sliders_full_range}); + $self->double_slider_sizer->Show(0); + $self->Layout; } |