<> <> <> <> <> DIRECTORY LSPiece USING [Metrics], FitState USING [Handle], Complex USING [VEC], Highlight USING [Context], Cubic2 USING [Bezier]; PotentialKnots: CEDAR DEFINITIONS = { DynPoly: PROC [state: FitState.Handle, penalty, lineLength, maxAngle: REAL]; <= maxAngle THEN force a corner at the intersection>> <<>> QuickPoly: PROC [state: FitState.Handle, highlight: Highlight.Context _ NIL]; HVExtremes: PROC [state: FitState.Handle, forceKnot: BOOLEAN _ FALSE]; <> <<>> FindCorners: PROC [state: FitState.Handle, minK: REAL, forceKnot: BOOLEAN _ FALSE]; <=minK.>> <<>> FindInflections: PROC [state: FitState.Handle, flat: REAL, forceKnot: BOOLEAN _ FALSE]; <> <<>> FindDeltaKs: PROC [state: FitState.Handle, minDK: REAL, forceKnot: BOOLEAN _ FALSE]; <> <<>> Find90: PROC [state: FitState.Handle, long, tol: REAL, forceKnot: BOOLEAN _ FALSE, highlight: Highlight.Context _ NIL]; <> <<>> HVLines: PUBLIC PROC [state: FitState.Handle, long, tol: REAL, forceKnot: BOOLEAN _ FALSE, highlight: Highlight.Context _ NIL]; HVTangents: PROC [state: FitState.Handle, tol: REAL, forceKnot: BOOLEAN _ FALSE]; <> <<>> NearlyEqual: PUBLIC PROC [state: FitState.Handle, tol: REAL]; <> <<>> ForceCorners: PUBLIC PROC [state: FitState.Handle, angle: REAL]; <> <<>> QuickTangents: PROC [state: FitState.Handle, maxAngle: REAL, setCorners: BOOLEAN _ FALSE]; <> <<>> SquareTangents: PROC [state: FitState.Handle, maxAngle: REAL, setCorners: BOOLEAN _ FALSE]; <> <<>> CircleTangents: PROC [state: FitState.Handle, maxAngle: REAL]; <> <<>> Progress: TYPE = PROC[tangent: Complex.VEC, cubic: Cubic2.Bezier] RETURNS [stop: BOOLEAN]; CubicTangents: PROC [state: FitState.Handle, metrics: LSPiece.Metrics, progress: Progress _ NIL]; <> <<>> }.