67 :
TShape(name, title,material)
70 Error(name,
"number of z planes for %s must be at least two !", name);
84 while (fDphi1 > 360) fDphi1 -= 360;
177 if ((secNum < 0) || (secNum >= fNz))
return;
179 fRmin[secNum] = rmin;
180 fRmax[secNum] = rmax;
193 Int_t numPoints = fNz*2*
n;
203 for (
Int_t j = 0; j <
n; j++) {
232 for (i = 0; i <
fNz; i++) {
233 for (j = 0; j <
n; j++) {
236 points[indx++] =
fDz[i];
238 for (j = 0; j <
n; j++) {
241 points[indx++] =
fDz[i];
257 gSize3D.numSegs += 4*(fNz*n-1+(fDphi1 == 360));
258 gSize3D.numPolys += 2*(fNz*n-1+(fDphi1 == 360));
264 void TPCON::Streamer(
TBuffer &b)
308 Bool_t specialCase = (fDphi1 == 360);
309 Int_t nbSegs = 4*(fNz*n-1+(specialCase ==
kTRUE));
310 Int_t nbPols = 2*(fNz*n-1+(specialCase ==
kTRUE));
312 if (buffer.
SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, nbPols, 6*nbPols)) {
338 if (fNz < 2)
return kFALSE;
340 Bool_t specialCase = (fDphi1 == 360);
350 for (i = 0; i < fNz*2; i++) {
352 for (j = 1; j <
n; j++) {
354 buffer.
fSegs[indx++] = indx2+j-1;
355 buffer.
fSegs[indx++] = indx2+j;
359 buffer.
fSegs[indx++] = indx2+j-1;
360 buffer.
fSegs[indx++] = indx2;
365 for (i = 0; i < 2; i++) {
366 indx2 = i*(fNz-1)*2*n;
367 for (j = 0; j <
n; j++) {
369 buffer.
fSegs[indx++] = indx2+j;
370 buffer.
fSegs[indx++] = indx2+n+j;
375 for (i = 0; i < (fNz-1); i++) {
379 for (j = 0; j <
n; j++) {
380 buffer.
fSegs[indx++] = c+2;
381 buffer.
fSegs[indx++] = indx2+j;
382 buffer.
fSegs[indx++] = indx2+n*2+j;
386 for (j = 0; j <
n; j++) {
387 buffer.
fSegs[indx++] = c+3;
388 buffer.
fSegs[indx++] = indx2+j;
389 buffer.
fSegs[indx++] = indx2+n*2+j;
396 for (i = 1; i < (fNz-1); i++) {
397 for (j = 0; j < 2; j++) {
399 buffer.
fSegs[indx++] = 2*i * n + j*(n-1);
400 buffer.
fSegs[indx++] = (2*i+1) * n + j*(n-1);
410 for (j = 0; j < n-1; j++) {
411 buffer.
fPols[indx++] = c+3;
412 buffer.
fPols[indx++] = 4;
413 buffer.
fPols[indx++] = 2*fNz*m+j;
414 buffer.
fPols[indx++] = m+j;
415 buffer.
fPols[indx++] = 2*fNz*m+j+1;
416 buffer.
fPols[indx++] = j;
418 for (j = 0; j < n-1; j++) {
419 buffer.
fPols[indx++] = c+3;
420 buffer.
fPols[indx++] = 4;
421 buffer.
fPols[indx++] = 2*fNz*m+n+j;
422 buffer.
fPols[indx++] = (fNz*2-2)*m+j;
423 buffer.
fPols[indx++] = 2*fNz*m+n+j+1;
424 buffer.
fPols[indx++] = (fNz*2-2)*m+m+j;
427 buffer.
fPols[indx++] = c+3;
428 buffer.
fPols[indx++] = 4;
429 buffer.
fPols[indx++] = 2*fNz*m+j;
430 buffer.
fPols[indx++] = m+j;
431 buffer.
fPols[indx++] = 2*fNz*
m;
432 buffer.
fPols[indx++] = j;
434 buffer.
fPols[indx++] = c+3;
435 buffer.
fPols[indx++] = 4;
436 buffer.
fPols[indx++] = 2*fNz*m+n+j;
437 buffer.
fPols[indx++] = (fNz*2-2)*m+j;
438 buffer.
fPols[indx++] = 2*fNz*m+
n;
439 buffer.
fPols[indx++] = (fNz*2-2)*m+m+j;
441 for (k = 0; k < (fNz-1); k++) {
442 for (j = 0; j < n-1; j++) {
444 buffer.
fPols[indx++] = 4;
445 buffer.
fPols[indx++] = 2*k*m+j;
446 buffer.
fPols[indx++] = fNz*2*m+(2*k+2)*n+j+1;
447 buffer.
fPols[indx++] = (2*k+2)*m+j;
448 buffer.
fPols[indx++] = fNz*2*m+(2*k+2)*n+j;
450 for (j = 0; j < n-1; j++) {
451 buffer.
fPols[indx++] = c+1;
452 buffer.
fPols[indx++] = 4;
453 buffer.
fPols[indx++] = (2*k+1)*m+j;
454 buffer.
fPols[indx++] = fNz*2*m+(2*k+3)*n+j;
455 buffer.
fPols[indx++] = (2*k+3)*m+j;
456 buffer.
fPols[indx++] = fNz*2*m+(2*k+3)*n+j+1;
461 buffer.
fPols[indx++] = 4;
462 buffer.
fPols[indx++] = 2*k*m+j;
463 buffer.
fPols[indx++] = fNz*2*m+(2*k+2)*n;
464 buffer.
fPols[indx++] = (2*k+2)*m+j;
465 buffer.
fPols[indx++] = fNz*2*m+(2*k+2)*n+j;
467 buffer.
fPols[indx++] = c+1;
468 buffer.
fPols[indx++] = 4;
469 buffer.
fPols[indx++] = (2*k+1)*m+j;
470 buffer.
fPols[indx++] = fNz*2*m+(2*k+3)*n+j;
471 buffer.
fPols[indx++] = (2*k+3)*m+j;
472 buffer.
fPols[indx++] = fNz*2*m+(2*k+3)*n;
478 for (k = 0; k < (fNz-1); k++) {
479 buffer.
fPols[indx++] = c+2;
480 buffer.
fPols[indx++] = 4;
481 buffer.
fPols[indx++] = k==0 ? indx2 : indx2+2*fNz*n+2*(k-1);
482 buffer.
fPols[indx++] = indx2+2*(k+1)*n;
483 buffer.
fPols[indx++] = indx2+2*fNz*n+2*k;
484 buffer.
fPols[indx++] = indx2+(2*k+3)*n;
486 buffer.
fPols[indx++] = c+2;
487 buffer.
fPols[indx++] = 4;
488 buffer.
fPols[indx++] = k==0 ? indx2+n-1 : indx2+2*fNz*n+2*(k-1)+1;
489 buffer.
fPols[indx++] = indx2+(2*k+3)*n+n-1;
490 buffer.
fPols[indx++] = indx2+2*fNz*n+2*k+1;
491 buffer.
fPols[indx++] = indx2+2*(k+1)*n+n-1;
493 buffer.
fPols[indx-8] = indx2+
n;
494 buffer.
fPols[indx-2] = indx2+2*n-1;
virtual Int_t GetNumberOfDivisions() const
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
virtual ~TPCON()
PCON shape default destructor.
Float_t fPhi1
Table of cos(fPhi1) .... cos(fPhil+fDphi1)
virtual void DefineSection(Int_t secNum, Float_t z, Float_t rmin, Float_t rmax)
Defines section secNum of the polycone.
Buffer base class used for serializing objects.
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
virtual const TBuffer3D & GetBuffer3D(Int_t reqSections) const
Get buffer 3d.
virtual void FillBuffer3D(TBuffer3D &buffer, Int_t reqSections) const
We have to set kRawSize (unless already done) to allocate buffer space before kRaw can be filled...
virtual void Sizeof3D() const
Return total X3D needed by TNode::ls (when called with option "x")
TPCON & operator=(const TPCON &)
assignment operator
virtual void MakeTableOfCoSin() const
Make table of cosine and sine.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void FillTableOfCoSin(Double_t phi, Double_t angstep, Int_t n) const
Fill the table of cos and sin to prepare drawing.
void SetSectionsValid(UInt_t mask)
Int_t ShapeDistancetoPrimitive(Int_t numPoints, Int_t px, Int_t py)
Distance to primitive.
virtual Bool_t SetSegsAndPols(TBuffer3D &buffer) const
Set segments and polygons.
This is the base class for all geometry shapes.
void TransformPoints(Double_t *points, UInt_t NbPnts) const
Transform points (LocalToMaster)
Double_t * fCoTab
Table of sin(fPhi1) .... sin(fPhil+fDphi1)
Int_t GetBasicColor() const
Get basic color.
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.
Generic 3D primitive description class.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual void SetNumberOfDivisions(Int_t p)
Set number of divisions.
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Compute distance from point px,py to a PCON.
TShape & operator=(const TShape &)
assignment operator
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
Bool_t SectionsValid(UInt_t mask) const
virtual void SetPoints(Double_t *points) const
Create PCON points.
virtual Int_t ReadArray(Bool_t *&b)=0