<> <> <> <> <> <<>> DIRECTORY GGModelTypes, Imager, ImagerTransformation, Rope, Rosary; GGObjects: CEDAR DEFINITIONS IMPORTS Imager = BEGIN BoundBox: TYPE = GGModelTypes.BoundBox; Cluster: TYPE = GGModelTypes.Cluster; Joint: TYPE = GGModelTypes.Joint; JointPair: TYPE = GGModelTypes.JointPair; Outline: TYPE = GGModelTypes.Outline; Point: TYPE = GGModelTypes.Point; Scene: TYPE = GGModelTypes.Scene; Sequence: TYPE = GGModelTypes.Sequence; Traj: TYPE = GGModelTypes.Traj; TrajEnd: TYPE = GGModelTypes.TrajEnd; -- {lo, hi} Segment: TYPE = GGModelTypes.Segment; Vector: TYPE = GGModelTypes.Vector; <> <<>> <> CreateTraj: PROC [point: Point] RETURNS [traj: Traj]; OutlineFromTraj: PROC [traj: Traj, lineEnds: Imager.StrokeEnd _ square, fillColor: Imager.Color _ Imager.black] RETURNS [outline: Outline]; <> <> SetLineEnds: PROC [outline: Outline, lineEnds: Imager.StrokeEnd]; SetFillColor: PROC [outline: Outline, fillColor: Imager.Color]; <> AddSegment: PROC [traj: Traj, trajEnd: TrajEnd, seg: Segment, segEnd: TrajEnd] RETURNS [success: BOOL]; <> <> DeleteSegment: PROC [traj: Traj, seg: Segment]; CloseWithSegment: PROC [traj: Traj, seg: Segment, segEnd: TrajEnd]; <> OpenAtSegment: PROC [traj: Traj, seg: Segment]; <<>> <> AddHoles: PROC [outline: Outline, holes: LIST OF Outline]; <> <> WeldTraj: PROC [fixed: Traj, fixedEnd: TrajEnd, moving: Traj, movingEnd: TrajEnd] RETURNS [longer: Traj]; SplitTraj: PROC [traj: Traj, jointOfSplit: NAT] RETURNS [loPiece, hiPiece: Traj]; <> ExtractTraj: PROC [original: Traj, start: INT, len: INT] RETURNS [piece: Traj]; <> CopyTraj: PROC [original: Traj] RETURNS [copy: Traj]; <> <<>> MakeCluster: PROC [entities: LIST OF REF ANY] RETURNS [newCluster: Cluster]; BreakCluster: PROC [oldCluster: Cluster] RETURNS [entities: LIST OF REF ANY]; <<>> <> <<>> CreateScene: PROC [] RETURNS [scene: Scene]; AddOutline: PROC [scene: Scene, outline: Outline, priority: INT]; <> AddCluster: PROC [scene: Scene, cluster: Cluster, priority: INT]; DeleteOutline: PROC [scene: Scene, outline: Outline]; <> <> <<>> EntityGenerator: TYPE = GGModelTypes.EntityGenerator; TopLevelEntities: PROC [scene: Scene] RETURNS [entityGenerator: EntityGenerator]; EntitiesInCluster: PROC [cluster: Cluster] RETURNS [entityGenerator: EntityGenerator]; NextEntity: PROC [g: EntityGenerator] RETURNS [next: REF ANY]; TrajGenerator: TYPE = GGModelTypes.TrajGenerator; TrajsInScene: PROC [scene: Scene] RETURNS [trajGen: TrajGenerator]; <> TrajsInOutline: PROC [outline: Outline] RETURNS [trajGen: TrajGenerator]; HasHoles: PROC [outline: Outline] RETURNS [BOOL]; <> HolesOfOutline: PROC [outline: Outline] RETURNS [trajGen: TrajGenerator]; <> FenceOfOutline: PROC [outline: Outline] RETURNS [fence: Traj]; <> NextTraj: PROC [g: TrajGenerator] RETURNS [next: Traj]; SegmentGenerator: TYPE = GGModelTypes.SegmentGenerator; SegmentsInTraj: PROC [traj: Traj] RETURNS [segGen: SegmentGenerator]; SegmentsInJointPair: PROC [traj: Traj, start: NAT, end: INT] RETURNS [segGen: SegmentGenerator]; <> SegmentsInSequence: PROC [seq: Sequence] RETURNS [segGen: SegmentGenerator]; InMODRegion: PROC [test: NAT, start, end, mod: NAT] RETURNS [BOOL]; 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]; NextSegment: PROC [segGen: SegmentGenerator] RETURNS [next: Segment]; SegAndIndex: TYPE = RECORD [seg: Segment, index: NAT]; NextSegmentAndIndex: PROC [segGen: SegmentGenerator] RETURNS [next: SegAndIndex]; JointGenerator: TYPE = GGModelTypes.JointGenerator; JointsInJointPair: PROC [traj: Traj, start: NAT, end: INT] RETURNS [jointGen: JointGenerator]; JointsInSequence: PROC [seq: Sequence] RETURNS [jointGen: JointGenerator]; JointsInTraj: PROC [traj: Traj] RETURNS [jointGen: JointGenerator]; NextJoint: PROC [jointGen: JointGenerator] RETURNS [next: INT]; BoundBoxGenerator: TYPE = GGModelTypes.BoundBoxGenerator; BoundBoxesInScene: PROC [scene: Scene] RETURNS [bBoxGen: BoundBoxGenerator]; NextBox: PROC [g: BoundBoxGenerator] RETURNS [next: BoundBox]; <> OutlineOfTraj: PROC [traj: Traj] RETURNS [outline: Outline]; < outline). Finds the unique outline to which traj belongs.>> <> <<>> HiSegment: PROC [traj: Traj] RETURNS [highestIndex: NAT]; <> FetchSegment: PROC [traj: Traj, index: NAT] RETURNS [seg: Segment]; HiJoint: PROC [traj: Traj] RETURNS [highestIndex: NAT]; FollowingJoint: PROC [traj: Traj, index: NAT] RETURNS [nextIndex: NAT]; <> FetchJointPos: PROC [traj: Traj, index: NAT] RETURNS [point: Point]; LastJointPos: PROC [traj: Traj] RETURNS [point: Point]; SetJointPos: PROC [traj: Traj, index: NAT, newPos: Point]; IsEndJoint: PROC [traj: Traj, index: NAT] RETURNS [BOOL]; <> <<>> FetchJoint: PROC [traj: Traj, index: NAT] RETURNS [joint: Joint]; IndexOfJoint: PROC [joint: Joint, traj: Traj] RETURNS [index: INT]; <> IndexOfSegment: PROC [segment: Segment, traj: Traj] RETURNS [index: INT]; <> <> CreateSimpleSequence: PROC [traj: Traj, start, end: NAT] RETURNS [seq: Sequence]; <> CreateEmptySequence: PROC [traj: Traj] RETURNS [seq: Sequence]; CreateCompleteSequence: PROC [traj: Traj] RETURNS [seq: Sequence]; CreateSequenceFromJoint: PROC [traj: Traj, jointNum: NAT] RETURNS [seq: Sequence]; CreateSequenceFromSegment: PROC [traj: Traj, segNum: NAT] RETURNS [seq: Sequence]; <> AddPart: PROC [seq: Sequence, start, end: NAT]; SequencesOverlap: PROC [seq1, seq2: Sequence] RETURNS [BOOL]; <> CombineSequences: PROC [new, old: Sequence] RETURNS [union: Sequence, newMinusOld: Sequence]; IsEmptySequence: PROC [seq: Sequence] RETURNS [BOOL]; SequenceGenerator: TYPE = GGModelTypes.SequenceGenerator; NextSequence: PROC [seqGen: SequenceGenerator] RETURNS [seq: Sequence]; InJointRange: PROC [index: NAT, seq: Sequence] RETURNS [BOOL]; <> TransformTraj: PROC [traj: Traj, transform: ImagerTransformation.Transformation]; <> TransformSegment: PROC [seg: Segment, transform: ImagerTransformation.Transformation]; <> TransformSequence: PROC [seq: Sequence, transform: ImagerTransformation.Transformation]; <> TranslateSegment: PROC [seg: Segment, vector: Vector]; <> <<>> <> SetStrokeWidth: PROC [seq: Sequence, strokeWidth: REAL]; SetColor: PROC [seq: Sequence, color: Imager.Color]; END. <<>>