<> <> DIRECTORY CGCubic USING [Bezier], Vector USING [Vec]; <> PolygonPen: DEFINITIONS = BEGIN Pen: TYPE = REF PenRec; PenRec: TYPE = RECORD[point: SEQUENCE n:NAT OF Vector.Vec]; <> Bezier: TYPE = CGCubic.Bezier; -- RECORD[b0,b1,b2,b3: Vec]; Vec: TYPE = Vector.Vec; -- RECORD[x,y: REAL]; <> <> MoveToProc: TYPE = PROCEDURE [z0: Vec]; LineToProc: TYPE = PROCEDURE [z1: Vec]; CurveToProc: TYPE = PROCEDURE [z1, z2, z3: Vec]; -- three Bezier control points. z3 is the new last point. SimpleStroke: PROCEDURE [pen: Vec, curve: Bezier, moveTo: MoveToProc, lineTo:LineToProc, curveTo:CurveToProc]; -- for when the interior of the curve is known never to be parallel to the pen BroadStroke: PROCEDURE [pen: Vec, curve: Bezier, moveTo: MoveToProc, lineTo:LineToProc, curveTo:CurveToProc]; -- for a compound stroke with a broad pen. Dot: PROCEDURE [pen: Pen, point: Vector.Vec, moveTo: MoveToProc, lineTo:LineToProc, curveTo:CurveToProc]; Line: PROCEDURE [pen: Pen, startPoint,endPoint: Vector.Vec, moveTo: MoveToProc, lineTo:LineToProc, curveTo:CurveToProc]; Stroke: PROCEDURE [pen: Pen, curve: Bezier, moveTo: MoveToProc, lineTo:LineToProc, curveTo:CurveToProc]; END.