Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // 23 // >> 24 // $Id: G4RayTracerSceneHandler.cc,v 1.2 2001/07/11 10:09:05 gunter Exp $ >> 25 // GEANT4 tag $Name: geant4-05-01-patch-01 $ 27 26 28 #include "G4RayTracerSceneHandler.hh" 27 #include "G4RayTracerSceneHandler.hh" 29 28 30 #include "G4VisManager.hh" << 31 << 32 #define G4warn G4cout << 33 << 34 G4int G4RayTracerSceneHandler::fSceneIdCount = << 35 << 36 G4RayTracerSceneHandler::G4RayTracerSceneHandl 29 G4RayTracerSceneHandler::G4RayTracerSceneHandler(G4VGraphicsSystem& system, 37 const G4String& name) << 30 const G4String& name): 38 : G4VSceneHandler(system, fSceneIdCount++, nam << 31 G4VSceneHandler(system, fSceneIdCount++, name) 39 { 32 { 40 // Keep vis manager happy when someone opens << 33 fSceneCount++; 41 // RayTracer" but uses the ray tracer with " << 42 // before creating any scenes, for example, << 43 // "/vis/drawVolume"... << 44 G4VisManager* visManager = G4VisManager::Get << 45 if(visManager) { << 46 G4Scene* pScene = visManager->GetCurrentSc << 47 if (!pScene) { << 48 // Create new scene like /vis/scene/crea << 49 fpScene = new G4Scene("dummy-ray-tracer- << 50 // Add dummy run-duration model to avoid << 51 // notifyHandler being invoked... << 52 fpScene->AddWorldIfEmpty(); << 53 // Add to vis manager list; ownership th << 54 visManager->SetSceneList().push_back(fpS << 55 // ...and make current... << 56 visManager->SetCurrentScene(fpScene); << 57 } << 58 } << 59 } 34 } 60 35 61 G4RayTracerSceneHandler::~G4RayTracerSceneHand 36 G4RayTracerSceneHandler::~G4RayTracerSceneHandler() 62 {} << 63 << 64 void G4RayTracerSceneHandler::ClearStore() << 65 { 37 { 66 fSceneVisAttsMap.clear(); << 38 fSceneCount--; 67 } 39 } 68 40 69 G4bool G4RayTracerSceneHandler::PathLessThan:: << 41 G4int G4RayTracerSceneHandler::GetSceneCount() { 70 (const G4ModelingParameters::PVPointerCopyNo << 42 return fSceneCount; 71 const G4ModelingParameters::PVPointerCopyNo << 72 { << 73 if (a.size() != b.size()) return a.size() < << 74 auto ia = a.begin(); << 75 auto ib = b.begin(); << 76 for (; ia != a.end(); ++ia, ++ib) { << 77 if (ia->GetPVPointer() < ib->GetPVPointer( << 78 if (ia->GetPVPointer() > ib->GetPVPointer( << 79 // Pointers equal << 80 if (ia->GetCopyNo() < ib->GetCopyNo()) ret << 81 if (ia->GetCopyNo() > ib->GetCopyNo()) ret << 82 // Both pointers and copy no are equal - c << 83 } << 84 // Equality << 85 return false; << 86 } 43 } 87 44 88 void G4RayTracerSceneHandler::BuildVisAttsMap << 45 G4int G4RayTracerSceneHandler::fSceneIdCount = 0; 89 { << 90 // Build map of vis attributes << 91 << 92 G4PhysicalVolumeModel* fpPVModel = dynamic_c << 93 if (fpPVModel) { << 94 G4ModelingParameters::PVPointerCopyNoPath << 95 for (const auto& nodeID: fpPVModel->GetFul << 96 // Build an element from the nodeid. << 97 temp.push_back(G4ModelingParameters::PVP << 98 } << 99 const G4VisAttributes* pVisAtts = fpVisAtt << 100 if (!pVisAtts) { << 101 // Shouldn't happen. << 102 if (G4VisManager::GetInstance()->GetVerb << 103 G4warn << << 104 "WARNING: G4RayTracerSceneHandler::Bui << 105 "\n Using a default vis atts." << 106 << G4endl; << 107 } << 108 static const G4VisAttributes defaultVisA << 109 pVisAtts = &defaultVisAtts; << 110 } << 111 // Copy vis atts into the vis atts map << 112 fSceneVisAttsMap[temp] = *pVisAtts; << 113 } << 114 } << 115 46 >> 47 G4int G4RayTracerSceneHandler::fSceneCount = 0; 116 48