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

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

update from CVS

  • Property svn:mime-type set to text/cpp
File size: 14.9 KB
RevLine 
[531]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//
[1288]27// $Id: G4VSceneHandler.hh,v 1.44 2010/05/30 11:30:49 allison Exp $
[954]28// GEANT4 tag $Name: $
[531]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"
[1140]47#include "G4THitsMap.hh"
[531]48
49class G4Scene;
50class G4VViewer;
51class G4Colour;
52class G4Visible;
53class G4ModelingParameters;
54class G4VModel;
55class G4VGraphicsSystem;
56class G4LogicalVolume;
57class G4VPhysicalVolume;
58class G4Material;
59class G4Event;
[593]60class G4AttHolder;
[1288]61class G4VDigi;
[531]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&);
[1288]132 virtual void AddCompound (const G4VDigi&);
[1140]133 virtual void AddCompound (const G4THitsMap<G4double>&);
[531]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
[688]168 virtual void BeginPrimitives2D
169 (const G4Transform3D& objectTransformation);
[531]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
[593]235 G4double GetLineWidth(const G4VisAttributes*);
236 // Returns line width of G4VisAttributes multiplied by GlobalLineWidthScale.
[531]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
[593]248 G4int GetNoOfSides(const G4VisAttributes*);
[531]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
[1170]274 void DrawEndOfRunModels();
275 // Draws end-of-run models.
276
[531]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
[1258]313 virtual G4VSolid* CreateSectionSolid ();
314 virtual G4VSolid* CreateCutawaySolid ();
[531]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.
[1258]318
[593]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,
[1288]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
[593]327 // destructor to ensure proper clean-up of G4AttValues.
[531]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.