Geant4  10.03
G4OpenGLViewerMessenger.cc
Go to the documentation of this file.
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: G4OpenGLViewerMessenger.cc 101105 2016-11-07 08:09:26Z gcosmo $
28 
29 #ifdef G4VIS_BUILD_OPENGL_DRIVER
30 
32 
33 #include "G4OpenGLViewer.hh"
34 #include "G4OpenGLStoredViewer.hh"
36 #include "G4UImanager.hh"
37 #include "G4UIcommand.hh"
38 #include "G4UIdirectory.hh"
40 #include "G4UIcmdWithADouble.hh"
41 #include "G4UIcmdWithABool.hh"
42 #include "G4UIcmdWithAString.hh"
43 #include "G4UIcmdWithAnInteger.hh"
44 #include "G4VisManager.hh"
45 #include <sstream>
46 
49 
52 {
54  return fpInstance;
55 }
56 
58 {
59  G4bool omitable;
60 
61  fpDirectory = new G4UIdirectory("/vis/ogl/");
62  fpDirectory->SetGuidance("G4OpenGLViewer commands.");
63 
65  new G4UIcommand("/vis/ogl/export", this);
66  fpCommandExport->SetGuidance ("export a screenshot of current OpenGL viewer");
67  fpCommandExport->SetGuidance ("If name is \"\", filename and extension will have the default value");
68  fpCommandExport->SetGuidance ("If name is \"toto.png\", set the name to \"toto\" and the format to \"png\". No incremented suffix is added.");
69  fpCommandExport->SetGuidance ("If name is \"toto\", set the name to \"toto\" and the format to default (or current format if specify). Will also add an incremented suffix at the end of the file, except if name is the same as previous it will not reset incremented suffix.");
70  fpCommandExport->SetGuidance ("Setting size is available only on eps/pdf/svg/ps formats");
71  G4UIparameter* parameterExport;
72  parameterExport = new G4UIparameter ("name", 's', omitable = true);
73  parameterExport->SetDefaultValue("!");
74  parameterExport->SetGuidance("by default, will take a default value or the last /vis/ogl/set/printFilename value if set");
75  fpCommandExport->SetParameter(parameterExport);
76  parameterExport = new G4UIparameter ("width", 'd', omitable = true);
77  parameterExport->SetGuidance("By default, will take the current width of the viewer or /vis/ogl/set/printSize if set");
78  parameterExport->SetGuidance("This parameter is only useful for eps/pdf/svg/ps formats !");
79  parameterExport->SetDefaultValue(-1);
80  fpCommandExport->SetParameter(parameterExport);
81  parameterExport = new G4UIparameter ("height", 'd', omitable = true);
82  parameterExport->SetGuidance("By default, will take the current height of the viewer or /vis/ogl/set/printSize if set");
83  parameterExport->SetGuidance("This parameter is only useful for eps/pdf/svg/ps formats !");
84  parameterExport->SetDefaultValue(-1);
85  fpCommandExport->SetParameter(parameterExport);
86 
87  fpCommandFlushAt = new G4UIcommand("/vis/ogl/flushAt", this);
89  ("Controls the rate at which graphics primitives are flushed to screen.");
91  ("Flushing to screen is an expensive operation so to speed drawing choose"
92  "\nan action suitable for your application. Note that detectors are flushed"
93  "\nto screen anyway at end of drawing, and events are flushed to screen"
94  "\nanyway depending on /vis/scene/endOfEventAction and endOfRunAction.");
96  ("For NthPrimitive and NthEvent the second parameter N is operative.");
98  ("For \"never\", detectors and events are still flushed as described above.");
99  G4UIparameter* parameterFlushAt;
100  parameterFlushAt = new G4UIparameter ("action", 's', omitable = true);
101  parameterFlushAt->SetParameterCandidates
102  ("endOfEvent endOfRun eachPrimitive NthPrimitive NthEvent never");
103  parameterFlushAt->SetDefaultValue("NthEvent");
104  fpCommandFlushAt->SetParameter(parameterFlushAt);
105  parameterFlushAt = new G4UIparameter ("N", 'i', omitable = true);
106  parameterFlushAt->SetDefaultValue(100);
107  fpCommandFlushAt->SetParameter(parameterFlushAt);
108 
110  new G4UIcmdWithoutParameter("/vis/ogl/printEPS", this);
111  fpCommandPrintEPS->SetGuidance("Print Encapsulated PostScript file.");
113  ("Generates files with names G4OpenGL_n.eps, where n is a sequence"
114  "\nnumber, starting at 0."
115  "\nCan be \"vectored\" or \"pixmap\" - see \"/vis/ogl/set/printMode\".");
116 
117  fpDirectorySet = new G4UIdirectory ("/vis/ogl/set/");
118  fpDirectorySet->SetGuidance("G4OpenGLViewer set commands.");
119 
120  G4UIparameter* parameter;
121 
123  new G4UIcommand("/vis/ogl/set/displayHeadTime", this);
125  ("Display head time of range in 2D text.");
126  parameter = new G4UIparameter ("displayHeadTime", 'b', omitable = false);
127  parameter->SetDefaultValue(false);
129  parameter = new G4UIparameter ("screenX", 'd', omitable = true);
130  parameter->SetGuidance("-1 < screenX < 1");
131  parameter->SetParameterRange("screenX >= -1. && screenX <= 1.");
132  parameter->SetDefaultValue(-0.9);
134  parameter = new G4UIparameter ("screenY", 'd', omitable = true);
135  parameter->SetGuidance("-1 < screenY < 1");
136  parameter->SetParameterRange("screenY >= -1. && screenY <= 1.");
137  parameter->SetDefaultValue(-0.9);
139  parameter = new G4UIparameter ("screenSize", 'd', omitable = true);
140  parameter->SetDefaultValue(24.);
142  parameter = new G4UIparameter ("red", 'd', omitable = true);
143  parameter->SetParameterRange("red >= 0. && red <= 1.");
144  parameter->SetDefaultValue(0.);
146  parameter = new G4UIparameter ("green", 'd', omitable = true);
147  parameter->SetParameterRange("green >= 0. && green <= 1.");
148  parameter->SetDefaultValue(1.);
150  parameter = new G4UIparameter ("blue", 'd', omitable = true);
151  parameter->SetParameterRange("blue >= 0. && blue <= 1.");
152  parameter->SetDefaultValue(1.);
154 
156  new G4UIcommand("/vis/ogl/set/displayLightFront", this);
158  ("Display the light front at head time.");
160  ("Tip: The trajectories can appear of jump ahead of the light front"
161  "\nbecause their time range overlaps the viewer's time range. To"
162  "\naverage out this discrete time effect, advance the light front by"
163  "\nhalf the trajectories interval. E.g., if the trajectory time slice"
164  "\ninterval is 0.01 ns:"
165  "\n /vis/ogl/set/displayLightFront true -90 0 0 mm -0.005 ns"
166  "\nTo prevent them beating the light front at all:"
167  "\n /vis/ogl/set/displayLightFront true -90 0 0 mm -0.01 ns");
168  parameter = new G4UIparameter ("displayLightFront", 'b', omitable = false);
169  parameter->SetDefaultValue(false);
171  parameter = new G4UIparameter ("originX", 'd', omitable = true);
172  parameter->SetDefaultValue(0.);
174  parameter = new G4UIparameter ("originY", 'd', omitable = true);
175  parameter->SetDefaultValue(0.);
177  parameter = new G4UIparameter ("originZ", 'd', omitable = true);
178  parameter->SetDefaultValue(0.);
180  parameter = new G4UIparameter ("space_unit", 's', omitable = true);
181  parameter->SetDefaultValue("m");
183  parameter = new G4UIparameter ("originT", 'd', omitable = true);
184  parameter->SetDefaultValue(0.);
186  parameter = new G4UIparameter ("time_unit", 's', omitable = true);
187  parameter->SetDefaultValue("s");
189  parameter = new G4UIparameter ("red", 'd', omitable = true);
190  parameter->SetParameterRange("red >= 0. && red <= 1.");
191  parameter->SetDefaultValue(0.);
193  parameter = new G4UIparameter ("green", 'd', omitable = true);
194  parameter->SetParameterRange("green >= 0. && green <= 1.");
195  parameter->SetDefaultValue(1.);
197  parameter = new G4UIparameter ("blue", 'd', omitable = true);
198  parameter->SetParameterRange("blue >= 0. && blue <= 1.");
199  parameter->SetDefaultValue(0.);
201 
203  new G4UIcmdWithAnInteger("/vis/ogl/set/displayListLimit", this);
205  ("Set/reset display list limit (to avoid memory exhaustion).");
206  fpCommandDisplayListLimit->SetParameterName("limit", omitable = true);
208  fpCommandDisplayListLimit->SetRange("limit>=10000");
209 
211  new G4UIcommand("/vis/ogl/set/endTime", this);
212  fpCommandEndTime->SetGuidance("Set end and range of track time.");
213  parameter = new G4UIparameter ("end-time", 'd', omitable = false);
214  parameter->SetDefaultValue(DBL_MAX);
215  fpCommandEndTime->SetParameter(parameter);
216  parameter = new G4UIparameter ("end-time-unit", 's', omitable = false);
217  parameter->SetDefaultValue("ns");
218  fpCommandEndTime->SetParameter(parameter);
219  parameter = new G4UIparameter ("time-range", 'd', omitable = true);
220  parameter->SetDefaultValue(-1.);
221  fpCommandEndTime->SetParameter(parameter);
222  parameter = new G4UIparameter ("time-range-unit", 's', omitable = true);
223  parameter->SetDefaultValue("ns");
224  fpCommandEndTime->SetParameter(parameter);
225 
227  new G4UIcmdWithAnInteger("/vis/ogl/set/eventsDrawInterval", this);
229  ("Deprecated. Use /vis/ogl/flushAt.");
231  ("(This is equivalent to \"/vis/ogl/flushAt NthPrimitive N\"");
232  fpCommandEventsDrawInterval->SetParameterName("N", omitable = true);
234 
235  fpCommandFade = new G4UIcmdWithADouble("/vis/ogl/set/fade", this);
237  ("0: no fade; 1: maximum fade with time within range.");
238  fpCommandFade->SetParameterName("fadefactor", omitable = false);
239  fpCommandFade->SetRange("fadefactor>=0.&&fadefactor<=1.");
241 
243  new G4UIcommand("/vis/ogl/set/printFilename", this);
244  fpCommandPrintFilename->SetGuidance ("Set print filename");
245  fpCommandPrintFilename->SetGuidance ("Setting 'incremental' will increment filename by one at each new print, starting at 0");
246  G4UIparameter* parameterPrintFilename;
247  parameterPrintFilename = new G4UIparameter ("name", 's', omitable = true);
248  parameterPrintFilename->SetDefaultValue("G4OpenGL");
249  fpCommandPrintFilename->SetParameter(parameterPrintFilename);
250  parameterPrintFilename = new G4UIparameter ("incremental", 'b', omitable = true);
251  parameterPrintFilename->SetDefaultValue(1);
252  fpCommandPrintFilename->SetParameter(parameterPrintFilename);
253 
255  new G4UIcommand("/vis/ogl/set/exportFormat", this);
256  fpCommandExportFormat->SetGuidance ("Set export format");
257  fpCommandExportFormat->SetGuidance ("By default, pdf/eps/svg/ps are available. Depending of viewers several other format are available.");
258  fpCommandExportFormat->SetGuidance ("Try /vis/ogl/set/exportFormat without parameters to see them.");
259  fpCommandExportFormat->SetGuidance ("Changing format will reset the incremental suffix to 0.");
260  G4UIparameter* parameterExportFormat;
261  parameterExportFormat = new G4UIparameter ("format", 's', omitable = true);
262  parameterExportFormat->SetDefaultValue("");
263  fpCommandExportFormat->SetParameter(parameterExportFormat);
264 
266  ("/vis/ogl/set/printMode",this);
267  fpCommandPrintMode->SetGuidance("Set print mode, only available for \"ps\" format");
268  fpCommandPrintMode->SetParameterName("print_mode",omitable = true);
269  fpCommandPrintMode->SetCandidates("vectored pixmap");
270  fpCommandPrintMode->SetDefaultValue("vectored");
271 
273  new G4UIcommand("/vis/ogl/set/printSize", this);
274  fpCommandPrintSize->SetGuidance ("Set print size");
275  fpCommandPrintSize->SetGuidance ("Tip : -1 will mean 'print size' = 'window size'");
276  fpCommandPrintSize->SetGuidance (" Setting size greatter than your maximum graphic card capacity , will set the size to maximum size.");
277  G4UIparameter* parameterPrintSize;
278  parameterPrintSize = new G4UIparameter ("width", 'd', omitable = false);
279  parameterPrintSize->SetDefaultValue(-1);
280  fpCommandPrintSize->SetParameter(parameterPrintSize);
281  parameterPrintSize = new G4UIparameter ("height", 'd', omitable = false);
282  parameterPrintSize->SetDefaultValue(-1);
283  fpCommandPrintSize->SetParameter(parameterPrintSize);
284 
286  new G4UIcommand("/vis/ogl/set/startTime", this);
287  fpCommandStartTime->SetGuidance("Set start and range of track time.");
288  parameter = new G4UIparameter ("start-time", 'd', omitable = false);
289  parameter->SetDefaultValue(-DBL_MAX);
290  fpCommandStartTime->SetParameter(parameter);
291  parameter = new G4UIparameter ("start-time-unit", 's', omitable = false);
292  parameter->SetDefaultValue("ns");
293  fpCommandStartTime->SetParameter(parameter);
294  parameter = new G4UIparameter ("time-range", 'd', omitable = true);
295  parameter->SetDefaultValue(-1.);
296  fpCommandStartTime->SetParameter(parameter);
297  parameter = new G4UIparameter ("time-range-unit", 's', omitable = true);
298  parameter->SetDefaultValue("ns");
299  fpCommandStartTime->SetParameter(parameter);
300 
302  new G4UIcmdWithABool("/vis/ogl/set/transparency", this);
304  ("True/false to enable/disable rendering of transparent objects.");
306  ("transparency-enabled", omitable = true);
308 }
309 
311 {
312  delete fpCommandTransparency;
313  delete fpCommandStartTime;
314  delete fpCommandPrintSize;
315  delete fpCommandPrintMode;
316  delete fpCommandPrintFilename;
317  delete fpCommandFade;
318  delete fpCommandExportFormat;
320  delete fpCommandEndTime;
324  delete fpDirectorySet;
325  delete fpCommandPrintEPS;
326  delete fpCommandFlushAt;
327  delete fpCommandExport;
328  delete fpDirectory;
329 
330  delete fpInstance;
331 }
332 
334 (G4UIcommand* command, G4String newValue)
335 {
336  G4VisManager* pVisManager = G4VisManager::GetInstance();
337 
338  G4VViewer* pViewer = pVisManager->GetCurrentViewer();
339  if (!pViewer) {
340  G4cout <<
341  "G4OpenGLViewerMessenger::SetNewValue: No current viewer."
342  "\n \"/vis/open\", or similar, to get one."
343  << G4endl;
344  return;
345  }
346 
347  G4VSceneHandler* pSceneHandler = pViewer->GetSceneHandler();
348  if (!pSceneHandler) {
349  G4cout <<
350  "G4OpenGLViewerMessenger::SetNewValue: This viewer has no scene handler."
351  "\n Shouldn't happen - please report circumstances."
352  "\n (Viewer is \"" << pViewer->GetName() << "\".)"
353  "\n Try \"/vis/open\", or similar, to get one."
354  << G4endl;
355  return;
356  }
357 
358  G4OpenGLViewer* pOGLViewer = dynamic_cast<G4OpenGLViewer*>(pViewer);
359  if (!pOGLViewer) {
360  G4cout <<
361  "G4OpenGLViewerMessenger::SetNewValue: Current viewer is not of type"
362  "\n OGL. (It is \""
363  << pViewer->GetName() <<
364  "\".)\n Use \"/vis/viewer/select\" or \"/vis/open\"."
365  << G4endl;
366  return;
367  }
368 
369  G4OpenGLSceneHandler* pOGLSceneHandler =
370  dynamic_cast<G4OpenGLSceneHandler*>(pSceneHandler);
371  if (!pOGLSceneHandler) {
372  G4cout <<
373  "G4OpenGLViewerMessenger::SetNewValue: Current scene handler is not of type"
374  "\n OGL. (Viewer is \"" << pViewer->GetName() << "\".)"
375  "\n (Scene handler is \"" << pSceneHandler->GetName() << "\".)"
376  "\n Use \"/vis/sceneHandler/list\" and \"/vis/sceneHandler/select\""
377  "\n or \"/vis/open\"."
378  << G4endl;
379  return;
380  }
381 
382  if (command == fpCommandPrintEPS)
383  {
384  pOGLViewer->setExportImageFormat("eps",true);
385  pOGLViewer->exportImage();
386 
387  if (pOGLViewer->fVP.IsAutoRefresh())
388  G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/refresh");
389  return;
390  }
391 
392  if (command == fpCommandExportFormat)
393  {
394  G4String name;
395  std::istringstream iss(newValue);
396  iss >> name;
397  pOGLViewer->setExportImageFormat(name);
398 
399  return;
400  }
401 
402  if (command == fpCommandExport)
403  {
404  G4String name;
405  G4int width,height;
406  std::istringstream iss(newValue);
407  iss >> name >> width >> height;
408  pOGLViewer->exportImage(name, width, height);
409 
410  if (pOGLViewer->fVP.IsAutoRefresh())
411  G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/refresh");
412  return;
413  }
414 
415  if (command == fpCommandPrintSize)
416  {
417  G4int width,height;
418  std::istringstream iss(newValue);
419  iss >> width
420  >> height;
421  pOGLViewer->setExportSize(width,height);
422  return;
423  }
424 
425  if (command == fpCommandPrintFilename)
426  {
427  G4String name;
428  G4bool inc;
429  std::istringstream iss(newValue);
430  iss >> name
431  >> inc;
432  pOGLViewer->setExportFilename(name,inc);
433  return;
434  }
435 
436  if (command == fpCommandPrintMode)
437  {
438  if (newValue == "vectored") pOGLViewer->fVectoredPs = true;
439  if (newValue == "pixmap") pOGLViewer->fVectoredPs = false;
440  return;
441  }
442 
443  if (command == fpCommandTransparency)
444  {
445  pOGLViewer->transparency_enabled = command->ConvertToBool(newValue);
446  if (pOGLViewer->fVP.IsAutoRefresh())
447  G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/refresh");
448  return;
449  }
450 
451  if (command == fpCommandEventsDrawInterval)
452  {
453  G4int entitiesFlushInterval =
455  pOGLSceneHandler->SetFlushAction(G4OpenGLSceneHandler::NthPrimitive);
456  pOGLSceneHandler->SetEntitiesFlushInterval(entitiesFlushInterval);
457  return;
458  }
459 
460  if (command == fpCommandFlushAt)
461  {
462 // G4bool firstTime = true;
463  std::map<G4String,G4OpenGLSceneHandler::FlushAction> actionMap;
464 // if (firstTime) {
465  actionMap["endOfEvent"] = G4OpenGLSceneHandler::endOfEvent;
466  actionMap["endOfRun"] = G4OpenGLSceneHandler::endOfRun;
467  actionMap["eachPrimitive"] = G4OpenGLSceneHandler::eachPrimitive;
468  actionMap["NthPrimitive"] = G4OpenGLSceneHandler::NthPrimitive;
469  actionMap["NthEvent"] = G4OpenGLSceneHandler::NthEvent;
470  actionMap["never"] = G4OpenGLSceneHandler::never;
471 // firstTime = false;
472 // }
473  G4String action;
474  G4int entitiesFlushInterval;
475  std::istringstream iss(newValue);
476  iss >> action >> entitiesFlushInterval;
477  pOGLSceneHandler->SetFlushAction(actionMap[action]);
478  pOGLSceneHandler->SetEntitiesFlushInterval(entitiesFlushInterval);
479  return;
480  }
481 
482  G4OpenGLStoredViewer* pOGLSViewer =
483  dynamic_cast<G4OpenGLStoredViewer*>(pViewer);
484 
485  if (!pOGLSViewer)
486  {
487  G4cout <<
488  "G4OpenGLViewerMessenger::SetNewValue: Current viewer is not of type OGLS."
489  "\n (It is \"" << pViewer->GetName() << "\".)"
490  "\n This feature is only implemented for OGL Stored viewers."
491  "\n Use \"/vis/viewer/select\" or \"/vis/open OGLS...\"."
492  << G4endl;
493  return;
494  }
495 
496  if (command == fpCommandDisplayHeadTime)
497  {
498  G4String display;
499  G4double screenX, screenY, screenSize, red, green, blue;
500  std::istringstream iss(newValue);
501  iss >> display >> screenX >> screenY
502  >> screenSize >> red >> green >> blue;
503  pOGLSViewer->fDisplayHeadTime = command->ConvertToBool(display);
504  pOGLSViewer->fDisplayHeadTimeX = screenX;
505  pOGLSViewer->fDisplayHeadTimeY = screenY;
506  pOGLSViewer->fDisplayHeadTimeSize = screenSize;
507  pOGLSViewer->fDisplayHeadTimeRed = red;
508  pOGLSViewer->fDisplayHeadTimeGreen = green;
509  pOGLSViewer->fDisplayHeadTimeBlue = blue;
510  return;
511  }
512 
513  if (command == fpCommandDisplayLightFront)
514  {
515  G4String display, originX, originY, originZ, unitS, originT, unitT;
516  G4double red, green, blue;
517  std::istringstream iss(newValue);
518  iss >> display
519  >> originX >> originY >> originZ >> unitS
520  >> originT >> unitT
521  >> red >> green >> blue;
522  pOGLSViewer->fDisplayLightFront = command->ConvertToBool(display);
523  pOGLSViewer->fDisplayLightFrontX =
524  command->ConvertToDimensionedDouble(G4String(originX + ' ' + unitS));
525  pOGLSViewer->fDisplayLightFrontY =
526  command->ConvertToDimensionedDouble(G4String(originY + ' ' + unitS));
527  pOGLSViewer->fDisplayLightFrontZ =
528  command->ConvertToDimensionedDouble(G4String(originZ + ' ' + unitS));
529  pOGLSViewer->fDisplayLightFrontT =
530  command->ConvertToDimensionedDouble(G4String(originT + ' ' + unitT));
531  pOGLSViewer->fDisplayLightFrontRed = red;
532  pOGLSViewer->fDisplayLightFrontGreen = green;
533  pOGLSViewer->fDisplayLightFrontBlue = blue;
534  return;
535  }
536 
537  if (command == fpCommandEndTime)
538  {
539  G4String end_time_string, end_time_unit,
540  time_range_string, time_range_unit;
541  std::istringstream iss(newValue);
542  iss >> end_time_string >> end_time_unit
543  >> time_range_string >> time_range_unit;
544  pOGLSViewer->fEndTime = command->ConvertToDimensionedDouble
545  (G4String(end_time_string + ' ' + end_time_unit));
546  G4double timeRange = command->ConvertToDimensionedDouble
547  (G4String(time_range_string + ' ' + time_range_unit));
548  if (timeRange > 0.) {
549  pOGLSViewer->fStartTime = pOGLSViewer->fEndTime - timeRange;
550  }
551  if (pOGLSViewer->fVP.IsAutoRefresh())
552  G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/refresh");
553  return;
554  }
555 
556  if (command == fpCommandFade)
557  {
558  pOGLSViewer->fFadeFactor = command->ConvertToDouble(newValue);
559  if (pOGLSViewer->fVP.IsAutoRefresh())
560  G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/refresh");
561  return;
562  }
563 
564  if (command == fpCommandStartTime)
565  {
566  G4String start_time_string, start_time_unit,
567  time_range_string, time_range_unit;
568  std::istringstream iss(newValue);
569  iss >> start_time_string >> start_time_unit
570  >> time_range_string >> time_range_unit;
571  pOGLSViewer->fStartTime = command->ConvertToDimensionedDouble
572  (G4String(start_time_string + ' ' + start_time_unit));
573  G4double timeRange = command->ConvertToDimensionedDouble
574  (G4String(time_range_string + ' ' + time_range_unit));
575  if (timeRange > 0.) {
576  pOGLSViewer->fEndTime = pOGLSViewer->fStartTime + timeRange;
577  }
578  if (pOGLSViewer->fVP.IsAutoRefresh())
579  G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/refresh");
580  return;
581  }
582 
583  G4OpenGLStoredSceneHandler* pOGLSSceneHandler =
584  dynamic_cast<G4OpenGLStoredSceneHandler*>(pViewer->GetSceneHandler());
585 
586  if (!pOGLSSceneHandler) {
587  G4cout <<
588  "G4OpenGLViewerMessenger::SetNewValue: Current scene handler is not of type"
589  "\n OGLS (Stored). (Viewer is \"" << pViewer->GetName() << "\".)"
590  "\n (Scene handler is \"" << pSceneHandler->GetName() << "\".)"
591  "\n This feature is only implemented for OGL Stored"
592  "\n scene handlers. Use \"/vis/viewer/select\" or \"/vis/open OGLS...\"."
593  << G4endl;
594  return;
595  }
596 
597  if (command == fpCommandDisplayListLimit)
598  {
599  G4int displayListLimit =
601  pOGLSSceneHandler->SetDisplayListLimit(displayListLimit);
602  return;
603  }
604 }
605 
606 #endif
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
const G4String & GetName() const
void SetParameter(G4UIparameter *const newParameter)
Definition: G4UIcommand.hh:152
G4UIcmdWithAnInteger * fpCommandDisplayListLimit
Definition: test07.cc:36
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
static G4int GetNewIntValue(const char *paramString)
void SetParameterRange(const char *theRange)
void SetParameterCandidates(const char *theString)
G4UIcmdWithAString * fpCommandPrintMode
void SetDefaultValue(const char *theDefaultValue)
const G4String & GetName() const
#define width
const char * name(G4int ptype)
void SetNewValue(G4UIcommand *, G4String)
Definition: test07.cc:36
int G4int
Definition: G4Types.hh:78
static G4double ConvertToDimensionedDouble(const char *st)
Definition: G4UIcommand.cc:451
void SetDefaultValue(G4bool defVal)
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:58
G4UIcmdWithoutParameter * fpCommandPrintEPS
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
G4GLOB_DLL std::ostream G4cout
static G4OpenGLViewerMessenger * GetInstance()
G4UIcmdWithAnInteger * fpCommandEventsDrawInterval
static G4bool ConvertToBool(const char *st)
Definition: G4UIcommand.cc:425
bool G4bool
Definition: G4Types.hh:79
void SetRange(const char *rs)
Definition: G4UIcommand.hh:125
void SetGuidance(const char *aGuidance)
Definition: G4UIcommand.hh:161
static G4VisManager * GetInstance()
static G4double ConvertToDouble(const char *st)
Definition: G4UIcommand.cc:443
void SetDefaultValue(const char *defVal)
void SetParameterName(const char *theName, G4bool omittable, G4bool currentAsDefault=false)
G4VSceneHandler * GetSceneHandler() const
G4UIcmdWithADouble * fpCommandFade
G4UIcmdWithABool * fpCommandTransparency
void SetDefaultValue(G4double defVal)
static G4OpenGLViewerMessenger * fpInstance
void SetCandidates(const char *candidateList)
#define G4endl
Definition: G4ios.hh:61
G4VViewer * GetCurrentViewer() const
void SetDefaultValue(G4int defVal)
double G4double
Definition: G4Types.hh:76
void SetGuidance(const char *theGuidance)
#define DBL_MAX
Definition: templates.hh:83
G4int ApplyCommand(const char *aCommand)
Definition: G4UImanager.cc:446