Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4VViewer.hh
Go to the documentation of this file.
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//
28//
29// John Allison 27th March 1996
30//
31// Class description
32//
33// Abstract interface class for graphics viewers.
34
35#ifndef G4VVIEWER_HH
36#define G4VVIEWER_HH
37
38#include "globals.hh"
39
40#include "G4ViewParameters.hh"
42
43class G4VSceneHandler;
44
45class G4VViewer {
46
47public: // With description
48
49 friend std::ostream& operator << (std::ostream& os, const G4VViewer& v);
50
51 G4VViewer (G4VSceneHandler&, G4int id, const G4String& name = "");
52 virtual ~G4VViewer ();
53
54 virtual void Initialise ();
55 // Called immediately after construction for those operations that
56 // must await complete contruction of viewer and all its bases. For
57 // example, if this class (G4VViewer) is inherited virtually, as in
58 // the OpenGL sub-category, it will not be fully constructed until
59 // *after* the the derived viewer (this is the rule about order of
60 // construction for virtual inheritance), so the derived viewer may
61 // not use information in G4VViewer in its contructor. Hence such
62 // code must be in Initialise().
63
64 //////////////////////////////////////////////////////////////
65 // View manipulation functions.
66
67 virtual void ResetView ();
68 // Reset view parameters to default, including sub-class parameters, if any.
69 // The sub-class should always invoke the base class implementation, i.e:
70 // virtual void SubClass::ResetView () {
71 // G4VViewer::ResetView();
72 // // Then reset sub-class parameters
73 // ...
74
75 virtual void SetView () = 0;
76 // Take view parameters and work out model/view transformation,
77 // projection transformation, lighting, etc.
78
79 virtual void ClearView () = 0;
80 // Clear screen/viewing buffers.
81
82 virtual void DrawView () = 0;
83 // Draw view of the scene currently attached to the scene handler -
84 // see example of a minimal function at end of this file.
85
86 void RefreshView ();
87 // Simply invokes SetView, ClearView, DrawView.
88
89 virtual void ShowView ();
90 // Show view (for graphics systems which require to process
91 // all drawn objects before finalising the view).
92
93 virtual void FinishView ();
94 // Called at the end of drawing scene. Used to flush streams, or
95 // swap buffers. (Perhaps it is inappropriately named, perhaps its
96 // function could be incorporated into EndModeling (). It marks the
97 // end of scene drawing; be aware hits and digi drawing may Follow.
98 // It is not yet the end of all drawing; that is signalled by
99 // ShowView ().)
100
101 std::vector<G4ThreeVector> ComputeFlyThrough(G4Vector3D*);
102
103#ifdef G4MULTITHREADED
104 // Note: the order of calling of MovingToVisSubThread and SwitchToVisSubThread
105 // is undefined, so you may need to implement mutexes to ensure your preferred
106 // order - see, e.g., G4OpenGLQtViewer. To summarise, the order of calling is
107 // as follows - see G4VisManager.cc.
108 // DoneWithMasterThread
109 // MovingToVisSubThread ) or ( SwitchToVisSubThread
110 // SwitchToVisSubThread ) ( MovingToVisSubThread
111 // DoneWithVisSubThread
112 // MovingToMasterThread
113 // SwitchToMasterThread
114
115 // Called on the master thread before starting the vis sub-thread.
116 virtual void DoneWithMasterThread ();
117
118 // Called on the master thread after starting the vis sub-thread.
119 virtual void MovingToVisSubThread ();
120
121 // Called on the vis sub-thread at start of vis sub-thread.
122 virtual void SwitchToVisSubThread ();
123
124 // Called on the vis sub-thread when all events have been processed.
125 virtual void DoneWithVisSubThread ();
126
127 // Called on the vis sub-thread when all events have been processed.
128 virtual void MovingToMasterThread ();
129
130 // Called on the master thread after the vis sub-thread has terminated.
131 virtual void SwitchToMasterThread ();
132#endif
133
134 //////////////////////////////////////////////////////////////
135 // Access functions.
136 const G4String& GetName () const;
137 const G4String& GetShortName () const;
138 void SetName (const G4String&);
139 G4int GetViewId () const;
144
145 virtual const std::vector<G4ModelingParameters::VisAttributesModifier>*
147 // So that privately accumulated vis attributes modifiers may be
148 // concatenated with the standard vis attributes modifiers for commands
149 // such as /vis/viewer/set/all and /vis/viewer/save.
150
151 void SetViewParameters (const G4ViewParameters& vp);
153
154 //////////////////////////////////////////////////////////////
155 // Public utility functions.
156
158 (const G4VisAttributes*) const;
159
161 // Sets individual need-visit flag.
162
163 void NeedKernelVisit ();
164 // Flags all views the need to re-visit the GEANT4 kernel to refresh
165 // the scene.
166
167 void ProcessView ();
168 // Used by DrawView (). Invokes SetView (). The basic logic is here.
169
170protected:
171
172 //////////////////////////////////////////////////////////////
173 // Protected utility functions.
174
175 void SetTouchable
176 (const std::vector<G4PhysicalVolumeModel::G4PhysicalVolumeNodeID>& fullPath);
177 // Set the touchable for /vis/touchable/set/... commands.
178
180 (const std::vector<G4PhysicalVolumeModel::G4PhysicalVolumeNodeID>& fullPath,
181 G4bool visibility);
182 // Set the touchable visibility attribute.
183 // Changes the Vis Attribute Modifiers WITHOUT triggering a rebuild.
184
186 (const std::vector<G4PhysicalVolumeModel::G4PhysicalVolumeNodeID>& fullPath,
187 const G4Colour&);
188 // Set the touchable colour attribute.
189 // Changes the Vis Attribute Modifiers WITHOUT triggering a rebuild.
190
192 {
193 public:
194
195 // Constructors and destructor
196 G4Spline();
197 ~G4Spline();
198
199 // Operations
200 void AddSplinePoint(const G4Vector3D& v);
201 G4Vector3D GetInterpolatedSplinePoint(G4float t); // t = 0...1; 0=vp[0] ... 1=vp[max]
203 G4Vector3D GetPoint(int);
204 // method for computing the Catmull-Rom parametric equation
205 // given a time (t) and a vector quadruple (p1,p2,p3,p4).
206 G4Vector3D CatmullRom_Eq(G4float t, const G4Vector3D& p1, const G4Vector3D& p2,
207 const G4Vector3D& p3, const G4Vector3D& p4);
208
209 private:
210 std::vector<G4Vector3D> vp;
211 G4float delta_t;
212 };
213
214 //////////////////////////////////////////////////////////////
215 // Data members
216 G4VSceneHandler& fSceneHandler; // Abstract scene for this view.
217 G4int fViewId; // Id of this instance.
219 G4String fShortName; // Up to first ' ' character, if any.
220 G4ViewParameters fVP; // View parameters.
221 G4ViewParameters fDefaultVP; // Default view parameters.
222 G4double fKernelVisitElapsedTimeSeconds = 999.; // Default to a large number
223 // Note: fKernelVisitElapsedTimeSeconds is measured in ProcessView().
224
225 //////////////////////////////////////////////////////////////
226 // Other parameters.
227 G4bool fNeedKernelVisit; // See DrawView() for comments.
228};
229
230#include "G4VViewer.icc"
231
232/*********************************************
233
234Here is a minimal DrawView () as it might be implemented in the
235concrete viewer.
236
237void G4VViewer::DrawView () { // Default - concrete view usually overrides.
238
239 // First, a view should decide when to re-visit the G4 kernel.
240 // Sometimes it might not be necessary, e.g., if the scene is stored
241 // in a graphical database (e.g., OpenGL's display lists) and only
242 // the viewing angle has changed. But graphics systems without a
243 // graphical database will always need to visit the G4 kernel.
244
245 NeedKernelVisit (); // Default is - always visit G4 kernel.
246 // Note: this routine sets the fNeedKernelVisit flag of *all* the views of
247 // the scene.
248
249 ProcessView (); // The basic logic is here.
250
251 // Then a view may have more to do, e.g., display the graphical
252 // database. That code should come here before finally...
253
254 FinishView (); // Flush streams and/or swap buffers.
255}
256
257*********************************************/
258
259#endif
float G4float
Definition: G4Types.hh:84
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4Vector3D CatmullRom_Eq(G4float t, const G4Vector3D &p1, const G4Vector3D &p2, const G4Vector3D &p3, const G4Vector3D &p4)
Definition: G4VViewer.cc:399
G4Vector3D GetPoint(int)
Definition: G4VViewer.cc:419
void AddSplinePoint(const G4Vector3D &v)
Definition: G4VViewer.cc:412
G4Vector3D GetInterpolatedSplinePoint(G4float t)
Definition: G4VViewer.cc:429
void SetTouchable(const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > &fullPath)
Definition: G4VViewer.cc:131
const G4String & GetName() const
G4bool fNeedKernelVisit
Definition: G4VViewer.hh:227
const G4VisAttributes * GetApplicableVisAttributes(const G4VisAttributes *) const
void SetName(const G4String &)
Definition: G4VViewer.cc:74
virtual void DrawView()=0
friend std::ostream & operator<<(std::ostream &os, const G4VViewer &v)
Definition: G4VViewer.cc:380
void SetDefaultViewParameters(const G4ViewParameters &vp)
virtual void Initialise()
const G4ViewParameters & GetViewParameters() const
void ProcessView()
Definition: G4VViewer.cc:107
G4VSceneHandler & fSceneHandler
Definition: G4VViewer.hh:216
G4double GetKernelVisitElapsedTimeSeconds() const
G4String fShortName
Definition: G4VViewer.hh:219
void SetNeedKernelVisit(G4bool need)
G4double fKernelVisitElapsedTimeSeconds
Definition: G4VViewer.hh:222
virtual ~G4VViewer()
Definition: G4VViewer.cc:70
virtual const std::vector< G4ModelingParameters::VisAttributesModifier > * GetPrivateVisAttributesModifiers() const
G4String fName
Definition: G4VViewer.hh:218
void NeedKernelVisit()
Definition: G4VViewer.cc:80
std::vector< G4ThreeVector > ComputeFlyThrough(G4Vector3D *)
Definition: G4VViewer.cc:202
G4ViewParameters fDefaultVP
Definition: G4VViewer.hh:221
const G4String & GetShortName() const
const G4ViewParameters & GetDefaultViewParameters() const
G4int fViewId
Definition: G4VViewer.hh:217
void TouchableSetVisibility(const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > &fullPath, G4bool visibility)
Definition: G4VViewer.cc:153
G4ViewParameters fVP
Definition: G4VViewer.hh:220
virtual void FinishView()
Definition: G4VViewer.cc:103
void SetViewParameters(const G4ViewParameters &vp)
Definition: G4VViewer.cc:126
void TouchableSetColour(const std::vector< G4PhysicalVolumeModel::G4PhysicalVolumeNodeID > &fullPath, const G4Colour &)
Definition: G4VViewer.cc:178
void RefreshView()
virtual void ClearView()=0
virtual void ShowView()
Definition: G4VViewer.cc:105
G4VSceneHandler * GetSceneHandler() const
virtual void SetView()=0
G4int GetViewId() const
virtual void ResetView()