Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // 23 // >> 24 // $Id: G4VisCommandsCompound.cc,v 1.23 2002/10/24 15:12:26 johna Exp $ >> 25 // GEANT4 tag $Name: geant4-05-00 $ 27 26 28 // Compound /vis/ commands - John Allison 15t 27 // Compound /vis/ commands - John Allison 15th May 2000 29 28 30 #include "G4VisCommandsCompound.hh" 29 #include "G4VisCommandsCompound.hh" 31 30 32 #include "G4VisManager.hh" 31 #include "G4VisManager.hh" 33 #include "G4UImanager.hh" 32 #include "G4UImanager.hh" 34 #include "G4UIcommandTree.hh" << 35 #include "G4UIcmdWithAString.hh" 33 #include "G4UIcmdWithAString.hh" 36 34 37 #include <sstream> << 38 #include <set> << 39 << 40 #define G4warn G4cout << 41 << 42 ////////////// /vis/drawTree ///////////////// 35 ////////////// /vis/drawTree /////////////////////////////////////// 43 36 44 G4VisCommandDrawTree::G4VisCommandDrawTree() { 37 G4VisCommandDrawTree::G4VisCommandDrawTree() { 45 G4bool omitable; 38 G4bool omitable; 46 fpCommand = new G4UIcommand("/vis/drawTree", 39 fpCommand = new G4UIcommand("/vis/drawTree", this); >> 40 fpCommand->SetGuidance("/vis/drawTree [<physical-volume-name>] [<system>]"); >> 41 fpCommand->SetGuidance("Default: world ATree"); 47 fpCommand->SetGuidance 42 fpCommand->SetGuidance 48 ("Produces a representation of the geometr << 43 ("(DTREE) Creates a scene consisting of this physical volume and" 49 "\nguidance is given on running the comma << 44 "\n produces a represntation of the geometry hieracrhy."); 50 "\nfor \"/vis/ASCIITree/verbose\"."); << 45 fpCommand->SetGuidance("The scene becomes current."); 51 fpCommand->SetGuidance("The pre-existing sce << 52 G4UIparameter* parameter; 46 G4UIparameter* parameter; 53 parameter = new G4UIparameter("physical-volu << 47 parameter = new G4UIparameter("PVname", 's', omitable = true); 54 parameter -> SetDefaultValue("world"); 48 parameter -> SetDefaultValue("world"); 55 fpCommand -> SetParameter (parameter); 49 fpCommand -> SetParameter (parameter); 56 parameter = new G4UIparameter("system", 's', 50 parameter = new G4UIparameter("system", 's', omitable = true); 57 parameter -> SetDefaultValue("ATree"); 51 parameter -> SetDefaultValue("ATree"); 58 fpCommand -> SetParameter (parameter); 52 fpCommand -> SetParameter (parameter); 59 } 53 } 60 54 61 G4VisCommandDrawTree::~G4VisCommandDrawTree() 55 G4VisCommandDrawTree::~G4VisCommandDrawTree() { 62 delete fpCommand; 56 delete fpCommand; 63 } 57 } 64 58 65 void G4VisCommandDrawTree::SetNewValue(G4UIcom << 59 void G4VisCommandDrawTree::SetNewValue >> 60 (G4UIcommand* command, G4String newValue) { 66 61 67 G4String pvname, system; 62 G4String pvname, system; 68 std::istringstream is(newValue); << 63 const char* t = newValue; >> 64 G4std::istrstream is((char*)t); 69 is >> pvname >> system; 65 is >> pvname >> system; 70 66 71 // Note: The second parameter, "system", is << 72 // a choice of dedicated tree printing/displ << 73 // the only such dedicated system is ASCIITr << 74 // specify OGLSX, for example. So to avoid << 75 // feature to systems that have "Tree" in th << 76 << 77 // Of course, some other systems, such as OG << 78 // built-in. The HepRApp offline browser al << 79 // built in. << 80 << 81 if (!G4StrUtil::contains(system, "Tree")) { << 82 system = "ATree"; << 83 } << 84 << 85 G4VGraphicsSystem* keepSystem = fpVisManager << 86 G4Scene* keepScene = fpVisManager->GetCurren << 87 G4VSceneHandler* keepSceneHandler = fpVisMan << 88 G4VViewer* keepViewer = fpVisManager->GetCur << 89 G4VisManager::Verbosity keepVisVerbosity = f << 90 G4bool keepAbleness = fpVisManager->GetConcr << 91 << 92 G4UImanager* UImanager = G4UImanager::GetUIp 67 G4UImanager* UImanager = G4UImanager::GetUIpointer(); 93 G4int keepUIVerbose = UImanager->GetVerboseL << 68 G4int keepVerbose = UImanager->GetVerboseLevel(); 94 G4int newVerbose(0); 69 G4int newVerbose(0); 95 if (keepUIVerbose >= 2 || << 70 if (keepVerbose >= 2 || 96 fpVisManager->GetVerbosity() >= G4VisMan 71 fpVisManager->GetVerbosity() >= G4VisManager::confirmations) 97 newVerbose = 2; 72 newVerbose = 2; 98 UImanager->SetVerboseLevel(newVerbose); 73 UImanager->SetVerboseLevel(newVerbose); 99 << 74 UImanager->ApplyCommand(G4String("/vis/open " + system)); 100 auto errorCode = UImanager->ApplyCommand(G4S << 75 UImanager->ApplyCommand(G4String("/vis/drawVolume " + pvname)); 101 if (errorCode == 0) { << 76 UImanager->ApplyCommand("/vis/viewer/flush"); 102 if (!keepAbleness) { // Enable temporaril << 77 UImanager->SetVerboseLevel(keepVerbose); 103 fpVisManager->SetVerboseLevel("Quiet"); << 104 UImanager->ApplyCommand("/vis/enable"); << 105 fpVisManager->SetVerboseLevel(keepVisVer << 106 } << 107 UImanager->ApplyCommand("/vis/viewer/reset << 108 UImanager->ApplyCommand(G4String("/vis/dra << 109 UImanager->ApplyCommand("/vis/viewer/flush << 110 if (!keepAbleness) { // Disable again << 111 fpVisManager->SetVerboseLevel("Quiet"); << 112 UImanager->ApplyCommand("/vis/disable"); << 113 fpVisManager->SetVerboseLevel(keepVisVer << 114 } << 115 if (keepViewer) { << 116 if (fpVisManager->GetVerbosity() >= G4Vi << 117 G4warn << "Reverting to " << keepViewe << 118 } << 119 fpVisManager->SetCurrentGraphicsSystem(k << 120 fpVisManager->SetCurrentScene(keepScene) << 121 fpVisManager->SetCurrentSceneHandler(kee << 122 fpVisManager->SetCurrentViewer(keepViewe << 123 } << 124 } << 125 UImanager->SetVerboseLevel(keepUIVerbose); << 126 } 78 } 127 79 128 ////////////// /vis/drawView ///////////////// 80 ////////////// /vis/drawView /////////////////////////////////////// 129 81 130 G4VisCommandDrawView::G4VisCommandDrawView() { 82 G4VisCommandDrawView::G4VisCommandDrawView() { 131 G4bool omitable; 83 G4bool omitable; 132 fpCommand = new G4UIcommand("/vis/drawView", 84 fpCommand = new G4UIcommand("/vis/drawView", this); 133 fpCommand->SetGuidance 85 fpCommand->SetGuidance 134 ("Draw view from this angle, etc."); << 86 ("/vis/drawView [<theta-deg>] [<phi-deg>] [<pan-right>] [<pan-up>]" >> 87 " [<pan-unit>] [<zoom-factor>] [<dolly>] [<dolly-unit>]"); >> 88 fpCommand->SetGuidance("Default: 0 0 0 0 cm 1 0 cm"); 135 G4UIparameter* parameter; 89 G4UIparameter* parameter; 136 parameter = new G4UIparameter("theta-degrees << 90 parameter = new G4UIparameter("theta-deg", 'd', omitable = true); 137 parameter -> SetDefaultValue(0.); 91 parameter -> SetDefaultValue(0.); 138 fpCommand -> SetParameter (parameter); 92 fpCommand -> SetParameter (parameter); 139 parameter = new G4UIparameter("phi-degrees", << 93 parameter = new G4UIparameter("phi-deg", 'd', omitable = true); 140 parameter -> SetDefaultValue(0.); 94 parameter -> SetDefaultValue(0.); 141 fpCommand -> SetParameter (parameter); 95 fpCommand -> SetParameter (parameter); 142 parameter = new G4UIparameter("pan-right", ' 96 parameter = new G4UIparameter("pan-right", 'd', omitable = true); 143 parameter -> SetDefaultValue(0.); 97 parameter -> SetDefaultValue(0.); 144 fpCommand -> SetParameter (parameter); 98 fpCommand -> SetParameter (parameter); 145 parameter = new G4UIparameter("pan-up", 'd', 99 parameter = new G4UIparameter("pan-up", 'd', omitable = true); 146 parameter -> SetDefaultValue(0.); 100 parameter -> SetDefaultValue(0.); 147 fpCommand -> SetParameter (parameter); 101 fpCommand -> SetParameter (parameter); 148 parameter = new G4UIparameter("pan-unit", 's 102 parameter = new G4UIparameter("pan-unit", 's', omitable = true); 149 parameter -> SetDefaultValue("cm"); 103 parameter -> SetDefaultValue("cm"); 150 fpCommand -> SetParameter (parameter); 104 fpCommand -> SetParameter (parameter); 151 parameter = new G4UIparameter("zoom-factor", 105 parameter = new G4UIparameter("zoom-factor", 'd', omitable = true); 152 parameter -> SetDefaultValue(1.); 106 parameter -> SetDefaultValue(1.); 153 fpCommand -> SetParameter (parameter); 107 fpCommand -> SetParameter (parameter); 154 parameter = new G4UIparameter("dolly", 'd', 108 parameter = new G4UIparameter("dolly", 'd', omitable = true); 155 parameter -> SetDefaultValue(0.); 109 parameter -> SetDefaultValue(0.); 156 fpCommand -> SetParameter (parameter); 110 fpCommand -> SetParameter (parameter); 157 parameter = new G4UIparameter("dolly-unit", 111 parameter = new G4UIparameter("dolly-unit", 's', omitable = true); 158 parameter -> SetDefaultValue("cm"); 112 parameter -> SetDefaultValue("cm"); 159 fpCommand -> SetParameter (parameter); 113 fpCommand -> SetParameter (parameter); 160 } 114 } 161 115 162 G4VisCommandDrawView::~G4VisCommandDrawView() 116 G4VisCommandDrawView::~G4VisCommandDrawView() { 163 delete fpCommand; 117 delete fpCommand; 164 } 118 } 165 119 166 void G4VisCommandDrawView::SetNewValue(G4UIcom << 120 void G4VisCommandDrawView::SetNewValue >> 121 (G4UIcommand* command, G4String newValue) { 167 122 168 G4VisManager::Verbosity verbosity = fpVisMan 123 G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity(); 169 124 170 G4VViewer* currentViewer = fpVisManager->Get 125 G4VViewer* currentViewer = fpVisManager->GetCurrentViewer(); 171 if (!currentViewer) { 126 if (!currentViewer) { 172 if (verbosity >= G4VisManager::warnings) { 127 if (verbosity >= G4VisManager::warnings) { 173 G4warn << << 128 G4cout << 174 "WARNING: G4VisCommandsDrawView::SetNewValue 129 "WARNING: G4VisCommandsDrawView::SetNewValue: no current viewer." 175 << G4endl; 130 << G4endl; 176 } 131 } 177 return; 132 return; 178 } 133 } 179 134 180 G4String thetaDeg; 135 G4String thetaDeg; 181 G4String phiDeg; 136 G4String phiDeg; 182 G4String panRight; 137 G4String panRight; 183 G4String panUp; 138 G4String panUp; 184 G4String panUnit; 139 G4String panUnit; 185 G4String zoomFactor; 140 G4String zoomFactor; 186 G4String dolly; 141 G4String dolly; 187 G4String dollyUnit; 142 G4String dollyUnit; 188 std::istringstream is(newValue); << 143 const char* t = newValue; >> 144 G4std::istrstream is((char*)t); 189 is >> thetaDeg >> phiDeg >> panRight >> panU 145 is >> thetaDeg >> phiDeg >> panRight >> panUp >> panUnit 190 >> zoomFactor >> dolly >> dollyUnit; 146 >> zoomFactor >> dolly >> dollyUnit; 191 147 192 G4UImanager* UImanager = G4UImanager::GetUIp 148 G4UImanager* UImanager = G4UImanager::GetUIpointer(); >> 149 G4int keepVerbose = UImanager->GetVerboseLevel(); >> 150 G4int newVerbose(0); >> 151 if (keepVerbose >= 2 || >> 152 fpVisManager->GetVerbosity() >= G4VisManager::confirmations) >> 153 newVerbose = 2; >> 154 UImanager->SetVerboseLevel(newVerbose); 193 G4ViewParameters vp = currentViewer->GetView 155 G4ViewParameters vp = currentViewer->GetViewParameters(); 194 G4bool keepAutoRefresh = vp.IsAutoRefresh(); 156 G4bool keepAutoRefresh = vp.IsAutoRefresh(); 195 vp.SetAutoRefresh(false); 157 vp.SetAutoRefresh(false); 196 currentViewer->SetViewParameters(vp); 158 currentViewer->SetViewParameters(vp); 197 UImanager->ApplyCommand( 159 UImanager->ApplyCommand( 198 G4String("/vis/viewer/set/viewpointThetaPh << 160 G4String("/vis/viewer/viewpointThetaPhi " + thetaDeg + " " + phiDeg + " deg")); 199 UImanager->ApplyCommand( 161 UImanager->ApplyCommand( 200 G4String("/vis/viewer/panTo " + panRight + 162 G4String("/vis/viewer/panTo " + panRight + " " + panUp + " " + panUnit)); 201 UImanager->ApplyCommand( 163 UImanager->ApplyCommand( 202 G4String("/vis/viewer/zoomTo " + zoomFacto 164 G4String("/vis/viewer/zoomTo " + zoomFactor)); 203 vp = currentViewer->GetViewParameters(); 165 vp = currentViewer->GetViewParameters(); 204 vp.SetAutoRefresh(keepAutoRefresh); 166 vp.SetAutoRefresh(keepAutoRefresh); 205 currentViewer->SetViewParameters(vp); 167 currentViewer->SetViewParameters(vp); 206 UImanager->ApplyCommand( 168 UImanager->ApplyCommand( 207 G4String("/vis/viewer/dollyTo " + dolly + 169 G4String("/vis/viewer/dollyTo " + dolly + " " + dollyUnit)); 208 } << 170 UImanager->SetVerboseLevel(keepVerbose); 209 << 210 ////////////// /vis/drawLogicalVolume //////// << 211 << 212 G4VisCommandDrawLogicalVolume::G4VisCommandDra << 213 fpCommand = new G4UIcommand("/vis/drawLogica << 214 fpCommand->SetGuidance << 215 ("Draws logical volume with additional compo << 216 fpCommand->SetGuidance << 217 ("Synonymous with \"/vis/specify\"."); << 218 fpCommand->SetGuidance << 219 ("Creates a scene consisting of this logical << 220 "\n current viewer to draw it. The scene b << 221 const G4UIcommandTree* tree = G4UImanager::G << 222 const G4UIcommand* addLogVolCmd = tree->Find << 223 // Pick up guidance from /vis/scene/add/logi << 224 CopyGuidanceFrom(addLogVolCmd,fpCommand); << 225 // Pick up parameters from /vis/scene/add/lo << 226 CopyParametersFrom(addLogVolCmd,fpCommand); << 227 } << 228 << 229 G4VisCommandDrawLogicalVolume::~G4VisCommandDr << 230 delete fpCommand; << 231 } << 232 << 233 void G4VisCommandDrawLogicalVolume::SetNewValu << 234 G4VisManager::Verbosity verbosity = fpVisMan << 235 G4UImanager* UImanager = G4UImanager::GetUIp << 236 G4VViewer* currentViewer = fpVisManager->Get << 237 const G4ViewParameters& currentViewParams = << 238 G4bool keepAutoRefresh = currentViewParams.I << 239 if (keepAutoRefresh) UImanager->ApplyCommand << 240 UImanager->ApplyCommand("/vis/scene/create") << 241 UImanager->ApplyCommand(G4String("/vis/scene << 242 UImanager->ApplyCommand("/vis/sceneHandler/a << 243 G4ViewParameters::DrawingStyle keepDrawingSt << 244 if(keepDrawingStyle != G4ViewParameters::wir << 245 UImanager->ApplyCommand("/vis/viewer/set/s << 246 G4bool keepMarkerNotHidden = currentViewPara << 247 if (!keepMarkerNotHidden) UImanager->ApplyCo << 248 if (keepAutoRefresh) UImanager->ApplyCommand << 249 if (verbosity >= G4VisManager::warnings) { << 250 if (keepDrawingStyle != currentViewParams. << 251 G4warn << 252 << "Drawing style changed to wireframe. << 253 G4String style, edge; << 254 switch (keepDrawingStyle) { << 255 case G4ViewParameters::wireframe: << 256 style = "wireframe"; edge = "false"; << 257 case G4ViewParameters::hlr: << 258 style = "wireframe"; edge = "true"; << 259 case G4ViewParameters::hsr: << 260 style = "surface"; edge = "false"; b << 261 case G4ViewParameters::hlhsr: << 262 style = "surface"; edge = "true"; br << 263 case G4ViewParameters::cloud: << 264 style = "cloud"; edge = ""; break; << 265 } << 266 G4warn << "\n /vis/viewer/set/style " + << 267 if (!edge.empty()) G4warn << "\n /vis/v << 268 G4warn << G4endl; << 269 } << 270 if (keepMarkerNotHidden != currentViewPara << 271 G4warn << 272 << "Markers changed to \"not hidden\". T << 273 << "\n /vis/viewer/set/hiddenmarker tru << 274 << G4endl; << 275 } << 276 } << 277 static G4bool warned = false; << 278 if (verbosity >= G4VisManager::confirmations << 279 G4cout << << 280 "NOTE: For systems which are not \"auto-re << 281 "\n issue \"/vis/viewer/refresh\" or \"/v << 282 << G4endl; << 283 warned = true; << 284 } << 285 } 171 } 286 172 287 ////////////// /vis/drawVolume /////////////// 173 ////////////// /vis/drawVolume /////////////////////////////////////// 288 174 289 G4VisCommandDrawVolume::G4VisCommandDrawVolume 175 G4VisCommandDrawVolume::G4VisCommandDrawVolume() { 290 fpCommand = new G4UIcommand("/vis/drawVolume << 176 G4bool omitable; >> 177 fpCommand = new G4UIcmdWithAString("/vis/drawVolume", this); >> 178 fpCommand->SetGuidance("/vis/drawVolume [<physical-volume-name>]"); >> 179 fpCommand->SetGuidance("Default: world volume"); 291 fpCommand->SetGuidance 180 fpCommand->SetGuidance 292 ("Creates a scene containing this physical v << 181 ("Creates a scene consisting of this physical volume and asks the" 293 "\ncurrent viewer to draw it. The scene be << 182 "\n current viewer to draw it."); 294 const G4UIcommandTree* tree = G4UImanager::G << 183 fpCommand->SetGuidance("The scene becomes current."); 295 const G4UIcommand* addVolCmd = tree->FindPat << 184 fpCommand->SetParameterName("physical-volume-name", omitable = true); 296 // Pick up guidance from /vis/scene/add/volu << 185 fpCommand->SetDefaultValue("world"); 297 CopyGuidanceFrom(addVolCmd,fpCommand); << 298 // Pick up parameters from /vis/scene/add/vo << 299 CopyParametersFrom(addVolCmd,fpCommand); << 300 } 186 } 301 187 302 G4VisCommandDrawVolume::~G4VisCommandDrawVolum 188 G4VisCommandDrawVolume::~G4VisCommandDrawVolume() { 303 delete fpCommand; 189 delete fpCommand; 304 } 190 } 305 191 306 void G4VisCommandDrawVolume::SetNewValue(G4UIc << 192 void G4VisCommandDrawVolume::SetNewValue >> 193 (G4UIcommand* command, G4String newValue) { 307 G4VisManager::Verbosity verbosity = fpVisMan 194 G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity(); 308 G4UImanager* UImanager = G4UImanager::GetUIp 195 G4UImanager* UImanager = G4UImanager::GetUIpointer(); >> 196 G4int keepVerbose = UImanager->GetVerboseLevel(); >> 197 G4int newVerbose(0); >> 198 if (keepVerbose >= 2 || verbosity >= G4VisManager::confirmations) >> 199 newVerbose = 2; >> 200 UImanager->SetVerboseLevel(newVerbose); 309 UImanager->ApplyCommand("/vis/scene/create") 201 UImanager->ApplyCommand("/vis/scene/create"); 310 UImanager->ApplyCommand(G4String("/vis/scene 202 UImanager->ApplyCommand(G4String("/vis/scene/add/volume " + newValue)); 311 UImanager->ApplyCommand("/vis/sceneHandler/a 203 UImanager->ApplyCommand("/vis/sceneHandler/attach"); 312 static G4bool warned = false; << 204 UImanager->SetVerboseLevel(keepVerbose); 313 if (verbosity >= G4VisManager::confirmations << 205 if (verbosity >= G4VisManager::warnings) { 314 G4cout << 206 G4cout << 315 "NOTE: For systems which are not \"auto- << 207 "WARNING: For systems which are not \"auto-refresh\" you will need to" 316 "\n issue \"/vis/viewer/refresh\" or \" 208 "\n issue \"/vis/viewer/refresh\" or \"/vis/viewer/flush\"." 317 << G4endl; 209 << G4endl; 318 warned = true; << 319 } 210 } 320 } 211 } 321 212 322 ////////////// /vis/open ///////////////////// 213 ////////////// /vis/open /////////////////////////////////////// 323 214 324 G4VisCommandOpen::G4VisCommandOpen() { 215 G4VisCommandOpen::G4VisCommandOpen() { 325 G4bool omitable; 216 G4bool omitable; 326 fpCommand = new G4UIcommand("/vis/open", thi 217 fpCommand = new G4UIcommand("/vis/open", this); >> 218 fpCommand->SetGuidance("/vis/open [<graphics-system-name>] [<pixels>]"); 327 fpCommand->SetGuidance 219 fpCommand->SetGuidance 328 ("Creates a scene handler and viewer ready << 220 ("For this graphics system, creates a scene handler ready for drawing."); 329 fpCommand->SetGuidance << 221 fpCommand->SetGuidance("The scene handler becomes current."); 330 ("The scene handler and viewer names are a << 222 fpCommand->SetGuidance("The scene handler name is auto-generated."); 331 // Pick up guidance from /vis/viewer/create << 223 fpCommand->SetGuidance("The 2nd parameter is the window size hint."); 332 const G4UIcommandTree* tree = G4UImanager::G << 333 const G4UIcommand* viewerCreateCmd = tree->F << 334 CopyGuidanceFrom(viewerCreateCmd,fpCommand,2 << 335 G4UIparameter* parameter; 224 G4UIparameter* parameter; 336 parameter = new G4UIparameter("graphics-syst << 225 parameter = new G4UIparameter("graphics-system-name", 's', omitable = false); 337 parameter->SetCurrentAsDefault(true); << 226 const G4GraphicsSystemList& gslist = >> 227 fpVisManager->GetAvailableGraphicsSystems(); >> 228 G4String candidates; >> 229 for (size_t igslist = 0; igslist < gslist.size(); igslist++) { >> 230 const G4String& name = gslist[igslist]->GetName(); >> 231 const G4String& nickname = gslist[igslist]->GetNickname(); >> 232 if (nickname.isNull()) { >> 233 candidates += name; >> 234 } >> 235 else { >> 236 candidates += nickname; >> 237 } >> 238 candidates += " "; >> 239 } >> 240 candidates = candidates.strip(); >> 241 parameter->SetParameterCandidates(candidates); 338 fpCommand->SetParameter(parameter); 242 fpCommand->SetParameter(parameter); 339 parameter = new G4UIparameter("window-size-h << 243 parameter = new G4UIparameter("pixels", 'i', omitable = true); 340 parameter->SetGuidance << 244 parameter->SetDefaultValue(600); 341 ("integer (pixels) for square window place << 342 " X-Windows-type geometry string, e.g. 60 << 343 parameter->SetCurrentAsDefault(true); << 344 fpCommand->SetParameter(parameter); 245 fpCommand->SetParameter(parameter); 345 } 246 } 346 247 347 G4VisCommandOpen::~G4VisCommandOpen() { 248 G4VisCommandOpen::~G4VisCommandOpen() { 348 delete fpCommand; 249 delete fpCommand; 349 } 250 } 350 251 351 G4String G4VisCommandOpen::GetCurrentValue(G4U << 252 void G4VisCommandOpen::SetNewValue (G4UIcommand* command, G4String newValue) { 352 { << 353 G4String graphicsSystemName, windowSizeHint; << 354 auto graphicsSystem = fpVisManager->GetCurre << 355 if (graphicsSystem) { << 356 // Take name and hint from latest graphics << 357 graphicsSystemName = graphicsSystem->GetNa << 358 auto viewer = fpVisManager->GetCurrentView << 359 if (viewer) { << 360 windowSizeHint = viewer->GetViewParamete << 361 } << 362 else { // Viewer not yet created? << 363 windowSizeHint = fpVisManager->GetDefaul << 364 } << 365 } << 366 else { // No graphics system yet - must be << 367 graphicsSystemName = fpVisManager->GetDefa << 368 windowSizeHint = fpVisManager->GetDefaultX << 369 } << 370 return graphicsSystemName + ' ' + windowSize << 371 } << 372 << 373 void G4VisCommandOpen::SetNewValue (G4UIcomman << 374 { << 375 G4String systemName, windowSizeHint; 253 G4String systemName, windowSizeHint; 376 std::istringstream is(newValue); << 254 const char* t = newValue; >> 255 G4std::istrstream is((char*)t); 377 is >> systemName >> windowSizeHint; 256 is >> systemName >> windowSizeHint; 378 G4UImanager* UImanager = G4UImanager::GetUIp 257 G4UImanager* UImanager = G4UImanager::GetUIpointer(); 379 << 258 G4int keepVerbose = UImanager->GetVerboseLevel(); 380 auto errorCode = UImanager->ApplyCommand(G4S << 259 G4int newVerbose(0); 381 if (errorCode) { << 260 if (keepVerbose >= 2 || 382 G4warn << "sub-command \"/vis/sceneHandler << 261 fpVisManager->GetVerbosity() >= G4VisManager::confirmations) 383 goto finish; << 262 newVerbose = 2; 384 } << 263 UImanager->SetVerboseLevel(newVerbose); 385 << 264 UImanager->ApplyCommand(G4String("/vis/sceneHandler/create " + systemName)); 386 errorCode = UImanager->ApplyCommand(G4String << 265 UImanager->ApplyCommand(G4String("/vis/viewer/create ! ! " + windowSizeHint)); 387 if (errorCode) { << 266 UImanager->SetVerboseLevel(keepVerbose); 388 G4warn << "sub-command \"/vis/viewer/creat << 389 goto finish; << 390 } << 391 << 392 finish: << 393 if (errorCode) { << 394 fpVisManager->PrintAvailableGraphicsSystem << 395 if (errorCode != JustWarning) { << 396 G4ExceptionDescription ed; << 397 ed << "Invoked command has failed - see << 398 command->CommandFailed(errorCode,ed); << 399 } << 400 } << 401 } << 402 << 403 ////////////// /vis/plot ///////////////////// << 404 << 405 G4VisCommandPlot::G4VisCommandPlot () << 406 { << 407 G4bool omitable; << 408 G4UIparameter* parameter; << 409 << 410 fpCommand = new G4UIcommand("/vis/plot", thi << 411 fpCommand -> SetGuidance("Draws plots."); << 412 parameter = new G4UIparameter ("type", 's', << 413 parameter -> SetParameterCandidates("h1 h2") << 414 fpCommand -> SetParameter (parameter); << 415 parameter = new G4UIparameter ("id", 'i', om << 416 fpCommand -> SetParameter (parameter); << 417 #ifdef TOOLS_USE_FREETYPE << 418 parameter = new G4UIparameter ("style", 's', << 419 parameter -> SetParameterCandidates("none RO << 420 parameter -> SetDefaultValue("ROOT_default") << 421 fpCommand -> SetParameter (parameter); << 422 #endif << 423 } << 424 << 425 G4VisCommandPlot::~G4VisCommandPlot () << 426 { << 427 delete fpCommand; << 428 } << 429 << 430 G4String G4VisCommandPlot::GetCurrentValue (G4 << 431 { << 432 return ""; << 433 } << 434 << 435 void G4VisCommandPlot::SetNewValue (G4UIcomman << 436 { << 437 auto currentViewer = fpVisManager->GetCurren << 438 if (currentViewer->GetName().find("TOOLSSG") << 439 G4warn << << 440 "WARNING: Current viewer not able to draw << 441 "\n Try \"/vis/open TSG\", then \"/vis/pl << 442 << G4endl; << 443 return; << 444 } << 445 << 446 std::istringstream is (newValue); << 447 G4String type, id; << 448 is >> type >> id; << 449 #ifdef TOOLS_USE_FREETYPE << 450 G4String style; << 451 is >> style; << 452 #endif << 453 << 454 auto keepEnable = fpVisManager->IsEnabled(); << 455 << 456 auto ui = G4UImanager::GetUIpointer(); << 457 ui->ApplyCommand("/vis/enable"); << 458 ui->ApplyCommand("/vis/viewer/resetCameraPar << 459 ui->ApplyCommand("/vis/scene/create"); << 460 ui->ApplyCommand("/vis/scene/endOfEventActio << 461 static G4int plotterID = 0; << 462 std::ostringstream ossPlotter; << 463 ossPlotter << "plotter-" << plotterID++; << 464 const G4String& plotterName = ossPlotter.str << 465 ui->ApplyCommand("/vis/plotter/create " + pl << 466 ui->ApplyCommand("/vis/scene/add/plotter " + << 467 ui->ApplyCommand("/vis/plotter/add/" + type << 468 #ifdef TOOLS_USE_FREETYPE << 469 if (style != "none") { << 470 ui->ApplyCommand("/vis/plotter/addStyle " << 471 } << 472 #endif << 473 ui->ApplyCommand("/vis/sceneHandler/attach") << 474 << 475 if (!keepEnable) { << 476 fpVisManager->Disable(); << 477 G4warn << << 478 "WARNING: drawing was enabled for plotting << 479 << G4endl; << 480 } << 481 } 267 } 482 268 483 ////////////// /vis/specify ////////////////// 269 ////////////// /vis/specify /////////////////////////////////////// 484 270 485 G4VisCommandSpecify::G4VisCommandSpecify() { 271 G4VisCommandSpecify::G4VisCommandSpecify() { 486 G4bool omitable; 272 G4bool omitable; 487 fpCommand = new G4UIcommand("/vis/specify", << 273 fpCommand = new G4UIcmdWithAString("/vis/specify", this); 488 fpCommand->SetGuidance << 274 fpCommand->SetGuidance("/vis/specify <logical-volume-name>"); 489 ("Draws logical volume with Boolean compon << 490 fpCommand->SetGuidance << 491 ("Synonymous with \"/vis/drawLogicalVolume << 492 fpCommand->SetGuidance 275 fpCommand->SetGuidance 493 ("Creates a scene consisting of this logic 276 ("Creates a scene consisting of this logical volume and asks the" 494 "\n current viewer to draw it to the spe << 277 "\n current viewer to draw it and the geometry to print the" 495 "\n showing boolean components (if any), << 278 "\n specification."); 496 "\n readout geometry (if any), local axe << 497 "\n under control of the appropriate fla << 498 fpCommand->SetGuidance << 499 ("Note: voxels are not constructed until sta << 500 "\n (For voxels without a run, \"/run/beam << 501 fpCommand->SetGuidance("The scene becomes cu 279 fpCommand->SetGuidance("The scene becomes current."); 502 G4UIparameter* parameter; << 280 fpCommand->SetParameterName("logical-volume-name", omitable = false); 503 parameter = new G4UIparameter("logical-volum << 504 fpCommand->SetParameter(parameter); << 505 parameter = new G4UIparameter("depth-of-desc << 506 parameter->SetDefaultValue(1); << 507 fpCommand->SetParameter(parameter); << 508 parameter = new G4UIparameter("booleans-flag << 509 parameter->SetDefaultValue(true); << 510 fpCommand->SetParameter(parameter); << 511 parameter = new G4UIparameter("voxels-flag", << 512 parameter->SetDefaultValue(true); << 513 fpCommand->SetParameter(parameter); << 514 parameter = new G4UIparameter("readout-flag" << 515 parameter->SetDefaultValue(true); << 516 fpCommand->SetParameter(parameter); << 517 parameter = new G4UIparameter("axes-flag", ' << 518 parameter->SetDefaultValue(true); << 519 parameter -> SetGuidance ("Set \"false\" to << 520 fpCommand->SetParameter(parameter); << 521 parameter = new G4UIparameter("check-overlap << 522 parameter->SetDefaultValue(true); << 523 parameter -> SetGuidance ("Set \"false\" to << 524 fpCommand->SetParameter(parameter); << 525 } 281 } 526 282 527 G4VisCommandSpecify::~G4VisCommandSpecify() { 283 G4VisCommandSpecify::~G4VisCommandSpecify() { 528 delete fpCommand; 284 delete fpCommand; 529 } 285 } 530 286 531 void G4VisCommandSpecify::SetNewValue(G4UIcomm << 287 void G4VisCommandSpecify::SetNewValue >> 288 (G4UIcommand* command, G4String newValue) { 532 G4VisManager::Verbosity verbosity = fpVisMan 289 G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity(); 533 G4UImanager* UImanager = G4UImanager::GetUIp 290 G4UImanager* UImanager = G4UImanager::GetUIpointer(); 534 // UImanager->ApplyCommand(G4String("/geomet << 291 G4int keepVerbose = UImanager->GetVerboseLevel(); >> 292 G4int newVerbose(0); >> 293 if (keepVerbose >= 2 || verbosity >= G4VisManager::confirmations) >> 294 newVerbose = 2; >> 295 UImanager->SetVerboseLevel(newVerbose); >> 296 UImanager->ApplyCommand(G4String("/geometry/print " + newValue)); 535 UImanager->ApplyCommand("/vis/scene/create") 297 UImanager->ApplyCommand("/vis/scene/create"); 536 UImanager->ApplyCommand(G4String("/vis/scene 298 UImanager->ApplyCommand(G4String("/vis/scene/add/logicalVolume " + newValue)); 537 UImanager->ApplyCommand("/vis/sceneHandler/a 299 UImanager->ApplyCommand("/vis/sceneHandler/attach"); 538 static G4bool warned = false; << 300 UImanager->SetVerboseLevel(keepVerbose); 539 if (verbosity >= G4VisManager::confirmations << 301 if (verbosity >= G4VisManager::warnings) { 540 G4cout << 302 G4cout << 541 "NOTE: For systems which are not \"auto- << 303 "WARNING: For systems which are not \"auto-refresh\" you will need to" 542 "\n issue \"/vis/viewer/refresh\" or \" 304 "\n issue \"/vis/viewer/refresh\" or \"/vis/viewer/flush\"." 543 << G4endl; 305 << G4endl; 544 warned = true; << 545 } 306 } 546 } 307 } 547 308