diff --git a/lib/Slic3r/Format/STL.pm b/lib/Slic3r/Format/STL.pm index 5325a4ea..0ac21fbc 100644 --- a/lib/Slic3r/Format/STL.pm +++ b/lib/Slic3r/Format/STL.pm @@ -47,71 +47,9 @@ sub read_file { my $point_id = join ',', @{$facets->[$f][$_]}; if (exists $vertices_map{$point_id}) { $facets->[$f][$_] = $vertices_map{$point_id}; - ### push @{$vertices_facets[$facets->[$f][$_]]}, $f; } else { push @$vertices, $facets->[$f][$_]; $facets->[$f][$_] = $vertices_map{$point_id} = $#$vertices; - ### $vertices_facets[$#$vertices] = [$f]; - } - } - } - - # The following loop checks that @vertices_facets only groups facets that - # are really connected together (i.e. neighbors or sharing neighbors); - # in other words it takes care of multiple vertices occupying the same - # point in space. It enforces topological correctness which is needed by - # the slicing algorithm. - # I'm keeping it disabled until I find a good test case. - # The two lines above commented out with '###' need to be - # uncommented for this to work. - if (0) { - my $vertices_count = $#$vertices; # store it to avoid processing newly created vertices - for (my $v = 0; $v <= $vertices_count; $v++) { - my $more_than_one_vertex_in_this_point = 0; - while (@{$vertices_facets[$v]}) { - my @facets_indexes = @{$vertices_facets[$v]}; - @{$vertices_facets[$v]} = (); - - my @this_f = shift @facets_indexes; - CYCLE: while (@facets_indexes && @this_f) { - - # look for a facet that is connected to $this_f[-1] and whose common line contains $v - my @other_vertices_indexes = grep $_ != $v, @{$facets->[$this_f[-1]]}[-3..-1]; - - OTHER: for my $other_f (@facets_indexes) { - # facet is connected if it shares one more point - for (grep $_ != $v, @{$facets->[$other_f]}[-3..-1]) { - if ($_ ~~ @other_vertices_indexes) { - #printf "facet %d is connected to $other_f (sharing vertices $v and $_)\n", $this_f[-1]; - - # TODO: we should ensure that the common edge has a different orientation - # for each of the two adjacent facets - - push @this_f, $other_f; - @facets_indexes = grep $_ != $other_f, @facets_indexes; - next CYCLE; - } - } - } - # if we're here, then we couldn't find any facet connected to $this_f[-1] - # so we should move this one to a different cluster (that is, a new vertex) - # (or ignore it if it turns to be a non-manifold facet) - if (@this_f > 1) { - push @{$vertices_facets[$v]}, $this_f[-1]; - pop @this_f; - $more_than_one_vertex_in_this_point++; - } else { - last CYCLE; - } - } - - if ($more_than_one_vertex_in_this_point) { - Slic3r::debugf " more than one vertex in the same point\n"; - push @$vertices, $vertices->[$v]; - for my $f (@this_f) { - $facets->[$f][$_] = $#$vertices for grep $facets->[$f][$_] == $v, -3..-1; - } - } } } }