Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/management/src/G4VisCommandsCompound.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /visualization/management/src/G4VisCommandsCompound.cc (Version 11.3.0) and /visualization/management/src/G4VisCommandsCompound.cc (Version 10.1.p2)


  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: G4VisCommandsCompound.cc 82050 2014-06-10 08:24:52Z gcosmo $
 27                                                    28 
 28 // Compound /vis/ commands - John Allison  15t     29 // Compound /vis/ commands - John Allison  15th May 2000
 29                                                    30 
 30 #include "G4VisCommandsCompound.hh"                31 #include "G4VisCommandsCompound.hh"
 31                                                    32 
 32 #include "G4VisManager.hh"                         33 #include "G4VisManager.hh"
 33 #include "G4UImanager.hh"                          34 #include "G4UImanager.hh"
 34 #include "G4UIcommandTree.hh"                  << 
 35 #include "G4UIcmdWithAString.hh"                   35 #include "G4UIcmdWithAString.hh"
 36                                                    36 
 37 #include <sstream>                                 37 #include <sstream>
 38 #include <set>                                 << 
 39                                                << 
 40 #define G4warn G4cout                          << 
 41                                                    38 
 42 ////////////// /vis/drawTree /////////////////     39 ////////////// /vis/drawTree ///////////////////////////////////////
 43                                                    40 
 44 G4VisCommandDrawTree::G4VisCommandDrawTree() {     41 G4VisCommandDrawTree::G4VisCommandDrawTree() {
 45   G4bool omitable;                                 42   G4bool omitable;
 46   fpCommand = new G4UIcommand("/vis/drawTree",     43   fpCommand = new G4UIcommand("/vis/drawTree", this);
 47   fpCommand->SetGuidance                           44   fpCommand->SetGuidance
 48     ("Produces a representation of the geometr <<  45     ("(DTREE) Creates a scene consisting of this physical volume and"
 49      "\nguidance is given on running the comma <<  46      "\n  produces a representation of the geometry hieracrhy.");
 50      "\nfor \"/vis/ASCIITree/verbose\".");     <<  47   fpCommand->SetGuidance("The scene becomes current.");
 51   fpCommand->SetGuidance("The pre-existing sce << 
 52   G4UIparameter* parameter;                        48   G4UIparameter* parameter;
 53   parameter = new G4UIparameter("physical-volu     49   parameter = new G4UIparameter("physical-volume-name", 's', omitable = true);
 54   parameter -> SetDefaultValue("world");           50   parameter -> SetDefaultValue("world");
 55   fpCommand -> SetParameter (parameter);           51   fpCommand -> SetParameter (parameter);
 56   parameter = new G4UIparameter("system", 's',     52   parameter = new G4UIparameter("system", 's', omitable = true);
 57   parameter -> SetDefaultValue("ATree");           53   parameter -> SetDefaultValue("ATree");
 58   fpCommand -> SetParameter (parameter);           54   fpCommand -> SetParameter (parameter);
 59 }                                                  55 }
 60                                                    56 
 61 G4VisCommandDrawTree::~G4VisCommandDrawTree()      57 G4VisCommandDrawTree::~G4VisCommandDrawTree() {
 62   delete fpCommand;                                58   delete fpCommand;
 63 }                                                  59 }
 64                                                    60 
 65 void G4VisCommandDrawTree::SetNewValue(G4UIcom     61 void G4VisCommandDrawTree::SetNewValue(G4UIcommand*, G4String newValue) {
 66                                                    62 
 67   G4String pvname, system;                         63   G4String pvname, system;
 68   std::istringstream is(newValue);                 64   std::istringstream is(newValue);
 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     67   G4VGraphicsSystem* keepSystem = fpVisManager->GetCurrentGraphicsSystem();
 86   G4Scene* keepScene = fpVisManager->GetCurren     68   G4Scene* keepScene = fpVisManager->GetCurrentScene();
 87   G4VSceneHandler* keepSceneHandler = fpVisMan     69   G4VSceneHandler* keepSceneHandler = fpVisManager->GetCurrentSceneHandler();
 88   G4VViewer* keepViewer = fpVisManager->GetCur     70   G4VViewer* keepViewer = fpVisManager->GetCurrentViewer();
 89   G4VisManager::Verbosity keepVisVerbosity = f << 
 90   G4bool keepAbleness = fpVisManager->GetConcr << 
 91                                                    71 
 92   G4UImanager* UImanager = G4UImanager::GetUIp     72   G4UImanager* UImanager = G4UImanager::GetUIpointer();
 93   G4int keepUIVerbose = UImanager->GetVerboseL <<  73   G4int keepVerbose = UImanager->GetVerboseLevel();
 94   G4int newVerbose(0);                             74   G4int newVerbose(0);
 95   if (keepUIVerbose >= 2 ||                    <<  75   if (keepVerbose >= 2 ||
 96       fpVisManager->GetVerbosity() >= G4VisMan     76       fpVisManager->GetVerbosity() >= G4VisManager::confirmations)
 97     newVerbose = 2;                                77     newVerbose = 2;
 98   UImanager->SetVerboseLevel(newVerbose);          78   UImanager->SetVerboseLevel(newVerbose);
 99                                                <<  79   UImanager->ApplyCommand(G4String("/vis/open " + system));
100   auto errorCode = UImanager->ApplyCommand(G4S <<  80   UImanager->ApplyCommand(G4String("/vis/drawVolume " + pvname));
101   if (errorCode == 0) {                        <<  81   UImanager->ApplyCommand("/vis/viewer/flush");
102     if (!keepAbleness) {  // Enable temporaril <<  82   UImanager->SetVerboseLevel(keepVerbose);
103       fpVisManager->SetVerboseLevel("Quiet");  <<  83 
104       UImanager->ApplyCommand("/vis/enable");  <<  84   if (keepViewer) {
105       fpVisManager->SetVerboseLevel(keepVisVer <<  85     if (fpVisManager->GetVerbosity() >= G4VisManager::warnings) {
106     }                                          <<  86       G4cout << "Reverting to " << keepViewer->GetName() << G4endl;
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     }                                              87     }
                                                   >>  88     fpVisManager->SetCurrentGraphicsSystem(keepSystem);
                                                   >>  89     fpVisManager->SetCurrentScene(keepScene);
                                                   >>  90     fpVisManager->SetCurrentSceneHandler(keepSceneHandler);
                                                   >>  91     fpVisManager->SetCurrentViewer(keepViewer);
124   }                                                92   }
125   UImanager->SetVerboseLevel(keepUIVerbose);   << 
126 }                                                  93 }
127                                                    94 
128 ////////////// /vis/drawView /////////////////     95 ////////////// /vis/drawView ///////////////////////////////////////
129                                                    96 
130 G4VisCommandDrawView::G4VisCommandDrawView() {     97 G4VisCommandDrawView::G4VisCommandDrawView() {
131   G4bool omitable;                                 98   G4bool omitable;
132   fpCommand = new G4UIcommand("/vis/drawView",     99   fpCommand = new G4UIcommand("/vis/drawView", this);
133   fpCommand->SetGuidance                          100   fpCommand->SetGuidance
134     ("Draw view from this angle, etc.");          101     ("Draw view from this angle, etc.");
135   G4UIparameter* parameter;                       102   G4UIparameter* parameter;
136   parameter = new G4UIparameter("theta-degrees    103   parameter = new G4UIparameter("theta-degrees", 'd', omitable = true);
137   parameter -> SetDefaultValue(0.);               104   parameter -> SetDefaultValue(0.);
138   fpCommand -> SetParameter (parameter);          105   fpCommand -> SetParameter (parameter);
139   parameter = new G4UIparameter("phi-degrees",    106   parameter = new G4UIparameter("phi-degrees", 'd', omitable = true);
140   parameter -> SetDefaultValue(0.);               107   parameter -> SetDefaultValue(0.);
141   fpCommand -> SetParameter (parameter);          108   fpCommand -> SetParameter (parameter);
142   parameter = new G4UIparameter("pan-right", '    109   parameter = new G4UIparameter("pan-right", 'd', omitable = true);
143   parameter -> SetDefaultValue(0.);               110   parameter -> SetDefaultValue(0.);
144   fpCommand -> SetParameter (parameter);          111   fpCommand -> SetParameter (parameter);
145   parameter = new G4UIparameter("pan-up", 'd',    112   parameter = new G4UIparameter("pan-up", 'd', omitable = true);
146   parameter -> SetDefaultValue(0.);               113   parameter -> SetDefaultValue(0.);
147   fpCommand -> SetParameter (parameter);          114   fpCommand -> SetParameter (parameter);
148   parameter = new G4UIparameter("pan-unit", 's    115   parameter = new G4UIparameter("pan-unit", 's', omitable = true);
149   parameter -> SetDefaultValue("cm");             116   parameter -> SetDefaultValue("cm");
150   fpCommand -> SetParameter (parameter);          117   fpCommand -> SetParameter (parameter);
151   parameter = new G4UIparameter("zoom-factor",    118   parameter = new G4UIparameter("zoom-factor", 'd', omitable = true);
152   parameter -> SetDefaultValue(1.);               119   parameter -> SetDefaultValue(1.);
153   fpCommand -> SetParameter (parameter);          120   fpCommand -> SetParameter (parameter);
154   parameter = new G4UIparameter("dolly", 'd',     121   parameter = new G4UIparameter("dolly", 'd', omitable = true);
155   parameter -> SetDefaultValue(0.);               122   parameter -> SetDefaultValue(0.);
156   fpCommand -> SetParameter (parameter);          123   fpCommand -> SetParameter (parameter);
157   parameter = new G4UIparameter("dolly-unit",     124   parameter = new G4UIparameter("dolly-unit", 's', omitable = true);
158   parameter -> SetDefaultValue("cm");             125   parameter -> SetDefaultValue("cm");
159   fpCommand -> SetParameter (parameter);          126   fpCommand -> SetParameter (parameter);
160 }                                                 127 }
161                                                   128 
162 G4VisCommandDrawView::~G4VisCommandDrawView()     129 G4VisCommandDrawView::~G4VisCommandDrawView() {
163   delete fpCommand;                               130   delete fpCommand;
164 }                                                 131 }
165                                                   132 
166 void G4VisCommandDrawView::SetNewValue(G4UIcom    133 void G4VisCommandDrawView::SetNewValue(G4UIcommand*, G4String newValue) {
167                                                   134 
168   G4VisManager::Verbosity verbosity = fpVisMan    135   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
169                                                   136 
170   G4VViewer* currentViewer = fpVisManager->Get    137   G4VViewer* currentViewer = fpVisManager->GetCurrentViewer();
171   if (!currentViewer) {                           138   if (!currentViewer) {
172     if (verbosity >= G4VisManager::warnings) {    139     if (verbosity >= G4VisManager::warnings) {
173       G4warn <<                                << 140       G4cout <<
174   "WARNING: G4VisCommandsDrawView::SetNewValue    141   "WARNING: G4VisCommandsDrawView::SetNewValue: no current viewer."
175        << G4endl;                                 142        << G4endl;
176     }                                             143     }
177     return;                                       144     return;
178   }                                               145   }
179                                                   146 
180   G4String thetaDeg;                              147   G4String thetaDeg;
181   G4String phiDeg;                                148   G4String phiDeg;
182   G4String panRight;                              149   G4String panRight;
183   G4String panUp;                                 150   G4String panUp;
184   G4String panUnit;                               151   G4String panUnit;
185   G4String zoomFactor;                            152   G4String zoomFactor;
186   G4String dolly;                                 153   G4String dolly;
187   G4String dollyUnit;                             154   G4String dollyUnit;
188   std::istringstream is(newValue);                155   std::istringstream is(newValue);
189   is >> thetaDeg >> phiDeg >> panRight >> panU    156   is >> thetaDeg >> phiDeg >> panRight >> panUp >> panUnit
190      >> zoomFactor >> dolly >> dollyUnit;         157      >> zoomFactor >> dolly >> dollyUnit;
191                                                   158   
192   G4UImanager* UImanager = G4UImanager::GetUIp    159   G4UImanager* UImanager = G4UImanager::GetUIpointer();
                                                   >> 160   G4int keepVerbose = UImanager->GetVerboseLevel();
                                                   >> 161   G4int newVerbose(0);
                                                   >> 162   if (keepVerbose >= 2 ||
                                                   >> 163       fpVisManager->GetVerbosity() >= G4VisManager::confirmations)
                                                   >> 164     newVerbose = 2;
                                                   >> 165   UImanager->SetVerboseLevel(newVerbose);
193   G4ViewParameters vp = currentViewer->GetView    166   G4ViewParameters vp = currentViewer->GetViewParameters();
194   G4bool keepAutoRefresh = vp.IsAutoRefresh();    167   G4bool keepAutoRefresh = vp.IsAutoRefresh();
195   vp.SetAutoRefresh(false);                       168   vp.SetAutoRefresh(false);
196   currentViewer->SetViewParameters(vp);           169   currentViewer->SetViewParameters(vp);
197   UImanager->ApplyCommand(                        170   UImanager->ApplyCommand(
198     G4String("/vis/viewer/set/viewpointThetaPh    171     G4String("/vis/viewer/set/viewpointThetaPhi " + thetaDeg + " " + phiDeg + " deg"));
199   UImanager->ApplyCommand(                        172   UImanager->ApplyCommand(
200     G4String("/vis/viewer/panTo " + panRight +    173     G4String("/vis/viewer/panTo " + panRight + " " + panUp + " " + panUnit));
201   UImanager->ApplyCommand(                        174   UImanager->ApplyCommand(
202     G4String("/vis/viewer/zoomTo " + zoomFacto    175     G4String("/vis/viewer/zoomTo " + zoomFactor));
203   vp = currentViewer->GetViewParameters();        176   vp = currentViewer->GetViewParameters();
204   vp.SetAutoRefresh(keepAutoRefresh);             177   vp.SetAutoRefresh(keepAutoRefresh);
205   currentViewer->SetViewParameters(vp);           178   currentViewer->SetViewParameters(vp);
206   UImanager->ApplyCommand(                        179   UImanager->ApplyCommand(
207     G4String("/vis/viewer/dollyTo " + dolly +     180     G4String("/vis/viewer/dollyTo " + dolly + " " + dollyUnit));
208 }                                              << 181   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 }                                                 182 }
286                                                   183 
287 ////////////// /vis/drawVolume ///////////////    184 ////////////// /vis/drawVolume ///////////////////////////////////////
288                                                   185 
289 G4VisCommandDrawVolume::G4VisCommandDrawVolume    186 G4VisCommandDrawVolume::G4VisCommandDrawVolume() {
290   fpCommand = new G4UIcommand("/vis/drawVolume << 187   G4bool omitable;
                                                   >> 188   fpCommand = new G4UIcmdWithAString("/vis/drawVolume", this);
291   fpCommand->SetGuidance                          189   fpCommand->SetGuidance
292   ("Creates a scene containing this physical v << 190     ("Creates a scene containing this physical volume and asks the"
293    "\ncurrent viewer to draw it.  The scene be << 191      "\ncurrent viewer to draw it.  The scene becomes current.");
294   const G4UIcommandTree* tree = G4UImanager::G << 192   fpCommand -> SetGuidance 
295   const G4UIcommand* addVolCmd = tree->FindPat << 193     ("If physical-volume-name is \"world\" (the default), the main geometry"
296   // Pick up guidance from /vis/scene/add/volu << 194      "\ntree (material world) is drawn.  If \"worlds\", all worlds - material"
297   CopyGuidanceFrom(addVolCmd,fpCommand);       << 195      "\nworld and parallel worlds, if any - are drawn.  Otherwise a search of"
298   // Pick up parameters from /vis/scene/add/vo << 196      "\nall worlds is made, taking the first matching occurence only.  To see"
299   CopyParametersFrom(addVolCmd,fpCommand);     << 197      "\na representation of the geometry hierarchy of the worlds, try"
                                                   >> 198      "\n\"/vis/drawTree [worlds]\" or one of the driver/browser combinations"
                                                   >> 199      "\nthat have the required functionality, e.g., HepRep");
                                                   >> 200   fpCommand->SetParameterName("physical-volume-name", omitable = true);
                                                   >> 201   fpCommand->SetDefaultValue("world");
300 }                                                 202 }
301                                                   203 
302 G4VisCommandDrawVolume::~G4VisCommandDrawVolum    204 G4VisCommandDrawVolume::~G4VisCommandDrawVolume() {
303   delete fpCommand;                               205   delete fpCommand;
304 }                                                 206 }
305                                                   207 
306 void G4VisCommandDrawVolume::SetNewValue(G4UIc    208 void G4VisCommandDrawVolume::SetNewValue(G4UIcommand*, G4String newValue) {
307   G4VisManager::Verbosity verbosity = fpVisMan    209   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
308   G4UImanager* UImanager = G4UImanager::GetUIp    210   G4UImanager* UImanager = G4UImanager::GetUIpointer();
                                                   >> 211   G4int keepVerbose = UImanager->GetVerboseLevel();
                                                   >> 212   G4int newVerbose(0);
                                                   >> 213   if (keepVerbose >= 2 || verbosity >= G4VisManager::confirmations)
                                                   >> 214     newVerbose = 2;
                                                   >> 215   UImanager->SetVerboseLevel(newVerbose);
309   UImanager->ApplyCommand("/vis/scene/create")    216   UImanager->ApplyCommand("/vis/scene/create");
310   UImanager->ApplyCommand(G4String("/vis/scene    217   UImanager->ApplyCommand(G4String("/vis/scene/add/volume " + newValue));
311   UImanager->ApplyCommand("/vis/sceneHandler/a    218   UImanager->ApplyCommand("/vis/sceneHandler/attach");
                                                   >> 219   UImanager->SetVerboseLevel(keepVerbose);
312   static G4bool warned = false;                   220   static G4bool warned = false;
313   if (verbosity >= G4VisManager::confirmations    221   if (verbosity >= G4VisManager::confirmations && !warned) {
314     G4cout <<                                     222     G4cout <<
315       "NOTE: For systems which are not \"auto-    223       "NOTE: For systems which are not \"auto-refresh\" you will need to"
316       "\n  issue \"/vis/viewer/refresh\" or \"    224       "\n  issue \"/vis/viewer/refresh\" or \"/vis/viewer/flush\"."
317      << G4endl;                                   225      << G4endl;
318     warned = true;                                226     warned = true;
319   }                                               227   }
320 }                                                 228 }
321                                                   229 
322 ////////////// /vis/open /////////////////////    230 ////////////// /vis/open ///////////////////////////////////////
323                                                   231 
324 G4VisCommandOpen::G4VisCommandOpen() {            232 G4VisCommandOpen::G4VisCommandOpen() {
325   G4bool omitable;                                233   G4bool omitable;
326   fpCommand = new G4UIcommand("/vis/open", thi    234   fpCommand = new G4UIcommand("/vis/open", this);
327   fpCommand->SetGuidance                          235   fpCommand->SetGuidance
328     ("Creates a scene handler and viewer ready << 236     ("Creates a scene handler ready for drawing.");
329   fpCommand->SetGuidance                          237   fpCommand->SetGuidance
330     ("The scene handler and viewer names are a << 238     ("The scene handler becomes current (the name is auto-generated).");
331   // Pick up guidance from /vis/viewer/create  << 
332   const G4UIcommandTree* tree = G4UImanager::G << 
333   const G4UIcommand* viewerCreateCmd = tree->F << 
334   CopyGuidanceFrom(viewerCreateCmd,fpCommand,2 << 
335   G4UIparameter* parameter;                       239   G4UIparameter* parameter;
336   parameter = new G4UIparameter("graphics-syst << 240   parameter = new G4UIparameter("graphics-system-name", 's', omitable = false);
337   parameter->SetCurrentAsDefault(true);        << 241    const G4GraphicsSystemList& gslist =
                                                   >> 242     fpVisManager->GetAvailableGraphicsSystems();
                                                   >> 243   G4String candidates;
                                                   >> 244   for (size_t igslist = 0; igslist < gslist.size(); igslist++) {
                                                   >> 245     const G4String& name = gslist[igslist]->GetName();
                                                   >> 246     const G4String& nickname = gslist[igslist]->GetNickname();
                                                   >> 247     if (nickname.isNull()) {
                                                   >> 248       candidates += name;
                                                   >> 249     }
                                                   >> 250     else {
                                                   >> 251       candidates += nickname;
                                                   >> 252     }
                                                   >> 253     candidates += " ";
                                                   >> 254   }
                                                   >> 255   candidates = candidates.strip();
                                                   >> 256   parameter->SetParameterCandidates(candidates);
338   fpCommand->SetParameter(parameter);             257   fpCommand->SetParameter(parameter);
339   parameter = new G4UIparameter("window-size-h    258   parameter = new G4UIparameter("window-size-hint", 's', omitable = true);
340   parameter->SetGuidance                          259   parameter->SetGuidance
341     ("integer (pixels) for square window place    260     ("integer (pixels) for square window placed by window manager or"
342      " X-Windows-type geometry string, e.g. 60    261      " X-Windows-type geometry string, e.g. 600x600-100+100");
343   parameter->SetCurrentAsDefault(true);        << 262   parameter->SetDefaultValue("600");
344   fpCommand->SetParameter(parameter);             263   fpCommand->SetParameter(parameter);
345 }                                                 264 }
346                                                   265 
347 G4VisCommandOpen::~G4VisCommandOpen() {           266 G4VisCommandOpen::~G4VisCommandOpen() {
348   delete fpCommand;                               267   delete fpCommand;
349 }                                                 268 }
350                                                   269 
351 G4String G4VisCommandOpen::GetCurrentValue(G4U << 270 void G4VisCommandOpen::SetNewValue (G4UIcommand*, 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;            271   G4String systemName, windowSizeHint;
376   std::istringstream is(newValue);                272   std::istringstream is(newValue);
377   is >> systemName >> windowSizeHint;             273   is >> systemName >> windowSizeHint;
378   G4UImanager* UImanager = G4UImanager::GetUIp    274   G4UImanager* UImanager = G4UImanager::GetUIpointer();
379                                                << 275   G4int keepVerbose = UImanager->GetVerboseLevel();
380   auto errorCode = UImanager->ApplyCommand(G4S << 276   G4int newVerbose(0);
381   if (errorCode) {                             << 277   if (keepVerbose >= 2 ||
382     G4warn << "sub-command \"/vis/sceneHandler << 278       fpVisManager->GetVerbosity() >= G4VisManager::confirmations)
383     goto finish;                               << 279     newVerbose = 2;
384   }                                            << 280   UImanager->SetVerboseLevel(newVerbose);
385                                                << 281   UImanager->ApplyCommand(G4String("/vis/sceneHandler/create " + systemName));
386   errorCode = UImanager->ApplyCommand(G4String << 282   UImanager->ApplyCommand(G4String("/vis/viewer/create ! ! " + windowSizeHint));
387   if (errorCode) {                             << 283   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 }                                                 284 }
482                                                   285 
483 ////////////// /vis/specify //////////////////    286 ////////////// /vis/specify ///////////////////////////////////////
484                                                   287 
485 G4VisCommandSpecify::G4VisCommandSpecify() {      288 G4VisCommandSpecify::G4VisCommandSpecify() {
486   G4bool omitable;                                289   G4bool omitable;
487   fpCommand = new G4UIcommand("/vis/specify",     290   fpCommand = new G4UIcommand("/vis/specify", this);
488   fpCommand->SetGuidance                          291   fpCommand->SetGuidance
489     ("Draws logical volume with Boolean compon    292     ("Draws logical volume with Boolean components, voxels and readout geometry.");
490   fpCommand->SetGuidance                          293   fpCommand->SetGuidance
491     ("Synonymous with \"/vis/drawLogicalVolume << 
492   fpCommand->SetGuidance                       << 
493     ("Creates a scene consisting of this logic    294     ("Creates a scene consisting of this logical volume and asks the"
494      "\n  current viewer to draw it to the spe    295      "\n  current viewer to draw it to the specified depth of descent"
495      "\n  showing boolean components (if any), << 296      "\n  showing boolean components (if any), voxels (if any)"
496      "\n  readout geometry (if any), local axe << 297      "\n  and readout geometry (if any), under control of the appropriate flag.");
497      "\n  under control of the appropriate fla << 
498   fpCommand->SetGuidance                          298   fpCommand->SetGuidance
499   ("Note: voxels are not constructed until sta << 299     ("Note: voxels are not constructed until start of run - /run/beamOn.");
500    "\n  (For voxels without a run, \"/run/beam << 
501   fpCommand->SetGuidance("The scene becomes cu    300   fpCommand->SetGuidance("The scene becomes current.");
502   G4UIparameter* parameter;                       301   G4UIparameter* parameter;
503   parameter = new G4UIparameter("logical-volum    302   parameter = new G4UIparameter("logical-volume-name", 's', omitable = false);
504   fpCommand->SetParameter(parameter);             303   fpCommand->SetParameter(parameter);
505   parameter = new G4UIparameter("depth-of-desc    304   parameter = new G4UIparameter("depth-of-descent", 'i', omitable = true);
506   parameter->SetDefaultValue(1);                  305   parameter->SetDefaultValue(1);
507   fpCommand->SetParameter(parameter);             306   fpCommand->SetParameter(parameter);
508   parameter = new G4UIparameter("booleans-flag    307   parameter = new G4UIparameter("booleans-flag", 'b', omitable = true);
509   parameter->SetDefaultValue(true);               308   parameter->SetDefaultValue(true);
510   fpCommand->SetParameter(parameter);             309   fpCommand->SetParameter(parameter);
511   parameter = new G4UIparameter("voxels-flag",    310   parameter = new G4UIparameter("voxels-flag", 'b', omitable = true);
512   parameter->SetDefaultValue(true);               311   parameter->SetDefaultValue(true);
513   fpCommand->SetParameter(parameter);             312   fpCommand->SetParameter(parameter);
514   parameter = new G4UIparameter("readout-flag"    313   parameter = new G4UIparameter("readout-flag", 'b', omitable = true);
515   parameter->SetDefaultValue(true);               314   parameter->SetDefaultValue(true);
516   fpCommand->SetParameter(parameter);             315   fpCommand->SetParameter(parameter);
517   parameter = new G4UIparameter("axes-flag", '    316   parameter = new G4UIparameter("axes-flag", 'b', omitable = true);
518   parameter->SetDefaultValue(true);               317   parameter->SetDefaultValue(true);
519   parameter -> SetGuidance ("Set \"false\" to     318   parameter -> SetGuidance ("Set \"false\" to suppress axes.");
520   fpCommand->SetParameter(parameter);             319   fpCommand->SetParameter(parameter);
521   parameter = new G4UIparameter("check-overlap << 
522   parameter->SetDefaultValue(true);            << 
523   parameter -> SetGuidance ("Set \"false\" to  << 
524   fpCommand->SetParameter(parameter);          << 
525 }                                                 320 }
526                                                   321 
527 G4VisCommandSpecify::~G4VisCommandSpecify() {     322 G4VisCommandSpecify::~G4VisCommandSpecify() {
528   delete fpCommand;                               323   delete fpCommand;
529 }                                                 324 }
530                                                   325 
531 void G4VisCommandSpecify::SetNewValue(G4UIcomm    326 void G4VisCommandSpecify::SetNewValue(G4UIcommand*, G4String newValue) {
532   G4VisManager::Verbosity verbosity = fpVisMan    327   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
533   G4UImanager* UImanager = G4UImanager::GetUIp    328   G4UImanager* UImanager = G4UImanager::GetUIpointer();
                                                   >> 329   G4int keepVerbose = UImanager->GetVerboseLevel();
                                                   >> 330   G4int newVerbose(0);
                                                   >> 331   if (keepVerbose >= 2 || verbosity >= G4VisManager::confirmations)
                                                   >> 332     newVerbose = 2;
                                                   >> 333   UImanager->SetVerboseLevel(newVerbose);
534   // UImanager->ApplyCommand(G4String("/geomet    334   // UImanager->ApplyCommand(G4String("/geometry/print " + newValue));
535   UImanager->ApplyCommand("/vis/scene/create")    335   UImanager->ApplyCommand("/vis/scene/create");
536   UImanager->ApplyCommand(G4String("/vis/scene    336   UImanager->ApplyCommand(G4String("/vis/scene/add/logicalVolume " + newValue));
537   UImanager->ApplyCommand("/vis/sceneHandler/a    337   UImanager->ApplyCommand("/vis/sceneHandler/attach");
                                                   >> 338   UImanager->SetVerboseLevel(keepVerbose);
538   static G4bool warned = false;                   339   static G4bool warned = false;
539   if (verbosity >= G4VisManager::confirmations    340   if (verbosity >= G4VisManager::confirmations && !warned) {
540     G4cout <<                                     341     G4cout <<
541       "NOTE: For systems which are not \"auto-    342       "NOTE: For systems which are not \"auto-refresh\" you will need to"
542       "\n  issue \"/vis/viewer/refresh\" or \"    343       "\n  issue \"/vis/viewer/refresh\" or \"/vis/viewer/flush\"."
543      << G4endl;                                   344      << G4endl;
544     warned = true;                                345     warned = true;
545   }                                               346   }
546 }                                                 347 }
547                                                   348