Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/Qt3D/src/G4Qt3DUtils.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /visualization/Qt3D/src/G4Qt3DUtils.cc (Version 11.3.0) and /visualization/Qt3D/src/G4Qt3DUtils.cc (Version 11.0.p2)


  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 // John Allison, 18th July 2020                    26 // John Allison, 18th July 2020
 27                                                    27 
 28 #include "G4Qt3DUtils.hh"                          28 #include "G4Qt3DUtils.hh"
 29                                                    29 
 30 #include "G4Qt3DQEntity.hh"                        30 #include "G4Qt3DQEntity.hh"
 31 #include "G4PhysicalVolumeModel.hh"                31 #include "G4PhysicalVolumeModel.hh"
 32                                                    32 
 33 Qt3DCore::QTransform* G4Qt3DUtils::CreateQTran     33 Qt3DCore::QTransform* G4Qt3DUtils::CreateQTransformFrom(const G4Transform3D& g)
 34 {                                                  34 {
 35   auto* q = new Qt3DCore::QTransform;              35   auto* q = new Qt3DCore::QTransform;
 36   q->setMatrix                                     36   q->setMatrix
 37   (QMatrix4x4                                      37   (QMatrix4x4
 38   (g.xx(),g.xy(),g.xz(),g.dx(),                    38   (g.xx(),g.xy(),g.xz(),g.dx(),
 39    g.yx(),g.yy(),g.yz(),g.dy(),                    39    g.yx(),g.yy(),g.yz(),g.dy(),
 40    g.zx(),g.zy(),g.zz(),g.dz(),                    40    g.zx(),g.zy(),g.zz(),g.dz(),
 41    0,0,0,1));                                      41    0,0,0,1));
 42   q->setObjectName("transform");                   42   q->setObjectName("transform");
 43   return q;                                        43   return q;
 44 }                                                  44 }
 45                                                    45 
 46 QColor G4Qt3DUtils::ConvertToQColor(const G4Co     46 QColor G4Qt3DUtils::ConvertToQColor(const G4Colour& c) {
 47   QColor qColor;                                   47   QColor qColor;
 48   qColor.setRgbF(c.GetRed(),c.GetGreen(),c.Get     48   qColor.setRgbF(c.GetRed(),c.GetGreen(),c.GetBlue(),c.GetAlpha());
 49   return qColor;                                   49   return qColor;
 50 }                                                  50 }
 51                                                    51 
 52 QVector3D G4Qt3DUtils::ConvertToQVector3D(cons     52 QVector3D G4Qt3DUtils::ConvertToQVector3D(const G4ThreeVector& v) {
 53   return QVector3D(v.x(),v.y(),v.z());             53   return QVector3D(v.x(),v.y(),v.z());
 54 }                                                  54 }
 55                                                    55 
 56 // https://stackoverflow.com/questions/4575927     56 // https://stackoverflow.com/questions/45759274/how-can-i-delete-all-nodes-recursively-in-the-root-entity-of-qt3dwindow
 57 void G4Qt3DUtils::delete_entity_recursively(Qt     57 void G4Qt3DUtils::delete_entity_recursively(Qt3DCore::QNode *node){
 58 #ifdef G4QT3DDEBUG                                 58 #ifdef G4QT3DDEBUG
 59   G4Qt3DUtils::LogFile << "node " << node->obj     59   G4Qt3DUtils::LogFile << "node " << node->objectName().toStdString() << std::endl;
 60 #endif                                             60 #endif
 61   Qt3DCore::QEntity* entity = dynamic_cast<Qt3     61   Qt3DCore::QEntity* entity = dynamic_cast<Qt3DCore::QEntity*>(node);
 62   if(entity == nullptr){                           62   if(entity == nullptr){
 63 #ifdef G4QT3DDEBUG                                 63 #ifdef G4QT3DDEBUG
 64     G4String name = node->objectName().toStdSt     64     G4String name = node->objectName().toStdString();
 65     if (name == "") name = "X";                    65     if (name == "") name = "X";
 66     G4Qt3DUtils::LogFile << (void*)node << ":      66     G4Qt3DUtils::LogFile << (void*)node << ": "
 67     << "Deleting non-entity node " << name <<      67     << "Deleting non-entity node " << name << std::endl;
 68 #endif                                             68 #endif
 69     delete node;                                   69     delete node;
 70     node = nullptr;                                70     node = nullptr;
 71     return;                                        71     return;
 72   }                                                72   }
 73   for (auto component: entity->components()) {     73   for (auto component: entity->components()) {
 74 #ifdef G4QT3DDEBUG                                 74 #ifdef G4QT3DDEBUG
 75     G4String name = component->objectName().to     75     G4String name = component->objectName().toStdString();
 76     if (name == "") name = "X";                    76     if (name == "") name = "X";
 77     G4Qt3DUtils::LogFile << (void*)node << ":      77     G4Qt3DUtils::LogFile << (void*)node << ": " << "Deleting component " << name
 78     << " of " << entity->objectName().toStdStr     78     << " of " << entity->objectName().toStdString() << std::endl;
 79 #endif                                             79 #endif
 80     entity->removeComponent(component);            80     entity->removeComponent(component);
 81     delete component;                              81     delete component;
 82     component = nullptr;                           82     component = nullptr;
 83   }                                                83   }
 84   for (auto child_node: entity->childNodes())      84   for (auto child_node: entity->childNodes()) {
 85     G4String name = child_node->objectName().t     85     G4String name = child_node->objectName().toStdString();
 86     if (name == "") name = "X";                    86     if (name == "") name = "X";
 87 #ifdef G4QT3DDEBUG                                 87 #ifdef G4QT3DDEBUG
 88     G4Qt3DUtils::LogFile << (void*)child_node      88     G4Qt3DUtils::LogFile << (void*)child_node << ": " << "Child node " << name
 89     << " of " << entity->objectName().toStdStr     89     << " of " << entity->objectName().toStdString() << std::endl;
 90 #endif                                             90 #endif
 91     delete_entity_recursively(child_node);         91     delete_entity_recursively(child_node);
 92   }                                                92   }
 93   G4String name = entity->objectName().toStdSt     93   G4String name = entity->objectName().toStdString();
 94   if (name == "") name = "X";                      94   if (name == "") name = "X";
 95 #ifdef G4QT3DDEBUG                                 95 #ifdef G4QT3DDEBUG
 96   G4Qt3DUtils::LogFile << (void*)entity << ":      96   G4Qt3DUtils::LogFile << (void*)entity << ": " << "Deleting entity " << name << std::endl;
 97 #endif                                             97 #endif
 98   delete entity;                                   98   delete entity;
 99   entity = nullptr;                                99   entity = nullptr;
100 }                                                 100 }
101                                                   101 
102 void G4Qt3DUtils::delete_components_and_childr    102 void G4Qt3DUtils::delete_components_and_children_of_entity_recursively(Qt3DCore::QNode *node){
103   Qt3DCore::QEntity* entity = dynamic_cast<Qt3    103   Qt3DCore::QEntity* entity = dynamic_cast<Qt3DCore::QEntity*>(node);
104   if(entity == nullptr){                          104   if(entity == nullptr){
105 #ifdef G4QT3DDEBUG                                105 #ifdef G4QT3DDEBUG
106     G4String name = node->objectName().toStdSt    106     G4String name = node->objectName().toStdString();
107     if (name == "") name = "X";                   107     if (name == "") name = "X";
108     G4Qt3DUtils::LogFile << (void*)node << ":     108     G4Qt3DUtils::LogFile << (void*)node << ": " << "Found non-entity node " << name << std::endl;
109 #endif                                            109 #endif
110     return;                                       110     return;
111   }                                               111   }
112   for (auto component: entity->components()){     112   for (auto component: entity->components()){
113 #ifdef G4QT3DDEBUG                                113 #ifdef G4QT3DDEBUG
114     G4String name = component->objectName().to    114     G4String name = component->objectName().toStdString();
115     if (name == "") name = "X";                   115     if (name == "") name = "X";
116     G4Qt3DUtils::LogFile << (void*)entity << "    116     G4Qt3DUtils::LogFile << (void*)entity << ": " << "Deleting component " << name
117     << " of " << entity->objectName().toStdStr    117     << " of " << entity->objectName().toStdString() << std::endl;
118 #endif                                            118 #endif
119     entity->removeComponent(component);           119     entity->removeComponent(component);
120     delete(component);                            120     delete(component);
121     component = nullptr;                          121     component = nullptr;
122   }                                               122   }
123   auto child_nodes = entity->childNodes();        123   auto child_nodes = entity->childNodes();
124   for (auto child_node: child_nodes) {            124   for (auto child_node: child_nodes) {
125     G4String name = child_node->objectName().t    125     G4String name = child_node->objectName().toStdString();
126     if (name == "") name = "X";                   126     if (name == "") name = "X";
127 #ifdef G4QT3DDEBUG                                127 #ifdef G4QT3DDEBUG
128     G4Qt3DUtils::LogFile << (void*)child_node     128     G4Qt3DUtils::LogFile << (void*)child_node << ": " << "Child node " << name
129     << " of " << entity->objectName().toStdStr    129     << " of " << entity->objectName().toStdString() << std::endl;
130 #endif                                            130 #endif
131     delete_entity_recursively(child_node);        131     delete_entity_recursively(child_node);
132   }                                               132   }
133   G4String name = entity->objectName().toStdSt    133   G4String name = entity->objectName().toStdString();
134   if (name == "") name = "X";                     134   if (name == "") name = "X";
135 #ifdef G4QT3DDEBUG                                135 #ifdef G4QT3DDEBUG
136   G4Qt3DUtils::LogFile << (void*)entity << ":     136   G4Qt3DUtils::LogFile << (void*)entity << ": " << "Clearing child nodes of " << name << std::endl;
137 #endif                                            137 #endif
138   child_nodes.clear();                            138   child_nodes.clear();
139 }                                                 139 }
140                                                   140 
141 #ifdef G4QT3DDEBUG                                141 #ifdef G4QT3DDEBUG
142 std::ofstream G4Qt3DUtils::LogFile("LogFile.tx    142 std::ofstream G4Qt3DUtils::LogFile("LogFile.txt");
143 void G4Qt3DUtils::PrintQObjectTree                143 void G4Qt3DUtils::PrintQObjectTree
144  (const QObject* node,                            144  (const QObject* node,
145   const G4String& where)                          145   const G4String& where)
146 {                                                 146 {
147   auto& logFile = G4Qt3DUtils::LogFile;           147   auto& logFile = G4Qt3DUtils::LogFile;
148   if (where.length()) logFile << "\n===== QObj    148   if (where.length()) logFile << "\n===== QObjectTree at " << where << std::endl;
149   static G4int iDep = -1;                         149   static G4int iDep = -1;
150   ++iDep;                                         150   ++iDep;
151   G4String nodeName = node->objectName().toStd    151   G4String nodeName = node->objectName().toStdString();
152   if (nodeName == "") nodeName = "X";             152   if (nodeName == "") nodeName = "X";
153   for (G4int i = 0; i < iDep; ++i) logFile <<     153   for (G4int i = 0; i < iDep; ++i) logFile << "  ";
154   logFile << (void*)node << ": "                  154   logFile << (void*)node << ": "
155   << "Node at depth " << iDep << ": " << nodeN    155   << "Node at depth " << iDep << ": " << nodeName << ": "
156   << "thread: " << node->thread() << ": "         156   << "thread: " << node->thread() << ": "
157   << "parent: " << node->parent() << ": ";        157   << "parent: " << node->parent() << ": ";
158   const auto* g4node = dynamic_cast<const G4Qt    158   const auto* g4node = dynamic_cast<const G4Qt3DQEntity*>(node);
159   if (g4node) {                                   159   if (g4node) {
160     logFile << g4node->GetPVNodeID() << std::e    160     logFile << g4node->GetPVNodeID() << std::endl;
161   } else {                                        161   } else {
162     logFile << typeid(node).name() << std::end    162     logFile << typeid(node).name() << std::endl;
163   }                                               163   }
164   if (g4node) {                                   164   if (g4node) {
165     for (const auto& component: g4node->compon    165     for (const auto& component: g4node->components()) {
166       G4String name = component->objectName().    166       G4String name = component->objectName().toStdString();
167       if (name == "") name = "X";                 167       if (name == "") name = "X";
168       for (G4int i = 0; i < iDep; ++i) logFile    168       for (G4int i = 0; i < iDep; ++i) logFile << "  ";
169       logFile << (void*)component << ": "<< "C    169       logFile << (void*)component << ": "<< "Component at depth " << iDep << " "
170       << name << " of " << nodeName << std::en    170       << name << " of " << nodeName << std::endl;
171     }                                             171     }
172   }                                               172   }
173   for (const auto& child: node->children()) {     173   for (const auto& child: node->children()) {
174     PrintQObjectTree(child);                      174     PrintQObjectTree(child);
175   }                                               175   }
176   --iDep;                                         176   --iDep;
177   if (where.length()) logFile << "===== End: Q    177   if (where.length()) logFile << "===== End: QObjectTree at " << where << std::endl;
178   return;                                         178   return;
179 }                                                 179 }
180 #endif                                            180 #endif
181                                                   181