chiark / gitweb /
commitid: Provide for Holes (nfc)
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Feb 2016 23:25:52 +0000 (23:25 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Feb 2016 23:27:43 +0000 (23:27 +0000)
Allow a polygon to have a Holes, which is a list of edges.

Positive/negative recursivion is supported by the data structure but
not by the output code, which simply ignores them.

Currenlty nothing makes holes so this is a no-op.

commitid.scad.pl

index f07bdeb..bbc750e 100755 (executable)
@@ -386,6 +386,7 @@ sub parsefont () {
     my %chrpolys;
     # $chrs{$chr}[$poly] = $poly
     # $poly->{E} = [ "012345012345", ... ]
+    # $poly->{Holes} = $poly2
     while (<DATA>) {
        next unless m/\S/;
        chomp;
@@ -425,14 +426,26 @@ sub parsefont () {
     my $demo = '';
     my $democols = 6;
     foreach my $chr (sort keys %chrpolys) {
+
        my $polys = $chrpolys{$chr};
+       $_->{Holes} = [] foreach @$polys;
+
        my $mod = chrmodname $chr;
        p "module $mod () {\n";
        foreach my $poly (@$polys) {
            p " polygon(";
+           my $holes = $poly->{Holes};
            my (@points, @vecs);
            p_edgelist(\@points, \@vecs, $poly->{E});
+           foreach my $hole (@$holes) {
+               p_edgelist(\@points, \@vecs, $hole->{E});
+           }
            p "points=[".(join ",",@points)."],";
+           if (@$holes) {
+               p ",paths=[".(join ",",
+                            map { "[".(join ",",@$_)."]" }
+                            @vecs)."],";
+           }
            p "convexity=4);\n";
        }
        p "}\n";