The VRML2 polyhedra created, have either triangle or quad faces ?
(gdb) b 'G4VRML2FileSceneHandler::AddPrimitive(G4Polyhedron const&)'
Breakpoint 1 at 0x46c7fcf: file src/G4VRML2SceneHandlerFunc.icc, line 175.
(gdb)
...
/vis/sceneHandler/attach
Scene "scene-0" attached to scene handler "scene-handler-0.
(You may have to refresh with "/vis/viewer/flush" if view is not "auto-refresh".)
NOTE: For systems which are not "auto-refresh" you will need to
issue "/vis/viewer/refresh" or "/vis/viewer/flush".
/vis/viewer/refresh viewer-0
Refreshing viewer "viewer-0 (VRML2FILE)"...
===========================================
Output VRML 2.0 file: g4_03.wrl
Maximum number of files in the destination directory: 100
(Customizable with the environment variable: G4VRMLFILE_MAX_FILE_NUM)
===========================================
Traversing scene data...
Breakpoint 1, G4VRML2FileSceneHandler::AddPrimitive (this=0x1024ab10, polyhedron=@0x1024aaa8) at src/G4VRML2SceneHandlerFunc.icc:175
175 if (polyhedron.GetNoFacets() == 0) return;
(gdb) bt
#0 G4VRML2FileSceneHandler::AddPrimitive (this=0x1024ab10, polyhedron=@0x1024aaa8) at src/G4VRML2SceneHandlerFunc.icc:175
#1 0xb709af73 in G4VSceneHandler::RequestPrimitives (this=0x1024ab10, solid=@0xbb7cce0) at src/G4VSceneHandler.cc:453
#2 0xb709999b in G4VSceneHandler::AddSolid (this=0x1024ab10, solid=@0xbb7cce0) at src/G4VSceneHandler.cc:252
#3 0x046c8889 in G4VRML2FileSceneHandler::AddSolid (this=0x1024ab10, vsolid=@0xbb7cce0) at src/G4VRML2SceneHandlerFunc.icc:78
#4 0x0458f405 in G4SubtractionSolid::DescribeYourselfTo (this=0xbb7cce0, scene=@0x1024ab10) at src/G4SubtractionSolid.cc:459
#5 0xb5ef6186 in G4PhysicalVolumeModel::DescribeSolid (this=0x1024b0c0, theAT=@0xbfabb230, pSol=0xbb7cce0, pVisAttribs=0x1024cdc8, sceneHandler=@0x1024ab10) at src/G4PhysicalVolumeModel.cc:551
#6 0xb5ef7bf2 in G4PhysicalVolumeModel::DescribeAndDescend (this=0x1024b0c0, pVPV=0xba26fd0, requestedDepth=-2, pLV=0xbb61578, pSol=0xbb7cce0, pMaterial=0xbb7e670, theAT=@0xbfabba10, sceneHandler=@0x1024ab10) at src/G4PhysicalVolumeModel.cc:456
#7 0xb5ef6ba3 in G4PhysicalVolumeModel::VisitGeometryAndGetVisReps (this=0x1024b0c0, pVPV=0xba26fd0, requestedDepth=-2, theAT=@0xbfabba10, sceneHandler=@0x1024ab10) at src/G4PhysicalVolumeModel.cc:222
#8 0xb5ef7dc1 in G4PhysicalVolumeModel::DescribeAndDescend (this=0x1024b0c0, pVPV=0xbc0f528, requestedDepth=-1, pLV=0xba26c80, pSol=0xba26c00, pMaterial=0xbe623f8, theAT=@0xbfabbf80, sceneHandler=@0x1024ab10) at src/G4PhysicalVolumeModel.cc:523
#9 0xb5ef6ba3 in G4PhysicalVolumeModel::VisitGeometryAndGetVisReps (this=0x1024b0c0, pVPV=0xbc0f528, requestedDepth=-1, theAT=@0xbfabbf80, sceneHandler=@0x1024ab10) at src/G4PhysicalVolumeModel.cc:222
#10 0xb5ef8219 in G4PhysicalVolumeModel::DescribeYourselfTo (this=0x1024b0c0, sceneHandler=@0x1024ab10) at src/G4PhysicalVolumeModel.cc:170
#11 0xb709a9f2 in G4VSceneHandler::ProcessScene (this=0x1024ab10) at src/G4VSceneHandler.cc:516
#12 0xb70a162b in G4VViewer::ProcessView (this=0x1024cc58) at src/G4VViewer.cc:122
#13 0x046c980c in G4VRML2FileViewer::DrawView (this=0x1024cc58) at src/G4VRML2FileViewer.cc:83
#14 0xb70d81d7 in G4VisCommandViewerRefresh::SetNewValue (this=0xbf8a760, newValue=
{<std::basic_string<char,std::char_traits<char>,std::allocator<char> >> = {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfabc1d8 "o2$\020\001"}}, <No data fields>}) at src/G4VisCommandsViewer.cc:1141
#15 0x072c1dc4 in G4UIcommand::DoIt (this=0xbf8b010, parameterList=
{<std::basic_string<char,std::char_traits<char>,std::allocator<char> >> = {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfabc28c "$2$\020\023"}}, <No data fields>}) at src/G4UIcommand.cc:210
#16 0x072ce32b in G4UImanager::ApplyCommand (this=0xbe49a98, aCmd=0x1024aeec "/vis/viewer/refresh viewer-0") at src/G4UImanager.cc:410
#17 0x072ce47a in G4UImanager::ApplyCommand (this=0xbe49a98, aCmd=
{<std::basic_string<char,std::char_traits<char>,std::allocator<char> >> = {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfabc2f8 "i(R)$\020i(R)$\020THaN(w\r\005"}}, <No data fields>}) at src/G4UImanager.cc:354
#18 0xb70d8adb in G4VisCommandViewerFlush::SetNewValue (this=0xbf89e98, newValue=
{<std::basic_string<char,std::char_traits<char>,std::allocator<char> >> = {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfabc438 "d2$\020\001"}}, <No data fields>}) at src/G4VisCommandsViewer.cc:801
#19 0x072c1dc4 in G4UIcommand::DoIt (this=0xbf8a028, parameterList=
{<std::basic_string<char,std::char_traits<char>,std::allocator<char> >> = {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfabc4ec "1/4\233\200\004yyyy\021"}}, <No data fields>}) at src/G4UIcommand.cc:210
#20 0x072ce32b in G4UImanager::ApplyCommand (this=0xbe49a98, aCmd=0xbf7075c "/vis/viewer/flush") at src/G4UImanager.cc:410
#21 0x072ce47a in G4UImanager::ApplyCommand (this=0xbe49a98, aCmd=
{<std::basic_string<char,std::char_traits<char>,std::allocator<char> >> = {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbfabc5c8 "\\\a/\v\230\232a\vO\204\032\005~O]OAE<<?\022}\030\005h0o\vpC$\020 AE<<?O\226e\vAXja"}}, <No data fields>}) at src/G4UImanager.cc:354
#22 0xb744c4f2 in GiGaRunActionCommand::BeginOfRunAction (this=0xbf63068, run=0x1024c770) at ../src/Components/GiGaRunActionCommand.cpp:79
#23 0x05187d12 in G4RunManager::RunInitialization (this=0xbe9c014) at src/G4RunManager.cc:203
#24 0xb45dd722 in GiGaRunManager::initializeRun (this=0xbe9be40) at ../src/component/GiGaRunManager.cpp:347
#25 0xb45dd984 in GiGaRunManager::prepareTheEvent (this=0xbe9be40, vertex=0xbb24038) at ../src/component/GiGaRunManager.cpp:250
#26 0xb45bae97 in GiGa::prepareTheEvent (this=0xbe9b448, vertex=0xbb24038) at ../src/component/GiGa.cpp:444
#27 0xb45b7620 in GiGa::operator<< (this=0xbe9b448, vertex=0xbb24038) at ../src/component/GiGaIGiGaSvc.cpp:52
#28 0xb4806ad5 in DsPushKine::execute (this=0xbe8d218) at ../src/DsPushKine.cc:55
#29 0x0226c408 in Algorithm::sysExecute (this=0xbe8d218) at ../src/Lib/Algorithm.cpp:558
#30 0x0601768f in GaudiAlgorithm::sysExecute (this=0xbe8d218) at ../src/lib/GaudiAlgorithm.cpp:161
#31 0x0607ffd4 in GaudiSequencer::execute (this=0xb951210) at ../src/lib/GaudiSequencer.cpp:100
#32 0x0226c408 in Algorithm::sysExecute (this=0xb951210) at ../src/Lib/Algorithm.cpp:558
#33 0x0601768f in GaudiAlgorithm::sysExecute (this=0xb951210) at ../src/lib/GaudiAlgorithm.cpp:161
#34 0x022e841a in MinimalEventLoopMgr::executeEvent (this=0xb50e180) at ../src/Lib/MinimalEventLoopMgr.cpp:450
#35 0x03e12956 in DybEventLoopMgr::executeEvent (this=0xb50e180, par=0x0) at ../src/DybEventLoopMgr.cpp:125
#36 0x03e1318a in DybEventLoopMgr::nextEvent (this=0xb50e180, maxevt=10) at ../src/DybEventLoopMgr.cpp:188
#37 0x022e6dbd in MinimalEventLoopMgr::executeRun (this=0xb50e180, maxevt=10) at ../src/Lib/MinimalEventLoopMgr.cpp:400
#38 0x090a46d9 in ApplicationMgr::executeRun (this=0xb1d4cb8, evtmax=10) at ../src/ApplicationMgr/ApplicationMgr.cpp:867
#39 0x07021f57 in method_3426 (retaddr=0xbf9d3f0, o=0xb1d50e4, arg=@0xb240e30) at ../i686-slc5-gcc41-dbg/dict/GaudiKernel/dictionary_dict.cpp:4375
#40 0x007ccadd in ROOT::Cintex::Method_stub_with_context (context=0xb240e28, result=0xbfe6224, libp=0xbfe627c) at cint/cintex/src/CINTFunctional.cxx:319
#41 0x03921034 in ?? ()
#42 0x0b240e28 in ?? ()
#43 0x0bfe6224 in ?? ()
#44 0x00000000 in ?? ()
(gdb)
(gdb) frame 13
#13 0x046c980c in G4VRML2FileViewer::DrawView (this=0x1024cc58) at src/G4VRML2FileViewer.cc:83
83 ProcessView();
(gdb) list
78 // Viewpoint node
79 SendViewParameters();
80
81 // Here is a minimal DrawView() function.
82 NeedKernelVisit();
83 ProcessView();
84 FinishView();
85 }
86
(gdb) frame 12
#12 0xb70a162b in G4VViewer::ProcessView (this=0x1024cc58) at src/G4VViewer.cc:122
122 fSceneHandler.ProcessScene (*this);
(gdb) list
117 // DrawView)...
118 if (fNeedKernelVisit) {
119 // Reset flag. This must be done before ProcessScene to prevent
120 // recursive calls when recomputing transients...
121 fNeedKernelVisit = false;
122 fSceneHandler.ProcessScene (*this);
123 }
124 }
125
(gdb) frame 11
#11 0xb709a9f2 in G4VSceneHandler::ProcessScene (this=0x1024ab10) at src/G4VSceneHandler.cc:516
516 pModel -> DescribeYourselfTo (*this);
(gdb) list
511 // pModel->GetTransformation(). The model must take care of
512 // this in pModel->DescribeYourselfTo(*this). See, for example,
513 // G4PhysicalVolumeModel and /vis/scene/add/logo.
514 pModel -> SetModelingParameters (pMP);
515 SetModel (pModel); // Store for use by derived class.
516 pModel -> DescribeYourselfTo (*this);
517 pModel -> SetModelingParameters (0);
518 }
519
520 // Repeat if required...
(gdb) frame 10
#10 0xb5ef8219 in G4PhysicalVolumeModel::DescribeYourselfTo (this=0x1024b0c0, sceneHandler=@0x1024ab10) at src/G4PhysicalVolumeModel.cc:170
170 sceneHandler);
(gdb) list
165
166 VisitGeometryAndGetVisReps
167 (fpTopPV,
168 fRequestedDepth,
169 startingTransformation,
170 sceneHandler);
171
(gdb) frame 9
#9 0xb5ef6ba3 in G4PhysicalVolumeModel::VisitGeometryAndGetVisReps (this=0x1024b0c0, pVPV=0xbc0f528, requestedDepth=-1, theAT=@0xbfabbf80, sceneHandler=@0x1024ab10) at src/G4PhysicalVolumeModel.cc:222
222 theAT, sceneHandler);
(gdb) list
217 if (!(pVPV -> IsReplicated ())) {
218 // Non-replicated physical volume.
219 pSol = pLV -> GetSolid ();
220 pMaterial = pLV -> GetMaterial ();
221 DescribeAndDescend (pVPV, requestedDepth, pLV, pSol, pMaterial,
222 theAT, sceneHandler);
223 }
224 else {
225 // Replicated or parametrised physical volume.
226 EAxis axis;
[blyth@cms01 source]$ find . -name '*.cc' -exec grep -H Traversing {} \;
./visualization/management/src/G4VSceneHandler.cc: G4cout << "Traversing scene data..." << G4endl;
471 void G4VSceneHandler::ProcessScene (G4VViewer&) {
472
473 if (!fpScene) return;
474
475 G4VisManager* visManager = G4VisManager::GetInstance();
476
477 if (!visManager->GetConcreteInstance()) return;
478
479 G4VisManager::Verbosity verbosity = visManager->GetVerbosity();
480
481 fReadyForTransients = false;
482
483 // Clear stored scene, if any, i.e., display lists, scene graphs.
484 ClearStore ();
485
486 // Reset fMarkForClearingTransientStore. No need to clear transient
487 // store since it has just been cleared above. (Leaving
488 // fMarkForClearingTransientStore true causes problems with
489 // recomputing transients below.) Restore it again at end...
490 G4bool tmpMarkForClearingTransientStore = fMarkForClearingTransientStore;
491 fMarkForClearingTransientStore = false;
492
493 // Traverse geometry tree and send drawing primitives to window(s).
494
495 const std::vector<G4VModel*>& runDurationModelList =
496 fpScene -> GetRunDurationModelList ();
497
498 if (runDurationModelList.size ()) {
499 if (verbosity >= G4VisManager::confirmations) {
500 G4cout << "Traversing scene data..." << G4endl;
501 }
502
503 BeginModeling ();
504
505 // Create modeling parameters from view parameters...
506 G4ModelingParameters* pMP = CreateModelingParameters ();
507
508 for (size_t i = 0; i < runDurationModelList.size (); i++) {
509 G4VModel* pModel = runDurationModelList[i];
510 // Note: this is not the place to take action on
511 // pModel->GetTransformation(). The model must take care of
512 // this in pModel->DescribeYourselfTo(*this). See, for example,
513 // G4PhysicalVolumeModel and /vis/scene/add/logo.
514 pModel -> SetModelingParameters (pMP);
515 SetModel (pModel); // Store for use by derived class.
516 pModel -> DescribeYourselfTo (*this);
517 pModel -> SetModelingParameters (0);
518 }
519
520 // Repeat if required...
521 if (fSecondPassRequested) {
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/management/include/G4Scene.hh:
74 const std::vector<G4VModel*>& GetRunDurationModelList () const;
75 // Contains models which are expected to last for the duration of
76 // the run, for example geometry volumes.
The scene and this list are populated via draw commands.
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/management/src/G4VisCommandsCompound.cc:
170 ////////////// /vis/drawVolume ///////////////////////////////////////
171
172 G4VisCommandDrawVolume::G4VisCommandDrawVolume() {
173 G4bool omitable;
174 fpCommand = new G4UIcmdWithAString("/vis/drawVolume", this);
175 fpCommand->SetGuidance
176 ("Creates a scene containing this physical volume and asks the"
177 "\ncurrent viewer to draw it. The scene becomes current.");
178 fpCommand -> SetGuidance
179 ("If physical-volume-name is \"world\" (the default), the main geometry"
180 "\ntree (material world) is drawn. If \"worlds\", all worlds - material"
181 "\nworld and parallel worlds, if any - are drawn. Otherwise a search of"
182 "\nall worlds is made, taking the first matching occurence only. To see"
183 "\na representation of the geometry hierarchy of the worlds, try"
184 "\n\"/vis/drawTree [worlds]\" or one of the driver/browser combinations"
185 "\nthat have the required functionality, e.g., HepRep");
186 fpCommand->SetParameterName("physical-volume-name", omitable = true);
187 fpCommand->SetDefaultValue("world");
188 }
$DYB/external/build/LCG/geant4.9.2.p01/source/intercoms/src/G4UIcommand.cc:
104 G4int G4UIcommand::DoIt(G4String parameterList)
105 {
210 messenger->SetNewValue( this, correctParameters );
211 return 0;
212 }
Invoking/Applying command boils down to a SetNewValue which applys /vis/scene/add/volume World:
194 void G4VisCommandDrawVolume::SetNewValue(G4UIcommand*, G4String newValue) {
195 G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
196 G4UImanager* UImanager = G4UImanager::GetUIpointer();
197 G4int keepVerbose = UImanager->GetVerboseLevel();
198 G4int newVerbose(0);
199 if (keepVerbose >= 2 || verbosity >= G4VisManager::confirmations)
200 newVerbose = 2;
201 UImanager->SetVerboseLevel(newVerbose);
202 UImanager->ApplyCommand("/vis/scene/create");
203 UImanager->ApplyCommand(G4String("/vis/scene/add/volume " + newValue));
204 UImanager->ApplyCommand("/vis/sceneHandler/attach");
205 UImanager->SetVerboseLevel(keepVerbose);
206 static G4bool warned = false;
207 if (verbosity >= G4VisManager::confirmations && !warned) {
208 G4cout <<
209 "NOTE: For systems which are not \"auto-refresh\" you will need to"
210 "\n issue \"/vis/viewer/refresh\" or \"/vis/viewer/flush\"."
211 << G4endl;
212 warned = true;
213 }
214 }
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/management/src/G4VisCommandsSceneAdd.cc:
1479 ////////////// /vis/scene/add/volume ///////////////////////////////////////
1480
1481 G4VisCommandSceneAddVolume::G4VisCommandSceneAddVolume () {
1482 G4bool omitable;
1483 fpCommand = new G4UIcommand ("/vis/scene/add/volume", this);
1484 fpCommand -> SetGuidance
1485 ("Adds a physical volume to current scene, with optional clipping volume.");
1486 fpCommand -> SetGuidance
1487 ("If physical-volume-name is \"world\" (the default), the top of the"
1488 "\nmain geometry tree (material world) is added. If \"worlds\", the"
1489 "\ntop of all worlds - material world and parallel worlds, if any - are"
1490 "\nadded. Otherwise a search of all worlds is made, taking the first"
1491 "\nmatching occurence only. To see a representation of the geometry"
1492 "\nhierarchy of the worlds, try \"/vis/drawTree [worlds]\" or one of the"
1493 "\ndriver/browser combinations that have the required functionality, e.g., HepRep.");
....
1558 void G4VisCommandSceneAddVolume::SetNewValue (G4UIcommand*,
1559 G4String newValue) {
1560
1561 G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
1562 G4bool warn = verbosity >= G4VisManager::warnings;
1563
1564 G4Scene* pScene = fpVisManager->GetCurrentScene();
....
1654 std::vector<G4PhysicalVolumeModel*> models;
1655 std::vector<G4VPhysicalVolume*> foundVolumes;
1656 G4VPhysicalVolume* foundWorld = 0;
1657 std::vector<G4int> foundDepths;
1658 std::vector<G4Transform3D> transformations;
1659
1660 if (name == "world") {
1661
1662 models.push_back
1663 (new G4PhysicalVolumeModel (world, requestedDepthOfDescent));
1664 foundVolumes.push_back(world);
1665 foundDepths.push_back(0);
1666 transformations.push_back(G4Transform3D());
....
1746 const G4String& currentSceneName = pScene -> GetName ();
1747 G4bool failure = true;
1748 for (size_t i = 0; i < foundVolumes.size(); ++i) {
1749 G4bool successful = pScene -> AddRunDurationModel (models[i], warn);
1750 if (successful) {
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/management/include/G4Scene.hh:
108 G4bool AddRunDurationModel (G4VModel*, G4bool warn = false);
109 // Adds models of type which are expected to last for the duration
110 // of the run, for example geometry volumes.
111 // Returns false if model is already in the list.
112 // Prints warnings if warn is true.
113
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/management/src/G4Scene.cc:
50 G4bool G4Scene::AddRunDurationModel (G4VModel* pModel, G4bool warn) {
51 std::vector<G4VModel*>::const_iterator i;
52 for (i = fRunDurationModelList.begin ();
53 i != fRunDurationModelList.end (); ++i) {
54 if (pModel -> GetGlobalDescription () ==
55 (*i) -> GetGlobalDescription ()) break;
56 }
57 if (i != fRunDurationModelList.end ()) {
58 if (warn) {
59 G4cout << "G4Scene::AddRunDurationModel: model \""
60 << pModel -> GetGlobalDescription ()
61 << "\"\n is already in the run-duration list of scene \""
62 << fName
63 << "\"."
64 << G4endl;
65 }
66 return false;
67 }
68 fRunDurationModelList.push_back (pModel);
69 CalculateExtent ();
70 return true;
71 }
According to my reading the RunDurationModel contains just world. Actually G4PhysicalVolumeModel (world, requestedDepthOfDescent))
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/include/G4PhysicalVolumeModel.hh:
67 class G4PhysicalVolumeModel: public G4VModel {
68
69 public: // With description
70
71 enum {UNLIMITED = -1};
72
73 enum ClippingMode {subtraction, intersection};
74
75 class G4PhysicalVolumeNodeID {
76 public:
77 G4PhysicalVolumeNodeID
78 (G4VPhysicalVolume* pPV = 0, G4int iCopyNo = 0, G4int depth = 0):
79 fpPV(pPV), fCopyNo(iCopyNo), fNonCulledDepth(depth) {}
80 G4VPhysicalVolume* GetPhysicalVolume() const {return fpPV;}
81 G4int GetCopyNo() const {return fCopyNo;}
82 G4int GetNonCulledDepth() const {return fNonCulledDepth;}
83 G4bool operator< (const G4PhysicalVolumeNodeID& right) const;
84 private:
85 G4VPhysicalVolume* fpPV;
86 G4int fCopyNo;
87 G4int fNonCulledDepth;
88 };
89 // Nested class for identifying physical volume nodes.
90
91 G4PhysicalVolumeModel
92 (G4VPhysicalVolume*,
93 G4int requestedDepth = UNLIMITED,
94 const G4Transform3D& modelTransformation = G4Transform3D(),
95 const G4ModelingParameters* = 0,
96 G4bool useFullExtent = false);
97
98 virtual ~G4PhysicalVolumeModel ();
99
00 void DescribeYourselfTo (G4VGraphicsScene&);
01 // The main task of a model is to describe itself to the graphics scene
02 // handler (a object which inherits G4VSceneHandler, which inherits
03 // G4VGraphicsScene).
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4PhysicalVolumeModel.cc:
/// kick off the descent
///
155 void G4PhysicalVolumeModel::DescribeYourselfTo
156 (G4VGraphicsScene& sceneHandler)
157 {
158 if (!fpMP) G4Exception
159 ("G4PhysicalVolumeModel::DescribeYourselfTo: No modeling parameters.");
160
161 // For safety...
162 fCurrentDepth = 0;
163
164 G4Transform3D startingTransformation = fTransform;
165
166 VisitGeometryAndGetVisReps
167 (fpTopPV,
168 fRequestedDepth,
169 startingTransformation,
170 sceneHandler);
///
/// handle the recursive descent
///
198 void G4PhysicalVolumeModel::VisitGeometryAndGetVisReps
199 (G4VPhysicalVolume* pVPV,
200 G4int requestedDepth,
201 const G4Transform3D& theAT,
202 G4VGraphicsScene& sceneHandler)
203 {
204 // Visits geometry structure to a given depth (requestedDepth), starting
205 // at given physical volume with given starting transformation and
206 // describes volumes to the scene handler.
207 // requestedDepth < 0 (default) implies full visit.
208 // theAT is the Accumulated Transformation.
209
210 // Find corresponding logical volume and (later) solid, storing in
211 // local variables to preserve re-entrancy.
212 G4LogicalVolume* pLV = pVPV -> GetLogicalVolume ();
213
214 G4VSolid* pSol;
215 G4Material* pMaterial;
216
217 if (!(pVPV -> IsReplicated ())) {
218 // Non-replicated physical volume.
219 pSol = pLV -> GetSolid ();
220 pMaterial = pLV -> GetMaterial ();
221 DescribeAndDescend (pVPV, requestedDepth, pLV, pSol, pMaterial,
222 theAT, sceneHandler);
///
///
///
336 void G4PhysicalVolumeModel::DescribeAndDescend
337 (G4VPhysicalVolume* pVPV,
338 G4int requestedDepth,
339 G4LogicalVolume* pLV,
340 G4VSolid* pSol,
341 G4Material* pMaterial,
342 const G4Transform3D& theAT,
343 G4VGraphicsScene& sceneHandler)
344 {
345 // Maintain useful data members...
346 fpCurrentPV = pVPV;
347 fpCurrentLV = pLV;
348 fpCurrentMaterial = pMaterial;
349
350 const G4RotationMatrix objectRotation = pVPV -> GetObjectRotationValue ();
351 const G4ThreeVector& translation = pVPV -> GetTranslation ();
352 G4Transform3D theLT (G4Transform3D (objectRotation, translation));
353
354 // Compute the accumulated transformation...
355 // Note that top volume's transformation relative to the world
356 // coordinate system is specified in theAT == startingTransformation
357 // = fTransform (see DescribeYourselfTo), so first time through the
358 // volume's own transformation, which is only relative to its
359 // mother, i.e., not relative to the world coordinate system, should
360 // not be accumulated.
361 G4Transform3D theNewAT (theAT);
362 if (fCurrentDepth != 0) theNewAT = theAT * theLT;
363 fpCurrentTransform = &theNewAT;
364
...
428 // Update full path of physical volumes...
429 G4int copyNo = fpCurrentPV->GetCopyNo();
430 fFullPVPath.push_back
431 (G4PhysicalVolumeNodeID(fpCurrentPV,copyNo,fCurrentDepth));
...
433 if (thisToBeDrawn) {
434
435 // Update path of drawn physical volumes...
436 G4int copyNo = fpCurrentPV->GetCopyNo();
437 fDrawnPVPath.push_back
438 (G4PhysicalVolumeNodeID(fpCurrentPV,copyNo,fCurrentDepth));
439
440 if (fpMP->IsExplode() && fDrawnPVPath.size() == 1) {
...
454 }
455
456 DescribeSolid (theNewAT, pSol, pVisAttribs, sceneHandler);
457
458 }
...
517 if (daughtersToBeDrawn) {
518 for (G4int iDaughter = 0; iDaughter < nDaughters; iDaughter++) {
519 G4VPhysicalVolume* pVPV = pLV -> GetDaughter (iDaughter);
520 // Descend the geometry structure recursively...
521 fCurrentDepth++;
522 VisitGeometryAndGetVisReps
523 (pVPV, requestedDepth - 1, theNewAT, sceneHandler);
524 fCurrentDepth--;
525 }
526 }
...
538 void G4PhysicalVolumeModel::DescribeSolid
539 (const G4Transform3D& theAT,
540 G4VSolid* pSol,
541 const G4VisAttributes* pVisAttribs,
542 G4VGraphicsScene& sceneHandler)
543 {
544 sceneHandler.PreAddSolid (theAT, *pVisAttribs);
545
546 const G4Polyhedron* pSectionPolyhedron = fpMP->GetSectionPolyhedron();
547 const G4Polyhedron* pCutawayPolyhedron = fpMP->GetCutawayPolyhedron();
548
549 if (!fpClippingPolyhedron && !pSectionPolyhedron && !pCutawayPolyhedron) {
550
551 pSol -> DescribeYourselfTo (sceneHandler); // Standard treatment.
552
553 } else {
554
555 // Clipping, etc., performed by Boolean operations on polyhedron objects.
...
633 sceneHandler.PostAddSolid ();
634 }
[blyth@cms01 src]$ find $DYB/external/build/LCG/geant4.9.2.p01/source -name '*.cc' -exec grep -H DescribeYourselfTo {} \;
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/management/src/G4VisCommandsSceneAdd.cc: searchModel.DescribeYourselfTo (searchScene); // Initiate search.
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/management/src/G4VSceneHandler.cc: // this in pModel->DescribeYourselfTo(*this). See, for example,
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/management/src/G4VSceneHandler.cc: pModel -> DescribeYourselfTo (*this);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/management/src/G4VSceneHandler.cc: pModel -> DescribeYourselfTo (*this);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/management/src/G4VSceneHandler.cc: pModel -> DescribeYourselfTo (*this);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/management/src/G4VisManager.cc: solid.DescribeYourselfTo (*fpSceneHandler);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4AxesModel.cc:void G4AxesModel::DescribeYourselfTo (G4VGraphicsScene& sceneHandler) {
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4PhysicalVolumeModel.cc: DescribeYourselfTo (bsScene);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4PhysicalVolumeModel.cc:void G4PhysicalVolumeModel::DescribeYourselfTo
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4PhysicalVolumeModel.cc: ("G4PhysicalVolumeModel::DescribeYourselfTo: No modeling parameters.");
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4PhysicalVolumeModel.cc: // = fTransform (see DescribeYourselfTo), so first time through the
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4PhysicalVolumeModel.cc: pSol -> DescribeYourselfTo (sceneHandler); // Standard treatment.
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4PhysicalVolumeModel.cc: pSol -> DescribeYourselfTo (sceneHandler); // Standard treatment.
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4PhysicalVolumeModel.cc: searchModel.DescribeYourselfTo (searchScene);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4HitsModel.cc:void G4HitsModel::DescribeYourselfTo (G4VGraphicsScene& sceneHandler)
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4ScaleModel.cc:void G4ScaleModel::DescribeYourselfTo (G4VGraphicsScene& sceneHandler) {
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4TrajectoriesModel.cc:void G4TrajectoriesModel::DescribeYourselfTo (G4VGraphicsScene& sceneHandler) {
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4LogicalVolumeModel.cc:void G4LogicalVolumeModel::DescribeYourselfTo
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4LogicalVolumeModel.cc: G4PhysicalVolumeModel::DescribeYourselfTo (sceneHandler);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4LogicalVolumeModel.cc: pvModel.DescribeYourselfTo(sceneHandler);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4LogicalVolumeModel.cc: pSol -> DescribeYourselfTo (sceneHandler);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4NullModel.cc:void G4NullModel::DescribeYourselfTo (G4VGraphicsScene&) {
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4NullModel.cc: G4Exception ("G4NullModel::DescribeYourselfTo called.");
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4TextModel.cc:void G4TextModel::DescribeYourselfTo (G4VGraphicsScene& sceneHandler) {
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/visualization/Tree/src/G4ASCIITreeSceneHandler.cc: pvModel->DescribeYourselfTo (massScene);
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/management/src/G4ReflectedSolid.cc:G4ReflectedSolid::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/BREPS/src/G4BREPSolid.cc:void G4BREPSolid::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/BREPS/src/G4BREPSolidOpenPCone.cc:void G4BREPSolidOpenPCone::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Tubs.cc:void G4Tubs::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Torus.cc:void G4Torus::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Trap.cc:void G4Trap::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Para.cc:void G4Para::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Cons.cc:void G4Cons::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Trd.cc:void G4Trd::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Sphere.cc:void G4Sphere::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Orb.cc:void G4Orb::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Box.cc:void G4Box::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4VCSGfaceted.cc:// DescribeYourselfTo
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4VCSGfaceted.cc:void G4VCSGfaceted::DescribeYourselfTo( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4Tet.cc:// DescribeYourselfTo
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4Tet.cc:void G4Tet::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4EllipticalTube.cc:// DescribeYourselfTo
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4EllipticalTube.cc:void G4EllipticalTube::DescribeYourselfTo( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4Hype.cc:// DescribeYourselfTo
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4Hype.cc:void G4Hype::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4VTwistedFaceted.cc:void G4VTwistedFaceted::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4TessellatedSolid.cc:// - Changed ::DescribeYourselfTo(), line 464
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4TessellatedSolid.cc:void G4TessellatedSolid::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4Paraboloid.cc:void G4Paraboloid::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4Ellipsoid.cc:void G4Ellipsoid::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4EllipticalCone.cc:void G4EllipticalCone::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/specific/src/G4TwistedTubs.cc:void G4TwistedTubs::DescribeYourselfTo (G4VGraphicsScene& scene) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/Boolean/src/G4DisplacedSolid.cc:G4DisplacedSolid::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/Boolean/src/G4IntersectionSolid.cc:G4IntersectionSolid::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/Boolean/src/G4SubtractionSolid.cc:G4SubtractionSolid::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
/data/env/local/dyb/trunk/external/build/LCG/geant4.9.2.p01/source/geometry/solids/Boolean/src/G4UnionSolid.cc:G4UnionSolid::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
[blyth@cms01 src]$
1885 void G4Tubs::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
1886 {
1887 scene.AddSolid (*this) ;
1888 }
443 void
444 G4UnionSolid::DescribeYourselfTo ( G4VGraphicsScene& scene ) const
445 {
446 scene.AddSolid (*this);
447 }
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/modeling/src/G4LogicalVolumeModel.cc:
//
// POSSIBLE EXPLANATION FOR GETTING MORE VRML2 SOLIDS THAN EXPECTED IN THE .wrl ???
// THE LOGICALS ARE BEING DRAWN
//
//
45 G4LogicalVolumeModel::G4LogicalVolumeModel
46 (G4LogicalVolume* pLV,
47 G4int soughtDepth,
48 G4bool booleans,
49 G4bool voxels,
50 G4bool readout,
51 const G4Transform3D& modelTransformation,
52 const G4ModelingParameters* pMP):
53 // Instantiate a G4PhysicalVolumeModel with a G4PVPlacement to
54 // represent this logical volume. It has no rotation and a null
55 // translation so that the logical volume will be seen in its own
56 // reference system. It will be added to the physical volume store
57 // but it will not be part of the normal geometry heirarchy so it
58 // has no mother.
59 G4PhysicalVolumeModel
60 (new G4PVPlacement (0, // No rotation.
61 G4ThreeVector(), // Null traslation.
62 "PhysVol representaion of LogVol " + pLV -> GetName (),
63 pLV,
64 0, // No mother.
65 false, // Not "MANY".
66 0), // Copy number.
67 soughtDepth,
..
82 void G4LogicalVolumeModel::DescribeYourselfTo
83 (G4VGraphicsScene& sceneHandler) {
84
85 // Store current modeling parameters and ensure nothing is culled.
86 const G4ModelingParameters* tmpMP = fpMP;
87 G4ModelingParameters nonCulledMP;
88 if (fpMP) nonCulledMP = *fpMP;
89 nonCulledMP.SetCulling (false);
90 fpMP = &nonCulledMP;
91 G4PhysicalVolumeModel::DescribeYourselfTo (sceneHandler);
92 fpMP = tmpMP;
130 // This called from G4PhysicalVolumeModel::DescribeAndDescend by the
131 // virtual function mechanism.
132 void G4LogicalVolumeModel::DescribeSolid
133 (const G4Transform3D& theAT,
134 G4VSolid* pSol,
135 const G4VisAttributes* pVisAttribs,
136 G4VGraphicsScene& sceneHandler) {
137
138 if (fBooleans) {
139 // Look for "constituents". Could be a Boolean solid.
140 G4VSolid* pSol0 = pSol -> GetConstituentSolid (0);
141 if (pSol0) { // Composite solid...
142 G4VSolid* pSol1 = pSol -> GetConstituentSolid (1);
143 if (!pSol1) {
144 G4Exception
145 ("G4PhysicalVolumeModel::DescribeSolid:"
146 " 2nd component solid is missing.");
147 }
148 // Draw these constituents white and "forced wireframe"...
149 G4VisAttributes constituentAttributes;
150 constituentAttributes.SetForceWireframe(true);
151 DescribeSolid (theAT, pSol0, &constituentAttributes, sceneHandler);
152 DescribeSolid (theAT, pSol1, &constituentAttributes, sceneHandler);
153 }
154 }
155
156 // In any case draw the original/resultant solid...
157 sceneHandler.PreAddSolid (theAT, *pVisAttribs);
158 pSol -> DescribeYourselfTo (sceneHandler);
159 sceneHandler.PostAddSolid ();
160 }
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/VRML/src/G4VRML2SceneHandlerFunc.icc:
111 void G4VRML2SCENEHANDLER::AddSolid(const G4Sphere& sphere)
112 {
113 #if defined DEBUG_SCENE_FUNC
114 G4cerr << "***** AddSolid sphere" << "\n" ;
115 #endif
116 VRMLBeginModeling () ;
117 G4VSceneHandler::AddSolid(sphere) ;
118 }
...
...
169 void G4VRML2SCENEHANDLER::AddPrimitive(const G4Polyhedron& polyhedron)
170 {
...
174
175 if (polyhedron.GetNoFacets() == 0) return;
176
177 VRMLBeginModeling () ;
178
179 // Transparency checking: If completely transparent, skip drawing
180 if ( GetPVTransparency() > 0.99 ) { return ; }
181
182 // Current Model
183 const G4VModel* pv_model = GetModel();
184 G4String pv_name = "No model";
185 if (pv_model) pv_name = pv_model->GetCurrentTag() ;
186
187 // VRML codes are generated below
188
189 fDest << "#---------- SOLID: " << pv_name << "\n";
190
...
198
199 fDest << "\t"; fDest << "Shape {" << "\n";
200
201 SendMaterialNode();
202
203 fDest << "\t\t" << "geometry IndexedFaceSet {" << "\n";
204
205 fDest << "\t\t\t" << "coord Coordinate {" << "\n";
206 fDest << "\t\t\t\t" << "point [" << "\n";
207 G4int i, j;
208 for (i = 1, j = polyhedron.GetNoVertices(); j; j--, i++) {
209 G4Point3D point = polyhedron.GetVertex(i);
210
$DYB/external/build/LCG/geant4.9.2.p01/source/visualization/management/include/G4VSceneHandler.hh:
200 void G4VSceneHandler::AddSolid (const G4Box& box) {
201 RequestPrimitives (box);
202 // If your graphics system is sophisticated enough to handle a
203 // particular solid shape as a primitive, in your derived class write a
204 // function to override this. (Note: some compilers warn that your
205 // function "hides" this one. That's OK.)
206 // Your function might look like this...
207 // void G4MyScene::AddSolid (const G4Box& box) {
208 // Get parameters of appropriate object, e.g.:
209 // G4double dx = box.GetXHalfLength ();
210 // G4double dy = box.GetYHalfLength ();
211 // G4double dz = box.GetZHalfLength ();
212 // and Draw or Store in your display List.
213 }
214
215 void G4VSceneHandler::AddSolid (const G4Tubs& tubs) {
216 RequestPrimitives (tubs);
217 }
218
219 void G4VSceneHandler::AddSolid (const G4Cons& cons) {
220 RequestPrimitives (cons);
221 }
///
/// HERE THE POLYHEDRON REPRESENTATION OF THE SOLID SPRINGS INTO EXISTANCE
///
421 void G4VSceneHandler::RequestPrimitives (const G4VSolid& solid) {
422 BeginPrimitives (*fpObjectTransformation);
423 G4NURBS* pNURBS = 0;
424 G4Polyhedron* pPolyhedron = 0;
425 switch (fpViewer -> GetViewParameters () . GetRepStyle ()) {
426 case G4ViewParameters::nurbs:
427 pNURBS = solid.CreateNURBS ();
428 if (pNURBS) {
429 pNURBS -> SetVisAttributes (fpVisAttribs);
430 AddPrimitive (*pNURBS);
431 delete pNURBS;
432 break;
433 }
434 else {
435 G4VisManager::Verbosity verbosity =
436 G4VisManager::GetInstance()->GetVerbosity();
437 if (verbosity >= G4VisManager::errors) {
438 G4cout <<
439 "ERROR: G4VSceneHandler::RequestPrimitives"
440 "\n NURBS not available for "
441 << solid.GetName () << G4endl;
442 G4cout << "Trying polyhedron." << G4endl;
443 }
444 }
445 // Dropping through to polyhedron...
446 case G4ViewParameters::polyhedron:
447 default:
448 G4Polyhedron::SetNumberOfRotationSteps (GetNoOfSides (fpVisAttribs));
449 pPolyhedron = solid.GetPolyhedron ();
450 G4Polyhedron::ResetNumberOfRotationSteps ();
451 if (pPolyhedron) {
452 pPolyhedron -> SetVisAttributes (fpVisAttribs);
453 AddPrimitive (*pPolyhedron);
454 }
455 else {
456 G4VisManager::Verbosity verbosity =
457 G4VisManager::GetInstance()->GetVerbosity();
458 if (verbosity >= G4VisManager::errors) {
459 G4cout <<
460 "ERROR: G4VSceneHandler::RequestPrimitives"
461 "\n Polyhedron not available for " << solid.GetName () <<
462 ".\n This means it cannot be visualized on most systems."
463 "\n Contact the Visualization Coordinator." << G4endl;
464 }
465 }
466 break;
467 }
468 EndPrimitives ();
469 }
[blyth@cms01 source]$ find . -name '*.hh' -exec grep -H GetPolyhedron {} \;
./graphics_reps/include/G4PlacedPolyhedron.hh: const G4Polyhedron& GetPolyhedron () const {return fPolyhedron;}
./geometry/management/include/G4VSolid.hh: virtual G4Polyhedron* GetPolyhedron () const;
./geometry/management/include/G4ReflectedSolid.hh: G4Polyhedron* GetPolyhedron () const;
./geometry/solids/BREPS/include/G4BREPSolid.hh: virtual G4Polyhedron* GetPolyhedron () const;
./geometry/solids/CSG/include/G4CSGSolid.hh: virtual G4Polyhedron* GetPolyhedron () const;
./geometry/solids/specific/include/G4TessellatedSolid.hh:// - Added GetPolyhedron()
./geometry/solids/specific/include/G4TessellatedSolid.hh: virtual G4Polyhedron* GetPolyhedron () const;
./geometry/solids/specific/include/G4VCSGfaceted.hh: virtual G4Polyhedron* GetPolyhedron () const;
./geometry/solids/specific/include/G4TwistedTubs.hh: G4Polyhedron *GetPolyhedron () const;
./geometry/solids/specific/include/G4Paraboloid.hh: G4Polyhedron* GetPolyhedron () const;
./geometry/solids/specific/include/G4EllipticalTube.hh: G4Polyhedron* GetPolyhedron () const;
./geometry/solids/specific/include/G4Ellipsoid.hh: G4Polyhedron* GetPolyhedron () const;
./geometry/solids/specific/include/G4Hype.hh: G4Polyhedron* GetPolyhedron () const;
./geometry/solids/specific/include/G4Tet.hh: G4Polyhedron* GetPolyhedron () const;
./geometry/solids/specific/include/G4VTwistedFaceted.hh: virtual G4Polyhedron *GetPolyhedron () const;
./geometry/solids/specific/include/G4EllipticalCone.hh: G4Polyhedron* GetPolyhedron () const;
./geometry/solids/Boolean/include/G4BooleanSolid.hh: virtual G4Polyhedron* GetPolyhedron () const;
./geometry/solids/Boolean/include/G4DisplacedSolid.hh: virtual G4Polyhedron* GetPolyhedron () const;
[blyth@cms01 source]$
[blyth@cms01 source]$ find . -name '*.cc' -exec grep -H GetPolyhedron {} \;
./visualization/management/src/G4VSceneHandler.cc: pPolyhedron = solid.GetPolyhedron ();
./visualization/modeling/src/G4PhysicalVolumeModel.cc: G4Polyhedron* pOriginal = pSol->GetPolyhedron();
./visualization/modeling/src/G4PhysicalVolumeMassScene.cc: G4Polyhedron* pPolyhedron = solid.GetPolyhedron();
./visualization/modeling/src/G4LogicalVolumeModel.cc: const G4Polyhedron& polyhedron = (*pPPL)[i].GetPolyhedron ();
./geometry/management/src/G4ReflectedSolid.cc:G4ReflectedSolid::GetPolyhedron () const
./geometry/management/src/G4VSolid.cc:G4Polyhedron* G4VSolid::GetPolyhedron () const
./geometry/solids/BREPS/src/G4BREPSolid.cc:G4Polyhedron* G4BREPSolid::GetPolyhedron () const
./geometry/solids/CSG/src/G4CSGSolid.cc:G4Polyhedron* G4CSGSolid::GetPolyhedron () const
./geometry/solids/specific/src/G4VCSGfaceted.cc:// GetPolyhedron
./geometry/solids/specific/src/G4VCSGfaceted.cc:G4Polyhedron* G4VCSGfaceted::GetPolyhedron () const
./geometry/solids/specific/src/G4Tet.cc:// GetPolyhedron
./geometry/solids/specific/src/G4Tet.cc:G4Polyhedron* G4Tet::GetPolyhedron () const
./geometry/solids/specific/src/G4EllipticalTube.cc:// GetPolyhedron
./geometry/solids/specific/src/G4EllipticalTube.cc:G4Polyhedron* G4EllipticalTube::GetPolyhedron () const
./geometry/solids/specific/src/G4Hype.cc:// GetPolyhedron
./geometry/solids/specific/src/G4Hype.cc:G4Polyhedron* G4Hype::GetPolyhedron () const
./geometry/solids/specific/src/G4VTwistedFaceted.cc://* GetPolyhedron -----------------------------------------------------
./geometry/solids/specific/src/G4VTwistedFaceted.cc:G4Polyhedron* G4VTwistedFaceted::GetPolyhedron() const
./geometry/solids/specific/src/G4TessellatedSolid.cc:// GetPolyhedron
./geometry/solids/specific/src/G4TessellatedSolid.cc:G4Polyhedron* G4TessellatedSolid::GetPolyhedron () const
./geometry/solids/specific/src/G4Paraboloid.cc:G4Polyhedron* G4Paraboloid::GetPolyhedron () const
./geometry/solids/specific/src/G4Ellipsoid.cc:G4Polyhedron* G4Ellipsoid::GetPolyhedron () const
./geometry/solids/specific/src/G4EllipticalCone.cc:G4Polyhedron* G4EllipticalCone::GetPolyhedron () const
./geometry/solids/specific/src/G4TwistedTubs.cc://* GetPolyhedron -----------------------------------------------------
./geometry/solids/specific/src/G4TwistedTubs.cc:G4Polyhedron* G4TwistedTubs::GetPolyhedron () const
./geometry/solids/Boolean/src/G4DisplacedSolid.cc:G4Polyhedron* G4DisplacedSolid::GetPolyhedron () const
./geometry/solids/Boolean/src/G4IntersectionSolid.cc: G4Polyhedron* pA = fPtrSolidA->GetPolyhedron();
./geometry/solids/Boolean/src/G4IntersectionSolid.cc: G4Polyhedron* pB = fPtrSolidB->GetPolyhedron();
./geometry/solids/Boolean/src/G4SubtractionSolid.cc: G4Polyhedron* pA = fPtrSolidA->GetPolyhedron();
./geometry/solids/Boolean/src/G4SubtractionSolid.cc: G4Polyhedron* pB = fPtrSolidB->GetPolyhedron();
./geometry/solids/Boolean/src/G4UnionSolid.cc: G4Polyhedron* pA = fPtrSolidA->GetPolyhedron();
./geometry/solids/Boolean/src/G4UnionSolid.cc: G4Polyhedron* pB = fPtrSolidB->GetPolyhedron();
./geometry/solids/Boolean/src/G4BooleanSolid.cc:G4Polyhedron* G4BooleanSolid::GetPolyhedron () const
./geometry/navigation/src/G4DrawVoxels.cc: pVVisManager->Draw((*pplist)[i].GetPolyhedron(),
[blyth@cms01 source]$
1048 //* GetPolyhedron -----------------------------------------------------
1049
1050 G4Polyhedron* G4TwistedTubs::GetPolyhedron () const
1051 {
1052 if ((!fpPolyhedron) ||
1053 (fpPolyhedron->GetNumberOfRotationStepsAtTimeOfCreation() !=
1054 fpPolyhedron->GetNumberOfRotationSteps()))
1055 {
1056 delete fpPolyhedron;
1057 fpPolyhedron = CreatePolyhedron();
1058 }
1059 return fpPolyhedron;
1060 }
1003 G4Polyhedron* G4TwistedTubs::CreatePolyhedron () const
1004 {
1005 // number of meshes
1006 //
1007 G4double dA = std::max(fDPhi,fPhiTwist);
1008 const G4int m =
1009 G4int(G4Polyhedron::GetNumberOfRotationSteps() * dA / twopi) + 2;
1010 const G4int n =
1011 G4int(G4Polyhedron::GetNumberOfRotationSteps() * fPhiTwist / twopi) + 2;
1012
1013 const G4int nnodes = 4*(m-1)*(n-2) + 2*m*m ;
1014 const G4int nfaces = 4*(m-1)*(n-1) + 2*(m-1)*(m-1) ;
1015
1016 G4Polyhedron *ph=new G4Polyhedron;
1017 typedef G4double G4double3[3];
1018 typedef G4int G4int4[4];
1019 G4double3* xyz = new G4double3[nnodes]; // number of nodes
1020 G4int4* faces = new G4int4[nfaces] ; // number of faces
1021 fLowerEndcap->GetFacets(m,m,xyz,faces,0) ;
1022 fUpperEndcap->GetFacets(m,m,xyz,faces,1) ;
1023 fInnerHype->GetFacets(m,n,xyz,faces,2) ;
1024 fFormerTwisted->GetFacets(m,n,xyz,faces,3) ;
1025 fOuterHype->GetFacets(m,n,xyz,faces,4) ;
1026 fLatterTwisted->GetFacets(m,n,xyz,faces,5) ;
1027
1028 ph->createPolyhedron(nnodes,nfaces,xyz,faces);
1029
1030 delete[] xyz;
1031 delete[] faces;
1032
1033 return ph;
1034 }
74 G4Polyhedron* G4CSGSolid::GetPolyhedron () const
75 {
76 if (!fpPolyhedron ||
77 fpPolyhedron->GetNumberOfRotationStepsAtTimeOfCreation() !=
78 fpPolyhedron->GetNumberOfRotationSteps())
79 {
80 delete fpPolyhedron;
81 fpPolyhedron = CreatePolyhedron();
82 }
83 return fpPolyhedron;
1065 void G4TwistedTubs::CreateSurfaces()
1066 {
1067 // create 6 surfaces of TwistedTub
1068
1069 G4ThreeVector x0(0, 0, fEndZ[0]);
1070 G4ThreeVector n (0, 0, -1);
1071
1072 fLowerEndcap = new G4TwistTubsFlatSide("LowerEndcap",
1073 fEndInnerRadius, fEndOuterRadius,
1074 fDPhi, fEndPhi, fEndZ, -1) ;
1075
1076 fUpperEndcap = new G4TwistTubsFlatSide("UpperEndcap",
1077 fEndInnerRadius, fEndOuterRadius,
1078 fDPhi, fEndPhi, fEndZ, 1) ;
1079
1080 G4RotationMatrix rotHalfDPhi;
1081 rotHalfDPhi.rotateZ(0.5*fDPhi);
....
1106 // set neighbour surfaces
1107 //
1108 fLowerEndcap->SetNeighbours(fInnerHype, fLatterTwisted,
1109 fOuterHype, fFormerTwisted);
1110 fUpperEndcap->SetNeighbours(fInnerHype, fLatterTwisted,
1111 fOuterHype, fFormerTwisted);
....
1120 }
[blyth@cms01 source]$ find . -name '*.hh' -exec grep -H CreatePolyhedron {} \;
./geometry/management/include/G4VSolid.hh: virtual G4Polyhedron* CreatePolyhedron () const;
./geometry/management/include/G4ReflectedSolid.hh: G4Polyhedron* CreatePolyhedron () const ;
./geometry/solids/BREPS/include/G4BREPSolidPCone.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/BREPS/include/G4BREPSolid.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/BREPS/include/G4BREPSolidPolyhedra.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/CSG/include/G4Orb.hh: G4Polyhedron* CreatePolyhedron() const;
./geometry/solids/CSG/include/G4Trap.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/CSG/include/G4Cons.hh: G4Polyhedron* CreatePolyhedron() const;
./geometry/solids/CSG/include/G4Sphere.hh: G4Polyhedron* CreatePolyhedron() const;
./geometry/solids/CSG/include/G4Torus.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/CSG/include/G4Trd.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/CSG/include/G4Tubs.hh:// 22.07.96 J.Allison: Changed SendPolyhedronTo to CreatePolyhedron
./geometry/solids/CSG/include/G4Tubs.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/CSG/include/G4Para.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/CSG/include/G4Box.hh:// and SendPolyhedronTo() to CreatePolyhedron()
./geometry/solids/CSG/include/G4Box.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/specific/include/G4TessellatedSolid.hh: virtual G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/specific/include/G4Polycone.hh: G4Polyhedron* CreatePolyhedron() const;
./geometry/solids/specific/include/G4VCSGfaceted.hh: virtual G4Polyhedron* CreatePolyhedron() const = 0;
./geometry/solids/specific/include/G4TwistedTubs.hh: G4Polyhedron *CreatePolyhedron () const;
./geometry/solids/specific/include/G4Paraboloid.hh: G4Polyhedron* CreatePolyhedron() const;
./geometry/solids/specific/include/G4EllipticalTube.hh: G4Polyhedron* CreatePolyhedron() const;
./geometry/solids/specific/include/G4Ellipsoid.hh: G4Polyhedron* CreatePolyhedron() const;
./geometry/solids/specific/include/G4Polyhedra.hh: G4Polyhedron* CreatePolyhedron() const;
./geometry/solids/specific/include/G4Hype.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/specific/include/G4Tet.hh: G4Polyhedron* CreatePolyhedron () const;
./geometry/solids/specific/include/G4VTwistedFaceted.hh: virtual G4Polyhedron *CreatePolyhedron () const ;
./geometry/solids/specific/include/G4EllipticalCone.hh: G4Polyhedron* CreatePolyhedron() const;
./geometry/solids/Boolean/include/G4DisplacedSolid.hh: G4Polyhedron* CreatePolyhedron () const ;
./geometry/solids/Boolean/include/G4UnionSolid.hh: G4Polyhedron* CreatePolyhedron () const ;
./geometry/solids/Boolean/include/G4SubtractionSolid.hh: G4Polyhedron* CreatePolyhedron () const ;
./geometry/solids/Boolean/include/G4IntersectionSolid.hh: G4Polyhedron* CreatePolyhedron () const ;
$DYB/external/build/LCG/geant4.9.2.p01/source/geometry/solids/CSG/src/G4Tubs.cc:
1890 G4Polyhedron* G4Tubs::CreatePolyhedron () const
1891 {
1892 return new G4PolyhedronTubs (fRMin, fRMax, fDz, fSPhi, fDPhi) ;
1893 }