left-point y right-point y > [ swap ] when 2array
] if ;
+:: fix-left-chunk ( left right ymin ymax -- left' )
+ left last :> left-point right first :> right-point
+ left-point y { [ ymin = ] [ ymax = ] } 1|| [
+ left
+ ] [
+ left-point y right-point y < ymin ymax ? :> y-coord
+ left-point x right-point x = [
+ left-point x y-coord 2array
+ ] [
+ left-point right-point calc-line-slope
+ y-coord left-point calc-point-y
+ ] if
+ left but-last-slice swap suffix
+ ] if ;
+
+:: fix-right-chunk ( left right ymin ymax -- right' )
+ left last :> left-point right first :> right-point
+ right-point y { [ ymin = ] [ ymax = ] } 1|| [
+ right
+ ] [
+ left-point y right-point y < ymin ymax ? :> y-coord
+ left-point x right-point x = [
+ right-point x y-coord 2array
+ ] [
+ left-point right-point calc-line-slope
+ y-coord left-point calc-point-y
+ ] if
+ right rest-slice swap suffix
+ ] if ;
+
! Split data into chunks to be drawn within the [ymin,ymax] limits.
! Return the (empty?) sequence of chunks, possibly with some new
! points at ymin and ymax at the gap bounds.