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: G4VisCommandsGeometry.cc,v 1.4 2007/01/05 16:29:38 allison Exp $ >> 28 // GEANT4 tag $Name: geant4-08-03 $ 27 29 28 // /vis/geometry commands - John Allison 31st 30 // /vis/geometry commands - John Allison 31st January 2006 29 31 30 #include "G4VisCommandsGeometry.hh" 32 #include "G4VisCommandsGeometry.hh" 31 33 32 #include "G4UIcmdWithAString.hh" 34 #include "G4UIcmdWithAString.hh" 33 #include "G4VisManager.hh" 35 #include "G4VisManager.hh" 34 #include "G4LogicalVolumeStore.hh" 36 #include "G4LogicalVolumeStore.hh" 35 #include "G4UImanager.hh" 37 #include "G4UImanager.hh" 36 38 37 #define G4warn G4cout << 38 << 39 std::map<G4LogicalVolume*, const G4VisAttribut 39 std::map<G4LogicalVolume*, const G4VisAttributes*> 40 G4VVisCommandGeometry::fVisAttsMap; 40 G4VVisCommandGeometry::fVisAttsMap; 41 41 42 G4VVisCommandGeometry::~G4VVisCommandGeometry( 42 G4VVisCommandGeometry::~G4VVisCommandGeometry() 43 { 43 { 44 // Delete all vis atts that were "new". Do 44 // Delete all vis atts that were "new". Do something like "restore" 45 // without the "rebuild". 45 // without the "rebuild". 46 } 46 } 47 47 48 ////////////// /vis/geometry/list //////////// 48 ////////////// /vis/geometry/list /////////////////////////////////////// 49 49 50 G4VisCommandGeometryList::G4VisCommandGeometry 50 G4VisCommandGeometryList::G4VisCommandGeometryList() 51 { 51 { 52 G4bool omitable; 52 G4bool omitable; 53 fpCommand = new G4UIcmdWithAString("/vis/geo 53 fpCommand = new G4UIcmdWithAString("/vis/geometry/list", this); 54 fpCommand -> SetGuidance("Lists vis attribut 54 fpCommand -> SetGuidance("Lists vis attributes of logical volume(s)."); 55 fpCommand -> SetGuidance("\"all\" lists all 55 fpCommand -> SetGuidance("\"all\" lists all logical volumes."); 56 fpCommand -> SetParameterName("logical-volum 56 fpCommand -> SetParameterName("logical-volume-name", omitable = true); 57 fpCommand -> SetDefaultValue("all"); 57 fpCommand -> SetDefaultValue("all"); 58 } 58 } 59 59 60 G4VisCommandGeometryList::~G4VisCommandGeometr 60 G4VisCommandGeometryList::~G4VisCommandGeometryList() 61 { 61 { 62 delete fpCommand; 62 delete fpCommand; 63 } 63 } 64 64 65 G4String G4VisCommandGeometryList::GetCurrentV 65 G4String G4VisCommandGeometryList::GetCurrentValue(G4UIcommand*) 66 { 66 { 67 return ""; 67 return ""; 68 } 68 } 69 69 70 void G4VisCommandGeometryList::SetNewValue(G4U 70 void G4VisCommandGeometryList::SetNewValue(G4UIcommand*, G4String newValue) 71 { 71 { 72 G4LogicalVolumeStore *pLVStore = G4LogicalVo 72 G4LogicalVolumeStore *pLVStore = G4LogicalVolumeStore::GetInstance(); 73 G4bool found = false; 73 G4bool found = false; 74 for (size_t iLV = 0; iLV < pLVStore->size(); 74 for (size_t iLV = 0; iLV < pLVStore->size(); iLV++ ) { 75 G4LogicalVolume*pLV = (*pLVStore)[iLV]; 75 G4LogicalVolume*pLV = (*pLVStore)[iLV]; 76 const G4String& logVolName = pLV->GetName( 76 const G4String& logVolName = pLV->GetName(); 77 if (newValue == "all" || logVolName == new 77 if (newValue == "all" || logVolName == newValue) { 78 const G4VisAttributes* visAtts = pLV->Ge 78 const G4VisAttributes* visAtts = pLV->GetVisAttributes(); 79 G4cout << "\nLogical Volume \"" << pLV-> << 79 G4cout << "\nLogical Volume \"" << pLV->GetName() 80 if (visAtts) { << 80 << "\": vis attributes:\n" << *visAtts 81 G4cout << '\n' << *visAtts; << 81 << G4endl; 82 } else { << 83 G4cout << " no vis attributes"; << 84 } << 85 G4cout << G4endl; << 86 } 82 } 87 if (logVolName == newValue) found = true; 83 if (logVolName == newValue) found = true; 88 } 84 } 89 if (newValue != "all" && !found) { 85 if (newValue != "all" && !found) { 90 if (fpVisManager->GetVerbosity() >= G4VisM 86 if (fpVisManager->GetVerbosity() >= G4VisManager::errors) { 91 G4warn << "ERROR: Logical volume \"" << << 87 G4cout << "ERROR: Logical volume \"" << newValue 92 << "\" not found in logical volume stor 88 << "\" not found in logical volume store." << G4endl; 93 } 89 } 94 return; 90 return; 95 } 91 } 96 } 92 } 97 93 98 ////////////// /vis/geometry/restore ///////// 94 ////////////// /vis/geometry/restore /////////////////////////////////////// 99 95 100 G4VisCommandGeometryRestore::G4VisCommandGeome 96 G4VisCommandGeometryRestore::G4VisCommandGeometryRestore() 101 { 97 { 102 G4bool omitable; 98 G4bool omitable; 103 fpCommand = new G4UIcmdWithAString("/vis/geo 99 fpCommand = new G4UIcmdWithAString("/vis/geometry/restore", this); 104 fpCommand -> SetGuidance("Restores vis attri 100 fpCommand -> SetGuidance("Restores vis attributes of logical volume(s)."); 105 fpCommand -> SetParameterName("logical-volum 101 fpCommand -> SetParameterName("logical-volume-name", omitable = true); 106 fpCommand -> SetDefaultValue("all"); 102 fpCommand -> SetDefaultValue("all"); 107 } 103 } 108 104 109 G4VisCommandGeometryRestore::~G4VisCommandGeom 105 G4VisCommandGeometryRestore::~G4VisCommandGeometryRestore() 110 { 106 { 111 delete fpCommand; 107 delete fpCommand; 112 } 108 } 113 109 114 G4String G4VisCommandGeometryRestore::GetCurre 110 G4String G4VisCommandGeometryRestore::GetCurrentValue(G4UIcommand*) 115 { 111 { 116 return ""; 112 return ""; 117 } 113 } 118 114 119 void G4VisCommandGeometryRestore::SetNewValue( 115 void G4VisCommandGeometryRestore::SetNewValue(G4UIcommand*, G4String newValue) 120 { 116 { 121 G4VisManager::Verbosity verbosity = fpVisMan 117 G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity(); 122 G4LogicalVolumeStore *pLVStore = G4LogicalVo 118 G4LogicalVolumeStore *pLVStore = G4LogicalVolumeStore::GetInstance(); 123 size_t nLV = pLVStore->size(); 119 size_t nLV = pLVStore->size(); 124 size_t iLV; 120 size_t iLV; 125 G4LogicalVolume* pLV = 0; 121 G4LogicalVolume* pLV = 0; 126 G4bool found = false; 122 G4bool found = false; 127 for (iLV = 0; iLV < nLV; iLV++ ) { 123 for (iLV = 0; iLV < nLV; iLV++ ) { 128 pLV = (*pLVStore)[iLV]; 124 pLV = (*pLVStore)[iLV]; 129 const G4String& logVolName = pLV->GetName( 125 const G4String& logVolName = pLV->GetName(); 130 if (logVolName == newValue) found = true; 126 if (logVolName == newValue) found = true; 131 if (newValue == "all" || logVolName == new 127 if (newValue == "all" || logVolName == newValue) { 132 VisAttsMapIterator i = fVisAttsMap.find( 128 VisAttsMapIterator i = fVisAttsMap.find(pLV); 133 if (i != fVisAttsMap.end()) { 129 if (i != fVisAttsMap.end()) { 134 const G4VisAttributes* newVisAtts = pLV->Get 130 const G4VisAttributes* newVisAtts = pLV->GetVisAttributes(); 135 const G4VisAttributes* oldVisAtts = i->secon 131 const G4VisAttributes* oldVisAtts = i->second; 136 pLV->SetVisAttributes(oldVisAtts); 132 pLV->SetVisAttributes(oldVisAtts); 137 if (verbosity >= G4VisManager::confirmations 133 if (verbosity >= G4VisManager::confirmations) { 138 G4cout << "\nLogical Volume \"" << pLV->Ge 134 G4cout << "\nLogical Volume \"" << pLV->GetName() 139 << "\": re-setting vis attributes:\nwas: 135 << "\": re-setting vis attributes:\nwas: " << *newVisAtts 140 << "\nnow: " << *oldVisAtts 136 << "\nnow: " << *oldVisAtts 141 << G4endl; 137 << G4endl; 142 } 138 } 143 } 139 } 144 } 140 } 145 } 141 } 146 if (newValue != "all" && !found) { 142 if (newValue != "all" && !found) { 147 if (verbosity >= G4VisManager::errors) { 143 if (verbosity >= G4VisManager::errors) { 148 G4warn << "ERROR: Logical volume \"" << << 144 G4cout << "ERROR: Logical volume \"" << newValue 149 << "\" not found in logical volume stor 145 << "\" not found in logical volume store." << G4endl; 150 } 146 } 151 return; 147 return; 152 } 148 } 153 if (fpVisManager->GetCurrentViewer()) { 149 if (fpVisManager->GetCurrentViewer()) { 154 G4UImanager::GetUIpointer()->ApplyCommand( 150 G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/rebuild"); 155 } 151 } 156 } 152 } 157 153