diff --git a/lib/Slic3r/Test.pm b/lib/Slic3r/Test.pm index f167e30aa..e71b38ce9 100644 --- a/lib/Slic3r/Test.pm +++ b/lib/Slic3r/Test.pm @@ -164,8 +164,16 @@ sub mesh { my $mesh = Slic3r::TriangleMesh->new; $mesh->ReadFromPerl($vertices, $facets); $mesh->repair; - $mesh->scale_xyz(Slic3r::Pointf3->new(@{$params{scale_xyz}})) if $params{scale_xyz}; - $mesh->translate(@{$params{translate}}) if $params{translate}; + + my $trafo = Slic3r::TransformationMatrix->new; + $trafo->set_scale_xyz(@{$params{scale_xyz}}) if $params{scale_xyz}; + if ($params{translate}) { + my $trafo2 = Slic3r::TransformationMatrix->new; + $trafo2->set_translation_xyz(@{$params{translate}}); + $trafo->applyLeft($trafo2); + } + + $mesh->transform($trafo); return $mesh; } diff --git a/t/loops.t b/t/loops.t index d2bf77176..0caf8b8ee 100644 --- a/t/loops.t +++ b/t/loops.t @@ -23,17 +23,21 @@ use Slic3r::Test; # center around origin my $bb = $mesh1->bounding_box; - $mesh1->translate( + + my $trafo = Slic3r::TransformationMatrix->new; + $trafo->set_translation_xyz( -($bb->x_min + $bb->size->x/2), -($bb->y_min + $bb->size->y/2), #// -($bb->z_min + $bb->size->z/2), ); - - my $mesh2 = $mesh1->clone; - $mesh2->scale(1.2); - - my $mesh3 = $mesh2->clone; - $mesh3->scale(1.2); + + $mesh1->transform($trafo); + + $trafo->set_scale_uni(1.2); + + my $mesh2 = $mesh1->get_transformed_mesh($trafo); + + my $mesh3 = $mesh2->get_transformed_mesh($trafo); $mesh1->reverse_normals; ok $mesh1->volume < 0, 'reverse_normals';