diff --git a/lib/Slic3r/TriangleMesh.pm b/lib/Slic3r/TriangleMesh.pm index 0b10d423..a2bce034 100644 --- a/lib/Slic3r/TriangleMesh.pm +++ b/lib/Slic3r/TriangleMesh.pm @@ -136,16 +136,20 @@ sub check_manifoldness { } } +sub unpack_line { + my ($packed) = @_; + + my @data = unpack I_FMT, $packed; + splice @data, 0, 2, [ @data[0,1] ]; + $data[$_] ||= undef for I_A_ID, I_B_ID, I_PREV_FACET_INDEX, I_NEXT_FACET_INDEX; + $data[I_FACET_EDGE] = undef if $data[I_FACET_EDGE] == -1; + return [@data]; +} + sub make_loops { my ($layer) = @_; - my @lines = map { - my @data = unpack I_FMT, $_; - splice @data, 0, 2, [ @data[0,1] ]; - $data[$_] ||= undef for I_A_ID, I_B_ID; - $data[I_FACET_EDGE] = undef if $data[I_FACET_EDGE] == -1; - [@data] - } @{$layer->lines}; + my @lines = map unpack_line($_), @{$layer->lines}; # remove tangent edges { @@ -428,8 +432,8 @@ sub intersect_facet { $a_id, # I_A_ID $b_id, # I_B_ID $facet_id, # I_FACET_INDEX - undef, # I_PREV_FACET_INDEX - undef, # I_NEXT_FACET_INDEX + 0, # I_PREV_FACET_INDEX + 0, # I_NEXT_FACET_INDEX $edge_type, # I_FACET_EDGE # Unused data: @@ -488,8 +492,8 @@ sub intersect_facet { $points[B][2] || 0, # I_A_ID $points[A][2] || 0, # I_B_ID $facet_id, # I_FACET_INDEX - $prev_facet_index, # I_PREV_FACET_INDEX - $next_facet_index, # I_NEXT_FACET_INDEX + $prev_facet_index || 0, # I_PREV_FACET_INDEX + $next_facet_index || 0, # I_NEXT_FACET_INDEX -1, # I_FACET_EDGE ); #printf " intersection points at z = %f: %f,%f - %f,%f\n", $z, map @$_, @intersection_points; diff --git a/t/stl.t b/t/stl.t index 3d443eda..39ae3f71 100644 --- a/t/stl.t +++ b/t/stl.t @@ -116,7 +116,7 @@ sub add_facet { sub intersect { add_facet(@_); - return $mesh->intersect_facet($#{$mesh->facets}, $z); + return map Slic3r::TriangleMesh::unpack_line($_), $mesh->intersect_facet($#{$mesh->facets}, $z); } sub lines {