<> <> <> <> <> DIRECTORY Imager USING [Rectangle, VEC, Transformation], ImagerPath USING [MoveToProc, CurveToProc], CubicSplines USING [CoeffsSequence], Cubic2 USING [Bezier]; CubicPaths: CEDAR DEFINITIONS ~ BEGIN VEC: TYPE = Imager.VEC; Path: TYPE = REF PathRec; PathRec: TYPE = RECORD[bounds: Imager.Rectangle, cubics: REF PathSequence]; PathSequence: TYPE = RECORD[bezier: SEQUENCE length: NAT OF Cubic2.Bezier]; PathFromCubic: PROC [coeffs: CubicSplines.CoeffsSequence, newBounds: BOOL _ TRUE] RETURNS [Path]; EnumeratePath: PROC [path: Path, moveTo: ImagerPath.MoveToProc, curveTo: ImagerPath.CurveToProc]; <> <> PointProc: TYPE = PROC [p: VEC] RETURNS [stop: BOOLEAN _ FALSE]; WalkPath: PROC [path: Path, tol: REAL, proc: PointProc]; <> PointOnPath: PROC [pt: VEC, path: Path, tol: REAL] RETURNS [BOOLEAN]; TranslatePath: PROC [path: Path, offset: VEC]; TransformPath: PROC [path: Path, tranformation: Imager.Transformation, newBounds: BOOL _ TRUE]; <> UpdateBounds: PROC [path: Path]; --updates the bounding rectangle ClosestPoint: PROC [pt: VEC, path: Path] RETURNS[VEC]; CopyPath: PROC [path: Path] RETURNS[Path]; ReversePath: PROC [path: Path]; --reverses it in place <<>> END.