<> <> <> <> <> <> <> <<>> DIRECTORY GGBasicTypes, GGCoreTypes, GGModelTypes, GGSegmentTypes, Imager, Rope; GGSequence: CEDAR DEFINITIONS = BEGIN BezierDragRecord: TYPE = GGModelTypes.BezierDragRecord; BoundBox: TYPE = GGCoreTypes.BoundBox; ControlPointGenerator: TYPE = GGModelTypes.ControlPointGenerator; EditConstraints: TYPE = GGModelTypes.EditConstraints; Joint: TYPE = GGModelTypes.Joint; JointGenerator: TYPE = GGModelTypes.JointGenerator; Point: TYPE = GGBasicTypes.Point; PointAndDone: TYPE = GGModelTypes.PointAndDone; PointWalkProc: TYPE = GGModelTypes.PointWalkProc; SegAndIndex: TYPE = RECORD [seg: Segment, index: NAT]; Segment: TYPE = GGSegmentTypes.Segment; SegmentGenerator: TYPE = GGModelTypes.SegmentGenerator; SelectionClass: TYPE = GGSegmentTypes.SelectionClass; SequenceOfReal: TYPE = GGCoreTypes.SequenceOfReal; Slice: TYPE = GGModelTypes.Slice; SliceDescriptor: TYPE = GGModelTypes.SliceDescriptor; SliceParts: TYPE = GGModelTypes.SliceParts; StrokeEnd: TYPE = Imager.StrokeEnd; StrokeJoint: TYPE = Imager.StrokeJoint; Traj: TYPE = GGModelTypes.Traj; TrajData: TYPE = GGModelTypes.TrajData; TrajEnd: TYPE = GGModelTypes.TrajEnd; -- {lo, hi}; TrajParts: TYPE = GGModelTypes.TrajParts; TrajPartType: TYPE = GGModelTypes.TrajPartType; -- {none, joint, controlPoint, segment}; SequenceGenerator: TYPE = REF SequenceGeneratorObj; SequenceGeneratorObj: TYPE = RECORD [ list: LIST OF TrajParts ]; CreateFromSegments: PROC [traj: TrajData, startSeg, endSeg: NAT] RETURNS [seq: TrajParts]; < endSeg is allowed, in which case the segment sequence wraps around.>> <> <> <> CreateJointToJoint: PROC [traj: TrajData, startJoint, endJoint: NAT] RETURNS [seq: TrajParts]; <> CreateEmpty: PROC [traj: TrajData] RETURNS [seq: TrajParts]; <> CreateComplete: PROC [traj: TrajData] RETURNS [seq: TrajParts]; CreateFromJoint: PROC [traj: TrajData, jointNum: NAT] RETURNS [seq: TrajParts]; <> CreateFromSegment: PROC [traj: TrajData, segNum: NAT] RETURNS [seq: TrajParts]; CreateSimpleFromSegment: PROC [traj: TrajData, segNum: NAT] RETURNS [seq: TrajParts]; CreateFromControlPoint: PROC [traj: TrajData, segNum: NAT, controlPointNum: NAT] RETURNS [seq: TrajParts]; <> Copy: PROC [seq: TrajParts] RETURNS [copy: TrajParts]; <> <<>> CopyInto: PROC [to: TrajParts, from: TrajParts]; <> FillInJoints: PROC [seq: TrajParts]; <> FillInControlPoints: PROC [seq: TrajParts]; <> TrimSelectedParts: PROC [trimDescriptor: SliceDescriptor, selectedList: LIST OF SliceDescriptor]; <> TrimSelectedJointSegments: PROC [trimDescriptor: SliceDescriptor, selectedList: LIST OF SliceDescriptor]; <> TrimSelectedControlPointSegments: PROC [trimDescriptor: SliceDescriptor, selectedList: LIST OF SliceDescriptor]; <> DDifference: PROC [mutable, negative: SliceDescriptor]; <> <> <<>> Union: PROC [a, b: SliceDescriptor] RETURNS [union: SliceDescriptor]; Difference: PROC [a, b: SliceDescriptor] RETURNS [aMinusB: SliceDescriptor]; Intersection: PROC [a, b: SliceDescriptor] RETURNS [intersection: SliceDescriptor]; TrajMovingParts: PROC [slice: Slice, parts: SliceParts, editConstraints: EditConstraints, bezierDrag: BezierDragRecord] RETURNS [background, overlay, rubber, drag: TrajParts]; Augment: PROC [descriptor: SliceDescriptor, trajEnd: TrajEnd, extend: BOOL] RETURNS [bigger: TrajParts]; <> <<>> <> <> IsEmpty: PROC [seq: TrajParts] RETURNS [BOOL]; <> IsComplete: PROC [seq: TrajParts] RETURNS [BOOL]; <> IsConstrained: PUBLIC PROC [descriptor: SliceDescriptor, segNum, cPNum: NAT, editConstraints: EditConstraints] RETURNS [BOOL]; <> Overlap: PROC [descriptor1, descriptor2: SliceDescriptor] RETURNS [BOOL]; <> ContainsJoint: PROC [seq: TrajParts, jointNum: NAT] RETURNS [BOOL]; ContainsSegment: PROC [seq: TrajParts, segNum: NAT] RETURNS [BOOL]; ContainsSomeSegment: PROC [seq: TrajParts] RETURNS [BOOL]; <> ContainsSegmentParts: PROC [seq: TrajParts, segNum: NAT] RETURNS [BOOL]; <> LastSegAndJoint: PROC [traj: TrajData, trajEnd: TrajEnd] RETURNS [segAndJoint: TrajParts]; UnpackOnePointSequence: PROC [seq: TrajParts] RETURNS [isACP: BOOL, segNum, cpNum, jointNum: NAT]; <> UnpackOneSegmentSequence: PROC [seq: TrajParts] RETURNS [segNum: NAT]; <> UnpackSimpleSequence: PROC [slice: Slice, parts: SliceParts] RETURNS [success: BOOL, partType: TrajPartType _ none, traj: TrajData, joint: Joint _ NIL, jointNum: NAT _ 999, cp: Point _ [0,0], cpNum: NAT _ 999, seg: Segment _ NIL, segNum: NAT _ 999]; <<>> <> <<>> RunsInSequence: PROC [seq: TrajParts] RETURNS [seqGen: SequenceGenerator, runCount: NAT]; <> NextSequence: PROC [seqGen: SequenceGenerator] RETURNS [seq: TrajParts]; FirstRun: PROC [seq: TrajParts] RETURNS [runParts: TrajParts]; SegmentWalkProc: TYPE = PROC [traj: TrajData, seg: Segment, index: NAT] RETURNS [done: BOOL _ FALSE]; SegmentsInTraj: PROC [traj: TrajData] RETURNS [segGen: SegmentGenerator]; <> WalkSegmentsInTraj: PROC [traj: TrajData, walkProc: SegmentWalkProc] RETURNS [aborted: BOOL _ FALSE]; <> <<>> SegmentsInSequence: PROC [traj: TrajData, seq: TrajParts] RETURNS [segGen: SegmentGenerator]; <> WalkSegmentsInSequence: PROC [traj: TrajData, seq: TrajParts, walkProc: SegmentWalkProc] RETURNS [aborted: BOOL _ FALSE]; CountSegmentsInSequence: PROC [traj: TrajData, seq: TrajParts] RETURNS [count: NAT]; <> OrderedSegmentsInSequence: PROC [traj: TrajData, seq: TrajParts] RETURNS [segGen: SegmentGenerator]; <> NextSegment: PROC [segGen: SegmentGenerator] RETURNS [next: Segment]; <> NextSegmentAndIndex: PROC [segGen: SegmentGenerator] RETURNS [next: SegAndIndex]; ControlPointsInSequence: PROC [traj: TrajData, seq: TrajParts] RETURNS [cpGen: ControlPointGenerator]; WalkControlPointsInSequence: PROC [traj: TrajData, seq: TrajParts, walkProc: PointWalkProc]; NextControlPoint: PROC [cpGen: ControlPointGenerator] RETURNS [next: PointAndDone]; NextSegNumAndCPNum: PROC [cpGen: ControlPointGenerator] RETURNS [segNum, cpNum: NAT, done: BOOL]; NextSegmentAndControlPointNum: PROC [cpGen: ControlPointGenerator] RETURNS [segAndCPNum: SegAndIndex]; JointsInSequence: PROC [seq: TrajParts] RETURNS [jointGen: JointGenerator]; WalkJointsInSequence: PROC [traj: TrajData, seq: TrajParts, walkProc: PointWalkProc]; JointWalkProc: TYPE = PROC [traj: TrajData, jointPos: Point, index: NAT] RETURNS [done: BOOL _ FALSE]; WalkJointPositionsInSequence: PROC [traj: TrajData, seq: TrajParts, walkProc: JointWalkProc]; <> JointsInTraj: PROC [traj: TrajData] RETURNS [jointGen: JointGenerator]; FirstJointNum: PROC [run: TrajParts] RETURNS [INT]; <> LastJointNum: PROC [run: TrajParts, firstJointNum: INT] RETURNS [lastNum: INT]; FirstSegNum: PROC [run: TrajParts] RETURNS [INT]; <> LastSegNum: PROC [run: TrajParts, firstSegNum: INT] RETURNS [lastNum: INT]; <> NextJoint: PROC [jointGen: JointGenerator] RETURNS [next: INT]; END.