chiark / gitweb /
commitid: break out p_edgelist (nfc)
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Feb 2016 23:19:37 +0000 (23:19 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Feb 2016 23:21:31 +0000 (23:21 +0000)
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

index e75143b46ca91b49697670d54a1ddbd2620d1cd8..87e806bd408cdf58e2d3770f5f9bff1fae39f49a 100755 (executable)
@@ -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";