source: trunk/source/visualization/management/src/G4VisCommands.cc@ 1176

Last change on this file since 1176 was 944, checked in by garnier, 17 years ago

mise a jour des tags

  • Property svn:mime-type set to text/cpp
File size: 12.0 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: G4VisCommands.cc,v 1.24 2009/03/09 12:42:00 allison Exp $
28// GEANT4 tag $Name: $
29
30// /vis/ top level commands - John Allison 5th February 2001
31
32#include "G4VisCommands.hh"
33
34#include "G4VisManager.hh"
35#include "G4UImanager.hh"
36#include "G4UIcmdWithABool.hh"
37#include "G4UIcmdWithAString.hh"
38#include "G4UIcmdWithoutParameter.hh"
39#include "G4RunManager.hh"
40#include "G4Run.hh"
41#include "G4UIsession.hh"
42
43////////////// /vis/abortReviewKeptEvents /////////////////////////////
44
45G4VisCommandAbortReviewKeptEvents::G4VisCommandAbortReviewKeptEvents () {
46 G4bool omitable;
47
48 fpCommand = new G4UIcmdWithABool("/vis/abortReviewKeptEvents", this);
49 fpCommand -> SetGuidance("Abort review of kept events.");
50 fpCommand -> SetParameterName("abort", omitable=true);
51 fpCommand -> SetDefaultValue(true);
52}
53
54G4VisCommandAbortReviewKeptEvents::~G4VisCommandAbortReviewKeptEvents () {
55 delete fpCommand;
56}
57
58G4String G4VisCommandAbortReviewKeptEvents::GetCurrentValue (G4UIcommand*) {
59 return G4String();
60}
61
62void G4VisCommandAbortReviewKeptEvents::SetNewValue (G4UIcommand*,
63 G4String newValue) {
64 fpVisManager->SetAbortReviewKeptEvents(G4UIcommand::ConvertToBool(newValue));
65 G4cout << "Type \"continue\" to complete the abort." << G4endl;
66}
67
68////////////// /vis/enable ///////////////////////////////////////
69
70G4VisCommandEnable::G4VisCommandEnable () {
71 G4bool omitable;
72
73 fpCommand = new G4UIcmdWithABool("/vis/enable", this);
74 fpCommand -> SetGuidance("Enables/disables visualization system.");
75 fpCommand -> SetParameterName("enabled", omitable=true);
76 fpCommand -> SetDefaultValue(true);
77
78 fpCommand1 = new G4UIcmdWithoutParameter("/vis/disable", this);
79 fpCommand1 -> SetGuidance("Disables visualization system.");
80}
81
82G4VisCommandEnable::~G4VisCommandEnable () {
83 delete fpCommand;
84 delete fpCommand1;
85}
86
87G4String G4VisCommandEnable::GetCurrentValue (G4UIcommand*) {
88 return G4String();
89}
90
91void G4VisCommandEnable::SetNewValue (G4UIcommand* command,
92 G4String newValue) {
93 if (command == fpCommand) {
94 G4bool enable = G4UIcommand::ConvertToBool(newValue);
95 if (enable) fpVisManager->Enable(); // Printing is in vis manager.
96 else fpVisManager->Disable(); // Printing is in vis manager.
97 } else fpVisManager->Disable(); // Printing is in vis manager.
98 // Note: Printing is in vis manager.
99}
100
101////////////// /vis/initialize ///////////////////////////////////////
102
103G4VisCommandInitialize::G4VisCommandInitialize ()
104{
105 fpCommand = new G4UIcmdWithoutParameter("/vis/initialize", this);
106 fpCommand -> SetGuidance("Initialise visualisation manager.");
107}
108
109G4VisCommandInitialize::~G4VisCommandInitialize () {
110 delete fpCommand;
111}
112
113void G4VisCommandInitialize::SetNewValue (G4UIcommand*,
114 G4String) {
115 fpVisManager->Initialize();
116}
117
118////////////// /vis/list ///////////////////////////////////////
119
120G4VisCommandList::G4VisCommandList ()
121{
122 G4bool omitable;
123
124 fpCommand = new G4UIcmdWithAString("/vis/list", this);
125 fpCommand -> SetGuidance("Lists visualization parameters.");
126 fpCommand -> SetParameterName("verbosity", omitable=true);
127 fpCommand -> SetDefaultValue("warnings");
128}
129
130G4VisCommandList::~G4VisCommandList ()
131{
132 delete fpCommand;
133}
134
135G4String G4VisCommandList::GetCurrentValue (G4UIcommand*)
136{
137 return "";
138}
139
140void G4VisCommandList::SetNewValue (G4UIcommand*, G4String newValue)
141{
142 G4String& verbosityString = newValue;
143 G4VisManager::Verbosity verbosity =
144 fpVisManager->GetVerbosityValue(verbosityString);
145
146 fpVisManager->PrintAvailableGraphicsSystems();
147 G4cout << G4endl;
148 fpVisManager->PrintAvailableModels(verbosity);
149 G4cout << G4endl;
150 G4UImanager* UImanager = G4UImanager::GetUIpointer();
151 UImanager->ApplyCommand(G4String("/vis/viewer/list ! ") + verbosityString);
152 if (verbosity < G4VisManager::parameters)
153 G4cout <<
154 "\nTo get more information, \"/vis/list all all\" or use individual commands"
155 "\n such as (use \"ls\" or \"help\"):"
156 "\n /vis/viewer/list"
157 "\n /vis/modeling/trajectories/list"
158 "\n /vis/filtering/trajectories/list"
159 << G4endl;
160}
161
162////////////// /vis/reviewKeptEvents ///////////////////////////////////////
163
164G4VisCommandReviewKeptEvents::G4VisCommandReviewKeptEvents ()
165{
166 G4bool omitable;
167
168 fpCommand = new G4UIcmdWithAString("/vis/reviewKeptEvents", this);
169 fpCommand -> SetGuidance("Review kept events.");
170 fpCommand -> SetGuidance
171 ("If a macro file is specified, it is executed for each event.");
172 fpCommand -> SetGuidance(
173 "If a macro file is not specified, each event is drawn to the current"
174 "\nviewer. After each event, the session is paused. The user may issue"
175 "\nany allowed command. Then enter \"cont[inue]\" to continue to the next"
176 "\nevent."
177 "\nUseful commands might be:"
178 "\n \"/vis/viewer/...\" to change the view (zoom, set/viewpoint,...)."
179 "\n \"/vis/oglx/printEPS\" to get hard copy."
180 "\n \"/vis/open\" to get alternative viewer."
181 "\n \"/vis/abortReviewKeptEvents\", then \"cont[inue]\", to abort.");
182 fpCommand -> SetParameterName("macro-file-name", omitable=true);
183 fpCommand -> SetDefaultValue("");
184}
185
186G4VisCommandReviewKeptEvents::~G4VisCommandReviewKeptEvents ()
187{
188 delete fpCommand;
189}
190
191G4String G4VisCommandReviewKeptEvents::GetCurrentValue (G4UIcommand*)
192{
193 return "";
194}
195
196void G4VisCommandReviewKeptEvents::SetNewValue (G4UIcommand*, G4String newValue)
197{
198 static bool reviewing = false;
199 if (reviewing) {
200 G4cout <<
201 "\"/vis/reviewKeptEvents\" not allowed within an already started review."
202 "\n No action taken."
203 << G4endl;
204 return;
205 }
206
207 G4String& macroFileName = newValue;
208 G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity();
209
210 G4RunManager* runManager = G4RunManager::GetRunManager();
211 const G4Run* run = runManager? runManager->GetCurrentRun(): 0;
212 const std::vector<const G4Event*>* events = run? run->GetEventVector(): 0;
213 size_t nKeptEvents = events? events->size(): 0;
214
215 if (!nKeptEvents) {
216 if (verbosity >= G4VisManager::errors) {
217 G4cout <<
218 "ERROR: G4VisCommandReviewKeptEvents::SetNewValue: No kept events,"
219 "\n or kept events not accessible."
220 << G4endl;
221 }
222 return;
223 }
224
225 G4VViewer* viewer = fpVisManager->GetCurrentViewer();
226 if (!viewer) {
227 if (verbosity >= G4VisManager::errors) {
228 G4cout <<
229 "ERROR: No current viewer - \"/vis/viewer/list\" to see possibilities."
230 << G4endl;
231 }
232 return;
233 }
234
235 G4Scene* pScene = fpVisManager->GetCurrentScene();
236 if (!pScene) {
237 if (verbosity >= G4VisManager::errors) {
238 G4cout << "ERROR: No current scene. Please create one." << G4endl;
239 }
240 return;
241 }
242
243 G4UImanager* UImanager = G4UImanager::GetUIpointer();
244 G4int keepVerbose = UImanager->GetVerboseLevel();
245 G4int newVerbose(0);
246 if (keepVerbose >= 2 || verbosity >= G4VisManager::confirmations)
247 newVerbose = 2;
248 UImanager->SetVerboseLevel(newVerbose);
249
250 // Event by event refreshing...
251 reviewing = true;
252 G4bool currentRefreshAtEndOfEvent = pScene->GetRefreshAtEndOfEvent();
253 pScene->SetRefreshAtEndOfEvent(true);
254 if (macroFileName.empty()) {
255
256 // Draw to viewer and pause session...
257 G4UIsession* session = UImanager->GetSession();
258 for (size_t i = 0; i < nKeptEvents; ++i) {
259 const G4Event* event = (*events)[i];
260 if (verbosity >= G4VisManager::warnings) {
261 G4cout << "Drawing event : " << event->GetEventID() <<
262 ". At EndOfEvent, enter any command, then \"cont[inue]\"..."
263 << G4endl;
264 static G4bool first = true;
265 if (first) {
266 first = false;
267 G4cout <<
268 " Useful commands might be:"
269 "\n \"/vis/viewer/...\" to change the view (zoom, set/viewpoint,...)."
270 "\n \"/vis/oglx/printEPS\" to get hard copy."
271 "\n \"/vis/open\" to get alternative viewer."
272 "\n \"/vis/abortReviewKeptEvents\", then \"cont[inue]\", to abort."
273 << G4endl;
274 }
275 }
276 fpVisManager->SetRequestedEvent(event);
277 UImanager->ApplyCommand("/vis/viewer/rebuild");
278 /* The above command forces a rebuild of the scene, including
279 the detector. This is fine for "immediate" viewers - a
280 refresh requires a rebuild anyway. But for "stored mode"
281 viewers, you could, in principle, avoid a rebuild of the
282 detector with something like the following:
283 sceneHandler->ClearTransientStore();
284 viewer->DrawView();
285 sceneHandler->DrawEvent(event);
286 but this causes mayhem for "immediate" viewers because
287 ClearTransientStore issues a DrawView and some curious sort
288 of recursion takes place. For "stored" viewers, the event
289 gets drawn but not the eventID, so something odd is happening
290 there too. This needs further investigation - enhanced
291 features or a complete re-think.
292 */
293 UImanager->ApplyCommand("/vis/viewer/flush");
294 session->PauseSessionStart("EndOfEvent");
295 fpVisManager->SetRequestedEvent(0);
296 if (fpVisManager->GetAbortReviewKeptEvents()) break;
297 }
298 fpVisManager->SetAbortReviewKeptEvents(false);
299
300 } else {
301
302 // Execute macro file...
303 for (size_t i = 0; i < nKeptEvents; ++i) {
304 const G4Event* event = (*events)[i];
305 if (verbosity >= G4VisManager::warnings) {
306 G4cout << "Drawing event : " << event->GetEventID()
307 << " with macro file \"" << macroFileName << G4endl;
308 }
309 fpVisManager->SetRequestedEvent(event);
310 UImanager->ApplyCommand("/control/execute " + macroFileName);
311 fpVisManager->SetRequestedEvent(0);
312 }
313 }
314 pScene->SetRefreshAtEndOfEvent(currentRefreshAtEndOfEvent);
315 reviewing = false;
316
317 UImanager->SetVerboseLevel(keepVerbose);
318}
319
320////////////// /vis/verbose ///////////////////////////////////////
321
322G4VisCommandVerbose::G4VisCommandVerbose () {
323 G4bool omitable;
324
325 fpCommand = new G4UIcmdWithAString("/vis/verbose", this);
326 for (size_t i = 0; i < G4VisManager::VerbosityGuidanceStrings.size(); ++i) {
327 fpCommand -> SetGuidance(G4VisManager::VerbosityGuidanceStrings[i]);
328 }
329 fpCommand -> SetParameterName("verbosity", omitable=true);
330 fpCommand -> SetDefaultValue("warnings");
331}
332
333G4VisCommandVerbose::~G4VisCommandVerbose () {
334 delete fpCommand;
335}
336
337G4String G4VisCommandVerbose::GetCurrentValue (G4UIcommand*) {
338 return G4String();
339}
340
341void G4VisCommandVerbose::SetNewValue (G4UIcommand*,
342 G4String newValue) {
343 G4VisManager::Verbosity verbosity =
344 fpVisManager->GetVerbosityValue(newValue);
345 fpVisManager->SetVerboseLevel(verbosity);
346 // Always prints whatever the verbosity...
347 G4cout << "Visualization verbosity changed to "
348 << G4VisManager::VerbosityString(verbosity) << G4endl;
349}
Note: See TracBrowser for help on using the repository browser.