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;
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
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)
# 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);
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;
$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 }
};
}