Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // John Allison 6th October 2020 27 28 #ifndef G4TOOLSSGSCENEHANDLER_HH 29 #define G4TOOLSSGSCENEHANDLER_HH 30 31 #include "G4VSceneHandler.hh" 32 33 #include "G4VVisCommand.hh" 34 35 #include <vector> 36 37 #include <tools/sg/separator> 38 39 namespace tools {namespace sg {class base_freetype;}} 40 namespace tools {namespace sg {class plots;}} 41 42 class G4ToolsSGNode; 43 44 class G4ToolsSGSceneHandler: public G4VSceneHandler { 45 typedef G4VSceneHandler parent; 46 public: 47 virtual void AddPrimitive(const G4Polyline&); 48 virtual void AddPrimitive(const G4Text&); 49 virtual void AddPrimitive(const G4Circle&); 50 virtual void AddPrimitive(const G4Square&); 51 virtual void AddPrimitive(const G4Polymarker&); 52 virtual void AddPrimitive(const G4Polyhedron&); 53 virtual void AddPrimitive(const G4Plotter&); 54 55 using G4VSceneHandler::AddCompound; 56 virtual void AddCompound(const G4Mesh&); 57 58 virtual void ClearStore (); 59 virtual void ClearTransientStore (); 60 61 G4ToolsSGSceneHandler(G4VGraphicsSystem& system,const G4String& name); 62 virtual ~G4ToolsSGSceneHandler(); 63 64 tools::sg::separator& GetTransient2DObjects() {return fpTransient2DObjects;} 65 tools::sg::separator& GetPersistent2DObjects() {return fpPersistent2DObjects;} 66 tools::sg::separator& GetTransient3DObjects() {return fpTransient3DObjects;} 67 tools::sg::separator& GetPersistent3DObjects() {return fpPersistent3DObjects;} 68 69 void TouchPlotters(tools::sg::node&); 70 71 protected: 72 G4ToolsSGSceneHandler(const G4ToolsSGSceneHandler&); 73 G4ToolsSGSceneHandler& operator=(const G4ToolsSGSceneHandler&){return *this;} 74 75 protected: 76 void CreateSG(); 77 void EstablishBaseNodes(); 78 tools::sg::separator* GetOrCreateNode(); // For next solid or primitive 79 80 void SetPlotterHistograms(tools::sg::plots&); 81 82 static G4int fSceneIdCount; 83 84 tools::sg::separator fpTransient2DObjects; 85 tools::sg::separator fpPersistent2DObjects; 86 87 tools::sg::separator fpTransient3DObjects; 88 tools::sg::separator fpPersistent3DObjects; 89 90 std::vector<G4ToolsSGNode*> fpPhysicalVolumeObjects; // Multiple worlds 91 92 tools::sg::base_freetype* fFreetypeNode; 93 94 using Region_h1 = std::pair<unsigned int,int>; 95 using Region_h2 = std::pair<unsigned int,int>; 96 std::vector<Region_h1> fRegionH1s; 97 std::vector<Region_h2> fRegionH2s; 98 99 class Messenger: public G4VVisCommand { 100 public: 101 static void Create() {static Messenger s_messenger;} 102 virtual void SetNewValue(G4UIcommand*,G4String); 103 private: 104 Messenger() { 105 ////////////////////////////////////////////////////////// 106 ////////////////////////////////////////////////////////// 107 print_plotter_params = new G4UIcommand("/vis/tsg/plotter/printParameters", this); 108 print_plotter_params->SetGuidance("Print available tools::sg::plotter parameters."); 109 } 110 virtual ~Messenger() { 111 delete print_plotter_params; 112 } 113 G4UIcommand* print_plotter_params; 114 }; 115 116 }; 117 118 #endif 119