chiark / gitweb /
sorted out part layer problem
authorian <ian>
Fri, 6 Feb 2004 22:15:37 +0000 (22:15 +0000)
committerian <ian>
Fri, 6 Feb 2004 22:15:37 +0000 (22:15 +0000)
TODO
layout/layout
layout/showlib.m4
pcb/Makefile
pic.make
spice/Makefile

diff --git a/TODO b/TODO
index d78f7cde54234048ec585858ebd148791574f59a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,3 +0,0 @@
-quiet bits
-add new `silently' directive or something, as mustn't use layers in parts
-don't use layers in parts
index 66188b44c08b84c1719aea1b7810232fb59b06cf..45da1ccd07d6277e8cda7cadc06a1d6ca9473199 100755 (executable)
@@ -54,17 +54,22 @@ our $allwidthmin= allwidth(undef);
 # Data structures:
 #  $ctx->{CmdLog}= undef                  } not in defobj
 #  $ctx->{CmdLog}[]= [ command args ]     } in defobj
-#  $ctx->{LocsMade}[]{Id}=  $id
-#  $ctx->{LocsMade}[]{Neg}= $id
+#  $ctx->{LocsMade}[]{Id}= $id
+#  $ctx->{LocsMade}[]{Neg}= 1 or 0
 #  $ctx->{Loc}{$id}{X}
 #  $ctx->{Loc}{$id}{Y}
 #  $ctx->{Loc}{$id}{A}
+#  $ctx->{Loc}{$id}{LayerKind}
 #  $ctx->{Trans}{X}       # transformation.  is ev representing
 #  $ctx->{Trans}{Y}       # new origin.  (is applied at _input_
 #  $ctx->{Trans}{A}       # not at plot-time)
 #  $ctx->{Trans}{R}       # but multiply all y coords by this!
 #  $ctx->{Draw}           # sequence of one or more chrs from uc $drawers
-#                         #  or X meaning never draw anything (eg in defobj)
+#                         #  possibly including X meaning never draw
+#                         #  anything now (eg in defobj)
+#  $ctx->{DrawMap}        # =$fn s.t.
+#                         #  &$fn($drawchrs_spec_by_layer_cmdline)
+#                         #   = $drawchrs_we_should_use_due_to_obj_etc
 #  $ctx->{Layer}{Level}
 #  $ctx->{Layer}{Kind}
 #
@@ -309,8 +314,12 @@ sub cva_idnew ($) {
     $neg = $sp =~ s/^\-//;
     $id=cva_idstr($sp);
     die "duplicate $id" if exists $ctx->{Loc}{$id};
-    exists $ctx->{Loc}{$id}{X};
-    push @{ $ctx->{LocsMade} }, { Id => $id, Neg => $neg };
+    $ctx->{Loc}{$id}{LayerKind}= $ctx->{Layer}{Kind};
+    push @{ $ctx->{LocsMade} }, {
+       Id => $id,
+       Neg => $neg,
+    };
+print STDERR "defined $id LayerKind >$ctx->{Layer}{Kind}<\n";
     return $ctx->{Loc}{$id};
 }
 sub cva_cmd ($) { return cva_idstr($_[0]); }
@@ -433,6 +442,13 @@ sub o_line ($$$) {
     o_path_stroke($width);
 }
 
+sub current_draw () {
+    my ($r);
+    $r= $ctx->{Draw} =~ m/X/ ? '' : $ctx->{Draw};
+print STDERR "current_draw >$ctx->{Draw}< gave >$r<\n";
+    $r;
+}
+
 sub psu_coords ($$$) {
     my ($ends,$inunit,$across)=@_;
     # $ends->[0]{X} etc.; $inunit 0 to 1 (but go to 1.5);
@@ -471,7 +487,7 @@ sub parametric_segment ($$$$$) {
     my ($sleeperctr)=($psu_ulen*0.5);
     my ($sleeperend)=($psu_sleeperlen*0.5);
 print DEBUG "ps $p0 $p1 $lenperp ($ppu)\n";
-    $draw= $ctx->{Draw};
+    $draw= current_draw();
     if ($draw =~ m/C/) {
        my ($pt);
        o("    $psu_thinlw setlinewidth\n");
@@ -863,7 +879,8 @@ sub newctx (;$) {
     my ($ctx_save) = @_;
     $ctx= {
        Trans => { X => 0.0, Y => 0.0, A => 0.0, R => 1.0 },
-       InRunObj => ""
+       InRunObj => "",
+       DrawMap => sub { $_[0]; }
        };
     %{ $ctx->{Layer} }= %{ $ctx_save->{Layer} }
         if defined $ctx_save;
@@ -885,7 +902,8 @@ sub cmd__defobj ($) {
     newctx($defobj_save);
     $ctx->{CmdLog}= [ ];
     $ctx->{InDefObj}= $id;
-    $ctx->{Draw}= 'X';
+    $ctx->{Draw}= $defobj_save->{Draw}.'X';
+    $ctx->{DrawMap}= sub { ''; };
     $ctx->{Layer}= { Level => 5, Kind => '' };
 }
 
@@ -914,34 +932,43 @@ sub cmd__runobj ($) {
     }
 }
 
-sub cmd_layer {
-    my ($kl, $k,$l, $eo,$cc);
-    $kl= can(\&cva_identity);
-    $kl =~ m/^([A-Za-z_]*)(\d*|\=)$/ or die "invalid layer spec";
-    ($k,$l)=($1,$2);
-    $l= $ctx->{Layer}{Level} if $l =~ m/^\=?$/;
-    $ctx->{Layer}{Kind}= $l;
-    $ctx->{Layer}{Level}= $l;
-    return if $ctx->{Draw} =~ m/X/;
+sub layer_draw ($$) {
+    my ($k,$l) = @_;
+    my ($eo,$cc, $r);
     if ($output_layer ne '*' && $l != $output_layer) {
-       $ctx->{Draw} = '';
+       $r = '';
     } elsif ($k eq '') {
-       $ctx->{Draw}= 'RLMN';
+       $r= 'RLMN';
     } elsif ($k eq 's') {
-       $ctx->{Draw}= '';
+       $r= '';
     } elsif ($k eq 'l') {
-       $ctx->{Draw}= 'CLMN';
+       $r= 'CLMN';
     } else {
-       $ctx->{Draw}= 'ARSCLMNO';
+       $r= 'ARSCLMNO';
     }
     foreach $eo (@eopts) {
        next unless $k =~ m/^$eo->{GlobRe}$/;
        next unless &{ $eo->{LayerCheck} }($l);
        foreach $cc (split //, $eo->{DrawMods}) {
-           $ctx->{Draw} =~ s/$cc//ig;
-           $ctx->{Draw} .= $cc if $cc =~ m/[A-Z]/;
+           $r =~ s/$cc//ig;
+           $r .= $cc if $cc =~ m/[A-Z]/;
        }
     }
+print STDERR "layer ($k $l) Draw 0 $r\n";
+    $r= &{ $ctx->{DrawMap} }($r);
+print STDERR "layer ($k $l) Draw 1 $r\n";
+    return $r;
+}
+
+sub cmd_layer {
+    my ($kl, $k,$l);
+    $kl= can(\&cva_identity);
+    $kl =~ m/^([A-Za-z_]*)(\d*|\=)$/ or die "invalid layer spec";
+    ($k,$l)=($1,$2);
+    $l= $ctx->{Layer}{Level} if $l =~ m/^\=?$/;
+    $ctx->{Layer}{Kind}= $k;
+    $ctx->{Layer}{Level}= $l;
+    $ctx->{Draw}= layer_draw($k,$l);
 }    
 
 sub cmd_part { cmd__obj(Part); }
@@ -985,14 +1012,21 @@ sub cmd__obj ($) {
     } else {
        $ctx->{InRunObj}= $ctx_save->{InRunObj}."${obj_id}::";
     }
-    $ctx->{Draw}= $ctx_save->{Draw};
-    if ($obj->{Part}) {
-       $ctx->{Draw} =~ s/[LMN]//g;
-       $ctx->{Draw} =~ s/O/MNO/;
-    } else {
-       $ctx->{Draw} =~ s/[LM]//g;
-       $ctx->{Draw} =~ s/N/MN/;
-    }
+    $ctx->{DrawMap}= sub {
+       my ($i) = @_;
+print STDERR "obj $obj_id DrawMap running >$i<\n";
+       $i= &{ $ctx_save->{DrawMap} }($i);
+       if ($obj->{Part}) {
+           $i =~ s/[LMN]//g;
+           $i =~ s/O/MNO/;
+       } else {
+           $i =~ s/[LM]//g;
+           $i =~ s/N/MN/;
+       }
+print STDERR "obj DrawMap returning >$i<\n";
+       return $i;
+    };
+    $ctx->{Draw}= &{ $ctx->{DrawMap} }($ctx_save->{Draw});
     cmd__runobj($obj_id);
     if (defined $part_name) {
        $pfx= $part_name.'_';
@@ -1037,7 +1071,8 @@ sub cmd__do {
     my ($cmd);
 dv("cmd__do $ctx @al ",'$ctx',$ctx);
     $cmd= can(\&cva_cmd);
-    my ($lm,$id,$loc,$io,$ad);
+print STDERR "cmd1 $cmd draw $ctx->{Draw}\n";
+    my ($lm,$id,$loc,$io,$ad,$draw);
     $io= defined $ctx->{InDefObj} ? "$ctx->{InDefObj}!" : $ctx->{InRunObj};
     o("%L cmd   $io $cmd @al\n");
     $ctx->{LocsMade}= [ ];
@@ -1046,21 +1081,23 @@ dv("cmd__do $ctx @al ",'$ctx',$ctx);
        &{ "cmd_$cmd" };
     };
     die "too many args" if @al;
+print STDERR "cmd3 $cmd draw $ctx->{Draw}\n";
     foreach $lm (@{ $ctx->{LocsMade} }) {
        $id= $lm->{Id};
        $loc= $ctx->{Loc}{$id};
        $loc->{A} += $pi if $lm->{Neg};
        $ad= ang2deg($loc->{A});
        ol("%L point $io$id ".loc2dbg($loc)." ($lm->{Neg})\n");
-       if ($ctx->{Draw} =~ m/[LM]/) {
+       $draw= layer_draw($loc->{LayerKind}, $ctx->{Layer}{Level});
+       if ($draw =~ m/[LM]/) {
            ol("    gsave\n".
               "      $loc->{X} $loc->{Y} translate $ad rotate\n");
-           if ($ctx->{Draw} =~ m/M/) {
+           if ($draw =~ m/M/) {
                ol("      0 $allwidthmin newpath moveto\n".
                   "      0 -$allwidthmin lineto\n".
                   "      $lmu_marklw setlinewidth stroke\n");
            }
-           if ($ctx->{Draw} =~ m/L/) {
+           if ($draw =~ m/L/) {
                ol("      /s ($id) def\n".
                   "      lf setfont\n".
                   "      /sx5  s stringwidth pop\n".
@@ -1088,6 +1125,7 @@ sub cmd_showlibrary {
     $ctx_save= $ctx;
     foreach $obj_id (sort keys %objs) {
        $got= 1;
+print STDERR "obj $obj_id\n";
        foreach $glob (@al) {
            $pat= $glob;
            $got= !($pat =~ s/^\!//);
@@ -1134,7 +1172,9 @@ sub cmd_showlibrary {
            
        $ctx->{InRunObj}= $ctx_save->{InRunObj}."${obj_id}//";
        $ctx->{Draw}= $ctx_save->{Draw};
+print STDERR "cmd_showlibrary cmd__runobj 0 draw $ctx->{Draw}\n";
        cmd__runobj($obj_id);
+print STDERR "cmd_showlibrary cmd__runobj 1 draw $ctx->{Draw}\n";
        ol("    gsave\n".
           "      /s ($obj_id) def\n".
           "      lf setfont\n      ".
index fcba8c2682b246831b119e63f5bcbcd10affc9d4..38bf11bfe842ce174932401f7f729e694f0747f5 100644 (file)
@@ -1,3 +1,3 @@
 include(`parts.i4')
-#showlibrary pt_peco_c* pt_peco_l* pt_peco_s* cross_peco_s
-showlibrary
+showlibrary pt_shino_6*
+#showlibrary
index 2c6988fe0bfe618b74d0307e837772c9ab5b2db1..9b4d0446da5258b9c6171ce1036caba1b279128d 100644 (file)
@@ -4,7 +4,7 @@ M4INCS=         parts.i4
 E_TRACK=       ArsCLMNo
 LAYOUTOPTS=    -E$(E_TRACK)
 
-default:       ours-a.ps
+default:       ours-a.ps library.ps
 
 all:           default \
                ours-l0.ps \
@@ -22,5 +22,8 @@ o=>$@.new && mv -f $@.new $@
 ours-l%.ps:    ours.d4 layout
                ./layout <$< $(LAYOUTOPTS) $o
 
+parts.ps:      showlib.d4 layout
+               ./layout <$< $o
+
 clean:
                -rm -f -- *.d4 *.ps
index 2c6988fe0bfe618b74d0307e837772c9ab5b2db1..9b4d0446da5258b9c6171ce1036caba1b279128d 100644 (file)
--- a/pic.make
+++ b/pic.make
@@ -4,7 +4,7 @@ M4INCS=         parts.i4
 E_TRACK=       ArsCLMNo
 LAYOUTOPTS=    -E$(E_TRACK)
 
-default:       ours-a.ps
+default:       ours-a.ps library.ps
 
 all:           default \
                ours-l0.ps \
@@ -22,5 +22,8 @@ o=>$@.new && mv -f $@.new $@
 ours-l%.ps:    ours.d4 layout
                ./layout <$< $(LAYOUTOPTS) $o
 
+parts.ps:      showlib.d4 layout
+               ./layout <$< $o
+
 clean:
                -rm -f -- *.d4 *.ps
index 2c6988fe0bfe618b74d0307e837772c9ab5b2db1..9b4d0446da5258b9c6171ce1036caba1b279128d 100644 (file)
@@ -4,7 +4,7 @@ M4INCS=         parts.i4
 E_TRACK=       ArsCLMNo
 LAYOUTOPTS=    -E$(E_TRACK)
 
-default:       ours-a.ps
+default:       ours-a.ps library.ps
 
 all:           default \
                ours-l0.ps \
@@ -22,5 +22,8 @@ o=>$@.new && mv -f $@.new $@
 ours-l%.ps:    ours.d4 layout
                ./layout <$< $(LAYOUTOPTS) $o
 
+parts.ps:      showlib.d4 layout
+               ./layout <$< $o
+
 clean:
                -rm -f -- *.d4 *.ps