our $o='';
our $ol='';
-our $param; # for parametric_curve
+our $param; # for parametric_segment
# ev_... functions
#
o_path_point("$pt->{X} $pt->{Y}");
}
-sub segment_used_len ($) {
- my ($used) = @_;
+our $segused_incurrent;
+our $segused_currentpt;
+
+sub segment_used_begin ($) {
+ $segused_incurrent= 0;
+ $segused_currentpt= $_[0];
+}
+sub segment_used_middle ($$) {
+ my ($used,$pt) = @_:
+ segment_used__len($used,$pt);
+}
+sub segment_used_end ($$) {
+ my ($used,$pt) = @_:
+ segment_used__len($used,$pt);
+ segment_used__print();
+}
+sub segment_used__print ($) {
+ my ($pt) = @_;
+ if ($segused_incurrent > 0) {
+ o("%L segmentpart ".
+ $ctx->{Layer}{Level}.$ctx->{Layer}{Kind}." ".$segments[0]." ".
+ loc2dbg($segused_currentpt)." ".
+ log2dbg($pt)." ".
+ $segused_incurrent);
+ }
+ $segused_incurrent= undef;
+ $segused_currentpt= undef;
+}
+
+sub segment_used__len ($$) {
+ my ($used,$pt) = @_;
+ $segused_incurrent++;
+
return if @segments < 3;
$segments[1] -= $used;
return if $segments[1] > 0;
+
+ segment_used__print();
+ segment_used_begin($pt);
+
@segments= @segments[2..$#segments];
o("% segments @segments\n");
}
o(" $psu_subseglw setlinewidth\n");
$param=$p0;
$pt= &$calcfn;
+ segment_used_begin($pt);
for (;;) {
$movstroke= " stroke\n";
$csegbare= $segments[0];
}
o_path_begin();
parametric__o_pt($pt);
-
+
$param += $ppu;
last if $param>=$p1;
- segment_used_len($psu_ulen);
$pt= &$calcfn;
+ segment_used_middle($psu_ulen,$pt);
parametric__o_pt($pt);
o($movstroke);
}
- segment_used_len(($p1-($param-$ppu)) * $lenperp);
+ $used_last= $p1-($param-$ppu);
$param=$p1;
- parametric__o_pt(&$calcfn);
+ $pt= &$calcfn;
+ segment_used_end($used_last * $lenperp, $pt);
+ parametric__o_pt($pt);
o($movstroke);
}
if ($draw =~ m/C/) {