#ifndef ROOT_TBuffer3D
#define ROOT_TBuffer3D
#ifndef ROOT_TObject
#include "TObject.h"
#endif
class TBuffer3D : public TObject
{
private:
const Int_t fType;
UInt_t fNbPnts;
UInt_t fNbSegs;
UInt_t fNbPols;
UInt_t fPntsCapacity;
UInt_t fSegsCapacity;
UInt_t fPolsCapacity;
UInt_t fSections;
void Init();
TBuffer3D(const TBuffer3D &);
const TBuffer3D & operator=(const TBuffer3D &);
static UInt_t fgCSLevel;
public:
enum EBoolOpCode {kCSUnion, kCSIntersection, kCSDifference, kCSNoOp};
static UInt_t GetCSLevel();
static void IncCSLevel();
static UInt_t DecCSLevel();
enum ESection { kNone = BIT(0),
kCore = BIT(1),
kBoundingBox = BIT(2),
kShapeSpecific = BIT(3),
kRawSizes = BIT(4),
kRaw = BIT(5),
kAll = kCore|kBoundingBox|kShapeSpecific|kRawSizes|kRaw
};
TBuffer3D(Int_t type,
UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
virtual ~TBuffer3D();
void SetSectionsValid(UInt_t mask) { fSections |= mask & kAll; }
void ClearSectionsValid();
Bool_t SectionsValid(UInt_t mask) const { return (Bool_t) (GetSections(mask) == mask); }
UInt_t GetSections(UInt_t mask) const { return (UInt_t) (fSections & mask); }
void SetLocalMasterIdentity();
void SetAABoundingBox(const Double_t origin[3],
const Double_t halfLengths[3]);
Bool_t SetRawSizes(UInt_t reqPnts, UInt_t reqPntsCapacity,
UInt_t reqSegs, UInt_t reqSegsCapacity,
UInt_t reqPols, UInt_t reqPolsCapacity);
UInt_t NbPnts() const { return fNbPnts; }
UInt_t NbSegs() const { return fNbSegs; }
UInt_t NbPols() const { return fNbPols; }
Int_t Type() const { return fType; }
TObject *fID;
Int_t fColor;
Short_t fTransparency;
Bool_t fLocalFrame;
Bool_t fReflection;
Double_t fLocalMaster[16];
Double_t fBBVertex[8][3];
Double_t *fPnts;
Int_t *fSegs;
Int_t *fPols;
mutable UInt_t fPhysicalID;
ClassDef(TBuffer3D,0)
};
class TBuffer3DSphere : public TBuffer3D
{
private:
TBuffer3DSphere(const TBuffer3DSphere &);
const TBuffer3DSphere & operator=(const TBuffer3DSphere &);
public:
TBuffer3DSphere(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
Bool_t IsSolidUncut() const;
Double_t fRadiusInner;
Double_t fRadiusOuter;
Double_t fThetaMin;
Double_t fThetaMax;
Double_t fPhiMin;
Double_t fPhiMax;
};
class TBuffer3DTube : public TBuffer3D
{
private:
TBuffer3DTube(const TBuffer3DTube &);
const TBuffer3DTube & operator=(const TBuffer3DTube &);
protected:
TBuffer3DTube(Int_t type,
UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
public:
TBuffer3DTube(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
Double_t fRadiusInner;
Double_t fRadiusOuter;
Double_t fHalfLength;
};
class TBuffer3DTubeSeg : public TBuffer3DTube
{
private:
TBuffer3DTubeSeg(const TBuffer3DTubeSeg &);
const TBuffer3DTubeSeg & operator=(const TBuffer3DTubeSeg &);
protected:
TBuffer3DTubeSeg(Int_t type,
UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
public:
TBuffer3DTubeSeg(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
Double_t fPhiMin;
Double_t fPhiMax;
};
class TBuffer3DCutTube : public TBuffer3DTubeSeg
{
private:
TBuffer3DCutTube(const TBuffer3DTubeSeg &);
const TBuffer3DCutTube & operator=(const TBuffer3DTubeSeg &);
public:
TBuffer3DCutTube(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
Double_t fLowPlaneNorm[3];
Double_t fHighPlaneNorm[3];
};
#endif