diff options
author | Alessandro Ranellucci <aar@cpan.org> | 2012-08-29 18:49:38 +0400 |
---|---|---|
committer | Alessandro Ranellucci <aar@cpan.org> | 2012-08-29 19:12:32 +0400 |
commit | f90520ed0666533842ca2512d8dd52fb70327250 (patch) | |
tree | ff6b5ed19937d51356c8236f67bfbd9a720d5855 /utils | |
parent | c0322ec703ab065fa5fece6eac711b4c020f1555 (diff) |
Refactoring: new Slic3r::Model class to represent files
Diffstat (limited to 'utils')
-rwxr-xr-x | utils/amf-to-stl.pl | 4 | ||||
-rwxr-xr-x | utils/split_stl.pl | 11 | ||||
-rwxr-xr-x | utils/stl-to-amf.pl | 39 |
3 files changed, 40 insertions, 14 deletions
diff --git a/utils/amf-to-stl.pl b/utils/amf-to-stl.pl index 847e5e749..b421dd33a 100755 --- a/utils/amf-to-stl.pl +++ b/utils/amf-to-stl.pl @@ -25,12 +25,12 @@ my %opt = (); } { - my $mesh = Slic3r::Format::AMF->read_file($ARGV[0]); + my $model = Slic3r::Format::AMF->read_file($ARGV[0]); my $output_file = $ARGV[0]; $output_file =~ s/\.amf(?:\.xml)?$/\.stl/i; printf "Writing to %s\n", basename($output_file); - Slic3r::Format::STL->write_file($output_file, $mesh, !$opt{ascii}); + Slic3r::Format::STL->write_file($output_file, $model, binary => !$opt{ascii}); } diff --git a/utils/split_stl.pl b/utils/split_stl.pl index af9890116..42d2926bd 100755 --- a/utils/split_stl.pl +++ b/utils/split_stl.pl @@ -25,15 +25,20 @@ my %opt = (); } { - my $mesh = Slic3r::Format::STL->read_file($ARGV[0]); + my $model = Slic3r::Format::STL->read_file($ARGV[0]); my $basename = $ARGV[0]; $basename =~ s/\.stl$//i; my $part_count = 0; - foreach my $new_mesh ($mesh->split_mesh) { + foreach my $new_mesh ($model->mesh->split_mesh) { + my $new_model = Slic3r::Model->new; + $new_model + ->add_object(vertices => $new_mesh->vertices) + ->add_volume(facets => $new_mesh->facets); + my $output_file = sprintf '%s_%02d.stl', $basename, ++$part_count; printf "Writing to %s\n", basename($output_file); - Slic3r::Format::STL->write_file($output_file, $new_mesh, !$opt{ascii}); + Slic3r::Format::STL->write_file($output_file, $new_model, binary => !$opt{ascii}); } } diff --git a/utils/stl-to-amf.pl b/utils/stl-to-amf.pl index f4805369b..90aacc535 100755 --- a/utils/stl-to-amf.pl +++ b/utils/stl-to-amf.pl @@ -18,29 +18,49 @@ my %opt = (); { my %options = ( 'help' => sub { usage() }, + 'distinct-materials' => \$opt{distinct_materials}, ); GetOptions(%options) or usage(1); $ARGV[0] or usage(1); } { - my @meshes = map Slic3r::Format::STL->read_file($_), @ARGV; + my @models = map Slic3r::Format::STL->read_file($_), @ARGV; my $output_file = $ARGV[0]; $output_file =~ s/\.stl$/.amf.xml/i; - my $materials = {}; - my $meshes_by_material = {}; - if (@meshes == 1) { - $meshes_by_material->{_} = $meshes[0]; + my $new_model = Slic3r::Model->new; + + if ($opt{distinct_materials} && @models > 1) { + my $new_object = $new_model->add_object; + for my $m (0 .. $#models) { + my $model = $models[$m]; + my $v_offset = @{$new_object->vertices}; + push @{$new_object->vertices}, @{$model->objects->[0]->vertices}; + my @new_facets = map { + my $f = [@$_]; + $f->[$_] += $v_offset for -3..-1; + $f; + } @{ $model->objects->[0]->volumes->[0]->facets }; + + push @{$new_model->materials}, { Name => basename($ARGV[$m]) }; + $new_object->add_volume( + material_id => $#{$new_model->materials}, + facets => [@new_facets], + ); + } } else { - for (0..$#meshes) { - $materials->{$_+1} = { Name => basename($ARGV[$_]) }; - $meshes_by_material->{$_+1} = $meshes[$_]; + foreach my $model (@models) { + $new_model->add_object( + vertices => $model->objects->[0]->vertices, + )->add_volume( + facets => $model->objects->[0]->volumes->[0]->facets, + ); } } printf "Writing to %s\n", basename($output_file); - Slic3r::Format::AMF->write_file($output_file, $materials, $meshes_by_material); + Slic3r::Format::AMF->write_file($output_file, $new_model); } @@ -51,6 +71,7 @@ sub usage { Usage: amf-to-stl.pl [ OPTIONS ] file.stl [ file2.stl [ file3.stl ] ] --help Output this usage screen and exit + --distinct-materials Assign each STL file to a different material EOF exit ($exit_code || 0); |