G4VisCommandViewerCreate Class Reference

#include <G4VisCommandsViewer.hh>

Inheritance diagram for G4VisCommandViewerCreate:

G4VVisCommandViewer G4VVisCommand G4UImessenger

Public Member Functions

 G4VisCommandViewerCreate ()
virtual ~G4VisCommandViewerCreate ()
G4String GetCurrentValue (G4UIcommand *command)
void SetNewValue (G4UIcommand *command, G4String newValue)

Detailed Description

Definition at line 144 of file G4VisCommandsViewer.hh.


Constructor & Destructor Documentation

G4VisCommandViewerCreate::G4VisCommandViewerCreate (  ) 

Definition at line 589 of file G4VisCommandsViewer.cc.

References G4UIparameter::SetDefaultValue(), and G4UIparameter::SetGuidance().

00589                                                    : fId (0) {
00590   G4bool omitable;
00591   fpCommand = new G4UIcommand ("/vis/viewer/create", this);
00592   fpCommand -> SetGuidance
00593     ("Creates a viewer for the specified scene handler.");
00594   fpCommand -> SetGuidance
00595     ("Default scene handler is the current scene handler.  Invents a name"
00596      "\nif not supplied.  (Note: the system adds information to the name"
00597      "\nfor identification - only the characters up to the first blank are"
00598      "\nused for removing, selecting, etc.)  This scene handler and viewer"
00599      "\nbecome current.");
00600   G4UIparameter* parameter;
00601   parameter = new G4UIparameter ("scene-handler", 's', omitable = true);
00602   parameter -> SetCurrentAsDefault (true);
00603   fpCommand -> SetParameter (parameter);
00604   parameter = new G4UIparameter ("viewer-name", 's', omitable = true);
00605   parameter -> SetCurrentAsDefault (true);
00606   fpCommand -> SetParameter (parameter);
00607   parameter = new G4UIparameter ("window-size-hint", 's', omitable = true);
00608   parameter->SetGuidance
00609     ("integer (pixels) for square window placed by window manager or"
00610      " X-Windows-type geometry string, e.g. 600x600-100+100");
00611   parameter->SetDefaultValue("600");
00612   fpCommand -> SetParameter (parameter);
00613 }

G4VisCommandViewerCreate::~G4VisCommandViewerCreate (  )  [virtual]

Definition at line 615 of file G4VisCommandsViewer.cc.

00615                                                      {
00616   delete fpCommand;
00617 }


Member Function Documentation

G4String G4VisCommandViewerCreate::GetCurrentValue ( G4UIcommand command  )  [virtual]

Reimplemented from G4UImessenger.

Definition at line 633 of file G4VisCommandsViewer.cc.

References G4VVisCommand::fpVisManager.

00633                                                                 {
00634   G4String currentValue;
00635   G4VSceneHandler* currentSceneHandler =
00636     fpVisManager -> GetCurrentSceneHandler ();
00637   if (currentSceneHandler) {
00638     currentValue = currentSceneHandler -> GetName ();
00639   }
00640   else {
00641     currentValue = "none";
00642   }
00643   currentValue += ' ';
00644   currentValue += '"';
00645   currentValue += NextName ();
00646   currentValue += '"';
00647 
00648   currentValue += " 600";  // Default number of pixels for window size hint.
00649 
00650   return currentValue;
00651 }

void G4VisCommandViewerCreate::SetNewValue ( G4UIcommand command,
G4String  newValue 
) [virtual]

Reimplemented from G4UImessenger.

Definition at line 653 of file G4VisCommandsViewer.cc.

References G4UImanager::ApplyCommand(), G4String::both, G4VisManager::confirmations, G4VisManager::errors, G4VVisCommand::fpVisManager, G4cout, G4endl, G4UImanager::GetUIpointer(), G4VisManager::GetVerbosity(), G4VViewer::GetViewParameters(), G4ViewParameters::IsAutoRefresh(), G4String::strip(), and G4VisManager::warnings.

00653                                                                            {
00654 
00655   G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
00656 
00657   G4String sceneHandlerName, newName;
00658   G4String windowSizeHintString;
00659   std::istringstream is (newValue);
00660   is >> sceneHandlerName;
00661 
00662   // Now need to handle the possibility that the second string
00663   // contains embedded blanks within quotation marks...
00664   char c;
00665   while (is.get(c) && c == ' '){}
00666   if (c == '"') {
00667     while (is.get(c) && c != '"') {newName += c;}
00668   }
00669   else {
00670     newName += c;
00671     while (is.get(c) && c != ' ') {newName += c;}
00672   }
00673   newName = newName.strip (G4String::both, ' ');
00674   newName = newName.strip (G4String::both, '"');
00675 
00676   // Now get window size hint...
00677   is >> windowSizeHintString;
00678 
00679   const G4SceneHandlerList& sceneHandlerList =
00680     fpVisManager -> GetAvailableSceneHandlers ();
00681   G4int nHandlers = sceneHandlerList.size ();
00682   if (nHandlers <= 0) {
00683     if (verbosity >= G4VisManager::errors) {
00684       G4cout <<
00685         "ERROR: G4VisCommandViewerCreate::SetNewValue: no scene handlers."
00686         "\n  Create a scene handler with \"/vis/sceneHandler/create\""
00687              << G4endl;
00688     }
00689     return;
00690   }
00691 
00692   G4int iHandler;
00693   for (iHandler = 0; iHandler < nHandlers; iHandler++) {
00694     if (sceneHandlerList [iHandler] -> GetName () == sceneHandlerName) break;
00695   }
00696 
00697   if (iHandler < 0 || iHandler >= nHandlers) {
00698     // Invalid command line argument or none.
00699     // This shouldn't happen!!!!!!
00700     if (verbosity >= G4VisManager::errors) {
00701       G4cout << "G4VisCommandViewerCreate::SetNewValue:"
00702         " invalid scene handler specified."
00703             << G4endl;
00704     }
00705     return;
00706   }
00707 
00708   // Valid index.  Set current scene handler and graphics system in
00709   // preparation for creating viewer.
00710   G4VSceneHandler* sceneHandler = sceneHandlerList [iHandler];
00711   if (sceneHandler != fpVisManager -> GetCurrentSceneHandler ()) {
00712     fpVisManager -> SetCurrentSceneHandler (sceneHandler);
00713   }
00714 
00715   // Now deal with name of viewer.
00716   G4String nextName = NextName ();
00717   if (newName == "") {
00718     newName = nextName;
00719   }
00720   if (newName == nextName) fId++;
00721   G4String newShortName = fpVisManager -> ViewerShortName (newName);
00722 
00723   for (G4int ih = 0; ih < nHandlers; ih++) {
00724     G4VSceneHandler* sh = sceneHandlerList [ih];
00725     const G4ViewerList& viewerList = sh -> GetViewerList ();
00726     for (size_t iViewer = 0; iViewer < viewerList.size (); iViewer++) {
00727       if (viewerList [iViewer] -> GetShortName () == newShortName ) {
00728         if (verbosity >= G4VisManager::errors) {
00729           G4cout << "ERROR: Viewer \"" << newShortName << "\" already exists."
00730                  << G4endl;
00731         }
00732         return;
00733       }
00734     }
00735   }
00736 
00737   // WindowSizeHint and XGeometryString are picked up from the vis
00738   // manager in the G4VViewer constructor. In G4VisManager, after Viewer
00739   // creation, we will store theses parameters in G4ViewParameters.
00740 
00741   fpVisManager -> CreateViewer (newName,windowSizeHintString);
00742 
00743   G4VViewer* newViewer = fpVisManager -> GetCurrentViewer ();
00744   if (newViewer && newViewer -> GetName () == newName) {
00745     if (verbosity >= G4VisManager::confirmations) {
00746       G4cout << "New viewer \"" << newName << "\" created." << G4endl;
00747     }
00748   }
00749   else {
00750     if (verbosity >= G4VisManager::errors) {
00751       if (newViewer) {
00752         G4cout << "ERROR: New viewer doesn\'t match!!!  Curious!!" << G4endl;
00753       } else {
00754         G4cout << "WARNING: No viewer created." << G4endl;
00755       }
00756     }
00757   }
00758   // Refresh if appropriate...
00759   if (newViewer) {
00760     if (newViewer->GetViewParameters().IsAutoRefresh()) {
00761       G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/refresh");
00762     }
00763     else {
00764       if (verbosity >= G4VisManager::warnings) {
00765         G4cout << "Issue /vis/viewer/refresh or flush to see effect."
00766                << G4endl;
00767       }
00768     }
00769   }
00770 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:53:47 2013 for Geant4 by  doxygen 1.4.7