From aabf574d098b677f58ad535025c5c56643e26c94 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 14 Feb 2016 23:19:37 +0000 Subject: [PATCH] commitid: break out p_edgelist (nfc) This also provides a facility for accumulating multiple paths, so that we can use the subtraction feature of openscad's polygon operator. --- commitid.scad.pl | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/commitid.scad.pl b/commitid.scad.pl index e75143b..87e806b 100755 --- a/commitid.scad.pl +++ b/commitid.scad.pl @@ -360,6 +360,19 @@ END 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 (;;) { @@ -416,15 +429,10 @@ sub parsefont () { 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"; -- 2.30.2