<<>> <> <> <> <> <<>> DIRECTORY G3dBasic, G3dShape, Rope; G3dWingedEdge: CEDAR DEFINITIONS ~ BEGIN Error: ERROR [code: ATOM, reason: ROPE]; <> <> <> Quad: TYPE ~ G3dBasic.Quad; Face: TYPE ~ G3dShape.Face; Shape: TYPE ~ G3dShape.Shape; Validity: TYPE ~ G3dShape.Validity; Vertex: TYPE ~ G3dShape.Vertex; SurfaceSequence: TYPE ~ G3dShape.SurfaceSequence; ROPE: TYPE ~ Rope.ROPE; <> <> <> <<>> << [Artwork node; type 'Artwork on' to command tool] >> <> <<>> << [Artwork node; type 'Artwork on' to command tool] >> <<>> <> <> <<>> WShape: TYPE ~ REF WShapeRep; WShapeRep: TYPE ~ RECORD [ vertexRing: WVertex ¬ NIL, edgeRing: WEdge ¬ NIL, faceRing: WFace ¬ NIL, next, previous: WShape ¬ NIL, vertexValidities: ARRAY Validity OF BOOL ¬ ALL[FALSE], -- to convert back faceValidities: ARRAY Validity OF BOOL ¬ ALL[FALSE], -- to a shape index: INT ¬ 0, clientData: REF ANY ¬ NIL ]; WFace: TYPE ~ REF WFaceRep; WFaceRep: TYPE ~ RECORD [ basicFace: Face ¬ NIL, edgeRing: WEdge ¬ NIL, next, previous: WFace ¬ NIL, index: INT ¬ 0, clientData: REF ANY ¬ NIL ]; WEdgeData: TYPE ~ REF WEdgeDataRep; WEdgeDataRep: TYPE ~ RECORD [ aCWedge, bCWedge: WEdge ¬ NIL, aCCWedge, bCCWedge: WEdge ¬ NIL, aVertex, bVertex: WVertex ¬ NIL, aFace, bFace: WFace ¬ NIL, index: INT ¬ 0, owner: WEdge ¬ NIL, clientData: REF ANY ¬ NIL ]; WEdge: TYPE ~ REF WEdgeRep; WEdgeRep: TYPE ~ RECORD [ edgeData: WEdgeData ¬ NIL, next, previous: WEdge ¬ NIL, clientData: REF ANY ¬ NIL ]; WVertex: TYPE ~ REF WVertexRep; WVertexRep: TYPE ~ RECORD [ basicVertex: Vertex ¬ NIL, edgeRing: WEdge ¬ NIL, next, previous: WVertex ¬ NIL, index: INT ¬ 0, clientData: REF ANY ¬ NIL ]; ClockDirection: TYPE ~ { cw, ccw }; <> WVertexProc: TYPE ~ PROC [v: WVertex]; WEdgeProc: TYPE ~ PROC [e: WEdge]; WFaceProc: TYPE ~ PROC [f: WFace]; <> ShapeFromWingedEdge: PROC [wShape: WShape] RETURNS [shape: Shape]; <> WingedEdgeFromShape: PROC [shape: Shape] RETURNS [wShape: WShape]; <> <> ApplyToFaces: PROC [wShape: WShape, ff: WFaceProc]; <> <<>> ApplyToEdges: PROC [wShape: WShape, ef: WEdgeProc]; <> <<>> ApplyToVertices: PROC [wShape: WShape, vf: WVertexProc]; <> <> NextVertexAroundFaceFromEdge: PROC [edge: WEdge, face: WFace, dir: ClockDirection] RETURNS [WVertex]; <> <<>> NextVertexAroundFaceFromVertex: PROC [vertex: WVertex, face: WFace, dir: ClockDirection] RETURNS [WVertex]; <> <<>> NextVertexAroundVertex: PROC [vertex: WVertex, face: WFace, dir: ClockDirection] RETURNS [WVertex]; <> <<>> VertexAcrossEdge: PROC [vertex: WVertex, edge: WEdge] RETURNS [WVertex]; <> <> NextEdgeAroundFaceFromEdge: PROC [edge: WEdge, face: WFace, dir: ClockDirection] RETURNS [WEdge]; <> <<>> NextEdgeAroundVertex: PROC [vertex: WVertex, edge: WEdge, dir: ClockDirection] RETURNS [WEdge]; <> <<>> NextEdgeAroundFaceFromVertex: PROC [vertex: WVertex, face: WFace, dir: ClockDirection] RETURNS [WEdge]; <> <> NextFaceAroundEdge: PROC [vertex: WVertex, edge: WEdge, dir: ClockDirection] RETURNS [WFace]; <> NextFaceAroundVertex: PROC [vertex: WVertex, face: WFace, dir: ClockDirection] RETURNS [WFace]; <> <<>> FaceAcrossEdge: PROC [edge: WEdge, face: WFace] RETURNS [WFace]; <> <> ApplyToVertexRing: PROC [vRing: WVertex, vf: WVertexProc]; <> <<>> ApplyToEdgeRing: PROC [eRing: WEdge, ef: WEdgeProc]; <> <<>> ApplyToFaceRing: PROC [fRing: WFace, ff: WFaceProc]; <> <> InsertVertexIntoRing: PROC [v: WVertex, vRing: WVertex] RETURNS [WVertex]; <> <<>> InsertCopyOfVertexIntoRing: PROC [v: WVertex, vRing: WVertex] RETURNS [WVertex]; <> <<>> InsertEdgeIntoRing: PROC [e: WEdge, eRing: WEdge] RETURNS [WEdge]; <> <<>> InsertCopyOfEdgeIntoRing: PROC [e: WEdge, eRing: WEdge] RETURNS [WEdge]; <> <<>> InsertFaceIntoRing: PROC [f: WFace, fRing: WFace] RETURNS [WFace]; <> <<>> InsertCopyOfFaceIntoRing: PROC [f: WFace, fRing: WFace] RETURNS [WFace]; <> <<>> ReverseEdgeRing: PROC [eRing: WEdge]; <> <<>> SetWings: PROC [e1, e2: WEdge]; <> <> InvertEdge: PROC [edge: WEdge]; <> <<>> EvertEdge: PROC [e: WEdge]; <> InvertWShape: PROC [wShape: WShape]; <> <<>> EvertWShape: PROC [wShape: WShape]; <> <> AnyVertexOnFace: PROC [face: WFace] RETURNS [WVertex]; <> <<>> AnyEdgeOnFace: PROC [face: WFace] RETURNS [WEdge]; <> <<>> AnyEdgeOnVertex: PROC [vertex: WVertex] RETURNS [WEdge]; <> <<>> AnyFaceOnVertex: PROC [vertex: WVertex] RETURNS [WFace]; <> <<>> AnyFaceOnEdge: PROC [edge: WEdge] RETURNS [WFace]; <> <<>> VertexNotOnFirstEdge: PROC [e1, e2: WEdge] RETURNS [WVertex]; <> <<>> EdgeUsingVertex: PROC [eRing: WEdge, v: WVertex] RETURNS [WEdge]; <> <> VertexFromIndex: PROC [wShape: WShape, vNum: INT] RETURNS [v: WVertex]; <> <<>> EdgeFromIndex: PROC [wShape: WShape, eNum: INT] RETURNS [e: WEdge]; <> <<>> FaceFromIndex: PROC [wShape: WShape, fNum: INT] RETURNS [f: WFace]; <> <> FaceContainingVertices: PROC [v1, v2: WVertex] RETURNS [WFace]; <> <<>> EdgeContainingVertices: PROC [v1, v2: WVertex] RETURNS [WEdge]; <> <<>> VertexContainingEdges: PROC [e1, e2: WEdge] RETURNS [WVertex]; <> <<>> EdgeContainingFaces: PROC [f1, f2: WFace] RETURNS [WEdge]; <> <<>> VertexContainingFaces: PROC [f1, f2: WFace] RETURNS [WVertex]; <> <<>> <> EdgeAdjacentToFace: PROC [edge: WEdge, face: WFace] RETURNS [BOOL]; <> <<>> VertexAdjacentToFace: PROC [vertex: WVertex, face: WFace] RETURNS [BOOL]; <> <<>> VertexAdjacentToEdge: PROC [vertex: WVertex, edge: WEdge] RETURNS [BOOL]; <> <<>> SpurVertex: PROC [vertex: WVertex] RETURNS [BOOL]; <> <<>> WireEdge: PROC [edge: WEdge] RETURNS [BOOL]; <> <> EdgesAroundVertex: PROC [vertex: WVertex] RETURNS [numEdges: INT ¬ 0]; <> <<>> FacesAroundVertex: PROC [vertex: WVertex] RETURNS [INT]; <> <<>> VerticesAroundEdge: PROC [edge: WEdge] RETURNS [INT]; <> <<>> FacesAroundEdge: PROC [edge: WEdge] RETURNS [INT]; <> <<>> VerticesAroundFace: PROC [face: WFace] RETURNS [INT]; <> <<>> EdgesAroundFace: PROC [face: WFace] RETURNS [numEdges: INT ¬ 0]; <> <<>> VerticesInWShape: PROC [wShape: WShape] RETURNS [INT]; <> <<>> EdgesInWShape: PROC [wShape: WShape] RETURNS [INT]; <> <<>> FacesInWShape: PROC [wShape: WShape] RETURNS [INT]; <> <<>> Genus: PROC [wShape: WShape] RETURNS [INT]; <> <> SplitEdge: PROC [wShape: WShape, edge: WEdge] RETURNS [newV: WVertex]; <> <<>> CollapseEdge: PROC [wShape: WShape, edge: WEdge] RETURNS [WVertex]; <> RemoveEdge: PROC [wShape: WShape, edge: WEdge] RETURNS [WFace]; <> <<>> InsertBridge: PROC [wShape: WShape, v1, v2: WVertex] RETURNS [newFace: WFace ¬ NIL, newEdge: WEdge ¬ NIL]; <> RemoveVertex: PROC [wShape: WShape, v1: WVertex] RETURNS [newEdge: WEdge ¬ NIL]; <> <> NewWShape: PROC RETURNS [WShape]; <> <<>> InsertVertexIntoShape: PROC [wShape: WShape, vetex: WVertex]; <> <<>> InsertEdgeIntoShape: PROC [wShape: WShape, edge: WEdge]; <> <<>> InsertFaceIntoShape: PROC [wShape: WShape, face: WFace]; <> <<>> DeleteWShape: PROC [wShape: WShape]; <> <> <> <> <> <> <<>> END.