chiark / gitweb /
wip for %L segmentpart output
authorian <ian>
Fri, 11 Mar 2005 18:08:32 +0000 (18:08 +0000)
committerian <ian>
Fri, 11 Mar 2005 18:08:32 +0000 (18:08 +0000)
layout/layout

index bf006ce563070355eb2d4464e1a9f109a0d939e6..9e038274b1698e532095285cd4fed14da8d22eed 100755 (executable)
@@ -241,7 +241,7 @@ our @al; # current cmd
 our $o='';
 our $ol='';
 
-our $param; # for parametric_curve
+our $param; # for parametric_segment
 
 # ev_... functions
 #
@@ -623,11 +623,46 @@ sub parametric__o_pt ($) {
     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");
 }
@@ -657,6 +692,7 @@ print DEBUG "ps $p0 $p1 $lenperp ($ppu)\n";
        o("    $psu_subseglw setlinewidth\n");
        $param=$p0;
        $pt= &$calcfn;
+       segment_used_begin($pt);
        for (;;) {
            $movstroke= "      stroke\n";
            $csegbare= $segments[0];
@@ -684,17 +720,19 @@ print DEBUG "ps $p0 $p1 $lenperp ($ppu)\n";
            }
            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/) {