INTERFACE SceneArrangement; (* A data structure to record partially the incidence relations between points, lines and planes in an arbitrary scene, and perform some operations on them. A point belongs to zero or more lines (hence to any plane containing those lines). A line contains zero or more points and belongs to zero or more planes. A plane contains zero or more lines (hence all points on those lines). There is however no guarantee of geometrical consistency. For instance two lines on the same plane need not have a point in common. In other words, only a subset of the actual incidence graph is maintained. *) IMPORT HLR3, Wr; TYPE Point = RECORD wcs: HLR3.Point; (* Coordinates in World reference system *) sup: REF PtLnIncidence; (* Lines through this point *) mark: BOOLEAN; (* Used by EvaluatePoints *) val: LONGREAL; (* (Work) Value rel. to cutting plane *) END; Line = RECORD wcs: HLR3.Line; (* Pluecker coordinates of line *) inf: REF LnPtIncidence; (* Points on this line *) sup: REF LnPlIncidence; (* Planes through this line *) mark: BOOLEAN; (* Used by CutLine, ComputePlanes *) opl: HLR3.Plane; (* (Work) Supporting plane, used by ComputePlane *) cut: REF Point; (* (Work) Cut point, used by CutLine *) END; Plane = RECORD pl: HLR3.Plane; (* Coefficients in World system *) mark: BOOLEAN; (* Used by CutPlane etc. *) cut: REF Line; (* (Work) Cut line, used by CutPlane *) END; END SceneArrangement;