DIRECTORY CDMarkObjects, CD, CDOrient, CDProperties, Rope USING [ROPE, Equal], Imager, ImagerPath; CDMarkObjectsImpl: CEDAR PROGRAM IMPORTS CD, CDProperties, Rope, CDOrient, Imager, ImagerPath EXPORTS CDMarkObjects = BEGIN MarkEnumerator: TYPE = CDMarkObjects.MarkEnumerator; markAtom: PUBLIC ATOM _ $AlignmentMarkOb; markOb: PUBLIC CD.Object; markNameProperty: PUBLIC ATOM _ $SignalName; myLayer: CD.Layer _ CD.combined; objsProcs: REF CD.ObjectClass; path: ImagerPath.Trajectory = CreateMarkPath[]; DrawMark: CD.DrawProc = BEGIN DrawPath: PROC [context: Imager.Context, ob: CD.Object, layer: CD.Layer] = BEGIN Imager.MaskFillTrajectory[context, path]; END; IF pr.symbolics THEN { pr.drawContext[pr, DrawPath, markOb, pos, orient, myLayer] } END; WriteMark: CD.InternalWriteProc --PROC [me: Object]-- = {}; ReadMark: CD.InternalReadProc --PROC [] RETURNS [Object]-- = {RETURN [markOb]}; SetMarkName: PUBLIC PROC [markInstance: CD.Instance, name: Rope.ROPE] = BEGIN CDProperties.PutPropOnInstance[onto: markInstance, prop: markNameProperty, val: name] END; GetMarkName: PUBLIC PROC [markInstance: CD.Instance] RETURNS [name: Rope.ROPE] = BEGIN WITH CDProperties.GetPropFromInstance[from: markInstance, prop: markNameProperty] SELECT FROM r: Rope.ROPE => name _ r; ENDCASE => name _ "* bad name *"; END; FindMark: PUBLIC PROC [cellOb: CD.Object_NIL, design: CD.Design_NIL, name: Rope.ROPE] RETURNS [inst: CD.Instance_NIL] = BEGIN Enumerate: MarkEnumerator = { IF Rope.Equal[GetMarkName[markInstance], name] THEN {inst _ markInstance; quit_TRUE} }; [] _ EnumerateMarks[cellOb: cellOb, design: design, proc: Enumerate]; END; GetMarkPosition: PUBLIC PROC [markInstance: CD.Instance] RETURNS [CD.Position] = BEGIN RETURN [CDOrient.MapPoint[ pointInCell: [x: 0, y: 0], cellInstPos: markInstance.location, cellSize: markInstance.ob.size, cellInstOrient: markInstance.orientation ]] END; EnumerateMarks: PUBLIC PROC [cellOb: CD.Object_NIL, design: CD.Design_NIL, proc: MarkEnumerator] RETURNS [quit: BOOL_FALSE] = BEGIN cp: CD.CellPtr; IF cellOb#NIL THEN cp _ NARROW[cellOb.specificRef] ELSE IF design#NIL THEN cp _ design^.actual.first.specific ELSE ERROR; FOR list: CD.InstanceList _ cp.contents, list.rest WHILE (list#NIL AND ~quit) DO IF list.first.ob=markOb THEN { quit _ proc[list.first]; -- do NOT catch errors }; ENDLOOP; END; CreateMarkPath: PROC [] RETURNS [path: ImagerPath.Trajectory] = BEGIN path _ ImagerPath.MoveTo[[0, 0]]; path _ ImagerPath.LineTo[path, [0, 3]]; path _ ImagerPath.LineTo[path, [1, 2]]; path _ ImagerPath.LineTo[path, [3, 4]]; path _ ImagerPath.LineTo[path, [4, 3]]; path _ ImagerPath.LineTo[path, [2, 1]]; path _ ImagerPath.LineTo[path, [3, 0]]; path _ ImagerPath.LineTo[path, [0, 0]]; END; Init: PROC[] = BEGIN objsProcs _ CD.RegisterObjectClass[markAtom]; objsProcs.drawMe _ DrawMark; objsProcs.internalWrite _ WriteMark; objsProcs.internalRead _ ReadMark; objsProcs.description _ "mark"; objsProcs.symbolic _ TRUE; markOb _ NEW[CD.ObjectRep _ [ class: objsProcs, size: [4, 4], layer: myLayer, specificRef: markAtom ]]; END; Init[]; END. rCDMarkObjectsImpl.mesa Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. Created by: Bob Mayo, June 8, 1984 12:28:34 pm PDT Redesigned by: Jacobi, September 10, 1984 5:04:14 pm PDT Last Edited: Jacobi, May 29, 1985 10:42:56 am PDT --PROC [markInstance: CD.Instance] RETURNS [quit: BOOL_FALSE] --actually finds any position of a real origin Κ±˜– "Cedar" stylešœ™Jšœ Οmœ7™BJ™2J™9J™2—J˜šΟk ˜ Jšœ˜Jšžœ˜Jšœ ˜ Jšœ ˜ Jšœžœžœ ˜Jšœ˜šœ ˜ J˜——J˜šΟbœžœžœ˜$Jšžœžœ3˜=Jšžœ˜—Jšžœ˜J˜šœžœ ˜4Jšœ=™=—J˜Jšœ ž œ˜)Jšœž œ˜Jšœž œ˜,J˜Jšœ žœ žœ ˜ Jšœ žœžœ ˜Jšœ/˜/J˜J˜šŸœžœ ˜Jšž˜šΟnœžœžœžœ ˜JJšž˜Jšœ)˜)Jšžœ˜—šžœžœ˜Jšœ:˜:J˜—Jšžœ˜J˜—šŸ œžœΟcœ˜;J˜—šŸœžœ‘œžœ ˜OJ˜—š  œž œžœžœ˜GJšž˜JšœU˜UJšžœ˜—J˜š   œž œžœ žœ žœ˜PJšž˜šžœNžœž˜]Jšœžœ ˜Jšžœ˜!—Jšžœ˜—J˜š œž œ žœžœ žœžœ žœžœžœ žœ˜wJšž˜šŸ œ˜Jšžœ-žœžœ˜UJšœ˜—JšœE˜EJšžœ˜—J˜š  œž œžœ žœžœ ˜PJšœ.™.Jšž˜šžœ˜Jšœ˜Jšœ#˜#Jšœ ˜ Jšœ(˜(Jšœ˜—Jšžœ˜—J˜š œž œ žœžœ žœžœžœžœžœ˜}Jšž˜Jšœžœ ˜Jšžœžœžœžœ˜2Jšžœžœžœžœ#˜:Jšžœžœ˜ š žœžœ'žœžœžœž˜Pšžœžœ˜Jšœ‘˜/J˜—Jšžœ˜—Jšžœ˜—J˜š œžœžœ ˜?Jšž˜Jšœ!˜!Jšœ'˜'Jšœ'˜'Jšœ'˜'Jšœ'˜'Jšœ'˜'Jšœ'˜'Jšœ'˜'Jšžœ˜—J˜š œžœ˜Jšž˜Jšœ žœ˜-J˜J˜$J˜"Jšœ˜Jšœžœ˜šœ žœžœ˜Jšœ˜J˜ Jšœ˜Jšœ˜Jšœ˜—Jšžœ˜J™—Jšœ˜Jšžœ˜—…— ;