![]() |
ROOT 6.08/07 Reference Guide |
Abstract logical shape - a GL 'drawable' - base for all shapes - faceset sphere etc.
Logical shapes are a unique piece of geometry, described in it's local frame - e.g if we have three spheres in :
Spheres A and C can share a common logical sphere of radius r1 - and place them with two physicals with translations of v1 & v2. Sphere B requires a different logical (radius r2), placed with physical with translation v2.
Physical shapes know about and can share logicals. Logicals do not about (aside from reference counting) physicals or share them.
This sharing of logical shapes greatly reduces memory consumption and scene (re)build times in typical detector geometries which have many repeated objects placements.
TGLLogicalShapes have reference counting, performed by the client physical shapes which are using it.
Display list information is also stored here, possibly per LOD level. Most classes do not support LOD (only sphere and tube) and therefore reasonable defaults are encoded in the following virtual functions:
Classes that have per-LOD display-lists than override these functions. 'UShort_t fDLValid' is used as a bit-field determining validity of each quantized LOD-level; hopefully one will not have more than 16 LOD levels per class. See also: TGLPhysicalShape::CalculateShapeLOD() where LOD is calculated.
See base/src/TVirtualViewer3D for description of common external 3D viewer architecture and how external viewer clients use it.
Definition at line 31 of file TGLLogicalShape.h.
Public Types | |
enum | ELODAxes { kLODAxesNone = 0, kLODAxesX = 1 << 0, kLODAxesY = 1 << 1, kLODAxesZ = 1 << 2, kLODAxesAll = kLODAxesX | kLODAxesY | kLODAxesZ } |
Public Member Functions | |
TGLLogicalShape () | |
Constructor. More... | |
TGLLogicalShape (TObject *obj) | |
Constructor with external object. More... | |
TGLLogicalShape (const TBuffer3D &buffer) | |
Constructor from TBuffer3D. More... | |
virtual | ~TGLLogicalShape () |
Destroy logical shape. More... | |
void | AddRef (TGLPhysicalShape *phys) const |
Add reference to given physical shape. More... | |
virtual Bool_t | AlwaysSecondarySelect () const |
const TGLBoundingBox & | BoundingBox () const |
void | DestroyPhysicals () |
Destroy all physicals attached to this logical. More... | |
virtual void | DirectDraw (TGLRnrCtx &rnrCtx) const =0 |
virtual void | DLCacheClear () |
Clear all entries for all LODs for this drawable from the display list cache but keeping the reserved ids from GL context. More... | |
virtual void | DLCacheDrop () |
Drop all entries for all LODs for this drawable from the display list cache, WITHOUT returning the reserved ids to GL context. More... | |
virtual void | DLCachePurge () |
Purge all entries for all LODs for this drawable from the display list cache, returning the reserved ids to GL context. More... | |
virtual UInt_t | DLOffset (Short_t) const |
virtual void | Draw (TGLRnrCtx &rnrCtx) const |
Draw the GL drawable, using draw flags. More... | |
virtual void | DrawHighlight (TGLRnrCtx &rnrCtx, const TGLPhysicalShape *pshp, Int_t lvl=-1) const |
Draw the logical shape in highlight mode. More... | |
TObject * | GetExternal () const |
const TGLPhysicalShape * | GetFirstPhysical () const |
TGLScene * | GetScene () const |
TObject * | ID () const |
virtual Bool_t | IgnoreSizeForOfInterest () const |
Return true if size of this shape should be ignored when determining if the object should be drawn. More... | |
void | InvokeContextMenu (TContextMenu &menu, UInt_t x, UInt_t y) const |
Invoke popup menu or our bound external TObject (if any), using passed 'menu' object, at location 'x' 'y'. More... | |
virtual Bool_t | KeepDuringSmartRefresh () const |
virtual void | ProcessSelection (TGLRnrCtx &rnrCtx, TGLSelectRecord &rec) |
Virtual method called-back after a secondary selection hit is recorded (see TGLViewer::HandleButton(), Ctrl-Button1). More... | |
virtual Short_t | QuantizeShapeLOD (Short_t shapeLOD, Short_t combiLOD) const |
Logical shapes usually support only discreet LOD values, especially in view of display-list caching. More... | |
UInt_t | Ref () const |
Bool_t | SetDLCache (Bool_t cached) |
Modify capture of draws into display list cache kTRUE - capture, kFALSE direct draw. More... | |
virtual Bool_t | ShouldDLCache (const TGLRnrCtx &rnrCtx) const |
Returns kTRUE if draws should be display list cached kFALSE otherwise. More... | |
void | StrongRef (Bool_t strong) const |
void | SubRef (TGLPhysicalShape *phys) const |
Remove reference to given physical shape, potentially deleting this object when hitting zero ref-count (if fRefStrong is true). More... | |
virtual ELODAxes | SupportedLODAxes () const |
virtual Bool_t | SupportsSecondarySelect () const |
UInt_t | UnrefFirstPhysical () |
Unreferenced first physical in the list, returning its id and making it fit for destruction somewhere else. More... | |
virtual void | UpdateBoundingBox () |
void | UpdateBoundingBoxesOfPhysicals () |
Update bounding-boxed of all dependent physicals. More... | |
Static Public Member Functions | |
static Bool_t | GetIgnoreSizeForCameraInterest () |
Get state of static fgIgnoreSizeForCameraInterest flag. More... | |
static void | SetIgnoreSizeForCameraInterest (Bool_t isfci) |
Set state of static fgIgnoreSizeForCameraInterest flag. More... | |
Protected Member Functions | |
void | PurgeDLRange (UInt_t base, Int_t size) const |
External object is a fake. More... | |
Protected Attributes | |
TGLBoundingBox | fBoundingBox |
Also plays the role of ID. More... | |
UInt_t | fDLBase |
scene where object is stored (can be zero!) More... | |
Bool_t | fDLCache |
display-list validity bit-field More... | |
Int_t | fDLSize |
display-list id base More... | |
UShort_t | fDLValid |
display-list size for different LODs More... | |
TObject * | fExternalObj |
first replica More... | |
TGLPhysicalShape * | fFirstPhysical |
physical instance ref counting More... | |
Bool_t | fOwnExtObj |
Strong ref (delete on 0 ref); not in scene. More... | |
UInt_t | fRef |
Bool_t | fRefStrong |
use display list caching More... | |
TGLScene * | fScene |
Shape's bounding box. More... | |
Static Protected Attributes | |
static Bool_t | fgIgnoreSizeForCameraInterest = kFALSE |
Private Member Functions | |
TGLLogicalShape (const TGLLogicalShape &) | |
TGLLogicalShape & | operator= (const TGLLogicalShape &) |
Friends | |
class | TGLScene |
#include <TGLLogicalShape.h>
Enumerator | |
---|---|
kLODAxesNone | |
kLODAxesX | |
kLODAxesY | |
kLODAxesZ | |
kLODAxesAll |
Definition at line 40 of file TGLLogicalShape.h.
|
private |
TGLLogicalShape::TGLLogicalShape | ( | ) |
Constructor.
Definition at line 70 of file TGLLogicalShape.cxx.
TGLLogicalShape::TGLLogicalShape | ( | TObject * | obj | ) |
Constructor with external object.
Definition at line 87 of file TGLLogicalShape.cxx.
TGLLogicalShape::TGLLogicalShape | ( | const TBuffer3D & | buffer | ) |
Constructor from TBuffer3D.
Definition at line 104 of file TGLLogicalShape.cxx.
|
virtual |
Destroy logical shape.
Definition at line 136 of file TGLLogicalShape.cxx.
void TGLLogicalShape::AddRef | ( | TGLPhysicalShape * | phys | ) | const |
Add reference to given physical shape.
Definition at line 159 of file TGLLogicalShape.cxx.
|
inlinevirtual |
Reimplemented in TEveCaloLegoGL, TEveCalo2DGL, TEveCalo3DGL, and TEveDigitSetGL.
Definition at line 110 of file TGLLogicalShape.h.
|
inline |
Definition at line 85 of file TGLLogicalShape.h.
void TGLLogicalShape::DestroyPhysicals | ( | ) |
Destroy all physicals attached to this logical.
Definition at line 202 of file TGLLogicalShape.cxx.
Implemented in TEveCaloLegoGL, TEveBoxProjectedGL, TEveJetConeProjectedGL, TEveCalo2DGL, TEveCalo3DGL, TEveJetConeGL, TEvePolygonSetProjectedGL, TEveBoxGL, TEveBoxSetGL, TEveProjectionAxesGL, TGLCylinder, TH3GL, TEvePlot3DGL, TEveStraightLineSetGL, TEveTextGL, TEveTrackGL, TGLFaceSet, TH2GL, TEveLineGL, TF2GL, TGLParametricEquationGL, TEveArrowGL, TEveTrackProjectedGL, TEveTriangleSetGL, TGLPolyMarker, TEveQuadSetGL, TGLSphere, TGLPolyLine, and TPointSet3DGL.
|
virtual |
Clear all entries for all LODs for this drawable from the display list cache but keeping the reserved ids from GL context.
Reimplemented in TEveJetConeGL.
Definition at line 299 of file TGLLogicalShape.cxx.
|
virtual |
Drop all entries for all LODs for this drawable from the display list cache, WITHOUT returning the reserved ids to GL context.
This is called by scene if it realized that the GL context was destroyed.
Reimplemented in TEveCaloLegoGL, and TEveBoxSetGL.
Definition at line 311 of file TGLLogicalShape.cxx.
|
virtual |
Purge all entries for all LODs for this drawable from the display list cache, returning the reserved ids to GL context.
If you override this function:
Reimplemented in TEveCaloLegoGL, and TEveBoxSetGL.
Definition at line 325 of file TGLLogicalShape.cxx.
Reimplemented in TGLCylinder, and TGLSphere.
Definition at line 92 of file TGLLogicalShape.h.
Draw the GL drawable, using draw flags.
If DL caching is enabled (see SetDLCache) then attempt to draw from the cache, if not found attempt to capture the draw - done by DirectDraw() - into a new cache entry. If not cached just call DirectDraw() for normal non DL cached drawing.
Reimplemented in TEveBoxProjectedGL, TEveJetConeProjectedGL, TEveJetConeGL, TEvePolygonSetProjectedGL, TEveBoxGL, TEveProjectionAxesGL, TEveStraightLineSetGL, and TPointSet3DGL.
Definition at line 370 of file TGLLogicalShape.cxx.
|
virtual |
Draw the logical shape in highlight mode.
If lvl argument is less than 0 (-1 by default), the index into color-set is taken from the physical shape itself.
Reimplemented in TEveCaloLegoGL, TEveCalo2DGL, TEvePolygonSetProjectedGL, TEveCalo3DGL, and TEveDigitSetGL.
Definition at line 424 of file TGLLogicalShape.cxx.
|
inline |
Definition at line 82 of file TGLLogicalShape.h.
|
inline |
Definition at line 79 of file TGLLogicalShape.h.
|
static |
Get state of static fgIgnoreSizeForCameraInterest flag.
When this is true all objects, also very small, will be drawn by GL.
Definition at line 477 of file TGLLogicalShape.cxx.
|
inline |
Definition at line 83 of file TGLLogicalShape.h.
|
inline |
Definition at line 81 of file TGLLogicalShape.h.
|
virtual |
Return true if size of this shape should be ignored when determining if the object should be drawn.
In this base-class we simply return state of static flag fgIgnoreSizeForCameraInterest.
Several sub-classes override this virtual function.
Reimplemented in TEveBoxProjectedGL, TEvePolygonSetProjectedGL, TEveBoxGL, TEveProjectionAxesGL, TEveStraightLineSetGL, TGLPolyMarker, TEveQuadSetGL, and TPointSet3DGL.
Definition at line 468 of file TGLLogicalShape.cxx.
void TGLLogicalShape::InvokeContextMenu | ( | TContextMenu & | menu, |
UInt_t | x, | ||
UInt_t | y | ||
) | const |
Invoke popup menu or our bound external TObject (if any), using passed 'menu' object, at location 'x' 'y'.
Definition at line 454 of file TGLLogicalShape.cxx.
|
inlinevirtual |
Reimplemented in TGLObject, TGLPlot3D, TF2GL, TGLParametricEquationGL, and TEvePlot3DGL.
Definition at line 107 of file TGLLogicalShape.h.
|
private |
|
virtual |
Virtual method called-back after a secondary selection hit is recorded (see TGLViewer::HandleButton(), Ctrl-Button1).
The ptr argument holds the GL pick-record of the closest hit.
This base-class implementation simply prints out the result.
Reimplemented in TEveCaloLegoGL, TEveCalo2DGL, TEveCalo3DGL, TEveDigitSetGL, TEveStraightLineSetGL, TEveTrackGL, and TPointSet3DGL.
Definition at line 441 of file TGLLogicalShape.cxx.
External object is a fake.
Purge given display-list range.
Utility function.
Definition at line 339 of file TGLLogicalShape.cxx.
Logical shapes usually support only discreet LOD values, especially in view of display-list caching.
This function should be overriden to perform the desired quantization. See TGLSphere.
Reimplemented in TGLCylinder, and TGLSphere.
Definition at line 358 of file TGLLogicalShape.cxx.
|
inline |
Definition at line 72 of file TGLLogicalShape.h.
Modify capture of draws into display list cache kTRUE - capture, kFALSE direct draw.
Return kTRUE is state changed, kFALSE if not.
Definition at line 261 of file TGLLogicalShape.cxx.
Set state of static fgIgnoreSizeForCameraInterest flag.
Definition at line 485 of file TGLLogicalShape.cxx.
Returns kTRUE if draws should be display list cached kFALSE otherwise.
Here we check that: a) fScene is set (Scene manages link to GL-context); b) secondary selection is not in progress as different render-path is usually taken in this case.
Otherwise we return internal bool.
Override this in sub-class if different behaviour is required.
Reimplemented in TGLObject, TEveCalo3DGL, TEveStraightLineSetGL, TEveBoxSetGL, and TPointSet3DGL.
Definition at line 285 of file TGLLogicalShape.cxx.
Definition at line 75 of file TGLLogicalShape.h.
void TGLLogicalShape::SubRef | ( | TGLPhysicalShape * | phys | ) | const |
Remove reference to given physical shape, potentially deleting this object when hitting zero ref-count (if fRefStrong is true).
Definition at line 171 of file TGLLogicalShape.cxx.
|
inlinevirtual |
Reimplemented in TGLCylinder, and TGLSphere.
Definition at line 97 of file TGLLogicalShape.h.
|
inlinevirtual |
Reimplemented in TEveCaloLegoGL, TEveCalo2DGL, TEveCalo3DGL, TEveDigitSetGL, TEveStraightLineSetGL, TEveTrackGL, and TPointSet3DGL.
Definition at line 109 of file TGLLogicalShape.h.
UInt_t TGLLogicalShape::UnrefFirstPhysical | ( | ) |
Unreferenced first physical in the list, returning its id and making it fit for destruction somewhere else.
Returns 0 if there are no replicas attached.
Definition at line 222 of file TGLLogicalShape.cxx.
|
inlinevirtual |
Reimplemented in TGLObject.
Definition at line 86 of file TGLLogicalShape.h.
void TGLLogicalShape::UpdateBoundingBoxesOfPhysicals | ( | ) |
Update bounding-boxed of all dependent physicals.
Definition at line 242 of file TGLLogicalShape.cxx.
|
friend |
Definition at line 33 of file TGLLogicalShape.h.
|
protected |
Also plays the role of ID.
Definition at line 52 of file TGLLogicalShape.h.
|
mutableprotected |
scene where object is stored (can be zero!)
Definition at line 54 of file TGLLogicalShape.h.
|
mutableprotected |
display-list validity bit-field
Definition at line 57 of file TGLLogicalShape.h.
|
mutableprotected |
display-list id base
Definition at line 55 of file TGLLogicalShape.h.
|
mutableprotected |
display-list size for different LODs
Definition at line 56 of file TGLLogicalShape.h.
|
protected |
first replica
Definition at line 51 of file TGLLogicalShape.h.
|
mutableprotected |
physical instance ref counting
Definition at line 49 of file TGLLogicalShape.h.
Definition at line 63 of file TGLLogicalShape.h.
|
mutableprotected |
Strong ref (delete on 0 ref); not in scene.
Definition at line 59 of file TGLLogicalShape.h.
|
mutableprotected |
Definition at line 48 of file TGLLogicalShape.h.
|
mutableprotected |
use display list caching
Definition at line 58 of file TGLLogicalShape.h.
|
mutableprotected |
Shape's bounding box.
Definition at line 53 of file TGLLogicalShape.h.