From 032698fb0712783bf2a0af416d38da5c2fef7789 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Thu, 19 Sep 2013 10:44:29 +0200 Subject: [PATCH] Test that toolchanges happen outside skirt when standby-temperature is enabled --- lib/Slic3r/Print.pm | 2 +- t/multi.t | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/Slic3r/Print.pm b/lib/Slic3r/Print.pm index d8f97eb83..314b0b851 100644 --- a/lib/Slic3r/Print.pm +++ b/lib/Slic3r/Print.pm @@ -799,7 +799,7 @@ sub write_gcode { # calculate wiping points if needed if ($self->config->standby_temperature) { 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 diff --git a/t/multi.t b/t/multi.t index 111481404..01f64d235 100644 --- a/t/multi.t +++ b/t/multi.t @@ -8,6 +8,7 @@ BEGIN { } use List::Util qw(first); +use Math::ConvexHull::MonotoneChain qw(convex_hull); use Slic3r; use Slic3r::Test; @@ -22,6 +23,8 @@ use Slic3r::Test; my $tool = undef; my @tool_temp = (0,0); + my @toolchange_points = (); + my @extrusion_points = (); Slic3r::GCode::Reader->new->parse(Slic3r::Test::gcode($print), sub { my ($self, $cmd, $args, $info) = @_; @@ -34,6 +37,7 @@ use Slic3r::Test; if $tool_temp[$tool] != $expected_temp + $config->standby_temperature_delta; } $tool = $1; + push @toolchange_points, Slic3r::Point->new_scale($self->X, $self->Y); } elsif ($cmd eq 'M104' || $cmd eq 'M109') { my $t = $args->{T} // $tool; if ($tool_temp[$t] == 0) { @@ -41,11 +45,13 @@ use Slic3r::Test; unless $args->{S} == $config->first_layer_temperature->[$t] + $config->standby_temperature_delta; } $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 }); - 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__