-- File: SVViewerUser.mesa -- Last edited by Bier on July 7, 1983 11:12 am -- Author: Eric Bier in October, 1982 (?) -- Contents: Code to respond to button presses made in an SVViewer DIRECTORY BitMap3d, CastRays, Containers, CoordSys, CSG, CSGGraphics, DisplayList3d, Graphics, Matrix3d, Menus, Rope, SV2d, SVViewerTool, ViewerClasses; SVViewerUser: CEDAR DEFINITIONS = BEGIN Camera: TYPE = CSGGraphics.Camera; CoordSystem: TYPE = CoordSys.CoordSystem; CSGTree: TYPE = CSG.CSGTree; MouseButton: TYPE = Menus.MouseButton; Point2d: TYPE = SV2d.Point2d; Point3d: TYPE = Matrix3d.Point3d; Scene: TYPE = DisplayList3d.Scene; Viewer: TYPE = ViewerClasses.Viewer; ViewerToolData: TYPE = SVViewerTool.ViewerToolData; ViewerPictureData: TYPE = REF ViewerPictureDataObj; ViewerPictureDataObj: TYPE = RECORD [ proc: PROC [dc: Graphics.Context], scene: Scene, -- the collection of 3d objects we are looking at tree: CSGTree, -- for efficiency we will occasional cache the (viewpoint dependent) ray tracing tree camera: Camera, -- our point of view sceneStyleIndex: NAT, -- corresponds to camera.style bandsDeviceIndex: NAT, focus: Point3d, -- a point to aim the camera at baseCS: CoordSystem, -- **** mode: InteractionMode, showCoordSys: BOOL, doubleBuffer: BOOL, altDC: BitMap3d.AlternateDisplayContext, viewerToolData: ViewerToolData -- a back pointer ]; InteractionMode: TYPE = {select, cast}; DCProc: TYPE = PROC [Graphics.Context]; -- INTERWINDOW COMMUNICATION UpdateHeader: PROC [pictureFile: Rope.ROPE, viewerToolData: ViewerToolData]; NotifyOfSplit: PROC [viewer: Viewer]; UnSplit: PROC [viewerToolData: ViewerToolData]; DrawOneCSInViewer: PROC [viewerToolData: ViewerToolData, cs: CoordSystem]; -- INTERMODULE COMMUNICATION ReadTwoReals: PROC [textViewer: Viewer] RETURNS [x, y: REAL]; DrawSceneEtc: PROC [dc: Graphics.Context, viewerToolData: ViewerToolData]; -- may also draw coordinate systems, drawing planes, etc depending on the current selected modes. DrawAllCS: PROC [dc: Graphics.Context, viewerToolData: ViewerToolData]; DrawOneCS: PROC [dc: Graphics.Context, viewerToolData: ViewerToolData, cs: CoordSystem]; Painter: PROC [proc: DCProc, viewerToolData: ViewerToolData _ NIL]; -- Menu Procs DrawSceneInternal: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; -- like DrawScene but erases the screen before drawing. EraseAndDrawSceneEtc: PROC [dc: Graphics.Context, viewerToolData: ViewerToolData]; PlaceOrigin: PROC [viewer: Viewer]; ResizeBitMap: PROC [viewer: Viewer]; -- in SVViewerUserImplA Reset: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; ConfirmReset: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Save: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; ConfirmSave: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Load: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; ConfirmLoad: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Store: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; ConfirmStore: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Split: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Erase: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Empty: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; ConfirmEmpty: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; RayCast: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; ConfirmRayCast: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; RayCastProgress: CastRays.NotifyOfProgressProc; Stop: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; ARay: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; -- in SVViewerUserImplB.mesa Press: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; PressAIS: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; PressBWAIS: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; DrawBoundBoxes: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; SceneNewVersion: PROC [viewerToolData: ViewerToolData]; -- called internally NewVersion: PROC [viewer: Viewer]; -- called by SVEditUserImplA SceneOldVersion: PROC [viewerToolData: ViewerToolData]; -- called internally OldVersion: PUBLIC PROC [viewer: Viewer]; -- called by SVEditUserImplA DrawScene: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; DrawCoordSystems: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; DrawPt: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; DrawColor: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; DrawBlackAndWhite: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; CrossHairs: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; DrawDither: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Dither: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Extend: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Move: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; SetFocalLength: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; MakeBands: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; -- PROMPTS AISPrompt: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; StylePrompt: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; XYZPrompt: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; FocalLengthPrompt: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; PictureFilePrompt: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; -- ON/OFF SWITCHES DoubleBuffer: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; ShowCoordsMode: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; -- OPTIONS LISTERS BandsDevice: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; -- UTILITIES Selected: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL]; Deselected: PROC [viewerToolData: ViewerToolData]; -- Input Notify Procs SingleRay: PROC [viewerToolData: ViewerToolData, cameraPoint: Point2d]; PointAt: PROC [viewerToolData: ViewerToolData, cameraPoint: Point2d]; END.