@@ -52,7 +52,7 @@ sub new {
52
52
$z_label_high -> SetFont($Slic3r::GUI::small_font );
53
53
54
54
$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" );
56
56
57
57
my $hsizer = Wx::BoxSizer-> new(wxHORIZONTAL);
58
58
my $vsizer = Wx::BoxSizer-> new(wxVERTICAL);
@@ -134,37 +134,51 @@ sub load_print {
134
134
# we require that there's at least one object and the posSlice step
135
135
# is performed on all of them (this ensures that _shifted_copies was
136
136
# 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)) {
147
139
my %z = (); # z => 1
148
140
foreach my $object (@{$self -> {print }-> objects}) {
149
141
foreach my $layer (@{$object -> layers}, @{$object -> support_layers}) {
150
142
$z {$layer -> print_z} = 1;
151
143
}
152
144
}
153
- $self -> enabled(1);
154
145
$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;
167
176
}
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;
168
182
169
183
if ($self -> IsShown) {
170
184
# load skirt and brim
@@ -181,7 +195,7 @@ sub load_print {
181
195
$self -> _loaded(1);
182
196
}
183
197
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 ]);
185
199
}
186
200
187
201
sub set_z_range
0 commit comments