PrusaSlicer-NonPlainar/lib/Slic3r/Format/OBJ.pm

37 lines
880 B
Perl
Raw Normal View History

2012-05-20 09:40:37 +00:00
package Slic3r::Format::OBJ;
use Moo;
use File::Basename qw(basename);
2012-05-20 09:40:37 +00:00
sub read_file {
my $self = shift;
my ($file) = @_;
Slic3r::open(\my $fh, '<', $file) or die "Failed to open $file\n";
2012-05-20 09:40:37 +00:00
my $vertices = [];
my $facets = [];
while (<$fh>) {
2012-05-20 09:40:37 +00:00
if (/^v ([^ ]+)\s+([^ ]+)\s+([^ ]+)/) {
push @$vertices, [$1, $2, $3];
} elsif (/^f (\d+).*? (\d+).*? (\d+).*?/) {
push @$facets, [ $1-1, $2-1, $3-1 ];
}
}
close $fh;
2013-09-11 12:46:38 +00:00
my $mesh = Slic3r::TriangleMesh->new;
$mesh->ReadFromPerl($vertices, $facets);
$mesh->repair;
my $model = Slic3r::Model->new;
my $material_id = basename($file);
$model->set_material($material_id);
2013-09-11 12:46:38 +00:00
my $object = $model->add_object;
my $volume = $object->add_volume(mesh => $mesh, material_id => $material_id);
return $model;
2012-05-20 09:40:37 +00:00
}
1;