#include <G4VisCommandsViewer.hh>
Inheritance diagram for G4VisCommandViewerCreate:
Public Member Functions | |
G4VisCommandViewerCreate () | |
virtual | ~G4VisCommandViewerCreate () |
G4String | GetCurrentValue (G4UIcommand *command) |
void | SetNewValue (G4UIcommand *command, G4String newValue) |
Definition at line 144 of file G4VisCommandsViewer.hh.
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] |
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 }