CubicPaths.mesa
Copyright Ó 1985, 1987 by Xerox Corporation. All rights reserved.
Written by: Maureen Stone August 5, 1985 8:39:13 pm PDT
Russ Atkinson (RRA) February 2, 1987 10:43:11 pm PST
Pier, August 5, 1987 3:50:29 pm PDT
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: BOOLTRUE] RETURNS [Path];
EnumeratePath: PROC [path: Path, moveTo: ImagerPath.MoveToProc, curveTo: ImagerPath.CurveToProc];
Call this inside of an Imager.PathProc to display the path.
ie: pathProc: ImagerPath.PathProc = {EnumeratePath[path, moveTo, curveTo]};
PointProc: TYPE = PROC [p: VEC] RETURNS [stop: BOOLEANFALSE];
WalkPath: PROC [path: Path, tol: REAL, proc: PointProc];
Enumerates all the points on the curve. Uses subdivision. tol is for the flatness test
PointOnPath: PROC [pt: VEC, path: Path, tol: REAL] RETURNS [BOOLEAN];
TranslatePath: PROC [path: Path, offset: VEC];
TransformPath: PROC [path: Path, tranformation: Imager.Transformation, newBounds: BOOLTRUE];
Formerly in CubicPathsExtras
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.