<> <> <> <> <> <<>> DIRECTORY GGBasicTypes, GGModelTypes, GGSegmentTypes, Imager, Rope; GGSequence: CEDAR DEFINITIONS = BEGIN BoundBox: TYPE = GGBasicTypes.BoundBox; Joint: TYPE = GGModelTypes.Joint; Point: TYPE = GGBasicTypes.Point; PointAndDone: TYPE = GGModelTypes.PointAndDone; SelectionClass: TYPE = GGSegmentTypes.SelectionClass; Segment: TYPE = GGSegmentTypes.Segment; Sequence: TYPE = GGModelTypes.Sequence; SequenceOfReal: TYPE = GGBasicTypes.SequenceOfReal; SliceDescriptor: TYPE = GGModelTypes.SliceDescriptor; StrokeEnd: TYPE = Imager.StrokeEnd; StrokeJoint: TYPE = Imager.StrokeJoint; Traj: TYPE = GGModelTypes.Traj; TrajEnd: TYPE = GGModelTypes.TrajEnd; -- {lo, hi}; TrajPartType: TYPE = GGModelTypes.TrajPartType; -- {none, joint, controlPoint, segment}; CreateFromSegments: PROC [traj: Traj, startSeg, endSeg: NAT] RETURNS [seq: Sequence]; < endSeg is allowed, in which case the segment sequence wraps around.>> <> <> <> CreateJointToJoint: PROC [traj: Traj, startJoint, endJoint: NAT] RETURNS [seq: Sequence]; <> CreateEmpty: PROC [traj: Traj] RETURNS [seq: Sequence]; <> CreateComplete: PROC [traj: Traj] RETURNS [seq: Sequence]; Copy: PROC [seq: Sequence] RETURNS [copy: Sequence]; CreateFromJoint: PROC [traj: Traj, jointNum: NAT] RETURNS [seq: Sequence]; <> CreateFromSegment: PROC [traj: Traj, segNum: NAT] RETURNS [seq: Sequence]; CreateSimpleFromSegment: PROC [traj: Traj, segNum: NAT] RETURNS [seq: Sequence]; CreateFromControlPoint: PROC [traj: Traj, segNum: NAT, controlPointNum: NAT] RETURNS [seq: Sequence]; <> <> <<>> UpdateBoundBox: PROC [seq: Sequence]; ComputeBoundBox: PROC [seq: Sequence] RETURNS [box: BoundBox]; <> ComputeTightBox: PROC [seq: Sequence] RETURNS [box: BoundBox]; <> <> <<>> Describe: PROC [seq: Sequence] RETURNS [rope: Rope.ROPE]; <> <<>> CopyInto: PROC [to: Sequence, from: Sequence]; <> FillInJoints: PROC [seq: Sequence]; <> FillInControlPoints: PROC [seq: Sequence]; <> TrimSelectedParts: PROC [seq: Sequence, selectedList: LIST OF SliceDescriptor]; <> TrimSelectedControlPointSegments: PROC [seq: Sequence, selectedList: LIST OF SliceDescriptor]; <> TrimSelectedJointSegments: PROC [seq: Sequence, selectedList: LIST OF SliceDescriptor]; <> <> DDifference: PROC [mutable, negative: Sequence]; <> <> <<>> Union: PROC [a, b: Sequence] RETURNS [union: Sequence]; Intersection: PROC [a, b: Sequence] RETURNS [intersection: Sequence]; Difference: PROC [a, b: Sequence] RETURNS [aMinusB: Sequence]; TrajMovingParts: PROC [seq: Sequence] RETURNS [background, overlay, rubber, drag: Sequence]; AugmentParts: PROC [seq: Sequence, selectClass: SelectionClass]; Augment: PROC [seq: Sequence, trajEnd: TrajEnd, extend: BOOL] RETURNS [bigger: Sequence]; <> <<>> IsEmpty: PROC [seq: Sequence] RETURNS [BOOL]; <> IsComplete: PROC [seq: Sequence] RETURNS [BOOL]; <> IsObsolete: PROC [seq: Sequence] RETURNS [BOOL]; <> Overlap: PROC [seq1, seq2: Sequence] RETURNS [BOOL]; <> ContainsJoint: PROC [seq: Sequence, jointNum: NAT] RETURNS [BOOL]; ContainsSegment: PROC [seq: Sequence, segNum: NAT] RETURNS [BOOL]; ContainsSomeSegment: PROC [seq: Sequence] RETURNS [BOOL]; <> ContainsSegmentParts: PROC [seq: Sequence, segNum: NAT] RETURNS [BOOL]; <> LastSegAndJoint: PROC [traj: Traj, trajEnd: TrajEnd] RETURNS [segAndJoint: Sequence]; UnpackOnePointSequence: PROC [seq: Sequence] RETURNS [isACP: BOOL, segNum, cpNum, jointNum: NAT]; <> UnpackOneSegmentSequence: PROC [seq: Sequence] RETURNS [segNum: NAT]; UnpackSimpleSequence: PROC [seq: Sequence] RETURNS [success: BOOL, partType: TrajPartType _ none, traj: Traj, joint: Joint _ NIL, jointNum: NAT _ 999, cp: Point _ [0,0], cpNum: NAT _ 999, seg: Segment _ NIL, segNum: NAT _ 999]; <> <> <<>> SequenceGenerator: TYPE = GGModelTypes.SequenceGenerator; RunsInSequence: PROC [seq: Sequence] RETURNS [seqGen: SequenceGenerator, runCount: NAT]; <> NextSequence: PROC [seqGen: SequenceGenerator] RETURNS [seq: Sequence]; SegmentGenerator: TYPE = GGModelTypes.SegmentGenerator; SegmentsInTraj: PROC [traj: Traj] RETURNS [segGen: SegmentGenerator]; <> SegmentsInSequence: PROC [seq: Sequence] RETURNS [segGen: SegmentGenerator]; <> OrderedSegmentsInSequence: PROC [seq: Sequence] RETURNS [segGen: SegmentGenerator]; <> NextSegment: PROC [segGen: SegmentGenerator] RETURNS [next: Segment]; <> SegAndIndex: TYPE = RECORD [seg: Segment, index: NAT]; NextSegmentAndIndex: PROC [segGen: SegmentGenerator] RETURNS [next: SegAndIndex]; ControlPointGenerator: TYPE = GGModelTypes.ControlPointGenerator; ControlPointsInSequence: PROC [seq: Sequence] RETURNS [cpGen: ControlPointGenerator]; NextControlPoint: PROC [cpGen: ControlPointGenerator] RETURNS [next: PointAndDone]; NextSegNumAndCPNum: PROC [cpGen: ControlPointGenerator] RETURNS [segNum, cpNum: NAT, done: BOOL]; NextSegmentAndControlPointNum: PROC [cpGen: ControlPointGenerator] RETURNS [segAndCPNum: SegAndIndex]; JointGenerator: TYPE = GGModelTypes.JointGenerator; JointsInSequence: PROC [seq: Sequence] RETURNS [jointGen: JointGenerator]; JointsInTraj: PROC [traj: Traj] RETURNS [jointGen: JointGenerator]; FirstJointNum: PROC [run: Sequence] RETURNS [INT]; <> LastJointNum: PROC [run: Sequence, firstJointNum: INT] RETURNS [lastNum: INT]; FirstSegNum: PROC [run: Sequence] RETURNS [INT]; <> LastSegNum: PROC [run: Sequence, firstSegNum: INT] RETURNS [lastNum: INT]; <> NextJoint: PROC [jointGen: JointGenerator] RETURNS [next: INT]; <