<> <> DIRECTORY LSPiece USING [Metrics], FitState USING [Handle], Complex USING [Vec], Highlight USING [Context], Cubic 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: Cubic.Bezier] RETURNS [stop: BOOLEAN]; CubicTangents: PROC [state: FitState.Handle, metrics: LSPiece.Metrics, progress: Progress _ NIL]; <> }.