#ifndef ROOT_TGLScenePad
#define ROOT_TGLScenePad
#ifndef ROOT_TGLScene
#include "TGLScene.h"
#endif
#ifndef ROOT_TVirtualViewer3D
#include "TVirtualViewer3D.h"
#endif
#ifndef ROOT_CsgOps
#include "CsgOps.h"
#endif
class TGLViewer;
class TGLFaceSet;
class TGLScenePad : public TVirtualViewer3D, public TGLScene {
private:
TGLScenePad(const TGLScenePad&);
TGLScenePad& operator=(const TGLScenePad&);
protected:
TVirtualPad* fPad;
Bool_t fInternalPIDs;
UInt_t fNextInternalPID;
UInt_t fLastPID;
Int_t fAcceptedPhysicals;
Int_t ValidateObjectBuffer(const TBuffer3D& buffer, Bool_t includeRaw) const;
TGLLogicalShape* CreateNewLogical(const TBuffer3D & buffer) const;
TGLPhysicalShape* CreateNewPhysical(UInt_t physicalID, const TBuffer3D& buffer,
const TGLLogicalShape& logical) const;
typedef std::pair<UInt_t, RootCsg::TBaseMesh*> CSPart_t;
mutable TGLFaceSet *fComposite;
UInt_t fCSLevel;
std::vector<CSPart_t> fCSTokens;
RootCsg::TBaseMesh* BuildComposite();
TGLLogicalShape* AttemptDirectRenderer(TObject* id);
Bool_t fSmartRefresh;
public:
TGLScenePad(TVirtualPad* pad);
virtual ~TGLScenePad() {}
TVirtualPad* GetPad() const { return fPad; }
void AddHistoPhysical(TGLLogicalShape* log);
void SubPadPaint(TVirtualPad* pad);
virtual void PadPaintFromViewer(TGLViewer* viewer);
Bool_t GetSmartRefresh() const { return fSmartRefresh; }
void SetSmartRefresh(Bool_t smart_ref) { fSmartRefresh = smart_ref; }
virtual Bool_t CanLoopOnPrimitives() const { return kTRUE; }
virtual void PadPaint(TVirtualPad* pad);
virtual void ObjectPaint(TObject* obj, Option_t* opt="");
virtual Int_t DistancetoPrimitive(Int_t , Int_t ) { return 9999; }
virtual void ExecuteEvent(Int_t , Int_t , Int_t ) {}
virtual Bool_t PreferLocalFrame() const { return kTRUE; }
virtual void BeginScene();
virtual Bool_t BuildingScene() const { return CurrentLock() == kModifyLock; }
virtual void EndScene();
virtual Int_t AddObject(const TBuffer3D& buffer, Bool_t* addChildren = 0);
virtual Int_t AddObject(UInt_t physicalID, const TBuffer3D& buffer, Bool_t* addChildren = 0);
virtual Bool_t OpenComposite(const TBuffer3D& buffer, Bool_t* addChildren = 0);
virtual void CloseComposite();
virtual void AddCompositeOp(UInt_t operation);
ClassDef(TGLScenePad, 0);
};
#endif