From a5937d269a0d94efa46a7a8ae437cbde704e63bf Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 28 Feb 2019 13:53:15 +0000 Subject: [PATCH] wip --- generate-board | 52 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/generate-board b/generate-board index d981907..0981417 100755 --- a/generate-board +++ b/generate-board @@ -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; } } -- 2.30.2