diff options
author | Alessandro Ranellucci <aar@cpan.org> | 2011-11-14 13:31:07 +0400 |
---|---|---|
committer | Alessandro Ranellucci <aar@cpan.org> | 2011-11-14 13:31:07 +0400 |
commit | 86f3e4fcd2e30714eb472cbe4a186340b40b81a4 (patch) | |
tree | d1dd7c2963fd490b81cc0f5749a8b24cc8222031 /lib/Slic3r/Fill | |
parent | d47a7bebbc06d794133dab7f85fa59b3b41cc337 (diff) |
Implemented a new "line" fill pattern. #20
Diffstat (limited to 'lib/Slic3r/Fill')
-rw-r--r-- | lib/Slic3r/Fill/Line.pm | 8 | ||||
-rw-r--r-- | lib/Slic3r/Fill/Rectilinear.pm | 12 |
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 |