mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-10-22 00:01:09 -06:00
Make Repair() idempotent and lowercase
This commit is contained in:
parent
28b043e9a9
commit
5e34a9cf21
9 changed files with 16 additions and 82 deletions
|
@ -9,7 +9,7 @@ sub read_file {
|
|||
|
||||
my $tmesh = Slic3r::TriangleMesh::XS->new;
|
||||
$tmesh->ReadSTLFile(Slic3r::encode_path($file));
|
||||
$tmesh->Repair;
|
||||
$tmesh->repair;
|
||||
my ($vertices, $facets) = ($tmesh->vertices, $tmesh->facets);
|
||||
|
||||
my $model = Slic3r::Model->new;
|
||||
|
|
|
@ -223,7 +223,7 @@ sub repair_stl {
|
|||
|
||||
my $tmesh = Slic3r::TriangleMesh::XS->new();
|
||||
$tmesh->ReadSTLFile($input_file);
|
||||
$tmesh->Repair;
|
||||
$tmesh->repair;
|
||||
$tmesh->WriteOBJFile($output_file);
|
||||
Slic3r::GUI::show_info($self, "Your file was repaired.", "Repair");
|
||||
}
|
||||
|
|
|
@ -148,7 +148,7 @@ sub slice {
|
|||
{
|
||||
my $m = Slic3r::TriangleMesh::XS->new;
|
||||
$m->ReadFromPerl($mesh->vertices, $mesh->facets);
|
||||
$m->Repair;
|
||||
$m->repair;
|
||||
my $lines = $m->slice([ map $_->slice_z, @{$self->layers} ]);
|
||||
for my $layer_id (0..$#$lines) {
|
||||
my $layerm = $self->layers->[$layer_id]->regions->[$region_id];
|
||||
|
|
|
@ -88,18 +88,6 @@ sub clone {
|
|||
Storable::dclone($_[0])
|
||||
}
|
||||
|
||||
sub _facet_edges {
|
||||
my $self = shift;
|
||||
my ($facet_id) = @_;
|
||||
|
||||
my $facet = $self->facets->[$facet_id];
|
||||
return (
|
||||
[ $facet->[-3], $facet->[-2] ],
|
||||
[ $facet->[-2], $facet->[-1] ],
|
||||
[ $facet->[-1], $facet->[-3] ],
|
||||
);
|
||||
}
|
||||
|
||||
sub check_manifoldness {
|
||||
my $self = shift;
|
||||
|
||||
|
@ -222,60 +210,6 @@ sub size {
|
|||
return $self->bounding_box->size;
|
||||
}
|
||||
|
||||
sub get_connected_facets {
|
||||
my $self = shift;
|
||||
my ($facet_id) = @_;
|
||||
|
||||
my %facets = ();
|
||||
foreach my $edge_id (@{$self->facets_edges->[$facet_id]}) {
|
||||
$facets{$_} = 1 for @{$self->edges_facets->[$edge_id]};
|
||||
}
|
||||
delete $facets{$facet_id};
|
||||
return keys %facets;
|
||||
}
|
||||
|
||||
sub split_mesh {
|
||||
my $self = shift;
|
||||
|
||||
$self->analyze;
|
||||
|
||||
my @meshes = ();
|
||||
|
||||
# loop while we have remaining facets
|
||||
while (1) {
|
||||
# get the first facet
|
||||
my @facet_queue = ();
|
||||
my @facets = ();
|
||||
for (my $i = 0; $i <= $#{$self->facets}; $i++) {
|
||||
if (defined $self->facets->[$i]) {
|
||||
push @facet_queue, $i;
|
||||
last;
|
||||
}
|
||||
}
|
||||
last if !@facet_queue;
|
||||
|
||||
while (defined (my $facet_id = shift @facet_queue)) {
|
||||
next unless defined $self->facets->[$facet_id];
|
||||
push @facets, map [ @$_ ], $self->facets->[$facet_id];
|
||||
push @facet_queue, $self->get_connected_facets($facet_id);
|
||||
$self->facets->[$facet_id] = undef;
|
||||
}
|
||||
|
||||
my %vertices = map { $_ => 1 } map @$_[-3..-1], @facets;
|
||||
my @new_vertices = keys %vertices;
|
||||
my %new_vertices = map { $new_vertices[$_] => $_ } 0..$#new_vertices;
|
||||
foreach my $facet (@facets) {
|
||||
$facet->[$_] = $new_vertices{$facet->[$_]} for -3..-1;
|
||||
}
|
||||
push @meshes, Slic3r::TriangleMesh->new(
|
||||
facets => \@facets,
|
||||
vertices => [ map $self->vertices->[$_], keys %vertices ],
|
||||
);
|
||||
}
|
||||
|
||||
return @meshes;
|
||||
}
|
||||
|
||||
# this will return *scaled* expolygons, so it is expected to be run
|
||||
# on unscaled meshes
|
||||
sub horizontal_projection {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue