<> <> <> <> DIRECTORY Atom, Convert, CoordSys, Imager, IO, Menus, Rope, SlackProcess, SV2d, SV3d, SVBasicTypes, SVError, SVEvent, SVInterfaceTypes, SVModelTypes, SVMouseEvent, SVRayTypes, SVSceneTypes, SVUserInput, SVWindow, TIP, TIPUser, ViewerClasses, ViewerTools; SVUserInputImplA: CEDAR PROGRAM IMPORTS Atom, Convert, CoordSys, IO, Rope, SlackProcess, SVError, SVEvent, SVMouseEvent, SVWindow, ViewerTools EXPORTS SVUserInput = BEGIN Artwork: TYPE = SVModelTypes.Artwork; ArtworkToolData: TYPE = SVInterfaceTypes.ArtworkToolData; Assembly: TYPE = SVSceneTypes.Assembly; AssemblyList: TYPE = SVSceneTypes.AssemblyList; BoundBox: TYPE = SVBasicTypes.BoundBox; BoundSphere: TYPE = SVBasicTypes.BoundSphere; Camera: TYPE = SVModelTypes.Camera; Classification: TYPE = SVRayTypes.Classification; Color: TYPE = Imager.Color; CSGTree: TYPE = SVRayTypes.CSGTree; EditToolData: TYPE = SVInterfaceTypes.EditToolData; EventProc: TYPE = SlackProcess.EventProc; FileCamera: TYPE = SVSceneTypes.FileCamera; FrameBox: TYPE = SVModelTypes.FrameBox; MasterObject: TYPE = SVSceneTypes.MasterObject; Point2d: TYPE = SV2d.Point2d; Primitive: TYPE = SVRayTypes.Primitive; Ray: TYPE = SVRayTypes.Ray; Scene: TYPE = SVSceneTypes.Scene; Selection: TYPE = SVInterfaceTypes.Selection; Shape: TYPE = SVSceneTypes.Shape; SlackHandle: TYPE = SlackProcess.SlackHandle; TrigLine: TYPE = SV2d.TrigLine; Vector3d: TYPE = SV3d.Vector3d; ViewerToolData: TYPE = SVInterfaceTypes.ViewerToolData; <> <> MenuNotify: PUBLIC PROC [clientData: REF ANY, action: LIST OF REF ANY] = { viewerToolData: ViewerToolData _ NARROW[clientData]; handle: SlackHandle _ viewerToolData.slackHandle; SlackProcess.QueueInputAction[handle, Dispatch, action, viewerToolData, NIL]; }; <> InputNotify: PUBLIC PROC [self: ViewerClasses.Viewer, input: LIST OF REF ANY] = { <> <> viewerToolData: ViewerToolData _ NARROW[self.data]; handle: SlackHandle _ viewerToolData.slackHandle; optimizeHint: REF ANY; IF input.rest# NIL THEN { WITH input.rest.first SELECT FROM atom: ATOM => { IF atom = $During THEN optimizeHint _ LIST[$During]; }; ENDCASE => optimizeHint _ NIL; }; input _ GetAnyArguments[input]; SlackProcess.QueueInputAction[handle, Dispatch, input, viewerToolData, optimizeHint]; }; GetAnyArguments: PROC [input: LIST OF REF ANY] RETURNS [newInput: LIST OF REF ANY] = { WITH input.first SELECT FROM atom: ATOM => { SELECT atom FROM $JackPivotX, $JackPivotY, $JackPivotZ, $SourcePivotX, $SourcePivotY, $SourcePivotZ, $SourceRotX, $SourceRotY, $SourceRotZ => newInput _ CheckForSelectedReal[atom, input]; ENDCASE => newInput _ input; }; ENDCASE => newInput _ input; }; Dispatch: PROC [event: LIST OF REF ANY, clientData: REF ANY] = { viewerToolData: ViewerToolData _ NARROW[clientData]; camera: Camera _ viewerToolData.camera; WITH event.first SELECT FROM mousePlace: TIP.TIPScreenCoords => { controlPoint: Point2d _ [mousePlace.mouseX, mousePlace.mouseY]; controlPoint _ CoordSys.ScreenToCamera[controlPoint, camera.screenCS]; <> SVMouseEvent.HandleMouse[event, controlPoint, viewerToolData]; }; ENDCASE => HandleMouseless[event, viewerToolData]; }; <> <> <