def horizontal_sweep
bend-visgraph@2.0.0.0 · visgraph.bend:718
import bend-visgraph@2.0.0.0/visgraph.bend as Visgraph
import Base
718
719
720def horizontal_sweep(pts: Pts, up: Bool, stop: Bool, +dir: Direction, +k: Weight, +lo: F32, +hi: F32, +ia: U32, +xa: F32, +ya: F32, +ts: Tops, low: Low, +ib: U32, +xb: F32, +yb: F32, es: Edges) -> Edges:
721 match pts up stop:
722 case _ False{} True{}:
723 es
724 case PNil{} False{} False{}:
725 es
726 case PNil{} True{} _:
727 horizontal_edge(dir, k, lo, hi, ia, ib, xa, xb, ya, yb, ts, es)
728 case PCon{+ic, xc, +yc, next} False{} False{}:
729 Low{+lk, +lv} = low
730 horizontal_sweep(next, F32.is_gt(ya, lv) && F32.is_gt(yc, lv), False{}, dir, k, lo, hi, ia, xa, ya, ts, Low{lk, lv}, ic, xc, yc, es)
731 case PCon{+ic, xc, +yc, next} True{} _:
732 Low{+lk, lv} = low
733 +after = set_at(lk, ts, yb)
734 +now = lowest(after)
735 horizontal_sweep(next, F32.is_gt(ya, Low.v(now)) && F32.is_gt(yc, Low.v(now)), F32.is_gt(Low.v(now), ya), dir, k, lo, hi, ia, xa, ya, after, now, ic, xc, yc, horizontal_edge(dir, k, lo, hi, ia, ib, xa, xb, ya, yb, ts, es))