<> <> <> <> <<>> DIRECTORY GGBasicTypes, GGModelTypes, GGInterfaceTypes, GGSegmentTypes, Imager, ImagerTransformation, IO, Rope; GGTraj: CEDAR DEFINITIONS = BEGIN StrokeJoint: TYPE = Imager.StrokeJoint; BoundBox: TYPE = GGBasicTypes.BoundBox; CameraData: TYPE = GGModelTypes.CameraData; Circle: TYPE = GGBasicTypes.Circle; GGData: TYPE = GGInterfaceTypes.GGData; Joint: TYPE = GGSegmentTypes.Joint; Line: TYPE = GGBasicTypes.Line; Point: TYPE = GGBasicTypes.Point; Scene: TYPE = GGModelTypes.Scene; Segment: TYPE = GGSegmentTypes.Segment; Sequence: TYPE = GGModelTypes.Sequence; SelectionClass: TYPE = GGInterfaceTypes.SelectionClass; Traj: TYPE = GGModelTypes.Traj; TrajEnd: TYPE = GGModelTypes.TrajEnd; Vector: TYPE = GGBasicTypes.Vector; <> <> <<>> <> CreateTraj: PROC [point: Point] RETURNS [traj: Traj]; <> AddSegment: PROC [traj: Traj, trajEnd: TrajEnd, seg: Segment, segEnd: TrajEnd] RETURNS [success: BOOL]; <> CloseWithSegment: PROC [traj: Traj, seg: Segment, segEnd: TrajEnd]; <> CloseByDistorting: PROC [traj: Traj, distortEnd: TrajEnd]; <> OnlyChild: PROC [traj: Traj] RETURNS [BOOL]; <> <<>> <> CopyTrajFromRun: PROC [run: Sequence] RETURNS [copy: Traj]; <> CopyTrajFromRange: PROC [original: Traj, start: INT, len: INT] RETURNS [piece: Traj]; <> Concat: PROC [fixed: Traj, fixedEnd: TrajEnd, moving: Traj, movingEnd: TrajEnd] RETURNS [longer: Traj]; <> SpliceIn: PROC [run: Sequence, traj: Traj] RETURNS [newTraj: Traj]; <> <> ReverseTraj: PROC [traj: Traj]; IsClockwiseTraj: PROC [traj: Traj] RETURNS [BOOL]; IsClockwiseTrajTransformSeq: PROC [seq: Sequence, transform: ImagerTransformation.Transformation] RETURNS [BOOL]; <<>> <<>> <> <<>> GetBoundBox: PROC [traj: Traj] RETURNS [bBox: BoundBox]; UpdateBoundBox: PROC [traj: Traj]; CopyTraj: PROC [original: Traj] RETURNS [copy: Traj]; <<>> <> <<>> DrawSequenceFeedback: PROC [dc: Imager.Context, seq: Sequence, normalSeq: Sequence, camera: CameraData, quick: BOOL _ FALSE, selectClass: SelectionClass _ normal]; DrawTraj: PROC [dc: Imager.Context, traj: Traj]; DrawTrajSeq: PROC [dc: Imager.Context, seq: Sequence]; DrawTrajTransformSeq: PROC [dc: Imager.Context, selSeq: Sequence, transform: ImagerTransformation.Transformation]; DrawSelectionFeedback: PROC [traj: Traj, selectedParts, hotParts: Sequence, dc: Imager.Context, camera: CameraData, dragInProgress, caretIsMoving, hideHot, quick: BOOL]; AllStrokePropsAndColorsEqual: PROC [traj: Traj] RETURNS [BOOL]; <<>> <> TransformTraj: PROC [traj: Traj, transform: ImagerTransformation.Transformation]; <> TranslateTraj: PROC [traj: Traj, vector: Vector]; <> TransformSequence: PROC [seq: Sequence, transform: ImagerTransformation.Transformation]; <> <<>> HitType: TYPE = GGModelTypes.TrajPartType; DescribeHit: PROC [traj: Traj, hitType: HitType, segNum, cpNum, jointNum: INT] RETURNS [rope: Rope.ROPE]; Fileout: PROC [f: IO.STREAM, traj: Traj]; Filein: PROC [f: IO.STREAM, version: REAL] RETURNS [traj: Traj, hasCircle: BOOL _ FALSE]; <> FetchSegment: PROC [traj: Traj, index: NAT] RETURNS [seg: Segment]; FetchJoint: PROC [traj: Traj, index: NAT] RETURNS [joint: Joint]; FetchJointPos: PROC [traj: Traj, index: NAT] RETURNS [point: Point]; LastJointPos: PROC [traj: Traj] RETURNS [point: Point]; SetJointPos: PROC [traj: Traj, index: NAT, newPos: Point]; HiSegment: PROC [traj: Traj] RETURNS [highestIndex: NAT]; <> HiJoint: PROC [traj: Traj] RETURNS [highestIndex: NAT]; PreviousSegment: PROC [traj: Traj, segNum: NAT] RETURNS [prev: Segment]; PreviousSegmentNum: PROC [traj: Traj, segNum: NAT] RETURNS [prevNum: INT]; <> FollowingSegmentNum: PROC [traj: Traj, segNum: NAT] RETURNS [followNum: INT]; <> FollowingJoint: PROC [traj: Traj, index: NAT] RETURNS [nextIndex: INT]; <> <> IsEndJoint: PROC [traj: Traj, index: NAT] RETURNS [BOOL]; <> <<>> SetSelectedFields: PROC [seq: Sequence, selected: BOOL, selectClass: SelectionClass]; SaveSelection: PROC [traj: Traj, selectClass: SelectionClass, scene: Scene]; SaveSelectionInSequence: PROC [seq: Sequence, selectClass: SelectionClass]; ClearSelection: PROC [traj: Traj, selectClass: SelectionClass]; RemakeSelection: PROC [traj: Traj, scene: Scene, selectClass: SelectionClass]; <> <<>> PointsInDescriptor: PROC [seq: Sequence] RETURNS [pointGen: GGModelTypes.PointGenerator]; PointPairsInDescriptor: PROC [seq: Sequence] RETURNS [pointPairGen: GGModelTypes.PointPairGenerator]; NextPoint: PROC [pointGen: GGModelTypes.PointGenerator] RETURNS [pointAndDone: GGModelTypes.PointAndDone]; NextPointPair: PROC [pointGen: GGModelTypes.PointPairGenerator] RETURNS [pointPairAndDone: GGModelTypes.PointPairAndDone]; NearestSegment: PROC [testPoint: Point, seq: Sequence, tolerance: REAL] RETURNS [bestDist: REAL, bestSeg: NAT, bestPoint: Point, success: BOOL]; NearestJoint: PROC [testPoint: Point, seq: Sequence, tolerance: REAL] RETURNS [bestDist: REAL, bestJoint: NAT, bestPoint: Point, success: BOOL]; NearestControlPoint: PROC [testPoint: Point, seq: Sequence, tolerance: REAL] RETURNS [bestDist: REAL, bestSeg: NAT, bestControlPoint: NAT, bestPoint: Point, success: BOOL]; <<>> LineIntersection: PROC [seq: Sequence, line: Line] RETURNS [points: LIST OF Point, pointCount: NAT]; CircleIntersection: PROC [seq: Sequence, circle: Circle] RETURNS [points: LIST OF Point, pointCount: NAT]; <