<> <> <> <> <<>> DIRECTORY GGBasicTypes, GGModelTypes, GGInterfaceTypes, GGSegmentTypes, Imager, ImagerTransformation, IO; GGTraj: CEDAR DEFINITIONS = BEGIN BoundBox: TYPE = GGBasicTypes.BoundBox; CameraData: TYPE = GGModelTypes.CameraData; Circle: TYPE = GGBasicTypes.Circle; GargoyleData: TYPE = GGInterfaceTypes.GargoyleData; 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]; <> <> <<>> 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]; 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]; 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]; <<>> <> <<>> TransformTraj: PROC [traj: Traj, transform: ImagerTransformation.Transformation]; <> TranslateTraj: PROC [traj: Traj, vector: Vector]; <> TransformSequence: PROC [seq: Sequence, transform: ImagerTransformation.Transformation]; <> <<>> 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: NAT]; FollowingSegmentNum: PROC [traj: Traj, segNum: NAT] RETURNS [followNum: NAT]; FollowingJoint: PROC [traj: Traj, index: NAT] RETURNS [nextIndex: NAT]; <> IsEndJoint: PROC [traj: Traj, index: NAT] RETURNS [BOOL]; <> <<>> 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]; <