DIRECTORY GGBasicTypes, GGCoreTypes, GGInterfaceTypes, GGModelTypes, GGSegmentTypes, GGState, Imager; GGAlign: CEDAR DEFINITIONS = BEGIN AlignBag: TYPE = GGInterfaceTypes.AlignBag; Caret: TYPE = GGInterfaceTypes.Caret; FeatureData: TYPE = GGInterfaceTypes.FeatureData; Filters: TYPE = GGInterfaceTypes.Filters; GGData: TYPE = GGInterfaceTypes.GGData; Line: TYPE = GGCoreTypes.Line; Point: TYPE = GGBasicTypes.Point; Scene: TYPE = GGModelTypes.Scene; SelectionClass: TYPE = GGSegmentTypes.SelectionClass; Sequence: TYPE = GGModelTypes.Sequence; Slice: TYPE = GGModelTypes.Slice; SliceDescriptor: TYPE = GGModelTypes.SliceDescriptor; SliceParts: TYPE = GGModelTypes.SliceParts; Traj: TYPE = GGModelTypes.Traj; TrajEnd: TYPE = GGModelTypes.TrajEnd; TriggerBag: TYPE = REF TriggerBagObj; TriggerBagObj: TYPE = GGInterfaceTypes.TriggerBagObj; Vector: TYPE = GGBasicTypes.Vector; FilterSliceProc: TYPE = PROC [sliceD: SliceDescriptor, scene: Scene, editConstraints: GGModelTypes.EditConstraints, bezierDrag: GGInterfaceTypes.BezierDragRecord] RETURNS [stationary: SliceDescriptor, someRemoved: BOOL _ FALSE]; emptyTriggerBag: TriggerBag; CreateTriggerBag: PROC [] RETURNS [triggerBag: TriggerBag]; FlushTriggerBag: PROC [triggerBag: TriggerBag]; EmptyTriggerBag: PROC [triggerBag: TriggerBag] RETURNS [BOOL]; CopyTriggerBag: PROC [to, from: TriggerBag]; FeatureWalkProc: TYPE = PROC [feature: FeatureData] RETURNS [done: BOOL _ FALSE]; WalkSliceTriggers: PROC [triggerBag: TriggerBag, walkProc: FeatureWalkProc]; FeatureFromSlice: PROC [slice: Slice, parts: SliceParts _ NIL] RETURNS [feature: FeatureData]; FeatureFromAnchor: PROC [anchor: Caret] RETURNS [feature: FeatureData]; FillStaticTriggerBag: PROC [anchor: Caret, scene: Scene, heuristics: BOOL, triggerBag: TriggerBag]; FillDynamicTriggerBag: PROC [anchor: Caret, scene: Scene, heuristics: BOOL, triggerBag: TriggerBag, editConstraints: GGModelTypes.EditConstraints, bezierDrag: GGInterfaceTypes.BezierDragRecord]; FillStaticSceneBag: PROC [scene: Scene, sceneBag: TriggerBag]; FillDynamicSceneBag: PROC [scene: Scene, sceneBag: TriggerBag, editConstraints: GGModelTypes.EditConstraints, bezierDrag: GGInterfaceTypes.BezierDragRecord]; emptyAlignBag: AlignBag; -- an (immutable) empty object bag. CreateAlignBag: PROC [] RETURNS [alignBag: AlignBag]; FlushAlignBag: PROC [alignBag: AlignBag]; EmptyAlignBag: PROC [alignBag: AlignBag] RETURNS [BOOL]; JointAddSlopeLine: PROC [degrees: REAL, point: Point, alignBag: AlignBag] RETURNS [feature: FeatureData]; WalkSlopeLines: PROC [alignBag: AlignBag, walkProc: FeatureWalkProc]; JointAddCircle: PROC [radius: REAL, point: Point, alignBag: AlignBag] RETURNS [feature: FeatureData]; SegmentAddTwoAngleLines: PROC [degrees: REAL, segNum: NAT, lo, hi: Point, alignBag: AlignBag] RETURNS [line1, line2: FeatureData]; SegmentAddDistanceLines: PROC [distance: REAL, segNum: NAT, lo, hi: Point, alignBag: AlignBag] RETURNS [line1, line2: FeatureData]; FillStaticAlignBag: PROC [triggerBag: TriggerBag, sceneBag: TriggerBag, ggData: GGData, hideAlignments: BOOL, alignBag: AlignBag]; FillDynamicAlignBag: PROC [triggerBag: TriggerBag, sceneBag: TriggerBag, ggData: GGData, hideAlignments: BOOL, action: ATOM, alignBag: AlignBag]; SetStaticBags: PROC [ggData: GGData]; SetStaticTriggerAndAlignBags: PROC [ggData: GGData]; SetDynamicBags: PROC [ggData: GGData, action: ATOM]; StaticToDynamicBags: PROC [ggData: GGData, saveForeground: BOOL _ TRUE]; DynamicToStaticBags: PROC [ggData: GGData, restoreForeground: BOOL _ TRUE]; UpdateBagsForAdd: PROC [oldAncestor: Slice, newAncestorD: SliceDescriptor, trajEnd: TrajEnd, ggData: GGData] RETURNS [repaintForeground: BOOL]; UpdateBagsForNewSlices: PROC [newSlices: LIST OF Slice, ggData: GGData]; UpdateBagsForDelete: PROC [oldAncestor: Slice, ggData: GGData] RETURNS [repaintForeground: BOOL]; FilterLists: TYPE = REF FilterListsObj; FilterListsObj: TYPE = GGState.FilterListsObj; BuiltInFilters: PROC [triggerBag: TriggerBag, ggData: GGData, hideAlignments: BOOL, alignBag: AlignBag]; CreateAnchorTrigger: PUBLIC PROC [anchor: Caret, triggerBag: TriggerBag] RETURNS [feature: FeatureData]; AddSliceFeature: PROC [sliceD: SliceDescriptor, triggerBag: TriggerBag] RETURNS [newFeature: FeatureData]; RemoveMovingSlice: PROC [sliceD: SliceDescriptor, scene: Scene, editConstraints: GGModelTypes.EditConstraints, bezierDrag: GGInterfaceTypes.BezierDragRecord] RETURNS [stationary: SliceDescriptor, someRemoved: BOOL _ FALSE]; IncrementalNewTrigger: PROC [trigger: FeatureData, filterLists: FilterLists, hideAlignments: BOOL, alignBag: AlignBag] RETURNS [alignObjects: LIST OF FeatureData]; FilterType: TYPE = {slope, radius, angle, distance}; IncrementalNewFilter: PROC [value: REAL, filterType: FilterType, triggerBag: TriggerBag, hideAlignments: BOOL, alignBag: AlignBag] RETURNS [alignObjects: LIST OF FeatureData]; RemoveAnchorTrigger: PUBLIC PROC [triggerBag: TriggerBag]; RemoveEntireHotSlice: PROC [slice: Slice, triggerBag: TriggerBag] RETURNS [oldSliceD: SliceDescriptor]; RemoveMentionSlice: PROC [slice: Slice, alignBag: AlignBag]; CreateLineTable: PROC [ggData: GGData]; -- called by GGWindow.CreateWindow FlushLineTable: PROC [ggData: GGData]; -- called by GGRefreshImpl HasVisibleObjects: PROC [alignBag: AlignBag] RETURNS [BOOL]; DrawFeatureList: PROC [dc: Imager.Context, alignObjects: LIST OF FeatureData, ggData: GGData]; DrawAlignBagRegardless: PROC [dc: Imager.Context, alignBag: AlignBag, ggData: GGData]; MakeFiltersGarbage: PROC [filters: Filters]; END. ¤GGAlign.mesa Contents: Allows the client to build a set of trigger objects (joints, segments, and control points) which can be sent through a gravity filter to create a set alignment objects. Pier, November 10, 1987 11:56:55 pm PST Bier, May 28, 1990 6:13:48 pm PDT Eisenman, September 28, 1987 6:32:41 pm PDT sliceD describes those parts of sliceD.slice that are in the trigger bag (because they are hot). A FilterSliceProc will figure out which parts of this slice are moving and subtract them from sliceD. If this changes sliceD, someRemoved will be TRUE. [Artwork node; type 'ArtworkInterpress on' to command tool] TriggerBag Use this as an (immutable) empty TriggerBag. Allocates a new empty TriggerBag. Takes an old TriggerBag and makes it empty. Allocates a copy of triggerBag. The copy shares featureDatas with the original but has freshly allocated LIST structures. SceneBag AlignBag Add a line making an angle "degrees" with horizontal, passing through point. Adds the new feature to alignBag and returns it for the caller's inspection. Adds the new feature to alignBag and returns it for the caller's inspection. Adds the new feature to alignBag and returns it for the caller's inspection. Adds the new feature to alignBag and returns it for the caller's inspection. Filling all of the Bags at Once Like SetStaticBags, but leave the scene bag alone. repaintForeground is TRUE if the current foreground bitmap must be changed for dynamic use. augmentForeground is TRUE if this change is strictly a matter of adding more lines. The Filter Routines shown in the figure as boxes and ovals Incremental Addition versions of the Filter Routines shown in the figure as boxes and ovals. Just like AddAnchorTrigger except it returns the feature in addition to adding it to the triggerBag. Add slice to triggerBag and return the new feature which represents slice. Returns those part of slice that are in sliceD but are not moving. someRemoved is TRUE if stationary is a subset of sliceD. IncrementalFilterSlice: PROC [sliceD: SliceDescriptor, filterLists: FilterLists, hideAlignments: BOOL, alignBag: AlignBag] RETURNS [alignObjects: LIST OF FeatureData]; Incremental Deletion versions of the Filter Routines shown in the figure as boxes and ovals. RemoveHotSlice: PROC [sliceD: SliceDescriptor, triggerBag: TriggerBag]; Removes all alignment objects that were triggered (only) by this slice. Removes mention of this slice from those alignment objects that are trigger by other triggers as well. Drawing Alignment Objects Draws all objects in the object bag regardless of how they have been marked. Ruthlessly destroy the various filter bags so the Cedar gargbage collector can sweep up. Wizards only. �Ê¡˜code™ šÏnœ«™³Kšœ'™'Kšœ!™!—K™+—K˜šÏk ˜ Jšœ[˜[—K˜Kš�œžœž œž˜"˜Kšœ žœ˜+Kšœžœ˜%Kšœ žœ ˜1Kšœ žœ˜)Kšœžœ˜'Kšœžœ˜Kšœžœ˜!Kšœžœ˜!Kšœžœ!˜5Kšœ žœ˜'Kšœžœ˜!Kšœžœ ˜5Kšœ žœ˜+Kšœžœ˜Kšœ žœ˜%Kšœ žœžœ˜%Kšœžœ"˜5Kšœžœ˜#—K˜š œžœžœ‡žœ,žœžœ˜äKšœú™úI artworkFigure• Interpressá+Interpress/Xerox/3.0  f j k j¡¥“ļ= ¤ ¨  ™ÄApC¡£ r jbÙ ¢ ¨¡¡¨ r jª ¤èI ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁHot Scene Objects– k é r jª ¤u  ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“Á Heuristics– k é r j¬ ¤ÄOò ¢ ¥ ¨ÅxeroxÅ tiogafontsÅMath12£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁU– k é r j¢¯“¢°“¡¡¨eBeX¡¹¢¯“¢°“¡¡¨eXÆX¡¹¢¯“¢°“¡¡¨ÆXÆB¡¹¢¯“¢°“¡¡¨ÆBeB¡¹ k é r jª ¤jÄS ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“Á Scene Objects– k é r j¢¯“¢°“¡¡¨âBâX¡¹¢¯“¢°“¡¡¨âX_X¡¹¢¯“¢°“¡¡¨_X_B¡¹¢¯“¢°“¡¡¨_BâB¡¹ k é¢¯“¢°“¢·“¡¡¨ÄˆµÄ¹i¨™Ä![;Ä_�D—Ä@ŽoĨ �Äq•¾Ä‚Ý|Ä#‡;Ĉ#ƒ¡’ÄxwÅÄFSFÄ>ÝoÄL3OÄ&±EŒ¡’Ä[!ÄccpÄL=„Ä[kÄZÀ•ÄPña¡’Ä#í8ÄR‰eÄÃ*Ä£KÇÄ*–;Ä1�;¡’ÄμÄGXSÄYøqÄÀQÖÄIU]Äe½m¡’Ä@¸SÄOËRÄ. AÄOŽOÄQ qÄ&Ÿ%¡’Ĉù¿Ä€ãjÄ@¡XÄ ÆùĈµÄ¹i¨¡’¡¸ r jª ¤Ä)Œ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁTrigger– k é r jª ¤Ä?~ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁBag– k é¢¯“¢°“¢·“¡¡¨p™e#p.¡“±Ž¼#±¡“pŽ¡¸ r j¡¡¨¢¯“Ä;÷™Ä;èÄYèÄÙ J¡”ÄwèÄw÷ÄÙ J¡”ÄwÄYÄÙ J¡”Ä;Ä;÷ÄÙ J¡”¡¸ k é¢¯“¢°“¢·“¡¡¨ÄB™ÄY—˜¢¯“¢°“¢·“¡¡¨ÄëB™.�˜¢¯“¢°“¢·“¡¡¨Äá™ÄY—˜¢¯“¢°“¢·“¡¡¨Äe7ÄtyC™Äam;ĸ——ĹoăJMÄ?é¾ÄÌ�yÄc™;Ä÷Þ-¡’ĉ~QÄ9a#ÄZà7Ä1x¿ÄqŸEÄ¡’Ä61!Ä¥êmÄÛ•„ĶÆ{Äi>ÄV¯;¡’Ä`½8ÄLô5ÄJ_*Ä!yÄj¨;Ä­év¡’Ä,_Ä.SÄÔ®qÄe5BÄ®S]Äcøã¡’ÄšÚSÄAì)Äu6AÄƨyÄÔÅvÄ|7J¡’ÄXc¿Ä[±6Äž_WÄo·Äe7ÄtyC¡’¡¸ r jª ¤ÄUÄ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁTrigger– k é r jª ¤ÄkÄ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁBag– k é¢¯“¢°“¢·“¡¡¨Mó™BþM ¡“uŽ€þuó¡“MŽ¡¸ r jª ¤Pĵ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁFilters– k é¢¯“¢°“¢·“¡¡¨Ä Ç™ÄõÒÄ Ý¡“Ä£ŽÄ¹Òģǡ“Ä Ž¡¸ r jª ¤ÄÏ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“Á Not Moving– k é¢¯“¢°“¢·“¡¡¨ÄYè™ÄWÝ—˜¢¯“¢°“¢·“¡¡¨ÄWǙĻW«�˜¢¯“¢°“¢·“¡¡¨œÄ¹i¨™ÄtßAÄ_�D—Äe™8Ĩ �ĆlíÄ‚Ý|ćÇJĈ#ƒ¡’ÄŠPKÄFSFÄÊ ÄL3OÄ>Å#Œ¡’ÄT/ÄccpÄÊ¿pÄ[kļ“ÄPña¡’Ä®M]ÄR‰eÄxÍ?Ä%¿.Ä‚óCÄ1�;¡’ĉ±EÄGXSĘ*KÄÀQÖÄw@;Äe½m¡’Ä’èIÄOËRÄF3$ÄOŽOÄà<sÄ&Ÿ%¡’Ä&ÿÄ€ãjÄN¯(Ä ÆùœÄ¹i¨¡’¡¸ r jª ¤ÄA #Ä4@; ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁBag– k é r jª ¤wÄá ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁAlign– k é r j¢¯“¢°“¡¡¨ØBØX¡¹¢¯“¢°“¡¡¨ØX9X¡¹¢¯“¢°“¡¡¨9X9B¡¹¢¯“¢°“¡¡¨9BØB¡¹ k é r jª ¤ÝÄS ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“Á Scene Objects– k é¢¯“¢°“¢·“¡¡¨âÇ™×ÒâÝ¡“.Ž9Ò.Ç¡“⎡¸ r jª ¤çÏ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“Á Not Moving– k é¢¯“¢°“¢·“¡¡¨!Ĺi¨™ÄU¤AÄ_�D—ÄJ±8Ĩ �Ä™�íÄ‚Ý|Äm´QĈ#ƒ¡’ÄfGKÄFSFÄ� ÄL3OÄ-ô#Œ¡’Ä=/ÄccpÄ”ïpÄ[kÄÈ“ÄPña¡’Ä�ž]ÄR‰eÄZˆ?Ä%¿.ÄbÂCÄ1�;¡’ÄhŠEÄGXSÄt!KÄÀQÖÄZç;Äe½m¡’ÄoÕIÄOËRÄ4ç$ÄOŽOĨûsÄ&Ÿ%¡’ÄcÄ€ãjÄ;w(Ä Æù!Ĺi¨¡’¡¸ r jª ¤ÄV¤?~ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁBag– k é¢¯“¢°“¢·“¡¡¨ÄÑB™Ý—˜¢¯“¢°“¢·“¡¡¨Ç™Ä$!�˜ r jª ¤ûÄÙ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁScene– k é r j¢¯“¢°“¡¡¨ää*¡¹¢¯“¢°“¡¡¨ä**¡¹¢¯“¢°“¡¡¨*¡¹¢¯“¢°“¡¡¨ä¡¹ k é r jª ¤éÄ÷ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁAnchor– k é¢¯“¢°“¢·“¡¡¨™ÄY—˜¢¯“¢°“¢·“¡¡¨ÃÄtyC™Ä~ÆAĸ——Än!8ăJMÄчíÄÌ�yÄ öQÄ÷Þ-¡’Ä•½KÄ9a#Äw Ä1x¿ÄD#Ä¡’Ä[=/Ä¥êmÄÛÏpĶÆ{Ä%!“ÄV¯;¡’ļx]ÄLô5Ä‚f?Ä!yÄ�(CÄ­év¡’Ä…+>Ä.SÄ£—KÄe5BÄ€=;Äcøã¡’ÄžIÄAì)ÄK¯$ÄƨyÄñÁsÄ|7J¡’Ä* Ä[±6ÄTÇ(Äo·ÃÄtyC¡’¡¸ r jª ¤Ä~‚?Ä ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁBag– k é r jª ¤�/ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁScene– k é¢¯“¢°“¢·“¡¡¨˜ó™�þ˜ ¡“ÈŽÓþÈó¡“˜Ž¡¸ r jª ¤”û ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“Á Midpoints– k é r j¬ ¤ÄÃÔ ¢ ¥ ¨ÅxeroxÅ tiogafontsÅMath12£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁU– k é r j¡¡¨¢¯“įٙįÊÄÍÊÄÙ J¡”ÄëÊÄëÙÄÙ J¡”ÄëèÄÍèÄÙ J¡”įèįÙÄÙ J¡”¡¸ k é¢¯“¢°“¢·“¡¡¨ÄO-Äs=O™ �˜¢¯“¢°“¢·“¡¡¨ÄdÜ1Ä^ÕA™ �˜¢¯“¢°“¢·“¡¡¨aó™ÄÍè—˜¢¯“¢°“¢·“¡¡¨ÄÍÊ™Ä# �˜¢¯“¢°“¢·“¡¡¨°ó™ÄÍè—˜ r jª ¤Ä#ÄÅ ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁGravity– k é r jª ¤Ä'Ä© ¢ ¥ ¨ÅXeroxÅ TiogaFontsÅ Helvetica10£¡ “Ä  ¤ ” •  —¡¡¨  Š¡²“ÁActive– k é¢¯“¢°“¢·“¡¡¨áw™k�²Žw�˜ k é k g•Artwork Interpress•Bounds:0.0 mm xmin 0.0 mm ymin 178.1528 mm xmax 88.20494 mm ymax –G91.02716 mm topLeading 91.02716 mm topIndent 1.411111 mm bottomLeading šœ=™=—Kšœ ™ K˜šœ˜Kšœ,™,—š�œžœžœ˜;Kšœ!™!—š�œžœ˜/Kšœ+™+—Kš�œžœžœžœ˜>Kš�œžœ˜,Kš �œž œžœžœžœ˜QKš�œžœ5˜LK˜Kš�œžœ$žœžœ˜^Kš�œžœžœ˜GKš�œžœ+žœ˜cš�œžœ+žœx˜ÂKšœjžœ ™z—K˜K™Kš�œžœ&˜>Kš�œžœ„˜�K™K™K™KšœÏc#˜