This also provides a facility for accumulating multiple paths, so that
we can use the subtraction feature of openscad's polygon operator.
our @demo;
+
+sub p_edgelist ($$$) {
+ my ($points,$vecs,$p) = @_;
+ my @vec;
+ foreach my $pt (@$p) {
+ $pt =~ s{\d{5}}{$&,};
+ $pt =~ s{\b\d}{$&.}g;
+ push @$points, "[$pt]";
+ push @vec, $#$points;
+ }
+ push @$vecs, \@vec;
+}
+
sub parsefont () {
my %cellmap;
for (;;) {
my $mod = chrmodname $chr;
p "module $mod () {\n";
foreach my $poly (@$polys) {
- p " polygon([";
- my $delim = "";
- foreach my $pt (@{ $poly->{E} }) {
- p $delim;
- $pt =~ s{\d{5}}{$&,};
- $pt =~ s{\b\d}{$&.}g;
- p "[$pt]";
- $delim = ',';
- }
+ p " polygon(";
+ my (@points, @vecs);
+ p_edgelist(\@points, \@vecs, $poly->{E});
+ p "points=[".(join ",",@points)."]";
p "]);\n";
}
p "}\n";