00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 #ifndef G4VISMANAGER_HH
00081 #define G4VISMANAGER_HH
00082
00083 #include "G4VVisManager.hh"
00084
00085 #include "globals.hh"
00086 #include "G4GraphicsSystemList.hh"
00087 #include "G4ModelingParameters.hh"
00088 #include "G4NullModel.hh"
00089 #include "G4SceneHandlerList.hh"
00090 #include "G4SceneList.hh"
00091 #include "G4TrajectoriesModel.hh"
00092 #include "G4Transform3D.hh"
00093 #include "G4UImessenger.hh"
00094
00095 #include <iostream>
00096 #include <vector>
00097 #include <map>
00098
00099 class G4Scene;
00100 class G4UIcommand;
00101 class G4UImessenger;
00102 class G4VisStateDependent;
00103 class G4VTrajectoryModel;
00104 class G4VUserVisAction;
00105 template <typename> class G4VFilter;
00106 template <typename> class G4VisFilterManager;
00107 template <typename> class G4VisModelManager;
00108 template <typename> class G4VModelFactory;
00109 class G4Event;
00110
00111
00112 typedef G4VModelFactory<G4VTrajectoryModel> G4TrajDrawModelFactory;
00113 typedef G4VModelFactory<G4VFilter<G4VTrajectory> > G4TrajFilterFactory;
00114 typedef G4VModelFactory<G4VFilter<G4VHit> > G4HitFilterFactory;
00115 typedef G4VModelFactory<G4VFilter<G4VDigi> > G4DigiFilterFactory;
00116
00117 class G4VisManager: public G4VVisManager {
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 friend class G4RTSteppingAction;
00128 friend class G4RayTrajectory;
00129 friend class G4RayTracerSceneHandler;
00130 friend class G4RTMessenger;
00131 friend class G4OpenGLViewerMessenger;
00132 friend class G4OpenGLXmViewerMessenger;
00133 friend class G4HepRepFileSceneHandler;
00134
00135
00136 friend class G4VSceneHandler;
00137 friend class G4VViewer;
00138 friend class G4VisStateDependent;
00139 friend class G4VisCommandList;
00140
00141
00142 friend std::ostream& operator << (std::ostream&, const G4VGraphicsSystem&);
00143 friend std::ostream& operator << (std::ostream&, const G4VSceneHandler&);
00144
00145 public:
00146
00147 enum Verbosity {
00148 quiet,
00149 startup,
00150 errors,
00151 warnings,
00152 confirmations,
00153 parameters,
00154 all
00155 };
00156
00157
00158 protected:
00159
00160 G4VisManager (const G4String& verbosityString = "warnings");
00161
00162
00163
00164 public:
00165
00166 virtual ~G4VisManager ();
00167
00168 private:
00169
00170
00171
00172 G4VisManager (const G4VisManager&);
00173 G4VisManager& operator = (const G4VisManager&);
00174
00175 static G4VisManager* GetInstance ();
00176
00177
00178
00179
00180
00181
00182 public:
00183
00184 void Initialise ();
00185 void Initialize ();
00186
00187
00188
00189 void RegisterRunDurationUserVisAction
00190 (const G4String& name, G4VUserVisAction*,
00191 const G4VisExtent& = G4VisExtent::NullExtent);
00192 void RegisterEndOfEventUserVisAction
00193 (const G4String& name, G4VUserVisAction*,
00194 const G4VisExtent& = G4VisExtent::NullExtent);
00195 void RegisterEndOfRunUserVisAction
00196 (const G4String& name, G4VUserVisAction*,
00197 const G4VisExtent& = G4VisExtent::NullExtent);
00198
00199 G4bool RegisterGraphicsSystem (G4VGraphicsSystem*);
00200
00201
00202
00203
00204 void RegisterModelFactory(G4TrajDrawModelFactory* factory);
00205
00206
00207 void RegisterModel(G4VTrajectoryModel* model);
00208
00209
00210 void RegisterModelFactory(G4TrajFilterFactory* factory);
00211
00212
00213 void RegisterModel(G4VFilter<G4VTrajectory>* filter);
00214
00215
00216 void RegisterModelFactory(G4HitFilterFactory* factory);
00217
00218
00219 void RegisterModel(G4VFilter<G4VHit>* filter);
00220
00221
00222 void RegisterModelFactory(G4DigiFilterFactory* factory);
00223
00224
00225 void RegisterModel(G4VFilter<G4VDigi>* filter);
00226
00227
00228 void SelectTrajectoryModel(const G4String& model);
00229
00230
00231 void RegisterMessenger(G4UImessenger* messenger);
00232
00233
00235
00236
00237
00238
00239 void Draw (const G4Circle&,
00240 const G4Transform3D& objectTransformation = G4Transform3D());
00241
00242 void Draw (const G4NURBS&,
00243 const G4Transform3D& objectTransformation = G4Transform3D());
00244
00245 void Draw (const G4Polyhedron&,
00246 const G4Transform3D& objectTransformation = G4Transform3D());
00247
00248 void Draw (const G4Polyline&,
00249 const G4Transform3D& objectTransformation = G4Transform3D());
00250
00251 void Draw (const G4Polymarker&,
00252 const G4Transform3D& objectTransformation = G4Transform3D());
00253
00254 void Draw (const G4Scale&,
00255 const G4Transform3D& objectTransformation = G4Transform3D());
00256
00257 void Draw (const G4Square&,
00258 const G4Transform3D& objectTransformation = G4Transform3D());
00259
00260 void Draw (const G4Text&,
00261 const G4Transform3D& objectTransformation = G4Transform3D());
00262
00263 void Draw2D (const G4Circle&,
00264 const G4Transform3D& objectTransformation = G4Transform3D());
00265
00266 void Draw2D (const G4NURBS&,
00267 const G4Transform3D& objectTransformation = G4Transform3D());
00268
00269 void Draw2D (const G4Polyhedron&,
00270 const G4Transform3D& objectTransformation = G4Transform3D());
00271
00272 void Draw2D (const G4Polyline&,
00273 const G4Transform3D& objectTransformation = G4Transform3D());
00274
00275 void Draw2D (const G4Polymarker&,
00276 const G4Transform3D& objectTransformation = G4Transform3D());
00277
00278 void Draw2D (const G4Square&,
00279 const G4Transform3D& objectTransformation = G4Transform3D());
00280
00281 void Draw2D (const G4Text&,
00282 const G4Transform3D& objectTransformation = G4Transform3D());
00283
00285
00286
00287
00288
00289
00290
00291
00292 void Draw (const G4VHit&);
00293
00294 void Draw (const G4VDigi&);
00295
00296 void Draw (const G4VTrajectory&, G4int i_mode);
00297
00298
00299
00300
00301 void Draw (const G4LogicalVolume&, const G4VisAttributes&,
00302 const G4Transform3D& objectTransformation = G4Transform3D());
00303
00304 void Draw (const G4VPhysicalVolume&, const G4VisAttributes&,
00305 const G4Transform3D& objectTransformation = G4Transform3D());
00306
00307 void Draw (const G4VSolid&, const G4VisAttributes&,
00308 const G4Transform3D& objectTransformation = G4Transform3D());
00309
00311
00312
00313
00314
00315
00316
00317 void BeginDraw
00318 (const G4Transform3D& objectTransformation = G4Transform3D());
00319
00320 void EndDraw ();
00321
00322 void BeginDraw2D
00323 (const G4Transform3D& objectTransformation = G4Transform3D());
00324
00325 void EndDraw2D ();
00326
00328
00329
00330 void GeometryHasChanged ();
00331
00332
00333 void NotifyHandlers();
00334
00335
00336
00337
00338 void DispatchToModel(const G4VTrajectory&);
00339 void DispatchToModel(const G4VTrajectory&, G4int i_mode);
00340
00341
00342 G4bool FilterTrajectory(const G4VTrajectory&);
00343 G4bool FilterHit(const G4VHit&);
00344 G4bool FilterDigi(const G4VDigi&);
00345
00347
00348
00349 void CreateSceneHandler (G4String name = "");
00350
00351
00352 void CreateViewer (G4String name = "",G4String XGeometry = "");
00353
00354
00355 private:
00356
00357 void BeginOfRun ();
00358
00359 void BeginOfEvent ();
00360
00361 void EndOfEvent ();
00362
00363
00364
00365
00366 void EndOfRun ();
00367
00368 public:
00369
00371
00372
00373 void Enable();
00374 void Disable();
00375
00376
00377 const G4VTrajectoryModel* CurrentTrajDrawModel() const;
00378
00379 struct UserVisAction {
00380 UserVisAction(const G4String& name, G4VUserVisAction* pUserVisAction)
00381 :fName(name), fpUserVisAction(pUserVisAction) {}
00382 G4String fName;
00383 G4VUserVisAction* fpUserVisAction;
00384 };
00385 const std::vector<UserVisAction>& GetRunDurationUserVisActions () const;
00386 const std::vector<UserVisAction>& GetEndOfEventUserVisActions () const;
00387 const std::vector<UserVisAction>& GetEndOfRunUserVisActions () const;
00388 const std::map<G4VUserVisAction*,G4VisExtent>& GetUserVisActionExtents () const;
00389 G4VGraphicsSystem* GetCurrentGraphicsSystem () const;
00390 G4Scene* GetCurrentScene () const;
00391 G4VSceneHandler* GetCurrentSceneHandler () const;
00392 G4VViewer* GetCurrentViewer () const;
00393 const G4GraphicsSystemList& GetAvailableGraphicsSystems ();
00394
00395
00396
00397 const G4SceneHandlerList& GetAvailableSceneHandlers () const;
00398 const G4SceneList& GetSceneList () const;
00399 static Verbosity GetVerbosity ();
00400 G4bool GetTransientsDrawnThisRun () const;
00401 G4bool GetTransientsDrawnThisEvent () const;
00402 const G4Event* GetRequestedEvent () const;
00403 G4bool GetAbortReviewKeptEvents () const;
00404 const G4ViewParameters& GetDefaultViewParameters () const;
00405
00406 void SetUserAction
00407 (G4VUserVisAction* pVisAction,
00408 const G4VisExtent& = G4VisExtent::NullExtent);
00409 void SetUserActionExtent (const G4VisExtent&);
00410 void SetCurrentGraphicsSystem (G4VGraphicsSystem*);
00411 void SetCurrentScene (G4Scene*);
00412 void SetCurrentSceneHandler (G4VSceneHandler*);
00413 void SetCurrentViewer (G4VViewer*);
00414 G4SceneHandlerList& SetAvailableSceneHandlers ();
00415 G4SceneList& SetSceneList ();
00416 void SetVerboseLevel (G4int);
00417 void SetVerboseLevel (const G4String&);
00418 void SetVerboseLevel (Verbosity);
00419 void SetEventRefreshing (G4bool);
00420 void ResetTransientsDrawnFlags ();
00421
00422 void SetRequestedEvent (const G4Event*);
00423 void SetAbortReviewKeptEvents (G4bool);
00424 void SetDefaultViewParameters (const G4ViewParameters&);
00425
00427
00428
00429 G4String ViewerShortName (const G4String& viewerName) const;
00430
00431
00432
00433 G4VViewer* GetViewer (const G4String& viewerName) const;
00434
00435
00436
00437 static Verbosity GetVerbosityValue(const G4String&);
00438
00439
00440 static Verbosity GetVerbosityValue(G4int);
00441
00442
00443
00444 static G4String VerbosityString(Verbosity);
00445
00446
00447 static std::vector<G4String> VerbosityGuidanceStrings;
00448
00449
00450 protected:
00451
00452 virtual void RegisterGraphicsSystems () = 0;
00453
00454
00455
00456 virtual void RegisterModelFactories();
00457
00458
00459 void RegisterMessengers ();
00460
00461 const G4int fVerbose;
00462
00463
00464
00465
00466
00467 void PrintAvailableGraphicsSystems () const;
00468
00469 private:
00470
00471
00472
00473 template <class T> void DrawT
00474 (const T& graphics_primitive, const G4Transform3D& objectTransform);
00475 template <class T> void DrawT2D
00476 (const T& graphics_primitive, const G4Transform3D& objectTransform);
00477
00478 void PrintAvailableModels (Verbosity) const;
00479 void PrintAvailableColours (Verbosity) const;
00480 void PrintAvailableUserVisActions (Verbosity) const;
00481 void PrintInvalidPointers () const;
00482 G4bool IsValidView ();
00483
00484 void ClearTransientStoreIfMarked();
00485
00486
00487
00488 static G4VisManager* fpInstance;
00489 G4bool fInitialised;
00490 std::vector<UserVisAction> fRunDurationUserVisActions;
00491 std::vector<UserVisAction> fEndOfEventUserVisActions;
00492 std::vector<UserVisAction> fEndOfRunUserVisActions;
00493 std::map<G4VUserVisAction*,G4VisExtent> fUserVisActionExtents;
00494 G4VGraphicsSystem* fpGraphicsSystem;
00495 G4Scene* fpScene;
00496 G4VSceneHandler* fpSceneHandler;
00497 G4VViewer* fpViewer;
00498 G4GraphicsSystemList fAvailableGraphicsSystems;
00499 G4SceneList fSceneList;
00500 G4SceneHandlerList fAvailableSceneHandlers;
00501 static Verbosity fVerbosity;
00502 std::vector<G4UImessenger*> fMessengerList;
00503 std::vector<G4UIcommand*> fDirectoryList;
00504 G4VisStateDependent* fpStateDependent;
00505 G4TrajectoriesModel dummyTrajectoriesModel;
00506 G4bool fEventRefreshing;
00507 G4bool fTransientsDrawnThisRun;
00508 G4bool fTransientsDrawnThisEvent;
00509 G4bool fEventKeepingSuspended;
00510 G4bool fKeptLastEvent;
00511 const G4Event* fpRequestedEvent;
00512 G4bool fAbortReviewKeptEvents;
00513 G4ViewParameters fDefaultViewParameters;
00514 G4bool fIsDrawGroup;
00515 G4int fDrawGroupNestingDepth;
00516
00517
00518 G4VisModelManager<G4VTrajectoryModel>* fpTrajDrawModelMgr;
00519
00520
00521 G4VisFilterManager<G4VTrajectory>* fpTrajFilterMgr;
00522
00523
00524 G4VisFilterManager<G4VHit>* fpHitFilterMgr;
00525
00526
00527 G4VisFilterManager<G4VDigi>* fpDigiFilterMgr;
00528
00529 };
00530
00531 #include "G4VisManager.icc"
00532
00533 #endif