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
diff options
context:
space:
mode:
authorAlessandro Ranellucci <aar@cpan.org>2011-11-14 13:31:07 +0400
committerAlessandro Ranellucci <aar@cpan.org>2011-11-14 13:31:07 +0400
commit86f3e4fcd2e30714eb472cbe4a186340b40b81a4 (patch)
treed1dd7c2963fd490b81cc0f5749a8b24cc8222031 /lib/Slic3r/Fill
parentd47a7bebbc06d794133dab7f85fa59b3b41cc337 (diff)
Implemented a new "line" fill pattern. #20
Diffstat (limited to 'lib/Slic3r/Fill')
-rw-r--r--lib/Slic3r/Fill/Line.pm8
-rw-r--r--lib/Slic3r/Fill/Rectilinear.pm12
2 files changed, 18 insertions, 2 deletions
diff --git a/lib/Slic3r/Fill/Line.pm b/lib/Slic3r/Fill/Line.pm
new file mode 100644
index 000000000..97dc17cfd
--- /dev/null
+++ b/lib/Slic3r/Fill/Line.pm
@@ -0,0 +1,8 @@
+package Slic3r::Fill::Line;
+use Moo;
+
+extends 'Slic3r::Fill::Rectilinear';
+
+# Sorry for breaking OOP, but Line is implemented inside Rectilinear.
+
+1;
diff --git a/lib/Slic3r/Fill/Rectilinear.pm b/lib/Slic3r/Fill/Rectilinear.pm
index 039865312..d1f23b392 100644
--- a/lib/Slic3r/Fill/Rectilinear.pm
+++ b/lib/Slic3r/Fill/Rectilinear.pm
@@ -3,7 +3,7 @@ use Moo;
extends 'Slic3r::Fill::Base';
-use Slic3r::Geometry qw(X1 Y1 X2 Y2);
+use Slic3r::Geometry qw(X1 Y1 X2 Y2 A B X);
use XXX;
sub fill_surface {
@@ -16,14 +16,22 @@ sub fill_surface {
$self->rotate_points($expolygon, $rotate_vector);
my $bounding_box = [ $expolygon->bounding_box ];
- my $distance_between_lines = $params{flow_width} / $Slic3r::resolution / $params{density};
+ my $flow_width_res = $params{flow_width} / $Slic3r::resolution;
+ my $distance_between_lines = $flow_width_res / $params{density};
my @paths = ();
my $x = $bounding_box->[X1];
+ my $is_line_pattern = $self->isa('Slic3r::Fill::Line');
+ my $i = 0;
while ($x < $bounding_box->[X2]) {
my $vertical_line = [ [$x, $bounding_box->[Y2]], [$x, $bounding_box->[Y1]] ];
+ if ($is_line_pattern && $i % 2) {
+ $vertical_line->[A][X] -= ($distance_between_lines - $flow_width_res);
+ $vertical_line->[B][X] += ($distance_between_lines - $flow_width_res);
+ }
push @paths, @{ $expolygon->clip_line($vertical_line) };
$x += int($distance_between_lines);
+ $i++;
}
# paths must be rotated back