File: SVViewerUser.mesa
Last edited by Bier on August 18, 1983 4:04 pm
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
IMPORTED TYPES
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;
LOCAL TYPES
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
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
in SVViewerUserImplA
UpdateHeader: PROC [pictureFile: Rope.ROPE, viewerToolData: ViewerToolData];
UpdateAllHeaders: 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.
DrawScene: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL];
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];
Get: PROC [parent: REF ANY, clientData: REF ANY, mouseButton: MouseButton, shift, control: BOOL];
ConfirmGet: 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
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];
TextPrompt: 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.