Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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()