<> <> <> <> <> <<>> DIRECTORY GGBasicTypes, GGCoreTypes, GGInterfaceTypes, GGModelTypes, GGSegmentTypes, Imager, ImagerPath, ImagerTransformation, IO, Rope, Rosary; GGTraj: CEDAR DEFINITIONS = BEGIN StrokeJoint: TYPE = Imager.StrokeJoint; BoundBox: TYPE = GGCoreTypes.BoundBox; Camera: TYPE = GGModelTypes.Camera; Circle: TYPE = GGBasicTypes.Circle; EditConstraints: TYPE = GGModelTypes.EditConstraints; FenceHoleOpen: TYPE = GGModelTypes.FenceHoleOpen; HitType: TYPE = GGModelTypes.TrajPartType; Joint: TYPE = GGSegmentTypes.Joint; Line: TYPE = GGCoreTypes.Line; Point: TYPE = GGBasicTypes.Point; Scene: TYPE = GGModelTypes.Scene; Segment: TYPE = GGSegmentTypes.Segment; SelectedObjectData: TYPE = GGSegmentTypes.SelectedObjectData; SelectionClass: TYPE = GGSegmentTypes.SelectionClass; Slice: TYPE = GGModelTypes.Slice; SliceClass: TYPE = GGModelTypes.SliceClass; SliceClassObj: TYPE = GGModelTypes.SliceClassObj; SliceDescriptor: TYPE = GGModelTypes.SliceDescriptor; SliceDescriptorObj: TYPE = GGModelTypes.SliceDescriptorObj; SliceObj: TYPE = GGModelTypes.SliceObj; SliceParts: TYPE = GGModelTypes.SliceParts; TrajData: TYPE = GGModelTypes.TrajData; TrajParts: TYPE = GGModelTypes.TrajParts; TrajPartType: TYPE = GGModelTypes.TrajPartType; TrajEnd: TYPE = GGModelTypes.TrajEnd; Vector: TYPE = GGBasicTypes.Vector; SegCPSequence: TYPE = REF SegCPSequenceObj; SegCPSequenceObj: TYPE = RECORD [ cPoints: SEQUENCE len: NAT OF ShowPoint]; ShowPoint: TYPE = RECORD [cPoint: Point, show: BOOL _ TRUE]; TrajHitData: TYPE = REF TrajHitDataObj; TrajHitDataObj: TYPE = RECORD [ hitType: HitType, segNum: INT, cpNum: INT, jointNum: INT, hitPoint: Point ]; RunProc: TYPE = PROC [run: SliceDescriptor] RETURNS [traj: Slice]; <> <> <> CreateTraj: PROC [point: Point] RETURNS [slice: Slice]; <> CreateTrajFromData: PROC [role: FenceHoleOpen, segCount: NAT, segments: Rosary.ROSARY, joints: Rosary.ROSARY, extraPoints: LIST OF Joint, visibleJoints: BOOL _ TRUE, strokeJoint: Imager.StrokeJoint _ round, loArrow, hiArrow: BOOL _ FALSE, selectedInPart: SelectedObjectData _ [FALSE, FALSE, FALSE, FALSE]] RETURNS [slice: Slice]; AddSegment: PROC [slice: Slice, trajEnd: TrajEnd, seg: Segment, segEnd: TrajEnd] RETURNS [success: BOOL]; <> CloseWithSegment: PROC [slice: Slice, seg: Segment, segEnd: TrajEnd]; <> CloseByDistorting: PROC [slice: Slice, distortEnd: TrajEnd]; <> DeleteControlPoints: PROC [trajD: SliceDescriptor, scene: Scene] RETURNS [bBox: BoundBox]; <> DeleteSequence: PROC [seq: SliceDescriptor] RETURNS [smallerOutline: Slice, openTrajOutlines: LIST OF Slice]; <> ReplaceFirstRun: PROC [trajD: SliceDescriptor, runProc: RunProc, segmentsOnly: BOOL, selectNewRuns: BOOL] RETURNS [newOutline: Slice]; <> OnlyChild: PROC [slice: Slice] RETURNS [BOOL]; <> SetTrajRole: PROC [traj: Slice, role: FenceHoleOpen]; GetTrajRole: PROC [traj: Slice] RETURNS [role: FenceHoleOpen]; <> CopyTrajFromRun: PROC [slice: Slice, run: TrajParts] RETURNS [copy: Slice]; <> CopyTrajFromRange: PROC [slice: Slice, start: INT, len: INT] RETURNS [piece: Slice]; <> Concat: PROC [fixed: Slice, fixedEnd: TrajEnd, moving: Slice, movingEnd: TrajEnd] RETURNS [longer: Slice]; <> SpliceIn: PROC [runDescriptor: SliceDescriptor, slice: Slice] RETURNS [newSlice: Slice]; <> <> ReverseTraj: PROC [slice: Slice]; IsClockwiseTraj: PROC [slice: Slice] RETURNS [BOOL]; IsClockwiseTrajTransformSeq: PROC [descriptor: SliceDescriptor, transform: ImagerTransformation.Transformation] RETURNS [BOOL]; <<>> <> DrawConstrained: PROC [dc: Imager.Context, selDescriptor: SliceDescriptor, segNum: NAT, seg: Segment, transform: ImagerTransformation.Transformation, entire, lo, hi: BOOL, controlPoints: GGBasicTypes.BitVector, editConstraints: EditConstraints, lineTo: ImagerPath.LineToProc, curveTo: ImagerPath.CurveToProc, conicTo: ImagerPath.ConicToProc, arcTo: ImagerPath.ArcToProc] RETURNS [cPointsInSeg: SegCPSequence]; DrawPolyline: PROC [dc: Imager.Context, traj: Slice]; <<>> <> ConstrainJoint: PROC [slice: Slice, editConstraints: EditConstraints, jointNum: NAT] RETURNS [constrained: BOOL]; ConstrainCP: PROC [slice: Slice, editConstraints: EditConstraints, segNum: NAT, cpNum: NAT] RETURNS [constrained: BOOL]; MatchShape: PROC [traj1, traj2: Slice] RETURNS [BOOL]; <> FetchSegment: PROC [slice: Slice, index: NAT] RETURNS [seg: Segment]; FetchSegmentTraj: PROC [trajData: TrajData, index: NAT] RETURNS [seg: Segment]; FetchJoint: PROC [slice: Slice, index: NAT] RETURNS [joint: Joint]; FetchJointPos: PROC [slice: Slice, index: NAT] RETURNS [point: Point]; FetchJointPosTraj: PROC [trajData: TrajData, index: NAT] RETURNS [point: Point]; FetchJointNormal: PROC [slice: Slice, index: NAT] RETURNS [normal: Vector]; LastJointPos: PROC [slice: Slice] RETURNS [point: Point]; SetJointPos: PROC [slice: Slice, index: NAT, newPos: Point]; HiSegment: PROC [slice: Slice] RETURNS [highestIndex: NAT]; HiSegmentTraj: PROC [trajData: TrajData] RETURNS [highestIndex: NAT]; <> HiJoint: PROC [slice: Slice] RETURNS [highestIndex: NAT]; HiJointTraj: PROC [trajData: TrajData] RETURNS [highestIndex: NAT]; PreviousSegment: PROC [slice: Slice, segNum: NAT] RETURNS [prev: Segment]; PreviousSegmentNum: PROC [slice: Slice, segNum: NAT] RETURNS [prevNum: INT]; <> FollowingSegmentNum: PROC [slice: Slice, segNum: NAT] RETURNS [followNum: INT]; <> FollowingJoint: PROC [slice: Slice, index: NAT] RETURNS [nextIndex: INT]; <> <> IsEndJoint: PROC [slice: Slice, index: NAT] RETURNS [BOOL]; <> SaveSelection: PROC [slice: Slice, selectClass: SelectionClass, scene: Scene]; SaveSelectionInSequence: PROC [descriptor: SliceDescriptor, selectClass: SelectionClass]; SaveSelectionInParts: PROC [slice: Slice, parts: SliceParts, selectClass: SelectionClass]; ClearSelection: PROC [slice: Slice, selectClass: SelectionClass]; ClearSelections: PROC [slice: Slice]; <> RemakeSelection: PROC [slice: Slice, selectClass: SelectionClass] RETURNS [parts: SliceParts]; <> UnpackSimpleDescriptor: PROC [traj: Slice, parts: SliceParts] RETURNS [success: BOOL _ FALSE, partType: TrajPartType _ none, trajData: TrajData, joint: Joint _ NIL, jointNum: NAT _ 999, cp: Point _ [0,0], cpNum: NAT _ 999, seg: Segment _ NIL, segNum: NAT _ 999]; UnpackHitData: PROC [hitData: REF ANY] RETURNS [hitType: HitType, segNum, cpNum, jointNum: INT, hitPoint: Point]; NearestSegment: PROC [testPoint: Point, descriptor: SliceDescriptor, tolerance: REAL] RETURNS [bestDist: REAL, bestSeg: NAT, bestPoint: Point, bestNormal: Vector, success: BOOL]; NearestJoint: PROC [testPoint: Point, descriptor: SliceDescriptor, tolerance: REAL] RETURNS [bestDist: REAL, bestJoint: NAT, bestPoint: Point, bestNormal: Vector, success: BOOL]; NearestControlPoint: PROC [testPoint: Point, descriptor: SliceDescriptor, tolerance: REAL] RETURNS [bestDist: REAL, bestSeg: NAT, bestControlPoint: NAT, bestPoint: Point, bestNormal: Vector, success: BOOL]; <<>> <> IndexOfJoint: PROC [joint: Joint, slice: Slice] RETURNS [index: INT]; <> IndexOfSegment: PROC [segment: Segment, slice: Slice] RETURNS [index: INT]; END.