// This code implementation is the intellectual property of // the GEANT4 collaboration. // // By copying, distributing or modifying the Program (or any work // based on the Program) you indicate your acceptance of this statement, // and all its terms. // // $Id: G4VisManagerRegisterMessengers.cc,v 1.11 2000/01/11 17:22:32 johna Exp $ // GEANT4 tag $Name: geant4-01-01 $ // // // G4VisManager::RegisterMessengers - John Allison 30/July/1998. #include "G4VisManager.hh" #include "G4VVisCommand.hh" #include "G4VisCommandsScene.hh" #include "G4VisCommandsSceneAdd.hh" #include "G4VisCommandsSceneInclude.hh" #include "G4VisCommandsSceneHandler.hh" #include "G4VisCommandsViewer.hh" // OLD STYLE!! #include "G4VisManMessenger.hh" #include "G4VisCommandTemplates.hh" #include "G4VisCommandsCamera.hh" #include "G4VisCommandsClear.hh" #include "G4VisCommandsCopy.hh" #include "G4VisCommandsCreateScene.hh" #include "G4VisCommandsCreateView.hh" #include "G4VisCommandsDelete.hh" #include "G4VisCommandsDraw.hh" #include "G4VisCommandsLights.hh" #include "G4VisCommandsPrint.hh" #include "G4VisCommandsRefresh.hh" #include "G4VisCommandsSet.hh" #include "G4VisCommandsShow.hh" #include "G4ios.hh" #include void G4VisManager::RegisterMessengers () { /****************************************************************** (Extract for working note.) Introduction ============ This note defines the concepts of scene, scene handler and viewers. Scenes ====== We introduce the concept of a graphics-system-independent scene, which is a list of visualizable objects, such as detector components (G4PhysicalVolumeModels), hits, trajectories. The G4VisManager manages a list of scenes. * means "not implemented yet". /vis/scene/create [] /vis/scene/list [-l] [] /vis/scene/select [] * /vis/scene/edit /vis/scene/remove /vis/scene/add/ghosts [] * /vis/scene/add/ghost [] [] * [] [] /vis/scene/add/logicalVolume [] /vis/scene/add/volume [] [] [] /vis/scene/include/hits [] (argument not impl'd yet.) /vis/scene/include/trajectories [] (do.) * /vis/scene/include/transientObjects * /vis/scene/set/hitOption accumulate|byEvent * /vis/scene/set/notifyOption immediate|delayed * /vis/scene/set/modelingStyle [] /vis/scene/notifyHandlers Scene Handlers ============== A scene handler is a graphics-system-specific thing that turns a scene into something that the graphics system can understand. The commands would look something like: /vis/sceneHandler/create [] [] /vis/sceneHandler/attach [] /vis/sceneHandler/list /vis/sceneHandler/select [] /vis/sceneHandler/remove * /vis/sceneHandler/processScene * /vis/sceneHandler/notifyEndOfProcessing Viewers ======= A viewer opens windows and draws to the screen, hardcopy, etc. It can be dumb (a non-interactive window) or intelligent (respond to mouse clicks, spawn other windows, change viewpoint, etc.). /vis/viewer/create [] [] /vis/viewer/list /vis/viewer/select [] /vis/viewer/refresh [] /vis/viewer/remove * /vis/viewer/set/style wireframe|surface|logical * /vis/viewer/set/viewpoint * /vis/viewer/set/notifyOption immediate|delayed * /vis/viewer/notifyHandler * /vis/viewer/clone /vis/viewer/show [] /vis/viewer/update - synonym for /vis/viewer/show. Global Commands =============== * /vis/copy/sceneAndView Compound Commands ================= * /vis/create/view OGLSXM would be /vis/scene/create /vis/sceneHandler/create $1 /vis/sceneHandler/attach /vis/viewer/create and * /vis/draw Calorimiter would be /vis/scene/add/volume $1 /vis/scene/notifyHandlers /vis/viewer/show or some such. ******************************************************************/ // Instantiate individual messengers/commands (usually one command // per messenger). //A The GEANT4 commands available with the GEANT4 Visualization //A System. // Introduction //I The GEANT4 Visualization System consists of a Visualization //I Manager and a Visualization Interface. The problem is to design //I a set of commands which offer the GEANT4 user good functionality //I and, at the same time, maximally exploit the power of modern //I graphics systems. The chief concept is the scene, a //I graphics-system-independent list of visualizable GEANT4 objects, //I which can be rendered to any graphics system in a variety of //I ways. If the graphics system has its own graphical database, //I this is used. G4VVisCommand::SetVisManager (this); G4UIcommand* command; command = new G4UIdirectory ("/vis/"); command -> SetGuidance ("Visualization commands."); //S \subsection {Scenes} //S //S A GEANT4 scene is a set of visualizable objects which can be created, //S edited and copied independent of any graphics system. command = new G4UIdirectory ("/vis/scene/"); command -> SetGuidance ("Operations on Geant4 scenes."); fMessengerList.append (new G4VisCommandSceneCreate); // fMessengerList.append (new G4VisCommandSceneEdit); fMessengerList.append (new G4VisCommandSceneList); fMessengerList.append (new G4VisCommandSceneNotifyHandlers); fMessengerList.append (new G4VisCommandSceneSelect); fMessengerList.append (new G4VisCommandSceneRemove); command = new G4UIdirectory ("/vis/scene/add/"); command -> SetGuidance ("Add model to current scene."); fMessengerList.append (new G4VisCommandSceneAddVolume); fMessengerList.append (new G4VisCommandSceneAddGhosts); fMessengerList.append (new G4VisCommandSceneAddLogicalVolume); command = new G4UIdirectory ("/vis/scene/include/"); command -> SetGuidance ("Include drawing option in current scene."); fMessengerList.append (new G4VisCommandSceneIncludeHits); fMessengerList.append (new G4VisCommandSceneIncludeTrajectories); command = new G4UIdirectory ("/vis/sceneHandler/"); command -> SetGuidance ("Operations on Geant4 scene handlers."); fMessengerList.append (new G4VisCommandSceneHandlerAttach); fMessengerList.append (new G4VisCommandSceneHandlerCreate); fMessengerList.append (new G4VisCommandSceneHandlerList); fMessengerList.append (new G4VisCommandSceneHandlerSelect); fMessengerList.append (new G4VisCommandSceneHandlerRemove); command = new G4UIdirectory ("/vis/viewer/"); command -> SetGuidance ("Operations on Geant4 viewers."); fMessengerList.append (new G4VisCommandViewerCreate); fMessengerList.append (new G4VisCommandViewerList); fMessengerList.append (new G4VisCommandViewerRefresh); fMessengerList.append (new G4VisCommandViewerRemove); fMessengerList.append (new G4VisCommandViewerSelect); fMessengerList.append (new G4VisCommandViewerShow); // Camera - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); // Clear - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); // fMessengerList.append // (new G4VisSimpleCommandMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); // fMessengerList.append // (new G4VisSimpleCommandMessenger ); // Copy - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); // fMessengerList.append // (new G4VisSimpleCommandMessenger ); // fMessengerList.append // (new G4VisSimpleCommandMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); // Create Scene - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); // Create View - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); // Delete - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); // Draw - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); // Lights - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); fMessengerList.append (new G4VisButtonCommandMessenger ); // Print - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); // Refresh - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); // Set - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); fMessengerList.append (new G4VisButtonCommandMessenger ); fMessengerList.append (new G4VisButtonCommandMessenger ); fMessengerList.append (new G4VisButtonCommandMessenger ); // Show - OLD STYLE!! fMessengerList.append (new G4VisCommandDirectoryMessenger ); fMessengerList.append (new G4VisSimpleCommandMessenger ); }