<> <> <> <> <> <<>> DIRECTORY GGBasicTypes, GGBoundBox, GGInterfaceTypes, GGModelTypes, GGSegmentTypes; GGCaret: CEDAR DEFINITIONS = BEGIN Caret: TYPE = GGInterfaceTypes.Caret; GGData: TYPE = GGInterfaceTypes.GGData; Joint: TYPE = GGModelTypes.Joint; Point: TYPE = GGBasicTypes.Point; Segment: TYPE = GGSegmentTypes.Segment; Sequence: TYPE = GGModelTypes.Sequence; SliceDescriptor: TYPE = GGModelTypes.SliceDescriptor; Traj: TYPE = GGModelTypes.Traj; Vector: TYPE = GGBasicTypes.Vector; caretWidth: REAL = 6.0; caretHeight: REAL = 8.0; anchorWidth: REAL = 16.0; anchorHeight: REAL = 16.0; <> <> <> <> <<>> Create: PROC RETURNS [caret: Caret]; Copy: PROC [to, from: Caret]; <> Kill: PROC [caret: Caret]; <> <<>> Exists: PROC [caret: Caret] RETURNS [BOOL]; BoundBoxOfCaret: PROC [caret: Caret, ggData: GGData] RETURNS [box: GGBoundBox.BoundBox]; -- returns NIL if caret not either ggData.caret or ggData.anchor <<>> <> SitOn: PROC [caret: Caret, chair: SliceDescriptor]; GetChair: PROC [caret: Caret] RETURNS [chair: SliceDescriptor]; SittingOnEnd: PROC [caret: Caret] RETURNS [BOOL]; <> SetAttractor: PROC [caret: Caret, point: Point, normal: Vector, attractor: REF ANY]; <> NoAttractor: PROC [caret: Caret]; <> GetAttractor: PROC [caret: Caret] RETURNS [attractor: REF ANY]; GetPoint: PROC [caret: Caret] RETURNS [point: Point]; GetNormal: PROC [caret: Caret] RETURNS [normal: Vector]; END.