Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4VSceneHandler.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// $Id$
28//
29//
30// John Allison 19th July 1996.
31//
32// Class description
33//
34// Abstract interface class for graphics scene handlers.
35// Inherits from G4VGraphicsScene, in the intercoms category, which is
36// a minimal abstract interface for the GEANT4 kernel.
37
38#ifndef G4VSCENEHANDLER_HH
39#define G4VSCENEHANDLER_HH
40
41#include "globals.hh"
42
43#include "G4VGraphicsScene.hh"
44#include "G4ViewerList.hh"
45#include "G4ViewParameters.hh"
46#include "G4THitsMap.hh"
47
48class G4Scene;
49class G4VViewer;
50class G4Colour;
51class G4Visible;
53class G4VModel;
55class G4LogicalVolume;
57class G4Material;
58class G4Event;
59class G4AttHolder;
60
62
63 friend class G4VViewer;
64 friend std::ostream& operator << (std::ostream& os, const G4VSceneHandler& s);
65
66public: // With description
67
69
71 G4int id,
72 const G4String& name = "");
73
74 virtual ~G4VSceneHandler ();
75
76 ///////////////////////////////////////////////////////////////////
77 // Methods for adding raw GEANT4 objects to the scene handler. They
78 // must always be called in the triplet PreAddSolid, AddSolid and
79 // PostAddSolid. The transformation and visualization attributes
80 // must be set by the call to PreAddSolid. If your graphics system
81 // is sophisticated enough to handle a particular solid shape as a
82 // primitive, in your derived class write a function to override one
83 // or more of the following. See the implementation of
84 // G4VSceneHandler::AddSolid (const G4Box& box) for more
85 // suggestions. If not, please implement the base class invocation.
86
87 virtual void PreAddSolid (const G4Transform3D& objectTransformation,
88 const G4VisAttributes&);
89 // objectTransformation is the transformation in the world
90 // coordinate system of the object about to be added, and visAttribs
91 // is its visualization attributes.
92 // IMPORTANT: invoke this from your polymorphic versions, e.g.:
93 // void MyXXXSceneHandler::PreAddSolid
94 // (const G4Transform3D& objectTransformation,
95 // const G4VisAttributes& visAttribs) {
96 // G4VSceneHandler::PreAddSolid (objectTransformation, visAttribs);
97 // ...
98 // }
99
100 virtual void PostAddSolid ();
101 // IMPORTANT: invoke this from your polymorphic versions, e.g.:
102 // void MyXXXSceneHandler::PostAddSolid () {
103 // ...
104 // G4VSceneHandler::PostAddSolid ();
105 // }
106
107 virtual void AddSolid (const G4Box&);
108 virtual void AddSolid (const G4Cons&);
109 virtual void AddSolid (const G4Tubs&);
110 virtual void AddSolid (const G4Trd&);
111 virtual void AddSolid (const G4Trap&);
112 virtual void AddSolid (const G4Sphere&);
113 virtual void AddSolid (const G4Para&);
114 virtual void AddSolid (const G4Torus&);
115 virtual void AddSolid (const G4Polycone&);
116 virtual void AddSolid (const G4Polyhedra&);
117 virtual void AddSolid (const G4VSolid&); // For solids not above.
118
119 ///////////////////////////////////////////////////////////////////
120 // Methods for adding "compound" GEANT4 objects to the scene
121 // handler. These methods may either (a) invoke "user code" that
122 // uses the "user interface", G4VVisManager (see, for example,
123 // G4VSceneHandler, which for trajectories uses
124 // G4VTrajectory::DrawTrajectory, via G4TrajectoriesModel in the
125 // Modeling Category) or (b) invoke AddPrimitives below (between
126 // calls to Begin/EndPrimitives) or (c) use graphics-system-specific
127 // code or (d) any combination of the above.
128
129 virtual void AddCompound (const G4VTrajectory&);
130 virtual void AddCompound (const G4VHit&);
131 virtual void AddCompound (const G4VDigi&);
132 virtual void AddCompound (const G4THitsMap<G4double>&);
133
134 //////////////////////////////////////////////////////////////
135 // Functions for adding primitives.
136
137 virtual void BeginModeling ();
138 // IMPORTANT: invoke this from your polymorphic versions, e.g.:
139 // void MyXXXSceneHandler::BeginModeling () {
140 // G4VSceneHandler::BeginModeling ();
141 // ...
142 // }
143
144 virtual void EndModeling ();
145 // IMPORTANT: invoke this from your polymorphic versions, e.g.:
146 // void MyXXXSceneHandler::EndModeling () {
147 // ...
148 // G4VSceneHandler::EndModeling ();
149 // }
150
151 virtual void BeginPrimitives
152 (const G4Transform3D& objectTransformation);
153 // IMPORTANT: invoke this from your polymorphic versions, e.g.:
154 // void MyXXXSceneHandler::BeginPrimitives
155 // (const G4Transform3D& objectTransformation) {
156 // G4VSceneHandler::BeginPrimitives (objectTransformation);
157 // ...
158 // }
159
160 virtual void EndPrimitives ();
161 // IMPORTANT: invoke this from your polymorphic versions, e.g.:
162 // void MyXXXSceneHandler::EndPrimitives () {
163 // ...
164 // G4VSceneHandler::EndPrimitives ();
165 // }
166
167 virtual void BeginPrimitives2D
168 (const G4Transform3D& objectTransformation);
169 // The x,y coordinates of the primitives passed to AddPrimitive are
170 // intrepreted as screen coordinates, -1 < x,y < 1. The
171 // z-coordinate is ignored.
172 // IMPORTANT: invoke this from your polymorphic versions, e.g.:
173 // void MyXXXSceneHandler::BeginPrimitives2D
174 // (const G4Transform3D& objectTransformation) {
175 // G4VSceneHandler::BeginPrimitives2D ();
176 // ...
177 // }
178
179 virtual void EndPrimitives2D ();
180 // IMPORTANT: invoke this from your polymorphic versions, e.g.:
181 // void MyXXXSceneHandler::EndPrimitives2D () {
182 // ...
183 // G4VSceneHandler::EndPrimitives2D ();
184 // }
185
186 virtual void AddPrimitive (const G4Polyline&) = 0;
187 virtual void AddPrimitive (const G4Scale&);
188 // Default implementation in this class but can be over-ridden.
189 virtual void AddPrimitive (const G4Text&) = 0;
190 virtual void AddPrimitive (const G4Circle&) = 0;
191 virtual void AddPrimitive (const G4Square&) = 0;
192 virtual void AddPrimitive (const G4Polymarker&);
193 // Default implementation in this class but can be over-ridden.
194 virtual void AddPrimitive (const G4Polyhedron&) = 0;
195 virtual void AddPrimitive (const G4NURBS&) = 0;
196
197 //////////////////////////////////////////////////////////////
198 // Access functions.
199 const G4String& GetName () const;
203 G4Scene* GetScene () const;
212 void SetName (const G4String&);
214 virtual void SetScene (G4Scene*);
215 G4ViewerList& SetViewerList (); // Non-const so you can change.
218 // Sets flag which will cause transient store to be cleared at the
219 // next call to BeginPrimitives(). Maintained by vis manager.
223 // Maintained by vis manager.
224
225 //////////////////////////////////////////////////////////////
226 // Public utility functions.
227
228 const G4Colour& GetColour (const G4Visible&);
229 const G4Colour& GetColor (const G4Visible&);
230 // Returns colour of G4Visible object, or default global colour.
231
232 const G4Colour& GetTextColour (const G4Text&);
233 const G4Colour& GetTextColor (const G4Text&);
234 // Returns colour of G4Text object, or default text colour.
235
237 // Returns line width of G4VisAttributes multiplied by GlobalLineWidthScale.
238
240 // Returns drawing style from current view parameters, unless the user
241 // has forced through the vis attributes, thereby over-riding the
242 // current view parameter.
243
245 // Returns auxiliary edge visibility from current view parameters,
246 // unless the user has forced through the vis attributes, thereby
247 // over-riding the current view parameter.
248
250 // Returns no. of sides (lines segments per circle) from current
251 // view parameters, unless the user has forced through the vis
252 // attributes, thereby over-riding the current view parameter.
253
255 // Returns applicable marker size (diameter) and type (in second
256 // argument). Uses global default marker if marker sizes are not
257 // set. Multiplies by GlobalMarkerScale.
258
260 // Alias for GetMarkerSize.
261
263 // GetMarkerSize / 2.
264
266 // Only the scene handler and view know what the Modeling Parameters should
267 // be. For historical reasons, the GEANT4 Visualization Environment
268 // maintains its own Scene Data and View Parameters, which must be
269 // converted, when needed, to Modeling Parameters.
270
271 void DrawEvent(const G4Event*);
272 // Checks scene's end-of-event model list and draws trajectories,
273 // hits, etc.
274
275 void DrawEndOfRunModels();
276 // Draws end-of-run models.
277
278 //////////////////////////////////////////////////////////////
279 // Administration functions.
280
282
283 virtual void ClearStore ();
284 // Clears graphics database (display lists) if any.
285
286 virtual void ClearTransientStore ();
287 // Clears transient part of graphics database (display lists) if any.
288
289 void AddViewerToList (G4VViewer* pView); // Add view to view List.
290 void RemoveViewerFromList (G4VViewer* pView); // Remove view from view List.
291
292protected:
293
294 //////////////////////////////////////////////////////////////
295 // Core routine for looping over models, redrawing stored events, etc.
296 // Overload with care (see, for example,
297 // G4OpenGLScenehandler::ProcessScene).
298 virtual void ProcessScene ();
299
300 //////////////////////////////////////////////////////////////
301 // Default routine used by default AddSolid ().
302 virtual void RequestPrimitives (const G4VSolid& solid);
303
304 //////////////////////////////////////////////////////////////
305 // Other internal routines...
306
307 virtual G4VSolid* CreateSectionSolid ();
308 virtual G4VSolid* CreateCutawaySolid ();
309 // Generic clipping using the BooleanProcessor in graphics_reps is
310 // implemented in this class. Subclasses that implement their own
311 // clipping should provide an override that returns zero.
312
313 void LoadAtts(const G4Visible&, G4AttHolder*);
314 // Load G4AttValues and G4AttDefs associated with the G4Visible
315 // object onto the G4AttHolder object. It checks fpModel, and also
316 // loads the G4AttValues and G4AttDefs from G4PhysicalVolumeModel,
317 // G4VTrajectory, G4VTrajectoryPoint, G4VHit or G4VDigi, as
318 // appropriate. The G4AttHolder object is an object of a class that
319 // publicly inherits G4AttHolder - see, e.g., SoG4Polyhedron in the
320 // Open Inventor driver. G4AttHolder deletes G4AttValues in its
321 // destructor to ensure proper clean-up of G4AttValues.
322
323 //////////////////////////////////////////////////////////////
324 // Data members
325
326 G4VGraphicsSystem& fSystem; // Graphics system.
327 const G4int fSceneHandlerId; // Id of this instance.
329 G4int fViewCount; // To determine view ids.
331 G4VViewer* fpViewer; // Current viewer.
332 G4Scene* fpScene; // Scene for this scene handler.
334 G4bool fReadyForTransients; // I.e., not processing the
335 // run-duration part of scene.
336 G4bool fTransientsDrawnThisEvent; // Maintained by vis
338 G4bool fProcessingSolid; // True if within Pre/PostAddSolid.
339 G4bool fProcessing2D; // True for 2D.
340 G4VModel* fpModel; // Current model.
341 G4Transform3D fObjectTransformation; // Current accumulated
342 // object transformation.
343 G4int fNestingDepth; // For Begin/EndPrimitives.
344 const G4VisAttributes* fpVisAttribs; // Working vis attributes.
346
347private:
348
350 G4VSceneHandler& operator = (const G4VSceneHandler&);
351};
352
353#include "G4VSceneHandler.icc"
354
355#endif
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
Definition: G4Box.hh:55
Definition: G4Cons.hh:75
Definition: G4Para.hh:77
Definition: G4Text.hh:73
Definition: G4Trd.hh:63
Definition: G4Tubs.hh:77
Definition: G4VHit.hh:49
virtual void BeginModeling()
const G4Colour & GetColor(const G4Visible &)
friend std::ostream & operator<<(std::ostream &os, const G4VSceneHandler &s)
G4int GetNoOfSides(const G4VisAttributes *)
virtual void AddPrimitive(const G4Polyhedron &)=0
virtual G4VSolid * CreateSectionSolid()
virtual void ClearTransientStore()
G4bool GetTransientsDrawnThisEvent() const
void SetTransientsDrawnThisRun(G4bool)
void LoadAtts(const G4Visible &, G4AttHolder *)
void DrawEvent(const G4Event *)
G4ModelingParameters * CreateModelingParameters()
const G4Colour & GetTextColour(const G4Text &)
void SetMarkForClearingTransientStore(G4bool)
const G4Colour & GetTextColor(const G4Text &)
G4VModel * GetModel() const
G4VGraphicsSystem * GetGraphicsSystem() const
virtual void AddPrimitive(const G4Circle &)=0
G4double GetMarkerRadius(const G4VMarker &, MarkerSizeType &)
const G4ViewerList & GetViewerList() const
G4bool IsReadyForTransients() const
G4Scene * GetScene() const
G4Transform3D fObjectTransformation
virtual void EndPrimitives()
G4bool fTransientsDrawnThisEvent
G4VViewer * GetCurrentViewer() const
G4int IncrementViewCount()
virtual void AddPrimitive(const G4Text &)=0
G4ViewerList & SetViewerList()
virtual void EndModeling()
const G4int fSceneHandlerId
void SetName(const G4String &)
G4int GetSceneHandlerId() const
G4ViewerList fViewerList
virtual void ProcessScene()
G4double GetMarkerSize(const G4VMarker &, MarkerSizeType &)
void SetObjectTransformation(const G4Transform3D &)
void SetModel(G4VModel *)
virtual void PreAddSolid(const G4Transform3D &objectTransformation, const G4VisAttributes &)
G4bool fTransientsDrawnThisRun
G4VViewer * fpViewer
virtual void PostAddSolid()
const G4String & GetName() const
void AddViewerToList(G4VViewer *pView)
virtual void BeginPrimitives(const G4Transform3D &objectTransformation)
void SetTransientsDrawnThisEvent(G4bool)
virtual void EndPrimitives2D()
virtual void SetScene(G4Scene *)
G4bool fMarkForClearingTransientStore
const G4Transform3D & GetObjectTransformation() const
const G4VisAttributes * fpVisAttribs
virtual void RequestPrimitives(const G4VSolid &solid)
virtual void AddPrimitive(const G4NURBS &)=0
virtual void BeginPrimitives2D(const G4Transform3D &objectTransformation)
G4double GetMarkerDiameter(const G4VMarker &, MarkerSizeType &)
virtual void AddPrimitive(const G4Square &)=0
G4ViewParameters::DrawingStyle GetDrawingStyle(const G4VisAttributes *)
G4bool GetTransientsDrawnThisRun() const
void RemoveViewerFromList(G4VViewer *pView)
virtual G4VSolid * CreateCutawaySolid()
G4double GetLineWidth(const G4VisAttributes *)
G4int GetViewCount() const
G4VGraphicsSystem & fSystem
virtual void AddSolid(const G4Box &)
virtual void ClearStore()
void SetCurrentViewer(G4VViewer *)
virtual void AddCompound(const G4VTrajectory &)
virtual ~G4VSceneHandler()
virtual void AddPrimitive(const G4Polyline &)=0
const G4Transform3D fIdentityTransformation
const G4Colour & GetColour(const G4Visible &)
G4bool GetMarkForClearingTransientStore() const
G4bool GetAuxEdgeVisible(const G4VisAttributes *)