Test that toolchanges happen outside skirt when standby-temperature is enabled

This commit is contained in:
Alessandro Ranellucci 2013-09-19 10:44:29 +02:00
parent 7765787172
commit 032698fb07
2 changed files with 9 additions and 3 deletions

View file

@ -799,7 +799,7 @@ sub write_gcode {
# calculate wiping points if needed # calculate wiping points if needed
if ($self->config->standby_temperature) { if ($self->config->standby_temperature) {
my $outer_skirt = Slic3r::Polygon->new(@{convex_hull([ map $_->pp, map @$_, @{$self->skirt} ])}); my $outer_skirt = Slic3r::Polygon->new(@{convex_hull([ map $_->pp, map @$_, @{$self->skirt} ])});
$gcodegen->standby_points([ map $_->clone, map @$_, @{offset([$outer_skirt], scale 3)} ]); $gcodegen->standby_points([ map $_->clone, map @$_, map $_->subdivide(scale 10), @{offset([$outer_skirt], scale 3)} ]);
} }
# prepare the layer processor # prepare the layer processor

View file

@ -8,6 +8,7 @@ BEGIN {
} }
use List::Util qw(first); use List::Util qw(first);
use Math::ConvexHull::MonotoneChain qw(convex_hull);
use Slic3r; use Slic3r;
use Slic3r::Test; use Slic3r::Test;
@ -22,6 +23,8 @@ use Slic3r::Test;
my $tool = undef; my $tool = undef;
my @tool_temp = (0,0); my @tool_temp = (0,0);
my @toolchange_points = ();
my @extrusion_points = ();
Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub {
my ($self, $cmd, $args, $info) = @_; my ($self, $cmd, $args, $info) = @_;
@ -34,6 +37,7 @@ use Slic3r::Test;
if $tool_temp[$tool] != $expected_temp + $config->standby_temperature_delta; if $tool_temp[$tool] != $expected_temp + $config->standby_temperature_delta;
} }
$tool = $1; $tool = $1;
push @toolchange_points, Slic3r::Point->new_scale($self->X, $self->Y);
} elsif ($cmd eq 'M104' || $cmd eq 'M109') { } elsif ($cmd eq 'M104' || $cmd eq 'M109') {
my $t = $args->{T} // $tool; my $t = $args->{T} // $tool;
if ($tool_temp[$t] == 0) { if ($tool_temp[$t] == 0) {
@ -41,11 +45,13 @@ use Slic3r::Test;
unless $args->{S} == $config->first_layer_temperature->[$t] + $config->standby_temperature_delta; unless $args->{S} == $config->first_layer_temperature->[$t] + $config->standby_temperature_delta;
} }
$tool_temp[$t] = $args->{S}; $tool_temp[$t] = $args->{S};
} elsif ($cmd eq 'G1' && $info->{extruding} && $info->{dist_XY} > 0) {
push @extrusion_points, Slic3r::Point->new_scale($args->{X}, $args->{Y});
} }
# TODO: check that toolchanges happen only outside skirt
# TODO: check that toolchanges retraction and restart happen outside skirt # TODO: check that toolchanges retraction and restart happen outside skirt
}); });
ok 1, 'standby temperature'; my $convex_hull = Slic3r::Polygon->new(@{convex_hull([ map $_->pp, @extrusion_points ])});
ok !(first { $convex_hull->encloses_point($_) } @toolchange_points), 'all toolchanges happen outside skirt';
} }
__END__ __END__