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

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2016-11-08 17:33:13 +0300
committerbubnikv <bubnikv@gmail.com>2016-11-08 17:33:13 +0300
commitb8590180d8152844e8709063d3fe048dec305c1c (patch)
tree78cac12440516006fe1fabdd72b129889888fbd0 /lib
parent443e900e07df82e41a5ba939d0ff4ef75956e7b9 (diff)
Fix of https://github.com/prusa3d/Slic3r/issues/20
Slicing preview incorrect in terms of visible solid layers
Diffstat (limited to 'lib')
-rw-r--r--lib/Slic3r/GUI/3DScene.pm22
-rw-r--r--lib/Slic3r/GUI/Plater/3DPreview.pm13
2 files changed, 17 insertions, 18 deletions
diff --git a/lib/Slic3r/GUI/3DScene.pm b/lib/Slic3r/GUI/3DScene.pm
index 889dc0741..8c737bcab 100644
--- a/lib/Slic3r/GUI/3DScene.pm
+++ b/lib/Slic3r/GUI/3DScene.pm
@@ -978,32 +978,30 @@ sub draw_volumes {
}
my $qverts_begin = 0;
- my $qverts_end = defined($volume->qverts) ? $volume->qverts->size() : 0;
+ my $qverts_end = defined($volume->qverts) ? $volume->qverts->size() : 0;
my $tverts_begin = 0;
- my $tverts_end = defined($volume->tverts) ? $volume->tverts->size() : 0;
- if ($volume->range && $volume->offsets && @{$volume->offsets}) {
+ my $tverts_end = defined($volume->tverts) ? $volume->tverts->size() : 0;
+ my $n_offsets = ($volume->range && $volume->offsets) ? scalar(@{$volume->offsets}) : 0;
+ if ($n_offsets) {
# The Z layer range is specified.
# First test whether the Z span of this object is not out of ($min_z, $max_z) completely.
my ($min_z, $max_z) = @{$volume->range};
next if ($volume->offsets->[0] > $max_z || $volume->offsets->[-3] < $min_z);
# Then find the lowest layer to be displayed.
my $i = 0;
- while ($i < @{$volume->offsets} && $volume->offsets->[$i] < $min_z) {
+ while ($i < $n_offsets && $volume->offsets->[$i] < $min_z) {
$i += 3;
}
# This shall not happen.
- next if ($i == @{$volume->offsets});
+ next if ($i == $n_offsets);
# Remember start of the layer.
- if ($i >= 3) {
- # Get end of the preceding layer, which is the start of the current layer.
- $qverts_begin = $volume->offsets->[$i-2];
- $tverts_begin = $volume->offsets->[$i-1];
- }
+ $qverts_begin = $volume->offsets->[$i+1];
+ $tverts_begin = $volume->offsets->[$i+2];
# Some layers are above $min_z. Which?
- while ($i < @{$volume->offsets} && $volume->offsets->[$i] <= $max_z) {
+ while ($i < $n_offsets && $volume->offsets->[$i] <= $max_z) {
$i += 3;
}
- if ($i < @{$volume->offsets}) {
+ if ($i < $n_offsets) {
$qverts_end = $volume->offsets->[$i+1];
$tverts_end = $volume->offsets->[$i+2];
}
diff --git a/lib/Slic3r/GUI/Plater/3DPreview.pm b/lib/Slic3r/GUI/Plater/3DPreview.pm
index fde9ef131..d452f60cf 100644
--- a/lib/Slic3r/GUI/Plater/3DPreview.pm
+++ b/lib/Slic3r/GUI/Plater/3DPreview.pm
@@ -145,14 +145,15 @@ sub load_print {
}
$self->enabled(1);
$self->{layers_z} = [ sort { $a <=> $b } keys %z ];
- $self->slider_low->SetRange(0, scalar(@{$self->{layers_z}})-1);
- $self->slider_high->SetRange(0, scalar(@{$self->{layers_z}})-1);
+ my $num_layers = scalar(@{$self->{layers_z}});
+ $self->slider_low->SetRange(0, $num_layers-1);
+ $self->slider_high->SetRange(0, $num_layers-1);
$self->slider_low->SetValue(0);
- if (($z_idx = $self->slider_high->GetValue) <= $#{$self->{layers_z}} && $self->slider_high->GetValue != 0) {
+ if (($z_idx = $self->slider_high->GetValue) < $num_layers && $self->slider_high->GetValue != 0) {
# use $z_idx
} else {
- $self->slider_high->SetValue(scalar(@{$self->{layers_z}})-1);
- $z_idx = @{$self->{layers_z}} ? -1 : undef;
+ $self->slider_high->SetValue($num_layers-1);
+ $z_idx = $num_layers ? ($num_layers-1) : undef;
}
$self->slider_low->Show;
$self->slider_high->Show;
@@ -184,7 +185,7 @@ sub set_z_range
return if !$self->enabled;
$self->{z_label_low}->SetLabel(sprintf '%.2f', $z_low);
$self->{z_label_high}->SetLabel(sprintf '%.2f', $z_high);
- $self->canvas->set_toolpaths_range($z_low, $z_high);
+ $self->canvas->set_toolpaths_range($z_low-1e-5, $z_high+1e-5);
$self->canvas->Refresh if $self->IsShown;
}