chiark / gitweb /
wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 28 Feb 2019 13:53:15 +0000 (13:53 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 28 Feb 2019 13:53:15 +0000 (13:53 +0000)
generate-board

index d981907841e0dba6951f4584bf8b6b6e580e671a..0981417e167773f2010eebfde58d4cb18ef931ef 100755 (executable)
@@ -23,6 +23,10 @@ sub prep_region_rmap () {
     die if $prs2region{$prs};
     $prs2region{$prs} = $rn;
   }
+
+  # bodgery for the sea and land
+  $prs2region{'NZ | L'} = 'NZ';
+  $prs2region{'L | NZ'} = 'NZ';
 }
 
 our $sre = qr{(?:(\")|(?=\w))(.*)\1$}; # 2 captures, $2 is the name
@@ -36,6 +40,7 @@ sub read_faces () {
   # Sets
   #  $region{NAME}{Adj}[]{Ends}[]{VxName}
   #  $region{NAME}{Adj}[]{Ends}[]{Pos}
+  #  $region{'NZ'}{Polygon}{Pos}
   #
   # also incidentally
   #  $region{NAME}{Adj}[]{Ends}[]{Adjoins} which should be ignored
@@ -46,24 +51,37 @@ sub read_faces () {
   my @edges;
   my $process_rr = sub {
     my $last_ai;
-    for my $ei (0..$#edges) {
-      my $ej = $ei % @edges;
-      if (!defined $last_ai) {
-       my $ai;
-       for my $ai (0..$#{ $rr->{Adj} }) {
-         next unless $rr->{Adj}[$ai]{Name} eq $edges[$ei]{Adjoins};
-         $last_ai = $ai+1;
+    if ($rr->{Name} eq 'NZ') {
+      # We combined L and NZ; now we must split them again
+      # in fact, we just throw away L entirely.
+      # Here, when processing NZ, we keep only vertices that
+      # are part of NZ.
+      @edges = grep {
+       my $evxname = $_->{VxName};
+       my @eregions = split / \| ?/, $evxname;
+       grep { $_ eq 'NZ' } @eregions
+      } @edges;
+      $rr->{Polygon} = [ @edges ];
+    } else {
+      for my $ei (0..$#edges) {
+       my $ej = $ei % @edges;
+       if (!defined $last_ai) {
+         my $ai;
+         for my $ai (0..$#{ $rr->{Adj} }) {
+           next unless $rr->{Adj}[$ai]{Name} eq $edges[$ei]{Adjoins};
+           $last_ai = $ai+1;
+         }
+         confess $edges[$ei]{Adjoins}.' ?' unless defined $last_ai;
        }
-       confess unless defined $last_ai;
-      }
-      my $ai = ($last_ai-1+@edges) % @edges;
-      $last_ai = $ai;
-      my $adj = $rr->{Adj}[$ai];
-      confess Dumper($rr, \@edges, $ei, $ej, $adj, $last_ai, $ai)." ?"
-         unless $adj->{Name} eq $edges[$ei]{Adjoins};
+       my $ai = ($last_ai-1+@edges) % @edges;
+       $last_ai = $ai;
+       my $adj = $rr->{Adj}[$ai];
+       confess Dumper($rr, \@edges, $ei, $ej, $adj, $last_ai, $ai)." ?"
+           unless $adj->{Name} eq $edges[$ei]{Adjoins};
       
-      for my $endi (0..1) {
-       $adj->{Ends}[$endi] = $edges[ ($ei + $endi) % @edges ];
+       for my $endi (0..1) {
+         $adj->{Ends}[$endi] = $edges[ ($ei + $endi) % @edges ];
+       }
       }
     }
     @edges = ();
@@ -86,7 +104,7 @@ sub read_faces () {
     } elsif (m/^\s+\^\@([-e.0-9]+)\,([-e.0-9]+)$/) {
       my $pos = Math::GSL::Vector->new([$1,$2]);
       confess unless defined $vxname;
-      #$edges[-1]{Pos} = $pos;
+      $edges[-1]{Pos} = $pos;
       $vxname2pos{$vxname} = $pos;
     }
   }