Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGLScenePad.h
Go to the documentation of this file.
1// @(#)root/gl:$Id$
2// Author: Matevz Tadel, Jun 2007
3
4/*************************************************************************
5 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TGLScenePad
13#define ROOT_TGLScenePad
14
15#include "TGLScene.h"
16#include "TVirtualViewer3D.h"
17#include "CsgOps.h"
18#include <vector>
19#include <utility>
20
21class TGLViewer;
22class TGLFaceSet;
23class TList;
24
25
26class TGLScenePad : public TVirtualViewer3D, public TGLScene {
27
28private:
29 TGLScenePad(const TGLScenePad&) = delete;
31
32protected:
34
35 // For building via VV3D
36 Bool_t fInternalPIDs; //! using internal physical IDs
37 UInt_t fNextInternalPID; //! next internal physical ID (from 1 - 0 reserved)
38 UInt_t fLastPID; //! last physical ID that was processed in AddObject()
40
41 Int_t ValidateObjectBuffer(const TBuffer3D& buffer, Bool_t includeRaw) const;
42 TGLLogicalShape* CreateNewLogical(const TBuffer3D & buffer) const;
43 TGLPhysicalShape* CreateNewPhysical(UInt_t physicalID, const TBuffer3D& buffer,
44 const TGLLogicalShape& logical) const;
45
46 void ComposePolymarker(const TList *padPrimitives);
47 // Composite shape specific
48 typedef std::pair<UInt_t, RootCsg::TBaseMesh*> CSPart_t;
49 mutable TGLFaceSet *fComposite; //! Paritally created composite
51 std::vector<CSPart_t> fCSTokens;
52 RootCsg::TBaseMesh* BuildComposite();
53
55
56 Bool_t fSmartRefresh; //! cache logicals during scene rebuilds
57
58public:
60 virtual ~TGLScenePad() {}
61
62 TVirtualPad* GetPad() const { return fPad; }
63 void SetPad(TVirtualPad* p) { fPad = p; }
64
65 // Histo import and Sub-pad traversal
66 void AddHistoPhysical(TGLLogicalShape* log, const Float_t *histColor = nullptr);
67 void SubPadPaint(TVirtualPad* pad);
68
69 // PadPaint wrapper for calls from TGLViewer:
70 virtual void PadPaintFromViewer(TGLViewer* viewer);
71
73 void SetSmartRefresh(Bool_t smart_ref) { fSmartRefresh = smart_ref; }
74
75
76 // TVirtualViewer3D interface
77
78 virtual Bool_t CanLoopOnPrimitives() const { return kTRUE; }
79 virtual void PadPaint(TVirtualPad* pad);
80 virtual void ObjectPaint(TObject* obj, Option_t* opt="");
81
82 // For now handled by viewer
83 virtual Int_t DistancetoPrimitive(Int_t /*px*/, Int_t /*py*/) { return 9999; }
84 virtual void ExecuteEvent(Int_t /*event*/, Int_t /*px*/, Int_t /*py*/) {}
85
86 virtual Bool_t PreferLocalFrame() const { return kTRUE; }
87
88 virtual void BeginScene();
89 virtual Bool_t BuildingScene() const { return CurrentLock() == kModifyLock; }
90 virtual void EndScene();
91
92 virtual Int_t AddObject(const TBuffer3D& buffer, Bool_t* addChildren = nullptr);
93 virtual Int_t AddObject(UInt_t physicalID, const TBuffer3D& buffer, Bool_t* addChildren = nullptr);
94 virtual Bool_t OpenComposite(const TBuffer3D& buffer, Bool_t* addChildren = nullptr);
95 virtual void CloseComposite();
96 virtual void AddCompositeOp(UInt_t operation);
97
98 ClassDef(TGLScenePad, 0); // GL-scene filled via TPad-TVirtualViewer interface.
99};
100
101#endif
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
unsigned int UInt_t
Definition RtypesCore.h:46
float Float_t
Definition RtypesCore.h:57
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
const char Option_t
Definition RtypesCore.h:66
#define ClassDef(name, id)
Definition Rtypes.h:337
winID h TVirtualViewer3D TVirtualGLPainter p
Generic 3D primitive description class.
Definition TBuffer3D.h:18
Implements a native ROOT-GL representation of an arbitrary set of polygons.
Definition TGLFaceSet.h:23
ELock CurrentLock() const
Definition TGLLockable.h:61
Abstract logical shape - a GL 'drawable' - base for all shapes - faceset sphere etc.
Concrete physical shape - a GL drawable.
Implements VirtualViewer3D interface and fills the base-class visualization structures from pad conte...
Definition TGLScenePad.h:26
TGLLogicalShape * CreateNewLogical(const TBuffer3D &buffer) const
Create and return a new TGLLogicalShape from the supplied buffer.
Bool_t fSmartRefresh
Definition TGLScenePad.h:56
std::vector< CSPart_t > fCSTokens
Definition TGLScenePad.h:51
virtual void CloseComposite()
Close composite container TVirtualViewer3D interface overload - see base/src/TVirtualViewer3D....
RootCsg::TBaseMesh * BuildComposite()
Build and return composite shape mesh.
Bool_t GetSmartRefresh() const
Definition TGLScenePad.h:72
virtual Bool_t PreferLocalFrame() const
Definition TGLScenePad.h:86
virtual Bool_t CanLoopOnPrimitives() const
Definition TGLScenePad.h:78
virtual void AddCompositeOp(UInt_t operation)
Add composite operation used to combine objects added via AddObject TVirtualViewer3D interface overlo...
virtual void ExecuteEvent(Int_t, Int_t, Int_t)
Execute action corresponding to an event at (px,py).
Definition TGLScenePad.h:84
TGLScenePad & operator=(const TGLScenePad &)=delete
Bool_t fInternalPIDs
Definition TGLScenePad.h:36
virtual Int_t DistancetoPrimitive(Int_t, Int_t)
Computes distance from point (px,py) to the object.
Definition TGLScenePad.h:83
TGLPhysicalShape * CreateNewPhysical(UInt_t physicalID, const TBuffer3D &buffer, const TGLLogicalShape &logical) const
Create and return a new TGLPhysicalShape with id 'ID', using 'buffer' placement information (translat...
TGLLogicalShape * AttemptDirectRenderer(TObject *id)
Try to construct an appropriate logical-shape sub-class based on id'class, following convention that ...
virtual void PadPaintFromViewer(TGLViewer *viewer)
Entry point for requesting update of scene's contents from gl-viewer.
void SubPadPaint(TVirtualPad *pad)
Iterate over pad-primitives and import them.
UInt_t fLastPID
next internal physical ID (from 1 - 0 reserved)
Definition TGLScenePad.h:38
Int_t ValidateObjectBuffer(const TBuffer3D &buffer, Bool_t includeRaw) const
Validate if the passed 'buffer' contains all sections we require to add object.
Int_t fAcceptedPhysicals
last physical ID that was processed in AddObject()
Definition TGLScenePad.h:39
virtual void PadPaint(TVirtualPad *pad)
Entry point for updating scene contents via VirtualViewer3D interface.
void SetSmartRefresh(Bool_t smart_ref)
Definition TGLScenePad.h:73
void ComposePolymarker(const TList *padPrimitives)
virtual void ObjectPaint(TObject *obj, Option_t *opt="")
Override of virtual TVirtualViewer3D::ObjectPaint().
TVirtualPad * GetPad() const
Definition TGLScenePad.h:62
virtual Bool_t OpenComposite(const TBuffer3D &buffer, Bool_t *addChildren=nullptr)
Open new composite container.
TVirtualPad * fPad
Definition TGLScenePad.h:33
TGLFaceSet * fComposite
Definition TGLScenePad.h:49
UInt_t fCSLevel
Paritally created composite.
Definition TGLScenePad.h:50
virtual ~TGLScenePad()
Definition TGLScenePad.h:60
virtual Bool_t BuildingScene() const
Definition TGLScenePad.h:89
virtual void BeginScene()
Start building of the scene.
void AddHistoPhysical(TGLLogicalShape *log, const Float_t *histColor=nullptr)
Scale and rotate a histo object to mimic placement in canvas.
virtual void EndScene()
End building of the scene.
virtual Int_t AddObject(const TBuffer3D &buffer, Bool_t *addChildren=nullptr)
Add an object to the viewer, using internal physical IDs TVirtualViewer3D interface overload - see ba...
void SetPad(TVirtualPad *p)
Definition TGLScenePad.h:63
TGLScenePad(const TGLScenePad &)=delete
std::pair< UInt_t, RootCsg::TBaseMesh * > CSPart_t
Definition TGLScenePad.h:48
UInt_t fNextInternalPID
using internal physical IDs
Definition TGLScenePad.h:37
TGLScene provides management and rendering of ROOT's default 3D /object representation as logical and...
Definition TGLScene.h:29
Base GL viewer object - used by both standalone and embedded (in pad) GL.
Definition TGLViewer.h:55
A doubly linked list.
Definition TList.h:38
Mother of all ROOT objects.
Definition TObject.h:41
TVirtualPad is an abstract base class for the Pad and Canvas classes.
Definition TVirtualPad.h:51
Abstract 3D shapes viewer.