Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
48 class G4Scene;
49 class G4VViewer;
50 class G4Colour;
51 class G4Visible;
53 class G4VModel;
54 class G4VGraphicsSystem;
55 class G4LogicalVolume;
56 class G4VPhysicalVolume;
57 class G4Material;
58 class G4Event;
59 class G4AttHolder;
60 
62 
63  friend class G4VViewer;
64  friend std::ostream& operator << (std::ostream& os, const G4VSceneHandler& s);
65 
66 public: // With description
67 
69 
71  G4int id,
72  const G4String& name = "");
73 
74  virtual ~G4VSceneHandler ();
75 
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 
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 
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 
198  // Access functions.
199  const G4String& GetName () const;
200  G4int GetSceneHandlerId () const;
201  G4int GetViewCount () const;
203  G4Scene* GetScene () const;
204  const G4ViewerList& GetViewerList () const;
205  G4VModel* GetModel () const;
206  G4VViewer* GetCurrentViewer () const;
208  G4bool IsReadyForTransients () const;
211  const G4Transform3D& GetObjectTransformation () const;
212  void SetName (const G4String&);
213  void SetCurrentViewer (G4VViewer*);
214  virtual void SetScene (G4Scene*);
215  G4ViewerList& SetViewerList (); // Non-const so you can change.
216  void SetModel (G4VModel*);
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 
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 
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 
292 protected:
293 
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 
301  // Default routine used by default AddSolid ().
302  virtual void RequestPrimitives (const G4VSolid& solid);
303 
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 
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 
347 private:
348 
350  G4VSceneHandler& operator = (const G4VSceneHandler&);
351 };
352 
353 #include "G4VSceneHandler.icc"
354 
355 #endif