Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/management/src/G4VisCommandsScene.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/G4VisCommandsScene.cc (Version 11.3.0) and /visualization/management/src/G4VisCommandsScene.cc (Version 10.5)


  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/scene commands - John Allison  9th Aug     28 // /vis/scene commands - John Allison  9th August 1998
 29                                                    29 
 30 #include "G4VisCommandsScene.hh"                   30 #include "G4VisCommandsScene.hh"
 31                                                    31 
 32 #include "G4VisManager.hh"                         32 #include "G4VisManager.hh"
 33 #include "G4TransportationManager.hh"              33 #include "G4TransportationManager.hh"
 34 #include "G4RunManager.hh"                         34 #include "G4RunManager.hh"
 35 #include "G4RunManagerFactory.hh"              <<  35 #ifdef G4MULTITHREADED
                                                   >>  36 #include "G4MTRunManager.hh"
                                                   >>  37 #endif
 36 #include "G4Run.hh"                                38 #include "G4Run.hh"
 37 #include "G4PhysicalVolumeModel.hh"                39 #include "G4PhysicalVolumeModel.hh"
 38 #include "G4ApplicationState.hh"                   40 #include "G4ApplicationState.hh"
 39 #include "G4UImanager.hh"                          41 #include "G4UImanager.hh"
 40 #include "G4UIcommand.hh"                          42 #include "G4UIcommand.hh"
 41 #include "G4UIcmdWithAString.hh"                   43 #include "G4UIcmdWithAString.hh"
 42 #include "G4UIcmdWithoutParameter.hh"          << 
 43 #include "G4ios.hh"                                44 #include "G4ios.hh"
 44 #include <sstream>                                 45 #include <sstream>
 45                                                    46 
 46 #define G4warn G4cout                          << 
 47                                                << 
 48 G4VVisCommandScene::G4VVisCommandScene () {}       47 G4VVisCommandScene::G4VVisCommandScene () {}
 49                                                    48 
 50 G4VVisCommandScene::~G4VVisCommandScene () {}      49 G4VVisCommandScene::~G4VVisCommandScene () {}
 51                                                    50 
 52 G4String G4VVisCommandScene::CurrentSceneName      51 G4String G4VVisCommandScene::CurrentSceneName () {
 53   const G4Scene* pScene = fpVisManager -> GetC     52   const G4Scene* pScene = fpVisManager -> GetCurrentScene ();
 54   G4String currentSceneName = "none";              53   G4String currentSceneName = "none";
 55   if (pScene) currentSceneName = pScene -> Get     54   if (pScene) currentSceneName = pScene -> GetName ();
 56   return currentSceneName;                         55   return currentSceneName;
 57 }                                                  56 }
 58                                                    57 
 59 ////////////// /vis/scene/activateModel //////     58 ////////////// /vis/scene/activateModel ////////////////////////////
 60                                                    59 
 61 G4VisCommandSceneActivateModel::G4VisCommandSc     60 G4VisCommandSceneActivateModel::G4VisCommandSceneActivateModel () {
 62   G4bool omitable;                                 61   G4bool omitable;
 63   fpCommand = new G4UIcommand ("/vis/scene/act     62   fpCommand = new G4UIcommand ("/vis/scene/activateModel", this);
 64   fpCommand -> SetGuidance                         63   fpCommand -> SetGuidance
 65     ("Activate or de-activate model.");            64     ("Activate or de-activate model.");
 66   fpCommand -> SetGuidance                         65   fpCommand -> SetGuidance
 67     ("Attempts to match search string to name      66     ("Attempts to match search string to name of model - use unique sub-string.");
 68   fpCommand -> SetGuidance                         67   fpCommand -> SetGuidance
 69     ("Use \"/vis/scene/list\" to see model nam     68     ("Use \"/vis/scene/list\" to see model names.");
 70   fpCommand -> SetGuidance                         69   fpCommand -> SetGuidance
 71     ("If name == \"all\" (default), all models     70     ("If name == \"all\" (default), all models are activated.");
 72   G4UIparameter* parameter;                        71   G4UIparameter* parameter;
 73   parameter = new G4UIparameter ("search-strin     72   parameter = new G4UIparameter ("search-string", 's', omitable = true);
 74   parameter -> SetDefaultValue ("all");            73   parameter -> SetDefaultValue ("all");
 75   fpCommand -> SetParameter (parameter);           74   fpCommand -> SetParameter (parameter);
 76   parameter = new G4UIparameter ("activate", '     75   parameter = new G4UIparameter ("activate", 'b', omitable = true);
 77   parameter -> SetDefaultValue (true);             76   parameter -> SetDefaultValue (true);
 78   fpCommand -> SetParameter (parameter);           77   fpCommand -> SetParameter (parameter);
 79 }                                                  78 }
 80                                                    79 
 81 G4VisCommandSceneActivateModel::~G4VisCommandS     80 G4VisCommandSceneActivateModel::~G4VisCommandSceneActivateModel () {
 82   delete fpCommand;                                81   delete fpCommand;
 83 }                                                  82 }
 84                                                    83 
 85 G4String G4VisCommandSceneActivateModel::GetCu     84 G4String G4VisCommandSceneActivateModel::GetCurrentValue(G4UIcommand*) {
 86   return "";                                       85   return "";
 87 }                                                  86 }
 88                                                    87 
 89 void G4VisCommandSceneActivateModel::SetNewVal     88 void G4VisCommandSceneActivateModel::SetNewValue (G4UIcommand*,
 90                  G4String newValue) {              89                  G4String newValue) {
 91                                                    90 
 92   G4VisManager::Verbosity verbosity = fpVisMan     91   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
 93                                                    92 
 94   G4String searchString, activateString;           93   G4String searchString, activateString;
 95   std::istringstream is (newValue);                94   std::istringstream is (newValue);
 96   // Need to handle the possibility that the s <<  95   is >> searchString >> activateString;
 97   // contains embedded blanks within quotation << 
 98   // (This arises if the search string is auto << 
 99   // global description, as in G4UIQt, clickin << 
100   auto lastQuotationMark = newValue.find_last_ << 
101   if (lastQuotationMark != std::string::npos)  << 
102     auto firstQuotationMark = newValue.find_fi << 
103     if (lastQuotationMark != firstQuotationMar << 
104       // Note: there must not be more quotatio << 
105       searchString = newValue.substr           << 
106       (firstQuotationMark + 1, lastQuotationMa << 
107       activateString = newValue.substr(lastQuo << 
108       // Perhaps we ought to check number of q << 
109       G4int nQuotes = 0;                       << 
110       for (auto c : newValue) {                << 
111         if (c == '"') nQuotes++;               << 
112       }                                        << 
113       if (nQuotes > 2) {                       << 
114         G4ExceptionDescription ed;             << 
115         ed << "More than 2 quotation marks in  << 
116         G4Exception("G4VisCommandSceneActivate << 
117       }                                        << 
118     }                                          << 
119   }                                            << 
120   else {                                       << 
121     // None or one quotation marks - just inpu << 
122     is >> searchString >> activateString;      << 
123   }                                            << 
124   G4bool activate = G4UIcommand::ConvertToBool     96   G4bool activate = G4UIcommand::ConvertToBool(activateString);
125                                                    97 
126   G4Scene* pScene = fpVisManager->GetCurrentSc     98   G4Scene* pScene = fpVisManager->GetCurrentScene();
127   if (!pScene) {                                   99   if (!pScene) {
128     if (verbosity >= G4VisManager::errors) {      100     if (verbosity >= G4VisManager::errors) {
129       G4warn << "ERROR: No current scene.  Ple << 101       G4cerr << "ERROR: No current scene.  Please create one." << G4endl;
130     }                                             102     }
131     return;                                       103     return;
132   }                                               104   }
133                                                   105 
134   G4VSceneHandler* pSceneHandler = fpVisManage    106   G4VSceneHandler* pSceneHandler = fpVisManager->GetCurrentSceneHandler();
135   if (!pSceneHandler) {                           107   if (!pSceneHandler) {
136     if (verbosity >= G4VisManager::errors) {      108     if (verbosity >= G4VisManager::errors) {
137       G4warn << "ERROR: No current sceneHandle << 109       G4cerr << "ERROR: No current sceneHandler.  Please create one." << G4endl;
138     }                                             110     }
139     return;                                       111     return;
140   }                                               112   }
141                                                   113 
142   if (searchString == "all" && !activate) {       114   if (searchString == "all" && !activate) {
143     if (verbosity >= G4VisManager::warnings) {    115     if (verbosity >= G4VisManager::warnings) {
144       G4warn <<                                << 116       G4cout <<
145   "WARNING: You are not allowed to de-activate    117   "WARNING: You are not allowed to de-activate all models."
146   "\n  Command ignored."                          118   "\n  Command ignored."
147        << G4endl;                                 119        << G4endl;
148     }                                             120     }
149     return;                                       121     return;
150   }                                               122   }
151                                                   123 
152   G4bool any = false;                             124   G4bool any = false;
153                                                   125 
154   std::vector<G4Scene::Model>& runDurationMode    126   std::vector<G4Scene::Model>& runDurationModelList =
155     pScene->SetRunDurationModelList();            127     pScene->SetRunDurationModelList();
156   for (size_t i = 0; i < runDurationModelList.    128   for (size_t i = 0; i < runDurationModelList.size(); i++) {
157     const G4String& modelName = runDurationMod << 129     const G4String& modelName =
158     if (searchString == "all" || modelName.fin << 130       runDurationModelList[i].fpModel->GetGlobalDescription();
                                                   >> 131     if (searchString == "all" || modelName.find(searchString)
                                                   >> 132   != std::string::npos) {
159       any = true;                                 133       any = true;
160       runDurationModelList[i].fActive = activa    134       runDurationModelList[i].fActive = activate;
161       if (verbosity >= G4VisManager::warnings)    135       if (verbosity >= G4VisManager::warnings) {
162   G4warn << "Model \"" << modelName;           << 136   G4cout << "Model \"" << modelName;
163   if (activate) G4warn << "\" activated.";     << 137   if (activate) G4cout << "\" activated.";
164   else  G4warn << "\" de-activated.";          << 138   else  G4cout << "\" de-activated.";
165   G4warn << G4endl;                            << 139   G4cout << G4endl;
166       }                                           140       }
167     }                                             141     }
168   }                                               142   }
169                                                   143 
170   std::vector<G4Scene::Model>& endOfEventModel    144   std::vector<G4Scene::Model>& endOfEventModelList =
171     pScene->SetEndOfEventModelList();             145     pScene->SetEndOfEventModelList();
172   for (size_t i = 0; i < endOfEventModelList.s    146   for (size_t i = 0; i < endOfEventModelList.size(); i++) {
173     const G4String& modelName = endOfEventMode << 147     const G4String& modelName =
174     if (searchString == "all" || modelName.fin << 148       endOfEventModelList[i].fpModel->GetGlobalDescription();
                                                   >> 149     if (searchString == "all" || modelName.find(searchString)
                                                   >> 150   != std::string::npos) {
175       any = true;                                 151       any = true;
176       endOfEventModelList[i].fActive = activat    152       endOfEventModelList[i].fActive = activate;
177       if (verbosity >= G4VisManager::warnings)    153       if (verbosity >= G4VisManager::warnings) {
178   G4warn << "Model \"" << modelName;           << 154   G4cout << "Model \"" << modelName;
179   if (activate) G4warn << "\" activated.";     << 155   if (activate) G4cout << "\" activated.";
180   else  G4warn << "\" de-activated.";          << 156   else  G4cout << "\" de-activated.";
181   G4warn << G4endl;                            << 157   G4cout << G4endl;
182       }                                           158       }
183     }                                             159     }
184   }                                               160   }
185                                                   161 
186   std::vector<G4Scene::Model>& endOfRunModelLi    162   std::vector<G4Scene::Model>& endOfRunModelList =
187     pScene->SetEndOfRunModelList();               163     pScene->SetEndOfRunModelList();
188   for (size_t i = 0; i < endOfRunModelList.siz    164   for (size_t i = 0; i < endOfRunModelList.size(); i++) {
189     const G4String& modelName = endOfRunModelL << 165     const G4String& modelName =
190     if (searchString == "all" || modelName.fin << 166       endOfRunModelList[i].fpModel->GetGlobalDescription();
                                                   >> 167     if (searchString == "all" || modelName.find(searchString)
                                                   >> 168   != std::string::npos) {
191       any = true;                                 169       any = true;
192       endOfRunModelList[i].fActive = activate;    170       endOfRunModelList[i].fActive = activate;
193       if (verbosity >= G4VisManager::warnings)    171       if (verbosity >= G4VisManager::warnings) {
194   G4warn << "Model \"" << modelName;           << 172   G4cout << "Model \"" << modelName;
195   if (activate) G4warn << "\" activated.";     << 173   if (activate) G4cout << "\" activated.";
196   else  G4warn << "\" de-activated.";          << 174   else  G4cout << "\" de-activated.";
197   G4warn << G4endl;                            << 175   G4cout << G4endl;
198       }                                           176       }
199     }                                             177     }
200   }                                               178   }
201                                                   179 
202   if (!any) {                                     180   if (!any) {
203     if (verbosity >= G4VisManager::warnings) {    181     if (verbosity >= G4VisManager::warnings) {
204       G4warn << "WARNING: No match found." <<  << 182       G4cout << "WARNING: No match found." << G4endl;
205     }                                             183     }
206     return;                                       184     return;
207   }                                               185   }
208                                                   186 
209   CheckSceneAndNotifyHandlers (pScene);           187   CheckSceneAndNotifyHandlers (pScene);
210 }                                                 188 }
211                                                   189 
212 ////////////// /vis/scene/create /////////////    190 ////////////// /vis/scene/create ///////////////////////////////////////
213                                                   191 
214 G4VisCommandSceneCreate::G4VisCommandSceneCrea    192 G4VisCommandSceneCreate::G4VisCommandSceneCreate (): fId (0) {
215   G4bool omitable;                                193   G4bool omitable;
216   fpCommand = new G4UIcmdWithAString ("/vis/sc    194   fpCommand = new G4UIcmdWithAString ("/vis/scene/create", this);
217   fpCommand -> SetGuidance                        195   fpCommand -> SetGuidance
218     ("Creates an empty scene.");                  196     ("Creates an empty scene.");
219   fpCommand -> SetGuidance                        197   fpCommand -> SetGuidance
220     ("Invents a name if not supplied.  This sc    198     ("Invents a name if not supplied.  This scene becomes current.");
221   fpCommand -> SetParameterName ("scene-name",    199   fpCommand -> SetParameterName ("scene-name", omitable = true);
222 }                                                 200 }
223                                                   201 
224 G4VisCommandSceneCreate::~G4VisCommandSceneCre    202 G4VisCommandSceneCreate::~G4VisCommandSceneCreate () {
225   delete fpCommand;                               203   delete fpCommand;
226 }                                                 204 }
227                                                   205 
228 G4String G4VisCommandSceneCreate::NextName ()     206 G4String G4VisCommandSceneCreate::NextName () {
229   std::ostringstream oss;                         207   std::ostringstream oss;
230   oss << "scene-" << fId;                         208   oss << "scene-" << fId;
231   return oss.str();                               209   return oss.str();
232 }                                                 210 }
233                                                   211 
234 G4String G4VisCommandSceneCreate::GetCurrentVa    212 G4String G4VisCommandSceneCreate::GetCurrentValue (G4UIcommand*) {
235   return "";                                      213   return "";
236 }                                                 214 }
237                                                   215 
238 void G4VisCommandSceneCreate::SetNewValue (G4U    216 void G4VisCommandSceneCreate::SetNewValue (G4UIcommand*, G4String newValue) {
239                                                   217 
240   G4VisManager::Verbosity verbosity = fpVisMan    218   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
241                                                   219 
242   G4String& newName = newValue;                   220   G4String& newName = newValue;
243   G4String nextName = NextName ();                221   G4String nextName = NextName ();
244                                                   222 
245   if (newName == "") {                            223   if (newName == "") {
246     newName = nextName;                           224     newName = nextName;
247   }                                               225   }
248   if (newName == nextName) fId++;                 226   if (newName == nextName) fId++;
249                                                   227 
250   G4SceneList& sceneList = fpVisManager -> Set    228   G4SceneList& sceneList = fpVisManager -> SetSceneList ();
251   std::size_t iScene, nScenes = sceneList.size << 229   G4int iScene, nScenes = sceneList.size ();
252   for (iScene = 0; iScene < nScenes; ++iScene) << 230   for (iScene = 0; iScene < nScenes; iScene++) {
253     if (sceneList [iScene] -> GetName () == ne    231     if (sceneList [iScene] -> GetName () == newName) break;
254   }                                               232   }
255   if (iScene < nScenes) {                         233   if (iScene < nScenes) {
256     if (verbosity >= G4VisManager::warnings) {    234     if (verbosity >= G4VisManager::warnings) {
257       G4warn << "WARNING: Scene \"" << newName << 235       G4cout << "WARNING: Scene \"" << newName << "\" already exists."
258        << "\n  New scene not created."            236        << "\n  New scene not created."
259        << G4endl;                                 237        << G4endl;
260     }                                             238     }
261   } else {                                        239   } else {
262                                                   240 
263     // Add empty scene data object to list...     241     // Add empty scene data object to list...
264     G4Scene* pScene = new G4Scene (newName);      242     G4Scene* pScene = new G4Scene (newName);
265     sceneList.push_back (pScene);                 243     sceneList.push_back (pScene);
266     fpVisManager -> SetCurrentScene (pScene);     244     fpVisManager -> SetCurrentScene (pScene);
267                                                   245 
268     if (verbosity >= G4VisManager::confirmatio    246     if (verbosity >= G4VisManager::confirmations) {
269       G4cout << "New empty scene \"" << newNam    247       G4cout << "New empty scene \"" << newName << "\" created." << G4endl;
270     }                                             248     }
271   }                                               249   }
272 }                                                 250 }
273                                                   251 
274 ////////////// /vis/scene/endOfEventAction ///    252 ////////////// /vis/scene/endOfEventAction ////////////////////////////
275                                                   253 
276 G4VisCommandSceneEndOfEventAction::G4VisComman    254 G4VisCommandSceneEndOfEventAction::G4VisCommandSceneEndOfEventAction () {
277   G4bool omitable;                                255   G4bool omitable;
278   fpCommand = new G4UIcommand ("/vis/scene/end    256   fpCommand = new G4UIcommand ("/vis/scene/endOfEventAction", this);
279   fpCommand -> SetGuidance                        257   fpCommand -> SetGuidance
280     ("Accumulate or refresh the viewer for eac    258     ("Accumulate or refresh the viewer for each new event.");
281   fpCommand -> SetGuidance                        259   fpCommand -> SetGuidance
282     ("\"accumulate\": viewer accumulates hits,    260     ("\"accumulate\": viewer accumulates hits, etc., event by event, or");
283   fpCommand -> SetGuidance                        261   fpCommand -> SetGuidance
284     ("\"refresh\": viewer shows them at end of    262     ("\"refresh\": viewer shows them at end of event or, for direct-screen"
285      "\n  viewers, refreshes the screen just b    263      "\n  viewers, refreshes the screen just before drawing the next event.");
286   G4UIparameter* parameter;                       264   G4UIparameter* parameter;
287   parameter = new G4UIparameter ("action", 's'    265   parameter = new G4UIparameter ("action", 's', omitable = true);
288   parameter -> SetParameterCandidates ("accumu    266   parameter -> SetParameterCandidates ("accumulate refresh");
289   parameter -> SetDefaultValue ("refresh");       267   parameter -> SetDefaultValue ("refresh");
290   fpCommand -> SetParameter (parameter);          268   fpCommand -> SetParameter (parameter);
291   parameter = new G4UIparameter ("maxNumber",     269   parameter = new G4UIparameter ("maxNumber", 'i', omitable = true);
292   parameter -> SetDefaultValue (100);             270   parameter -> SetDefaultValue (100);
293   parameter -> SetGuidance                        271   parameter -> SetGuidance
294   ("Maximum number of events kept.  Unlimited     272   ("Maximum number of events kept.  Unlimited if negative.");
295   fpCommand -> SetParameter (parameter);          273   fpCommand -> SetParameter (parameter);
296 }                                                 274 }
297                                                   275 
298 G4VisCommandSceneEndOfEventAction::~G4VisComma    276 G4VisCommandSceneEndOfEventAction::~G4VisCommandSceneEndOfEventAction () {
299   delete fpCommand;                               277   delete fpCommand;
300 }                                                 278 }
301                                                   279 
302 G4String G4VisCommandSceneEndOfEventAction::Ge    280 G4String G4VisCommandSceneEndOfEventAction::GetCurrentValue(G4UIcommand*) {
303   return "";                                      281   return "";
304 }                                                 282 }
305                                                   283 
306 void G4VisCommandSceneEndOfEventAction::SetNew    284 void G4VisCommandSceneEndOfEventAction::SetNewValue (G4UIcommand*,
307                  G4String newValue) {             285                  G4String newValue) {
308                                                   286 
309   G4VisManager::Verbosity verbosity = fpVisMan    287   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
310                                                   288 
311   G4String action;                                289   G4String action;
312   G4int maxNumberOfKeptEvents;                    290   G4int maxNumberOfKeptEvents;
313   std::istringstream is (newValue);               291   std::istringstream is (newValue);
314   is >> action >> maxNumberOfKeptEvents;          292   is >> action >> maxNumberOfKeptEvents;
315                                                   293 
316   G4Scene* pScene = fpVisManager->GetCurrentSc    294   G4Scene* pScene = fpVisManager->GetCurrentScene();
317   if (!pScene) {                                  295   if (!pScene) {
318     if (verbosity >= G4VisManager::errors) {      296     if (verbosity >= G4VisManager::errors) {
319       G4warn << "ERROR: No current scene.  Ple << 297       G4cerr << "ERROR: No current scene.  Please create one." << G4endl;
320     }                                             298     }
321     return;                                       299     return;
322   }                                               300   }
323                                                   301 
324   G4VSceneHandler* pSceneHandler = fpVisManage    302   G4VSceneHandler* pSceneHandler = fpVisManager->GetCurrentSceneHandler();
325   if (!pSceneHandler) {                           303   if (!pSceneHandler) {
326     if (verbosity >= G4VisManager::errors) {      304     if (verbosity >= G4VisManager::errors) {
327       G4warn << "ERROR: No current sceneHandle << 305       G4cerr << "ERROR: No current sceneHandler.  Please create one." << G4endl;
328     }                                             306     }
329     return;                                       307     return;
330   }                                               308   }
331                                                   309 
332   if (action == "accumulate") {                   310   if (action == "accumulate") {
333     pScene->SetRefreshAtEndOfEvent(false);        311     pScene->SetRefreshAtEndOfEvent(false);
334     pScene->SetMaxNumberOfKeptEvents(maxNumber    312     pScene->SetMaxNumberOfKeptEvents(maxNumberOfKeptEvents);
335   }                                               313   }
336   else if (action == "refresh") {                 314   else if (action == "refresh") {
337     if (!pScene->GetRefreshAtEndOfRun()) {        315     if (!pScene->GetRefreshAtEndOfRun()) {
338       if (verbosity >= G4VisManager::errors) {    316       if (verbosity >= G4VisManager::errors) {
339   G4warn <<                                    << 317   G4cerr <<
340     "ERROR: Cannot refresh events unless runs     318     "ERROR: Cannot refresh events unless runs refresh too."
341     "\n  Use \"/vis/scene/endOfRun refresh\"."    319     "\n  Use \"/vis/scene/endOfRun refresh\"."
342          << G4endl;                               320          << G4endl;
343       }                                           321       }
344     } else {                                      322     } else {
345       pScene->SetRefreshAtEndOfEvent(true);       323       pScene->SetRefreshAtEndOfEvent(true);
346       pScene->SetMaxNumberOfKeptEvents(maxNumb    324       pScene->SetMaxNumberOfKeptEvents(maxNumberOfKeptEvents);
347       pSceneHandler->SetMarkForClearingTransie    325       pSceneHandler->SetMarkForClearingTransientStore(true);
348     }                                             326     }
349   }                                               327   }
350   else {                                          328   else {
351     if (verbosity >= G4VisManager::errors) {      329     if (verbosity >= G4VisManager::errors) {
352       G4warn <<                                << 330       G4cerr <<
353   "ERROR: unrecognised parameter \"" << action    331   "ERROR: unrecognised parameter \"" << action << "\"."
354              << G4endl;                           332              << G4endl;
355     }                                             333     }
356     return;                                       334     return;
357   }                                               335   }
358                                                   336 
359   // Change of transients behaviour, so...        337   // Change of transients behaviour, so...
360   fpVisManager->ResetTransientsDrawnFlags();      338   fpVisManager->ResetTransientsDrawnFlags();
361                                                   339 
362   // Are there any events currently kept...       340   // Are there any events currently kept...
363   size_t nCurrentlyKept    = 0;                << 341   size_t nCurrentlyKept = 0;
364   G4RunManager* runManager = G4RunManagerFacto << 342   G4RunManager* runManager = G4RunManager::GetRunManager();
365   if(runManager)                               << 343 #ifdef G4MULTITHREADED
366   {                                            << 344   if(G4Threading::IsMultithreadedApplication())
                                                   >> 345   { runManager = G4MTRunManager::GetMasterRunManager(); }
                                                   >> 346 #endif
                                                   >> 347   if (runManager) {
367     const G4Run* currentRun = runManager->GetC    348     const G4Run* currentRun = runManager->GetCurrentRun();
368     if(currentRun)                             << 349     if (currentRun) {
369     {                                          << 350       const std::vector<const G4Event*>* events =
370       const std::vector<const G4Event*>* event << 351   currentRun->GetEventVector();
371       if(events)                               << 352       if (events) nCurrentlyKept = events->size();
372         nCurrentlyKept = events->size();       << 
373     }                                             353     }
374   }                                               354   }
375                                                   355 
376   if (verbosity >= G4VisManager::confirmations    356   if (verbosity >= G4VisManager::confirmations) {
377     G4cout << "End of event action set to ";      357     G4cout << "End of event action set to ";
378     if (pScene->GetRefreshAtEndOfEvent()) G4co    358     if (pScene->GetRefreshAtEndOfEvent()) G4cout << "\"refresh\".";
379     else {                                        359     else {
380       G4cout << "\"accumulate\"."                 360       G4cout << "\"accumulate\"."
381   "\n  Maximum number of events to be kept: "     361   "\n  Maximum number of events to be kept: "
382        << maxNumberOfKeptEvents                   362        << maxNumberOfKeptEvents
383        << " (unlimited if negative)."             363        << " (unlimited if negative)."
384   "\n  This may be changed with, e.g., "          364   "\n  This may be changed with, e.g., "
385   "\"/vis/scene/endOfEventAction accumulate 10    365   "\"/vis/scene/endOfEventAction accumulate 1000\".";
386     }                                             366     }
387     G4cout << G4endl;                             367     G4cout << G4endl;
388   }                                               368   }
389                                                   369 
390   if (!pScene->GetRefreshAtEndOfEvent() &&        370   if (!pScene->GetRefreshAtEndOfEvent() &&
391       maxNumberOfKeptEvents != 0 &&               371       maxNumberOfKeptEvents != 0 &&
392       verbosity >= G4VisManager::warnings) {      372       verbosity >= G4VisManager::warnings) {
393     G4warn << "WARNING: ";                     << 373     G4cout << "WARNING: ";
394     if (nCurrentlyKept) {                         374     if (nCurrentlyKept) {
395       G4warn <<                                << 375       G4cout <<
396   "\n  There are currently " << nCurrentlyKept    376   "\n  There are currently " << nCurrentlyKept
397        << " events kept for refreshing and/or     377        << " events kept for refreshing and/or reviewing.";
398     } else {                                      378     } else {
399       G4warn << "The vis manager will keep ";  << 379       G4cout << "The vis manager will keep ";
400       if (maxNumberOfKeptEvents < 0) G4warn << << 380       if (maxNumberOfKeptEvents < 0) G4cout << "an unlimited number of";
401       else G4warn << "up to " << maxNumberOfKe << 381       else G4cout << "up to " << maxNumberOfKeptEvents;
402       G4warn << " events.";                    << 382       G4cout << " events.";
403       if (maxNumberOfKeptEvents > 1 || maxNumb    383       if (maxNumberOfKeptEvents > 1 || maxNumberOfKeptEvents < 0)
404   G4warn <<                                    << 384   G4cout <<
405     "\n  This may use a lot of memory."           385     "\n  This may use a lot of memory."
406     "\n  It may be changed with, e.g., "          386     "\n  It may be changed with, e.g., "
407     "\"/vis/scene/endOfEventAction accumulate     387     "\"/vis/scene/endOfEventAction accumulate 10\".";
408     }                                             388     }
409     G4warn << G4endl;                          << 389     G4cout << G4endl;
410   }                                               390   }
411 }                                                 391 }
412                                                   392 
413 ////////////// /vis/scene/endOfRunAction /////    393 ////////////// /vis/scene/endOfRunAction ////////////////////////////
414                                                   394 
415 G4VisCommandSceneEndOfRunAction::G4VisCommandS    395 G4VisCommandSceneEndOfRunAction::G4VisCommandSceneEndOfRunAction () {
416   G4bool omitable;                                396   G4bool omitable;
417   fpCommand = new G4UIcmdWithAString ("/vis/sc    397   fpCommand = new G4UIcmdWithAString ("/vis/scene/endOfRunAction", this);
418   fpCommand -> SetGuidance                        398   fpCommand -> SetGuidance
419     ("Accumulate or refresh the viewer for eac    399     ("Accumulate or refresh the viewer for each new run.");
420   fpCommand -> SetGuidance                        400   fpCommand -> SetGuidance
421     ("\"accumulate\": viewer accumulates hits,    401     ("\"accumulate\": viewer accumulates hits, etc., run by run, or");
422   fpCommand -> SetGuidance                        402   fpCommand -> SetGuidance
423     ("\"refresh\": viewer shows them at end of    403     ("\"refresh\": viewer shows them at end of run or, for direct-screen"
424      "\n  viewers, refreshes the screen just b    404      "\n  viewers, refreshes the screen just before drawing the first"
425      "\n  event of the next run.");               405      "\n  event of the next run.");
426   fpCommand -> SetGuidance ("The detector rema    406   fpCommand -> SetGuidance ("The detector remains or is redrawn.");
427   fpCommand -> SetParameterName ("action", omi    407   fpCommand -> SetParameterName ("action", omitable = true);
428   fpCommand -> SetCandidates ("accumulate refr    408   fpCommand -> SetCandidates ("accumulate refresh");
429   fpCommand -> SetDefaultValue ("refresh");       409   fpCommand -> SetDefaultValue ("refresh");
430 }                                                 410 }
431                                                   411 
432 G4VisCommandSceneEndOfRunAction::~G4VisCommand    412 G4VisCommandSceneEndOfRunAction::~G4VisCommandSceneEndOfRunAction () {
433   delete fpCommand;                               413   delete fpCommand;
434 }                                                 414 }
435                                                   415 
436 G4String G4VisCommandSceneEndOfRunAction::GetC    416 G4String G4VisCommandSceneEndOfRunAction::GetCurrentValue(G4UIcommand*) {
437   return "";                                      417   return "";
438 }                                                 418 }
439                                                   419 
440 void G4VisCommandSceneEndOfRunAction::SetNewVa    420 void G4VisCommandSceneEndOfRunAction::SetNewValue (G4UIcommand*,
441                  G4String newValue) {             421                  G4String newValue) {
442                                                   422 
443   G4VisManager::Verbosity verbosity = fpVisMan    423   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
444                                                   424 
445   G4String action;                                425   G4String action;
446   std::istringstream is (newValue);               426   std::istringstream is (newValue);
447   is >> action;                                   427   is >> action;
448                                                   428 
449   G4Scene* pScene = fpVisManager->GetCurrentSc    429   G4Scene* pScene = fpVisManager->GetCurrentScene();
450   if (!pScene) {                                  430   if (!pScene) {
451     if (verbosity >= G4VisManager::errors) {      431     if (verbosity >= G4VisManager::errors) {
452       G4warn << "ERROR: No current scene.  Ple << 432       G4cerr << "ERROR: No current scene.  Please create one." << G4endl;
453     }                                             433     }
454     return;                                       434     return;
455   }                                               435   }
456                                                   436 
457   G4VSceneHandler* pSceneHandler = fpVisManage    437   G4VSceneHandler* pSceneHandler = fpVisManager->GetCurrentSceneHandler();
458   if (!pSceneHandler) {                           438   if (!pSceneHandler) {
459     if (verbosity >= G4VisManager::errors) {      439     if (verbosity >= G4VisManager::errors) {
460       G4warn << "ERROR: No current sceneHandle << 440       G4cerr << "ERROR: No current sceneHandler.  Please create one." << G4endl;
461     }                                             441     }
462     return;                                       442     return;
463   }                                               443   }
464                                                   444 
465   if (action == "accumulate") {                   445   if (action == "accumulate") {
466     if (pScene->GetRefreshAtEndOfEvent()) {       446     if (pScene->GetRefreshAtEndOfEvent()) {
467       if (verbosity >= G4VisManager::errors) {    447       if (verbosity >= G4VisManager::errors) {
468   G4warn <<                                    << 448   G4cerr <<
469     "ERROR: Cannot accumulate runs unless even    449     "ERROR: Cannot accumulate runs unless events accumulate too."
470     "\n  Use \"/vis/scene/endOfEventAction acc    450     "\n  Use \"/vis/scene/endOfEventAction accumulate\"."
471          << G4endl;                               451          << G4endl;
472       }                                           452       }
473     }                                             453     }
474     else {                                        454     else {
475       pScene->SetRefreshAtEndOfRun(false);        455       pScene->SetRefreshAtEndOfRun(false);
476     }                                             456     }
477   }                                               457   }
478   else if (action == "refresh") {                 458   else if (action == "refresh") {
479     pScene->SetRefreshAtEndOfRun(true);           459     pScene->SetRefreshAtEndOfRun(true);
480     pSceneHandler->SetMarkForClearingTransient    460     pSceneHandler->SetMarkForClearingTransientStore(true);
481   }                                               461   }
482   else {                                          462   else {
483     if (verbosity >= G4VisManager::errors) {      463     if (verbosity >= G4VisManager::errors) {
484       G4warn <<                                << 464       G4cerr <<
485   "ERROR: unrecognised parameter \"" << action    465   "ERROR: unrecognised parameter \"" << action << "\"."
486              << G4endl;                           466              << G4endl;
487     }                                             467     }
488     return;                                       468     return;
489   }                                               469   }
490                                                   470 
491   // Change of transients behaviour, so...        471   // Change of transients behaviour, so...
492   fpVisManager->ResetTransientsDrawnFlags();      472   fpVisManager->ResetTransientsDrawnFlags();
493                                                   473 
494   if (verbosity >= G4VisManager::confirmations    474   if (verbosity >= G4VisManager::confirmations) {
495     G4cout << "End of run action set to \"";      475     G4cout << "End of run action set to \"";
496     if (pScene->GetRefreshAtEndOfRun()) G4cout    476     if (pScene->GetRefreshAtEndOfRun()) G4cout << "refresh";
497     else G4cout << "accumulate";                  477     else G4cout << "accumulate";
498     G4cout << "\"" << G4endl;                     478     G4cout << "\"" << G4endl;
499   }                                               479   }
500 }                                                 480 }
501                                                   481 
502 ////////////// /vis/scene/list ///////////////    482 ////////////// /vis/scene/list ///////////////////////////////////////
503                                                   483 
504 G4VisCommandSceneList::G4VisCommandSceneList (    484 G4VisCommandSceneList::G4VisCommandSceneList () {
505   G4bool omitable;                                485   G4bool omitable;
506   fpCommand = new G4UIcommand ("/vis/scene/lis    486   fpCommand = new G4UIcommand ("/vis/scene/list", this);
507   fpCommand -> SetGuidance ("Lists scene(s).")    487   fpCommand -> SetGuidance ("Lists scene(s).");
508   fpCommand -> SetGuidance                        488   fpCommand -> SetGuidance
509     ("\"help /vis/verbose\" for definition of     489     ("\"help /vis/verbose\" for definition of verbosity.");
510   G4UIparameter* parameter;                       490   G4UIparameter* parameter;
511   parameter = new G4UIparameter ("scene-name",    491   parameter = new G4UIparameter ("scene-name", 's', omitable = true);
512   parameter -> SetDefaultValue ("all");           492   parameter -> SetDefaultValue ("all");
513   fpCommand -> SetParameter (parameter);          493   fpCommand -> SetParameter (parameter);
514   parameter = new G4UIparameter ("verbosity",     494   parameter = new G4UIparameter ("verbosity", 's', omitable = true);
515   parameter -> SetDefaultValue ("warnings");      495   parameter -> SetDefaultValue ("warnings");
516   fpCommand -> SetParameter (parameter);          496   fpCommand -> SetParameter (parameter);
517 }                                                 497 }
518                                                   498 
519 G4VisCommandSceneList::~G4VisCommandSceneList     499 G4VisCommandSceneList::~G4VisCommandSceneList () {
520   delete fpCommand;                               500   delete fpCommand;
521 }                                                 501 }
522                                                   502 
523 G4String G4VisCommandSceneList::GetCurrentValu    503 G4String G4VisCommandSceneList::GetCurrentValue (G4UIcommand*) {
524   return "";                                      504   return "";
525 }                                                 505 }
526                                                   506 
527 void G4VisCommandSceneList::SetNewValue (G4UIc    507 void G4VisCommandSceneList::SetNewValue (G4UIcommand*, G4String newValue) {
528   G4String name, verbosityString;                 508   G4String name, verbosityString;
529   std::istringstream is (newValue);               509   std::istringstream is (newValue);
530   is >> name >> verbosityString;                  510   is >> name >> verbosityString;
531   G4VisManager::Verbosity verbosity =             511   G4VisManager::Verbosity verbosity =
532     fpVisManager->GetVerbosityValue(verbosityS    512     fpVisManager->GetVerbosityValue(verbosityString);
533   const G4Scene* currentScene = fpVisManager -    513   const G4Scene* currentScene = fpVisManager -> GetCurrentScene ();
534   G4String currentName;                           514   G4String currentName;
535   if (currentScene) currentName = currentScene    515   if (currentScene) currentName = currentScene->GetName();
536                                                   516 
537   G4SceneList& sceneList = fpVisManager -> Set    517   G4SceneList& sceneList = fpVisManager -> SetSceneList ();
538   std::size_t iScene, nScenes = sceneList.size << 518   G4int iScene, nScenes = sceneList.size ();
539   G4bool found = false;                           519   G4bool found = false;
540   for (iScene = 0; iScene < nScenes; ++iScene) << 520   for (iScene = 0; iScene < nScenes; iScene++) {
541     G4Scene* pScene = sceneList [iScene];         521     G4Scene* pScene = sceneList [iScene];
542     const G4String& iName = pScene -> GetName     522     const G4String& iName = pScene -> GetName ();
543     if (name != "all") {                          523     if (name != "all") {
544       if (name != iName) continue;                524       if (name != iName) continue;
545     }                                             525     }
546     found = true;                                 526     found = true;
547     if (iName == currentName) {                   527     if (iName == currentName) {
548       G4cout << "  (current)";                    528       G4cout << "  (current)";
549     }                                             529     }
550     else {                                        530     else {
551       G4cout << "           ";                    531       G4cout << "           ";
552     }                                             532     }
553     G4cout << " scene \"" << iName << "\"";       533     G4cout << " scene \"" << iName << "\"";
554     if (verbosity >= G4VisManager::warnings) {    534     if (verbosity >= G4VisManager::warnings) {
555       std::size_t i;                           << 535       G4int i;
556       G4cout << "\n  Run-duration models:";       536       G4cout << "\n  Run-duration models:";
557       std::size_t nRunModels = pScene -> GetRu << 537       G4int nRunModels = pScene -> GetRunDurationModelList ().size ();
558       if (nRunModels == 0) {                      538       if (nRunModels == 0) {
559   G4cout << " none.";                             539   G4cout << " none.";
560       }                                           540       }
561       for (i = 0; i < nRunModels; ++i) {       << 541       for (i = 0; i < nRunModels; i++) {
562   if (pScene -> GetRunDurationModelList()[i].f    542   if (pScene -> GetRunDurationModelList()[i].fActive)
563     G4cout << "\n   Active:   ";                  543     G4cout << "\n   Active:   ";
564   else G4cout << "\n   Inactive: ";               544   else G4cout << "\n   Inactive: ";
565   G4VModel* pModel = pScene -> GetRunDurationM    545   G4VModel* pModel = pScene -> GetRunDurationModelList()[i].fpModel;
566   G4cout << pModel -> GetGlobalDescription ();    546   G4cout << pModel -> GetGlobalDescription ();
567       }                                           547       }
568       G4cout << "\n  End-of-event models:";       548       G4cout << "\n  End-of-event models:";
569       std::size_t nEOEModels = pScene -> GetEn << 549       G4int nEOEModels = pScene -> GetEndOfEventModelList ().size ();
570       if (nEOEModels == 0) {                      550       if (nEOEModels == 0) {
571   G4cout << " none.";                             551   G4cout << " none.";
572       }                                           552       }
573       for (i = 0; i < nEOEModels; ++i) {       << 553       for (i = 0; i < nEOEModels; i++) {
574   if (pScene -> GetEndOfEventModelList()[i].fA    554   if (pScene -> GetEndOfEventModelList()[i].fActive)
575     G4cout << "\n   Active:   ";                  555     G4cout << "\n   Active:   ";
576   else G4cout << "\n   Inactive: ";               556   else G4cout << "\n   Inactive: ";
577   G4VModel* pModel = pScene -> GetEndOfEventMo    557   G4VModel* pModel = pScene -> GetEndOfEventModelList()[i].fpModel;
578   G4cout << pModel -> GetGlobalDescription ();    558   G4cout << pModel -> GetGlobalDescription ();
579       }                                           559       }
580       G4cout << "\n  End-of-run models:";         560       G4cout << "\n  End-of-run models:";
581       std::size_t nEORModels = pScene -> GetEn << 561       G4int nEORModels = pScene -> GetEndOfRunModelList ().size ();
582       if (nEORModels == 0) {                      562       if (nEORModels == 0) {
583   G4cout << " none.";                             563   G4cout << " none.";
584       }                                           564       }
585       for (i = 0; i < nEORModels; ++i) {       << 565       for (i = 0; i < nEORModels; i++) {
586   if (pScene -> GetEndOfRunModelList()[i].fAct    566   if (pScene -> GetEndOfRunModelList()[i].fActive)
587     G4cout << "\n   Active:   ";                  567     G4cout << "\n   Active:   ";
588   else G4cout << "\n   Inactive: ";               568   else G4cout << "\n   Inactive: ";
589   G4VModel* pModel = pScene -> GetEndOfRunMode    569   G4VModel* pModel = pScene -> GetEndOfRunModelList()[i].fpModel;
590   G4cout << pModel -> GetGlobalDescription ();    570   G4cout << pModel -> GetGlobalDescription ();
591       }                                           571       }
592     }                                             572     }
593     if (verbosity >= G4VisManager::parameters)    573     if (verbosity >= G4VisManager::parameters) {
594       G4cout << "\n  " << *sceneList [iScene];    574       G4cout << "\n  " << *sceneList [iScene];
595     }                                             575     }
596     G4cout << G4endl;                             576     G4cout << G4endl;
597   }                                               577   }
598   if (!found) {                                   578   if (!found) {
599     G4warn << "No scenes found";               << 579     G4cout << "No scenes found";
600     if (name != "all") {                          580     if (name != "all") {
601       G4warn << " of name \"" << name << "\""; << 581       G4cout << " of name \"" << name << "\"";
602     }                                             582     }
603     G4warn << "." << G4endl;                   << 583     G4cout << "." << G4endl;
604   }                                               584   }
605 }                                                 585 }
606                                                   586 
607 ////////////// /vis/scene/notifyHandlers /////    587 ////////////// /vis/scene/notifyHandlers /////////////////////////
608                                                   588 
609 G4VisCommandSceneNotifyHandlers::G4VisCommandS    589 G4VisCommandSceneNotifyHandlers::G4VisCommandSceneNotifyHandlers () {
610   G4bool omitable;                                590   G4bool omitable;
611   fpCommand = new G4UIcommand ("/vis/scene/not    591   fpCommand = new G4UIcommand ("/vis/scene/notifyHandlers", this);
612   fpCommand -> SetGuidance                        592   fpCommand -> SetGuidance
613     ("Notifies scene handlers and forces re-re    593     ("Notifies scene handlers and forces re-rendering.");
614   fpCommand -> SetGuidance                        594   fpCommand -> SetGuidance
615     ("Notifies the handler(s) of the specified    595     ("Notifies the handler(s) of the specified scene and forces a"
616      "\nreconstruction of any graphical databa    596      "\nreconstruction of any graphical databases."
617      "\nClears and refreshes all viewers of cu    597      "\nClears and refreshes all viewers of current scene."
618      "\n  The default action \"refresh\" does     598      "\n  The default action \"refresh\" does not issue \"update\" (see"
619      "\n    /vis/viewer/update)."                 599      "\n    /vis/viewer/update)."
620      "\nIf \"flush\" is specified, it issues a    600      "\nIf \"flush\" is specified, it issues an \"update\" as well as"
621      "\n  \"refresh\" - \"update\" and initiat    601      "\n  \"refresh\" - \"update\" and initiates post-processing"
622      "\n  for graphics systems which need it."    602      "\n  for graphics systems which need it.");
623   fpCommand -> SetGuidance                        603   fpCommand -> SetGuidance 
624     ("The default for <scene-name> is the curr    604     ("The default for <scene-name> is the current scene name.");
625   fpCommand -> SetGuidance                        605   fpCommand -> SetGuidance
626     ("This command does not change current sce    606     ("This command does not change current scene, scene handler or viewer.");
627   G4UIparameter* parameter;                       607   G4UIparameter* parameter;
628   parameter = new G4UIparameter ("scene-name",    608   parameter = new G4UIparameter ("scene-name", 's',
629          omitable = true);                        609          omitable = true);
630   parameter -> SetCurrentAsDefault(true);         610   parameter -> SetCurrentAsDefault(true);
631   fpCommand -> SetParameter (parameter);          611   fpCommand -> SetParameter (parameter);
632   parameter = new G4UIparameter ("refresh-flus    612   parameter = new G4UIparameter ("refresh-flush", 's',
633          omitable = true);                        613          omitable = true);
634   parameter -> SetDefaultValue("refresh");        614   parameter -> SetDefaultValue("refresh");
635   parameter -> SetParameterCandidates("r refre    615   parameter -> SetParameterCandidates("r refresh f flush");
636   fpCommand -> SetParameter (parameter);          616   fpCommand -> SetParameter (parameter);
637 }                                                 617 }
638                                                   618 
639 G4VisCommandSceneNotifyHandlers::~G4VisCommand    619 G4VisCommandSceneNotifyHandlers::~G4VisCommandSceneNotifyHandlers () {
640   delete fpCommand;                               620   delete fpCommand;
641 }                                                 621 }
642                                                   622 
643 G4String G4VisCommandSceneNotifyHandlers::GetC    623 G4String G4VisCommandSceneNotifyHandlers::GetCurrentValue(G4UIcommand*) {
644   return CurrentSceneName ();                     624   return CurrentSceneName ();
645 }                                                 625 }
646                                                   626 
647 void G4VisCommandSceneNotifyHandlers::SetNewVa    627 void G4VisCommandSceneNotifyHandlers::SetNewValue (G4UIcommand*,
648                G4String newValue) {               628                G4String newValue) {
649                                                   629 
650   G4VisManager::Verbosity verbosity = fpVisMan    630   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
651                                                   631 
652   G4String sceneName, refresh_flush;              632   G4String sceneName, refresh_flush;
653   std::istringstream is (newValue);               633   std::istringstream is (newValue);
654   is >> sceneName >> refresh_flush;               634   is >> sceneName >> refresh_flush;
655   G4bool flush = false;                           635   G4bool flush = false;
656   if (refresh_flush[0] == 'f') flush = true;   << 636   if (refresh_flush(0) == 'f') flush = true;
657                                                   637 
658   const G4SceneList& sceneList = fpVisManager     638   const G4SceneList& sceneList = fpVisManager -> GetSceneList ();
659   G4SceneHandlerList& sceneHandlerList =          639   G4SceneHandlerList& sceneHandlerList =
660     fpVisManager -> SetAvailableSceneHandlers     640     fpVisManager -> SetAvailableSceneHandlers ();
661                                                   641 
662   // Check scene name.                            642   // Check scene name.
663   const std::size_t nScenes = sceneList.size ( << 643   const G4int nScenes = sceneList.size ();
664   std::size_t iScene;                          << 644   G4int iScene;
665   for (iScene = 0; iScene < nScenes; ++iScene) << 645   for (iScene = 0; iScene < nScenes; iScene++) {
666     G4Scene* scene = sceneList [iScene];          646     G4Scene* scene = sceneList [iScene];
667     if (sceneName == scene -> GetName ()) brea    647     if (sceneName == scene -> GetName ()) break;
668   }                                               648   }
669   if (iScene >= nScenes ) {                       649   if (iScene >= nScenes ) {
670     if (verbosity >= G4VisManager::warnings) {    650     if (verbosity >= G4VisManager::warnings) {
671       G4warn << "WARNING: Scene \"" << sceneNa << 651       G4cout << "WARNING: Scene \"" << sceneName << "\" not found."
672   "\n  /vis/scene/list to see scenes."            652   "\n  /vis/scene/list to see scenes."
673        << G4endl;                                 653        << G4endl;
674     }                                             654     }
675     return;                                       655     return;
676   }                                               656   }
677                                                   657 
678   // Store current context...                     658   // Store current context...
679   G4VSceneHandler* pCurrentSceneHandler =         659   G4VSceneHandler* pCurrentSceneHandler =
680     fpVisManager -> GetCurrentSceneHandler();     660     fpVisManager -> GetCurrentSceneHandler();
681   if (!pCurrentSceneHandler) {                    661   if (!pCurrentSceneHandler) {
682     if (verbosity >= G4VisManager::warnings) {    662     if (verbosity >= G4VisManager::warnings) {
683       G4warn << "WARNING: No current scene han << 663       G4cout << "WARNING: No current scene handler."
684        << G4endl;                                 664        << G4endl;
685     }                                             665     }
686     return;                                       666     return;
687   }                                               667   }
688   G4VViewer* pCurrentViewer = fpVisManager ->     668   G4VViewer* pCurrentViewer = fpVisManager -> GetCurrentViewer();
689   if (!pCurrentViewer) {                          669   if (!pCurrentViewer) {
690     if (verbosity >= G4VisManager::warnings) {    670     if (verbosity >= G4VisManager::warnings) {
691       G4warn << "WARNING: No current viewer."  << 671       G4cout << "WARNING: No current viewer."
692        << G4endl;                                 672        << G4endl;
693     }                                             673     }
694     return;                                       674     return;
695   }                                               675   }
696   G4Scene* pCurrentScene = fpVisManager -> Get    676   G4Scene* pCurrentScene = fpVisManager -> GetCurrentScene();
697   if (!pCurrentScene) {                           677   if (!pCurrentScene) {
698     if (verbosity >= G4VisManager::warnings) {    678     if (verbosity >= G4VisManager::warnings) {
699       G4warn << "WARNING: No current scene."   << 679       G4cout << "WARNING: No current scene."
700        << G4endl;                                 680        << G4endl;
701     }                                             681     }
702     return;                                       682     return;
703   }                                               683   }
704                                                   684 
705   G4VisManager::Verbosity currentVerbosity = f    685   G4VisManager::Verbosity currentVerbosity = fpVisManager -> GetVerbosity();
706                                                   686 
707   // Suppress messages during this process (on    687   // Suppress messages during this process (only print errors)...
708   //fpVisManager -> SetVerboseLevel(G4VisManag    688   //fpVisManager -> SetVerboseLevel(G4VisManager::errors);
709                                                   689 
710   // For each scene handler, if it contains th    690   // For each scene handler, if it contains the scene, clear and
711   // rebuild the graphical database, then for     691   // rebuild the graphical database, then for each viewer set (make
712   // current), clear, (re)draw, and show.         692   // current), clear, (re)draw, and show.
713   const std::size_t nSceneHandlers = sceneHand << 693   const G4int nSceneHandlers = sceneHandlerList.size ();
714   for (std::size_t iSH = 0; iSH < nSceneHandle << 694   for (G4int iSH = 0; iSH < nSceneHandlers; iSH++) {
715     G4VSceneHandler* aSceneHandler = sceneHand    695     G4VSceneHandler* aSceneHandler = sceneHandlerList [iSH];
716     G4Scene* aScene = aSceneHandler -> GetScen    696     G4Scene* aScene = aSceneHandler -> GetScene ();
717     if (aScene) {                                 697     if (aScene) {
718       const G4String& aSceneName = aScene -> G    698       const G4String& aSceneName = aScene -> GetName ();
719       if (sceneName == aSceneName) {              699       if (sceneName == aSceneName) {
720   aScene->CalculateExtent();  // Check and rec    700   aScene->CalculateExtent();  // Check and recalculate extent
721   G4ViewerList& viewerList = aSceneHandler ->     701   G4ViewerList& viewerList = aSceneHandler -> SetViewerList ();
722   const std::size_t nViewers = viewerList.size << 702   const G4int nViewers = viewerList.size ();
723   for (std::size_t iV = 0; iV < nViewers; ++iV << 703   for (G4int iV = 0; iV < nViewers; iV++) {
724     G4VViewer* aViewer = viewerList [iV];         704     G4VViewer* aViewer = viewerList [iV];
725     // Force rebuild of graphical database, if    705     // Force rebuild of graphical database, if any.
726     aViewer -> NeedKernelVisit();                 706     aViewer -> NeedKernelVisit();
727     if (aViewer->GetViewParameters().IsAutoRef    707     if (aViewer->GetViewParameters().IsAutoRefresh()) {
728       aSceneHandler -> SetCurrentViewer (aView    708       aSceneHandler -> SetCurrentViewer (aViewer);
729       // Ensure consistency of vis manager...     709       // Ensure consistency of vis manager...
730       fpVisManager -> SetCurrentViewer(aViewer    710       fpVisManager -> SetCurrentViewer(aViewer);
731       fpVisManager -> SetCurrentSceneHandler(a    711       fpVisManager -> SetCurrentSceneHandler(aSceneHandler);
732       fpVisManager -> SetCurrentScene(aScene);    712       fpVisManager -> SetCurrentScene(aScene);
733       aViewer -> SetView ();                      713       aViewer -> SetView ();
734       aViewer -> ClearView ();                    714       aViewer -> ClearView ();
735       aViewer -> DrawView ();                     715       aViewer -> DrawView ();
736       if (flush) aViewer -> ShowView ();          716       if (flush) aViewer -> ShowView ();
737       if (verbosity >= G4VisManager::confirmat    717       if (verbosity >= G4VisManager::confirmations) {
738         G4cout << "Viewer \"" << aViewer -> Ge    718         G4cout << "Viewer \"" << aViewer -> GetName ()
739          << "\" of scene handler \"" << aScene    719          << "\" of scene handler \"" << aSceneHandler -> GetName ()
740          << "\"\n  ";                             720          << "\"\n  ";
741         if (flush) G4cout << "flushed";           721         if (flush) G4cout << "flushed";
742         else G4cout << "refreshed";               722         else G4cout << "refreshed";
743         G4cout << " at request of scene \"" <<    723         G4cout << " at request of scene \"" << sceneName
744          << "\"." << G4endl;                      724          << "\"." << G4endl;
745       }                                           725       }
746     } else {                                      726     } else {
747       if (verbosity >= G4VisManager::confirmat    727       if (verbosity >= G4VisManager::confirmations) {
748         G4cout << "NOTE: The scene, \""           728         G4cout << "NOTE: The scene, \""
749          << sceneName                             729          << sceneName
750          << "\", of viewer \""                    730          << "\", of viewer \""
751          << aViewer -> GetName ()                 731          << aViewer -> GetName ()
752          << "\"\n  of scene handler \""           732          << "\"\n  of scene handler \""
753          << aSceneHandler -> GetName ()           733          << aSceneHandler -> GetName ()
754          << "\"  has changed.  To see effect,"    734          << "\"  has changed.  To see effect,"
755          << "\n  \"/vis/viewer/select "           735          << "\n  \"/vis/viewer/select "
756          << aViewer -> GetShortName ()            736          << aViewer -> GetShortName ()
757          << "\" and \"/vis/viewer/rebuild\"."     737          << "\" and \"/vis/viewer/rebuild\"."
758          << G4endl;                               738          << G4endl;
759       }                                           739       }
760     }                                             740     }
761   }                                               741   }
762       }                                           742       }
763     }                                             743     }
764     else {                                        744     else {
765       if (verbosity >= G4VisManager::warnings)    745       if (verbosity >= G4VisManager::warnings) {
766   G4warn << "WARNING: G4VisCommandSceneNotifyH << 746   G4cout << "WARNING: G4VisCommandSceneNotifyHandlers: scene handler \""
767          << aSceneHandler->GetName()              747          << aSceneHandler->GetName()
768          << "\" has a null scene."                748          << "\" has a null scene."
769          << G4endl;                               749          << G4endl;
770       }                                           750       }
771     }                                             751     }
772   }                                               752   }
773                                                   753 
774   // Reclaim original context - but set viewer    754   // Reclaim original context - but set viewer first, then scene
775   // handler, because the latter might have be    755   // handler, because the latter might have been created very recently
776   // and, not yet having a viewer, the current    756   // and, not yet having a viewer, the current viewer will,
777   // temporarily, refer to another scene handl    757   // temporarily, refer to another scene handler.  SetCurrentViewer
778   // actually resets the scene handler, which     758   // actually resets the scene handler, which is what we don't want,
779   // so we set it again on the next line...       759   // so we set it again on the next line...
780   fpVisManager -> SetCurrentViewer(pCurrentVie    760   fpVisManager -> SetCurrentViewer(pCurrentViewer);
781   fpVisManager -> SetCurrentSceneHandler(pCurr    761   fpVisManager -> SetCurrentSceneHandler(pCurrentSceneHandler);
782   fpVisManager -> SetCurrentScene(pCurrentScen    762   fpVisManager -> SetCurrentScene(pCurrentScene);
783   fpVisManager -> SetVerboseLevel(currentVerbo    763   fpVisManager -> SetVerboseLevel(currentVerbosity);
784   // Take care of special case of scene handle    764   // Take care of special case of scene handler with no viewer yet.  
785   if (pCurrentSceneHandler) {                     765   if (pCurrentSceneHandler) {
786     G4ViewerList& viewerList = pCurrentSceneHa    766     G4ViewerList& viewerList = pCurrentSceneHandler -> SetViewerList ();
787     const std::size_t nViewers = viewerList.si << 767     const G4int nViewers = viewerList.size ();
788     if (nViewers) {                               768     if (nViewers) {
789       pCurrentSceneHandler -> SetCurrentViewer    769       pCurrentSceneHandler -> SetCurrentViewer (pCurrentViewer);
790       // JA: I don't think we need this. SetVi << 770       if (pCurrentViewer && pCurrentSceneHandler->GetScene()) {
791       // if (pCurrentViewer && pCurrentSceneHa << 771   pCurrentViewer -> SetView ();
792       //   pCurrentViewer -> SetView ();       << 
793       // }                                     << 
794     }                                          << 
795   }                                            << 
796 }                                              << 
797                                                << 
798 ////////////// /vis/scene/removeModel //////// << 
799                                                << 
800 G4VisCommandSceneRemoveModel::G4VisCommandScen << 
801   G4bool omitable;                             << 
802   fpCommand = new G4UIcommand ("/vis/scene/rem << 
803   fpCommand -> SetGuidance("Remove model.");   << 
804   fpCommand -> SetGuidance                     << 
805   ("Attempts to match search string to name of << 
806   fpCommand -> SetGuidance                     << 
807   ("Use \"/vis/scene/list\" to see model names << 
808   G4UIparameter* parameter;                    << 
809   parameter = new G4UIparameter ("search-strin << 
810   fpCommand -> SetParameter (parameter);       << 
811 }                                              << 
812                                                << 
813 G4VisCommandSceneRemoveModel::~G4VisCommandSce << 
814   delete fpCommand;                            << 
815 }                                              << 
816                                                << 
817 G4String G4VisCommandSceneRemoveModel::GetCurr << 
818   return "";                                   << 
819 }                                              << 
820                                                << 
821 void G4VisCommandSceneRemoveModel::SetNewValue << 
822               G4String newValue) {             << 
823                                                << 
824   G4VisManager::Verbosity verbosity = fpVisMan << 
825                                                << 
826   G4String searchString;                       << 
827   std::istringstream is (newValue);            << 
828   is >> searchString;                          << 
829                                                << 
830   G4Scene* pScene = fpVisManager->GetCurrentSc << 
831   if (!pScene) {                               << 
832     if (verbosity >= G4VisManager::errors) {   << 
833       G4warn << "ERROR: No current scene.  Ple << 
834     }                                          << 
835     return;                                    << 
836   }                                            << 
837                                                << 
838   G4VSceneHandler* pSceneHandler = fpVisManage << 
839   if (!pSceneHandler) {                        << 
840     if (verbosity >= G4VisManager::errors) {   << 
841       G4warn << "ERROR: No current sceneHandle << 
842     }                                          << 
843     return;                                    << 
844   }                                            << 
845                                                << 
846   G4bool any = false;                          << 
847                                                << 
848   std::vector<G4Scene::Model>& runDurationMode << 
849   pScene->SetRunDurationModelList();           << 
850   for (size_t i = 0; i < runDurationModelList. << 
851     const G4String& modelName =                << 
852     runDurationModelList[i].fpModel->GetGlobal << 
853     if (modelName.find(searchString) != std::s << 
854       runDurationModelList.erase(runDurationMo << 
855       any = true;                              << 
856       if (verbosity >= G4VisManager::warnings) << 
857   G4warn << "Model \"" << modelName << "\" rem << 
858       }                                        << 
859       break;  // Allow only one model at a tim << 
860     }                                          << 
861   }                                            << 
862                                                << 
863   std::vector<G4Scene::Model>& endOfEventModel << 
864   pScene->SetEndOfEventModelList();            << 
865   for (size_t i = 0; i < endOfEventModelList.s << 
866     const G4String& modelName =                << 
867     endOfEventModelList[i].fpModel->GetGlobalD << 
868     if (modelName.find(searchString) != std::s << 
869       endOfEventModelList.erase(endOfEventMode << 
870       any = true;                              << 
871       if (verbosity >= G4VisManager::warnings) << 
872   G4warn << "Model \"" << modelName << "\" rem << 
873       }                                           772       }
874       break;  // Allow only one model at a tim << 
875     }                                             773     }
876   }                                               774   }
877                                                << 
878   std::vector<G4Scene::Model>& endOfRunModelLi << 
879   pScene->SetEndOfRunModelList();              << 
880   for (size_t i = 0; i < endOfRunModelList.siz << 
881     const G4String& modelName =                << 
882     endOfRunModelList[i].fpModel->GetGlobalDes << 
883     if (modelName.find(searchString) != std::s << 
884       endOfRunModelList.erase(endOfRunModelLis << 
885       any = true;                              << 
886       if (verbosity >= G4VisManager::warnings) << 
887   G4warn << "Model \"" << modelName << "\" rem << 
888       }                                        << 
889       break;  // Allow only one model at a tim << 
890     }                                          << 
891   }                                            << 
892                                                << 
893   if (!any) {                                  << 
894     if (verbosity >= G4VisManager::warnings) { << 
895       G4warn << "WARNING: No match found." <<  << 
896     }                                          << 
897     return;                                    << 
898   }                                            << 
899                                                << 
900   CheckSceneAndNotifyHandlers (pScene);        << 
901 }                                                 775 }
902                                                   776 
903 ////////////// /vis/scene/select /////////////    777 ////////////// /vis/scene/select ///////////////////////////////////////
904                                                   778 
905 G4VisCommandSceneSelect::G4VisCommandSceneSele    779 G4VisCommandSceneSelect::G4VisCommandSceneSelect () {
906   G4bool omitable;                                780   G4bool omitable;
907   fpCommand = new G4UIcmdWithAString ("/vis/sc    781   fpCommand = new G4UIcmdWithAString ("/vis/scene/select", this);
908   fpCommand -> SetGuidance ("Selects a scene")    782   fpCommand -> SetGuidance ("Selects a scene");
909   fpCommand -> SetGuidance                     << 783   fpCommand -> SetGuidance 
910   ("Makes the scene current.  \"/vis/scene/lis << 784     ("Makes the scene current.  \"/vis/scene/list\" to see"
911    "\n possible scene names.");                << 785      "\n possible scene names.");
912   fpCommand -> SetParameterName ("scene-name",    786   fpCommand -> SetParameterName ("scene-name", omitable = false);
913 }                                                 787 }
914                                                   788 
915 G4VisCommandSceneSelect::~G4VisCommandSceneSel    789 G4VisCommandSceneSelect::~G4VisCommandSceneSelect () {
916   delete fpCommand;                               790   delete fpCommand;
917 }                                                 791 }
918                                                   792 
919 G4String G4VisCommandSceneSelect::GetCurrentVa    793 G4String G4VisCommandSceneSelect::GetCurrentValue (G4UIcommand*) {
920   return "";                                      794   return "";
921 }                                                 795 }
922                                                   796 
923 void G4VisCommandSceneSelect::SetNewValue (G4U    797 void G4VisCommandSceneSelect::SetNewValue (G4UIcommand*, G4String newValue) {
924                                                   798 
925   G4VisManager::Verbosity verbosity = fpVisMan    799   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
926                                                   800 
927   G4String& selectName = newValue;                801   G4String& selectName = newValue;
928   G4SceneList& sceneList = fpVisManager -> Set    802   G4SceneList& sceneList = fpVisManager -> SetSceneList ();
929   std::size_t iScene, nScenes = sceneList.size << 803   G4int iScene, nScenes = sceneList.size ();
930   for (iScene = 0; iScene < nScenes; ++iScene) << 804   for (iScene = 0; iScene < nScenes; iScene++) {
931     if (sceneList [iScene] -> GetName () == se    805     if (sceneList [iScene] -> GetName () == selectName) break;
932   }                                               806   }
933   if (iScene >= nScenes) {                        807   if (iScene >= nScenes) {
934     if (verbosity >= G4VisManager::warnings) {    808     if (verbosity >= G4VisManager::warnings) {
935       G4warn << "WARNING: Scene \"" << selectN << 809       G4cout << "WARNING: Scene \"" << selectName
936       << "\" not found - \"/vis/scene/list\" t << 810        << "\" not found - \"/vis/scene/list\" to see possibilities."
937       << G4endl;                               << 811        << G4endl;
938     }                                             812     }
939     return;                                       813     return;
940   }                                               814   }
941                                                   815 
942   if (verbosity >= G4VisManager::confirmations    816   if (verbosity >= G4VisManager::confirmations) {
943     G4cout << "Scene \"" << selectName            817     G4cout << "Scene \"" << selectName
944     << "\" selected." << G4endl;               << 818      << "\" selected." << G4endl;
945   }                                               819   }
946                                                   820 
947   CheckSceneAndNotifyHandlers (sceneList [iSce    821   CheckSceneAndNotifyHandlers (sceneList [iScene]);
948 }                                              << 
949                                                << 
950 ////////////// /vis/scene/showExtents //////// << 
951                                                << 
952 G4VisCommandSceneShowExtents::G4VisCommandScen << 
953   fpCommand = new G4UIcmdWithoutParameter ("/v << 
954   fpCommand -> SetGuidance ("Prints and draws  << 
955 }                                              << 
956                                                << 
957 G4VisCommandSceneShowExtents::~G4VisCommandSce << 
958   delete fpCommand;                            << 
959 }                                              << 
960                                                << 
961 G4String G4VisCommandSceneShowExtents::GetCurr << 
962   return "";                                   << 
963 }                                              << 
964                                                << 
965 void G4VisCommandSceneShowExtents::SetNewValue << 
966                                                << 
967   G4VisManager::Verbosity verbosity = fpVisMan << 
968                                                << 
969   G4VSceneHandler* pCurrentSceneHandler =      << 
970   fpVisManager -> GetCurrentSceneHandler();    << 
971   if (!pCurrentSceneHandler) {                 << 
972     if (verbosity >= G4VisManager::warnings) { << 
973       G4warn << "WARNING: No current scene han << 
974       << G4endl;                               << 
975     }                                          << 
976     return;                                    << 
977   }                                            << 
978   G4VViewer* pCurrentViewer = fpVisManager ->  << 
979   if (!pCurrentViewer) {                       << 
980     if (verbosity >= G4VisManager::warnings) { << 
981       G4warn << "WARNING: No current viewer."  << 
982       << G4endl;                               << 
983     }                                          << 
984     return;                                    << 
985   }                                            << 
986   G4Scene* pCurrentScene = fpVisManager -> Get << 
987   if (!pCurrentScene) {                        << 
988     if (verbosity >= G4VisManager::warnings) { << 
989       G4warn << "WARNING: No current scene."   << 
990       << G4endl;                               << 
991     }                                          << 
992     return;                                    << 
993   }                                            << 
994                                                << 
995   G4cout << "\n  Run-duration models:";        << 
996   std::size_t nRunModels = pCurrentScene -> Ge << 
997   if (nRunModels == 0) {                       << 
998     G4cout << " none.";                        << 
999   }                                            << 
1000   for (std::size_t i = 0; i < nRunModels; ++i << 
1001     if (pCurrentScene -> GetRunDurationModelL << 
1002       G4cout << "\n   Active:   ";            << 
1003     else G4cout << "\n   Inactive: ";         << 
1004     G4VModel* pModel = pCurrentScene -> GetRu << 
1005     const G4VisExtent& transformedExtent = pM << 
1006     G4cout << pModel -> GetGlobalDescription  << 
1007     << "\n" << transformedExtent;             << 
1008     DrawExtent(transformedExtent);            << 
1009   }                                           << 
1010   G4cout << "\n  End-of-event models:";       << 
1011   std::size_t nEOEModels = pCurrentScene -> G << 
1012   if (nEOEModels == 0) {                      << 
1013     G4cout << " none.";                       << 
1014   }                                           << 
1015   for (std::size_t i = 0; i < nEOEModels; ++i << 
1016     if (pCurrentScene -> GetEndOfEventModelLi << 
1017       G4cout << "\n   Active:   ";            << 
1018     else G4cout << "\n   Inactive: ";         << 
1019     G4VModel* pModel = pCurrentScene -> GetEn << 
1020     const G4VisExtent& transformedExtent = pM << 
1021     G4cout << pModel -> GetGlobalDescription  << 
1022     << "\n" << transformedExtent;             << 
1023     DrawExtent(transformedExtent);            << 
1024   }                                           << 
1025   G4cout << "\n  End-of-run models:";         << 
1026   std::size_t nEORModels = pCurrentScene -> G << 
1027   if (nEORModels == 0) {                      << 
1028     G4cout << " none.";                       << 
1029   }                                           << 
1030   for (std::size_t i = 0; i < nEORModels; ++i << 
1031     if (pCurrentScene -> GetEndOfRunModelList << 
1032       G4cout << "\n   Active:   ";            << 
1033     else G4cout << "\n   Inactive: ";         << 
1034     G4VModel* pModel = pCurrentScene -> GetEn << 
1035     const G4VisExtent& transformedExtent = pM << 
1036     G4cout << pModel -> GetGlobalDescription  << 
1037     << "\n" << transformedExtent;             << 
1038     DrawExtent(transformedExtent);            << 
1039   }                                           << 
1040   G4cout << "\n  Overall extent:\n";          << 
1041   DrawExtent(pCurrentScene->GetExtent());     << 
1042   G4cout << G4endl;                           << 
1043 }                                                822 }
1044                                                  823