DIRECTORY CGArea, CGClipper, CGReducer, GraphicsBasic, PolygonDefs; Polygon: CEDAR PROGRAM IMPORTS CGArea, CGClipper, CGReducer EXPORTS PolygonDefs = BEGIN OPEN PolygonDefs; PolyCreate: PUBLIC PROCEDURE RETURNS [polygon: PolygonDescriptor] = BEGIN polygon _ CGReducer.New[size: 4]; CGClipper.Load[self: clipper, reducer: polygon]; END; PolyVertex: PUBLIC PROCEDURE [polygon: PolygonDescriptor, x, y: REAL] = {CGReducer.Vertex[self: polygon, v: [x: x, y: y]]}; PolyGenerate: PUBLIC PROCEDURE [ polygon: PolygonDescriptor, outputTrapezoid: PROCEDURE [llx, lrx, ly, ulx, urx, uy: REAL]] = BEGIN tiling: CGArea.Ref = CGArea.New[size: 4]; CGReducer.Close[polygon]; CGReducer.Generate[self: polygon, area: tiling]; UNTIL CGArea.Empty[tiling] DO t: GraphicsBasic.Trap = CGArea.Remove[tiling]; outputTrapezoid[llx: t.xbotL, lrx: t.xbotR, ly: t.ybot, ulx: t.xtopL, urx: t.xtopR, uy: t.ytop]; ENDLOOP; END; PolyDestroy: PUBLIC PROCEDURE [polygon: PolygonDescriptor] = {NULL}; huge: REAL _ 1.0E20; clipper: CGClipper.Ref _ CGClipper.New[size: 4]; CGClipper.SetBox[self: clipper, box: [xmin: -huge, ymin: -huge, xmax: huge, ymax: huge]]; END. File: Polygon.mesa Written by Martin Newell, Sept 1979. Last Updated: August 22, 1980 6:34 PM Last Edited by: McCreight, February 8, 1985 11:32:43 am PST Create new polygon Add vertex to polygon Generate the polygon defined up to last PolyVertex Destroy polygon Ê¥˜J˜Jšœ™Jšœ$™$Jšœ&™&Jšœ;™;J˜šÏk ˜ šœ9˜9J˜——š œ œœœœ˜QJšœœ ˜J˜šÏn œœ œœ˜CJšœ™Jš˜Jšœ!˜!Jšœ0˜0Jšœ˜J˜—šž œœ œ$œ˜GJšœ™Jšœ3˜3J˜—šž œœ œ˜ J˜Jšœ œœ˜@Jšœ3™3Jš˜Jšœ)˜)Jšœ˜Jšœ0˜0šœ˜Jšœ.˜.Jšœ`˜`Jšœ˜—Jšœ˜J˜—šž œœ œ˜