<> <> <> DIRECTORY Controls, Imager, ImagerPixelMap, IO, Rope, Vector3d, ViewerClasses; Contours: CEDAR DEFINITIONS IMPORTS Imager ~ BEGIN <> ROPE: TYPE ~ Rope.ROPE; STREAM: TYPE ~ IO.STREAM; Context: TYPE ~ Controls.Context; Control: TYPE ~ Controls.Control; Viewer: TYPE ~ ViewerClasses.Viewer; PixelMap: TYPE ~ ImagerPixelMap.PixelMap; Rectangle: TYPE ~ Imager.Rectangle; Color: TYPE ~ Imager.Color; RealIndex: TYPE ~ RECORD [n: NAT _ 0, alpha: REAL _ 0.0]; Pair: TYPE ~ Vector3d.Pair; -- RECORD [x, y: REAL] PairSequence: TYPE ~ Vector3d.PairSequence; PairSequenceRep: TYPE ~ Vector3d.PairSequenceRep; RealSequence: TYPE ~ Vector3d.RealSequence; RealSequenceRep: TYPE ~ Vector3d.RealSequenceRep; Contour: TYPE ~ REF ContourRep; ContourRep: TYPE ~ RECORD [ t: REAL _ 0.0, -- curve parameter, if known closed: BOOL _ FALSE, -- if true, last point connects to 1st circle: BOOL _ TRUE, -- if true, normals = points pairs: PairSequence _ NIL, -- 2d points on contour normals: PairSequence _ NIL, -- 2d normals of contour points percents: RealSequence _ NIL -- % along contour for each point ]; ContourSequence: TYPE ~ REF ContourSequenceRep; ContourSequenceRep: TYPE ~ RECORD [ length: NAT _ 0, element: SEQUENCE maxLength: NAT OF Contour ]; Span: TYPE ~ RECORD [y, x0, x1: INTEGER]; SpanSequence: TYPE ~ REF SpanSequenceRep; SpanSequenceRep: TYPE ~ RECORD [ length: NAT _ 0, element: SEQUENCE maxLength: NAT OF Span ]; <> ContourOK: PUBLIC PROC [contour: Contour] RETURNS [BOOL]; <> <<>> MinMax: PROC [contour: Contour] RETURNS [min, max: Pair]; <> <<>> Centroid: PROC [contour: Contour] RETURNS [Pair]; <> <<>> Area: PROC [contour: Contour] RETURNS [REAL]; <> <> Scale: PROC [contour: Contour, scale: REAL] RETURNS [Contour]; <> <<>> Offset: PROC [contour: Contour, offset: Pair] RETURNS [Contour]; <> <<>> Center: PROC [contour: Contour] RETURNS [Contour]; <> <<>> Orient: PROC [contour: Contour] RETURNS [Contour]; <> <<>> Smooth: PROC [contour: Contour] RETURNS [Contour]; <> <<>> Thin: PROC [contour: Contour, epsilon: REAL _ 3.0] RETURNS [Contour]; <> <> CirclePairs: PROC [nPairs: INTEGER] RETURNS [PairSequence]; <> <<>> Circle: PROC [nPairs: INTEGER] RETURNS [Contour]; <> <> Normals: PROC [contour: Contour] RETURNS [PairSequence]; <> <<>> Percents: PROC [contour: Contour] RETURNS [RealSequence]; <> <<>> AtPercent: PROC [contour: Contour, percent: REAL] RETURNS [RealIndex]; <> PercentPair: PROC [contour: Contour, percent: REAL] RETURNS [Pair]; <> <<>> PercentNormal: PROC [contour: Contour, percent: REAL] RETURNS [Pair]; <> <> Interpolate: PROC [contour0, contour1: Contour, alpha: REAL] RETURNS [Contour]; <> <<>> Sample: PROC [contour: Contour, nPairs: INTEGER] RETURNS [Contour]; <> <<>> Similar: PROC [contour0, contour1: Contour] RETURNS [REAL]; < dissimilar, 1 => similar.>> <> Spans: PROC [contour: Contour, rectangle: Rectangle] RETURNS [SpanSequence]; <> <<>> FillSpans: PROC [pm: PixelMap, spans: SpanSequence, color: CARDINAL]; <> <> Fill: PROC [context: Context, contour: Contour, color: Color _ Imager.black]; <> <<>> Outline: PROC [context: Context, contour: Contour, color: Color _ Imager.black]; <> <<>> OutlinePm: PROC [pm: PixelMap, contour: Contour, color: CARDINAL _ 0]; <> <<>> FillPm: PROC [pm: PixelMap, contour: Contour, color: CARDINAL]; <> <> Copy: PROC [contour: Contour] RETURNS [Contour]; <> <<>> CopySequence: PROC [contour: ContourSequence] RETURNS [ContourSequence]; <> <> Paint: PUBLIC PROC [contour: Contour, context: Context, paintNormals: BOOL _ FALSE]; <> <> FromControl: PROC [control: Control, t: REAL _ 0.0] RETURNS [Contour]; <> <<>> ToControl: PROC [control: Control, contour: Contour, repaint: BOOL _ TRUE]; <> <> Write: PROC [stream: STREAM, contour: Contour]; <> <<>> Read: PROC [stream: STREAM] RETURNS [Contour]; <> <<>> END.