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 // $Id$ 27 // 28 // 28 // 29 // 29 // Created: Mar. 31, 2009 Akinori Kimura 30 // Created: Mar. 31, 2009 Akinori Kimura 30 // 31 // 31 32 32 33 33 #define __G_ANSI_C__ 34 #define __G_ANSI_C__ 34 #define G4GMocrenFile_STRUCTURE_PRIORITY 1. 35 #define G4GMocrenFile_STRUCTURE_PRIORITY 1. 35 36 36 #include "G4ios.hh" 37 #include "G4ios.hh" 37 #include <cstdio> 38 #include <cstdio> 38 #include <cstring> 39 #include <cstring> 39 #include <cassert> 40 #include <cassert> 40 41 41 #include "G4VisManager.hh" 42 #include "G4VisManager.hh" 42 #include "G4Scene.hh" 43 #include "G4Scene.hh" 43 #include "G4Vector3D.hh" 44 #include "G4Vector3D.hh" 44 #include "G4VisExtent.hh" 45 #include "G4VisExtent.hh" 45 #include "G4LogicalVolume.hh" 46 #include "G4LogicalVolume.hh" 46 #include "G4VSolid.hh" 47 #include "G4VSolid.hh" 47 48 48 #include "G4GMocrenFile.hh" 49 #include "G4GMocrenFile.hh" 49 #include "G4GMocrenFileSceneHandler.hh" 50 #include "G4GMocrenFileSceneHandler.hh" 50 #include "G4GMocrenFileViewer.hh" 51 #include "G4GMocrenFileViewer.hh" 51 #include "G4GMocrenMessenger.hh" 52 #include "G4GMocrenMessenger.hh" 52 53 53 54 54 //----- constants 55 //----- constants 55 56 56 //-- for a debugging 57 //-- for a debugging 57 const G4bool GFDEBUG = false; << 58 const bool GFDEBUG = false; 58 59 59 //----- G4GMocrenFileViewer, constructor 60 //----- G4GMocrenFileViewer, constructor 60 G4GMocrenFileViewer::G4GMocrenFileViewer (G4GM 61 G4GMocrenFileViewer::G4GMocrenFileViewer (G4GMocrenFileSceneHandler& sceneHandler, 61 G4GMocrenMessenger &, 62 G4GMocrenMessenger &, 62 const G4String& name) 63 const G4String& name) 63 : G4VViewer (sceneHandler, sceneHandler.Incr 64 : G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name), 64 kSceneHandler (sceneHandler) 65 kSceneHandler (sceneHandler) 65 { 66 { 66 // Set a g4.gdd-file viewer 67 // Set a g4.gdd-file viewer 67 std::strncpy( kG4GddViewer, "gMocren", 8); 68 std::strncpy( kG4GddViewer, "gMocren", 8); 68 if( std::getenv( "G4GMocrenFile_VIEWER" ) != << 69 if( getenv( "G4GMocrenFile_VIEWER" ) != NULL ) { 69 char * env = std::getenv( "G4GMocrenFile_V << 70 char * env = getenv( "G4GMocrenFile_VIEWER" ); 70 G4int len = (G4int)std::strlen(env); << 71 int len = std::strlen(env); 71 if(len >= 32) { 72 if(len >= 32) { 72 G4Exception("G4GMocrenFileViewer::G4GMoc 73 G4Exception("G4GMocrenFileViewer::G4GMocrenFileViewer(*)", 73 "gMocren1000", FatalExceptio 74 "gMocren1000", FatalException, 74 "Invalid length of string se 75 "Invalid length of string set in G4GMocrenFile_VIEWER"); 75 } 76 } 76 std::strncpy( kG4GddViewer, env, sizeof(kG << 77 std::strncpy( kG4GddViewer, env, len); 77 kG4GddViewer[sizeof(kG4GddViewer) - 1] = ' << 78 //std::strcpy( kG4GddViewer, getenv( "G4GM 78 //std::strcpy( kG4GddViewer, getenv( "G4GMocrenFile_VIEWER" ) ) ; 79 } 79 } 80 80 81 // string for viewer invocation 81 // string for viewer invocation 82 if ( !std::strcmp( kG4GddViewer, "NONE" ) ) 82 if ( !std::strcmp( kG4GddViewer, "NONE" ) ) { 83 83 84 //std::strcpy( kG4GddViewerInvocation, "" 84 //std::strcpy( kG4GddViewerInvocation, "" ); 85 kG4GddViewerInvocation[0] = '\0'; 85 kG4GddViewerInvocation[0] = '\0'; 86 } else { 86 } else { 87 87 88 std::strncpy( kG4GddViewerInvocation, kG4G << 88 std::strncpy( kG4GddViewerInvocation, kG4GddViewer, std::strlen(kG4GddViewer)); 89 sizeof(kG4GddViewerInvocation << 89 std::strncat( kG4GddViewerInvocation, " ", 1); 90 kG4GddViewerInvocation[sizeof(kG4GddViewer << 91 G4int n = sizeof(kG4GddViewerInvocation) << 92 - (G4int)std::strlen(kG4GddViewerI << 93 std::strncat( kG4GddViewerInvocation, " ", << 94 const char * gddfname = kSceneHandler.GetG 90 const char * gddfname = kSceneHandler.GetGddFileName(); 95 G4int len = (G4int)std::strlen(gddfname); << 91 int len = std::strlen(gddfname); 96 if(len >= 64) { 92 if(len >= 64) { 97 G4Exception("G4GMocrenFileViewer::G4GMoc 93 G4Exception("G4GMocrenFileViewer::G4GMocrenFileViewer(*)", 98 "gMocren1001", FatalExceptio 94 "gMocren1001", FatalException, 99 "Invalid length of the GDD f 95 "Invalid length of the GDD file name"); 100 } 96 } 101 n = sizeof(kG4GddViewerInvocation) << 97 std::strncat( kG4GddViewerInvocation, gddfname, len ); 102 - (G4int)std::strlen(kG4GddViewerInvocat << 103 std::strncat( kG4GddViewerInvocation, gddf << 104 } 98 } 105 99 106 } 100 } 107 101 108 //----- G4GMocrenFileViewer, destructor 102 //----- G4GMocrenFileViewer, destructor 109 G4GMocrenFileViewer::~G4GMocrenFileViewer () 103 G4GMocrenFileViewer::~G4GMocrenFileViewer () 110 {} 104 {} 111 105 112 //----- G4GMocrenFileViewer::SetView () 106 //----- G4GMocrenFileViewer::SetView () 113 void G4GMocrenFileViewer::SetView () 107 void G4GMocrenFileViewer::SetView () 114 { 108 { 115 if(GFDEBUG) 109 if(GFDEBUG) 116 if (G4VisManager::GetVerbosity() >= G4VisM 110 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 117 G4cout << "***** G4GMocrenFileViewer::Se 111 G4cout << "***** G4GMocrenFileViewer::SetView(): No effects" << G4endl; 118 112 119 // Do nothing, since DAWN is running as a di 113 // Do nothing, since DAWN is running as a different process. 120 // SendViewParameters () will do this job in 114 // SendViewParameters () will do this job instead. 121 } 115 } 122 116 123 117 124 //----- G4GMocrenFileViewer::ClearView() 118 //----- G4GMocrenFileViewer::ClearView() 125 void 119 void 126 G4GMocrenFileViewer::ClearView( void ) 120 G4GMocrenFileViewer::ClearView( void ) 127 { 121 { 128 if(GFDEBUG) { << 122 if(GFDEBUG) 129 if (G4VisManager::GetVerbosity() >= G4VisM << 123 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 130 G4cout << "***** G4GMocrenFileViewer::Cl 124 G4cout << "***** G4GMocrenFileViewer::ClearView (): No effects " << G4endl; 131 } << 125 132 } << 133 //if(kSceneHandler.kGddDest) { 126 //if(kSceneHandler.kGddDest) { 134 //kSceneHandler.kGddDest.close(); 127 //kSceneHandler.kGddDest.close(); 135 // Re-open with same filename... 128 // Re-open with same filename... 136 //kSceneHandler.kGddDest.open(kSceneHandle 129 //kSceneHandler.kGddDest.open(kSceneHandler.kGddFileName); 137 kSceneHandler.kFlagInModeling = false; 130 kSceneHandler.kFlagInModeling = false; 138 kSceneHandler.GFBeginModeling(); 131 kSceneHandler.GFBeginModeling(); 139 //} 132 //} 140 } 133 } 141 134 142 135 143 //----- G4GMocrenFileViewer::DrawView () 136 //----- G4GMocrenFileViewer::DrawView () 144 void G4GMocrenFileViewer::DrawView () 137 void G4GMocrenFileViewer::DrawView () 145 { 138 { 146 if(GFDEBUG) 139 if(GFDEBUG) 147 if (G4VisManager::GetVerbosity() >= G4VisM 140 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 148 G4cout << "***** G4GMocrenFileViewer::Dr 141 G4cout << "***** G4GMocrenFileViewer::DrawView () " << G4endl; 149 142 150 //----- 143 //----- 151 kSceneHandler.GFBeginModeling() ; 144 kSceneHandler.GFBeginModeling() ; 152 145 153 //----- Always visit G4 kernel 146 //----- Always visit G4 kernel 154 NeedKernelVisit (); 147 NeedKernelVisit (); 155 148 156 //----- Draw 149 //----- Draw 157 G4VViewer::ProcessView () ; 150 G4VViewer::ProcessView () ; 158 151 159 } // G4GMocrenFileViewer::DrawView () 152 } // G4GMocrenFileViewer::DrawView () 160 153 161 154 162 155 163 //----- G4GMocrenFileViewer::ShowView() 156 //----- G4GMocrenFileViewer::ShowView() 164 void G4GMocrenFileViewer::ShowView( void ) 157 void G4GMocrenFileViewer::ShowView( void ) 165 { 158 { 166 if(GFDEBUG) 159 if(GFDEBUG) 167 if (G4VisManager::GetVerbosity() >= G4VisM 160 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) 168 G4cout << "***** G4GMocrenFileViewer::Sh 161 G4cout << "***** G4GMocrenFileViewer::ShowView () " << G4endl; 169 162 170 if( kSceneHandler.GFIsInModeling() ) 163 if( kSceneHandler.GFIsInModeling() ) 171 { 164 { 172 //----- End of modeling 165 //----- End of modeling 173 // !EndModeling, !DrawAll, !CloseDevice, 166 // !EndModeling, !DrawAll, !CloseDevice, 174 // close g4.gdd 167 // close g4.gdd 175 kSceneHandler.GFEndModeling(); 168 kSceneHandler.GFEndModeling(); 176 169 177 //----- Output DAWN GUI file 170 //----- Output DAWN GUI file 178 //SendViewParameters(); 171 //SendViewParameters(); 179 172 180 //----- string for viewer invocation 173 //----- string for viewer invocation 181 if ( !strcmp( kG4GddViewer, "NONE" ) ) { 174 if ( !strcmp( kG4GddViewer, "NONE" ) ) { 182 175 183 kG4GddViewerInvocation[0] = '\0'; 176 kG4GddViewerInvocation[0] = '\0'; 184 //std::strcpy( kG4GddViewerInvocation, "" ); 177 //std::strcpy( kG4GddViewerInvocation, "" ); 185 } else { 178 } else { 186 179 187 std::strncpy( kG4GddViewerInvocation, << 180 std::strncpy( kG4GddViewerInvocation, kG4GddViewer, std::strlen(kG4GddViewer)); 188 sizeof(kG4GddViewerInvoca << 181 std::strncat( kG4GddViewerInvocation, " ", 1); 189 kG4GddViewerInvocation[sizeof(kG4GddVi << 190 G4int n = sizeof(kG4GddViewerInvocatio << 191 - (G4int)std::strlen(kG4GddVie << 192 std::strncat( kG4GddViewerInvocation, << 193 const char * gddfname = kSceneHandler. 182 const char * gddfname = kSceneHandler.GetGddFileName(); 194 G4int len = (G4int)std::strlen(gddfnam << 183 int len = std::strlen(gddfname); 195 if(len >= 64) { 184 if(len >= 64) { 196 G4Exception("G4GMocrenFileViewer::Sh 185 G4Exception("G4GMocrenFileViewer::ShowView()", 197 "gMocren1002", FatalExce 186 "gMocren1002", FatalException, 198 "Invalid length of the G 187 "Invalid length of the GDD file name"); 199 } 188 } 200 n = sizeof(kG4GddViewerInvocation) << 189 std::strncat( kG4GddViewerInvocation, gddfname, len); 201 - (G4int)std::strlen(kG4GddViewerInv << 202 std::strncat( kG4GddViewerInvocation, << 203 } 190 } 204 191 205 } 192 } 206 193 207 } // G4GMocrenFileViewer::ShowView() 194 } // G4GMocrenFileViewer::ShowView() 208 195 209 196