Improvements to avoid blobs
This commit is contained in:
parent
ff5044c031
commit
3421e8fef8
@ -4,6 +4,9 @@ use Moose;
|
|||||||
use Math::Geometry::Planar;
|
use Math::Geometry::Planar;
|
||||||
*Math::Geometry::Planar::OffsetPolygon = *Math::Geometry::Planar::Offset::OffsetPolygon;
|
*Math::Geometry::Planar::OffsetPolygon = *Math::Geometry::Planar::Offset::OffsetPolygon;
|
||||||
|
|
||||||
|
use constant X => 0;
|
||||||
|
use constant Y => 1;
|
||||||
|
|
||||||
sub make_perimeter {
|
sub make_perimeter {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($layer) = @_;
|
my ($layer) = @_;
|
||||||
@ -66,10 +69,13 @@ sub make_perimeter {
|
|||||||
my @path_points = ();
|
my @path_points = ();
|
||||||
foreach my $p (map $self->_mgp_from_points_ref($_), @$polylines) {
|
foreach my $p (map $self->_mgp_from_points_ref($_), @$polylines) {
|
||||||
my $points = $p->points;
|
my $points = $p->points;
|
||||||
# TODO: the initial $points->[0] should be replaced by the point of
|
# to avoid blobs, the first point is replaced by the point of
|
||||||
# the segment which is $Slic3r::flow_width / $Slic3r::resolution
|
# the segment which is $Slic3r::flow_width / $Slic3r::resolution
|
||||||
# away from it to avoid the extruder to get two times there
|
# away from it to avoid the extruder to get two times there
|
||||||
push @path_points, @$points, $points->[0];
|
push @$points, [ @{$points->[0]} ];
|
||||||
|
$points->[0] = $self->_get_point_along_line($points->[0], $points->[1],
|
||||||
|
$Slic3r::flow_width * 1.2 / $Slic3r::resolution);
|
||||||
|
push @path_points, @$points;
|
||||||
}
|
}
|
||||||
push @{ $layer->perimeters }, Slic3r::ExtrusionPath->new_from_points(reverse @path_points);
|
push @{ $layer->perimeters }, Slic3r::ExtrusionPath->new_from_points(reverse @path_points);
|
||||||
}
|
}
|
||||||
@ -140,4 +146,20 @@ sub _mgp_from_polygons_ref {
|
|||||||
return $p;
|
return $p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub _get_point_along_line {
|
||||||
|
my $self = shift;
|
||||||
|
my ($p1, $p2, $distance) = @_;
|
||||||
|
|
||||||
|
my $point = [ @$p1 ];
|
||||||
|
|
||||||
|
my $line_length = sqrt( (($p2->[X] - $p1->[X])**2) + (($p2->[Y] - $p1->[Y])**2) );
|
||||||
|
for (X, Y) {
|
||||||
|
if ($p1->[$_] != $p2->[$_]) {
|
||||||
|
$point->[$_] = $p1->[$_] + ($p2->[$_] - $p1->[$_]) * $distance / $line_length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $point;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -150,11 +150,13 @@ sub export_gcode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# go to first point while compensating retraction
|
# go to first point while compensating retraction
|
||||||
$G1->($path->lines->[0]->a, $z,
|
$G1->($path->lines->[0]->a, $z, 0, "move to first $description point");
|
||||||
$retracted
|
|
||||||
? ($Slic3r::retract_length + $Slic3r::retract_restart_extra)
|
# compensate retraction
|
||||||
: 0,
|
if ($retracted) {
|
||||||
"move to first $description point");
|
$G1->(undef, undef, ($Slic3r::retract_length + $Slic3r::retract_restart_extra),
|
||||||
|
"compensate retraction");
|
||||||
|
}
|
||||||
|
|
||||||
# extrude while going to next points
|
# extrude while going to next points
|
||||||
foreach my $line (@{ $path->lines }) {
|
foreach my $line (@{ $path->lines }) {
|
||||||
|
Loading…
Reference in New Issue
Block a user