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 // Guy Barrand 12th March 2021 27 28 #include "G4ToolsSGQtGLES.hh" 29 30 #include "G4ToolsSGQtGLESViewer.hh" 31 32 #include "G4Qt.hh" 33 34 #include "G4UIbatch.hh" 35 36 G4ToolsSGQtGLES::G4ToolsSGQtGLES(): 37 parent 38 ("TOOLSSG_QT_GLES", 39 "TSG_QT_GLES", 40 "TOOLSSG_QT_GLES is a graphics driver based on the g4tools tools/sg scene graph logic where\n\ 41 the rendering is done with GLES and the windowing is done with Qt.", 42 parent::threeDInteractive) 43 ,fSGSession(nullptr) 44 {} 45 46 G4ToolsSGQtGLES::~G4ToolsSGQtGLES() { 47 delete fSGSession; 48 } 49 50 void G4ToolsSGQtGLES::Initialise() { 51 if(fSGSession) return; //done. 52 G4Qt* interactorManager = G4Qt::getInstance(); 53 auto* _qapp = (QApplication*)interactorManager->GetMainInteractor(); 54 if(!_qapp) { 55 G4cerr << "G4ToolsSGQtGLES::Initialise : G4Qt::GetMainInteractor() returns null." << G4endl; 56 return; 57 } 58 fSGSession = new toolx::Qt::session(G4cout,_qapp); 59 if(!fSGSession->is_valid()) { 60 G4cerr << "G4ToolsSGQtGLES::Initialise : session::is_valid() failed." << G4endl; 61 delete fSGSession; 62 fSGSession = nullptr; 63 return; 64 } 65 } 66 67 G4VSceneHandler* G4ToolsSGQtGLES::CreateSceneHandler(const G4String& a_name) { 68 G4VSceneHandler* pScene = new G4ToolsSGSceneHandler(*this, a_name); 69 return pScene; 70 } 71 72 G4VViewer* G4ToolsSGQtGLES::CreateViewer(G4VSceneHandler& a_scene,const G4String& a_name) { 73 if(!fSGSession) Initialise(); 74 if(!fSGSession) return nullptr; 75 G4VViewer* pView = new G4ToolsSGQtGLESViewer(*fSGSession,(G4ToolsSGSceneHandler&)a_scene,a_name); 76 if (pView) { 77 if (pView->GetViewId() < 0) { 78 G4cerr << "G4ToolsSGQtGLES::CreateViewer:" 79 << " ERROR flagged by negative view id in G4ToolsSGViewer creation." 80 << "\n Destroying view and returning null pointer." << G4endl; 81 delete pView; 82 pView = nullptr; 83 } 84 } 85 if (!pView) { 86 G4cerr << "G4ToolsSGQtGLES::CreateViewer: ERROR: null pointer on new G4ToolsSGViewer." << G4endl; 87 return nullptr; 88 } 89 return pView; 90 } 91 92 G4bool G4ToolsSGQtGLES::IsUISessionCompatible () const 93 { 94 // Qt windows require a Qt session. 95 G4UIsession* baseSession = G4UImanager::GetUIpointer()->GetBaseSession(); 96 if (dynamic_cast<G4UIQt*>(baseSession) != nullptr) return true; 97 return false; 98 } 99