source: trunk/source/visualization/management/src/G4VisCommandsViewerSet.cc@ 1354

Last change on this file since 1354 was 1346, checked in by garnier, 15 years ago

before tag

  • Property svn:mime-type set to text/cpp
File size: 42.1 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id: G4VisCommandsViewerSet.cc,v 1.53 2010/11/05 15:57:20 allison Exp $
28// GEANT4 tag $Name: $
29
30// /vis/viewer/set commands - John Allison 16th May 2000
31
32#include "G4VisCommandsViewerSet.hh"
33
34#include "G4UIcommand.hh"
35#include "G4UIcmdWithAString.hh"
36#include "G4UIcmdWithABool.hh"
37#include "G4UIcmdWithAnInteger.hh"
38#include "G4UIcmdWithADouble.hh"
39#include "G4UIcmdWith3VectorAndUnit.hh"
40#include "G4UnitsTable.hh"
41#include "G4VisManager.hh"
42#include "G4Polyhedron.hh"
43
44#include <sstream>
45#include <cctype>
46
47G4VisCommandsViewerSet::G4VisCommandsViewerSet ():
48 fLightsVector (G4ThreeVector(1.,1.,1.)),
49 fUpVector (G4ThreeVector(0.,1.,0.)),
50 fViewpointVector (G4ThreeVector(0.,0.,1.))
51{
52 G4bool omitable;
53 G4UIparameter* parameter;
54
55 fpCommandAll = new G4UIcmdWithAString ("/vis/viewer/set/all",this);
56 fpCommandAll->SetGuidance
57 ("Copies view parameters.");
58 fpCommandAll->SetGuidance
59 ("Copies view parameters (except the autoRefresh status) from"
60 "\nfrom-viewer to current viewer.");
61 fpCommandAll->SetParameterName ("from-viewer-name",omitable = false);
62
63 fpCommandAutoRefresh = new G4UIcmdWithABool
64 ("/vis/viewer/set/autoRefresh",this);
65 fpCommandAutoRefresh->SetGuidance("Sets auto-refresh.");
66 fpCommandAutoRefresh->SetGuidance
67 ("If true, view is automatically refreshed after a change of"
68 "\nview parameters.");
69 fpCommandAutoRefresh->SetParameterName("auto-refresh",omitable = true);
70 fpCommandAutoRefresh->SetDefaultValue(true);
71
72 fpCommandAuxEdge = new G4UIcmdWithABool
73 ("/vis/viewer/set/auxiliaryEdge",this);
74 fpCommandAuxEdge->SetGuidance("Sets visibility of auxiliary edges");
75 fpCommandAuxEdge->SetGuidance
76 ("Auxiliary edges, i.e., those that are part of a curved surface,"
77 "\nsometimes called soft edges, become visible/invisible.");
78 fpCommandAuxEdge->SetParameterName("edge",omitable = true);
79 fpCommandAuxEdge->SetDefaultValue(true);
80
81 fpCommandBackground = new G4UIcommand
82 ("/vis/viewer/set/background",this);
83 fpCommandBackground->SetGuidance
84 ("Set background colour and transparency (default black and opaque).");
85 fpCommandBackground->SetGuidance
86 ("Accepts (a) RGB triplet. e.g., \".3 .4 .5\", or"
87 "\n(b) string such as \"white\", \"black\", \"grey\", \"red\"..."
88 "\n(c) an additional number for opacity, e.g., \".3 .4 .5 .6\""
89 "\n or \"grey ! ! .6\" (note \"!\"'s for unused green and blue parameters),"
90 "\n e.g. \"! ! ! 0.\" for a transparent background.");
91 parameter = new G4UIparameter("red_or_string", 's', omitable = true);
92 parameter -> SetDefaultValue ("0.");
93 fpCommandBackground -> SetParameter (parameter);
94 parameter = new G4UIparameter("green", 'd', omitable = true);
95 parameter -> SetDefaultValue (0.);
96 fpCommandBackground -> SetParameter (parameter);
97 parameter = new G4UIparameter ("blue", 'd', omitable = true);
98 parameter -> SetDefaultValue (0.);
99 fpCommandBackground -> SetParameter (parameter);
100 parameter = new G4UIparameter ("opacity", 'd', omitable = true);
101 parameter -> SetDefaultValue (1.);
102 fpCommandBackground -> SetParameter (parameter);
103
104 fpCommandCulling = new G4UIcommand("/vis/viewer/set/culling",this);
105 fpCommandCulling->SetGuidance ("Set culling options.");
106 fpCommandCulling->SetGuidance
107 ("\"global\": enables/disables all other culling options.");
108 fpCommandCulling->SetGuidance
109 ("\"coveredDaughters\": culls, i.e., eliminates, volumes that would not"
110 "\nbe seen because covered by ancester volumes in surface drawing mode,"
111 "\nand then only if the ancesters are visible and opaque, and then only"
112 "\nif no sections or cutaways are in operation. Intended solely to"
113 "\nimprove the speed of rendering visible volumes.");
114 fpCommandCulling->SetGuidance
115 ("\"invisible\": culls objects with the invisible attribute set.");
116 fpCommandCulling->SetGuidance
117 ("\"density\": culls volumes with density lower than threshold. Useful"
118 "\nfor eliminating \"container volumes\" with no physical correspondence,"
119 "\nwhose material is usually air. If this is selected, provide threshold"
120 "\ndensity and unit (g/cm3 mg/cm3 or kg/m3)."
121 );
122 parameter = new G4UIparameter("culling-option",'s',omitable = false);
123 parameter->SetParameterCandidates
124 ("global coveredDaughters invisible density");
125 fpCommandCulling->SetParameter(parameter);
126 parameter = new G4UIparameter("action",'b',omitable = true);
127 parameter->SetDefaultValue(1);
128 fpCommandCulling->SetParameter(parameter);
129 parameter = new G4UIparameter("density-threshold",'d',omitable = true);
130 parameter->SetDefaultValue("0.01");
131 fpCommandCulling->SetParameter(parameter);
132 parameter = new G4UIparameter("unit",'s',omitable = true);
133 parameter->SetParameterCandidates ("g/cm3, mg/cm3 kg/m3");
134 parameter->SetDefaultValue("g/cm3");
135 fpCommandCulling->SetParameter(parameter);
136
137 fpCommandCutawayMode =
138 new G4UIcmdWithAString ("/vis/viewer/set/cutawayMode", this);
139 fpCommandCutawayMode->SetGuidance
140 ("Sets cutaway mode - add (union) or multiply (intersection).");
141 fpCommandCutawayMode->SetParameterName ("cutaway-mode",omitable = false);
142 fpCommandCutawayMode->SetCandidates ("add union multiply intersection");
143 fpCommandCutawayMode->SetDefaultValue("union");
144
145 fpCommandDefaultColour = new G4UIcommand
146 ("/vis/viewer/set/defaultColour",this);
147 fpCommandDefaultColour->SetGuidance
148 ("Set defaultColour colour and transparency (default white and opaque).");
149 fpCommandDefaultColour->SetGuidance
150 ("Accepts (a) RGB triplet. e.g., \".3 .4 .5\", or"
151 "\n(b) string such as \"white\", \"black\", \"grey\", \"red\"..."
152 "\n(c) an additional number for opacity, e.g., \".3 .4 .5 .6\""
153 "\n or \"grey ! ! .6\" (note \"!\"'s for unused green and blue parameters),"
154 "\n e.g. \"! ! ! 0.\" for a transparent colour.");
155 parameter = new G4UIparameter("red_or_string", 's', omitable = true);
156 parameter -> SetDefaultValue ("1.");
157 fpCommandDefaultColour -> SetParameter (parameter);
158 parameter = new G4UIparameter("green", 'd', omitable = true);
159 parameter -> SetDefaultValue (1.);
160 fpCommandDefaultColour -> SetParameter (parameter);
161 parameter = new G4UIparameter ("blue", 'd', omitable = true);
162 parameter -> SetDefaultValue (1.);
163 fpCommandDefaultColour -> SetParameter (parameter);
164 parameter = new G4UIparameter ("opacity", 'd', omitable = true);
165 parameter -> SetDefaultValue (1.);
166 fpCommandDefaultColour -> SetParameter (parameter);
167
168 fpCommandDefaultTextColour = new G4UIcommand
169 ("/vis/viewer/set/defaultTextColour",this);
170 fpCommandDefaultTextColour->SetGuidance
171 ("Set defaultTextColour colour and transparency (default white and opaque).");
172 fpCommandDefaultTextColour->SetGuidance
173 ("Accepts (a) RGB triplet. e.g., \".3 .4 .5\", or"
174 "\n(b) string such as \"white\", \"black\", \"grey\", \"red\"..."
175 "\n(c) an additional number for opacity, e.g., \".3 .4 .5 .6\""
176 "\n or \"grey ! ! .6\" (note \"!\"'s for unused green and blue parameters),"
177 "\n e.g. \"! ! ! 0.\" for a transparent colour.");
178 parameter = new G4UIparameter("red_or_string", 's', omitable = true);
179 parameter -> SetDefaultValue ("1.");
180 fpCommandDefaultTextColour -> SetParameter (parameter);
181 parameter = new G4UIparameter("green", 'd', omitable = true);
182 parameter -> SetDefaultValue (1.);
183 fpCommandDefaultTextColour -> SetParameter (parameter);
184 parameter = new G4UIparameter ("blue", 'd', omitable = true);
185 parameter -> SetDefaultValue (1.);
186 fpCommandDefaultTextColour -> SetParameter (parameter);
187 parameter = new G4UIparameter ("opacity", 'd', omitable = true);
188 parameter -> SetDefaultValue (1.);
189 fpCommandDefaultTextColour -> SetParameter (parameter);
190
191 fpCommandEdge = new G4UIcmdWithABool("/vis/viewer/set/edge",this);
192 fpCommandEdge->SetGuidance
193 ("Edges become visible/invisible in surface mode.");
194 fpCommandEdge->SetParameterName("edge",omitable = true);
195 fpCommandEdge->SetDefaultValue(true);
196
197 fpCommandExplodeFactor = new G4UIcommand
198 ("/vis/viewer/set/explodeFactor", this);
199 fpCommandExplodeFactor->SetGuidance
200 ("Moves top-level drawn volumes by this factor from this centre.");
201 parameter = new G4UIparameter("explodeFactor", 'd', omitable=true);
202 parameter->SetParameterRange("explodeFactor>=1.");
203 parameter->SetDefaultValue(1.);
204 fpCommandExplodeFactor->SetParameter(parameter);
205 parameter = new G4UIparameter("x",'d',omitable = true);
206 parameter->SetDefaultValue (0);
207 parameter->SetGuidance ("Coordinate of explode centre.");
208 fpCommandExplodeFactor->SetParameter(parameter);
209 parameter = new G4UIparameter("y",'d',omitable = true);
210 parameter->SetDefaultValue (0);
211 parameter->SetGuidance ("Coordinate of explode centre.");
212 fpCommandExplodeFactor->SetParameter(parameter);
213 parameter = new G4UIparameter("z",'d',omitable = true);
214 parameter->SetDefaultValue (0);
215 parameter->SetGuidance ("Coordinate of explode centre.");
216 fpCommandExplodeFactor->SetParameter(parameter);
217 parameter = new G4UIparameter("unit",'s',omitable = true);
218 parameter->SetDefaultValue ("m");
219 parameter->SetGuidance ("Unit of explode centre.");
220 fpCommandExplodeFactor->SetParameter(parameter);
221
222 fpCommandGlobalLineWidthScale = new G4UIcmdWithADouble
223 ("/vis/viewer/set/globalLineWidthScale", this);
224 fpCommandGlobalLineWidthScale->SetGuidance
225 ("Multiplies line widths by this factor.");
226 fpCommandGlobalLineWidthScale->
227 SetParameterName("scale-factor", omitable=true);
228 fpCommandGlobalLineWidthScale->SetDefaultValue(1.);
229
230 fpCommandGlobalMarkerScale = new G4UIcmdWithADouble
231 ("/vis/viewer/set/globalMarkerScale", this);
232 fpCommandGlobalMarkerScale->SetGuidance
233 ("Multiplies marker sizes by this factor.");
234 fpCommandGlobalMarkerScale->
235 SetParameterName("scale-factor", omitable=true);
236 fpCommandGlobalMarkerScale->SetDefaultValue(1.);
237
238 fpCommandHiddenEdge =
239 new G4UIcmdWithABool("/vis/viewer/set/hiddenEdge",this);
240 fpCommandHiddenEdge->SetGuidance
241 ("Edges become hidden/seen in wireframe or surface mode.");
242 fpCommandHiddenEdge->SetParameterName("hidden-edge",omitable = true);
243 fpCommandHiddenEdge->SetDefaultValue(true);
244
245 fpCommandHiddenMarker =
246 new G4UIcmdWithABool("/vis/viewer/set/hiddenMarker",this);
247 fpCommandHiddenMarker->SetGuidance
248 ("If true, closer objects hide markers. Otherwise, markers always show.");
249 fpCommandHiddenMarker->SetParameterName("hidden-marker",omitable = true);
250 fpCommandHiddenMarker->SetDefaultValue(true);
251
252 fpCommandLightsMove = new G4UIcmdWithAString
253 ("/vis/viewer/set/lightsMove",this);
254 fpCommandLightsMove->SetGuidance
255 ("Lights move with camera or with object");
256 fpCommandLightsMove->SetParameterName("lightsMove",omitable = false);
257 fpCommandLightsMove->SetCandidates
258 ("cam camera with-camera obj object with-object");
259
260 fpCommandLightsThetaPhi = new G4UIcommand
261 ("/vis/viewer/set/lightsThetaPhi", this);
262 fpCommandLightsThetaPhi->SetGuidance
263 ("Set direction from target to lights.");
264 parameter = new G4UIparameter("theta", 'd', omitable = true);
265 parameter -> SetDefaultValue(60.);
266 fpCommandLightsThetaPhi -> SetParameter (parameter);
267 parameter = new G4UIparameter("phi", 'd', omitable = true);
268 parameter -> SetDefaultValue(45.);
269 fpCommandLightsThetaPhi -> SetParameter (parameter);
270 parameter = new G4UIparameter ("unit", 's', omitable = true);
271 parameter -> SetDefaultValue ("deg");
272 fpCommandLightsThetaPhi -> SetParameter (parameter);
273
274 fpCommandLightsVector = new G4UIcommand
275 ("/vis/viewer/set/lightsVector", this);
276 fpCommandLightsVector->SetGuidance
277 ("Set direction from target to lights.");
278 parameter = new G4UIparameter("x", 'd', omitable = true);
279 parameter -> SetDefaultValue (1);
280 fpCommandLightsVector -> SetParameter (parameter);
281 parameter = new G4UIparameter("y", 'd', omitable = true);
282 parameter -> SetDefaultValue (1);
283 fpCommandLightsVector -> SetParameter (parameter);
284 parameter = new G4UIparameter ("z", 'd', omitable = true);
285 parameter -> SetDefaultValue (1);
286 fpCommandLightsVector -> SetParameter (parameter);
287
288 fpCommandLineSegments = new G4UIcmdWithAnInteger
289 ("/vis/viewer/set/lineSegmentsPerCircle",this);
290 fpCommandLineSegments->SetGuidance
291 ("Set number of sides per circle for polygon/polyhedron drawing.");
292 fpCommandLineSegments->SetGuidance
293 ("Refers to graphical representation of objects with curved lines/surfaces.");
294 fpCommandLineSegments->SetParameterName("line-segments",omitable = true);
295 fpCommandLineSegments->SetDefaultValue(24);
296
297 fpCommandPicking = new G4UIcmdWithABool
298 ("/vis/viewer/set/picking",this);
299 fpCommandPicking->SetGuidance("Sets picking, if available.");
300 fpCommandPicking->SetGuidance
301 ("If true, view is set up for picking, if available."
302 "\nFor required actions, watch for instructions for viewer.");
303 fpCommandPicking->SetParameterName("picking",omitable = true);
304 fpCommandPicking->SetDefaultValue(true);
305
306 fpCommandProjection = new G4UIcommand("/vis/viewer/set/projection",this);
307 fpCommandProjection->SetGuidance
308 ("Orthogonal or perspective projection.");
309 parameter = new G4UIparameter("projection",'s',omitable = true);
310 parameter->SetParameterCandidates("o orthogonal p perspective");
311 parameter->SetDefaultValue("orthogonal");
312 fpCommandProjection->SetParameter(parameter);
313 parameter = new G4UIparameter("field-half-angle",'d',omitable = true);
314 parameter->SetDefaultValue(30.);
315 //parameter->SetCurrentAsDefault(true);
316 fpCommandProjection->SetParameter(parameter);
317 parameter = new G4UIparameter("unit",'s',omitable = true);
318 parameter->SetDefaultValue("deg");
319 //parameter->SetCurrentAsDefault(true);
320 fpCommandProjection->SetParameter(parameter);
321
322 fpCommandSectionPlane = new G4UIcommand("/vis/viewer/set/sectionPlane",this);
323 fpCommandSectionPlane -> SetGuidance
324 ("Set plane for drawing section (DCUT).");
325 fpCommandSectionPlane -> SetGuidance
326 ("E.g., for a y-z plane at x = 1 cm:"
327 "\n\"/vis/viewer/set/sectionPlane on 1 0 0 cm 1 0 0\"."
328 "\nTo turn off: /vis/viewer/set/sectionPlane off");
329 parameter = new G4UIparameter("Selector",'c',true);
330 parameter -> SetDefaultValue ("on");
331 fpCommandSectionPlane->SetParameter(parameter);
332 parameter = new G4UIparameter("x",'d',omitable = true);
333 parameter -> SetDefaultValue (0);
334 parameter -> SetGuidance ("Coordinate of point on the plane.");
335 fpCommandSectionPlane->SetParameter(parameter);
336 parameter = new G4UIparameter("y",'d',omitable = true);
337 parameter -> SetDefaultValue (0);
338 parameter -> SetGuidance ("Coordinate of point on the plane.");
339 fpCommandSectionPlane->SetParameter(parameter);
340 parameter = new G4UIparameter("z",'d',omitable = true);
341 parameter -> SetDefaultValue (0);
342 parameter -> SetGuidance ("Coordinate of point on the plane.");
343 fpCommandSectionPlane->SetParameter(parameter);
344 parameter = new G4UIparameter("unit",'s',omitable = true);
345 parameter -> SetDefaultValue ("m");
346 parameter -> SetGuidance ("Unit of point on the plane.");
347 fpCommandSectionPlane->SetParameter(parameter);
348 parameter = new G4UIparameter("nx",'d',omitable = true);
349 parameter -> SetDefaultValue (1);
350 parameter -> SetGuidance ("Component of plane normal.");
351 fpCommandSectionPlane->SetParameter(parameter);
352 parameter = new G4UIparameter("ny",'d',omitable = true);
353 parameter -> SetDefaultValue (0);
354 parameter -> SetGuidance ("Component of plane normal.");
355 fpCommandSectionPlane->SetParameter(parameter);
356 parameter = new G4UIparameter("nz",'d',omitable = true);
357 parameter -> SetDefaultValue (0);
358 parameter -> SetGuidance ("Component of plane normal.");
359 fpCommandSectionPlane->SetParameter(parameter);
360
361 fpCommandStyle = new G4UIcmdWithAString ("/vis/viewer/set/style",this);
362 fpCommandStyle->SetGuidance
363 ("Set style of drawing - w[ireframe] or s[urface].");
364 fpCommandStyle->SetGuidance
365 ("(Hidden line drawing is controlled by \"/vis/viewer/set/hiddenEdge\".)");
366 fpCommandStyle->SetParameterName ("style",omitable = false);
367
368 fpCommandTargetPoint = new G4UIcmdWith3VectorAndUnit
369 ("/vis/viewer/set/targetPoint", this);
370 fpCommandTargetPoint->SetGuidance
371 ("Set target point.");
372 fpCommandTargetPoint->SetGuidance
373 ("This sets the \"Current Target Point\" relative to the \"Standard");
374 fpCommandTargetPoint->SetGuidance
375 ("Target Point\" so that the actual target point is as requested.");
376 fpCommandTargetPoint->SetGuidance
377 ("(See G4ViewParameters.hh for an explanation of target points.)");
378 fpCommandTargetPoint->SetParameterName("x", "y", "z", omitable = false);
379 fpCommandTargetPoint->SetUnitCategory("Length");
380
381 fpCommandUpThetaPhi = new G4UIcommand
382 ("/vis/viewer/set/upThetaPhi", this);
383 fpCommandUpThetaPhi -> SetGuidance ("Set up vector.");
384 fpCommandUpThetaPhi -> SetGuidance
385 ("Viewer will attempt always to show this direction upwards.");
386 parameter = new G4UIparameter("theta", 'd', omitable = true);
387 parameter -> SetDefaultValue (90.);
388 fpCommandUpThetaPhi -> SetParameter (parameter);
389 parameter = new G4UIparameter("phi", 'd', omitable = true);
390 parameter -> SetDefaultValue (90.);
391 fpCommandUpThetaPhi -> SetParameter (parameter);
392 parameter = new G4UIparameter ("unit", 's', omitable = true);
393 parameter -> SetDefaultValue ("deg");
394 fpCommandUpThetaPhi -> SetParameter (parameter);
395
396 fpCommandUpVector = new G4UIcommand
397 ("/vis/viewer/set/upVector", this);
398 fpCommandUpVector -> SetGuidance ("Set up vector.");
399 fpCommandUpVector -> SetGuidance
400 ("Viewer will attempt always to show this direction upwards.");
401 parameter = new G4UIparameter("x", 'd', omitable = true);
402 parameter -> SetDefaultValue (0.);
403 fpCommandUpVector -> SetParameter (parameter);
404 parameter = new G4UIparameter("y", 'd', omitable = true);
405 parameter -> SetDefaultValue (1.);
406 fpCommandUpVector -> SetParameter (parameter);
407 parameter = new G4UIparameter ("z", 'd', omitable = true);
408 parameter -> SetDefaultValue (0.);
409 fpCommandUpVector -> SetParameter (parameter);
410
411 fpCommandViewpointThetaPhi = new G4UIcommand
412 ("/vis/viewer/set/viewpointThetaPhi", this);
413 fpCommandViewpointThetaPhi -> SetGuidance
414 ("Set direction from target to camera.");
415 fpCommandViewpointThetaPhi -> SetGuidance
416 ("Also changes lightpoint direction if lights are set to move with camera.");
417 parameter = new G4UIparameter("theta", 'd', omitable = true);
418 parameter -> SetDefaultValue (60.);
419 fpCommandViewpointThetaPhi -> SetParameter (parameter);
420 parameter = new G4UIparameter("phi", 'd', omitable = true);
421 parameter -> SetDefaultValue (45.);
422 fpCommandViewpointThetaPhi -> SetParameter (parameter);
423 parameter = new G4UIparameter ("unit", 's', omitable = true);
424 parameter -> SetDefaultValue ("deg");
425 fpCommandViewpointThetaPhi -> SetParameter (parameter);
426
427 fpCommandViewpointVector = new G4UIcommand
428 ("/vis/viewer/set/viewpointVector", this);
429 fpCommandViewpointVector -> SetGuidance
430 ("Set direction from target to camera.");
431 fpCommandViewpointVector -> SetGuidance
432 ("Also changes lightpoint direction if lights are set to move with camera.");
433 parameter = new G4UIparameter("x", 'd', omitable = true);
434 parameter -> SetDefaultValue (1.);
435 fpCommandViewpointVector -> SetParameter (parameter);
436 parameter = new G4UIparameter("y", 'd', omitable = true);
437 parameter -> SetDefaultValue (1.);
438 fpCommandViewpointVector -> SetParameter (parameter);
439 parameter = new G4UIparameter ("z", 'd', omitable = true);
440 parameter -> SetDefaultValue (1.);
441 fpCommandViewpointVector -> SetParameter (parameter);
442}
443
444G4VisCommandsViewerSet::~G4VisCommandsViewerSet() {
445 delete fpCommandAll;
446 delete fpCommandAuxEdge;
447 delete fpCommandAutoRefresh;
448 delete fpCommandBackground;
449 delete fpCommandCulling;
450 delete fpCommandCutawayMode;
451 delete fpCommandDefaultColour;
452 delete fpCommandDefaultTextColour;
453 delete fpCommandEdge;
454 delete fpCommandExplodeFactor;
455 delete fpCommandGlobalLineWidthScale;
456 delete fpCommandGlobalMarkerScale;
457 delete fpCommandHiddenEdge;
458 delete fpCommandHiddenMarker;
459 delete fpCommandLineSegments;
460 delete fpCommandLightsMove;
461 delete fpCommandLightsThetaPhi;
462 delete fpCommandLightsVector;
463 delete fpCommandPicking;
464 delete fpCommandProjection;
465 delete fpCommandSectionPlane;
466 delete fpCommandStyle;
467 delete fpCommandTargetPoint;
468 delete fpCommandUpThetaPhi;
469 delete fpCommandUpVector;
470 delete fpCommandViewpointThetaPhi;
471 delete fpCommandViewpointVector;
472}
473
474G4String G4VisCommandsViewerSet::GetCurrentValue(G4UIcommand*) {
475 return "";
476}
477
478void G4VisCommandsViewerSet::SetNewValue
479(G4UIcommand* command,G4String newValue) {
480
481 G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
482
483 G4VViewer* currentViewer = fpVisManager->GetCurrentViewer();
484 if (!currentViewer) {
485 if (verbosity >= G4VisManager::errors) {
486 G4cout <<
487 "ERROR: G4VisCommandsViewerSet::SetNewValue: no current viewer."
488 << G4endl;
489 }
490 return;
491 }
492
493 G4ViewParameters vp = currentViewer->GetViewParameters();
494
495 if (command == fpCommandAll) {
496 G4VViewer* fromViewer = fpVisManager->GetViewer(newValue);
497 if (!fromViewer) {
498 if (verbosity >= G4VisManager::errors) {
499 G4cout <<
500 "ERROR: G4VisCommandsViewerSet::SetNewValue: all:"
501 "\n unrecognised from-viewer."
502 << G4endl;
503 }
504 return;
505 }
506 if (fromViewer == currentViewer) {
507 if (verbosity >= G4VisManager::warnings) {
508 G4cout <<
509 "WARNING: G4VisCommandsViewerSet::SetNewValue: all:"
510 "\n from-viewer and current viewer are identical."
511 << G4endl;
512 }
513 return;
514 }
515 // Copy view parameters except for autoRefresh...
516 G4bool currentAutoRefresh =
517 currentViewer->GetViewParameters().IsAutoRefresh();
518 vp = fromViewer->GetViewParameters();
519 vp.SetAutoRefresh(currentAutoRefresh);
520 if (verbosity >= G4VisManager::confirmations) {
521 G4cout << "View parameters of viewer \"" << currentViewer->GetName()
522 << "\"\n set to those of viewer \"" << fromViewer->GetName()
523 << "\"."
524 << G4endl;
525 }
526 }
527
528 else if (command == fpCommandAutoRefresh) {
529 G4bool autoRefresh = G4UIcommand::ConvertToBool(newValue);
530 vp.SetAutoRefresh(autoRefresh);
531 if (verbosity >= G4VisManager::confirmations) {
532 G4cout << "Views will ";
533 if (!vp.IsAutoRefresh()) G4cout << "not ";
534 G4cout << "be automatically refreshed after a change of view parameters."
535 << G4endl;
536 }
537 if (!vp.IsAutoRefresh()) {
538 currentViewer->SetViewParameters(vp);
539 return; // Avoid a refresh id auto-refresh has been set to off...
540 } // ...otherwise take normal action.
541 }
542
543 else if (command == fpCommandAuxEdge) {
544 vp.SetAuxEdgeVisible(G4UIcommand::ConvertToBool(newValue));
545 if (verbosity >= G4VisManager::confirmations) {
546 G4cout << "Auxiliary edges will ";
547 if (!vp.IsAuxEdgeVisible()) G4cout << "not ";
548 G4cout << "be visible." << G4endl;
549 }
550 }
551
552 else if (command == fpCommandBackground) {
553 G4String redOrString;
554 G4double green, blue, opacity;
555 std::istringstream iss(newValue);
556 iss >> redOrString >> green >> blue >> opacity;
557 G4Colour colour(0.,0.,0.); // Default black and opaque.
558 const size_t iPos0 = 0;
559 if (std::isalpha(redOrString[iPos0])) {
560 G4Colour::GetColour(redOrString, colour); // Remains default (black) if
561 // not found.
562 } else {
563 colour = G4Colour(G4UIcommand::ConvertTo3Vector(newValue));
564 }
565 colour = G4Colour(colour.GetRed(), colour.GetGreen(), colour.GetBlue(), opacity);
566 vp.SetBackgroundColour(colour);
567 if (verbosity >= G4VisManager::confirmations) {
568 G4cout << "Background colour "
569 << vp.GetBackgroundColour()
570 << " requested."
571 << G4endl;
572 }
573 }
574
575 else if (command == fpCommandCulling) {
576 G4String cullingOption, stringFlag, unit;
577 G4double density;
578 std::istringstream is (newValue);
579 is >> cullingOption >> stringFlag >> density >> unit;
580 G4bool boolFlag = G4UIcommand::ConvertToBool(stringFlag);
581 if (cullingOption == "global") {
582 vp.SetCulling(boolFlag);
583 if (verbosity >= G4VisManager::confirmations) {
584 G4cout <<
585 "G4VisCommandsViewerSet::SetNewValue: culling: global culling flag"
586 " set to " << G4UIcommand::ConvertToString(boolFlag) <<
587 ".\n Does not change specific culling flags."
588 << G4endl;
589 }
590 }
591 else if (cullingOption == "coveredDaughters") {
592 vp.SetCullingCovered(boolFlag);
593 if (verbosity >= G4VisManager::confirmations) {
594 G4cout <<
595 "G4VisCommandsViewerSet::SetNewValue: culling: culling covered"
596 "\n daughters flag set to "
597 << G4UIcommand::ConvertToString(boolFlag) <<
598 ". Daughters covered by opaque mothers"
599 "\n will be culled, i.e., not drawn, if this flag is true."
600 "\n Note: this is only effective in surface drawing style,"
601 "\n and then only if the volumes are visible and opaque, and then"
602 "\n only if no sections or cutaways are in operation."
603 << G4endl;
604 }
605 }
606 else if (cullingOption == "invisible") {
607 vp.SetCullingInvisible(boolFlag);
608 if (verbosity >= G4VisManager::confirmations) {
609 G4cout <<
610 "G4VisCommandsViewerSet::SetNewValue: culling: culling invisible"
611 "\n flag set to "
612 << boolFlag << G4UIcommand::ConvertToString(boolFlag) <<
613 ". Volumes marked invisible will be culled,"
614 "\n i.e., not drawn, if this flag is true."
615 << G4endl;
616 }
617 }
618 else if (cullingOption == "density") {
619 vp.SetDensityCulling(boolFlag);
620 if (boolFlag) {
621 density *= G4UnitDefinition::GetValueOf(unit);
622 vp.SetVisibleDensity(density);
623 }
624 else {
625 density = vp.GetVisibleDensity();
626 }
627 if (verbosity >= G4VisManager::confirmations) {
628 G4cout <<
629 "G4VisCommandsViewerSet::SetNewValue: culling: culling by density"
630 "\n flag set to " << G4UIcommand::ConvertToString(boolFlag) <<
631 ". Volumes with density less than " <<
632 G4BestUnit(density,"Volumic Mass") <<
633 "\n will be culled, i.e., not drawn, if this flag is true."
634 << G4endl;
635 }
636 }
637 else {
638 if (verbosity >= G4VisManager::errors) {
639 G4cout <<
640 "ERROR: G4VisCommandsViewerSet::SetNewValue: culling:"
641 "\n option not recognised."
642 << G4endl;
643 }
644 }
645 }
646
647 else if (command == fpCommandCutawayMode) {
648 if (newValue == "add" || newValue == "union")
649 vp.SetCutawayMode(G4ViewParameters::cutawayUnion);
650 if (newValue == "multiply" || newValue == "intersection")
651 vp.SetCutawayMode(G4ViewParameters::cutawayIntersection);
652
653 if (verbosity >= G4VisManager::confirmations) {
654 G4cout << "Cutaway mode set to ";
655 if (vp.GetCutawayMode() == G4ViewParameters::cutawayUnion)
656 G4cout << "cutawayUnion";
657 if (vp.GetCutawayMode() == G4ViewParameters::cutawayIntersection)
658 G4cout << "cutawayIntersection";
659 G4cout << G4endl;
660 }
661 }
662
663 else if (command == fpCommandDefaultColour) {
664 G4String redOrString;
665 G4double green, blue, opacity;
666 std::istringstream iss(newValue);
667 iss >> redOrString >> green >> blue >> opacity;
668 G4Colour colour(1.,1.,1.); // Default white and opaque.
669 const size_t iPos0 = 0;
670 if (std::isalpha(redOrString[iPos0])) {
671 G4Colour::GetColour(redOrString, colour); // Remains default (white) if
672 // not found.
673 } else {
674 colour = G4Colour(G4UIcommand::ConvertTo3Vector(newValue));
675 }
676 colour = G4Colour(colour.GetRed(), colour.GetGreen(), colour.GetBlue(), opacity);
677 G4VisAttributes va = vp.GetDefaultVisAttributes();
678 va.SetColour(colour);
679 vp.SetDefaultVisAttributes(va);
680 if (verbosity >= G4VisManager::confirmations) {
681 G4cout << "Default colour "
682 << vp.GetDefaultVisAttributes()->GetColour()
683 << " requested."
684 << G4endl;
685 }
686 }
687
688 else if (command == fpCommandDefaultTextColour) {
689 G4String redOrString;
690 G4double green, blue, opacity;
691 std::istringstream iss(newValue);
692 iss >> redOrString >> green >> blue >> opacity;
693 G4Colour colour(1.,1.,1.); // Default white and opaque.
694 const size_t iPos0 = 0;
695 if (std::isalpha(redOrString[iPos0])) {
696 G4Colour::GetColour(redOrString, colour); // Remains default (white) if
697 // not found.
698 } else {
699 colour = G4Colour(G4UIcommand::ConvertTo3Vector(newValue));
700 }
701 colour = G4Colour(colour.GetRed(), colour.GetGreen(), colour.GetBlue(), opacity);
702 G4VisAttributes va = vp.GetDefaultTextVisAttributes();
703 va.SetColour(colour);
704 vp.SetDefaultTextVisAttributes(va);
705 if (verbosity >= G4VisManager::confirmations) {
706 G4cout << "Default colour "
707 << vp.GetDefaultTextVisAttributes()->GetColour()
708 << " requested."
709 << G4endl;
710 }
711 }
712
713 else if (command == fpCommandEdge) {
714 G4ViewParameters::DrawingStyle existingStyle = vp.GetDrawingStyle();
715 if (G4UIcommand::ConvertToBool(newValue)) {
716 switch (existingStyle) {
717 case G4ViewParameters::wireframe:
718 break;
719 case G4ViewParameters::hlr:
720 break;
721 case G4ViewParameters::hsr:
722 vp.SetDrawingStyle(G4ViewParameters::hlhsr);
723 break;
724 case G4ViewParameters::hlhsr:
725 break;
726 }
727 }
728 else {
729 switch (existingStyle) {
730 case G4ViewParameters::wireframe:
731 break;
732 case G4ViewParameters::hlr:
733 break;
734 case G4ViewParameters::hsr:
735 break;
736 case G4ViewParameters::hlhsr:
737 vp.SetDrawingStyle(G4ViewParameters::hsr);
738 break;
739 }
740 }
741 if (verbosity >= G4VisManager::confirmations) {
742 G4cout << "Drawing style of viewer \"" << currentViewer->GetName()
743 << "\" set to " << vp.GetDrawingStyle()
744 << G4endl;
745 }
746 }
747
748 else if (command == fpCommandExplodeFactor) {
749 G4double explodeFactor, x, y, z;
750 G4String unitString;
751 std::istringstream is (newValue);
752 is >> explodeFactor >> x >> y >> z >> unitString;
753 G4double unit = G4UIcommand::ValueOf(unitString);
754 vp.SetExplodeFactor(explodeFactor);
755 vp.SetExplodeCentre(G4Point3D(x * unit, y * unit, z * unit));
756 if (verbosity >= G4VisManager::confirmations) {
757 G4cout << "Explode factor changed to " << vp.GetExplodeFactor()
758 << " from centre " << vp.GetExplodeCentre()
759 << G4endl;
760 }
761 }
762
763 else if (command == fpCommandGlobalLineWidthScale) {
764 G4double globalLineWidthScale
765 = fpCommandGlobalLineWidthScale->GetNewDoubleValue(newValue);
766 vp.SetGlobalLineWidthScale(globalLineWidthScale);
767 if (verbosity >= G4VisManager::confirmations) {
768 G4cout << "Global Line Width Scale changed to "
769 << vp.GetGlobalLineWidthScale() << G4endl;
770 }
771 }
772
773 else if (command == fpCommandGlobalMarkerScale) {
774 G4double globalMarkerScale
775 = fpCommandGlobalMarkerScale->GetNewDoubleValue(newValue);
776 vp.SetGlobalMarkerScale(globalMarkerScale);
777 if (verbosity >= G4VisManager::confirmations) {
778 G4cout << "Global Marker Scale changed to "
779 << vp.GetGlobalMarkerScale() << G4endl;
780 }
781 }
782
783 else if (command == fpCommandHiddenEdge) {
784 G4ViewParameters::DrawingStyle existingStyle = vp.GetDrawingStyle();
785 if (G4UIcommand::ConvertToBool(newValue)) {
786 switch (existingStyle) {
787 case G4ViewParameters::wireframe:
788 vp.SetDrawingStyle(G4ViewParameters::hlr);
789 break;
790 case G4ViewParameters::hlr:
791 break;
792 case G4ViewParameters::hsr:
793 vp.SetDrawingStyle(G4ViewParameters::hlhsr);
794 break;
795 case G4ViewParameters::hlhsr:
796 break;
797 }
798 }
799 else {
800 switch (existingStyle) {
801 case G4ViewParameters::wireframe:
802 break;
803 case G4ViewParameters::hlr:
804 vp.SetDrawingStyle(G4ViewParameters::wireframe);
805 break;
806 case G4ViewParameters::hsr:
807 break;
808 case G4ViewParameters::hlhsr:
809 vp.SetDrawingStyle(G4ViewParameters::hsr);
810 break;
811 }
812 }
813 if (verbosity >= G4VisManager::confirmations) {
814 G4cout << "Drawing style of viewer \"" << currentViewer->GetName()
815 << "\" set to " << vp.GetDrawingStyle()
816 << G4endl;
817 }
818 }
819
820 else if (command == fpCommandHiddenMarker) {
821 G4bool hidden = G4UIcommand::ConvertToBool(newValue);
822 if (hidden) vp.SetMarkerHidden();
823 else vp.SetMarkerNotHidden();
824 if (verbosity >= G4VisManager::confirmations) {
825 G4cout << "Markers will ";
826 if (vp.IsMarkerNotHidden()) G4cout << "not ";
827 G4cout << "be hidden under solid objects." << G4endl;
828 }
829 }
830
831 else if (command == fpCommandLightsMove) {
832 G4String s (newValue);
833 if (s.find("cam") != G4String::npos) vp.SetLightsMoveWithCamera(true);
834 else if(s.find("obj") != G4String::npos) vp.SetLightsMoveWithCamera(false);
835 else {
836 if (verbosity >= G4VisManager::errors) {
837 G4cout << "ERROR: \"" << newValue << "\" not recognised."
838 " Looking for \"cam\" or \"obj\" in string." << G4endl;
839 }
840 }
841 if (verbosity >= G4VisManager::confirmations) {
842 G4cout << "Lights move with ";
843 if (vp.GetLightsMoveWithCamera())
844 G4cout << "camera (object appears to rotate).";
845 else G4cout << "object (the viewer appears to be moving).";
846 G4cout << G4endl;
847 }
848 }
849
850 else if (command == fpCommandLightsThetaPhi) {
851 G4double theta, phi;
852 ConvertToDoublePair(newValue, theta, phi);
853 G4double x = std::sin (theta) * std::cos (phi);
854 G4double y = std::sin (theta) * std::sin (phi);
855 G4double z = std::cos (theta);
856 fLightsVector = G4ThreeVector (x, y, z);
857 vp.SetLightpointDirection(fLightsVector);
858 if (verbosity >= G4VisManager::confirmations) {
859 G4cout << "Lights direction set to "
860 << vp.GetLightpointDirection() << G4endl;
861 }
862 }
863
864 else if (command == fpCommandLightsVector) {
865 fLightsVector = G4UIcommand::ConvertTo3Vector(newValue);
866 vp.SetLightpointDirection(fLightsVector);
867 if (verbosity >= G4VisManager::confirmations) {
868 G4cout << "Lights direction set to "
869 << vp.GetLightpointDirection() << G4endl;
870 }
871 }
872
873 else if (command == fpCommandLineSegments) {
874 G4int nSides = G4UIcommand::ConvertToInt(newValue);
875 nSides = vp.SetNoOfSides(nSides);
876 if (verbosity >= G4VisManager::confirmations) {
877 G4cout <<
878 "Number of line segements per circle in polygon approximation is "
879 << nSides << G4endl;
880 }
881 }
882
883 else if (command == fpCommandPicking) {
884 vp.SetPicking(G4UIcommand::ConvertToBool(newValue));
885 if (verbosity >= G4VisManager::confirmations) {
886 G4cout << "Picking ";
887 if (vp.IsPicking()) G4cout << "requested.";
888 else G4cout << "inhibited.";
889 G4cout << G4endl;
890 }
891 }
892
893 else if (command == fpCommandProjection) {
894 G4double fieldHalfAngle;
895 const size_t iPos0 = 0;
896 if (newValue[iPos0] == 'o') { // "orthogonal"
897 fieldHalfAngle = 0.;
898 }
899 else if (newValue[iPos0] == 'p') { // "perspective"
900 G4String dummy;
901 G4String unit;
902 std::istringstream is (newValue);
903 is >> dummy >> fieldHalfAngle >> unit;
904 fieldHalfAngle *= G4UIcommand::ValueOf(unit);
905 if (fieldHalfAngle > 89.5 * deg || fieldHalfAngle <= 0.0) {
906 if (verbosity >= G4VisManager::errors) {
907 G4cout <<
908 "ERROR: Field half angle should be 0 < angle <= 89.5 degrees.";
909 G4cout << G4endl;
910 }
911 return;
912 }
913 }
914 else {
915 if (verbosity >= G4VisManager::errors) {
916 G4cout << "ERROR: \"" << newValue << "\" not recognised."
917 " Looking for 'o' or 'p' first character." << G4endl;
918 }
919 return;
920 }
921 vp.SetFieldHalfAngle(fieldHalfAngle);
922 if (verbosity >= G4VisManager::confirmations) {
923 G4cout << "Projection style of viewer \"" << currentViewer->GetName()
924 << "\" set to ";
925 if (fieldHalfAngle == 0.) {
926 G4cout << "orthogonal.";
927 }
928 else {
929 G4cout << "perspective\n with half angle " << fieldHalfAngle / deg
930 << " degrees.";
931 }
932 G4cout << G4endl;
933 }
934 }
935
936 else if (command == fpCommandSectionPlane) {
937 G4String choice, unit;
938 G4double x, y, z, nx, ny, nz;
939 std::istringstream is (newValue);
940 is >> choice >> x >> y >> z >> unit >> nx >> ny >> nz;
941
942 G4int iSelector = -1;
943 if (choice.compareTo("off",G4String::ignoreCase) == 0 ||
944 !G4UIcommand::ConvertToBool(choice)) iSelector = 0;
945 if (choice.compareTo("on",G4String::ignoreCase) == 0 ||
946 G4UIcommand::ConvertToBool(choice)) iSelector = 1;
947 if (iSelector < 0) {
948 if (verbosity >= G4VisManager::errors) {
949 G4cout << "Choice not recognised (on/true or off/false)." << G4endl;
950 G4cout << "Section drawing is currently: ";
951 if (vp.IsSection ()) G4cout << "on";
952 else G4cout << "off";
953 G4cout << ".\nSection plane is currently: "
954 << vp.GetSectionPlane ();
955 G4cout << G4endl;
956 }
957 return;
958 }
959
960 G4double F = 1.;
961 switch (iSelector) {
962 default:
963 case 0:
964 vp.UnsetSectionPlane();
965 break;
966 case 1:
967 F = G4UIcommand::ValueOf(unit);
968 x *= F; y *= F; z *= F;
969 vp.SetSectionPlane(G4Plane3D(G4Normal3D(nx,ny,nz), G4Point3D(x,y,z)));
970 vp.SetViewpointDirection(G4Normal3D(nx,ny,nz));
971 break;
972 }
973
974 if (verbosity >= G4VisManager::confirmations) {
975 G4cout << "Section drawing is now: ";
976 if (vp.IsSection ()) G4cout << "on";
977 else G4cout << "off";
978 G4cout << ".\nSection plane is now: "
979 << vp.GetSectionPlane ();
980 G4cout << G4endl;
981 }
982 }
983
984 else if (command == fpCommandStyle) {
985 G4ViewParameters::DrawingStyle existingStyle = vp.GetDrawingStyle();
986 const size_t iPos0 = 0;
987 if (newValue[iPos0] == 'w') { // "wireframe"
988 switch (existingStyle) {
989 case G4ViewParameters::wireframe:
990 break;
991 case G4ViewParameters::hlr:
992 break;
993 case G4ViewParameters::hsr:
994 vp.SetDrawingStyle(G4ViewParameters::wireframe);
995 break;
996 case G4ViewParameters::hlhsr:
997 vp.SetDrawingStyle(G4ViewParameters::hlr);
998 break;
999 }
1000 }
1001 else if (newValue[iPos0] == 's') { // "surface"
1002 switch (existingStyle) {
1003 case G4ViewParameters::wireframe:
1004 vp.SetDrawingStyle(G4ViewParameters::hsr);
1005 break;
1006 case G4ViewParameters::hlr:
1007 vp.SetDrawingStyle(G4ViewParameters::hlhsr);
1008 break;
1009 case G4ViewParameters::hsr:
1010 break;
1011 case G4ViewParameters::hlhsr:
1012 break;
1013 }
1014 }
1015 else {
1016 if (verbosity >= G4VisManager::errors) {
1017 G4cout << "ERROR: \"" << newValue << "\" not recognised."
1018 " Looking for 'w' or 's' first character." << G4endl;
1019 }
1020 return;
1021 }
1022 if (verbosity >= G4VisManager::confirmations) {
1023 G4cout << "Drawing style of viewer \"" << currentViewer->GetName()
1024 << "\" set to " << vp.GetDrawingStyle()
1025 << G4endl;
1026 }
1027 }
1028
1029 else if (command == fpCommandTargetPoint) {
1030 G4ThreeVector targetPoint =
1031 fpCommandTargetPoint->GetNew3VectorValue(newValue);
1032 const G4Point3D& standardTargetPoint =
1033 currentViewer->GetSceneHandler()->GetScene()->GetStandardTargetPoint();
1034 vp.SetCurrentTargetPoint(targetPoint - standardTargetPoint);
1035 if (verbosity >= G4VisManager::confirmations) {
1036 G4cout << "Target point set to "
1037 << fpCommandTargetPoint->ConvertToStringWithBestUnit
1038 (targetPoint)
1039 << "\n\"Current Target Point\" set to "
1040 << fpCommandTargetPoint->ConvertToStringWithBestUnit
1041 (vp.GetCurrentTargetPoint())
1042 << "\n\"Standard Target Point\" is "
1043 << fpCommandTargetPoint->ConvertToStringWithBestUnit
1044 (standardTargetPoint)
1045 << G4endl;
1046 }
1047 }
1048
1049 else if (command == fpCommandUpThetaPhi) {
1050 G4double theta, phi;
1051 ConvertToDoublePair(newValue, theta, phi);
1052 G4double x = std::sin (theta) * std::cos (phi);
1053 G4double y = std::sin (theta) * std::sin (phi);
1054 G4double z = std::cos (theta);
1055 fUpVector = G4ThreeVector (x, y, z);
1056 vp.SetUpVector(fUpVector);
1057 if (verbosity >= G4VisManager::confirmations) {
1058 G4cout << "Up direction set to " << vp.GetUpVector() << G4endl;
1059 }
1060 }
1061
1062 else if (command == fpCommandUpVector) {
1063 fUpVector = G4UIcommand::ConvertTo3Vector(newValue).unit();
1064 vp.SetUpVector(fUpVector);
1065 if (verbosity >= G4VisManager::confirmations) {
1066 G4cout << "Up direction set to " << vp.GetUpVector() << G4endl;
1067 }
1068 }
1069
1070 else if (command == fpCommandViewpointThetaPhi) {
1071 G4double theta, phi;
1072 ConvertToDoublePair(newValue, theta, phi);
1073 G4double x = std::sin (theta) * std::cos (phi);
1074 G4double y = std::sin (theta) * std::sin (phi);
1075 G4double z = std::cos (theta);
1076 fViewpointVector = G4ThreeVector (x, y, z);
1077 vp.SetViewAndLights(fViewpointVector);
1078 if (verbosity >= G4VisManager::confirmations) {
1079 G4cout << "Viewpoint direction set to "
1080 << vp.GetViewpointDirection() << G4endl;
1081 if (vp.GetLightsMoveWithCamera ()) {
1082 G4cout << "Lightpoint direction set to "
1083 << vp.GetActualLightpointDirection () << G4endl;
1084 }
1085 }
1086 }
1087
1088 else if (command == fpCommandViewpointVector) {
1089 fViewpointVector = G4UIcommand::ConvertTo3Vector(newValue).unit();
1090 vp.SetViewAndLights(fViewpointVector);
1091 if (verbosity >= G4VisManager::confirmations) {
1092 G4cout << "Viewpoint direction set to "
1093 << vp.GetViewpointDirection() << G4endl;
1094 if (vp.GetLightsMoveWithCamera ()) {
1095 G4cout << "Lightpoint direction set to "
1096 << vp.GetActualLightpointDirection () << G4endl;
1097 }
1098 }
1099 }
1100
1101 else {
1102 if (verbosity >= G4VisManager::errors) {
1103 G4cout <<
1104 "ERROR: G4VisCommandsViewerSet::SetNewValue: unrecognised command."
1105 << G4endl;
1106 }
1107 return;
1108 }
1109
1110 SetViewParameters(currentViewer,vp);
1111}
Note: See TracBrowser for help on using the repository browser.