Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // Guy Barrand 12th March 2021 26 // Guy Barrand 12th March 2021 27 27 28 #include "G4ToolsSGX11GLES.hh" 28 #include "G4ToolsSGX11GLES.hh" 29 29 30 #include "G4ToolsSGViewer.hh" 30 #include "G4ToolsSGViewer.hh" 31 31 32 #include <toolx/X11/sg_viewer> << 32 #include <tools/X11/sg_viewer> 33 33 34 G4ToolsSGX11GLES::G4ToolsSGX11GLES(): 34 G4ToolsSGX11GLES::G4ToolsSGX11GLES(): 35 parent 35 parent 36 ("TOOLSSG_X11_GLES", 36 ("TOOLSSG_X11_GLES", 37 "TSG_X11_GLES", 37 "TSG_X11_GLES", 38 "TOOLSSG_X11_GLES is a graphics driver based 38 "TOOLSSG_X11_GLES is a graphics driver based on the g4tools tools/sg scene graph logic where\n\ 39 the rendering is done with GLES and the windo 39 the rendering is done with GLES and the windowing is done with X11.", 40 parent::threeDInteractive) 40 parent::threeDInteractive) 41 ,fSGSession(nullptr) 41 ,fSGSession(nullptr) 42 {} 42 {} 43 43 44 G4ToolsSGX11GLES::~G4ToolsSGX11GLES() { 44 G4ToolsSGX11GLES::~G4ToolsSGX11GLES() { 45 delete fSGSession; 45 delete fSGSession; 46 } 46 } 47 47 48 void G4ToolsSGX11GLES::Initialise() { 48 void G4ToolsSGX11GLES::Initialise() { 49 if(fSGSession) return; //done. 49 if(fSGSession) return; //done. 50 fSGSession = new toolx::X11::session(G4cout) << 50 fSGSession = new tools::X11::session(G4cout); 51 if(!fSGSession->is_valid()) { 51 if(!fSGSession->is_valid()) { 52 G4cerr << "G4ToolsSGX11GLES::Initialise : 52 G4cerr << "G4ToolsSGX11GLES::Initialise : session::is_valid() failed." << G4endl; 53 delete fSGSession; 53 delete fSGSession; 54 fSGSession = nullptr; 54 fSGSession = nullptr; 55 return; 55 return; 56 } 56 } 57 } 57 } 58 58 59 G4VSceneHandler* G4ToolsSGX11GLES::CreateScene 59 G4VSceneHandler* G4ToolsSGX11GLES::CreateSceneHandler(const G4String& a_name) { 60 G4VSceneHandler* pScene = new G4ToolsSGScene 60 G4VSceneHandler* pScene = new G4ToolsSGSceneHandler(*this,a_name); 61 return pScene; 61 return pScene; 62 } 62 } 63 63 64 G4VViewer* G4ToolsSGX11GLES::CreateViewer(G4VS 64 G4VViewer* G4ToolsSGX11GLES::CreateViewer(G4VSceneHandler& a_scene,const G4String& a_name) { 65 if(!fSGSession) Initialise(); 65 if(!fSGSession) Initialise(); 66 if(!fSGSession) return nullptr; 66 if(!fSGSession) return nullptr; 67 G4VViewer* pView = 67 G4VViewer* pView = 68 new G4ToolsSGViewer<toolx::X11::session,to << 68 new G4ToolsSGViewer<tools::X11::session,tools::X11::sg_viewer> 69 (*fSGSession,(G4ToolsSGSceneHandler&)a_sce 69 (*fSGSession,(G4ToolsSGSceneHandler&)a_scene,a_name); 70 if (pView) { 70 if (pView) { 71 if (pView->GetViewId() < 0) { 71 if (pView->GetViewId() < 0) { 72 G4cerr << 72 G4cerr << 73 "G4ToolsSGX11GLES::CreateViewer: ERROR f 73 "G4ToolsSGX11GLES::CreateViewer: ERROR flagged by negative" 74 " view id in G4ToolsSGViewer creation." 74 " view id in G4ToolsSGViewer creation." 75 "\n Destroying view and returning null p 75 "\n Destroying view and returning null pointer." 76 << G4endl; 76 << G4endl; 77 delete pView; 77 delete pView; 78 pView = nullptr; 78 pView = nullptr; 79 } 79 } 80 } 80 } 81 if (!pView) { 81 if (!pView) { 82 G4cerr << 82 G4cerr << 83 "G4ToolsSGX11GLES::CreateViewer: ERROR: nu 83 "G4ToolsSGX11GLES::CreateViewer: ERROR: null pointer on new G4ToolsSGViewer." 84 << G4endl; 84 << G4endl; 85 } 85 } 86 return pView; 86 return pView; >> 87 } >> 88 >> 89 G4bool G4ToolsSGX11GLES::IsUISessionCompatible () const >> 90 { >> 91 G4bool isCompatible = false; >> 92 // G4UImanager* ui = G4UImanager::GetUIpointer(); >> 93 // G4UIsession* session = ui->GetSession(); >> 94 // >> 95 // // If session is a batch session, it may be: >> 96 // // a) this is a batch job (the user has not instantiated any UI session); >> 97 // // b) we are currently processing a UI command, in which case the UI >> 98 // // manager creates a temporary batch session and to find out if there is >> 99 // // a genuine UI session that the user has instantiated we must drill >> 100 // // down through previous sessions to a possible non-batch session. >> 101 // while (G4UIbatch* batch = dynamic_cast<G4UIbatch*>(session)) { >> 102 // session = batch->GetPreviousSession(); >> 103 // } >> 104 // >> 105 // // Qt windows are only appropriate in a Qt session. >> 106 // if (session) { >> 107 // // If non-zero, this is the originating non-batch session >> 108 // // The user has instantiated a UI session... >> 109 // if (dynamic_cast<G4UIQt*>(session)) { >> 110 // // ...and it's a G4UIQt session, which is OK. >> 111 isCompatible = true; >> 112 // } >> 113 // } >> 114 return isCompatible; 87 } 115 } 88 116