CubicPaths.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Written by: Maureen Stone August 5, 1985 8:39:13 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] 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];
END.