Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2018-09-17 16:12:13 +0300
committerbubnikv <bubnikv@gmail.com>2018-09-17 16:12:13 +0300
commitfe3b92870f217a3356094a0a6ad60b25ccf18996 (patch)
treedd9ebd271884eef3be0270cbb34809738950b390 /lib
parentd934b63424ab76ddcd8a87f272838df611dfcd0c (diff)
Merged with dev
Diffstat (limited to 'lib')
-rw-r--r--lib/Slic3r/GUI.pm24
-rw-r--r--lib/Slic3r/GUI/MainFrame.pm12
-rw-r--r--lib/Slic3r/GUI/Plater.pm257
-rw-r--r--lib/Slic3r/GUI/Plater/3DPreview.pm356
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;
}