Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 28 // /vis/geometry commands - John Allison 31st January 2006 29 30 #include "G4VisCommandsGeometry.hh" 31 32 #include "G4UIcmdWithAString.hh" 33 #include "G4VisManager.hh" 34 #include "G4LogicalVolumeStore.hh" 35 #include "G4UImanager.hh" 36 37 #define G4warn G4cout 38 39 std::map<G4LogicalVolume*, const G4VisAttributes*> 40 G4VVisCommandGeometry::fVisAttsMap; 41 42 G4VVisCommandGeometry::~G4VVisCommandGeometry() 43 { 44 // Delete all vis atts that were "new". Do something like "restore" 45 // without the "rebuild". 46 } 47 48 ////////////// /vis/geometry/list /////////////////////////////////////// 49 50 G4VisCommandGeometryList::G4VisCommandGeometryList() 51 { 52 G4bool omitable; 53 fpCommand = new G4UIcmdWithAString("/vis/geometry/list", this); 54 fpCommand -> SetGuidance("Lists vis attributes of logical volume(s)."); 55 fpCommand -> SetGuidance("\"all\" lists all logical volumes."); 56 fpCommand -> SetParameterName("logical-volume-name", omitable = true); 57 fpCommand -> SetDefaultValue("all"); 58 } 59 60 G4VisCommandGeometryList::~G4VisCommandGeometryList() 61 { 62 delete fpCommand; 63 } 64 65 G4String G4VisCommandGeometryList::GetCurrentValue(G4UIcommand*) 66 { 67 return ""; 68 } 69 70 void G4VisCommandGeometryList::SetNewValue(G4UIcommand*, G4String newValue) 71 { 72 G4LogicalVolumeStore *pLVStore = G4LogicalVolumeStore::GetInstance(); 73 G4bool found = false; 74 for (size_t iLV = 0; iLV < pLVStore->size(); iLV++ ) { 75 G4LogicalVolume*pLV = (*pLVStore)[iLV]; 76 const G4String& logVolName = pLV->GetName(); 77 if (newValue == "all" || logVolName == newValue) { 78 const G4VisAttributes* visAtts = pLV->GetVisAttributes(); 79 G4cout << "\nLogical Volume \"" << pLV->GetName() << "\":"; 80 if (visAtts) { 81 G4cout << '\n' << *visAtts; 82 } else { 83 G4cout << " no vis attributes"; 84 } 85 G4cout << G4endl; 86 } 87 if (logVolName == newValue) found = true; 88 } 89 if (newValue != "all" && !found) { 90 if (fpVisManager->GetVerbosity() >= G4VisManager::errors) { 91 G4warn << "ERROR: Logical volume \"" << newValue 92 << "\" not found in logical volume store." << G4endl; 93 } 94 return; 95 } 96 } 97 98 ////////////// /vis/geometry/restore /////////////////////////////////////// 99 100 G4VisCommandGeometryRestore::G4VisCommandGeometryRestore() 101 { 102 G4bool omitable; 103 fpCommand = new G4UIcmdWithAString("/vis/geometry/restore", this); 104 fpCommand -> SetGuidance("Restores vis attributes of logical volume(s)."); 105 fpCommand -> SetParameterName("logical-volume-name", omitable = true); 106 fpCommand -> SetDefaultValue("all"); 107 } 108 109 G4VisCommandGeometryRestore::~G4VisCommandGeometryRestore() 110 { 111 delete fpCommand; 112 } 113 114 G4String G4VisCommandGeometryRestore::GetCurrentValue(G4UIcommand*) 115 { 116 return ""; 117 } 118 119 void G4VisCommandGeometryRestore::SetNewValue(G4UIcommand*, G4String newValue) 120 { 121 G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity(); 122 G4LogicalVolumeStore *pLVStore = G4LogicalVolumeStore::GetInstance(); 123 size_t nLV = pLVStore->size(); 124 size_t iLV; 125 G4LogicalVolume* pLV = 0; 126 G4bool found = false; 127 for (iLV = 0; iLV < nLV; iLV++ ) { 128 pLV = (*pLVStore)[iLV]; 129 const G4String& logVolName = pLV->GetName(); 130 if (logVolName == newValue) found = true; 131 if (newValue == "all" || logVolName == newValue) { 132 VisAttsMapIterator i = fVisAttsMap.find(pLV); 133 if (i != fVisAttsMap.end()) { 134 const G4VisAttributes* newVisAtts = pLV->GetVisAttributes(); 135 const G4VisAttributes* oldVisAtts = i->second; 136 pLV->SetVisAttributes(oldVisAtts); 137 if (verbosity >= G4VisManager::confirmations) { 138 G4cout << "\nLogical Volume \"" << pLV->GetName() 139 << "\": re-setting vis attributes:\nwas: " << *newVisAtts 140 << "\nnow: " << *oldVisAtts 141 << G4endl; 142 } 143 } 144 } 145 } 146 if (newValue != "all" && !found) { 147 if (verbosity >= G4VisManager::errors) { 148 G4warn << "ERROR: Logical volume \"" << newValue 149 << "\" not found in logical volume store." << G4endl; 150 } 151 return; 152 } 153 if (fpVisManager->GetCurrentViewer()) { 154 G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/rebuild"); 155 } 156 } 157