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 #ifndef G4VTKQTVIEWER_HH 27 #define G4VTKQTVIEWER_HH 28 29 // #define G4VTKDEBUG // Comment this out to suppress debug code. 30 31 #include "G4VViewer.hh" 32 33 class G4UIManager; 34 class G4UIQt; 35 36 class QString; 37 class QWidget; 38 class QLineEdit; 39 class QSlider; 40 class QTreeWidget; 41 class QTreeWidgetItem; 42 43 #include "G4VtkViewer.hh" 44 45 #include "QVTKOpenGLNativeWidget.h" 46 47 #include <map> 48 #include <vector> 49 50 class G4VtkQtViewer : public QVTKOpenGLNativeWidget, public G4VtkViewer 51 { 52 public: 53 using PVNodeID = G4PhysicalVolumeModel::G4PhysicalVolumeNodeID; 54 using PVPath = std::vector<PVNodeID>; 55 56 public: 57 G4VtkQtViewer(G4VSceneHandler&, const G4String& name); 58 ~G4VtkQtViewer() override; 59 void Initialise() override; 60 virtual void CreateMainWindow(QVTKOpenGLNativeWidget*, const QString&); 61 #ifdef G4MULTITHREADED 62 // For switching threads in MT mode 63 // Note: the order of calling of MovingToVisSubThread and SwitchToVisSubThread 64 // is undefined, so we have to use mutexes to ensure required information, 65 // namely the vis sub-thread address, is available before moving objects. 66 // To summarise, the order of calling is 67 // DoneWithMasterThread 68 // MovingToVisSubThread ) or ( SwitchToVisSubThread 69 // SwitchToVisSubThread ) ( MovingToVisSubThread 70 // DoneWithVisSubThread 71 // MovingToMasterThread 72 // SwitchToMasterThread 73 // Called on the master thread before starting the vis sub-thread. 74 void DoneWithMasterThread() override; 75 // Called on the master thread after starting the vis sub-thread. 76 void MovingToVisSubThread() override; 77 // Called on the vis sub-thread when waiting for events. 78 void SwitchToVisSubThread() override; 79 // Called on the vis sub-thread when all events have been processed. 80 void DoneWithVisSubThread() override; 81 // Called on the vis sub-thread when all events have been processed. 82 // virtual void MovingToMasterThread (); Not used in G4VtkQtViewer. 83 // Called on the master thread after the vis sub-thread has terminated. 84 void SwitchToMasterThread() override; 85 #endif 86 87 void FinishView() override; 88 void createSceneTreeWidget(); 89 void createSceneTreeComponent(); 90 QTreeWidgetItem* createTreeWidgetItem(const PVPath& fullPath, const QString& name, int copyNb, 91 int POIndex, const QString& logicalName, 92 Qt::CheckState state, QTreeWidgetItem* parentTreeNode, 93 const G4Colour& color); 94 void addNonPVSceneTreeElement(const G4String& model, G4Visible& visible, int currentPOIndex); 95 void addPVSceneTreeElement(const G4String& model, G4PhysicalVolumeModel* pPVModel, 96 int currentPOIndex); 97 98 QString getModelShortName(const G4String& model); 99 bool parseAndInsertInSceneTree(QTreeWidgetItem* parentItem, G4PhysicalVolumeModel* pPVModel, 100 unsigned int fullPathIndex, const QString& parentRoot, 101 unsigned int currentIndexInTreeSceneHandler, 102 int currentPVPOIndex); 103 104 void EnableClipperWidget() override; 105 106 void SetWidgetInteractor(vtkAbstractWidget* widget) override; 107 108 private: 109 G4UIQt* fUiQt; 110 QWidget* fGLWidget; 111 112 #ifdef G4MULTITHREADED 113 QThread* fQVtkContextVisSubThread; 114 QThread* fQVtkContextMainThread; 115 #endif 116 }; 117 118 #endif 119