Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // 28 // 29 // John Allison 5th April 2001 30 // A base class for a scene handler to dump ge 31 // Based on a provisional G4VTreeGraphicsScene 32 33 #include "G4VTreeSceneHandler.hh" 34 35 #include "G4VSolid.hh" 36 #include "G4PhysicalVolumeModel.hh" 37 #include "G4VPhysicalVolume.hh" 38 #include "G4LogicalVolume.hh" 39 40 #define G4warn G4cout 41 42 G4int G4VTreeSceneHandler::fSceneIdCount = 0; 43 // Counter for Tree scene handlers. 44 45 G4VTreeSceneHandler::G4VTreeSceneHandler(G4VGr 46 const G4String& name): 47 G4VSceneHandler(system, fSceneIdCount++, nam 48 fpCurrentObjectTransformation (0) 49 {} 50 51 G4VTreeSceneHandler::~G4VTreeSceneHandler () { 52 53 void G4VTreeSceneHandler::BeginModeling() { 54 G4VSceneHandler::BeginModeling(); // Requir 55 } 56 57 void G4VTreeSceneHandler::EndModeling() { 58 fDrawnLVStore.clear(); 59 G4VSceneHandler::EndModeling(); // Required 60 } 61 62 void G4VTreeSceneHandler::PreAddSolid 63 (const G4Transform3D& objectTransformation, co 64 { 65 G4VSceneHandler::PreAddSolid (objectTransfor 66 67 G4PhysicalVolumeModel* pPVModel = 68 dynamic_cast<G4PhysicalVolumeModel*>(fpMod 69 if (!pPVModel) return; // Not from a G4Phys 70 71 // This call comes from a G4PhysicalVolumeMo 72 // the path of the current drawn (non-culled 73 // drawn (non-culled) ancestors. Each node 74 // PVNodeID object, which is a physical volu 75 // is a vector of PVNodeIDs corresponding to 76 // actually selected, i.e., not culled. 77 typedef G4PhysicalVolumeModel::G4PhysicalVol 78 typedef std::vector<PVNodeID> PVPath; 79 const PVPath& drawnPVPath = pPVModel->GetDra 80 //G4int currentDepth = pPVModel->GetCurrentD 81 //G4VPhysicalVolume* pCurrentPV = pPVModel-> 82 //G4LogicalVolume* pCurrentLV = pPVModel->Ge 83 //G4Material* pCurrentMaterial = pPVModel->G 84 85 // Actually, it is enough to store the logic 86 // physical volume... 87 fDrawnLVStore.insert 88 (drawnPVPath.back().GetPhysicalVolume()->G 89 90 // Find mother. ri points to drawn mother, 91 PVPath::const_reverse_iterator ri = ++drawnP 92 if (ri != drawnPVPath.rend()) { 93 // This volume has a mother. 94 G4LogicalVolume* drawnMotherLV = 95 ri->GetPhysicalVolume()->GetLogicalVolum 96 if (fDrawnLVStore.find(drawnMotherLV) != f 97 // Mother previously encountered. Add t 98 // appropriate node in scene graph tree. 99 // ... 100 } else { 101 // Mother not previously encountered. S 102 // G4PhysicalVolumeModel sends volumes a 103 // i.e., mothers before daughters, in it 104 // geometry tree. Error! 105 G4warn << "ERROR: G4VTreeSceneHandler::P 106 << ri->GetPhysicalVolume()->GetName() 107 << ':' << ri->GetCopyNo() 108 << " not previously encountered." 109 "\nShouldn't happen! Please report to visua 110 << G4endl; 111 // Continue anyway. Add to root of scen 112 // ... 113 } 114 } else { 115 // This volume has no mother. Must be a t 116 // volume. Add to root of scene graph tre 117 // ... 118 } 119 } 120