source: trunk/source/visualization/management/include/G4VSceneHandler.hh @ 1288

Last change on this file since 1288 was 1288, checked in by garnier, 14 years ago

update from CVS

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