chiark / gitweb /
can do spindly
authorian <ian>
Sun, 25 Jan 2004 23:06:47 +0000 (23:06 +0000)
committerian <ian>
Sun, 25 Jan 2004 23:06:47 +0000 (23:06 +0000)
layout/layout

index 1f8d4ef125294066b04cc5f1bb035f7f4ab77295..0db06b5e9542c05c34e3c43a383742604c0927a2 100755 (executable)
@@ -16,6 +16,7 @@ our $psu_gauge= 9;
 our $psu_sleeperlen= 17;
 our $psu_sleeperlw= 15;
 our $psu_raillw= 1.0;
+our $psu_thinlw= 1.0;
 
 our $lmu_marklw= 4;
 our $lmu_marktpt= 11;
@@ -27,6 +28,9 @@ our $lmu_txtboxlw= 1;
 
 our $pi= atan2(0,-1);
 
+our $draw_t_def= '1';
+#$draw_t_def= 'T';
+
 # Data structures:
 #  $ctx->{CmdLog}= undef                  } not in defobj
 #  $ctx->{CmdLog}[]= [ command args ]     } in defobj
@@ -339,6 +343,11 @@ sub psu_coords ($$$) {
     return $ea_zo{X}." ".$ea_zo{Y};
 }
 
+sub parametric__o_pt ($) {
+    my ($pt)=@_;
+    o_path_point("$pt->{X} $pt->{Y}");
+}
+
 sub parametric_segment ($$$$) {
     my ($p0,$p1,$lenperp,$calcfn) = @_;
     # makes $p (global) go from $p0 to $p1  ($p1>$p0)
@@ -346,8 +355,8 @@ sub parametric_segment ($$$$) {
     # must have a uniform `density' in parameter space
     # $calcfn is invoked with $p set and should return a loc
     # (ie, ref to X =>, Y =>, A =>).
-    my ($pa,$pb,@ends,$side,$ppu,$e,$v,$tick);
-    return unless $ctx->{Draw}{T} =~ m/1/;
+    my ($pa,$pb,@ends,$side,$ppu,$e,$v,$tick,$thinline);
+    return unless $ctx->{Draw}{T} =~ m/./;
     $ppu= $psu_ulen/$lenperp;
     my ($railctr)=($psu_gauge + $psu_raillw)*0.5;
     my ($tickend)=($psu_allwidth - $psu_ticklen);
@@ -355,6 +364,19 @@ sub parametric_segment ($$$$) {
     my ($sleeperctr)=($psu_ulen*0.5);
     my ($sleeperend)=($psu_sleeperlen*0.5);
 print DEBUG "ps $p0 $p1 $lenperp ($ppu)\n";
+    $thinline= $ctx->{Draw}{T} !~ m/1/;
+    if ($thinline) {
+       my ($pt);
+       o("    $psu_thinlw setlinewidth\n");
+       o_path_begin();
+       for ($param=$p0; $param<$p1; $param += $ppu) {
+           parametric__o_pt(&$calcfn);
+       }
+       $param=$p1;
+       parametric__o_pt(&$calcfn);
+       o("      stroke\n");
+       return;
+    }
     for ($pa= $p0; $pa<$p1; $pa=$pb) {
        $pb= $pa + $ppu;
        $param= $pa; $ends[0]= @ends ? $ends[1] : &$calcfn;
@@ -594,7 +616,7 @@ sub newctx () {
     $ctx= {
        Trans => { X => 0.0, Y => 0.0, A => 0.0, R => 1.0 },
        InRunObj => "",
-       Draw => { T => 1, L => L1 }
+       Draw => { T => $draw_t_def, L => L1 }
        };
 }