#!/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__;