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.7.p1)


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