VRML2FILE implementation ========================== .. contents:: :local: Observations ------------- The VRML2 polyhedra created, have either triangle or quad faces ? * how to switch to triangle ? or just fix by splitting quad afterwards ? Visualization Steering ---------------------- stacktrace from draw command to graphics primitives ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: (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::allocator >> = {static npos = 4294967295, _M_dataplus = {> = {<__gnu_cxx::new_allocator> = {}, }, _M_p = 0xbfabc1d8 "o2$\020\001"}}, }) at src/G4VisCommandsViewer.cc:1141 #15 0x072c1dc4 in G4UIcommand::DoIt (this=0xbf8b010, parameterList= {,std::allocator >> = {static npos = 4294967295, _M_dataplus = {> = {<__gnu_cxx::new_allocator> = {}, }, _M_p = 0xbfabc28c "$2$\020\023"}}, }) 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::allocator >> = {static npos = 4294967295, _M_dataplus = {> = {<__gnu_cxx::new_allocator> = {}, }, _M_p = 0xbfabc2f8 "i(R)$\020i(R)$\020THaN(w\r\005"}}, }) at src/G4UImanager.cc:354 #18 0xb70d8adb in G4VisCommandViewerFlush::SetNewValue (this=0xbf89e98, newValue= {,std::allocator >> = {static npos = 4294967295, _M_dataplus = {> = {<__gnu_cxx::new_allocator> = {}, }, _M_p = 0xbfabc438 "d2$\020\001"}}, }) at src/G4VisCommandsViewer.cc:801 #19 0x072c1dc4 in G4UIcommand::DoIt (this=0xbf8a028, parameterList= {,std::allocator >> = {static npos = 4294967295, _M_dataplus = {> = {<__gnu_cxx::new_allocator> = {}, }, _M_p = 0xbfabc4ec "1/4\233\200\004yyyy\021"}}, }) 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::allocator >> = {static npos = 4294967295, _M_dataplus = {> = {<__gnu_cxx::new_allocator> = {}, }, _M_p = 0xbfabc5c8 "\\\a/\v\230\232a\vO\204\032\005~O]OAE<}) 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; Traversing scene data ~~~~~~~~~~~~~~~~~~~~~~ :: [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& 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) { runDurationModelList ~~~~~~~~~~~~~~~~~~~~~~~ $DYB/external/build/LCG/geant4.9.2.p01/source/visualization/management/include/G4Scene.hh:: 74 const std::vector& 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 models; 1655 std::vector foundVolumes; 1656 G4VPhysicalVolume* foundWorld = 0; 1657 std::vector foundDepths; 1658 std::vector 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::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))` G4PhysicalVolumeModel ----------------------- $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 } DescribeYourselfTo -------------------- :: [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 } GetPolyhedron --------------- :: [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; CreateSurfaces ---------------- :: 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 } CreatePolyhedron ---------------- :: [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 }