<> <> <> <> DIRECTORY SV2d; SVPolygon2d: CEDAR DEFINITIONS = BEGIN Point2d: TYPE = SV2d.Point2d; Polygon: TYPE = REF PolygonObj; PolygonObj: TYPE = SV2d.PolygonObj; Path: TYPE = REF PathObj; PathObj: TYPE = SV2d.PathObj; TrigPolygon: TYPE = REF TrigPolygonObj; TrigPolygonObj: TYPE = SV2d.TrigPolygonObj; <> CreatePoly: PROC [len: NAT] RETURNS [poly: Polygon]; CopyPoly: PROC [poly: Polygon] RETURNS [copy: Polygon]; CircumHexagon: PROC [r: REAL] RETURNS [hex: Polygon]; <> ClearPoly: PROC [poly: Polygon]; AddPolyPoint: PROC [poly: Polygon, point: Point2d] RETURNS [polyPlusPoint: Polygon]; PutPolyPoint: PROC [poly: Polygon, index: NAT, point: Point2d] RETURNS [newPoly: Polygon]; IsClockwisePoly: PROC [poly: Polygon] RETURNS [BOOL]; InvertPoly: PROC [poly: Polygon] RETURNS [ylop: Polygon]; <> InvertPolyInPlace: PROC [poly: Polygon]; PartPolyGetsPartPath: PROC [fromPath: Path, fromStart: NAT, toPoly: Polygon, toStart: NAT, duration: NAT] RETURNS [newPoly: Polygon]; <> <> PartPolyGetsPartPoly: PROC [fromPoly: Polygon, fromStart: NAT, toPoly: Polygon, toStart: NAT, duration: NAT] RETURNS [newPoly: Polygon]; <> <> PathToPolygon: PROC [path: Path] RETURNS [poly: Polygon]; <> PolygonToTrigPolygon: PROC [poly: Polygon] RETURNS [trigPoly: TrigPolygon]; <> CreatePath: PROC [len: NAT] RETURNS [path: Path]; CopyPath: PROC [path: Path] RETURNS [copy: Path]; ClearPath: PROC [path: Path]; AddPathPoint: PROC [path: Path, point: Point2d] RETURNS [pathPlusPoint: Path]; InsertPathPoint: PROC [path: Path, point: Point2d] RETURNS [newPath: Path]; SplicePathPoint: PROC [path: Path, point: Point2d, index: INTEGER] RETURNS [newPath: Path]; AttemptToSplicePastEndOfPath: ERROR; DeletePathPoint: PROC [path: Path, index: NAT] RETURNS [newPath: Path]; PutPathPoint: PROC [path: Path, index: NAT, point: Point2d]; ConcatPath: PROC [path1, path2: Path] RETURNS [cat: Path]; SubPath: PROC [path: Path, lo, hi: NAT] RETURNS [subpath: Path]; SubPathOfPoly: PROC [poly: Polygon, lo, hi: NAT] RETURNS [subpath: Path]; ShiftUpPath: PROC [path: Path, startAt: NAT, by: NAT]; ShiftDownPath: PROC [path: Path, startAt: NAT, by: NAT]; <> ShiftingDataOffLeftEnd: ERROR; ShiftingDownNonExistentElements: ERROR; PolygonToPath: PROC [poly: Polygon] RETURNS [path: Path]; PartPathGetsPartPath: PROC [fromPath: Path, fromStart: NAT, toPath: Path, toStart: NAT, duration: NAT] RETURNS [newPath: Path]; <> PointPolyClass: TYPE = {in, on, out}; DifferenceAngles: PROC [c, v: REAL] RETURNS [cMinusV: REAL]; <> <
> <> CirclePointInPoly: PROC [point: Point2d, poly: Polygon] RETURNS [class: PointPolyClass]; SquarePointInPoly: PROC [point: Point2d, poly: Polygon] RETURNS [class: PointPolyClass]; BoysePointInPoly: PROC [point: Point2d, poly: Polygon] RETURNS [class: PointPolyClass]; SignedArea: PROC [poly: Polygon] RETURNS [area: REAL]; ClockwisePerimeterAroundUnitSquare: PROC [from, to: Point2d] RETURNS [perim: REAL]; END.