<> <> <> <> <> DIRECTORY GGBasicTypes, GGSegmentTypes, Imager, ImagerPath, ImagerTransformation, IO, Rope, Rosary, ViewerClasses; GGModelTypes: CEDAR DEFINITIONS = BEGIN <> Viewer: TYPE = ViewerClasses.Viewer; Point: TYPE = GGBasicTypes.Point; Vector: TYPE = GGBasicTypes.Vector; Line: TYPE = GGBasicTypes.Line; Circle: TYPE = GGBasicTypes.Circle; BoundBox: TYPE = GGBasicTypes.BoundBox; BitVector: TYPE = GGBasicTypes.BitVector; BitMatrix: TYPE = GGBasicTypes.BitMatrix; SequenceOfReal: TYPE = GGBasicTypes.SequenceOfReal; SelectedObjectData: TYPE = GGSegmentTypes.SelectedObjectData; SelectionClass: TYPE = GGSegmentTypes.SelectionClass; Joint: TYPE = GGSegmentTypes.Joint; <> jointSize: REAL = 6; halfJointSize: REAL = 3; hotJointSize: REAL = 10; halfHotJointSize: REAL = 5; <> Scene: TYPE = REF SceneObj; SceneObj: TYPE; -- Opaque Type, Implemented by GGObjectsImpl <<>> CameraData: TYPE = REF CameraDataObj; CameraDataObj: TYPE = RECORD [ quality: QualityMode _ fast, displayStyle: DisplayStyle _ print, hideHot: BOOL _ FALSE, hideAlignments: BOOL _ FALSE ]; DisplayStyle: TYPE = {print, screen}; <> <> QualityMode: TYPE = {fast, showall, quality}; <> <> <> <<>> <> SliceDescriptor: TYPE = REF SliceDescriptorObj; SliceDescriptorObj: TYPE = RECORD [ slice: Slice, parts: SliceParts ]; SliceParts: TYPE = REF ANY; Slice: TYPE = REF SliceObj; SliceObj: TYPE = RECORD [ class: SliceClass, data: REF ANY, parent: Slice, -- for when slices can be part of clusters selectedInFull: SelectedObjectData, normalSelectedParts: SliceParts, -- maintained by GGSelect to improve performance hotSelectedParts: SliceParts, -- maintained by GGSelect to improve performance activeSelectedParts: SliceParts, -- maintained by GGSelect to improve performance boundBox: BoundBox _ NIL, onOverlay: BOOL _ FALSE, extraPoints: LIST OF Joint, priority: INT _ 0, -- scene order priority. 0 => in back mark: BOOL _ FALSE -- for sweeping thru scenes by Undelete mechanism ]; SliceClass: TYPE = REF SliceClassObj; SliceClassObj: TYPE = RECORD [ type: ATOM, <> getBoundBox: SliceBoundBoxProc, -- includes space for stroke width and control points getTightBox: SliceTightBoxProc, -- fits tightly around the graphical part of the slice copy: SliceCopyProc, <> drawParts: SliceDrawPartsProc, drawTransform: SliceDrawTransformProc, drawSelectionFeedback: SliceDrawSelectionFeedbackProc, drawAttractorFeedback: SliceDrawAttractorFeedbackProc, <> transform: SliceTransformProc, <> describe: SliceDescribeProc, fileout: SliceFileoutProc, filein: SliceFileinProc, <> emptyParts: SliceEmptyPartsProc, newParts: SliceNewPartsProc, unionParts: SliceUnionPartsProc, differenceParts: SliceDifferencePartsProc, movingParts: SliceMovingPartsProc, fixedParts: SliceFixedPartsProc, augmentParts: SliceAugmentPartsProc, setSelectedFields: SliceSetSelectedFieldsProc, <> pointsInDescriptor: SlicePointsInDescriptorProc, pointPairsInDescriptor: SlicePointPairsInDescriptorProc, nextPoint: SliceNextPointProc, nextPointPair: SliceNextPointPairProc, <> closestPoint: SliceClosestPointProc, closestPointAndTangent: SliceClosestPointAndTangentProc, closestSegment: SliceClosestSegmentProc, lineIntersection: SliceLineIntersectionProc, circleIntersection: SliceCircleIntersectionProc, hitDataAsSimpleCurve: SliceHitDataAsSimpleCurveProc, <