Geant4
9.6.p02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
geant4_9_6_p02
source
visualization
management
include
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
;
52
class
G4ModelingParameters
;
53
class
G4VModel
;
54
class
G4VGraphicsSystem
;
55
class
G4LogicalVolume
;
56
class
G4VPhysicalVolume
;
57
class
G4Material
;
58
class
G4Event
;
59
class
G4AttHolder
;
60
61
class
G4VSceneHandler
:
public
G4VGraphicsScene
{
62
63
friend
class
G4VViewer
;
64
friend
std::ostream&
operator <<
(std::ostream& os,
const
G4VSceneHandler
&
s
);
65
66
public
:
// With description
67
68
enum
MarkerSizeType
{
world
,
screen
};
69
70
G4VSceneHandler
(
G4VGraphicsSystem
& system,
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
;
202
G4VGraphicsSystem
*
GetGraphicsSystem
()
const
;
203
G4Scene
*
GetScene
()
const
;
204
const
G4ViewerList
&
GetViewerList
()
const
;
205
G4VModel
*
GetModel
()
const
;
206
G4VViewer
*
GetCurrentViewer
()
const
;
207
G4bool
GetMarkForClearingTransientStore
()
const
;
208
G4bool
IsReadyForTransients
()
const
;
209
G4bool
GetTransientsDrawnThisEvent
()
const
;
210
G4bool
GetTransientsDrawnThisRun
()
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
*);
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
void
SetObjectTransformation
(
const
G4Transform3D
&);
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
236
G4double
GetLineWidth
(
const
G4VisAttributes
*);
237
// Returns line width of G4VisAttributes multiplied by GlobalLineWidthScale.
238
239
G4ViewParameters::DrawingStyle
GetDrawingStyle
(
const
G4VisAttributes
*);
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
244
G4bool
GetAuxEdgeVisible
(
const
G4VisAttributes
*);
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
249
G4int
GetNoOfSides
(
const
G4VisAttributes
*);
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
254
G4double
GetMarkerSize
(
const
G4VMarker
&,
MarkerSizeType
&);
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
259
G4double
GetMarkerDiameter
(
const
G4VMarker
&,
MarkerSizeType
&);
260
// Alias for GetMarkerSize.
261
262
G4double
GetMarkerRadius
(
const
G4VMarker
&,
MarkerSizeType
&);
263
// GetMarkerSize / 2.
264
265
G4ModelingParameters
*
CreateModelingParameters
();
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
281
G4int
IncrementViewCount
();
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.
328
G4String
fName
;
329
G4int
fViewCount
;
// To determine view ids.
330
G4ViewerList
fViewerList
;
// Viewers.
331
G4VViewer
*
fpViewer
;
// Current viewer.
332
G4Scene
*
fpScene
;
// Scene for this scene handler.
333
G4bool
fMarkForClearingTransientStore
;
334
G4bool
fReadyForTransients
;
// I.e., not processing the
335
// run-duration part of scene.
336
G4bool
fTransientsDrawnThisEvent
;
// Maintained by vis
337
G4bool
fTransientsDrawnThisRun
;
// manager.
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.
345
const
G4Transform3D
fIdentityTransformation
;
346
347
private
:
348
349
G4VSceneHandler
(
const
G4VSceneHandler
&);
350
G4VSceneHandler
& operator = (
const
G4VSceneHandler
&);
351
};
352
353
#include "G4VSceneHandler.icc"
354
355
#endif
Generated on Sat May 25 2013 14:34:15 for Geant4 by
1.8.4