00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TBuffer3D
00013 #define ROOT_TBuffer3D
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef ROOT_TObject
00024 #include "TObject.h"
00025 #endif
00026
00027 class TBuffer3D : public TObject
00028 {
00029 private:
00030 const Int_t fType;
00031
00032 UInt_t fNbPnts;
00033 UInt_t fNbSegs;
00034 UInt_t fNbPols;
00035
00036 UInt_t fPntsCapacity;
00037 UInt_t fSegsCapacity;
00038 UInt_t fPolsCapacity;
00039
00040 UInt_t fSections;
00041
00042 void Init();
00043
00044
00045 TBuffer3D(const TBuffer3D &);
00046 const TBuffer3D & operator=(const TBuffer3D &);
00047
00048
00049 static UInt_t fgCSLevel;
00050
00051 public:
00052
00053 enum EBoolOpCode {kCSUnion, kCSIntersection, kCSDifference, kCSNoOp};
00054
00055 static UInt_t GetCSLevel();
00056 static void IncCSLevel();
00057 static UInt_t DecCSLevel();
00058
00059
00060 enum ESection { kNone = BIT(0),
00061 kCore = BIT(1),
00062 kBoundingBox = BIT(2),
00063 kShapeSpecific = BIT(3),
00064 kRawSizes = BIT(4),
00065 kRaw = BIT(5),
00066 kAll = kCore|kBoundingBox|kShapeSpecific|kRawSizes|kRaw
00067 };
00068
00069 TBuffer3D(Int_t type,
00070 UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
00071 UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
00072 UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
00073 virtual ~TBuffer3D();
00074
00075
00076 void SetSectionsValid(UInt_t mask) { fSections |= mask & kAll; }
00077 void ClearSectionsValid();
00078 Bool_t SectionsValid(UInt_t mask) const { return (Bool_t) (GetSections(mask) == mask); }
00079 UInt_t GetSections(UInt_t mask) const { return (UInt_t) (fSections & mask); }
00080
00081
00082 void SetLocalMasterIdentity();
00083 void SetAABoundingBox(const Double_t origin[3],
00084 const Double_t halfLengths[3]);
00085
00086
00087 Bool_t SetRawSizes(UInt_t reqPnts, UInt_t reqPntsCapacity,
00088 UInt_t reqSegs, UInt_t reqSegsCapacity,
00089 UInt_t reqPols, UInt_t reqPolsCapacity);
00090
00091 UInt_t NbPnts() const { return fNbPnts; }
00092 UInt_t NbSegs() const { return fNbSegs; }
00093 UInt_t NbPols() const { return fNbPols; }
00094
00095
00096 Int_t Type() const { return fType; }
00097
00098 TObject *fID;
00099 Int_t fColor;
00100 Short_t fTransparency;
00101 Bool_t fLocalFrame;
00102 Bool_t fReflection;
00103 Double_t fLocalMaster[16];
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 Double_t fBBVertex[8][3];
00119
00120
00121
00122
00123 Double_t *fPnts;
00124 Int_t *fSegs;
00125 Int_t *fPols;
00126
00127
00128
00129 mutable UInt_t fPhysicalID;
00130
00131
00132 ClassDef(TBuffer3D,0)
00133 };
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 class TBuffer3DSphere : public TBuffer3D
00144 {
00145 private:
00146
00147 TBuffer3DSphere(const TBuffer3DSphere &);
00148 const TBuffer3DSphere & operator=(const TBuffer3DSphere &);
00149
00150 public:
00151 TBuffer3DSphere(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
00152 UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
00153 UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
00154
00155 Bool_t IsSolidUncut() const;
00156
00157
00158 Double_t fRadiusInner;
00159 Double_t fRadiusOuter;
00160 Double_t fThetaMin;
00161 Double_t fThetaMax;
00162 Double_t fPhiMin;
00163 Double_t fPhiMax;
00164 };
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 class TBuffer3DTube : public TBuffer3D
00175 {
00176 private:
00177
00178 TBuffer3DTube(const TBuffer3DTube &);
00179 const TBuffer3DTube & operator=(const TBuffer3DTube &);
00180
00181 protected:
00182 TBuffer3DTube(Int_t type,
00183 UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
00184 UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
00185 UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
00186
00187 public:
00188 TBuffer3DTube(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
00189 UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
00190 UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
00191
00192
00193 Double_t fRadiusInner;
00194 Double_t fRadiusOuter;
00195 Double_t fHalfLength;
00196 };
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206 class TBuffer3DTubeSeg : public TBuffer3DTube
00207 {
00208 private:
00209
00210 TBuffer3DTubeSeg(const TBuffer3DTubeSeg &);
00211 const TBuffer3DTubeSeg & operator=(const TBuffer3DTubeSeg &);
00212
00213 protected:
00214 TBuffer3DTubeSeg(Int_t type,
00215 UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
00216 UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
00217 UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
00218
00219 public:
00220 TBuffer3DTubeSeg(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
00221 UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
00222 UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
00223
00224
00225 Double_t fPhiMin;
00226 Double_t fPhiMax;
00227 };
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237 class TBuffer3DCutTube : public TBuffer3DTubeSeg
00238 {
00239 private:
00240
00241 TBuffer3DCutTube(const TBuffer3DTubeSeg &);
00242 const TBuffer3DCutTube & operator=(const TBuffer3DTubeSeg &);
00243
00244 public:
00245 TBuffer3DCutTube(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
00246 UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
00247 UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
00248
00249
00250 Double_t fLowPlaneNorm[3];
00251 Double_t fHighPlaneNorm[3];
00252 };
00253
00254 #endif