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