Fixed regression causing fatal errors with many objects. #394
This commit is contained in:
parent
acf4f032be
commit
d8d2f73aff
2 changed files with 16 additions and 12 deletions
|
@ -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;
|
||||
|
|
2
t/stl.t
2
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 {
|
||||
|
|
Loading…
Reference in a new issue