DIRECTORY PointDefs USING [ScrPt, ObjPt, ObjPtSequence], GriffinEncoding USING [EdgeEncoding,AreaEncoding, Link], StyleDefs USING [StyleHandle], XFormDefs USING[XFMDescriptor], CubicSplines USING [SplineType], Imager USING [Context], Rope USING [ROPE]; ObjectDefs: CEDAR DEFINITIONS = BEGIN ScrPt: TYPE = PointDefs.ScrPt; ObjPt: TYPE = PointDefs.ObjPt; ObjPtSequence: TYPE = PointDefs.ObjPtSequence; StyleHandle: TYPE = StyleDefs.StyleHandle; ObjectType: TYPE = {shape,caption,token, selectToken, menu}; ObjectHandle: TYPE = REF Object; TokenType: TYPE = {CP,open, center, hgrid, vgrid}; tokenSize: INT = 5; View: TYPE = {main,alternate}; MenuOrientation: TYPE = {horizontal, vertical}; ClusterID: TYPE = [0..1023]; OpenCluster: ClusterID = 1; Object: TYPE = RECORD [ link: ObjectHandle _ NIL, backLink: ObjectHandle _ NIL, style: StyleHandle _ NIL, cluster: ClusterID _ 0, view: View _ main, deleted: BOOLEAN _ FALSE, visible: BOOLEAN _ TRUE, selected: BOOLEAN _ FALSE, cull: {inside,outside,partial} _ partial, validEncoding: BOOLEAN _ FALSE, tl,br: ScrPt _ [0,0], body: SELECT objectType: ObjectType FROM shape => [ closed: BOOLEAN _ FALSE, trajectory: TrajectoryHandle _ NIL, edgeEncoding: GriffinEncoding.EdgeEncoding _ NIL, areaEncoding: GriffinEncoding.AreaEncoding _ NIL ], caption => [ p0: ObjPt _ [-1,-1], text: Rope.ROPE _ NIL ], token => [ tokenType: TokenType _ CP, p0: ObjPt _ [0,0] ], selectToken => [ p0: ObjPt _ [0,0], located: BOOLEAN _ FALSE, selectedObj: ObjectHandle _ NIL ], menu => [ orientation: MenuOrientation _ vertical, head: REF ANY _ NIL --MenuDefs.MenuItemHandle. There is a loop ], ENDCASE ]; TrajectoryHandle: TYPE = REF Trajectory; Trajectory: TYPE = RECORD [splineType: CubicSplines.SplineType, traj: SELECT type:* FROM linked => [links: REF Link _ NIL], cyclic => [knots: ObjPtSequence _ NIL], ENDCASE ]; Link: TYPE = RECORD [link: REF Link _ NIL, degree: {D0,D1,D2,D3}, knots: ObjPtSequence _ NIL ]; ObjectProc: TYPE = PROCEDURE [obj: ObjectHandle] RETURNS [stop: BOOLEAN _ FALSE]; InitObjectFns: PROC; GetCurrentView: PROCEDURE RETURNS [View]; SetCurrentView: PROCEDURE[view: View]; Visible: PROCEDURE[object: ObjectHandle] RETURNS[BOOLEAN]; GetNextClusterID: PROCEDURE RETURNS[id: ClusterID]; GetNextObject: PROCEDURE [obj: ObjectHandle] RETURNS [ObjectHandle]; ForAllObjects: PROCEDURE [proc: ObjectProc]; ForAllObjectsReversed: PROCEDURE [proc: ObjectProc]; ForAllPictureObjects: PROCEDURE [proc: ObjectProc]; ForAllVisibleObjects: PROCEDURE [proc: ObjectProc] ; ForAllVisiblePictureObjects: PROCEDURE [proc: ObjectProc] ; ForAllObjectsThroughObject: PROCEDURE [proc: ObjectProc, lastObj: ObjectHandle]; GetTopPictureObj: PROCEDURE RETURNS [ObjectHandle]; ForAllInBoxDo: PROCEDURE[tl,br: ScrPt,proc: ObjectProc] RETURNS [BOOLEAN]; ForAllPictureObjectsInBoxDo: PROCEDURE[tl,br: ScrPt,proc: ObjectProc] RETURNS [BOOLEAN]; ForAllInCluster: PROCEDURE [id: ClusterID,proc: ObjectProc] ; StartObject: PROCEDURE[type: ObjectType] RETURNS [ObjectHandle]; AppendLink: PROCEDURE[obj: REF shape Object,link: REF Link] RETURNS [GriffinEncoding.Link]; RemoveLastLink: PROCEDURE[obj: REF shape Object] RETURNS [GriffinEncoding.Link]; CopyObject: PROCEDURE [object: ObjectHandle] RETURNS [ObjectHandle]; DeleteObject: PROCEDURE[object: ObjectHandle]RETURNS [next: ObjectHandle]; ExpungeObjects: PROCEDURE; FloatObject: PROCEDURE [object: ObjectHandle]; SinkObject: PROCEDURE [object: ObjectHandle]; FlipUpObject: PROCEDURE [object: ObjectHandle]; FlipDownObject: PROCEDURE [object: ObjectHandle]; AddToken: PROCEDURE[pt: ScrPt,type: TokenType] ; GetTokenBoundingBox: PROC[token: REF token Object] RETURNS [tl,br: ScrPt]; GetSelectTokenBoundingBox: PROC[token: REF selectToken Object] RETURNS [tl,br: ScrPt]; DeleteAllCPs: PROCEDURE; ReadCPs: PROCEDURE RETURNS[array: ObjPtSequence]; SelectObject: PUBLIC PROCEDURE[obj: ObjectHandle] RETURNS [ObjectHandle]; DeSelectObject: PROCEDURE [object: ObjectHandle]; SelectCluster: PROCEDURE[id: ClusterID] RETURNS [ObjectHandle]; DeSelectCluster: PUBLIC PROCEDURE[id: ClusterID]; ReturnSelectToken: PUBLIC PROCEDURE[object: ObjectHandle] RETURNS[REF Object[selectToken]]; ForAllSelectedDo: PUBLIC PROCEDURE[do: ObjectProc]; ReplotAllObjects: PROCEDURE[dc: Imager.Context]; ObjectsToInterpress: PROCEDURE[s: Rope.ROPE]; ReplotBox: PROCEDURE [tl,br: ScrPt, dc: Imager.Context]; ReplotBoxFromObject: PROC [tl,br: ScrPt,object: ObjectHandle, dc: Imager.Context]; ReplotFromObject: PROCEDURE[startObj: ObjectHandle, dc: Imager.Context]; PlotObject: PROCEDURE [object: ObjectHandle, dc: Imager.Context]; PlotOneObject: PROCEDURE [object: ObjectHandle]; EraseObject: PROCEDURE [object: ObjectHandle]; PlotLink: PUBLIC PROCEDURE[link: GriffinEncoding.Link, style: StyleHandle]; EraseLink: PUBLIC PROCEDURE[link: GriffinEncoding.Link]; EncodeObject: PROCEDURE[shape: REF shape Object]; AdjustBoxForStyle: PROC[object: ObjectHandle]; GetObjectHandle: PROCEDURE [pt: ScrPt] RETURNS [ObjectHandle]; GetObjectHandleBetweenObjects: PROCEDURE [pt: ScrPt,topObject,bottomObject: ObjectHandle] RETURNS [ObjectHandle] ; MoveObject: PROCEDURE[object: ObjectHandle, from,to: ScrPt]; XFormObject: PROCEDURE[object: ObjectHandle, matrix: XFormDefs.XFMDescriptor]; END. `objectdefs Griffin object types and manipulating routines Stone April 1, 1981 10:51 PM Last Edited by: Stone, July 4, 1985 1:34:29 pm PDT part of encoding, but are here since true for all variants procedures implemented by objectfns Initializes the object list back to front (painters order) front to back (more efficient for hit testing) procedures implemented by showobjects next 4 procs will generate their own call to GriffinViewer.DoPaint just does a RefreshDefs.EraseAndSave of link bounding box Some handy routines for keeping the encoding up to date Hit Testing implemented by ObjectXForms Κλ˜J˜Jšœ ™ Jšœ.™.Jšœ™Jšœ2™2J˜šΟk ˜ Icodešœ œ˜.Jšœœ#˜8Kšœ œ˜Jšœ œ˜Jšœ œ˜ Jšœœ ˜Jšœœœ˜—J˜Jšœ œ˜Jš˜Jšœœ˜Jšœœ˜Jšœœ˜.Jšœ œ˜*J˜Jšœ œ,˜šŸœ ˜)Jšœ1œ˜I—J˜J˜Jšœ™JšŸ œ œ'˜