Skip to content

Commit f4ee87b

Browse files
committed
Fixed #27
1 parent c2d5b32 commit f4ee87b

File tree

1 file changed

+39
-25
lines changed

1 file changed

+39
-25
lines changed

lib/Slic3r/GUI/Plater/3DPreview.pm

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ sub new {
5252
$z_label_high->SetFont($Slic3r::GUI::small_font);
5353

5454
$self->single_layer(0);
55-
my $checkbox_singlelayer = Wx::CheckBox->new($self, -1, "1 Layer");
55+
my $checkbox_singlelayer = $self->{checkbox_singlelayer} = Wx::CheckBox->new($self, -1, "1 Layer");
5656

5757
my $hsizer = Wx::BoxSizer->new(wxHORIZONTAL);
5858
my $vsizer = Wx::BoxSizer->new(wxVERTICAL);
@@ -134,37 +134,51 @@ sub load_print {
134134
# we require that there's at least one object and the posSlice step
135135
# is performed on all of them (this ensures that _shifted_copies was
136136
# populated and we know the number of layers)
137-
if (!$self->print->object_step_done(STEP_SLICE)) {
138-
$self->enabled(0);
139-
$self->slider_low->Hide;
140-
$self->slider_high->Hide;
141-
$self->canvas->Refresh; # clears canvas
142-
return;
143-
}
144-
145-
my $z_idx;
146-
{
137+
my $n_layers = 0;
138+
if ($self->print->object_step_done(STEP_SLICE)) {
147139
my %z = (); # z => 1
148140
foreach my $object (@{$self->{print}->objects}) {
149141
foreach my $layer (@{$object->layers}, @{$object->support_layers}) {
150142
$z{$layer->print_z} = 1;
151143
}
152144
}
153-
$self->enabled(1);
154145
$self->{layers_z} = [ sort { $a <=> $b } keys %z ];
155-
$self->slider_low->SetRange(0, scalar(@{$self->{layers_z}})-1);
156-
$self->slider_high->SetRange(0, scalar(@{$self->{layers_z}})-1);
157-
$self->slider_low->SetValue(0);
158-
if (($z_idx = $self->slider_high->GetValue) <= $#{$self->{layers_z}} && $self->slider_high->GetValue != 0) {
159-
# use $z_idx
160-
} else {
161-
$self->slider_high->SetValue(scalar(@{$self->{layers_z}})-1);
162-
$z_idx = @{$self->{layers_z}} ? -1 : undef;
163-
}
164-
$self->slider_low->Show;
165-
$self->slider_high->Show;
166-
$self->Layout;
146+
$n_layers = scalar(@{$self->{layers_z}});
147+
}
148+
149+
if ($n_layers == 0) {
150+
$self->enabled(0);
151+
$self->set_z_range(0,0);
152+
$self->slider_low->Hide;
153+
$self->slider_high->Hide;
154+
$self->canvas->Refresh; # clears canvas
155+
return;
156+
}
157+
158+
my $z_idx_low = $self->slider_low->GetValue;
159+
my $z_idx_high = $self->slider_high->GetValue;
160+
$self->enabled(1);
161+
$self->slider_low->SetRange(0, $n_layers - 1);
162+
$self->slider_high->SetRange(0, $n_layers - 1);
163+
if ($z_idx_high < $n_layers && ($self->single_layer || $z_idx_high != 0)) {
164+
# use $z_idx
165+
} else {
166+
# Out of range. Disable 'single layer' view.
167+
$self->single_layer(0);
168+
$self->{checkbox_singlelayer}->SetValue(0);
169+
$z_idx_low = 0;
170+
$z_idx_high = $n_layers - 1;
171+
}
172+
if ($self->single_layer) {
173+
$z_idx_low = $z_idx_high;
174+
} elsif ($z_idx_low > $z_idx_high) {
175+
$z_idx_low = 0;
167176
}
177+
$self->slider_low->SetValue($z_idx_low);
178+
$self->slider_high->SetValue($z_idx_high);
179+
$self->slider_low->Show;
180+
$self->slider_high->Show;
181+
$self->Layout;
168182

169183
if ($self->IsShown) {
170184
# load skirt and brim
@@ -181,7 +195,7 @@ sub load_print {
181195
$self->_loaded(1);
182196
}
183197

184-
$self->set_z_range(0, $self->{layers_z}[$z_idx]);
198+
$self->set_z_range($self->{layers_z}[$z_idx_low], $self->{layers_z}[$z_idx_high]);
185199
}
186200

187201
sub set_z_range

0 commit comments

Comments
 (0)