<> <> <> <> <> <<>> DIRECTORY GGBasicTypes, GGModelTypes, GGSegmentTypes; GGSequence: CEDAR DEFINITIONS = BEGIN BoundBox: TYPE = GGBasicTypes.BoundBox; PointAndDone: TYPE = GGModelTypes.PointAndDone; Sequence: TYPE = GGModelTypes.Sequence; Traj: TYPE = GGModelTypes.Traj; Segment: TYPE = GGSegmentTypes.Segment; Joint: TYPE = GGModelTypes.Joint; Point: TYPE = GGBasicTypes.Point; 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]; <> Augment: PROC [seq: Sequence, trajEnd: TrajEnd, extend: BOOL] RETURNS [bigger: Sequence]; <> <<>> UpdateBoundBox: PROC [seq: Sequence]; ComputeBoundBox: PROC [seq: Sequence] RETURNS [box: BoundBox]; <> ComputeTightBox: PROC [seq: Sequence] RETURNS [box: BoundBox]; <> <> <<>> CopyInto: PROC [to: Sequence, from: Sequence]; <> FillInJoints: PROC [seq: Sequence]; <> FillInControlPoints: PROC [seq: Sequence]; <> TrimSelectedParts: PROC [seq: Sequence, selectedList: LIST OF REF ANY]; <> TrimSelectedControlPointSegments: PROC [seq: Sequence, selectedList: LIST OF REF ANY]; <> TrimSelectedJointSegments: PROC [seq: Sequence, selectedList: LIST OF REF ANY]; <> TrimDanglingSegments: PROC [seq: Sequence]; <> TrimControlPointSegments: PROC [seq: Sequence, controlPointOn: BOOL]; <> TrimJointSegments: PROC [seq: Sequence, jointOn: BOOL]; <> 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]; <> <<>> 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]; <> 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]; SetStrokeWidth: PROC [seq: Sequence, strokeWidth: REAL]; GetStrokeWidth: PROC [seq: Sequence] RETURNS [strokeWidth: REAL]; END.