papercraft/stl-convert

49 lines
725 B
Perl
Executable File

#!/usr/bin/perl
# Convert an ASCII STL file to a binary one
use warnings;
use strict;
use Data::Dumper;
undef $/;
local $_ = <>;
my ($name) = /^solid (.*?)$/msg;
sub v3pack
{
my $rc = '';
for (@_)
{
my @f = split /\s+/;
$rc .= pack("f3", @f);
}
return $rc;
}
my @faces;
for(/facet(.*?)endfacet$/msg)
{
my ($normals) = /normal (.*?)$/msg;
my @v = /vertex (.*?)$/msg;
#print Dumper(\@v);
push @faces, v3pack($normals,@v) . chr(0) . chr(0);
}
my $triangle_count = @faces;
warn "$name: $triangle_count triangles\n";
if (length $name > 80)
{
warn "truncating name\n";
$name = substr($name, 0, 80);
} else {
$name .= ' ' x (80 - length $name);
}
print $name, pack("L", $triangle_count), @faces;
__END__;