chiark / gitweb /
fix face ordering
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 1 Mar 2019 13:00:35 +0000 (13:00 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 1 Mar 2019 13:00:35 +0000 (13:00 +0000)
generate-board

index dd1455e2f3465328e9f353a6f886a46be696213e..54a565f661adf1f207466ae08e706b1cee997bce 100755 (executable)
@@ -277,21 +277,23 @@ sub face_path ($) {
   o("    closepath\n");
 }
 
-sub write_face_edges() {
-  o("5 setlinewidth 1 setlinejoin\n");
+sub fill_faces() {
   foreach my $rr (values %region) {
     next if $rr->{Name} eq 'L';
     face_path($rr);
-    # xxx ordering: must do all fills then all strokes
     my $chex = $c{Colours}{$rr->{Colour}};
-    if ($chex) {
-      o("    gsave ");
-      o(sprintf " %.6f ", hex($_) / 15.0) foreach split //, $chex;
-      o(" setrgbcolor eofill grestore\n");
-    }
-    if ($rr->{Name} ne 'NZ') {
-      o("    stroke\n");
-    }
+    next unless $chex;
+    o(sprintf " %.6f ", hex($_) / 15.0) foreach split //, $chex;
+    o(" setrgbcolor eofill\n");
+  }
+}
+
+sub edge_faces() {
+  o("5 setlinewidth 1 setlinejoin 0 setgray\n");
+  foreach my $rr (values %region) {
+    next if $rr->{Name} eq 'L';
+    face_path($rr);
+    o("    stroke\n");
   }
 }
 
@@ -308,7 +310,8 @@ adjust_nz();
 o("%!\n");
 o(" 0.52 dup scale\n"); # xxx bodge
 # xxx boundingbox
-write_face_edges();
+fill_faces();
+edge_faces();
 
 print STDERR Dumper(\%region) if $ENV{'GENERATE_BOARD_DUP'};