36 #ifdef G4MULTITHREADED
55 if (pScene) currentSceneName = pScene -> GetName ();
56 return currentSceneName;
63 fpCommand =
new G4UIcommand (
"/vis/scene/activateModel",
this);
64 fpCommand -> SetGuidance
65 (
"Activate or de-activate model.");
66 fpCommand -> SetGuidance
67 (
"Attempts to match search string to name of model - use unique sub-string.");
68 fpCommand -> SetGuidance
69 (
"Use \"/vis/scene/list\" to see model names.");
70 fpCommand -> SetGuidance
71 (
"If name == \"all\" (default), all models are activated.");
73 parameter =
new G4UIparameter (
"search-string",
's', omitable =
true);
74 parameter -> SetDefaultValue (
"all");
75 fpCommand -> SetParameter (parameter);
76 parameter =
new G4UIparameter (
"activate",
'b', omitable =
true);
77 parameter -> SetDefaultValue (
true);
78 fpCommand -> SetParameter (parameter);
94 G4String searchString, activateString;
95 std::istringstream is (newValue);
96 is >> searchString >> activateString;
102 G4cerr <<
"ERROR: No current scene. Please create one." <<
G4endl;
108 if (!pSceneHandler) {
110 G4cerr <<
"ERROR: No current sceneHandler. Please create one." <<
G4endl;
115 if (searchString ==
"all" && !activate) {
118 "WARNING: You are not allowed to de-activate all models."
119 "\n Command ignored."
127 std::vector<G4Scene::Model>& runDurationModelList =
129 for (
size_t i = 0; i < runDurationModelList.size(); i++) {
131 runDurationModelList[i].fpModel->GetGlobalDescription();
132 if (searchString ==
"all" || modelName.find(searchString)
133 != std::string::npos) {
135 runDurationModelList[i].fActive = activate;
137 G4cout <<
"Model \"" << modelName;
138 if (activate)
G4cout <<
"\" activated.";
139 else G4cout <<
"\" de-activated.";
145 std::vector<G4Scene::Model>& endOfEventModelList =
147 for (
size_t i = 0; i < endOfEventModelList.size(); i++) {
149 endOfEventModelList[i].fpModel->GetGlobalDescription();
150 if (searchString ==
"all" || modelName.find(searchString)
151 != std::string::npos) {
153 endOfEventModelList[i].fActive = activate;
155 G4cout <<
"Model \"" << modelName;
156 if (activate)
G4cout <<
"\" activated.";
157 else G4cout <<
"\" de-activated.";
163 std::vector<G4Scene::Model>& endOfRunModelList =
165 for (
size_t i = 0; i < endOfRunModelList.size(); i++) {
167 endOfRunModelList[i].fpModel->GetGlobalDescription();
168 if (searchString ==
"all" || modelName.find(searchString)
169 != std::string::npos) {
171 endOfRunModelList[i].fActive = activate;
173 G4cout <<
"Model \"" << modelName;
174 if (activate)
G4cout <<
"\" activated.";
175 else G4cout <<
"\" de-activated.";
188 const G4String& currentSceneName = pScene -> GetName ();
197 fpCommand -> SetGuidance
198 (
"Creates an empty scene.");
199 fpCommand -> SetGuidance
200 (
"Invents a name if not supplied. This scene becomes current.");
201 fpCommand -> SetParameterName (
"scene-name", omitable =
true);
208 G4String G4VisCommandSceneCreate::NextName () {
209 std::ostringstream oss;
210 oss <<
"scene-" << fId;
228 if (newName == nextName) fId++;
231 G4int iScene, nScenes = sceneList.size ();
232 for (iScene = 0; iScene < nScenes; iScene++) {
233 if (sceneList [iScene] -> GetName () == newName)
break;
235 if (iScene < nScenes) {
237 G4cout <<
"WARNING: Scene \"" << newName <<
"\" already exists."
238 <<
"\n New scene not created."
245 sceneList.push_back (pScene);
249 G4cout <<
"New empty scene \"" << newName <<
"\" created." <<
G4endl;
258 fpCommand =
new G4UIcommand (
"/vis/scene/endOfEventAction",
this);
259 fpCommand -> SetGuidance
260 (
"Accumulate or refresh the viewer for each new event.");
261 fpCommand -> SetGuidance
262 (
"\"accumulate\": viewer accumulates hits, etc., event by event, or");
263 fpCommand -> SetGuidance
264 (
"\"refresh\": viewer shows them at end of event or, for direct-screen"
265 "\n viewers, refreshes the screen just before drawing the next event.");
267 parameter =
new G4UIparameter (
"action",
's', omitable =
true);
268 parameter -> SetParameterCandidates (
"accumulate refresh");
269 parameter -> SetDefaultValue (
"refresh");
270 fpCommand -> SetParameter (parameter);
271 parameter =
new G4UIparameter (
"maxNumber",
'i', omitable =
true);
272 parameter -> SetDefaultValue (100);
273 parameter -> SetGuidance
274 (
"Maximum number of events kept. Unlimited if negative.");
275 fpCommand -> SetParameter (parameter);
292 G4int maxNumberOfKeptEvents;
293 std::istringstream is (newValue);
294 is >> action >> maxNumberOfKeptEvents;
299 G4cerr <<
"ERROR: No current scene. Please create one." <<
G4endl;
305 if (!pSceneHandler) {
307 G4cerr <<
"ERROR: No current sceneHandler. Please create one." <<
G4endl;
312 if (action ==
"accumulate") {
316 else if (action ==
"refresh") {
320 "ERROR: Cannot refresh events unless runs refresh too."
321 "\n Use \"/vis/scene/endOfRun refresh\"."
333 "ERROR: unrecognised parameter \"" << action <<
"\"."
343 size_t nCurrentlyKept = 0;
345 #ifdef G4MULTITHREADED
352 const std::vector<const G4Event*>* events =
354 if (events) nCurrentlyKept = events->size();
359 G4cout <<
"End of event action set to ";
362 G4cout <<
"\"accumulate\"."
363 "\n Maximum number of events to be kept: "
364 << maxNumberOfKeptEvents
365 <<
" (unlimited if negative)."
366 "\n This may be changed with, e.g., "
367 "\"/vis/scene/endOfEventAction accumulate 1000\".";
373 maxNumberOfKeptEvents != 0 &&
376 if (nCurrentlyKept) {
378 "\n There are currently " << nCurrentlyKept
379 <<
" events kept for refreshing and/or reviewing.";
381 G4cout <<
"The vis manager will keep ";
382 if (maxNumberOfKeptEvents < 0)
G4cout <<
"an unlimited number of";
383 else G4cout <<
"up to " << maxNumberOfKeptEvents;
385 if (maxNumberOfKeptEvents > 1 || maxNumberOfKeptEvents < 0)
387 "\n This may use a lot of memory."
388 "\n It may be changed with, e.g., "
389 "\"/vis/scene/endOfEventAction accumulate 10\".";
400 fpCommand -> SetGuidance
401 (
"Accumulate or refresh the viewer for each new run.");
402 fpCommand -> SetGuidance
403 (
"\"accumulate\": viewer accumulates hits, etc., run by run, or");
404 fpCommand -> SetGuidance
405 (
"\"refresh\": viewer shows them at end of run or, for direct-screen"
406 "\n viewers, refreshes the screen just before drawing the first"
407 "\n event of the next run.");
408 fpCommand -> SetGuidance (
"The detector remains or is redrawn.");
409 fpCommand -> SetParameterName (
"action", omitable =
true);
410 fpCommand -> SetCandidates (
"accumulate refresh");
411 fpCommand -> SetDefaultValue (
"refresh");
428 std::istringstream is (newValue);
434 G4cerr <<
"ERROR: No current scene. Please create one." <<
G4endl;
440 if (!pSceneHandler) {
442 G4cerr <<
"ERROR: No current sceneHandler. Please create one." <<
G4endl;
447 if (action ==
"accumulate") {
451 "ERROR: Cannot accumulate runs unless events accumulate too."
452 "\n Use \"/vis/scene/endOfEventAction accumulate\"."
460 else if (action ==
"refresh") {
467 "ERROR: unrecognised parameter \"" << action <<
"\"."
477 G4cout <<
"End of run action set to \"";
479 else G4cout <<
"accumulate";
488 fpCommand =
new G4UIcommand (
"/vis/scene/list",
this);
489 fpCommand -> SetGuidance (
"Lists scene(s).");
490 fpCommand -> SetGuidance
491 (
"\"help /vis/verbose\" for definition of verbosity.");
493 parameter =
new G4UIparameter (
"scene-name",
's', omitable =
true);
494 parameter -> SetDefaultValue (
"all");
495 fpCommand -> SetParameter (parameter);
496 parameter =
new G4UIparameter (
"verbosity",
's', omitable =
true);
497 parameter -> SetDefaultValue (
"warnings");
498 fpCommand -> SetParameter (parameter);
511 std::istringstream is (newValue);
512 is >> name >> verbosityString;
517 if (currentScene) currentName = currentScene->
GetName();
520 G4int iScene, nScenes = sceneList.size ();
522 for (iScene = 0; iScene < nScenes; iScene++) {
523 G4Scene* pScene = sceneList [iScene];
524 const G4String& iName = pScene -> GetName ();
526 if (name != iName)
continue;
529 if (iName == currentName) {
535 G4cout <<
" scene \"" << iName <<
"\"";
538 G4cout <<
"\n Run-duration models:";
539 G4int nRunModels = pScene -> GetRunDurationModelList ().size ();
540 if (nRunModels == 0) {
543 for (i = 0; i < nRunModels; i++) {
544 if (pScene -> GetRunDurationModelList()[i].fActive)
546 else G4cout <<
"\n Inactive: ";
547 G4VModel* pModel = pScene -> GetRunDurationModelList()[i].fpModel;
548 G4cout << pModel -> GetGlobalDescription ();
550 G4cout <<
"\n End-of-event models:";
551 G4int nEOEModels = pScene -> GetEndOfEventModelList ().size ();
552 if (nEOEModels == 0) {
555 for (i = 0; i < nEOEModels; i++) {
556 if (pScene -> GetEndOfEventModelList()[i].fActive)
558 else G4cout <<
"\n Inactive: ";
559 G4VModel* pModel = pScene -> GetEndOfEventModelList()[i].fpModel;
560 G4cout << pModel -> GetGlobalDescription ();
562 G4cout <<
"\n End-of-run models:";
563 G4int nEORModels = pScene -> GetEndOfRunModelList ().size ();
564 if (nEORModels == 0) {
567 for (i = 0; i < nEORModels; i++) {
568 if (pScene -> GetEndOfRunModelList()[i].fActive)
570 else G4cout <<
"\n Inactive: ";
571 G4VModel* pModel = pScene -> GetEndOfRunModelList()[i].fpModel;
572 G4cout << pModel -> GetGlobalDescription ();
576 G4cout <<
"\n " << *sceneList [iScene];
581 G4cout <<
"No scenes found";
583 G4cout <<
" of name \"" << name <<
"\"";
593 fpCommand =
new G4UIcommand (
"/vis/scene/notifyHandlers",
this);
594 fpCommand -> SetGuidance
595 (
"Notifies scene handlers and forces re-rendering.");
596 fpCommand -> SetGuidance
597 (
"Notifies the handler(s) of the specified scene and forces a"
598 "\nreconstruction of any graphical databases."
599 "\nClears and refreshes all viewers of current scene."
600 "\n The default action \"refresh\" does not issue \"update\" (see"
601 "\n /vis/viewer/update)."
602 "\nIf \"flush\" is specified, it issues an \"update\" as well as"
603 "\n \"refresh\" - \"update\" and initiates post-processing"
604 "\n for graphics systems which need it.");
605 fpCommand -> SetGuidance
606 (
"The default for <scene-name> is the current scene name.");
607 fpCommand -> SetGuidance
608 (
"This command does not change current scene, scene handler or viewer.");
612 parameter -> SetCurrentAsDefault(
true);
613 fpCommand -> SetParameter (parameter);
616 parameter -> SetDefaultValue(
"refresh");
617 parameter -> SetParameterCandidates(
"r refresh f flush");
618 fpCommand -> SetParameter (parameter);
635 std::istringstream is (newValue);
636 is >> sceneName >> refresh_flush;
638 if (refresh_flush(0) ==
'f') flush =
true;
645 const G4int nScenes = sceneList.size ();
647 for (iScene = 0; iScene < nScenes; iScene++) {
648 G4Scene* scene = sceneList [iScene];
649 if (sceneName == scene -> GetName ())
break;
651 if (iScene >= nScenes ) {
653 G4cout <<
"WARNING: Scene \"" << sceneName <<
"\" not found."
654 "\n /vis/scene/list to see scenes."
663 if (!pCurrentSceneHandler) {
665 G4cout <<
"WARNING: No current scene handler."
671 if (!pCurrentViewer) {
673 G4cout <<
"WARNING: No current viewer."
679 if (!pCurrentScene) {
681 G4cout <<
"WARNING: No current scene."
695 const G4int nSceneHandlers = sceneHandlerList.size ();
696 for (
G4int iSH = 0; iSH < nSceneHandlers; iSH++) {
698 G4Scene* aScene = aSceneHandler -> GetScene ();
700 const G4String& aSceneName = aScene -> GetName ();
701 if (sceneName == aSceneName) {
703 G4ViewerList& viewerList = aSceneHandler -> SetViewerList ();
704 const G4int nViewers = viewerList.size ();
705 for (
G4int iV = 0; iV < nViewers; iV++) {
708 aViewer -> NeedKernelVisit();
710 aSceneHandler -> SetCurrentViewer (aViewer);
715 aViewer -> SetView ();
716 aViewer -> ClearView ();
717 aViewer -> DrawView ();
718 if (flush) aViewer -> ShowView ();
720 G4cout <<
"Viewer \"" << aViewer -> GetName ()
721 <<
"\" of scene handler \"" << aSceneHandler -> GetName ()
723 if (flush)
G4cout <<
"flushed";
724 else G4cout <<
"refreshed";
725 G4cout <<
" at request of scene \"" << sceneName
730 G4cout <<
"NOTE: The scene, \""
732 <<
"\", of viewer \""
733 << aViewer -> GetName ()
734 <<
"\"\n of scene handler \""
735 << aSceneHandler -> GetName ()
736 <<
"\" has changed. To see effect,"
737 <<
"\n \"/vis/viewer/select "
738 << aViewer -> GetShortName ()
739 <<
"\" and \"/vis/viewer/rebuild\"."
748 G4cout <<
"WARNING: G4VisCommandSceneNotifyHandlers: scene handler \""
750 <<
"\" has a null scene."
763 fpVisManager -> SetCurrentSceneHandler(pCurrentSceneHandler);
767 if (pCurrentSceneHandler) {
768 G4ViewerList& viewerList = pCurrentSceneHandler -> SetViewerList ();
769 const G4int nViewers = viewerList.size ();
771 pCurrentSceneHandler -> SetCurrentViewer (pCurrentViewer);
772 if (pCurrentViewer && pCurrentSceneHandler->
GetScene()) {
773 pCurrentViewer -> SetView ();
784 fpCommand -> SetGuidance (
"Selects a scene");
785 fpCommand -> SetGuidance
786 (
"Makes the scene current. \"/vis/scene/list\" to see"
787 "\n possible scene names.");
788 fpCommand -> SetParameterName (
"scene-name", omitable =
false);
805 G4int iScene, nScenes = sceneList.size ();
806 for (iScene = 0; iScene < nScenes; iScene++) {
807 if (sceneList [iScene] -> GetName () == selectName)
break;
809 if (iScene >= nScenes) {
811 G4cout <<
"WARNING: Scene \"" << selectName
812 <<
"\" not found - \"/vis/scene/list\" to see possibilities."
819 G4cout <<
"Scene \"" << selectName
820 <<
"\" selected." <<
G4endl;
virtual ~G4VisCommandSceneEndOfRunAction()
virtual ~G4VisCommandSceneEndOfEventAction()
G4VisCommandSceneCreate()
G4String GetCurrentValue(G4UIcommand *command)
void UpdateVisManagerScene(const G4String &sceneName="")
G4String GetCurrentValue(G4UIcommand *command)
G4String CurrentSceneName()
const G4ViewParameters & GetViewParameters() const
const G4String & GetName() const
const std::vector< const G4Event * > * GetEventVector() const
G4String GetCurrentValue(G4UIcommand *command)
std::vector< Model > & SetEndOfRunModelList()
G4bool GetRefreshAtEndOfEvent() const
virtual ~G4VisCommandSceneActivateModel()
const G4String & GetName() const
static Verbosity GetVerbosityValue(const G4String &)
const G4Run * GetCurrentRun() const
void SetNewValue(G4UIcommand *command, G4String newValue)
G4VisCommandSceneActivateModel()
G4GLOB_DLL std::ostream G4cout
void SetNewValue(G4UIcommand *command, G4String newValue)
G4String GetCurrentValue(G4UIcommand *command)
void SetNewValue(G4UIcommand *command, G4String newValue)
static G4bool ConvertToBool(const char *st)
void SetNewValue(G4UIcommand *command, G4String newValue)
virtual ~G4VVisCommandScene()
G4String GetCurrentValue(G4UIcommand *command)
void SetMaxNumberOfKeptEvents(G4int)
static G4MTRunManager * GetMasterRunManager()
G4VisCommandSceneNotifyHandlers()
G4bool GetRefreshAtEndOfRun() const
void ResetTransientsDrawnFlags()
void SetNewValue(G4UIcommand *command, G4String newValue)
G4bool IsMultithreadedApplication()
static G4RunManager * GetRunManager()
G4Scene * GetScene() const
G4String GetCurrentValue(G4UIcommand *command)
std::vector< Model > & SetRunDurationModelList()
std::vector< Model > & SetEndOfEventModelList()
G4VSceneHandler * GetCurrentSceneHandler() const
virtual ~G4VisCommandSceneSelect()
static Verbosity GetVerbosity()
G4VisCommandSceneEndOfEventAction()
G4VisCommandSceneSelect()
G4String GetCurrentValue(G4UIcommand *command)
virtual ~G4VisCommandSceneCreate()
void SetNewValue(G4UIcommand *command, G4String newValue)
G4VisCommandSceneEndOfRunAction()
virtual ~G4VisCommandSceneNotifyHandlers()
void SetNewValue(G4UIcommand *command, G4String newValue)
void SetRefreshAtEndOfRun(G4bool)
void SetMarkForClearingTransientStore(G4bool)
G4bool IsAutoRefresh() const
G4Scene * GetCurrentScene() const
void SetRefreshAtEndOfEvent(G4bool)
G4GLOB_DLL std::ostream G4cerr
virtual ~G4VisCommandSceneList()
static G4VisManager * fpVisManager