<> <> <> <> <> DIRECTORY Imager, ImagerTransformation, Lines2dTypes; Lines2d: CEDAR DEFINITIONS = BEGIN Point: TYPE = Lines2dTypes.Point; Edge: TYPE = Lines2dTypes.Edge; Line: TYPE = Lines2dTypes.Line; Ray: TYPE = Lines2dTypes.Ray; Transformation: TYPE = ImagerTransformation.Transformation; Vector: TYPE = Lines2dTypes.Vector; <> CreateEmptyLine: PROC RETURNS [line: Line]; CopyLine: PROC [from: Line, to: Line]; EqualLine: PROC [a: Line, b: Line] RETURNS [BOOL]; <> AlmostEqualLine: PROC [a: Line, b: Line, errorDegrees: REAL, errorDistance: REAL] RETURNS [BOOL]; <> <> 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: Transformation] RETURNS [transformedLine: 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: Transformation, line: Line]; DrawLine: PROC [dc: Imager.Context, line: Line, clippedBy: Imager.Rectangle, strokeWidth: REAL _ 1.0]; <> <> CreateEmptyEdge: PROC RETURNS [edge: Edge]; CopyEdge: PROC [from: Edge, to: Edge]; <> CreateEdge: PROC [v1, v2: Point] RETURNS [edge: Edge]; EdgeTransform: PROC [fixed: Edge, transform: ImagerTransformation.Transformation] RETURNS [edge: Edge]; <<>> <> FillEdge: PROC [v1, v2: Point, edge: Edge]; FillEdgeTransform: PROC [fixed: Edge, transform: ImagerTransformation.Transformation, edge: Edge]; <> CreateRay: PROC [basePoint: Point, direction: Vector] RETURNS [ray: Ray]; CreateRayFromPoints: PROC [p1, p2: Point] RETURNS [ray: Ray]; <> <> 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]; <> DirectionOfLine: PROC [line: Line] RETURNS [direction: Vector]; <> SignedLineDistance: PROC [pt: Point, line: Line] RETURNS [d: REAL]; <> LineDistance: PROC [pt: Point, line: Line] RETURNS [d: REAL]; <> DropPerpendicular: PROC [pt: Point, line: Line] RETURNS [projectedPt: Point]; <> PointOnLine: PROC [line: Line] RETURNS [pt: Point]; <> <> NearestEndpoint: PROC [pt: Point, edge: Edge] RETURNS [endpoint: Point]; DistanceSquaredPointToEdge: PROC [pt: Point, edge: Edge] RETURNS [distanceSquared: REAL]; <> DistancePointToEdge: PROC [pt: Point, edge: Edge] RETURNS [distance: REAL]; <> DistanceSquaredToNearestEndpoint: PUBLIC PROC [pt: Point, edge: Edge] RETURNS [distanceSquared: REAL]; <> NearestPointOnEdge: PROC [pt: Point, edge: Edge] RETURNS [onEdge: Point]; <> OnEdge: PROC [pt: Point, edge: Edge] RETURNS [BOOL]; <> LinePointOnEdge: 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]; <> <> 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.