Logo ROOT   master
Reference Guide
TBuffer3D.h
Go to the documentation of this file.
1 // @(#)root/base:$Id: TBuffer3D.h,v 1.00
2 // Author: Olivier Couet 05/05/04
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_TBuffer3D
13 #define ROOT_TBuffer3D
14 
15 #include "TObject.h"
16 
17 class TBuffer3D : public TObject
18 {
19 private:
20  const Int_t fType; // Primitive type - predefined ones in TBuffer3DTypes.h
21 
22  UInt_t fNbPnts; // Number of points describing the shape
23  UInt_t fNbSegs; // Number of segments describing the shape
24  UInt_t fNbPols; // Number of polygons describing the shape
25 
26  UInt_t fPntsCapacity; // Current capacity of fPnts space
27  UInt_t fSegsCapacity; // Current capacity of fSegs space
28  UInt_t fPolsCapacity; // Current capacity of fSegs space
29 
30  UInt_t fSections; // Section validity flags
31 
32  void Init();
33 
34  // Non-copyable class
35  TBuffer3D(const TBuffer3D &) = delete;
36  TBuffer3D & operator=(const TBuffer3D &) = delete;
37 
38  //CS specific
39  static UInt_t fgCSLevel;
40 
41 public:
42  //CS specific
44 
45  static UInt_t GetCSLevel();
46  static void IncCSLevel();
47  static UInt_t DecCSLevel();
48 
49  enum ESection { kNone = BIT(0),
50  kCore = BIT(1),
53  kRawSizes = BIT(4),
54  kRaw = BIT(5),
56  };
57 
59  UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
60  UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
61  UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
62  virtual ~TBuffer3D();
63 
64  // Section validity flags
65  void SetSectionsValid(UInt_t mask) { fSections |= mask & kAll; }
66  void ClearSectionsValid();
67  Bool_t SectionsValid(UInt_t mask) const { return (Bool_t) (GetSections(mask) == mask); }
68  UInt_t GetSections(UInt_t mask) const { return (UInt_t) (fSections & mask); }
69 
70  // Convenience functions
71  void SetLocalMasterIdentity(); // Set fLocalMaster in kCore to identity
72  void SetAABoundingBox(const Double_t origin[3], // Set fBBVertex in kBoundingBox to axis aligned BB
73  const Double_t halfLengths[3]);
74 
75  // SECTION: kRawSize get/set
76  Bool_t SetRawSizes(UInt_t reqPnts, UInt_t reqPntsCapacity,
77  UInt_t reqSegs, UInt_t reqSegsCapacity,
78  UInt_t reqPols, UInt_t reqPolsCapacity);
79 
80  UInt_t NbPnts() const { return fNbPnts; }
81  UInt_t NbSegs() const { return fNbSegs; }
82  UInt_t NbPols() const { return fNbPols; }
83 
84  // SECTION: kCore
85  Int_t Type() const { return fType; }
86 
87  TObject *fID; // ID/object generating buffer - see TVirtualViewer3D for setting
88  Int_t fColor; // Color index
89  Short_t fTransparency; // Percentage transparency [0,100]
90  Bool_t fLocalFrame; // True = Local, False = Master reference frame
91  Bool_t fReflection; // Matrix is reflection
92  Double_t fLocalMaster[16]; // Local->Master Matrix - identity if master frame
93 
94  // SECTION: kBoundingBox
95  //
96  // Local frame (fLocalFrame true) axis aligned
97  // Master frame (fLocalFrame false) oriented
98  // Could be more compact (2 and 3 vertices respectively) and rest
99  // calculated as needed - but not worth it
100  // 7-------6
101  // /| /|
102  // 3-------2 |
103  // | 4-----|-5
104  // |/ |/
105  // 0-------1
106  //
107  Double_t fBBVertex[8][3]; // 8 vertices defining bounding box.
108 
109  // SECTION: kShapeSpecific - none for base class
110 
111  // SECTION: kRaw
112  Double_t *fPnts; // x0, y0, z0, x1, y1, z1, ..... ..... ....
113  Int_t *fSegs; // c0, p0, q0, c1, p1, q1, ..... ..... ....
114  Int_t *fPols; // c0, n0, s0, s1, ... sn, c1, n1, s0, ... sn
115 
116 
117  // OUTPUT SECTION, filled by viewer as response
118  mutable UInt_t fPhysicalID; // Unique replica ID.
119 
120 
121  ClassDef(TBuffer3D,0) // 3D primitives description
122 };
123 
124 /** \class TBuffer3DSphere
125 Sphere description class - see TBuffer3DTypes for producer classes
126 Supports hollow and cut spheres.*/
127 
129 {
130 private:
131  // Non-copyable class
132  TBuffer3DSphere(const TBuffer3DSphere &) = delete;
133  TBuffer3DSphere & operator=(const TBuffer3DSphere &) = delete;
134 
135 public:
136  TBuffer3DSphere(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
137  UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
138  UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
139 
140  Bool_t IsSolidUncut() const;
141 
142  // SECTION: kShapeSpecific
145  Double_t fThetaMin; // Lower theta limit (orientation?)
146  Double_t fThetaMax; // Higher theta limit (orientation?)
147  Double_t fPhiMin; // Lower phi limit (orientation?)
148  Double_t fPhiMax; // Higher phi limit (orientation?)
149 };
150 
151 /** \class TBuffer3DTube
152 Complete tube description class - see TBuffer3DTypes for producer classes
153 */
154 
155 class TBuffer3DTube : public TBuffer3D
156 {
157 private:
158  // Non-copyable class
159  TBuffer3DTube(const TBuffer3DTube &) = delete;
160  TBuffer3DTube & operator=(const TBuffer3DTube &) = delete;
161 
162 protected:
164  UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
165  UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
166  UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
167 
168 public:
169  TBuffer3DTube(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
170  UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
171  UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
172 
173  // SECTION: kShapeSpecific
174  Double_t fRadiusInner; // Inner radius
175  Double_t fRadiusOuter; // Outer radius
176  Double_t fHalfLength; // Half length (dz)
177 };
178 
179 /** \class TBuffer3DTubeSeg
180 Tube segment description class - see TBuffer3DTypes for producer classes
181 */
182 
184 {
185 private:
186  // Non-copyable class
188  TBuffer3DTubeSeg & operator=(const TBuffer3DTubeSeg &) = delete;
189 
190 protected:
192  UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
193  UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
194  UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
195 
196 public:
197  TBuffer3DTubeSeg(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
198  UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
199  UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
200 
201  // SECTION: kShapeSpecific
202  Double_t fPhiMin; // Lower phi limit
203  Double_t fPhiMax; // Higher phi limit
204 };
205 
206 /** \class TBuffer3DCutTube
207 Cut tube segment description class - see TBuffer3DTypes for producer classes
208 */
209 
211 {
212 private:
213  // Non-copyable class
214  TBuffer3DCutTube(const TBuffer3DTubeSeg &) = delete;
215  TBuffer3DCutTube & operator=(const TBuffer3DTubeSeg &) = delete;
216 
217 public:
218  TBuffer3DCutTube(UInt_t reqPnts = 0, UInt_t reqPntsCapacity = 0,
219  UInt_t reqSegs = 0, UInt_t reqSegsCapacity = 0,
220  UInt_t reqPols = 0, UInt_t reqPolsCapacity = 0);
221 
222  // SECTION: kShapeSpecific
223  Double_t fLowPlaneNorm[3]; // Normal to lower cut plane
224  Double_t fHighPlaneNorm[3]; // Normal to highest cut plane
225 };
226 
227 #endif
Double_t fThetaMax
Definition: TBuffer3D.h:146
Complete tube description class - see TBuffer3DTypes for producer classes.
Definition: TBuffer3D.h:155
Double_t fHighPlaneNorm[3]
Definition: TBuffer3D.h:224
Double_t fRadiusInner
Definition: TBuffer3D.h:174
Double_t fThetaMin
Definition: TBuffer3D.h:145
unsigned int UInt_t
Definition: CPyCppyy.h:44
Double_t fBBVertex[8][3]
Definition: TBuffer3D.h:107
Tube segment description class - see TBuffer3DTypes for producer classes.
Definition: TBuffer3D.h:183
#define BIT(n)
Definition: Rtypes.h:83
int Int_t
Definition: CPyCppyy.h:43
UInt_t fSections
Definition: TBuffer3D.h:30
Double_t fLocalMaster[16]
Definition: TBuffer3D.h:92
TBuffer3D(const TBuffer3D &)=delete
void SetLocalMasterIdentity()
Set kRaw tessellation section of buffer with supplied sizes.
Definition: TBuffer3D.cxx:296
UInt_t NbPnts() const
Definition: TBuffer3D.h:80
void ClearSectionsValid()
Clear any sections marked valid.
Definition: TBuffer3D.cxx:286
Cut tube segment description class - see TBuffer3DTypes for producer classes.
Definition: TBuffer3D.h:210
TBuffer3DTube & operator=(const TBuffer3DTube &)=delete
bool Bool_t
Definition: RtypesCore.h:61
UInt_t fNbSegs
Definition: TBuffer3D.h:23
static UInt_t GetCSLevel()
Return CS level.
Definition: TBuffer3D.cxx:496
TBuffer3DCutTube & operator=(const TBuffer3DTubeSeg &)=delete
Double_t fRadiusInner
Definition: TBuffer3D.h:143
UInt_t fNbPols
Definition: TBuffer3D.h:24
#define ClassDef(name, id)
Definition: Rtypes.h:322
UInt_t fNbPnts
Definition: TBuffer3D.h:22
UInt_t NbSegs() const
Definition: TBuffer3D.h:81
TBuffer3DCutTube(const TBuffer3DTubeSeg &)=delete
Double_t * fPnts
Definition: TBuffer3D.h:112
Sphere description class - see TBuffer3DTypes for producer classes Supports hollow and cut spheres...
Definition: TBuffer3D.h:128
static void IncCSLevel()
Increment CS level.
Definition: TBuffer3D.cxx:504
UInt_t GetSections(UInt_t mask) const
Definition: TBuffer3D.h:68
void SetSectionsValid(UInt_t mask)
Definition: TBuffer3D.h:65
Int_t * fPols
Definition: TBuffer3D.h:114
Bool_t fLocalFrame
Definition: TBuffer3D.h:90
Double_t fRadiusOuter
Definition: TBuffer3D.h:144
Double_t fRadiusOuter
Definition: TBuffer3D.h:175
const Int_t fType
Definition: TBuffer3D.h:20
Double_t fHalfLength
Definition: TBuffer3D.h:176
Double_t fPhiMax
Definition: TBuffer3D.h:148
Bool_t SectionsValid(UInt_t mask) const
Definition: TBuffer3D.h:67
TBuffer3DTubeSeg(const TBuffer3DTubeSeg &)
static UInt_t fgCSLevel
Definition: TBuffer3D.h:39
void SetAABoundingBox(const Double_t origin[3], const Double_t halfLengths[3])
Set fBBVertex in kBoundingBox section to a axis aligned (local) BB using supplied origin and box half...
Definition: TBuffer3D.cxx:320
UInt_t fPhysicalID
Definition: TBuffer3D.h:118
UInt_t fPolsCapacity
Definition: TBuffer3D.h:28
Bool_t SetRawSizes(UInt_t reqPnts, UInt_t reqPntsCapacity, UInt_t reqSegs, UInt_t reqSegsCapacity, UInt_t reqPols, UInt_t reqPolsCapacity)
Set kRaw tessellation section of buffer with supplied sizes.
Definition: TBuffer3D.cxx:359
short Short_t
Definition: RtypesCore.h:37
Generic 3D primitive description class.
Definition: TBuffer3D.h:17
UInt_t NbPols() const
Definition: TBuffer3D.h:82
TObject * fID
Definition: TBuffer3D.h:87
Double_t fPhiMin
Definition: TBuffer3D.h:147
static UInt_t DecCSLevel()
Decrement CS level.
Definition: TBuffer3D.cxx:512
UInt_t fPntsCapacity
Definition: TBuffer3D.h:26
Bool_t fReflection
Definition: TBuffer3D.h:91
double Double_t
Definition: RtypesCore.h:57
Double_t fLowPlaneNorm[3]
Definition: TBuffer3D.h:223
Bool_t IsSolidUncut() const
Test if buffer represents a solid uncut sphere.
Definition: TBuffer3D.cxx:419
Int_t Type() const
Definition: TBuffer3D.h:85
int type
Definition: TGX11.cxx:120
Double_t fPhiMax
Definition: TBuffer3D.h:203
Int_t fColor
Definition: TBuffer3D.h:88
void Init()
Initialise buffer.
Definition: TBuffer3D.cxx:245
TBuffer3DSphere & operator=(const TBuffer3DSphere &)=delete
Mother of all ROOT objects.
Definition: TObject.h:37
Int_t * fSegs
Definition: TBuffer3D.h:113
TBuffer3DTubeSeg & operator=(const TBuffer3DTubeSeg &)=delete
Double_t fPhiMin
Definition: TBuffer3D.h:202
TBuffer3D & operator=(const TBuffer3D &)=delete
UInt_t fSegsCapacity
Definition: TBuffer3D.h:27
virtual ~TBuffer3D()
Destructor.
Definition: TBuffer3D.cxx:235
Short_t fTransparency
Definition: TBuffer3D.h:89
TBuffer3DSphere(const TBuffer3DSphere &)=delete
TBuffer3DTube(const TBuffer3DTube &)=delete