<> <> <> <> <> DIRECTORY GGBasicTypes, ImagerTransformation; GGLines: CEDAR DEFINITIONS = BEGIN Point: TYPE = GGBasicTypes.Point; Edge: TYPE = GGBasicTypes.Edge; Line: TYPE = GGBasicTypes.Line; Ray: TYPE = GGBasicTypes.Ray; Vector: TYPE = GGBasicTypes.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]; FillLineNormalToLineThruPoint: PROC [line: Line, pt: Point, normalLine: Line]; FillLineLeftOfLine: PROC [line: Line, dist: REAL, parallelLine: Line]; FillLineRightOfLine: PROC [line: Line, dist: REAL, parallelLine: Line]; FillLineTransform: PROC [fixed: Line, transform: ImagerTransformation.Transformation, line: 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]; LineTransform: PROC [fixed: Line, transform: ImagerTransformation.Transformation] RETURNS [transformedLine: 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]; EdgeMeetsEdge: PROC [e1, e2: 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]; <> <<>> <> CreateEmptyEdge: PROC RETURNS [edge: Edge]; CopyEdge: PROC [from: Edge, to: Edge]; <> FillEdge: PROC [v1, v2: Point, edge: Edge]; FillEdgeTransform: PROC [fixed: Edge, transform: ImagerTransformation.Transformation, edge: Edge]; CreateEdge: PROC [v1, v2: Point] RETURNS [edge: Edge]; EdgeTransform: PROC [fixed: Edge, transform: ImagerTransformation.Transformation] RETURNS [edge: 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]; OnEdge: PROC [pt: Point, edge: Edge] RETURNS [BOOL]; <> <<>> <> <<>> 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.