Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4RayTracerSceneHandler.cc
이 파일의 문서화 페이지로 가기
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 //
27 // $Id: G4RayTracerSceneHandler.cc 104015 2017-05-08 07:28:08Z gcosmo $
28 
30 
31 #include "G4VisManager.hh"
32 #include "G4LogicalVolume.hh"
33 
35 
37  const G4String& name)
38 : G4VSceneHandler(system, fSceneIdCount++, name)
39 {
40  // Keep vis manager happy when someone opens a ray tracer with "/vis/open
41  // RayTracer" but uses the ray tracer with "/vis/rayTracer" commands
42  // before creating any scenes, for example, instead of using
43  // "/vis/drawVolume"...
45  if(visManager) {
46  G4Scene* pScene = visManager->GetCurrentScene();
47  if (!pScene) {
48  // Create new scene like /vis/scene/create...
49  fpScene = new G4Scene("dummy-ray-tracer-scene");
50  // Add dummy run-duration model to avoid world being added and
51  // notifyHandler being invoked...
53  // Add to vis manager list; ownership thereby passes to vis manager...
54  visManager->SetSceneList().push_back(fpScene);
55  // ...and make current...
56  visManager->SetCurrentScene(fpScene);
57  }
58  }
59 }
60 
62 {}
63 
65 {
66  fSceneVisAttsMap.clear();
67 }
68 
69 G4bool G4RayTracerSceneHandler::PathLessThan::operator()
72 {
73  if (a.size() != b.size()) return a.size() < b.size();
74  auto ia = a.begin();
75  auto ib = b.begin();
76  for (; ia != a.end(); ++ia, ++ib) {
77  if (ia->GetPVPointer() < ib->GetPVPointer()) return true;
78  if (ia->GetPVPointer() > ib->GetPVPointer()) return false;
79  // Pointers equal
80  if (ia->GetCopyNo() < ib->GetCopyNo()) return true;
81  if (ia->GetCopyNo() > ib->GetCopyNo()) return false;
82  // Both pointers and copy no are equal - continue
83  }
84  // Equality
85  return false;
86 }
87 
89 {
90  // Build map of vis attributes
91 
92  G4PhysicalVolumeModel* fpPVModel = dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
93  if (fpPVModel) {
95  for (const auto& nodeID: fpPVModel->GetFullPVPath()) {
96  // Build an element from the nodeid.
97  temp.push_back(G4ModelingParameters::PVPointerCopyNo(nodeID));
98  }
99  const G4VisAttributes* pVisAtts = fpVisAttribs;
100  if (!pVisAtts) {
101  // Shouldn't happen.
102  if (G4VisManager::GetInstance()->GetVerbosity() >= G4VisManager::warnings) {
103  G4cout <<
104  "WARNING: G4RayTracerSceneHandler::BuildVisAttsMap: null vis atts pointer."
105  "\n Using a default vis atts."
106  << G4endl;
107  }
108  static const G4VisAttributes defaultVisAtts;
109  pVisAtts = &defaultVisAtts;
110  }
111  // Copy vis atts into the vis atts map
112  fSceneVisAttsMap[temp] = *pVisAtts;
113  }
114 }
115 
const XML_Char * name
Definition: expat.h:151
std::vector< ExP01TrackerHit * > a
Definition: ExP01Classes.hh:33
system("rm -rf microbeam.root")
G4RayTracerSceneHandler(G4VGraphicsSystem &system, const G4String &name="")
#define G4endl
Definition: G4ios.hh:61
static G4VisManager * GetInstance()
void BuildVisAttsMap(const G4VSolid &solid)
const std::vector< G4PhysicalVolumeNodeID > & GetFullPVPath() const
G4Scene * GetCurrentScene() const
bool G4bool
Definition: G4Types.hh:79
const G4VisAttributes * fpVisAttribs
std::vector< PVPointerCopyNo > PVPointerCopyNoPath
int G4int
Definition: G4Types.hh:78
void SetCurrentScene(G4Scene *)
G4GLOB_DLL std::ostream G4cout
std::map< G4ModelingParameters::PVPointerCopyNoPath, G4VisAttributes, PathLessThan > fSceneVisAttsMap
G4SceneList & SetSceneList()
G4bool AddWorldIfEmpty(G4bool warn=false)
Definition: G4Scene.cc:182