stl.t 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. use Test::More;
  2. plan tests => 11;
  3. BEGIN {
  4. use FindBin;
  5. use lib "$FindBin::Bin/../lib";
  6. }
  7. use Slic3r;
  8. my $stl = Slic3r::STL->new;
  9. my @lines;
  10. my $z = 20;
  11. my @points = ([3, 4], [8, 5], [1, 9]);
  12. is_deeply lines(20, 20, 20), [
  13. [ $points[0], $points[1] ],
  14. [ $points[1], $points[2] ],
  15. [ $points[2], $points[0] ],
  16. ], 'horizontal';
  17. is_deeply lines(22, 20, 20), [ [ $points[2], $points[1] ] ], 'lower edge on layer';
  18. is_deeply lines(20, 20, 10), [ [ $points[0], $points[1] ] ], 'upper edge on layer';
  19. is_deeply lines(20, 15, 10), [ ], 'upper vertex on layer';
  20. is_deeply lines(28, 20, 30), [ ], 'lower vertex on layer';
  21. is_deeply lines(24, 10, 16), [ [ [2, 6], [4, 4] ] ], 'two edges intersect';
  22. is_deeply lines(24, 10, 20), [ [ [1, 9], [4, 4] ] ], 'one vertex on plane and one edge intersects';
  23. my @lower = $stl->intersect_facet(vertices(22, 20, 20), $z, $dz);
  24. my @upper = $stl->intersect_facet(vertices(20, 20, 10), $z, $dz);
  25. isa_ok $lower[0], 'Slic3r::Line::FacetEdge', 'bottom edge on layer';
  26. isa_ok $upper[0], 'Slic3r::Line::FacetEdge', 'upper edge on layer';
  27. is $lower[0]->edge_type, 'bottom', 'lower edge is detected as bottom';
  28. is $upper[0]->edge_type, 'top', 'upper edge is detected as top';
  29. sub vertices {
  30. [ map [ @{$points[$_]}, $_[$_] ], 0..2 ]
  31. }
  32. sub lines {
  33. [ map [ map ref $_ eq 'Slic3r::Point' ? $_->p : [ map sprintf('%.0f', $_), @$_ ], @$_ ], map $_->p, $stl->intersect_facet(vertices(@_), $z, $dz) ];
  34. }