<> <> <> <> DIRECTORY GGModelTypes; GGCircles: CEDAR DEFINITIONS = BEGIN Arc: TYPE = GGModelTypes.Arc; Circle: TYPE = GGModelTypes.Circle; Point: TYPE = GGModelTypes.Point; Edge: TYPE = GGModelTypes.Edge; Line: TYPE = GGModelTypes.Line; Vector: TYPE = GGModelTypes.Vector; <<>> <> CreateEmptyCircle: PROC [] RETURNS [circle: Circle]; CopyCircle: PROC [from: Circle, to: Circle]; <> FillCircleFromPointAndRadius: PROC [pt: Point, radius: REAL, circle: Circle]; <> CircleFromPointAndRadius: PROC [pt: Point, radius: REAL] RETURNS [circle: Circle]; LineMeetsCircle: PROC [line: Line, circle: Circle] RETURNS [points: ARRAY [1..2] OF Point, hitCount: [0..2]]; CircleMeetsCircle: PROC [circle1, circle2: Circle] RETURNS [points: ARRAY [1..2] OF Point, hitCount: [0..2]]; CircleMeetsEdge: PROC [circle: Circle, edge: Edge] RETURNS [intersection: Point, miss: BOOL]; SignedCircleDistance: PROC [pt: Point, circle: Circle] RETURNS [d: REAL]; CircleDistance: PROC [pt: Point, circle: Circle] RETURNS [d: REAL]; PointProjectedOntoCircle: PROC [pt: Point, circle: Circle] RETURNS [projectedPt: Point]; <> <> <> <> <<>> <> CreateArc: PROC [v1, v2: Point] RETURNS [arc: Arc]; CreateEmptyArc: PROC RETURNS [arc: Arc]; FillArc: PROC [v1, v2: Point, arc: Arc]; CopyArc: PROC [from: Arc, to: Arc]; CirclePointOnArc: PROC [pt: Point, arc: Arc] RETURNS [BOOL]; <> NearestEndpoint: PROC [pt: Point, arc: Arc] RETURNS [endpoint: Point]; DistanceSquaredToNearestEndpoint: PROC [pt: Point, arc: Arc] RETURNS [distanceSquared: REAL]; NearestPointOnArc: PROC [pt: Point, arc: Arc] RETURNS [onArc: Point]; <> DistancePointToArc: PROC [pt: Point, arc: Arc] RETURNS [distance: REAL]; <> DistanceSquaredPointToArc: PROC [pt: Point, arc: Arc] RETURNS [distanceSquared: REAL]; <<>> END.