<<>> <> <> <> DIRECTORY G3dBasic, G3dModel, G3dPlane, G3dPolygon; G3dNavigate: CEDAR DEFINITIONS ~ BEGIN <> Spot: TYPE ~ RECORD [point: Triple, pair: Pair, polygon: Polygon]; Intersection: TYPE ~ RECORD [disjoint: BOOL ¬ TRUE, pt: Pair]; Seg: TYPE ~ RECORD [p0, p1: Pair, line: Triple ¬ [0, 0, 0]]; <> Border: TYPE ~ G3dBasic.Border; NatPair: TYPE ~ G3dBasic.NatPair; NatSequence: TYPE ~ G3dBasic.NatSequence; SurfaceSequence: TYPE ~ G3dBasic.SurfaceSequence; Pair: TYPE ~ G3dBasic.Pair; PairSequence: TYPE ~ G3dBasic.PairSequence; PairSequenceRep: TYPE ~ G3dBasic.PairSequenceRep; Quad: TYPE ~ G3dBasic.Quad; Triple: TYPE ~ G3dBasic.Triple; TripleSequence: TYPE ~ G3dBasic.TripleSequence; TripleSequenceRep: TYPE ~ G3dBasic.TripleSequenceRep; Model: TYPE ~ G3dModel.Model; MajorPlane: TYPE ~ G3dPlane.MajorPlane; Polygon: TYPE ~ G3dPolygon.Polygon; <> Error: SIGNAL [reason: ATOM]; <> PointFromPair: PROC [pair: Pair, poly: Polygon] RETURNS [Triple]; <> <> <> <<>> PairOn2dLine: PROC [pair: Pair, line: Triple] RETURNS [Border]; <> <<>> Intersect: PROC [s0, s1: Seg] RETURNS [Intersection]; <> <> <<>> MoveSpot: PROC [old: Spot, direction: Triple, distance: REAL] RETURNS [Spot]; <> <<>> IntersectNextPoly: PROC [in, out: Spot] RETURNS [next: Spot]; <> <> <<>> MoveOnPolygon: PROC [old: Spot, direction: Triple, distance: REAL] RETURNS [Spot]; <> <> <<>> MoveToPolygonEdge: PROC [old: Spot, direction: Triple] RETURNS [Spot]; <> <> END.