<> <> <> <> DIRECTORY GGModelTypes; GGLines: CEDAR DEFINITIONS = BEGIN Point: TYPE = GGModelTypes.Point; Edge: TYPE = GGModelTypes.Edge; Line: TYPE = GGModelTypes.Line; Ray: TYPE = GGModelTypes.Ray; Vector: TYPE = GGModelTypes.Vector; <> CreateEmptyLine: PROC RETURNS [line: Line]; CopyLine: PROC [from: Line, to: Line]; <> FillLineFromPoints: PROC [v1, v2: Point, line: Line]; FillLineFromPointAndVector: PROC [pt: Point, vec: Vector, line: Line]; FillLineFromCoefficients: PROC [sineOfTheta, cosineOfTheta, distance: REAL, line: Line]; FillLineFromPointAndAngle: PROC [pt: Point, degrees: REAL, line: Line]; FillLineAsNormal: PROC [line: Line, pt: Point, normalLine: Line]; FillLineLeftOfLine: PROC [line: Line, dist: REAL, parallelLine: Line]; FillLineRightOfLine: PROC [line: Line, dist: REAL, parallelLine: Line]; <> LineFromPoints: PROC [v1, v2: Point] RETURNS [line: Line]; LineFromPointAndVector: PROC [pt: Point, vec: Vector] RETURNS [line: Line]; LineFromCoefficients: PROC [sineOfTheta, cosineOfTheta, distance: REAL] RETURNS [line: Line]; LineFromPointAndAngle: PROC [pt: Point, degrees: REAL] RETURNS [line: Line]; LineNormalToLineThruPoint: PROC [line: Line, pt: Point] RETURNS [normalLine: Line]; LineLeftOfLine: PROC [line: Line, dist: REAL] RETURNS [parallelLine: Line]; LineRightOfLine: PROC [line: Line, dist: REAL] RETURNS [parallelLine: Line]; LineMeetsLine: PROC [line1, line2: Line] RETURNS [intersection: Point, parallel: BOOL]; LineMeetsYAxis: PROC [line: Line] RETURNS [yInt: REAL, parallel: BOOL]; LineMeetsEdge: PROC [line: Line, edge: Edge] RETURNS [intersection: Point, noHit: BOOL]; SignedLineDistance: PROC [pt: Point, line: Line] RETURNS [d: REAL]; LineDistance: PROC [pt: Point, line: Line] RETURNS [d: REAL]; PointProjectedOntoLine: PROC [pt: Point, line: Line] RETURNS [projectedPt: Point]; <> <> PointOnLine: PROC [line: Line] RETURNS [pt: Point]; <> DirectionOfLine: PROC [line: Line] RETURNS [direction: Vector]; <> <<>> <> CreateEdge: PROC [v1, v2: Point] RETURNS [edge: Edge]; CreateEmptyEdge: PROC RETURNS [edge: Edge]; FillEdge: PROC [v1, v2: Point, edge: Edge]; CopyEdge: PROC [from: Edge, to: Edge]; LinePointOnEdge: PROC [pt: Point, edge: Edge] RETURNS [BOOL]; <> NearestEndpoint: PROC [pt: Point, edge: Edge] RETURNS [endpoint: Point]; DistanceSquaredToNearestEndpoint: PUBLIC PROC [pt: Point, edge: Edge] RETURNS [distanceSquared: REAL]; NearestPointOnEdge: PROC [pt: Point, edge: Edge] RETURNS [onEdge: Point]; <> DistancePointToEdge: PROC [pt: Point, edge: Edge] RETURNS [distance: REAL]; <> DistanceSquaredPointToEdge: PROC [pt: Point, edge: Edge] RETURNS [distanceSquared: REAL]; <<>> <> <<>> DistancePointToPoint: PROC [p1, p2: Point] RETURNS [distance: REAL]; DistanceSquaredPointToPoint: PROC [p1, p2: Point] RETURNS [distance: REAL]; PointLeftOfLine: PROC [distance: REAL, pOnLine: Point, line: Line] RETURNS [point: Point]; <> CreateRay: PROC [basePoint: Point, direction: Vector] RETURNS [ray: Ray]; CreateRayFromPoints: PROC [p1, p2: Point] RETURNS [ray: Ray]; LineRayMeetsBox: PROC [ray: Ray, xmin, ymin, xmax, ymax: REAL] RETURNS [count: NAT, params: ARRAY[1..2] OF REAL]; EvalRay: PROC [ray: Ray, param: REAL] RETURNS [point: Point]; END.