Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/management/src/G4VisCommandsViewerSet.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/G4VisCommandsViewerSet.cc (Version 11.3.0) and /visualization/management/src/G4VisCommandsViewerSet.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/viewer/set commands - John Allison  16     28 // /vis/viewer/set commands - John Allison  16th May 2000
 29                                                    29 
 30 #include "G4VisCommandsViewerSet.hh"               30 #include "G4VisCommandsViewerSet.hh"
 31                                                    31 
 32 #include "G4UIcommand.hh"                          32 #include "G4UIcommand.hh"
 33 #include "G4UIcmdWithoutParameter.hh"          << 
 34 #include "G4UIcmdWithAString.hh"                   33 #include "G4UIcmdWithAString.hh"
 35 #include "G4UIcmdWithABool.hh"                     34 #include "G4UIcmdWithABool.hh"
 36 #include "G4UIcmdWithAnInteger.hh"                 35 #include "G4UIcmdWithAnInteger.hh"
 37 #include "G4UIcmdWithADouble.hh"                   36 #include "G4UIcmdWithADouble.hh"
 38 #include "G4UIcmdWith3VectorAndUnit.hh"            37 #include "G4UIcmdWith3VectorAndUnit.hh"
 39 #include "G4UnitsTable.hh"                         38 #include "G4UnitsTable.hh"
 40 #include "G4VisManager.hh"                         39 #include "G4VisManager.hh"
 41 #include "G4Polyhedron.hh"                         40 #include "G4Polyhedron.hh"
 42 #include "G4SystemOfUnits.hh"                      41 #include "G4SystemOfUnits.hh"
 43                                                    42 
 44 #include <sstream>                                 43 #include <sstream>
 45 #include <iomanip>                                 44 #include <iomanip>
 46 #include <utility>                             << 
 47                                                << 
 48 #define G4warn G4cout                          << 
 49                                                    45 
 50 G4VisCommandsViewerSet::G4VisCommandsViewerSet     46 G4VisCommandsViewerSet::G4VisCommandsViewerSet ():
 51 fLightsVector    (G4ThreeVector(1.,1.,1.)),    <<  47   fLightsVector    (G4ThreeVector(1.,1.,1.)),
 52 fUpVector        (G4ThreeVector(0.,1.,0.)),    <<  48   fUpVector        (G4ThreeVector(0.,1.,0.)),
 53 fViewpointVector (G4ThreeVector(0.,0.,1.))     <<  49   fViewpointVector (G4ThreeVector(0.,0.,1.))
 54 {                                                  50 {
 55   G4bool omitable;                                 51   G4bool omitable;
 56   G4UIparameter* parameter;                        52   G4UIparameter* parameter;
 57                                                    53 
 58   fpCommandAll = new G4UIcmdWithAString ("/vis     54   fpCommandAll = new G4UIcmdWithAString ("/vis/viewer/set/all",this);
 59   fpCommandAll->SetGuidance                        55   fpCommandAll->SetGuidance
 60   ("Copies view parameters.");                 <<  56     ("Copies view parameters.");
 61   fpCommandAll->SetGuidance                        57   fpCommandAll->SetGuidance
 62   ("Copies ALL view parameters (except the aut     58   ("Copies ALL view parameters (except the autoRefresh status) from"
 63    "\nfrom-viewer to current viewer. You may n     59    "\nfrom-viewer to current viewer. You may need \"/vis/viewer/rebuild\".");
 64   fpCommandAll->SetGuidance                        60   fpCommandAll->SetGuidance
 65   ("Note: to copy only the camera-specific par     61   ("Note: to copy only the camera-specific parameters use"
 66    "\n\"/vis/viewer/copyfrom\".");                 62    "\n\"/vis/viewer/copyfrom\".");
 67   fpCommandAll->SetParameterName ("from-viewer     63   fpCommandAll->SetParameterName ("from-viewer-name",omitable = false);
 68                                                    64 
 69   fpCommandAutoRefresh = new G4UIcmdWithABool      65   fpCommandAutoRefresh = new G4UIcmdWithABool
 70   ("/vis/viewer/set/autoRefresh",this);        <<  66     ("/vis/viewer/set/autoRefresh",this);
 71   fpCommandAutoRefresh->SetGuidance("Sets auto     67   fpCommandAutoRefresh->SetGuidance("Sets auto-refresh.");
 72   fpCommandAutoRefresh->SetGuidance                68   fpCommandAutoRefresh->SetGuidance
 73   ("If true, view is automatically refreshed a <<  69     ("If true, view is automatically refreshed after a change of"
 74    "\nview parameters.");                      <<  70      "\nview parameters.");
 75   fpCommandAutoRefresh->SetParameterName("auto     71   fpCommandAutoRefresh->SetParameterName("auto-refresh",omitable = true);
 76   fpCommandAutoRefresh->SetDefaultValue(true);     72   fpCommandAutoRefresh->SetDefaultValue(true);
 77                                                    73 
 78   fpCommandAuxEdge = new G4UIcmdWithABool          74   fpCommandAuxEdge = new G4UIcmdWithABool
 79   ("/vis/viewer/set/auxiliaryEdge",this);      <<  75     ("/vis/viewer/set/auxiliaryEdge",this);
 80   fpCommandAuxEdge->SetGuidance("Sets visibili     76   fpCommandAuxEdge->SetGuidance("Sets visibility of auxiliary edges");
 81   fpCommandAuxEdge->SetGuidance                    77   fpCommandAuxEdge->SetGuidance
 82   ("Auxiliary edges, i.e., those that are part <<  78     ("Auxiliary edges, i.e., those that are part of a curved surface,"
 83    "\nsometimes called soft edges, become visi <<  79      "\nsometimes called soft edges, become visible/invisible.");
 84   fpCommandAuxEdge->SetParameterName("edge",om     80   fpCommandAuxEdge->SetParameterName("edge",omitable = true);
 85   fpCommandAuxEdge->SetDefaultValue(true);         81   fpCommandAuxEdge->SetDefaultValue(true);
 86                                                    82 
 87   fpCommandBackground = new G4UIcommand            83   fpCommandBackground = new G4UIcommand
 88   ("/vis/viewer/set/background",this);         <<  84     ("/vis/viewer/set/background",this);
 89   fpCommandBackground->SetGuidance                 85   fpCommandBackground->SetGuidance
 90   ("Set background colour and transparency (de <<  86     ("Set background colour and transparency (default black and opaque).");
 91   fpCommandBackground->SetGuidance(ConvertToCo     87   fpCommandBackground->SetGuidance(ConvertToColourGuidance());
 92   parameter = new G4UIparameter("red_or_string     88   parameter = new G4UIparameter("red_or_string", 's', omitable = true);
 93   parameter -> SetDefaultValue ("0.");             89   parameter -> SetDefaultValue ("0.");
 94   fpCommandBackground -> SetParameter (paramet     90   fpCommandBackground -> SetParameter (parameter);
 95   parameter = new G4UIparameter("green", 'd',      91   parameter = new G4UIparameter("green", 'd', omitable = true);
 96   parameter -> SetDefaultValue (0.);               92   parameter -> SetDefaultValue (0.);
 97   fpCommandBackground -> SetParameter (paramet     93   fpCommandBackground -> SetParameter (parameter);
 98   parameter = new G4UIparameter ("blue", 'd',      94   parameter = new G4UIparameter ("blue", 'd', omitable = true);
 99   parameter -> SetDefaultValue (0.);               95   parameter -> SetDefaultValue (0.);
100   fpCommandBackground -> SetParameter (paramet     96   fpCommandBackground -> SetParameter (parameter);
101   parameter = new G4UIparameter ("opacity", 'd     97   parameter = new G4UIparameter ("opacity", 'd', omitable = true);
102   parameter -> SetDefaultValue (1.);               98   parameter -> SetDefaultValue (1.);
103   fpCommandBackground -> SetParameter (paramet     99   fpCommandBackground -> SetParameter (parameter);
104                                                   100 
105   fpCommandCulling = new G4UIcommand("/vis/vie    101   fpCommandCulling = new G4UIcommand("/vis/viewer/set/culling",this);
106   fpCommandCulling->SetGuidance ("Set culling     102   fpCommandCulling->SetGuidance ("Set culling options.");
107   fpCommandCulling->SetGuidance                   103   fpCommandCulling->SetGuidance
108   ("\"global\": enables/disables all other cul << 104     ("\"global\": enables/disables all other culling options.");
109   fpCommandCulling->SetGuidance                   105   fpCommandCulling->SetGuidance
110   ("\"coveredDaughters\": culls, i.e., elimina << 106     ("\"coveredDaughters\": culls, i.e., eliminates, volumes that would not"
111    "\nbe seen because covered by ancestor volu << 107      "\nbe seen because covered by ancester volumes in surface drawing mode,"
112    "\nand then only if the ancestors are visib << 108      "\nand then only if the ancesters are visible and opaque, and then only"
113    "\nif no sections or cutaways are in operat << 109      "\nif no sections or cutaways are in operation.  Intended solely to"
114    "\nimprove the speed of rendering visible v << 110      "\nimprove the speed of rendering visible volumes.");
115   fpCommandCulling->SetGuidance                   111   fpCommandCulling->SetGuidance
116   ("\"invisible\": culls objects with the invi << 112     ("\"invisible\": culls objects with the invisible attribute set.");
117   fpCommandCulling->SetGuidance                   113   fpCommandCulling->SetGuidance
118   ("\"density\": culls volumes with density lo << 114     ("\"density\": culls volumes with density lower than threshold.  Useful"
119    "\nfor eliminating \"container volumes\" wi << 115      "\nfor eliminating \"container volumes\" with no physical correspondence,"
120    "\nwhose material is usually air.  If this  << 116      "\nwhose material is usually air.  If this is selected, provide threshold"
121    "\ndensity and unit (e.g., g/cm3, mg/cm3 or << 117      "\ndensity and unit (e.g., g/cm3, mg/cm3 or kg/m3)."
122    );                                          << 118      );
123   parameter = new G4UIparameter("culling-optio    119   parameter = new G4UIparameter("culling-option",'s',omitable = false);
124   parameter->SetParameterCandidates               120   parameter->SetParameterCandidates
125   ("global coveredDaughters invisible density" << 121     ("global coveredDaughters invisible density");
126   fpCommandCulling->SetParameter(parameter);      122   fpCommandCulling->SetParameter(parameter);
127   parameter = new G4UIparameter("action",'b',o    123   parameter = new G4UIparameter("action",'b',omitable = true);
128   parameter->SetDefaultValue(1);                  124   parameter->SetDefaultValue(1);
129   fpCommandCulling->SetParameter(parameter);      125   fpCommandCulling->SetParameter(parameter);
130   parameter = new G4UIparameter("density-thres    126   parameter = new G4UIparameter("density-threshold",'d',omitable = true);
131   parameter->SetDefaultValue("0.01");             127   parameter->SetDefaultValue("0.01");
132   fpCommandCulling->SetParameter(parameter);      128   fpCommandCulling->SetParameter(parameter);
133   parameter = new G4UIparameter("unit",'s',omi    129   parameter = new G4UIparameter("unit",'s',omitable = true);
134   // parameter->SetParameterCandidates ("g/cm3    130   // parameter->SetParameterCandidates ("g/cm3 mg/cm3 kg/m3");
135   // Instead of the above, SetNewValue accepts    131   // Instead of the above, SetNewValue accepts *any* density unit.
136   parameter->SetDefaultValue("g/cm3");            132   parameter->SetDefaultValue("g/cm3");
137   fpCommandCulling->SetParameter(parameter);      133   fpCommandCulling->SetParameter(parameter);
138                                                   134 
139   fpCommandCutawayMode =                          135   fpCommandCutawayMode =
140   new G4UIcmdWithAString ("/vis/viewer/set/cut << 136     new G4UIcmdWithAString ("/vis/viewer/set/cutawayMode", this);
141   fpCommandCutawayMode->SetGuidance               137   fpCommandCutawayMode->SetGuidance
142   ("Sets cutaway mode - add (union) or multipl << 138     ("Sets cutaway mode - add (union) or multiply (intersection).");
143   fpCommandCutawayMode->SetParameterName ("cut    139   fpCommandCutawayMode->SetParameterName ("cutaway-mode",omitable = false);
144   fpCommandCutawayMode->SetCandidates ("add un    140   fpCommandCutawayMode->SetCandidates ("add union multiply intersection");
145   fpCommandCutawayMode->SetDefaultValue("union    141   fpCommandCutawayMode->SetDefaultValue("union");
146                                                   142 
147   fpCommandDefaultColour = new G4UIcommand        143   fpCommandDefaultColour = new G4UIcommand
148   ("/vis/viewer/set/defaultColour",this);      << 144     ("/vis/viewer/set/defaultColour",this);
149   fpCommandDefaultColour->SetGuidance             145   fpCommandDefaultColour->SetGuidance
150   ("Set defaultColour colour and transparency  << 146     ("Set defaultColour colour and transparency (default white and opaque).");
151   fpCommandDefaultColour->SetGuidance(ConvertT    147   fpCommandDefaultColour->SetGuidance(ConvertToColourGuidance());
152   parameter = new G4UIparameter("red_or_string    148   parameter = new G4UIparameter("red_or_string", 's', omitable = true);
153   parameter -> SetDefaultValue ("1.");            149   parameter -> SetDefaultValue ("1.");
154   fpCommandDefaultColour -> SetParameter (para    150   fpCommandDefaultColour -> SetParameter (parameter);
155   parameter = new G4UIparameter("green", 'd',     151   parameter = new G4UIparameter("green", 'd', omitable = true);
156   parameter -> SetDefaultValue (1.);              152   parameter -> SetDefaultValue (1.);
157   fpCommandDefaultColour -> SetParameter (para    153   fpCommandDefaultColour -> SetParameter (parameter);
158   parameter = new G4UIparameter ("blue", 'd',     154   parameter = new G4UIparameter ("blue", 'd', omitable = true);
159   parameter -> SetDefaultValue (1.);              155   parameter -> SetDefaultValue (1.);
160   fpCommandDefaultColour -> SetParameter (para    156   fpCommandDefaultColour -> SetParameter (parameter);
161   parameter = new G4UIparameter ("opacity", 'd    157   parameter = new G4UIparameter ("opacity", 'd', omitable = true);
162   parameter -> SetDefaultValue (1.);              158   parameter -> SetDefaultValue (1.);
163   fpCommandDefaultColour -> SetParameter (para    159   fpCommandDefaultColour -> SetParameter (parameter);
164                                                   160 
165   fpCommandDefaultTextColour = new G4UIcommand    161   fpCommandDefaultTextColour = new G4UIcommand
166   ("/vis/viewer/set/defaultTextColour",this);  << 162     ("/vis/viewer/set/defaultTextColour",this);
167   fpCommandDefaultTextColour->SetGuidance         163   fpCommandDefaultTextColour->SetGuidance
168   ("Set defaultTextColour colour and transpare << 164     ("Set defaultTextColour colour and transparency (default blue and opaque).");
169   fpCommandDefaultTextColour->SetGuidance(Conv    165   fpCommandDefaultTextColour->SetGuidance(ConvertToColourGuidance());
170   parameter = new G4UIparameter("red_or_string    166   parameter = new G4UIparameter("red_or_string", 's', omitable = true);
171   parameter -> SetDefaultValue ("0.");            167   parameter -> SetDefaultValue ("0.");
172   fpCommandDefaultTextColour -> SetParameter (    168   fpCommandDefaultTextColour -> SetParameter (parameter);
173   parameter = new G4UIparameter("green", 'd',     169   parameter = new G4UIparameter("green", 'd', omitable = true);
174   parameter -> SetDefaultValue (0.);              170   parameter -> SetDefaultValue (0.);
175   fpCommandDefaultTextColour -> SetParameter (    171   fpCommandDefaultTextColour -> SetParameter (parameter);
176   parameter = new G4UIparameter ("blue", 'd',     172   parameter = new G4UIparameter ("blue", 'd', omitable = true);
177   parameter -> SetDefaultValue (1.);              173   parameter -> SetDefaultValue (1.);
178   fpCommandDefaultTextColour -> SetParameter (    174   fpCommandDefaultTextColour -> SetParameter (parameter);
179   parameter = new G4UIparameter ("opacity", 'd    175   parameter = new G4UIparameter ("opacity", 'd', omitable = true);
180   parameter -> SetDefaultValue (1.);              176   parameter -> SetDefaultValue (1.);
181   fpCommandDefaultTextColour -> SetParameter (    177   fpCommandDefaultTextColour -> SetParameter (parameter);
182                                                   178 
183   fpCommandEdge = new G4UIcmdWithABool("/vis/v    179   fpCommandEdge = new G4UIcmdWithABool("/vis/viewer/set/edge",this);
184   fpCommandEdge->SetGuidance                      180   fpCommandEdge->SetGuidance
185   ("Edges become visible/invisible in surface  << 181     ("Edges become visible/invisible in surface mode.");
186   fpCommandEdge->SetParameterName("edge",omita    182   fpCommandEdge->SetParameterName("edge",omitable = true);
187   fpCommandEdge->SetDefaultValue(true);           183   fpCommandEdge->SetDefaultValue(true);
188                                                   184 
189   fpCommandExplodeFactor = new G4UIcommand        185   fpCommandExplodeFactor = new G4UIcommand
190   ("/vis/viewer/set/explodeFactor", this);     << 186     ("/vis/viewer/set/explodeFactor", this);
191   fpCommandExplodeFactor->SetGuidance             187   fpCommandExplodeFactor->SetGuidance
192   ("Moves top-level drawn volumes by this fact << 188     ("Moves top-level drawn volumes by this factor from this centre.");
193   parameter = new G4UIparameter("explodeFactor    189   parameter = new G4UIparameter("explodeFactor", 'd', omitable=true);
194   parameter->SetParameterRange("explodeFactor>    190   parameter->SetParameterRange("explodeFactor>=1.");
195   parameter->SetDefaultValue(1.);                 191   parameter->SetDefaultValue(1.);
196   fpCommandExplodeFactor->SetParameter(paramet    192   fpCommandExplodeFactor->SetParameter(parameter);
197   parameter = new G4UIparameter("x",'d',omitab    193   parameter = new G4UIparameter("x",'d',omitable = true);
198   parameter->SetDefaultValue  (0);                194   parameter->SetDefaultValue  (0);
199   parameter->SetGuidance      ("Coordinate of     195   parameter->SetGuidance      ("Coordinate of explode centre.");
200   fpCommandExplodeFactor->SetParameter(paramet    196   fpCommandExplodeFactor->SetParameter(parameter);
201   parameter = new G4UIparameter("y",'d',omitab    197   parameter = new G4UIparameter("y",'d',omitable = true);
202   parameter->SetDefaultValue  (0);                198   parameter->SetDefaultValue  (0);
203   parameter->SetGuidance      ("Coordinate of     199   parameter->SetGuidance      ("Coordinate of explode centre.");
204   fpCommandExplodeFactor->SetParameter(paramet    200   fpCommandExplodeFactor->SetParameter(parameter);
205   parameter = new G4UIparameter("z",'d',omitab    201   parameter = new G4UIparameter("z",'d',omitable = true);
206   parameter->SetDefaultValue  (0);                202   parameter->SetDefaultValue  (0);
207   parameter->SetGuidance      ("Coordinate of     203   parameter->SetGuidance      ("Coordinate of explode centre.");
208   fpCommandExplodeFactor->SetParameter(paramet    204   fpCommandExplodeFactor->SetParameter(parameter);
209   parameter = new G4UIparameter("unit",'s',omi    205   parameter = new G4UIparameter("unit",'s',omitable = true);
210   parameter->SetDefaultValue  ("m");              206   parameter->SetDefaultValue  ("m");
211   parameter->SetGuidance      ("Unit of explod    207   parameter->SetGuidance      ("Unit of explode centre.");
212   fpCommandExplodeFactor->SetParameter(paramet    208   fpCommandExplodeFactor->SetParameter(parameter);
213                                                   209 
214   fpCommandGlobalLineWidthScale = new G4UIcmdW    210   fpCommandGlobalLineWidthScale = new G4UIcmdWithADouble
215   ("/vis/viewer/set/globalLineWidthScale", thi << 211     ("/vis/viewer/set/globalLineWidthScale", this);
216   fpCommandGlobalLineWidthScale->SetGuidance      212   fpCommandGlobalLineWidthScale->SetGuidance
217   ("Multiplies line widths by this factor.");  << 213     ("Multiplies line widths by this factor.");
218   fpCommandGlobalLineWidthScale->                 214   fpCommandGlobalLineWidthScale->
219   SetParameterName("scale-factor", omitable=tr << 215     SetParameterName("scale-factor", omitable=true);
220   fpCommandGlobalLineWidthScale->SetDefaultVal    216   fpCommandGlobalLineWidthScale->SetDefaultValue(1.);
221                                                   217 
222   fpCommandGlobalMarkerScale = new G4UIcmdWith    218   fpCommandGlobalMarkerScale = new G4UIcmdWithADouble
223   ("/vis/viewer/set/globalMarkerScale", this); << 219     ("/vis/viewer/set/globalMarkerScale", this);
224   fpCommandGlobalMarkerScale->SetGuidance         220   fpCommandGlobalMarkerScale->SetGuidance
225   ("Multiplies marker sizes by this factor."); << 221     ("Multiplies marker sizes by this factor.");
226   fpCommandGlobalMarkerScale->                    222   fpCommandGlobalMarkerScale->
227   SetParameterName("scale-factor", omitable=tr << 223     SetParameterName("scale-factor", omitable=true);
228   fpCommandGlobalMarkerScale->SetDefaultValue(    224   fpCommandGlobalMarkerScale->SetDefaultValue(1.);
229                                                   225 
230   fpCommandHiddenEdge =                           226   fpCommandHiddenEdge =
231   new G4UIcmdWithABool("/vis/viewer/set/hidden << 227     new G4UIcmdWithABool("/vis/viewer/set/hiddenEdge",this);
232   fpCommandHiddenEdge->SetGuidance                228   fpCommandHiddenEdge->SetGuidance
233   ("Edges become hidden/seen in wireframe or s << 229     ("Edges become hidden/seen in wireframe or surface mode.");
234   fpCommandHiddenEdge->SetParameterName("hidde    230   fpCommandHiddenEdge->SetParameterName("hidden-edge",omitable = true);
235   fpCommandHiddenEdge->SetDefaultValue(true);     231   fpCommandHiddenEdge->SetDefaultValue(true);
236                                                   232 
237   fpCommandHiddenMarker =                         233   fpCommandHiddenMarker =
238   new G4UIcmdWithABool("/vis/viewer/set/hidden << 234     new G4UIcmdWithABool("/vis/viewer/set/hiddenMarker",this);
239   fpCommandHiddenMarker->SetGuidance              235   fpCommandHiddenMarker->SetGuidance
240   ("If true, closer objects hide markers. Othe << 236     ("If true, closer objects hide markers. Otherwise, markers always show.");
241   fpCommandHiddenMarker->SetParameterName("hid    237   fpCommandHiddenMarker->SetParameterName("hidden-marker",omitable = true);
242   fpCommandHiddenMarker->SetDefaultValue(true)    238   fpCommandHiddenMarker->SetDefaultValue(true);
243                                                   239 
244   fpCommandLightsMove = new G4UIcmdWithAString    240   fpCommandLightsMove = new G4UIcmdWithAString
245   ("/vis/viewer/set/lightsMove",this);         << 241     ("/vis/viewer/set/lightsMove",this);
246   fpCommandLightsMove->SetGuidance                242   fpCommandLightsMove->SetGuidance
247   ("Lights move with camera or with object");  << 243     ("Lights move with camera or with object");
248   fpCommandLightsMove->SetParameterName("light    244   fpCommandLightsMove->SetParameterName("lightsMove",omitable = false);
249   fpCommandLightsMove->SetCandidates              245   fpCommandLightsMove->SetCandidates
250   ("cam camera with-camera obj object with-obj << 246     ("cam camera with-camera obj object with-object");
251                                                   247 
252   fpCommandLightsThetaPhi = new G4UIcommand       248   fpCommandLightsThetaPhi = new G4UIcommand
253   ("/vis/viewer/set/lightsThetaPhi", this);    << 249     ("/vis/viewer/set/lightsThetaPhi", this);
254   fpCommandLightsThetaPhi->SetGuidance            250   fpCommandLightsThetaPhi->SetGuidance
255   ("Set direction from target to lights.");    << 251     ("Set direction from target to lights.");
256   parameter = new G4UIparameter("theta", 'd',     252   parameter = new G4UIparameter("theta", 'd', omitable = true);
257   parameter -> SetDefaultValue(60.);              253   parameter -> SetDefaultValue(60.);
258   fpCommandLightsThetaPhi -> SetParameter (par    254   fpCommandLightsThetaPhi -> SetParameter (parameter);
259   parameter = new G4UIparameter("phi", 'd', om    255   parameter = new G4UIparameter("phi", 'd', omitable = true);
260   parameter -> SetDefaultValue(45.);              256   parameter -> SetDefaultValue(45.);
261   fpCommandLightsThetaPhi -> SetParameter (par    257   fpCommandLightsThetaPhi -> SetParameter (parameter);
262   parameter = new G4UIparameter ("unit", 's',     258   parameter = new G4UIparameter ("unit", 's', omitable = true);
263   parameter -> SetDefaultValue ("deg");           259   parameter -> SetDefaultValue ("deg");
264   fpCommandLightsThetaPhi -> SetParameter (par    260   fpCommandLightsThetaPhi -> SetParameter (parameter);
265                                                   261 
266   fpCommandLightsVector = new G4UIcommand         262   fpCommandLightsVector = new G4UIcommand
267   ("/vis/viewer/set/lightsVector", this);      << 263     ("/vis/viewer/set/lightsVector", this);
268   fpCommandLightsVector->SetGuidance              264   fpCommandLightsVector->SetGuidance
269   ("Set direction from target to lights.");    << 265     ("Set direction from target to lights.");
270   parameter = new G4UIparameter("x", 'd', omit    266   parameter = new G4UIparameter("x", 'd', omitable = true);
271   parameter -> SetDefaultValue (1);               267   parameter -> SetDefaultValue (1);
272   fpCommandLightsVector -> SetParameter (param    268   fpCommandLightsVector -> SetParameter (parameter);
273   parameter = new G4UIparameter("y", 'd', omit    269   parameter = new G4UIparameter("y", 'd', omitable = true);
274   parameter -> SetDefaultValue (1);               270   parameter -> SetDefaultValue (1);
275   fpCommandLightsVector -> SetParameter (param    271   fpCommandLightsVector -> SetParameter (parameter);
276   parameter = new G4UIparameter ("z", 'd', omi    272   parameter = new G4UIparameter ("z", 'd', omitable = true);
277   parameter -> SetDefaultValue (1);               273   parameter -> SetDefaultValue (1);
278   fpCommandLightsVector -> SetParameter (param    274   fpCommandLightsVector -> SetParameter (parameter);
279                                                   275 
280   fpCommandLineSegments = new G4UIcmdWithAnInt    276   fpCommandLineSegments = new G4UIcmdWithAnInteger
281   ("/vis/viewer/set/lineSegmentsPerCircle",thi << 277     ("/vis/viewer/set/lineSegmentsPerCircle",this);
282   fpCommandLineSegments->SetGuidance              278   fpCommandLineSegments->SetGuidance
283   ("Set number of sides per circle for polygon << 279     ("Set number of sides per circle for polygon/polyhedron drawing.");
284   fpCommandLineSegments->SetGuidance              280   fpCommandLineSegments->SetGuidance
285   ("Refers to graphical representation of obje << 281  ("Refers to graphical representation of objects with curved lines/surfaces.");
286   fpCommandLineSegments->SetParameterName("lin    282   fpCommandLineSegments->SetParameterName("line-segments",omitable = true);
287   fpCommandLineSegments->SetDefaultValue(24);     283   fpCommandLineSegments->SetDefaultValue(24);
288                                                   284 
289   fpCommandLineWidth = new G4UIcmdWithoutParam << 
290   ("/vis/viewer/set/lineWidth",this);          << 
291   fpCommandLineWidth->SetGuidance              << 
292   ("Use \"/vis/viewer/set/globalLineWidthScale << 
293    "\nFor trajectories use \"/vis/modeling/tra << 
294    "\nFor volumes use \"/vis/geometry/set/line << 
295                                                << 
296   fpCommandNumberOfCloudPoints = new G4UIcmdWi << 
297   ("/vis/viewer/set/numberOfCloudPoints",this) << 
298   fpCommandNumberOfCloudPoints->SetGuidance    << 
299   ("Set number of points to be used for cloud  << 
300   fpCommandNumberOfCloudPoints->SetParameterNa << 
301   fpCommandNumberOfCloudPoints->SetDefaultValu << 
302                                                << 
303   fpCommandPicking = new G4UIcmdWithABool         285   fpCommandPicking = new G4UIcmdWithABool
304   ("/vis/viewer/set/picking",this);            << 286     ("/vis/viewer/set/picking",this);
305   fpCommandPicking->SetGuidance("Sets picking,    287   fpCommandPicking->SetGuidance("Sets picking, if available.");
306   fpCommandPicking->SetGuidance                   288   fpCommandPicking->SetGuidance
307   ("If true, view is set up for picking, if av << 289     ("If true, view is set up for picking, if available.");
308   fpCommandPicking->SetGuidance                   290   fpCommandPicking->SetGuidance
309   ("You may need to issue \"/vis/viewer/update << 291     ("You may need to issue \"/vis/viewer/update\".");
310   fpCommandPicking->SetGuidance                   292   fpCommandPicking->SetGuidance
311   ("For required actions, watch for instructio << 293     ("For required actions, watch for instructions for viewer.");
312   fpCommandPicking->SetParameterName("picking"    294   fpCommandPicking->SetParameterName("picking",omitable = true);
313   fpCommandPicking->SetDefaultValue(true);        295   fpCommandPicking->SetDefaultValue(true);
314                                                   296 
315   fpCommandProjection = new G4UIcommand("/vis/    297   fpCommandProjection = new G4UIcommand("/vis/viewer/set/projection",this);
316   fpCommandProjection->SetGuidance                298   fpCommandProjection->SetGuidance
317   ("Set projection style - o[rthogonal] or p[e << 299     ("Set projection style - o[rthogonal] or p[erspective]."
318    "\nIf p[erspective], also set field half an << 300      "\nIf p[erspective], also set field half angle.");
319   parameter = new G4UIparameter("projection",'    301   parameter = new G4UIparameter("projection",'s',omitable = true);
320   parameter->SetParameterCandidates("o orthogo    302   parameter->SetParameterCandidates("o orthogonal p perspective");
321   parameter->SetDefaultValue("orthogonal");       303   parameter->SetDefaultValue("orthogonal");
322   fpCommandProjection->SetParameter(parameter)    304   fpCommandProjection->SetParameter(parameter);
323   parameter = new G4UIparameter("field-half-an    305   parameter = new G4UIparameter("field-half-angle",'d',omitable = true);
324   parameter->SetDefaultValue(30.);                306   parameter->SetDefaultValue(30.);
325   //parameter->SetCurrentAsDefault(true);         307   //parameter->SetCurrentAsDefault(true);
326   fpCommandProjection->SetParameter(parameter)    308   fpCommandProjection->SetParameter(parameter);
327   parameter = new G4UIparameter("unit",'s',omi    309   parameter = new G4UIparameter("unit",'s',omitable = true);
328   parameter->SetDefaultValue("deg");              310   parameter->SetDefaultValue("deg");
329   //parameter->SetCurrentAsDefault(true);         311   //parameter->SetCurrentAsDefault(true);
330   fpCommandProjection->SetParameter(parameter)    312   fpCommandProjection->SetParameter(parameter);
331                                                   313 
332   fpCommandRotationStyle = new G4UIcmdWithAStr    314   fpCommandRotationStyle = new G4UIcmdWithAString
333   ("/vis/viewer/set/rotationStyle",this);      << 315     ("/vis/viewer/set/rotationStyle",this);
334   fpCommandRotationStyle->SetGuidance             316   fpCommandRotationStyle->SetGuidance
335   ("Set style of rotation - constrainUpDirecti << 317     ("Set style of rotation - constrainUpDirection or freeRotation.");
336   fpCommandRotationStyle->SetGuidance             318   fpCommandRotationStyle->SetGuidance
337   ("constrainUpDirection: conventional HEP vie << 319     ("constrainUpDirection: conventional HEP view.");
338   fpCommandRotationStyle->SetGuidance             320   fpCommandRotationStyle->SetGuidance
339   ("freeRotation: Google-like rotation, using  << 321     ("freeRotation: Google-like rotation, using mouse-grab.");
340   fpCommandRotationStyle->SetParameterName ("s    322   fpCommandRotationStyle->SetParameterName ("style",omitable = false);
341   fpCommandRotationStyle->SetCandidates("const    323   fpCommandRotationStyle->SetCandidates("constrainUpDirection freeRotation");
342                                                   324 
343   fpCommandSectionPlane = new G4UIcommand("/vi    325   fpCommandSectionPlane = new G4UIcommand("/vis/viewer/set/sectionPlane",this);
344   fpCommandSectionPlane -> SetGuidance            326   fpCommandSectionPlane -> SetGuidance
345   ("Set plane for drawing section (DCUT).");   << 327     ("Set plane for drawing section (DCUT).");
346   fpCommandSectionPlane -> SetGuidance            328   fpCommandSectionPlane -> SetGuidance
347   ("E.g., for a y-z plane at x = 1 cm:"        << 329     ("E.g., for a y-z plane at x = 1 cm:"
348    "\n\"/vis/viewer/set/sectionPlane on 1 0 0  << 330      "\n\"/vis/viewer/set/sectionPlane on 1 0 0 cm 1 0 0\"."
349    "\nTo turn off: /vis/viewer/set/sectionPlan << 331      "\nTo turn off: /vis/viewer/set/sectionPlane off");
350   parameter  =  new G4UIparameter("Selector",'    332   parameter  =  new G4UIparameter("Selector",'c',true);
351   parameter  -> SetDefaultValue  ("on");          333   parameter  -> SetDefaultValue  ("on");
352   fpCommandSectionPlane->SetParameter(paramete    334   fpCommandSectionPlane->SetParameter(parameter);
353   parameter  =  new G4UIparameter("x",'d',omit    335   parameter  =  new G4UIparameter("x",'d',omitable = true);
354   parameter  -> SetDefaultValue  (0);             336   parameter  -> SetDefaultValue  (0);
355   parameter  -> SetGuidance      ("Coordinate     337   parameter  -> SetGuidance      ("Coordinate of point on the plane.");
356   fpCommandSectionPlane->SetParameter(paramete    338   fpCommandSectionPlane->SetParameter(parameter);
357   parameter  =  new G4UIparameter("y",'d',omit    339   parameter  =  new G4UIparameter("y",'d',omitable = true);
358   parameter  -> SetDefaultValue  (0);             340   parameter  -> SetDefaultValue  (0);
359   parameter  -> SetGuidance      ("Coordinate     341   parameter  -> SetGuidance      ("Coordinate of point on the plane.");
360   fpCommandSectionPlane->SetParameter(paramete    342   fpCommandSectionPlane->SetParameter(parameter);
361   parameter  =  new G4UIparameter("z",'d',omit    343   parameter  =  new G4UIparameter("z",'d',omitable = true);
362   parameter  -> SetDefaultValue  (0);             344   parameter  -> SetDefaultValue  (0);
363   parameter  -> SetGuidance      ("Coordinate     345   parameter  -> SetGuidance      ("Coordinate of point on the plane.");
364   fpCommandSectionPlane->SetParameter(paramete    346   fpCommandSectionPlane->SetParameter(parameter);
365   parameter  =  new G4UIparameter("unit",'s',o    347   parameter  =  new G4UIparameter("unit",'s',omitable = true);
366   parameter  -> SetDefaultValue  ("m");           348   parameter  -> SetDefaultValue  ("m");
367   parameter  -> SetGuidance      ("Unit of poi    349   parameter  -> SetGuidance      ("Unit of point on the plane.");
368   fpCommandSectionPlane->SetParameter(paramete    350   fpCommandSectionPlane->SetParameter(parameter);
369   parameter  =  new G4UIparameter("nx",'d',omi    351   parameter  =  new G4UIparameter("nx",'d',omitable = true);
370   parameter  -> SetDefaultValue  (1);             352   parameter  -> SetDefaultValue  (1);
371   parameter  -> SetGuidance      ("Component o    353   parameter  -> SetGuidance      ("Component of plane normal.");
372   fpCommandSectionPlane->SetParameter(paramete    354   fpCommandSectionPlane->SetParameter(parameter);
373   parameter  =  new G4UIparameter("ny",'d',omi    355   parameter  =  new G4UIparameter("ny",'d',omitable = true);
374   parameter  -> SetDefaultValue  (0);             356   parameter  -> SetDefaultValue  (0);
375   parameter  -> SetGuidance      ("Component o    357   parameter  -> SetGuidance      ("Component of plane normal.");
376   fpCommandSectionPlane->SetParameter(paramete    358   fpCommandSectionPlane->SetParameter(parameter);
377   parameter  =  new G4UIparameter("nz",'d',omi    359   parameter  =  new G4UIparameter("nz",'d',omitable = true);
378   parameter  -> SetDefaultValue  (0);             360   parameter  -> SetDefaultValue  (0);
379   parameter  -> SetGuidance      ("Component o    361   parameter  -> SetGuidance      ("Component of plane normal.");
380   fpCommandSectionPlane->SetParameter(paramete    362   fpCommandSectionPlane->SetParameter(parameter);
381                                                   363 
382   fpCommandSpecialMeshRendering = new G4UIcmdW << 
383   ("/vis/viewer/set/specialMeshRendering",this << 
384   fpCommandSpecialMeshRendering -> SetGuidance << 
385   ("Request special rendering of volumes (mesh << 
386   fpCommandSpecialMeshRendering->SetParameterN << 
387   fpCommandSpecialMeshRendering->SetDefaultVal << 
388                                                << 
389   fpCommandSpecialMeshRenderingOption = new G4 << 
390   ("/vis/viewer/set/specialMeshRenderingOption << 
391   fpCommandSpecialMeshRenderingOption->SetGuid << 
392   ("Set special mesh rendering option - \"defa << 
393   fpCommandSpecialMeshRenderingOption->SetPara << 
394   fpCommandSpecialMeshRenderingOption->SetCand << 
395   fpCommandSpecialMeshRenderingOption->SetDefa << 
396                                                << 
397   fpCommandSpecialMeshVolumes = new G4UIcomman << 
398   ("/vis/viewer/set/specialMeshVolumes",this); << 
399   fpCommandSpecialMeshVolumes -> SetGuidance   << 
400   ("Specify the volumes for special rendering. << 
401    "\nand is interpreted to mean \"all found m << 
402   fpCommandSpecialMeshVolumes->SetGuidance     << 
403   ("Please provide a list of space-separated p << 
404    "\nnumber pairs. Negative copy number means << 
405   parameter = new G4UIparameter("volumes",'s', << 
406   parameter->SetGuidance                       << 
407   ("List of physical volume names and copy num << 
408   fpCommandSpecialMeshVolumes->SetParameter(pa << 
409                                                << 
410   fpCommandStyle = new G4UIcmdWithAString ("/v    364   fpCommandStyle = new G4UIcmdWithAString ("/vis/viewer/set/style",this);
411   fpCommandStyle->SetGuidance                     365   fpCommandStyle->SetGuidance
412   ("Set style of drawing - w[ireframe] or s[ur << 366     ("Set style of drawing - w[ireframe] or s[urface].");
413   fpCommandStyle->SetGuidance                  << 367   fpCommandStyle->SetGuidance 
414   ("(Hidden line drawing is controlled by \"/v << 368     ("(Hidden line drawing is controlled by \"/vis/viewer/set/hiddenEdge\".)");
415   fpCommandStyle->SetParameterName ("style",om    369   fpCommandStyle->SetParameterName ("style",omitable = false);
416   fpCommandStyle->SetCandidates("w wireframe s << 370   fpCommandStyle->SetCandidates("w wireframe s surface");
417                                                   371 
418   fpCommandTargetPoint = new G4UIcmdWith3Vecto    372   fpCommandTargetPoint = new G4UIcmdWith3VectorAndUnit
419   ("/vis/viewer/set/targetPoint", this);       << 373     ("/vis/viewer/set/targetPoint", this);
420   fpCommandTargetPoint->SetGuidance               374   fpCommandTargetPoint->SetGuidance
421   ("Set target point.");                       << 375     ("Set target point.");
422   fpCommandTargetPoint->SetGuidance               376   fpCommandTargetPoint->SetGuidance
423   ("This sets the \"Current Target Point\" rel << 377     ("This sets the \"Current Target Point\" relative to the \"Standard");
424   fpCommandTargetPoint->SetGuidance               378   fpCommandTargetPoint->SetGuidance
425   ("Target Point\" so that the actual target p << 379     ("Target Point\" so that the actual target point is as requested.");
426   fpCommandTargetPoint->SetGuidance               380   fpCommandTargetPoint->SetGuidance
427   ("(See G4ViewParameters.hh for an explanatio << 381     ("(See G4ViewParameters.hh for an explanation of target points.)");
428   fpCommandTargetPoint->SetParameterName("x",     382   fpCommandTargetPoint->SetParameterName("x", "y", "z", omitable = false);
429   fpCommandTargetPoint->SetUnitCategory("Lengt    383   fpCommandTargetPoint->SetUnitCategory("Length");
430                                                   384 
431   fpCommandUpThetaPhi = new G4UIcommand           385   fpCommandUpThetaPhi = new G4UIcommand
432   ("/vis/viewer/set/upThetaPhi", this);        << 386     ("/vis/viewer/set/upThetaPhi", this);
433   fpCommandUpThetaPhi -> SetGuidance ("Set up     387   fpCommandUpThetaPhi -> SetGuidance ("Set up vector.");
434   fpCommandUpThetaPhi -> SetGuidance              388   fpCommandUpThetaPhi -> SetGuidance
435   ("Viewer will attempt always to show this di << 389     ("Viewer will attempt always to show this direction upwards.");
436   parameter = new G4UIparameter("theta", 'd',     390   parameter = new G4UIparameter("theta", 'd', omitable = true);
437   parameter -> SetDefaultValue (90.);             391   parameter -> SetDefaultValue (90.);
438   fpCommandUpThetaPhi -> SetParameter (paramet    392   fpCommandUpThetaPhi -> SetParameter (parameter);
439   parameter = new G4UIparameter("phi", 'd', om    393   parameter = new G4UIparameter("phi", 'd', omitable = true);
440   parameter -> SetDefaultValue (90.);             394   parameter -> SetDefaultValue (90.);
441   fpCommandUpThetaPhi -> SetParameter (paramet    395   fpCommandUpThetaPhi -> SetParameter (parameter);
442   parameter = new G4UIparameter ("unit", 's',     396   parameter = new G4UIparameter ("unit", 's', omitable = true);
443   parameter -> SetDefaultValue ("deg");           397   parameter -> SetDefaultValue ("deg");
444   fpCommandUpThetaPhi -> SetParameter (paramet    398   fpCommandUpThetaPhi -> SetParameter (parameter);
445                                                   399 
446   fpCommandUpVector = new G4UIcommand             400   fpCommandUpVector = new G4UIcommand
447   ("/vis/viewer/set/upVector", this);          << 401     ("/vis/viewer/set/upVector", this);
448   fpCommandUpVector -> SetGuidance ("Set up ve    402   fpCommandUpVector -> SetGuidance ("Set up vector.");
449   fpCommandUpVector -> SetGuidance                403   fpCommandUpVector -> SetGuidance
450   ("Viewer will attempt always to show this di << 404     ("Viewer will attempt always to show this direction upwards.");
451   parameter = new G4UIparameter("x", 'd', omit    405   parameter = new G4UIparameter("x", 'd', omitable = true);
452   parameter -> SetDefaultValue (0.);              406   parameter -> SetDefaultValue (0.);
453   fpCommandUpVector -> SetParameter (parameter    407   fpCommandUpVector -> SetParameter (parameter);
454   parameter = new G4UIparameter("y", 'd', omit    408   parameter = new G4UIparameter("y", 'd', omitable = true);
455   parameter -> SetDefaultValue (1.);              409   parameter -> SetDefaultValue (1.);
456   fpCommandUpVector -> SetParameter (parameter    410   fpCommandUpVector -> SetParameter (parameter);
457   parameter = new G4UIparameter ("z", 'd', omi    411   parameter = new G4UIparameter ("z", 'd', omitable = true);
458   parameter -> SetDefaultValue (0.);              412   parameter -> SetDefaultValue (0.);
459   fpCommandUpVector -> SetParameter (parameter    413   fpCommandUpVector -> SetParameter (parameter);
460                                                   414 
461   fpCommandViewpointThetaPhi = new G4UIcommand    415   fpCommandViewpointThetaPhi = new G4UIcommand
462   ("/vis/viewer/set/viewpointThetaPhi", this); << 416     ("/vis/viewer/set/viewpointThetaPhi", this);
463   fpCommandViewpointThetaPhi -> SetGuidance       417   fpCommandViewpointThetaPhi -> SetGuidance
464   ("Set direction from target to camera.");    << 418     ("Set direction from target to camera.");
465   fpCommandViewpointThetaPhi -> SetGuidance       419   fpCommandViewpointThetaPhi -> SetGuidance
466   ("Also changes lightpoint direction if light    420   ("Also changes lightpoint direction if lights are set to move with camera.");
467   parameter = new G4UIparameter("theta", 'd',     421   parameter = new G4UIparameter("theta", 'd', omitable = true);
468   parameter -> SetDefaultValue (60.);             422   parameter -> SetDefaultValue (60.);
469   fpCommandViewpointThetaPhi -> SetParameter (    423   fpCommandViewpointThetaPhi -> SetParameter (parameter);
470   parameter = new G4UIparameter("phi", 'd', om    424   parameter = new G4UIparameter("phi", 'd', omitable = true);
471   parameter -> SetDefaultValue (45.);             425   parameter -> SetDefaultValue (45.);
472   fpCommandViewpointThetaPhi -> SetParameter (    426   fpCommandViewpointThetaPhi -> SetParameter (parameter);
473   parameter = new G4UIparameter ("unit", 's',     427   parameter = new G4UIparameter ("unit", 's', omitable = true);
474   parameter -> SetDefaultValue ("deg");           428   parameter -> SetDefaultValue ("deg");
475   fpCommandViewpointThetaPhi -> SetParameter (    429   fpCommandViewpointThetaPhi -> SetParameter (parameter);
476                                                   430 
477   fpCommandViewpointVector = new G4UIcommand      431   fpCommandViewpointVector = new G4UIcommand
478   ("/vis/viewer/set/viewpointVector", this);   << 432     ("/vis/viewer/set/viewpointVector", this);
479   fpCommandViewpointVector -> SetGuidance         433   fpCommandViewpointVector -> SetGuidance
480   ("Set direction from target to camera.");    << 434     ("Set direction from target to camera.");
481   fpCommandViewpointVector -> SetGuidance         435   fpCommandViewpointVector -> SetGuidance
482   ("Also changes lightpoint direction if light    436   ("Also changes lightpoint direction if lights are set to move with camera.");
483   parameter = new G4UIparameter("x", 'd', omit    437   parameter = new G4UIparameter("x", 'd', omitable = true);
484   parameter -> SetDefaultValue (1.);              438   parameter -> SetDefaultValue (1.);
485   fpCommandViewpointVector -> SetParameter (pa    439   fpCommandViewpointVector -> SetParameter (parameter);
486   parameter = new G4UIparameter("y", 'd', omit    440   parameter = new G4UIparameter("y", 'd', omitable = true);
487   parameter -> SetDefaultValue (1.);              441   parameter -> SetDefaultValue (1.);
488   fpCommandViewpointVector -> SetParameter (pa    442   fpCommandViewpointVector -> SetParameter (parameter);
489   parameter = new G4UIparameter ("z", 'd', omi    443   parameter = new G4UIparameter ("z", 'd', omitable = true);
490   parameter -> SetDefaultValue (1.);              444   parameter -> SetDefaultValue (1.);
491   fpCommandViewpointVector -> SetParameter (pa    445   fpCommandViewpointVector -> SetParameter (parameter);
492                                                   446 
493   fpTimeWindowDirectory = new G4UIdirectory ("    447   fpTimeWindowDirectory = new G4UIdirectory ("/vis/viewer/set/timeWindow/");
494   fpTimeWindowDirectory -> SetGuidance ("Set t    448   fpTimeWindowDirectory -> SetGuidance ("Set time window parameters of current viewer.");
495   G4String timeWindowGuidance =                   449   G4String timeWindowGuidance =
496   "For these commands use"                        450   "For these commands use"
497   "\n  /vis/scene/add/trajectories rich"          451   "\n  /vis/scene/add/trajectories rich"
498   "\n  /vis/modeling/trajectories/drawByCharge    452   "\n  /vis/modeling/trajectories/drawByCharge-0/default/setTimeSliceInterval 0.01 ns"
499   "\nthen typically"                              453   "\nthen typically"
500   "\n  /vis/viewer/set/timeWindow/displayLight    454   "\n  /vis/viewer/set/timeWindow/displayLightFront true 0 0 -50 cm -0.5 ns"
501   "\n  /vis/viewer/set/timeWindow/displayHeadT    455   "\n  /vis/viewer/set/timeWindow/displayHeadTime true"
502   "\n  /vis/viewer/set/timeWindow/fadeFactor 1    456   "\n  /vis/viewer/set/timeWindow/fadeFactor 1"
503   "\n  /run/beamOn # or several until you get     457   "\n  /run/beamOn # or several until you get a good event or events"
504   "\n  /vis/viewer/set/timeWindow/startTime 0     458   "\n  /vis/viewer/set/timeWindow/startTime 0 ns 1 ns"
505   "\n  /vis/viewer/save"                          459   "\n  /vis/viewer/save"
506   "\n  /vis/viewer/set/timeWindow/startTime 1     460   "\n  /vis/viewer/set/timeWindow/startTime 1 ns 1 ns"
507   "\nthen zoom, pan etc to a view of interest     461   "\nthen zoom, pan etc to a view of interest and"
508   "\n  /vis/viewer/save"                          462   "\n  /vis/viewer/save"
509   "\nthen repeat with next start time, another    463   "\nthen repeat with next start time, another view and a save, then try"
510   "\n  /vis/viewer/interpolate";                  464   "\n  /vis/viewer/interpolate";
511                                                   465 
512   fpCommandTimeWindowDisplayHeadTime =            466   fpCommandTimeWindowDisplayHeadTime =
513   new G4UIcommand("/vis/viewer/set/timeWindow/    467   new G4UIcommand("/vis/viewer/set/timeWindow/displayHeadTime", this);
514   fpCommandTimeWindowDisplayHeadTime->SetGuida    468   fpCommandTimeWindowDisplayHeadTime->SetGuidance
515   ("Display head time of range in 2D text.");     469   ("Display head time of range in 2D text.");
516   fpCommandTimeWindowDisplayHeadTime->SetGuida    470   fpCommandTimeWindowDisplayHeadTime->SetGuidance(timeWindowGuidance);
517   parameter = new G4UIparameter ("displayHeadT    471   parameter = new G4UIparameter ("displayHeadTime", 'b', omitable = false);
518   parameter->SetDefaultValue(false);              472   parameter->SetDefaultValue(false);
519   fpCommandTimeWindowDisplayHeadTime->SetParam    473   fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter);
520   parameter = new G4UIparameter ("screenX", 'd    474   parameter = new G4UIparameter ("screenX", 'd', omitable = true);
521   parameter->SetGuidance("-1 < screenX < 1");     475   parameter->SetGuidance("-1 < screenX < 1");
522   parameter->SetParameterRange("screenX >= -1.    476   parameter->SetParameterRange("screenX >= -1. && screenX <= 1.");
523   parameter->SetDefaultValue(-0.9);               477   parameter->SetDefaultValue(-0.9);
524   fpCommandTimeWindowDisplayHeadTime->SetParam    478   fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter);
525   parameter = new G4UIparameter ("screenY", 'd    479   parameter = new G4UIparameter ("screenY", 'd', omitable = true);
526   parameter->SetGuidance("-1 < screenY < 1");     480   parameter->SetGuidance("-1 < screenY < 1");
527   parameter->SetParameterRange("screenY >= -1.    481   parameter->SetParameterRange("screenY >= -1. && screenY <= 1.");
528   parameter->SetDefaultValue(-0.9);               482   parameter->SetDefaultValue(-0.9);
529   fpCommandTimeWindowDisplayHeadTime->SetParam    483   fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter);
530   parameter = new G4UIparameter ("screenSize",    484   parameter = new G4UIparameter ("screenSize", 'd', omitable = true);
531   parameter->SetDefaultValue(24.);                485   parameter->SetDefaultValue(24.);
532   fpCommandTimeWindowDisplayHeadTime->SetParam    486   fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter);
533   parameter = new G4UIparameter ("red", 'd', o    487   parameter = new G4UIparameter ("red", 'd', omitable = true);
534   parameter->SetParameterRange("red >= 0. && r    488   parameter->SetParameterRange("red >= 0. && red <= 1.");
535   parameter->SetDefaultValue(0.);                 489   parameter->SetDefaultValue(0.);
536   fpCommandTimeWindowDisplayHeadTime->SetParam    490   fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter);
537   parameter = new G4UIparameter ("green", 'd',    491   parameter = new G4UIparameter ("green", 'd', omitable = true);
538   parameter->SetParameterRange("green >= 0. &&    492   parameter->SetParameterRange("green >= 0. && green <= 1.");
539   parameter->SetDefaultValue(1.);                 493   parameter->SetDefaultValue(1.);
540   fpCommandTimeWindowDisplayHeadTime->SetParam    494   fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter);
541   parameter = new G4UIparameter ("blue", 'd',     495   parameter = new G4UIparameter ("blue", 'd', omitable = true);
542   parameter->SetParameterRange("blue >= 0. &&     496   parameter->SetParameterRange("blue >= 0. && blue <= 1.");
543   parameter->SetDefaultValue(1.);                 497   parameter->SetDefaultValue(1.);
544   fpCommandTimeWindowDisplayHeadTime->SetParam    498   fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter);
545                                                   499 
546   fpCommandTimeWindowDisplayLightFront =          500   fpCommandTimeWindowDisplayLightFront =
547   new G4UIcommand("/vis/viewer/set/timeWindow/    501   new G4UIcommand("/vis/viewer/set/timeWindow/displayLightFront", this);
548   fpCommandTimeWindowDisplayLightFront->SetGui    502   fpCommandTimeWindowDisplayLightFront->SetGuidance
549   ("Display the light front at head time.");      503   ("Display the light front at head time.");
550   fpCommandTimeWindowDisplayLightFront->SetGui    504   fpCommandTimeWindowDisplayLightFront->SetGuidance
551   ("Tip: The trajectories can appear of jump a    505   ("Tip: The trajectories can appear of jump ahead of the light front"
552    "\nbecause their time range overlaps the vi    506    "\nbecause their time range overlaps the viewer's time range.  To"
553    "\naverage out this discrete time effect, a    507    "\naverage out this discrete time effect, advance the light front by"
554    "\nhalf the trajectories interval. E.g., if    508    "\nhalf the trajectories interval. E.g., if the trajectory time slice"
555    "\ninterval is 0.01 ns:"                       509    "\ninterval is 0.01 ns:"
556    "\n  /vis/viewer/set/timeWindow/displayLigh    510    "\n  /vis/viewer/set/timeWindow/displayLightFront true -90 0 0 mm -0.005 ns"
557    "\nTo prevent them beating the light front     511    "\nTo prevent them beating the light front at all:"
558    "\n  /vis/viewer/set/timeWindow/displayLigh    512    "\n  /vis/viewer/set/timeWindow/displayLightFront true -90 0 0 mm -0.01 ns");
559   fpCommandTimeWindowDisplayLightFront->SetGui    513   fpCommandTimeWindowDisplayLightFront->SetGuidance(timeWindowGuidance);
560   parameter = new G4UIparameter ("displayLight    514   parameter = new G4UIparameter ("displayLightFront", 'b', omitable = true);
561   parameter->SetDefaultValue(true);               515   parameter->SetDefaultValue(true);
562   fpCommandTimeWindowDisplayLightFront->SetPar    516   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
563   parameter = new G4UIparameter ("originX", 'd    517   parameter = new G4UIparameter ("originX", 'd', omitable = true);
564   parameter->SetDefaultValue(0.);                 518   parameter->SetDefaultValue(0.);
565   fpCommandTimeWindowDisplayLightFront->SetPar    519   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
566   parameter = new G4UIparameter ("originY", 'd    520   parameter = new G4UIparameter ("originY", 'd', omitable = true);
567   parameter->SetDefaultValue(0.);                 521   parameter->SetDefaultValue(0.);
568   fpCommandTimeWindowDisplayLightFront->SetPar    522   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
569   parameter = new G4UIparameter ("originZ", 'd    523   parameter = new G4UIparameter ("originZ", 'd', omitable = true);
570   parameter->SetDefaultValue(0.);                 524   parameter->SetDefaultValue(0.);
571   fpCommandTimeWindowDisplayLightFront->SetPar    525   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
572   parameter = new G4UIparameter ("space_unit",    526   parameter = new G4UIparameter ("space_unit", 's', omitable = true);
573   parameter->SetDefaultValue("m");                527   parameter->SetDefaultValue("m");
574   fpCommandTimeWindowDisplayLightFront->SetPar    528   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
575   parameter = new G4UIparameter ("originT", 'd    529   parameter = new G4UIparameter ("originT", 'd', omitable = true);
576   parameter->SetDefaultValue(0.);                 530   parameter->SetDefaultValue(0.);
577   fpCommandTimeWindowDisplayLightFront->SetPar    531   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
578   parameter = new G4UIparameter ("time_unit",     532   parameter = new G4UIparameter ("time_unit", 's', omitable = true);
579   parameter->SetDefaultValue("s");                533   parameter->SetDefaultValue("s");
580   fpCommandTimeWindowDisplayLightFront->SetPar    534   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
581   parameter = new G4UIparameter ("red", 'd', o    535   parameter = new G4UIparameter ("red", 'd', omitable = true);
582   parameter->SetParameterRange("red >= 0. && r    536   parameter->SetParameterRange("red >= 0. && red <= 1.");
583   parameter->SetDefaultValue(0.);                 537   parameter->SetDefaultValue(0.);
584   fpCommandTimeWindowDisplayLightFront->SetPar    538   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
585   parameter = new G4UIparameter ("green", 'd',    539   parameter = new G4UIparameter ("green", 'd', omitable = true);
586   parameter->SetParameterRange("green >= 0. &&    540   parameter->SetParameterRange("green >= 0. && green <= 1.");
587   parameter->SetDefaultValue(1.);                 541   parameter->SetDefaultValue(1.);
588   fpCommandTimeWindowDisplayLightFront->SetPar    542   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
589   parameter = new G4UIparameter ("blue", 'd',     543   parameter = new G4UIparameter ("blue", 'd', omitable = true);
590   parameter->SetParameterRange("blue >= 0. &&     544   parameter->SetParameterRange("blue >= 0. && blue <= 1.");
591   parameter->SetDefaultValue(0.);                 545   parameter->SetDefaultValue(0.);
592   fpCommandTimeWindowDisplayLightFront->SetPar    546   fpCommandTimeWindowDisplayLightFront->SetParameter(parameter);
593                                                   547 
594   fpCommandTimeWindowEndTime =                    548   fpCommandTimeWindowEndTime =
595   new G4UIcommand("/vis/viewer/set/timeWindow/    549   new G4UIcommand("/vis/viewer/set/timeWindow/endTime", this);
596   fpCommandTimeWindowEndTime->SetGuidance("Set    550   fpCommandTimeWindowEndTime->SetGuidance("Set end and range of track time.");
597   fpCommandTimeWindowEndTime->SetGuidance(time    551   fpCommandTimeWindowEndTime->SetGuidance(timeWindowGuidance);
598   parameter = new G4UIparameter ("end-time", '    552   parameter = new G4UIparameter ("end-time", 'd', omitable = false);
599   parameter->SetDefaultValue(G4VisAttributes::    553   parameter->SetDefaultValue(G4VisAttributes::fVeryLongTime);
600   fpCommandTimeWindowEndTime->SetParameter(par    554   fpCommandTimeWindowEndTime->SetParameter(parameter);
601   parameter = new G4UIparameter ("end-time-uni    555   parameter = new G4UIparameter ("end-time-unit", 's', omitable = false);
602   parameter->SetDefaultValue("ns");               556   parameter->SetDefaultValue("ns");
603   fpCommandTimeWindowEndTime->SetParameter(par    557   fpCommandTimeWindowEndTime->SetParameter(parameter);
604   parameter = new G4UIparameter ("time-range",    558   parameter = new G4UIparameter ("time-range", 'd', omitable = true);
605   parameter->SetDefaultValue(-1.);                559   parameter->SetDefaultValue(-1.);
606   fpCommandTimeWindowEndTime->SetParameter(par    560   fpCommandTimeWindowEndTime->SetParameter(parameter);
607   parameter = new G4UIparameter ("time-range-u    561   parameter = new G4UIparameter ("time-range-unit", 's', omitable = true);
608   parameter->SetDefaultValue("ns");               562   parameter->SetDefaultValue("ns");
609   fpCommandTimeWindowEndTime->SetParameter(par    563   fpCommandTimeWindowEndTime->SetParameter(parameter);
610                                                   564 
611   fpCommandTimeWindowFadeFactor =                 565   fpCommandTimeWindowFadeFactor =
612   new G4UIcmdWithADouble("/vis/viewer/set/time    566   new G4UIcmdWithADouble("/vis/viewer/set/timeWindow/fadeFactor", this);
613   fpCommandTimeWindowFadeFactor->SetGuidance      567   fpCommandTimeWindowFadeFactor->SetGuidance
614   ("0: no fade; 1: maximum fade with time wind    568   ("0: no fade; 1: maximum fade with time window.");
615   fpCommandTimeWindowFadeFactor->SetGuidance(t    569   fpCommandTimeWindowFadeFactor->SetGuidance(timeWindowGuidance);
616   fpCommandTimeWindowFadeFactor->SetParameterN    570   fpCommandTimeWindowFadeFactor->SetParameterName("fade_factor", omitable = false);
617   fpCommandTimeWindowFadeFactor->SetRange("fad    571   fpCommandTimeWindowFadeFactor->SetRange("fade_factor>=0.&&fade_factor<=1.");
618   fpCommandTimeWindowFadeFactor->SetDefaultVal    572   fpCommandTimeWindowFadeFactor->SetDefaultValue(0.);
619                                                   573 
620   fpCommandTimeWindowStartTime =                  574   fpCommandTimeWindowStartTime =
621   new G4UIcommand("/vis/viewer/set/timeWindow/    575   new G4UIcommand("/vis/viewer/set/timeWindow/startTime", this);
622   fpCommandTimeWindowStartTime->SetGuidance("S    576   fpCommandTimeWindowStartTime->SetGuidance("Set start and range of track time.");
623   fpCommandTimeWindowStartTime->SetGuidance(ti    577   fpCommandTimeWindowStartTime->SetGuidance(timeWindowGuidance);
624   parameter = new G4UIparameter ("start-time",    578   parameter = new G4UIparameter ("start-time", 'd', omitable = false);
625   parameter->SetDefaultValue(-G4VisAttributes:    579   parameter->SetDefaultValue(-G4VisAttributes::fVeryLongTime);
626   fpCommandTimeWindowStartTime->SetParameter(p    580   fpCommandTimeWindowStartTime->SetParameter(parameter);
627   parameter = new G4UIparameter ("start-time-u    581   parameter = new G4UIparameter ("start-time-unit", 's', omitable = false);
628   parameter->SetDefaultValue("ns");               582   parameter->SetDefaultValue("ns");
629   fpCommandTimeWindowStartTime->SetParameter(p    583   fpCommandTimeWindowStartTime->SetParameter(parameter);
630   parameter = new G4UIparameter ("time-range",    584   parameter = new G4UIparameter ("time-range", 'd', omitable = true);
631   parameter->SetDefaultValue(-1.);                585   parameter->SetDefaultValue(-1.);
632   fpCommandTimeWindowStartTime->SetParameter(p    586   fpCommandTimeWindowStartTime->SetParameter(parameter);
633   parameter = new G4UIparameter ("time-range-u    587   parameter = new G4UIparameter ("time-range-unit", 's', omitable = true);
634   parameter->SetDefaultValue("ns");               588   parameter->SetDefaultValue("ns");
635   fpCommandTimeWindowStartTime->SetParameter(p    589   fpCommandTimeWindowStartTime->SetParameter(parameter);
636 }                                                 590 }
637                                                   591 
638 G4VisCommandsViewerSet::~G4VisCommandsViewerSe    592 G4VisCommandsViewerSet::~G4VisCommandsViewerSet() {
639   delete fpCommandTimeWindowStartTime;            593   delete fpCommandTimeWindowStartTime;
640   delete fpCommandTimeWindowFadeFactor;           594   delete fpCommandTimeWindowFadeFactor;
641   delete fpCommandTimeWindowEndTime;              595   delete fpCommandTimeWindowEndTime;
642   delete fpCommandTimeWindowDisplayLightFront;    596   delete fpCommandTimeWindowDisplayLightFront;
643   delete fpCommandTimeWindowDisplayHeadTime;      597   delete fpCommandTimeWindowDisplayHeadTime;
644   delete fpTimeWindowDirectory;                   598   delete fpTimeWindowDirectory;
645   delete fpCommandViewpointVector;                599   delete fpCommandViewpointVector;
646   delete fpCommandViewpointThetaPhi;              600   delete fpCommandViewpointThetaPhi;
647   delete fpCommandUpVector;                       601   delete fpCommandUpVector;
648   delete fpCommandUpThetaPhi;                     602   delete fpCommandUpThetaPhi;
649   delete fpCommandTargetPoint;                    603   delete fpCommandTargetPoint;
650   delete fpCommandStyle;                          604   delete fpCommandStyle;
651   delete fpCommandSpecialMeshVolumes;          << 
652   delete fpCommandSpecialMeshRenderingOption;  << 
653   delete fpCommandSpecialMeshRendering;        << 
654   delete fpCommandSectionPlane;                   605   delete fpCommandSectionPlane;
655   delete fpCommandRotationStyle;                  606   delete fpCommandRotationStyle;
656   delete fpCommandProjection;                     607   delete fpCommandProjection;
657   delete fpCommandPicking;                        608   delete fpCommandPicking;
658   delete fpCommandNumberOfCloudPoints;         << 
659   delete fpCommandLineWidth;                   << 
660   delete fpCommandLineSegments;                   609   delete fpCommandLineSegments;
661   delete fpCommandLightsVector;                   610   delete fpCommandLightsVector;
662   delete fpCommandLightsThetaPhi;                 611   delete fpCommandLightsThetaPhi;
663   delete fpCommandLightsMove;                     612   delete fpCommandLightsMove;
664   delete fpCommandHiddenMarker;                   613   delete fpCommandHiddenMarker;
665   delete fpCommandHiddenEdge;                     614   delete fpCommandHiddenEdge;
666   delete fpCommandGlobalMarkerScale;              615   delete fpCommandGlobalMarkerScale;
667   delete fpCommandGlobalLineWidthScale;           616   delete fpCommandGlobalLineWidthScale;
668   delete fpCommandExplodeFactor;                  617   delete fpCommandExplodeFactor;
669   delete fpCommandEdge;                           618   delete fpCommandEdge;
670   delete fpCommandDefaultTextColour;              619   delete fpCommandDefaultTextColour;
671   delete fpCommandDefaultColour;                  620   delete fpCommandDefaultColour;
672   delete fpCommandCutawayMode;                    621   delete fpCommandCutawayMode;
673   delete fpCommandCulling;                        622   delete fpCommandCulling;
674   delete fpCommandBackground;                     623   delete fpCommandBackground;
675   delete fpCommandAuxEdge;                        624   delete fpCommandAuxEdge;
676   delete fpCommandAutoRefresh;                    625   delete fpCommandAutoRefresh;
677   delete fpCommandAll;                            626   delete fpCommandAll;
678 }                                                 627 }
679                                                   628 
680 G4String G4VisCommandsViewerSet::GetCurrentVal    629 G4String G4VisCommandsViewerSet::GetCurrentValue(G4UIcommand*) {
681   return "";                                      630   return "";
682 }                                                 631 }
683                                                   632 
684 void G4VisCommandsViewerSet::SetNewValue          633 void G4VisCommandsViewerSet::SetNewValue
685 (G4UIcommand* command,G4String newValue) {        634 (G4UIcommand* command,G4String newValue) {
686                                                   635 
687   G4VisManager::Verbosity verbosity = fpVisMan    636   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
688                                                   637 
689   G4VViewer* currentViewer = fpVisManager->Get    638   G4VViewer* currentViewer = fpVisManager->GetCurrentViewer();
690   if (!currentViewer) {                           639   if (!currentViewer) {
691     if (verbosity >= G4VisManager::errors) {      640     if (verbosity >= G4VisManager::errors) {
692       G4warn <<                                << 641       G4cerr <<
693       "ERROR: G4VisCommandsViewerSet::SetNewVa << 642   "ERROR: G4VisCommandsViewerSet::SetNewValue: no current viewer."
694       << G4endl;                               << 643        << G4endl;
695     }                                             644     }
696     return;                                       645     return;
697   }                                               646   }
698                                                   647 
699   G4ViewParameters vp = currentViewer->GetView    648   G4ViewParameters vp = currentViewer->GetViewParameters();
700                                                   649 
701   if (command == fpCommandAll) {                  650   if (command == fpCommandAll) {
702     G4VViewer* fromViewer = fpVisManager->GetV    651     G4VViewer* fromViewer = fpVisManager->GetViewer(newValue);
703     if (!fromViewer) {                            652     if (!fromViewer) {
704       if (verbosity >= G4VisManager::errors) {    653       if (verbosity >= G4VisManager::errors) {
705         G4warn <<                              << 654   G4cerr <<
706         "ERROR: G4VisCommandsViewerSet::SetNew << 655     "ERROR: G4VisCommandsViewerSet::SetNewValue: all:"
707         "\n  unrecognised from-viewer."        << 656     "\n  unrecognised from-viewer."
708         << G4endl;                             << 657          << G4endl;
709       }                                           658       }
710       return;                                     659       return;
711     }                                             660     }
712     if (fromViewer == currentViewer) {            661     if (fromViewer == currentViewer) {
713       if (verbosity >= G4VisManager::warnings)    662       if (verbosity >= G4VisManager::warnings) {
714         G4warn <<                              << 663       G4cout <<
715         "WARNING: G4VisCommandsViewerSet::SetN << 664   "WARNING: G4VisCommandsViewerSet::SetNewValue: all:"
716         "\n  from-viewer and current viewer ar << 665   "\n  from-viewer and current viewer are identical."
717         << G4endl;                             << 666        << G4endl;
718       }                                           667       }
719       return;                                     668       return;
720     }                                             669     }
721     // Copy view parameters except for autoRef << 670     // Copy view parameters except for autoRefresh...
722     auto keepAutoRefresh = vp.IsAutoRefresh(); << 671     G4bool currentAutoRefresh =
723     auto keepBackground  = vp.GetBackgroundCol << 672       currentViewer->GetViewParameters().IsAutoRefresh();
724     vp = fromViewer->GetViewParameters();         673     vp = fromViewer->GetViewParameters();
725     vp.SetAutoRefresh(keepAutoRefresh);        << 674     vp.SetAutoRefresh(currentAutoRefresh);
726     vp.SetBackgroundColour(keepBackground);    << 
727     // Concatenate any private vis attributes     675     // Concatenate any private vis attributes modifiers...
728     const std::vector<G4ModelingParameters::Vi    676     const std::vector<G4ModelingParameters::VisAttributesModifier>*
729     privateVAMs = fromViewer->GetPrivateVisAtt << 677       privateVAMs = fromViewer->GetPrivateVisAttributesModifiers();
730     if (privateVAMs) {                            678     if (privateVAMs) {
731       std::vector<G4ModelingParameters::VisAtt    679       std::vector<G4ModelingParameters::VisAttributesModifier>::const_iterator i;
732       for (i = privateVAMs->begin(); i != priv    680       for (i = privateVAMs->begin(); i != privateVAMs->end(); ++i) {
733         vp.AddVisAttributesModifier(*i);          681         vp.AddVisAttributesModifier(*i);
734       }                                           682       }
735     }                                             683     }
736     if (verbosity >= G4VisManager::confirmatio    684     if (verbosity >= G4VisManager::confirmations) {
737       G4cout << "View parameters of viewer \""    685       G4cout << "View parameters of viewer \"" << currentViewer->GetName()
738       << "\"\n  set to those of viewer \"" <<  << 686        << "\"\n  set to those of viewer \"" << fromViewer->GetName()
739       << "\"."                                 << 687        << "\"."
740       << G4endl;                               << 688        << G4endl;
741     }                                             689     }
742     if (verbosity >= G4VisManager::warnings) {    690     if (verbosity >= G4VisManager::warnings) {
743       G4warn << "You may need \"/vis/viewer/re << 691       G4cout << "You may need \"/vis/viewer/rebuild\"."
744       << G4endl;                               << 692        << G4endl;
745     }                                             693     }
746   }                                               694   }
747                                                   695 
748   else if (command == fpCommandAutoRefresh) {     696   else if (command == fpCommandAutoRefresh) {
749     G4bool autoRefresh = G4UIcommand::ConvertT    697     G4bool autoRefresh = G4UIcommand::ConvertToBool(newValue);
750     const G4ViewParameters& defaultVP =           698     const G4ViewParameters& defaultVP =
751     currentViewer->GetDefaultViewParameters(); << 699       currentViewer->GetDefaultViewParameters();
752     if (autoRefresh && !defaultVP.IsAutoRefres    700     if (autoRefresh && !defaultVP.IsAutoRefresh()) {
753       if (verbosity >= G4VisManager::warnings)    701       if (verbosity >= G4VisManager::warnings) {
754         G4warn                                 << 702   G4cout
755         << "WARNING: "                         << 703     << "WARNING: "
756         << currentViewer->GetName() << " is NO << 704     << currentViewer->GetName() << " is NOT auto-refesh by default"
757         << "\n  so cannot be set to auto-refre << 705     << "\n  so cannot be set to auto-refresh."
758         << G4endl;                             << 706     << G4endl;
759       }                                           707       }
760       return;                                     708       return;
761     }                                             709     }
762     vp.SetAutoRefresh(autoRefresh);               710     vp.SetAutoRefresh(autoRefresh);
763     if (verbosity >= G4VisManager::confirmatio    711     if (verbosity >= G4VisManager::confirmations) {
764       G4cout << "Views will ";                    712       G4cout << "Views will ";
765       if (!vp.IsAutoRefresh()) G4cout << "not     713       if (!vp.IsAutoRefresh()) G4cout << "not ";
766       G4cout << "be automatically refreshed af    714       G4cout << "be automatically refreshed after a change of view parameters."
767       << G4endl;                               << 715        << G4endl;
768     }                                             716     }
769     if (!vp.IsAutoRefresh()) {                    717     if (!vp.IsAutoRefresh()) {
770       currentViewer->SetViewParameters(vp);       718       currentViewer->SetViewParameters(vp);
771       return;  // Avoid a refresh if auto-refr    719       return;  // Avoid a refresh if auto-refresh has been set to off...
772     }  // ...otherwise take normal action.        720     }  // ...otherwise take normal action.
773   }                                               721   }
774                                                   722 
775   else if (command == fpCommandAuxEdge) {         723   else if (command == fpCommandAuxEdge) {
776     vp.SetAuxEdgeVisible(G4UIcommand::ConvertT    724     vp.SetAuxEdgeVisible(G4UIcommand::ConvertToBool(newValue));
777     if (verbosity >= G4VisManager::confirmatio    725     if (verbosity >= G4VisManager::confirmations) {
778       G4cout << "Auxiliary edges will ";          726       G4cout << "Auxiliary edges will ";
779       if (!vp.IsAuxEdgeVisible()) G4cout << "n    727       if (!vp.IsAuxEdgeVisible()) G4cout << "not ";
780       G4cout << "be visible." << G4endl;          728       G4cout << "be visible." << G4endl;
781     }                                             729     }
782   }                                               730   }
783                                                   731 
784   else if (command == fpCommandBackground) {      732   else if (command == fpCommandBackground) {
785     G4String redOrString;                         733     G4String redOrString;
786     G4double green, blue, opacity;                734     G4double green, blue, opacity;
787     std::istringstream iss(newValue);             735     std::istringstream iss(newValue);
788     iss >> redOrString >> green >> blue >> opa    736     iss >> redOrString >> green >> blue >> opacity;
789     G4Colour colour(0.,0.,0.);  // Default bla    737     G4Colour colour(0.,0.,0.);  // Default black and opaque.
790     ConvertToColour(colour, redOrString, green    738     ConvertToColour(colour, redOrString, green, blue, opacity);
791     vp.SetBackgroundColour(colour);               739     vp.SetBackgroundColour(colour);
792     if (verbosity >= G4VisManager::confirmatio    740     if (verbosity >= G4VisManager::confirmations) {
793       G4cout << "Background colour "              741       G4cout << "Background colour "
794       << vp.GetBackgroundColour()              << 742        << vp.GetBackgroundColour()
795       << " requested."                         << 743        << " requested."
796       << G4endl;                               << 744        << G4endl;
797     }                                             745     }
798   }                                               746   }
799                                                   747 
800   else if (command == fpCommandCulling) {         748   else if (command == fpCommandCulling) {
801     G4String cullingOption, stringFlag, unit;     749     G4String cullingOption, stringFlag, unit;
802     G4double density;                             750     G4double density;
803     std::istringstream is (newValue);             751     std::istringstream is (newValue);
804     is >> cullingOption >> stringFlag >> densi    752     is >> cullingOption >> stringFlag >> density >> unit;
805     G4bool boolFlag = G4UIcommand::ConvertToBo    753     G4bool boolFlag = G4UIcommand::ConvertToBool(stringFlag);
806     if (cullingOption == "global") {              754     if (cullingOption == "global") {
807       vp.SetCulling(boolFlag);                    755       vp.SetCulling(boolFlag);
808       if (verbosity >= G4VisManager::confirmat    756       if (verbosity >= G4VisManager::confirmations) {
809         G4cout <<                              << 757   G4cout <<
810         "G4VisCommandsViewerSet::SetNewValue:  << 758     "G4VisCommandsViewerSet::SetNewValue: culling: global culling flag"
811         " set to " << G4UIcommand::ConvertToSt << 759     " set to " << G4UIcommand::ConvertToString(boolFlag) <<
812         ".\n  Does not change specific culling << 760     ".\n  Does not change specific culling flags."
813         << G4endl;                             << 761          << G4endl;
814       }                                           762       }
815     }                                             763     }
816     else if (cullingOption == "coveredDaughter    764     else if (cullingOption == "coveredDaughters") {
817       vp.SetCullingCovered(boolFlag);             765       vp.SetCullingCovered(boolFlag);
818       if (verbosity >= G4VisManager::confirmat    766       if (verbosity >= G4VisManager::confirmations) {
819         G4cout <<                              << 767   G4cout <<
820         "G4VisCommandsViewerSet::SetNewValue:  << 768     "G4VisCommandsViewerSet::SetNewValue: culling: culling covered"
821         "\n  daughters flag set to "           << 769     "\n  daughters flag set to "
822         << G4UIcommand::ConvertToString(boolFl << 770          << G4UIcommand::ConvertToString(boolFlag) <<
823         ".  Daughters covered by opaque mother << 771     ".  Daughters covered by opaque mothers"
824         "\n  will be culled, i.e., not drawn,  << 772     "\n  will be culled, i.e., not drawn, if this flag is true."
825         "\n  Note: this is only effective in s << 773     "\n  Note: this is only effective in surface drawing style,"
826         "\n  and then only if the volumes are  << 774     "\n  and then only if the volumes are visible and opaque, and then"
827         "\n  only if no sections or cutaways a << 775     "\n  only if no sections or cutaways are in operation."
828         << G4endl;                             << 776          << G4endl;
829       }                                           777       }
830     }                                             778     }
831     else if (cullingOption == "invisible") {      779     else if (cullingOption == "invisible") {
832       vp.SetCullingInvisible(boolFlag);           780       vp.SetCullingInvisible(boolFlag);
833       if (verbosity >= G4VisManager::confirmat    781       if (verbosity >= G4VisManager::confirmations) {
834         G4cout <<                              << 782   G4cout <<
835         "G4VisCommandsViewerSet::SetNewValue:  << 783     "G4VisCommandsViewerSet::SetNewValue: culling: culling invisible"
836         "\n  flag set to "                     << 784     "\n  flag set to "
837         << boolFlag << G4UIcommand::ConvertToS << 785          << boolFlag << G4UIcommand::ConvertToString(boolFlag) <<
838         ".  Volumes marked invisible will be c << 786     ".  Volumes marked invisible will be culled,"
839         "\n  i.e., not drawn, if this flag is  << 787     "\n  i.e., not drawn, if this flag is true."
840         << G4endl;                             << 788          << G4endl;
841       }                                           789       }
842     }                                             790     }
843     else if (cullingOption == "density") {        791     else if (cullingOption == "density") {
844       const G4String where =                      792       const G4String where =
845       "G4VisCommandsViewerSet::SetNewValue: cu    793       "G4VisCommandsViewerSet::SetNewValue: culling: culling by density";
846       if (boolFlag) {                             794       if (boolFlag) {
847         G4double valueOfUnit;                     795         G4double valueOfUnit;
848         // "Volumic Mass" is Michel's phrase f    796         // "Volumic Mass" is Michel's phrase for "Density"
849         if (ProvideValueOfUnit(where,unit,"Vol    797         if (ProvideValueOfUnit(where,unit,"Volumic Mass",valueOfUnit)) {
850           // Successful outcome of unit search    798           // Successful outcome of unit search
851           vp.SetDensityCulling(boolFlag);         799           vp.SetDensityCulling(boolFlag);
852           density *= valueOfUnit;                 800           density *= valueOfUnit;
853           vp.SetVisibleDensity(density);          801           vp.SetVisibleDensity(density);
854         } else {                                  802         } else {
855           // Unsuccessful outcome of unit sear    803           // Unsuccessful outcome of unit search. Flag and density unchanged.
856           density = vp.GetVisibleDensity();       804           density = vp.GetVisibleDensity();
857         }                                         805         }
858       } else {  // Reset flag but density unch    806       } else {  // Reset flag but density unchanged.
859         vp.SetDensityCulling(boolFlag);           807         vp.SetDensityCulling(boolFlag);
860       }                                           808       }
861       if (verbosity >= G4VisManager::confirmat    809       if (verbosity >= G4VisManager::confirmations) {
862         G4cout                                    810         G4cout
863         << where                                  811         << where
864         << "\n  flag set to "                     812         << "\n  flag set to "
865         << std::boolalpha << vp.IsDensityCulli    813         << std::boolalpha << vp.IsDensityCulling()
866         << ".  Volumes with density less than     814         << ".  Volumes with density less than "
867         << G4BestUnit(density,"Volumic Mass")     815         << G4BestUnit(density,"Volumic Mass")
868         << "\n  will be culled, i.e., not draw    816         << "\n  will be culled, i.e., not drawn, if this flag is true."
869         << G4endl;                                817         << G4endl;
870       }                                           818       }
871     }                                             819     }
872     else {                                        820     else {
873       if (verbosity >= G4VisManager::errors) {    821       if (verbosity >= G4VisManager::errors) {
874         G4warn <<                              << 822   G4cerr <<
875         "ERROR: G4VisCommandsViewerSet::SetNew << 823     "ERROR: G4VisCommandsViewerSet::SetNewValue: culling:"
876         "\n  option not recognised."           << 824     "\n  option not recognised."
877         << G4endl;                             << 825          << G4endl;
878       }                                           826       }
879     }                                             827     }
880   }                                               828   }
881                                                   829 
882   else if (command == fpCommandCutawayMode) {     830   else if (command == fpCommandCutawayMode) {
883     if (newValue == "add" || newValue == "unio    831     if (newValue == "add" || newValue == "union")
884       vp.SetCutawayMode(G4ViewParameters::cuta    832       vp.SetCutawayMode(G4ViewParameters::cutawayUnion);
885     if (newValue == "multiply" || newValue ==     833     if (newValue == "multiply" || newValue == "intersection")
886       vp.SetCutawayMode(G4ViewParameters::cuta    834       vp.SetCutawayMode(G4ViewParameters::cutawayIntersection);
887                                                << 835  
888     if (verbosity >= G4VisManager::confirmatio    836     if (verbosity >= G4VisManager::confirmations) {
889       G4cout << "Cutaway mode set to ";           837       G4cout << "Cutaway mode set to ";
890       if (vp.GetCutawayMode() == G4ViewParamet    838       if (vp.GetCutawayMode() == G4ViewParameters::cutawayUnion)
891         G4cout << "cutawayUnion";              << 839   G4cout << "cutawayUnion";
892       if (vp.GetCutawayMode() == G4ViewParamet    840       if (vp.GetCutawayMode() == G4ViewParameters::cutawayIntersection)
893         G4cout << "cutawayIntersection";       << 841   G4cout << "cutawayIntersection";
894       G4cout << G4endl;                           842       G4cout << G4endl;
895     }                                             843     }
896   }                                               844   }
897                                                   845 
898   else if (command == fpCommandDefaultColour)     846   else if (command == fpCommandDefaultColour) {
899     G4String redOrString;                         847     G4String redOrString;
900     G4double green, blue, opacity;                848     G4double green, blue, opacity;
901     std::istringstream iss(newValue);             849     std::istringstream iss(newValue);
902     iss >> redOrString >> green >> blue >> opa    850     iss >> redOrString >> green >> blue >> opacity;
903     G4Colour colour(1.,1.,1.);  // Default whi    851     G4Colour colour(1.,1.,1.);  // Default white and opaque.
904     ConvertToColour(colour, redOrString, green    852     ConvertToColour(colour, redOrString, green, blue, opacity);
905     G4VisAttributes va = vp.GetDefaultVisAttri    853     G4VisAttributes va = vp.GetDefaultVisAttributes();
906     va.SetColour(colour);                         854     va.SetColour(colour);
907     vp.SetDefaultVisAttributes(va);               855     vp.SetDefaultVisAttributes(va);
908     if (verbosity >= G4VisManager::confirmatio    856     if (verbosity >= G4VisManager::confirmations) {
909       G4cout << "Default colour "                 857       G4cout << "Default colour "
910       << vp.GetDefaultVisAttributes()->GetColo << 858        << vp.GetDefaultVisAttributes()->GetColour()
911       << " requested."                         << 859        << " requested."
912       << G4endl;                               << 860        << G4endl;
913     }                                             861     }
914   }                                               862   }
915                                                   863 
916   else if (command == fpCommandDefaultTextColo    864   else if (command == fpCommandDefaultTextColour) {
917     G4String redOrString;                         865     G4String redOrString;
918     G4double green, blue, opacity;                866     G4double green, blue, opacity;
919     std::istringstream iss(newValue);             867     std::istringstream iss(newValue);
920     iss >> redOrString >> green >> blue >> opa    868     iss >> redOrString >> green >> blue >> opacity;
921     G4Colour colour(1.,1.,1.);  // Default whi    869     G4Colour colour(1.,1.,1.);  // Default white and opaque.
922     ConvertToColour(colour, redOrString, green    870     ConvertToColour(colour, redOrString, green, blue, opacity);
923     G4VisAttributes va = vp.GetDefaultTextVisA    871     G4VisAttributes va = vp.GetDefaultTextVisAttributes();
924     va.SetColour(colour);                         872     va.SetColour(colour);
925     vp.SetDefaultTextVisAttributes(va);           873     vp.SetDefaultTextVisAttributes(va);
926     if (verbosity >= G4VisManager::confirmatio    874     if (verbosity >= G4VisManager::confirmations) {
927       G4cout << "Default colour "                 875       G4cout << "Default colour "
928       << vp.GetDefaultTextVisAttributes()->Get << 876        << vp.GetDefaultTextVisAttributes()->GetColour()
929       << " requested."                         << 877        << " requested."
930       << G4endl;                               << 878        << G4endl;
931     }                                             879     }
932   }                                               880   }
933                                                   881 
934   else if (command == fpCommandEdge) {            882   else if (command == fpCommandEdge) {
935     G4ViewParameters::DrawingStyle existingSty    883     G4ViewParameters::DrawingStyle existingStyle = vp.GetDrawingStyle();
936     if (G4UIcommand::ConvertToBool(newValue))  << 884     if (G4UIcommand::ConvertToBool(newValue)) {
937       switch (existingStyle) {                    885       switch (existingStyle) {
938         case G4ViewParameters::wireframe:      << 886       case G4ViewParameters::wireframe:
939           break;                               << 887   break;
940         case G4ViewParameters::hlr:            << 888       case G4ViewParameters::hlr:
941           break;                               << 889   break;
942         case G4ViewParameters::hsr:            << 890       case G4ViewParameters::hsr:
943           vp.SetDrawingStyle(G4ViewParameters: << 891   vp.SetDrawingStyle(G4ViewParameters::hlhsr);
944           break;                               << 892         break;
945         case G4ViewParameters::hlhsr:          << 893       case G4ViewParameters::hlhsr:
946           break;                               << 894         break;
947         case G4ViewParameters::cloud:          << 
948           break;                               << 
949       }                                           895       }
950     }                                             896     }
951     else {  // false                           << 897     else {
952       switch (existingStyle) {                    898       switch (existingStyle) {
953         case G4ViewParameters::wireframe:      << 899       case G4ViewParameters::wireframe:
954           break;                               << 900   break;
955         case G4ViewParameters::hlr:            << 901       case G4ViewParameters::hlr:
956           break;                               << 902   break;
957         case G4ViewParameters::hsr:            << 903       case G4ViewParameters::hsr:
958           break;                               << 904   break;
959         case G4ViewParameters::hlhsr:          << 905       case G4ViewParameters::hlhsr:
960           vp.SetDrawingStyle(G4ViewParameters: << 906   vp.SetDrawingStyle(G4ViewParameters::hsr);
961           break;                               << 907   break;
962         case G4ViewParameters::cloud:          << 
963           break;                               << 
964       }                                           908       }
965     }                                             909     }
966     if (verbosity >= G4VisManager::confirmatio    910     if (verbosity >= G4VisManager::confirmations) {
967       G4cout << "Drawing style of viewer \"" <    911       G4cout << "Drawing style of viewer \"" << currentViewer->GetName()
968       << "\" set to " << vp.GetDrawingStyle()  << 912        << "\" set to " << vp.GetDrawingStyle()
969       << G4endl;                               << 913        << G4endl;
970     }                                             914     }
971   }                                               915   }
972                                                   916 
973   else if (command == fpCommandExplodeFactor)     917   else if (command == fpCommandExplodeFactor) {
974     G4double explodeFactor, x, y, z;              918     G4double explodeFactor, x, y, z;
975     G4String unitString;                          919     G4String unitString;
976     std::istringstream is (newValue);             920     std::istringstream is (newValue);
977     is >> explodeFactor >> x >> y >> z >> unit    921     is >> explodeFactor >> x >> y >> z >> unitString;
978     G4double unit = G4UIcommand::ValueOf(unitS    922     G4double unit = G4UIcommand::ValueOf(unitString);
979     vp.SetExplodeFactor(explodeFactor);           923     vp.SetExplodeFactor(explodeFactor);
980     vp.SetExplodeCentre(G4Point3D(x * unit, y     924     vp.SetExplodeCentre(G4Point3D(x * unit, y * unit, z * unit));
981     if (verbosity >= G4VisManager::confirmatio    925     if (verbosity >= G4VisManager::confirmations) {
982       G4cout << "Explode factor changed to " <    926       G4cout << "Explode factor changed to " << vp.GetExplodeFactor()
983       << " from centre " << vp.GetExplodeCentr << 927        << " from centre " << vp.GetExplodeCentre()
984       << G4endl;                               << 928        << G4endl;
985     }                                             929     }
986   }                                               930   }
987                                                   931 
988   else if (command == fpCommandGlobalLineWidth    932   else if (command == fpCommandGlobalLineWidthScale) {
989     G4double globalLineWidthScale                 933     G4double globalLineWidthScale
990     = fpCommandGlobalLineWidthScale->GetNewDou << 934       = fpCommandGlobalLineWidthScale->GetNewDoubleValue(newValue);
991     vp.SetGlobalLineWidthScale(globalLineWidth    935     vp.SetGlobalLineWidthScale(globalLineWidthScale);
992     if (verbosity >= G4VisManager::confirmatio    936     if (verbosity >= G4VisManager::confirmations) {
993       G4cout << "Global Line Width Scale chang    937       G4cout << "Global Line Width Scale changed to "
994       << vp.GetGlobalLineWidthScale() << G4end << 938        << vp.GetGlobalLineWidthScale() << G4endl;
995     }                                             939     }
996   }                                               940   }
997                                                   941 
998   else if (command == fpCommandGlobalMarkerSca    942   else if (command == fpCommandGlobalMarkerScale) {
999     G4double globalMarkerScale                    943     G4double globalMarkerScale
1000     = fpCommandGlobalMarkerScale->GetNewDoubl << 944       = fpCommandGlobalMarkerScale->GetNewDoubleValue(newValue);
1001     vp.SetGlobalMarkerScale(globalMarkerScale    945     vp.SetGlobalMarkerScale(globalMarkerScale);
1002     if (verbosity >= G4VisManager::confirmati    946     if (verbosity >= G4VisManager::confirmations) {
1003       G4cout << "Global Marker Scale changed     947       G4cout << "Global Marker Scale changed to "
1004       << vp.GetGlobalMarkerScale() << G4endl; << 948        << vp.GetGlobalMarkerScale() << G4endl;
1005     }                                            949     }
1006   }                                              950   }
1007                                                  951 
1008   else if (command == fpCommandHiddenEdge) {     952   else if (command == fpCommandHiddenEdge) {
1009     G4ViewParameters::DrawingStyle existingSt    953     G4ViewParameters::DrawingStyle existingStyle = vp.GetDrawingStyle();
1010     if (G4UIcommand::ConvertToBool(newValue))    954     if (G4UIcommand::ConvertToBool(newValue)) {
1011       switch (existingStyle) {                   955       switch (existingStyle) {
1012         case G4ViewParameters::wireframe:     << 956       case G4ViewParameters::wireframe:
1013           vp.SetDrawingStyle(G4ViewParameters << 957   vp.SetDrawingStyle(G4ViewParameters::hlr);
1014           break;                              << 958   break;
1015         case G4ViewParameters::hlr:           << 959       case G4ViewParameters::hlr:
1016           break;                              << 960   break;
1017         case G4ViewParameters::hsr:           << 961       case G4ViewParameters::hsr:
1018           vp.SetDrawingStyle(G4ViewParameters << 962   vp.SetDrawingStyle(G4ViewParameters::hlhsr);
1019           break;                              << 963         break;
1020         case G4ViewParameters::hlhsr:         << 964       case G4ViewParameters::hlhsr:
1021           break;                              << 965         break;
1022         case G4ViewParameters::cloud:         << 
1023           break;                              << 
1024       }                                          966       }
1025     }                                            967     }
1026     else {                                       968     else {
1027       switch (existingStyle) {                   969       switch (existingStyle) {
1028         case G4ViewParameters::wireframe:     << 970       case G4ViewParameters::wireframe:
1029           break;                              << 971   break;
1030         case G4ViewParameters::hlr:           << 972       case G4ViewParameters::hlr:
1031           vp.SetDrawingStyle(G4ViewParameters << 973   vp.SetDrawingStyle(G4ViewParameters::wireframe);
1032           break;                              << 974   break;
1033         case G4ViewParameters::hsr:           << 975       case G4ViewParameters::hsr:
1034           break;                              << 976   break;
1035         case G4ViewParameters::hlhsr:         << 977       case G4ViewParameters::hlhsr:
1036           vp.SetDrawingStyle(G4ViewParameters << 978   vp.SetDrawingStyle(G4ViewParameters::hsr);
1037           break;                              << 979   break;
1038         case G4ViewParameters::cloud:         << 
1039           break;                              << 
1040       }                                          980       }
1041     }                                            981     }
1042     if (verbosity >= G4VisManager::confirmati    982     if (verbosity >= G4VisManager::confirmations) {
1043       G4cout << "Drawing style of viewer \""     983       G4cout << "Drawing style of viewer \"" << currentViewer->GetName()
1044       << "\" set to " << vp.GetDrawingStyle() << 984        << "\" set to " << vp.GetDrawingStyle()
1045       << G4endl;                              << 985        << G4endl;
1046     }                                            986     }
1047   }                                              987   }
1048                                                  988 
1049   else if (command == fpCommandHiddenMarker)     989   else if (command == fpCommandHiddenMarker) {
1050     G4bool hidden = G4UIcommand::ConvertToBoo    990     G4bool hidden = G4UIcommand::ConvertToBool(newValue);
1051     if (hidden) vp.SetMarkerHidden();            991     if (hidden) vp.SetMarkerHidden();
1052     else vp.SetMarkerNotHidden();                992     else vp.SetMarkerNotHidden();
1053     if (verbosity >= G4VisManager::confirmati    993     if (verbosity >= G4VisManager::confirmations) {
1054       G4cout << "Markers will ";                 994       G4cout << "Markers will ";
1055       if (vp.IsMarkerNotHidden()) G4cout << "    995       if (vp.IsMarkerNotHidden()) G4cout << "not ";
1056       G4cout << "be hidden under solid object    996       G4cout << "be hidden under solid objects." << G4endl;
1057     }                                            997     }
1058   }                                              998   }
1059                                                  999 
1060   else if (command == fpCommandLightsMove) {     1000   else if (command == fpCommandLightsMove) {
1061     if (newValue.find("cam") != G4String::npo    1001     if (newValue.find("cam") != G4String::npos)
1062       vp.SetLightsMoveWithCamera(true);          1002       vp.SetLightsMoveWithCamera(true);
1063     else if(newValue.find("obj") != G4String:    1003     else if(newValue.find("obj") != G4String::npos)
1064       vp.SetLightsMoveWithCamera(false);         1004       vp.SetLightsMoveWithCamera(false);
1065     else {                                       1005     else {
1066       if (verbosity >= G4VisManager::errors)     1006       if (verbosity >= G4VisManager::errors) {
1067         G4warn << "ERROR: \"" << newValue <<  << 1007   G4cerr << "ERROR: \"" << newValue << "\" not recognised."
1068         "  Looking for \"cam\" or \"obj\" in  << 1008   "  Looking for \"cam\" or \"obj\" in string." << G4endl;
1069       }                                          1009       }
1070     }                                            1010     }
1071     if (verbosity >= G4VisManager::confirmati    1011     if (verbosity >= G4VisManager::confirmations) {
1072       G4cout << "Lights move with ";             1012       G4cout << "Lights move with ";
1073       if (vp.GetLightsMoveWithCamera())          1013       if (vp.GetLightsMoveWithCamera())
1074         G4cout << "camera (object appears to  << 1014   G4cout << "camera (object appears to rotate).";
1075       else G4cout << "object (the viewer appe    1015       else G4cout << "object (the viewer appears to be moving).";
1076       G4cout << G4endl;                          1016       G4cout << G4endl;
1077     }                                            1017     }
1078   }                                              1018   }
1079                                                  1019 
1080   else if (command == fpCommandLightsThetaPhi    1020   else if (command == fpCommandLightsThetaPhi) {
1081     G4double theta, phi;                         1021     G4double theta, phi;
1082     if (ConvertToDoublePair(newValue, theta,     1022     if (ConvertToDoublePair(newValue, theta, phi)) {
1083       G4double x = std::sin (theta) * std::co    1023       G4double x = std::sin (theta) * std::cos (phi);
1084       G4double y = std::sin (theta) * std::si    1024       G4double y = std::sin (theta) * std::sin (phi);
1085       G4double z = std::cos (theta);             1025       G4double z = std::cos (theta);
1086       fLightsVector = G4ThreeVector (x, y, z)    1026       fLightsVector = G4ThreeVector (x, y, z);
1087       vp.SetLightpointDirection(fLightsVector    1027       vp.SetLightpointDirection(fLightsVector);
1088       if (verbosity >= G4VisManager::confirma    1028       if (verbosity >= G4VisManager::confirmations) {
1089         G4cout << "Lights direction set to "     1029         G4cout << "Lights direction set to "
1090         << vp.GetLightpointDirection() << G4e    1030         << vp.GetLightpointDirection() << G4endl;
1091       }                                          1031       }
1092     }                                            1032     }
1093   }                                              1033   }
1094                                                  1034 
1095   else if (command == fpCommandLightsVector)     1035   else if (command == fpCommandLightsVector) {
1096     fLightsVector = G4UIcommand::ConvertTo3Ve    1036     fLightsVector = G4UIcommand::ConvertTo3Vector(newValue);
1097     vp.SetLightpointDirection(fLightsVector);    1037     vp.SetLightpointDirection(fLightsVector);
1098     if (verbosity >= G4VisManager::confirmati    1038     if (verbosity >= G4VisManager::confirmations) {
1099       G4cout << "Lights direction set to "       1039       G4cout << "Lights direction set to "
1100       << vp.GetLightpointDirection() << G4end << 1040        << vp.GetLightpointDirection() << G4endl;
1101     }                                         << 
1102   }                                           << 
1103                                               << 
1104   else if (command == fpCommandLineWidth) {   << 
1105     if (verbosity >= G4VisManager::errors) {  << 
1106       // A do-nothing command                 << 
1107       G4warn << command->GetGuidanceLine(0) < << 
1108     }                                            1041     }
1109   }                                              1042   }
1110                                                  1043 
1111   else if (command == fpCommandLineSegments)     1044   else if (command == fpCommandLineSegments) {
1112     G4int nSides = G4UIcommand::ConvertToInt(    1045     G4int nSides = G4UIcommand::ConvertToInt(newValue);
1113     nSides = vp.SetNoOfSides(nSides);            1046     nSides = vp.SetNoOfSides(nSides);
1114     if (verbosity >= G4VisManager::confirmati    1047     if (verbosity >= G4VisManager::confirmations) {
1115       G4cout <<                                  1048       G4cout <<
1116       "Number of line segments per circle in  << 1049   "Number of line segements per circle in polygon approximation is "
1117       << nSides << G4endl;                    << 1050        << nSides << G4endl;
1118     }                                         << 
1119   }                                           << 
1120                                               << 
1121   else if (command == fpCommandNumberOfCloudP << 
1122     G4int nPoints = G4UIcommand::ConvertToInt << 
1123     nPoints = vp.SetNumberOfCloudPoints(nPoin << 
1124     if (verbosity >= G4VisManager::confirmati << 
1125       G4cout <<                               << 
1126       "Number of points to be used in cloud r << 
1127       << nPoints << G4endl;                   << 
1128     }                                            1051     }
1129   }                                              1052   }
1130                                                  1053 
1131   else if (command == fpCommandPicking) {        1054   else if (command == fpCommandPicking) {
1132     vp.SetPicking(G4UIcommand::ConvertToBool(    1055     vp.SetPicking(G4UIcommand::ConvertToBool(newValue));
1133     if (verbosity >= G4VisManager::confirmati    1056     if (verbosity >= G4VisManager::confirmations) {
1134       G4cout << "Picking ";                      1057       G4cout << "Picking ";
1135       if (vp.IsPicking()) G4cout << "requeste    1058       if (vp.IsPicking()) G4cout << "requested.";
1136       else G4cout << "inhibited.";               1059       else G4cout << "inhibited.";
1137       G4cout << G4endl;                          1060       G4cout << G4endl;
1138     }                                            1061     }
1139     if (verbosity >= G4VisManager::warnings)     1062     if (verbosity >= G4VisManager::warnings) {
1140       G4warn << "You may need to issue \"/vis << 1063       G4cout << "You may need to issue \"/vis/viewer/update\"."
1141       << G4endl;                              << 1064        << G4endl;
1142     }                                            1065     }
1143   }                                              1066   }
1144                                                  1067 
1145   else if (command == fpCommandProjection) {     1068   else if (command == fpCommandProjection) {
1146     G4double fieldHalfAngle;                     1069     G4double fieldHalfAngle;
1147     const size_t iPos0 = 0;                      1070     const size_t iPos0 = 0;
1148     if (newValue[iPos0] == 'o') {  // "orthog    1071     if (newValue[iPos0] == 'o') {  // "orthogonal"
1149       fieldHalfAngle = 0.;                       1072       fieldHalfAngle = 0.;
1150     }                                            1073     }
1151     else if (newValue[iPos0] == 'p') {  // "p    1074     else if (newValue[iPos0] == 'p') {  // "perspective"
1152       G4String dummy;                            1075       G4String dummy;
1153       G4String unit;                             1076       G4String unit;
1154       std::istringstream is (newValue);          1077       std::istringstream is (newValue);
1155       is >> dummy >> fieldHalfAngle >> unit;     1078       is >> dummy >> fieldHalfAngle >> unit;
1156       fieldHalfAngle *= G4UIcommand::ValueOf(    1079       fieldHalfAngle *= G4UIcommand::ValueOf(unit);
1157       if (fieldHalfAngle > 89.5 * deg || fiel    1080       if (fieldHalfAngle > 89.5 * deg || fieldHalfAngle <= 0.0) {
1158         if (verbosity >= G4VisManager::errors << 1081   if (verbosity >= G4VisManager::errors) {
1159           G4warn <<                           << 1082     G4cerr <<
1160           "ERROR: Field half angle should be  << 1083       "ERROR: Field half angle should be 0 < angle <= 89.5 degrees.";
1161           G4warn << G4endl;                   << 1084     G4cout << G4endl;
1162         }                                     << 1085   }
1163         return;                               << 1086   return;
1164       }                                          1087       }
1165     }                                            1088     }
1166     else {                                       1089     else {
1167       if (verbosity >= G4VisManager::errors)     1090       if (verbosity >= G4VisManager::errors) {
1168         G4warn << "ERROR: \"" << newValue <<  << 1091   G4cerr << "ERROR: \"" << newValue << "\" not recognised."
1169         "  Looking for 'o' or 'p' first chara << 1092     "  Looking for 'o' or 'p' first character." << G4endl;
1170       }                                          1093       }
1171       return;                                    1094       return;
1172     }                                            1095     }
1173     vp.SetFieldHalfAngle(fieldHalfAngle);        1096     vp.SetFieldHalfAngle(fieldHalfAngle);
1174     if (verbosity >= G4VisManager::confirmati    1097     if (verbosity >= G4VisManager::confirmations) {
1175       G4cout << "Projection style of viewer \    1098       G4cout << "Projection style of viewer \"" << currentViewer->GetName()
1176       << "\" set to ";                        << 1099        << "\" set to ";
1177       if (fieldHalfAngle == 0.) {                1100       if (fieldHalfAngle == 0.) {
1178         G4cout << "orthogonal.";              << 1101   G4cout << "orthogonal.";
1179       }                                          1102       }
1180       else {                                     1103       else {
1181         G4cout << "perspective\n  with half a << 1104   G4cout << "perspective\n  with half angle " << fieldHalfAngle / deg
1182         << " degrees.";                       << 1105          << " degrees.";
1183       }                                          1106       }
1184       G4cout << G4endl;                          1107       G4cout << G4endl;
1185     }                                            1108     }
1186   }                                              1109   }
1187                                                  1110 
1188   else if (command == fpCommandRotationStyle) << 
1189     G4ViewParameters::RotationStyle style;    << 
1190     if (newValue == "constrainUpDirection")   << 
1191       style = G4ViewParameters::constrainUpDi << 
1192     else if (newValue == "freeRotation")      << 
1193       style = G4ViewParameters::freeRotation; << 
1194     else {                                    << 
1195       if (verbosity >= G4VisManager::errors)  << 
1196   G4warn << "ERROR: \"" << newValue << "\" no << 
1197       }                                       << 
1198       return;                                 << 
1199     }                                         << 
1200     vp.SetRotationStyle(style);               << 
1201     if (verbosity >= G4VisManager::confirmati << 
1202       G4cout << "Rotation style of viewer \"" << 
1203       << "\" set to " << vp.GetRotationStyle( << 
1204       << G4endl;                              << 
1205     }                                         << 
1206   }                                           << 
1207                                               << 
1208   else if (command == fpCommandSectionPlane)     1111   else if (command == fpCommandSectionPlane) {
1209     G4String choice, unit;                       1112     G4String choice, unit;
1210     G4double x, y, z, nx, ny, nz, F = 1.;     << 1113     G4double x, y, z, nx, ny, nz;
1211     std::istringstream is (newValue);            1114     std::istringstream is (newValue);
1212     is >> choice >> x >> y >> z >> unit >> nx    1115     is >> choice >> x >> y >> z >> unit >> nx >> ny >> nz;
1213     G4int iSelector = -1;                        1116     G4int iSelector = -1;
1214     if (G4StrUtil::icompare(choice, "off") == << 1117     if (choice.compareTo("off",G4String::ignoreCase) == 0 ||
1215         !G4UIcommand::ConvertToBool(choice))  << 1118   !G4UIcommand::ConvertToBool(choice)) iSelector = 0;
1216     if (G4StrUtil::icompare(choice, "on") ==  << 1119     if (choice.compareTo("on",G4String::ignoreCase) == 0 ||
1217         G4UIcommand::ConvertToBool(choice)) i << 1120   G4UIcommand::ConvertToBool(choice)) iSelector = 1;
1218     if (iSelector < 0) {                         1121     if (iSelector < 0) {
1219       if (verbosity >= G4VisManager::errors)     1122       if (verbosity >= G4VisManager::errors) {
1220         G4warn << "Choice not recognised (on/ << 1123   G4cout << "Choice not recognised (on/true or off/false)." << G4endl;
                                                   >> 1124   G4cout << "Section drawing is currently: ";
                                                   >> 1125   if (vp.IsSection ()) G4cout << "on";
                                                   >> 1126   else                    G4cout << "off";
                                                   >> 1127   G4cout << ".\nSection plane is currently: "
                                                   >> 1128          << vp.GetSectionPlane ();
                                                   >> 1129   G4cout << G4endl;
1221       }                                          1130       }
1222       goto write_result;                      << 1131       return;
1223     }                                            1132     }
                                                   >> 1133     G4double F = 1.;
1224     // iSelector can only be 0 or 1              1134     // iSelector can only be 0 or 1
1225     switch (iSelector) {                         1135     switch (iSelector) {
1226       case 0:                                 << 1136     case 0:
1227         vp.UnsetSectionPlane();               << 1137       vp.UnsetSectionPlane();
1228         break;                                << 1138       break;
1229       case 1:                                 << 1139     case 1:
1230         F = G4UIcommand::ValueOf(unit);       << 1140       F = G4UIcommand::ValueOf(unit);
1231         x *= F; y *= F; z *= F;               << 1141       x *= F; y *= F; z *= F;
1232         if (nx == 0. && ny == 0. && nz == 0.) << 1142       vp.SetSectionPlane(G4Plane3D(G4Normal3D(nx,ny,nz), G4Point3D(x,y,z)));
1233           if (verbosity >= G4VisManager::erro << 1143       vp.SetViewpointDirection(G4Normal3D(nx,ny,nz));
1234             G4warn << "Null normal." << G4end << 1144       break;
1235           }                                   << 
1236           break;;                             << 
1237         }                                     << 
1238         // Make sure normal is normalised     << 
1239         const G4Normal3D& normal = G4Normal3D << 
1240         vp.SetSectionPlane(G4Plane3D(normal,  << 
1241         vp.SetViewpointDirection(normal);     << 
1242         break;                                << 
1243     }                                            1145     }
1244   write_result:                               << 
1245     if (verbosity >= G4VisManager::confirmati    1146     if (verbosity >= G4VisManager::confirmations) {
1246       G4cout << "Section drawing is: ";       << 1147       G4cout << "Section drawing is now: ";
1247       if (vp.IsSection ()) G4cout << "on";       1148       if (vp.IsSection ()) G4cout << "on";
1248       else                 G4cout << "off";   << 1149       else                    G4cout << "off";
1249       G4cout << ".\nSection plane is now: "      1150       G4cout << ".\nSection plane is now: "
1250       << vp.GetSectionPlane ();               << 1151        << vp.GetSectionPlane ();
1251       G4cout << G4endl;                          1152       G4cout << G4endl;
1252     }                                            1153     }
1253   }                                              1154   }
1254                                                  1155 
1255   else if (command == fpCommandSpecialMeshRen << 1156   else if (command == fpCommandRotationStyle) {
1256     vp.SetSpecialMeshRendering(G4UIcommand::C << 1157     G4ViewParameters::RotationStyle style;
1257     if (verbosity >= G4VisManager::confirmati << 1158     if (newValue == "constrainUpDirection")
1258       G4cout << "Special mesh rendering";     << 1159       style = G4ViewParameters::constrainUpDirection;
1259       if (vp.IsSpecialMeshRendering()) {      << 1160     else if (newValue == "freeRotation")
1260         G4cout << " requested. Current option << 1161       style = G4ViewParameters::freeRotation;
1261         << vp.GetSpecialMeshRenderingOption() << 1162     else {
1262         if (vp.GetSpecialMeshVolumes().empty( << 1163       if (verbosity >= G4VisManager::errors) {
1263           G4cout << "any mesh.";              << 1164   G4cerr << "ERROR: \"" << newValue << "\" not recognised." << G4endl;
1264         } else{                               << 
1265           G4cout << "selected volumes:";      << 
1266           for (const auto& pvNameCopyNo: vp.G << 
1267             G4cout << "\n  " << pvNameCopyNo. << 
1268             if (pvNameCopyNo.GetCopyNo() >= 0 << 
1269           }                                   << 
1270         }                                     << 
1271       }                                       << 
1272       else G4cout << ": off.";                << 
1273       G4cout << G4endl;                       << 
1274     }                                         << 
1275   }                                           << 
1276                                               << 
1277   else if (command == fpCommandSpecialMeshRen << 
1278     G4ViewParameters::SMROption option = G4Vi << 
1279     if (newValue == "dots") {                 << 
1280       option = G4ViewParameters::meshAsDots;  << 
1281     }                                         << 
1282     else if(newValue == "surfaces") {         << 
1283       option = G4ViewParameters::meshAsSurfac << 
1284     }                                         << 
1285     vp.SetSpecialMeshRenderingOption(option); << 
1286     if (verbosity >= G4VisManager::confirmati << 
1287       G4cout << "Special mesh rendering optio << 
1288       << vp.GetSpecialMeshRenderingOption() < << 
1289       << G4endl;                              << 
1290     }                                         << 
1291   }                                           << 
1292                                               << 
1293   else if (command == fpCommandSpecialMeshVol << 
1294     std::vector<G4ModelingParameters::PVNameC << 
1295     if (newValue.empty()) {                   << 
1296       vp.SetSpecialMeshVolumes(requestedMeshe << 
1297     } else {                                  << 
1298       // Algorithm from Josuttis p.476.       << 
1299       G4String::size_type iBegin, iEnd;       << 
1300       iBegin = newValue.find_first_not_of(' ' << 
1301       while (iBegin != G4String::npos) {      << 
1302   iEnd = newValue.find_first_of(' ',iBegin);  << 
1303   if (iEnd == G4String::npos) {               << 
1304     iEnd = newValue.length();                 << 
1305   }                                           << 
1306   const G4String& name(newValue.substr(iBegin << 
1307   iBegin = newValue.find_first_not_of(' ',iEn << 
1308   if (iBegin == G4String::npos) {             << 
1309     if (verbosity >= G4VisManager::warnings)  << 
1310       G4warn <<                               << 
1311       "WARNING: G4VisCommandsViewerSet::SetNe << 
1312       "\n  A pair not found.  (There should b << 
1313       "\n  Command ignored."                  << 
1314       << G4endl;                              << 
1315       return;                                 << 
1316     }                                         << 
1317   }                                           << 
1318   iEnd = newValue.find_first_of(' ',iBegin);  << 
1319   if (iEnd == G4String::npos) {               << 
1320     iEnd = newValue.length();                 << 
1321   }                                           << 
1322   G4int copyNo;                               << 
1323   std::istringstream iss(newValue.substr(iBeg << 
1324   if (!(iss >> copyNo)) {                     << 
1325     if (verbosity >= G4VisManager::warnings)  << 
1326       G4warn <<                               << 
1327       "WARNING: G4VisCommandsViewerSet::SetNe << 
1328       "\n  Error reading copy number - it was << 
1329       "\n  Command ignored."                  << 
1330       << G4endl;                              << 
1331       return;                                 << 
1332     }                                         << 
1333   }                                           << 
1334   requestedMeshes.push_back(G4ModelingParamet << 
1335   iBegin = newValue.find_first_not_of(' ',iEn << 
1336       }                                          1165       }
1337       vp.SetSpecialMeshVolumes(requestedMeshe << 1166       return;
1338     }                                            1167     }
                                                   >> 1168     vp.SetRotationStyle(style);
1339     if (verbosity >= G4VisManager::confirmati    1169     if (verbosity >= G4VisManager::confirmations) {
1340       if (vp.GetSpecialMeshVolumes().empty()) << 1170       G4cout << "Rotation style of viewer \"" << currentViewer->GetName()
1341   G4cout <<                                   << 1171        << "\" set to " << vp.GetRotationStyle()
1342   "Special mesh list empty, which means \"all << 1172        << G4endl;
1343   << G4endl;                                  << 
1344       } else {                                << 
1345   G4cout << "Selected special mesh volumes ar << 
1346   for (const auto& pvNameCopyNo: vp.GetSpecia << 
1347     G4cout << "\n  " << pvNameCopyNo.GetName( << 
1348     if (pvNameCopyNo.GetCopyNo() >= 0) G4cout << 
1349   }                                           << 
1350   G4cout << G4endl;                           << 
1351       }                                       << 
1352     }                                            1173     }
1353   }                                              1174   }
1354                                                  1175 
1355   else if (command == fpCommandStyle) {          1176   else if (command == fpCommandStyle) {
1356     G4ViewParameters::DrawingStyle existingSt    1177     G4ViewParameters::DrawingStyle existingStyle = vp.GetDrawingStyle();
1357     const size_t iPos0 = 0;                      1178     const size_t iPos0 = 0;
1358     if (newValue[iPos0] == 'w') {  // "wirefr    1179     if (newValue[iPos0] == 'w') {  // "wireframe"
1359       switch (existingStyle) {                   1180       switch (existingStyle) {
1360         case G4ViewParameters::wireframe:     << 1181       case G4ViewParameters::wireframe:
1361           break;                              << 1182   break;
1362         case G4ViewParameters::hlr:           << 1183       case G4ViewParameters::hlr:
1363           break;                              << 1184   break;
1364         case G4ViewParameters::hsr:           << 1185       case G4ViewParameters::hsr:
1365           vp.SetDrawingStyle(G4ViewParameters << 1186   vp.SetDrawingStyle(G4ViewParameters::wireframe);
1366           break;                              << 1187         break;
1367         case G4ViewParameters::hlhsr:         << 1188       case G4ViewParameters::hlhsr:
1368           vp.SetDrawingStyle(G4ViewParameters << 1189   vp.SetDrawingStyle(G4ViewParameters::hlr);
1369           break;                              << 1190         break;
1370         case G4ViewParameters::cloud:         << 
1371           vp.SetDrawingStyle(G4ViewParameters << 
1372           break;                              << 
1373       }                                          1191       }
1374     }                                            1192     }
1375     else if (newValue[iPos0] == 's') {  // "s    1193     else if (newValue[iPos0] == 's') {  // "surface"
1376       switch (existingStyle) {                   1194       switch (existingStyle) {
1377         case G4ViewParameters::wireframe:     << 1195       case G4ViewParameters::wireframe:
1378           vp.SetDrawingStyle(G4ViewParameters << 1196   vp.SetDrawingStyle(G4ViewParameters::hsr);
1379           break;                              << 1197   break;
1380         case G4ViewParameters::hlr:           << 1198       case G4ViewParameters::hlr:
1381           vp.SetDrawingStyle(G4ViewParameters << 1199   vp.SetDrawingStyle(G4ViewParameters::hlhsr);
1382           break;                              << 1200   break;
1383         case G4ViewParameters::hsr:           << 1201       case G4ViewParameters::hsr:
1384           break;                              << 1202   break;
1385         case G4ViewParameters::hlhsr:         << 1203       case G4ViewParameters::hlhsr:
1386           break;                              << 1204   break;
1387         case G4ViewParameters::cloud:         << 
1388           vp.SetDrawingStyle(G4ViewParameters << 
1389           break;                              << 
1390      }                                        << 
1391     }                                         << 
1392     else if (newValue[iPos0] == 'c') {  // "c << 
1393       switch (existingStyle) {                << 
1394         case G4ViewParameters::wireframe:     << 
1395           vp.SetDrawingStyle(G4ViewParameters << 
1396           break;                              << 
1397         case G4ViewParameters::hlr:           << 
1398           vp.SetDrawingStyle(G4ViewParameters << 
1399           break;                              << 
1400         case G4ViewParameters::hsr:           << 
1401           vp.SetDrawingStyle(G4ViewParameters << 
1402           break;                              << 
1403         case G4ViewParameters::hlhsr:         << 
1404           vp.SetDrawingStyle(G4ViewParameters << 
1405           break;                              << 
1406         case G4ViewParameters::cloud:         << 
1407           break;                              << 
1408       }                                          1205       }
1409     }                                            1206     }
1410     else {                                       1207     else {
1411       if (verbosity >= G4VisManager::errors)     1208       if (verbosity >= G4VisManager::errors) {
1412         G4warn << "ERROR: \"" << newValue <<  << 1209   G4cerr << "ERROR: \"" << newValue << "\" not recognised."
1413         "  Looking for 'w' or 's' or 'c' firs << 1210     "  Looking for 'w' or 's' first character." << G4endl;
1414       }                                          1211       }
1415       return;                                    1212       return;
1416     }                                            1213     }
1417     if (verbosity >= G4VisManager::confirmati    1214     if (verbosity >= G4VisManager::confirmations) {
1418       G4cout << "Drawing style of viewer \""     1215       G4cout << "Drawing style of viewer \"" << currentViewer->GetName()
1419       << "\" set to " << vp.GetDrawingStyle() << 1216        << "\" set to " << vp.GetDrawingStyle()
1420       << G4endl;                              << 1217        << G4endl;
1421     }                                            1218     }
1422   }                                              1219   }
1423                                                  1220 
1424   else if (command == fpCommandTargetPoint) {    1221   else if (command == fpCommandTargetPoint) {
1425     G4ThreeVector targetPoint =                  1222     G4ThreeVector targetPoint =
1426     fpCommandTargetPoint->GetNew3VectorValue( << 1223       fpCommandTargetPoint->GetNew3VectorValue(newValue);
1427     const G4Point3D& standardTargetPoint =       1224     const G4Point3D& standardTargetPoint =
1428     currentViewer->GetSceneHandler()->GetScen << 1225       currentViewer->GetSceneHandler()->GetScene()->GetStandardTargetPoint();
1429     vp.SetCurrentTargetPoint(targetPoint - st    1226     vp.SetCurrentTargetPoint(targetPoint - standardTargetPoint);
1430     if (verbosity >= G4VisManager::confirmati    1227     if (verbosity >= G4VisManager::confirmations) {
1431       G4cout << "Target point set to "           1228       G4cout << "Target point set to "
1432       << fpCommandTargetPoint->ConvertToStrin << 1229        << fpCommandTargetPoint->ConvertToStringWithBestUnit
1433       (targetPoint)                           << 1230   (targetPoint)
1434       << "\n\"Current Target Point\" set to   << 1231        << "\n\"Current Target Point\" set to  "
1435       << fpCommandTargetPoint->ConvertToStrin << 1232        << fpCommandTargetPoint->ConvertToStringWithBestUnit
1436       (vp.GetCurrentTargetPoint())            << 1233   (vp.GetCurrentTargetPoint())
1437       << "\n\"Standard Target Point\" is "    << 1234        << "\n\"Standard Target Point\" is "
1438       << fpCommandTargetPoint->ConvertToStrin << 1235        << fpCommandTargetPoint->ConvertToStringWithBestUnit
1439       (standardTargetPoint)                   << 1236   (standardTargetPoint)
1440       << G4endl;                              << 1237        << G4endl;
1441     }                                            1238     }
1442   }                                              1239   }
1443                                                  1240 
1444   else if (command == fpCommandUpThetaPhi) {     1241   else if (command == fpCommandUpThetaPhi) {
1445     G4double theta, phi;                         1242     G4double theta, phi;
1446     if (ConvertToDoublePair(newValue, theta,     1243     if (ConvertToDoublePair(newValue, theta, phi)) {
1447       G4double x = std::sin (theta) * std::co    1244       G4double x = std::sin (theta) * std::cos (phi);
1448       G4double y = std::sin (theta) * std::si    1245       G4double y = std::sin (theta) * std::sin (phi);
1449       G4double z = std::cos (theta);             1246       G4double z = std::cos (theta);
1450       fUpVector = G4ThreeVector (x, y, z);       1247       fUpVector = G4ThreeVector (x, y, z);
1451       vp.SetUpVector(fUpVector);                 1248       vp.SetUpVector(fUpVector);
1452       if (verbosity >= G4VisManager::confirma    1249       if (verbosity >= G4VisManager::confirmations) {
1453         G4cout << "Up direction set to " << v    1250         G4cout << "Up direction set to " << vp.GetUpVector() << G4endl;
1454       }                                          1251       }
1455     }                                            1252     }
1456   }                                              1253   }
1457                                                  1254 
1458   else if (command == fpCommandUpVector) {       1255   else if (command == fpCommandUpVector) {
1459     fUpVector = G4UIcommand::ConvertTo3Vector    1256     fUpVector = G4UIcommand::ConvertTo3Vector(newValue).unit();
1460     vp.SetUpVector(fUpVector);                   1257     vp.SetUpVector(fUpVector);
1461     if (verbosity >= G4VisManager::confirmati    1258     if (verbosity >= G4VisManager::confirmations) {
1462       G4cout << "Up direction set to " << vp.    1259       G4cout << "Up direction set to " << vp.GetUpVector() << G4endl;
1463     }                                            1260     }
1464   }                                              1261   }
1465                                                  1262 
1466   else if (command == fpCommandViewpointTheta    1263   else if (command == fpCommandViewpointThetaPhi) {
1467     G4double theta, phi;                         1264     G4double theta, phi;
1468     if (ConvertToDoublePair(newValue, theta,     1265     if (ConvertToDoublePair(newValue, theta, phi)) {
1469       G4double x = std::sin (theta) * std::co    1266       G4double x = std::sin (theta) * std::cos (phi);
1470       G4double y = std::sin (theta) * std::si    1267       G4double y = std::sin (theta) * std::sin (phi);
1471       G4double z = std::cos (theta);             1268       G4double z = std::cos (theta);
1472       fViewpointVector = G4ThreeVector (x, y,    1269       fViewpointVector = G4ThreeVector (x, y, z);
1473       vp.SetViewAndLights(fViewpointVector);     1270       vp.SetViewAndLights(fViewpointVector);
1474       if (verbosity >= G4VisManager::confirma    1271       if (verbosity >= G4VisManager::confirmations) {
1475         G4cout << "Viewpoint direction set to    1272         G4cout << "Viewpoint direction set to "
1476         << vp.GetViewpointDirection() << G4en    1273         << vp.GetViewpointDirection() << G4endl;
1477         if (vp.GetLightsMoveWithCamera ()) {     1274         if (vp.GetLightsMoveWithCamera ()) {
1478           G4cout << "Lightpoint direction set    1275           G4cout << "Lightpoint direction set to "
1479           << vp.GetActualLightpointDirection     1276           << vp.GetActualLightpointDirection () << G4endl;
1480         }                                        1277         }
1481       }                                          1278       }
1482     }                                            1279     }
1483   }                                              1280   }
1484                                                  1281 
1485   else if (command == fpCommandViewpointVecto    1282   else if (command == fpCommandViewpointVector) {
1486     G4ThreeVector viewpointVector = G4UIcomma    1283     G4ThreeVector viewpointVector = G4UIcommand::ConvertTo3Vector(newValue);
1487     if (viewpointVector.mag2() <= 0.) {          1284     if (viewpointVector.mag2() <= 0.) {
1488       if (verbosity >= G4VisManager::errors)     1285       if (verbosity >= G4VisManager::errors) {
1489         G4warn << "ERROR: Null viewpoint vect << 1286         G4cerr << "ERROR: Null viewpoint vector. No action taken." << G4endl;
1490       }                                          1287       }
1491     } else {                                     1288     } else {
1492       fViewpointVector = viewpointVector.unit    1289       fViewpointVector = viewpointVector.unit();
1493       vp.SetViewAndLights(fViewpointVector);     1290       vp.SetViewAndLights(fViewpointVector);
1494       if (verbosity >= G4VisManager::confirma    1291       if (verbosity >= G4VisManager::confirmations) {
1495         G4cout << "Viewpoint direction set to    1292         G4cout << "Viewpoint direction set to "
1496         << vp.GetViewpointDirection() << G4en    1293         << vp.GetViewpointDirection() << G4endl;
1497         if (vp.GetLightsMoveWithCamera ()) {     1294         if (vp.GetLightsMoveWithCamera ()) {
1498           G4cout << "Lightpoint direction set    1295           G4cout << "Lightpoint direction set to "
1499           << vp.GetActualLightpointDirection     1296           << vp.GetActualLightpointDirection () << G4endl;
1500         }                                        1297         }
1501       }                                          1298       }
1502     }                                            1299     }
1503   }                                              1300   }
1504                                                  1301 
1505   else if (command == fpCommandTimeWindowDisp    1302   else if (command == fpCommandTimeWindowDisplayHeadTime)
1506   {                                              1303   {
1507     G4String display;                            1304     G4String display;
1508     G4double screenX, screenY, screenSize, re    1305     G4double screenX, screenY, screenSize, red, green, blue;
1509     std::istringstream iss(newValue);            1306     std::istringstream iss(newValue);
1510     iss >> display >> screenX >> screenY         1307     iss >> display >> screenX >> screenY
1511     >> screenSize >> red >> green >> blue;       1308     >> screenSize >> red >> green >> blue;
1512     vp.SetDisplayHeadTime(command->ConvertToB    1309     vp.SetDisplayHeadTime(command->ConvertToBool(display));
1513     vp.SetDisplayHeadTimeX(screenX);             1310     vp.SetDisplayHeadTimeX(screenX);
1514     vp.SetDisplayHeadTimeY(screenY);             1311     vp.SetDisplayHeadTimeY(screenY);
1515     vp.SetDisplayHeadTimeSize(screenSize);       1312     vp.SetDisplayHeadTimeSize(screenSize);
1516     vp.SetDisplayHeadTimeRed(red);               1313     vp.SetDisplayHeadTimeRed(red);
1517     vp.SetDisplayHeadTimeGreen(green);           1314     vp.SetDisplayHeadTimeGreen(green);
1518     vp.SetDisplayHeadTimeBlue(blue);             1315     vp.SetDisplayHeadTimeBlue(blue);
1519     if (verbosity >= G4VisManager::confirmati    1316     if (verbosity >= G4VisManager::confirmations) {
1520       G4cout << "Display head time flag set:     1317       G4cout << "Display head time flag set: "
1521       << vp                                      1318       << vp
1522       << G4endl;                                 1319       << G4endl;
1523     }                                            1320     }
1524   }                                              1321   }
1525                                                  1322 
1526   else if (command == fpCommandTimeWindowDisp    1323   else if (command == fpCommandTimeWindowDisplayLightFront)
1527   {                                              1324   {
1528     G4String display, originX, originY, origi    1325     G4String display, originX, originY, originZ, unitS, originT, unitT;
1529     G4double red, green, blue;                   1326     G4double red, green, blue;
1530     std::istringstream iss(newValue);            1327     std::istringstream iss(newValue);
1531     iss >> display                               1328     iss >> display
1532     >> originX >> originY >> originZ >> unitS    1329     >> originX >> originY >> originZ >> unitS
1533     >> originT >> unitT                          1330     >> originT >> unitT
1534     >> red >> green >> blue;                     1331     >> red >> green >> blue;
1535     vp.SetDisplayLightFront(command->ConvertT    1332     vp.SetDisplayLightFront(command->ConvertToBool(display));
1536     vp.SetDisplayLightFrontX                     1333     vp.SetDisplayLightFrontX
1537     (command->ConvertToDimensionedDouble(G4St    1334     (command->ConvertToDimensionedDouble(G4String(originX + ' ' + unitS)));
1538     vp.SetDisplayLightFrontY                     1335     vp.SetDisplayLightFrontY
1539     (command->ConvertToDimensionedDouble(G4St    1336     (command->ConvertToDimensionedDouble(G4String(originY + ' ' + unitS)));
1540     vp.SetDisplayLightFrontZ                     1337     vp.SetDisplayLightFrontZ
1541     (command->ConvertToDimensionedDouble(G4St    1338     (command->ConvertToDimensionedDouble(G4String(originZ + ' ' + unitS)));
1542     vp.SetDisplayLightFrontT                     1339     vp.SetDisplayLightFrontT
1543     (command->ConvertToDimensionedDouble(G4St    1340     (command->ConvertToDimensionedDouble(G4String(originT + ' ' + unitT)));
1544     vp.SetDisplayLightFrontRed(red);             1341     vp.SetDisplayLightFrontRed(red);
1545     vp.SetDisplayLightFrontGreen(green);         1342     vp.SetDisplayLightFrontGreen(green);
1546     vp.SetDisplayLightFrontBlue(blue);           1343     vp.SetDisplayLightFrontBlue(blue);
1547     if (verbosity >= G4VisManager::confirmati    1344     if (verbosity >= G4VisManager::confirmations) {
1548       G4cout << "Display light front flag set    1345       G4cout << "Display light front flag set: "
1549       << vp                                      1346       << vp
1550       << G4endl;                                 1347       << G4endl;
1551     }                                            1348     }
1552   }                                              1349   }
1553                                                  1350 
1554   else if (command == fpCommandTimeWindowEndT    1351   else if (command == fpCommandTimeWindowEndTime)
1555   {                                              1352   {
1556     G4String end_time_string, end_time_unit,     1353     G4String end_time_string, end_time_unit,
1557     time_range_string, time_range_unit;          1354     time_range_string, time_range_unit;
1558     std::istringstream iss(newValue);            1355     std::istringstream iss(newValue);
1559     iss >> end_time_string >> end_time_unit      1356     iss >> end_time_string >> end_time_unit
1560     >> time_range_string >> time_range_unit;     1357     >> time_range_string >> time_range_unit;
1561     vp.SetEndTime                                1358     vp.SetEndTime
1562     (command->ConvertToDimensionedDouble         1359     (command->ConvertToDimensionedDouble
1563      (G4String(end_time_string + ' ' + end_ti    1360      (G4String(end_time_string + ' ' + end_time_unit)));
1564     G4double timeRange = command->ConvertToDi    1361     G4double timeRange = command->ConvertToDimensionedDouble
1565     (G4String(time_range_string + ' ' + time_    1362     (G4String(time_range_string + ' ' + time_range_unit));
1566     if (timeRange > 0.) {                        1363     if (timeRange > 0.) {
1567       vp.SetStartTime                            1364       vp.SetStartTime
1568       (vp.GetEndTime() - timeRange);             1365       (vp.GetEndTime() - timeRange);
1569     }                                            1366     }
1570     if (verbosity >= G4VisManager::confirmati    1367     if (verbosity >= G4VisManager::confirmations) {
1571       G4cout                                     1368       G4cout
1572       << "Time window start time: " << vp.Get    1369       << "Time window start time: " << vp.GetStartTime()/ns << " ns"
1573       << ", time window end time: " << vp.Get    1370       << ", time window end time: " << vp.GetEndTime()/ns << " ns";
1574       if (timeRange > 0.) {                      1371       if (timeRange > 0.) {
1575         G4cout << "\n  (time range: " << time    1372         G4cout << "\n  (time range: " << timeRange/ns << " ns)";
1576       }                                          1373       }
1577       G4cout << G4endl;                          1374       G4cout << G4endl;
1578     }                                            1375     }
1579   }                                              1376   }
1580                                                  1377 
1581   else if (command == fpCommandTimeWindowFade    1378   else if (command == fpCommandTimeWindowFadeFactor) {
1582     vp.SetFadeFactor(command->ConvertToDouble    1379     vp.SetFadeFactor(command->ConvertToDouble(newValue));
1583     if (verbosity >= G4VisManager::confirmati    1380     if (verbosity >= G4VisManager::confirmations) {
1584       G4cout << "Time window fade factor chan    1381       G4cout << "Time window fade factor changed to " << vp.GetFadeFactor()
1585       << G4endl;                                 1382       << G4endl;
1586     }                                            1383     }
1587   }                                              1384   }
1588                                                  1385 
1589   else if (command == fpCommandTimeWindowStar    1386   else if (command == fpCommandTimeWindowStartTime)
1590   {                                              1387   {
1591     G4String start_time_string, start_time_un    1388     G4String start_time_string, start_time_unit,
1592     time_range_string, time_range_unit;          1389     time_range_string, time_range_unit;
1593     std::istringstream iss(newValue);            1390     std::istringstream iss(newValue);
1594     iss >> start_time_string >> start_time_un    1391     iss >> start_time_string >> start_time_unit
1595     >> time_range_string >> time_range_unit;     1392     >> time_range_string >> time_range_unit;
1596     vp.SetStartTime                              1393     vp.SetStartTime
1597     (command->ConvertToDimensionedDouble         1394     (command->ConvertToDimensionedDouble
1598      (G4String(start_time_string + ' ' + star    1395      (G4String(start_time_string + ' ' + start_time_unit)));
1599     G4double timeRange = command->ConvertToDi    1396     G4double timeRange = command->ConvertToDimensionedDouble
1600     (G4String(time_range_string + ' ' + time_    1397     (G4String(time_range_string + ' ' + time_range_unit));
1601     if (timeRange > 0.) {                        1398     if (timeRange > 0.) {
1602       vp.SetEndTime                              1399       vp.SetEndTime
1603       (vp.GetStartTime() + timeRange);           1400       (vp.GetStartTime() + timeRange);
1604     }                                            1401     }
1605     if (verbosity >= G4VisManager::confirmati    1402     if (verbosity >= G4VisManager::confirmations) {
1606       G4cout                                     1403       G4cout
1607       << "Time window start time: " << vp.Get    1404       << "Time window start time: " << vp.GetStartTime()/ns << " ns"
1608       << ", time window end time: " << vp.Get    1405       << ", time window end time: " << vp.GetEndTime()/ns << " ns";
1609       if (timeRange > 0.) {                      1406       if (timeRange > 0.) {
1610         G4cout << "\n  (time range: " << time    1407         G4cout << "\n  (time range: " << timeRange/ns << " ns)";
1611       }                                          1408       }
1612       G4cout << G4endl;                          1409       G4cout << G4endl;
1613     }                                            1410     }
1614   }                                              1411   }
1615                                                  1412 
1616   else {                                         1413   else {
1617     if (verbosity >= G4VisManager::errors) {     1414     if (verbosity >= G4VisManager::errors) {
1618       G4warn <<                               << 1415       G4cerr <<
1619       "ERROR: G4VisCommandsViewerSet::SetNewV << 1416   "ERROR: G4VisCommandsViewerSet::SetNewValue: unrecognised command."
1620       << G4endl;                              << 1417        << G4endl;
1621     }                                            1418     }
1622     return;                                      1419     return;
1623   }                                              1420   }
1624                                                  1421 
1625   SetViewParameters(currentViewer,vp);           1422   SetViewParameters(currentViewer,vp);
1626 }                                                1423 }
1627                                                  1424