Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // 27 // 28 // G4VRML2FileViewer.cc 28 // G4VRML2FileViewer.cc 29 // Satoshi Tanaka & Yasuhide Sawada 29 // Satoshi Tanaka & Yasuhide Sawada 30 30 >> 31 31 //#define DEBUG_FR_VIEW 32 //#define DEBUG_FR_VIEW 32 33 33 #include <cmath> 34 #include <cmath> 34 35 35 #include "G4VisManager.hh" 36 #include "G4VisManager.hh" 36 #include "G4Scene.hh" 37 #include "G4Scene.hh" 37 #include "G4VRML2FileViewer.hh" 38 #include "G4VRML2FileViewer.hh" 38 #include "G4VRML2FileSceneHandler.hh" 39 #include "G4VRML2FileSceneHandler.hh" 39 #include "G4VRML2File.hh" 40 #include "G4VRML2File.hh" 40 #include "G4SystemOfUnits.hh" 41 #include "G4SystemOfUnits.hh" 41 #include "G4ios.hh" 42 #include "G4ios.hh" 42 43 43 G4VRML2FileViewer::G4VRML2FileViewer(G4VRML2Fi 44 G4VRML2FileViewer::G4VRML2FileViewer(G4VRML2FileSceneHandler& sceneHandler, 44 const G4S << 45 const G4String& name) : 45 : G4VViewer(sceneHandler, sceneHandler.Incre << 46 G4VViewer(sceneHandler, 46 , fSceneHandler(sceneHandler) << 47 sceneHandler.IncrementViewCount(), 47 , fDest(sceneHandler.fDest) << 48 name), >> 49 fSceneHandler(sceneHandler), >> 50 fDest(sceneHandler.fDest) 48 { 51 { 49 fViewHalfAngle = 30. * deg; 52 fViewHalfAngle = 30. * deg; 50 fsin_VHA = std::sin(fViewHalfAngle); << 53 fsin_VHA = std::sin ( fViewHalfAngle ) ; 51 } 54 } 52 55 53 G4VRML2FileViewer::~G4VRML2FileViewer() {} << 56 G4VRML2FileViewer::~G4VRML2FileViewer() >> 57 {} 54 58 55 void G4VRML2FileViewer::SetView() 59 void G4VRML2FileViewer::SetView() 56 { 60 { 57 #if defined DEBUG_FR_VIEW 61 #if defined DEBUG_FR_VIEW 58 if(G4VisManager::GetVerbosity() >= G4VisMana << 62 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 59 G4cout << "***** G4VRML2FileViewer::SetVie << 63 G4cout << "***** G4VRML2FileViewer::SetView(): No effects" << G4endl; 60 #endif 64 #endif 61 65 62 // Do nothing, since VRML a browser is runni << 66 // Do nothing, since VRML a browser is running as a different process. 63 // SendViewParameters () will do this job in << 67 // SendViewParameters () will do this job instead. >> 68 64 } 69 } 65 70 66 void G4VRML2FileViewer::DrawView() 71 void G4VRML2FileViewer::DrawView() 67 { 72 { 68 #if defined DEBUG_FR_VIEW 73 #if defined DEBUG_FR_VIEW 69 if(G4VisManager::GetVerbosity() >= G4VisMana << 74 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 70 G4cout << "***** G4VRML2FileViewer::DrawVi << 75 G4cout << "***** G4VRML2FileViewer::DrawView()" << G4endl; 71 #endif 76 #endif 72 77 73 fSceneHandler.VRMLBeginModeling(); << 78 fSceneHandler.VRMLBeginModeling() ; 74 79 75 // Viewpoint node << 80 // Viewpoint node 76 SendViewParameters(); << 81 SendViewParameters(); 77 82 78 // Here is a minimal DrawView() function. << 83 // Here is a minimal DrawView() function. 79 NeedKernelVisit(); << 84 NeedKernelVisit(); 80 ProcessView(); << 85 ProcessView(); 81 FinishView(); << 86 FinishView(); 82 } 87 } 83 88 84 void G4VRML2FileViewer::ClearView(void) 89 void G4VRML2FileViewer::ClearView(void) 85 { 90 { 86 #if defined DEBUG_FR_VIEW 91 #if defined DEBUG_FR_VIEW 87 if(G4VisManager::GetVerbosity() >= G4VisMana << 92 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 88 G4cout << "***** G4VRML2File1View::ClearVi << 93 G4cout << "***** G4VRML2File1View::ClearView()" << G4endl; 89 #endif 94 #endif 90 if(fSceneHandler.fFlagDestOpen) << 95 if(fSceneHandler.fFlagDestOpen) { 91 { << 92 fSceneHandler.fDest.close(); 96 fSceneHandler.fDest.close(); 93 // Re-open with same filename... 97 // Re-open with same filename... 94 fSceneHandler.fDest.open(fSceneHandler.fVR 98 fSceneHandler.fDest.open(fSceneHandler.fVRMLFileName); 95 fSceneHandler.fDest << "#VRML V2.0 utf8" << 99 fSceneHandler.fDest << "#VRML V2.0 utf8" << "\n"; 96 << "\n"; << 100 fSceneHandler.fDest << "# Generated by VRML 2.0 driver of GEANT4\n" << "\n"; 97 fSceneHandler.fDest << "# Generated by VRM << 98 << "\n"; << 99 } 101 } 100 } 102 } 101 103 102 void G4VRML2FileViewer::ShowView(void) 104 void G4VRML2FileViewer::ShowView(void) 103 { 105 { 104 #if defined DEBUG_FR_VIEW 106 #if defined DEBUG_FR_VIEW 105 if(G4VisManager::GetVerbosity() >= G4VisMana << 107 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 106 G4cout << "***** G4VRML2FileViewer::ShowVi << 108 G4cout << "***** G4VRML2FileViewer::ShowView()" << G4endl; 107 #endif 109 #endif 108 fSceneHandler.VRMLEndModeling(); << 110 fSceneHandler.VRMLEndModeling(); 109 } 111 } 110 112 111 void G4VRML2FileViewer::FinishView(void) 113 void G4VRML2FileViewer::FinishView(void) 112 { 114 { 113 #if defined DEBUG_FR_VIEW 115 #if defined DEBUG_FR_VIEW 114 if(G4VisManager::GetVerbosity() >= G4VisMana << 116 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 115 G4cout << "***** G4VRML2FileViewer::Finish << 117 G4cout << "***** G4VRML2FileViewer::FinishView(): No effects" << G4endl; 116 #endif 118 #endif 117 } 119 } 118 120 119 void G4VRML2FileViewer::SendViewParameters() << 121 void G4VRML2FileViewer::SendViewParameters () 120 { 122 { 121 // Calculates view representation based on e 123 // Calculates view representation based on extent of object being 122 // viewed and (initial) direction of camera. 124 // viewed and (initial) direction of camera. (Note: it can change 123 // later due to user interaction via visuali 125 // later due to user interaction via visualization system's GUI.) 124 126 125 #if defined DEBUG_FR_VIEW 127 #if defined DEBUG_FR_VIEW 126 if(G4VisManager::GetVerbosity() >= G4VisMana << 128 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 127 G4cout << "***** G4VRML2FileViewer::SendVi << 129 G4cout << "***** G4VRML2FileViewer::SendViewParameters()\n"; 128 #endif << 130 #endif 129 << 131 130 // error recovery << 132 // error recovery 131 if(fsin_VHA < 1.0e-6) << 133 if ( fsin_VHA < 1.0e-6 ) { return ; } 132 { << 134 133 return; << 135 // camera distance 134 } << 136 G4double extent_radius = fSceneHandler.GetScene()->GetExtent().GetExtentRadius(); >> 137 G4double camera_distance = extent_radius / fsin_VHA ; >> 138 >> 139 // camera position on Z axis >> 140 const G4Point3D& target_point >> 141 = fSceneHandler.GetScene()->GetStandardTargetPoint() >> 142 + fVP.GetCurrentTargetPoint(); >> 143 G4double E_z = target_point.z() + camera_distance; >> 144 G4Point3D E(0.0, 0.0, E_z ); >> 145 >> 146 // VRML codes are generated below >> 147 fDest << G4endl; >> 148 fDest << "#---------- CAMERA" << G4endl; >> 149 fDest << "Viewpoint {" << G4endl; >> 150 fDest << "\t" << "position " ; >> 151 fDest << E.x() << " " ; >> 152 fDest << E.y() << " " ; >> 153 fDest << E.z() << G4endl ; >> 154 fDest << "}" << G4endl; >> 155 fDest << G4endl; 135 156 136 // camera distance << 137 G4double extent_radius = << 138 fSceneHandler.GetScene()->GetExtent().GetE << 139 G4double camera_distance = extent_radius / f << 140 << 141 // camera position on Z axis << 142 const G4Point3D& target_point = << 143 fSceneHandler.GetScene()->GetStandardTarge << 144 fVP.GetCurrentTargetPoint(); << 145 G4double E_z = target_point.z() + camera_dis << 146 G4Point3D E(0.0, 0.0, E_z); << 147 << 148 // VRML codes are generated below << 149 fDest << G4endl; << 150 fDest << "#---------- CAMERA" << G4endl; << 151 fDest << "Viewpoint {" << G4endl; << 152 fDest << "\t" << 153 << "position "; << 154 fDest << E.x() << " "; << 155 fDest << E.y() << " "; << 156 fDest << E.z() << G4endl; << 157 fDest << "}" << G4endl; << 158 fDest << G4endl; << 159 } 157 } 160 158