222 TBuffer3D::TBuffer3D(Int_t type,
223 UInt_t reqPnts, UInt_t reqPntsCapacity,
224 UInt_t reqSegs, UInt_t reqSegsCapacity,
225 UInt_t reqPols, UInt_t reqPolsCapacity) :
229 SetRawSizes(reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity);
235 TBuffer3D::~TBuffer3D()
237 if (fPnts)
delete [] fPnts;
238 if (fSegs)
delete [] fSegs;
239 if (fPols)
delete [] fPols;
245 void TBuffer3D::Init()
251 fLocalFrame = kFALSE;
252 fReflection = kFALSE;
253 SetLocalMasterIdentity();
256 for (UInt_t v=0; v<8; v++) {
257 for (UInt_t i=0; i<3; i++) {
258 fBBVertex[v][i] = 0.0;
280 ClearSectionsValid();
286 void TBuffer3D::ClearSectionsValid()
289 SetRawSizes(0, 0, 0, 0, 0, 0);
296 void TBuffer3D::SetLocalMasterIdentity()
298 for (UInt_t i=0; i<16; i++) {
300 fLocalMaster[i] = 0.0;
303 fLocalMaster[i] = 1.0;
320 void TBuffer3D::SetAABoundingBox(
const Double_t origin[3],
const Double_t halfLengths[3])
323 fBBVertex[0][0] = origin[0] - halfLengths[0];
324 fBBVertex[0][1] = origin[1] - halfLengths[1];
325 fBBVertex[0][2] = origin[2] - halfLengths[2];
327 fBBVertex[1][0] = origin[0] + halfLengths[0];
328 fBBVertex[1][1] = origin[1] - halfLengths[1];
329 fBBVertex[1][2] = origin[2] - halfLengths[2];
331 fBBVertex[2][0] = origin[0] + halfLengths[0];
332 fBBVertex[2][1] = origin[1] + halfLengths[1];
333 fBBVertex[2][2] = origin[2] - halfLengths[2];
335 fBBVertex[3][0] = origin[0] - halfLengths[0];
336 fBBVertex[3][1] = origin[1] + halfLengths[1];
337 fBBVertex[3][2] = origin[2] - halfLengths[2];
339 fBBVertex[4][0] = origin[0] - halfLengths[0];
340 fBBVertex[4][1] = origin[1] - halfLengths[1];
341 fBBVertex[4][2] = origin[2] + halfLengths[2];
343 fBBVertex[5][0] = origin[0] + halfLengths[0];
344 fBBVertex[5][1] = origin[1] - halfLengths[1];
345 fBBVertex[5][2] = origin[2] + halfLengths[2];
347 fBBVertex[6][0] = origin[0] + halfLengths[0];
348 fBBVertex[6][1] = origin[1] + halfLengths[1];
349 fBBVertex[6][2] = origin[2] + halfLengths[2];
351 fBBVertex[7][0] = origin[0] - halfLengths[0];
352 fBBVertex[7][1] = origin[1] + halfLengths[1];
353 fBBVertex[7][2] = origin[2] + halfLengths[2];
359 Bool_t TBuffer3D::SetRawSizes(UInt_t reqPnts, UInt_t reqPntsCapacity,
360 UInt_t reqSegs, UInt_t reqSegsCapacity,
361 UInt_t reqPols, UInt_t reqPolsCapacity)
363 Bool_t allocateOK = kTRUE;
369 if (reqPntsCapacity > fPntsCapacity) {
371 fPnts =
new Double_t[reqPntsCapacity];
373 fPntsCapacity = reqPntsCapacity;
375 fPntsCapacity = fNbPnts = 0;
379 if (reqSegsCapacity > fSegsCapacity) {
381 fSegs =
new Int_t[reqSegsCapacity];
383 fSegsCapacity = reqSegsCapacity;
385 fSegsCapacity = fNbSegs = 0;
389 if (reqPolsCapacity > fPolsCapacity) {
391 fPols =
new Int_t[reqPolsCapacity];
393 fPolsCapacity = reqPolsCapacity;
395 fPolsCapacity = fNbPols = 0;
406 TBuffer3DSphere::TBuffer3DSphere(UInt_t reqPnts, UInt_t reqPntsCapacity,
407 UInt_t reqSegs, UInt_t reqSegsCapacity,
408 UInt_t reqPols, UInt_t reqPolsCapacity) :
409 TBuffer3D(TBuffer3DTypes::kSphere, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
410 fRadiusInner(0.0), fRadiusOuter(0.0),
411 fThetaMin(0.0), fThetaMax(180.0),
412 fPhiMin(0.0), fPhiMax(360.0)
419 Bool_t TBuffer3DSphere::IsSolidUncut()
const
421 if (fRadiusInner != 0.0 ||
423 fThetaMax != 180.0 ||
435 TBuffer3DTube::TBuffer3DTube(UInt_t reqPnts, UInt_t reqPntsCapacity,
436 UInt_t reqSegs, UInt_t reqSegsCapacity,
437 UInt_t reqPols, UInt_t reqPolsCapacity) :
438 TBuffer3D(TBuffer3DTypes::kTube, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
439 fRadiusInner(0.0), fRadiusOuter(1.0), fHalfLength(1.0)
446 TBuffer3DTube::TBuffer3DTube(Int_t type,
447 UInt_t reqPnts, UInt_t reqPntsCapacity,
448 UInt_t reqSegs, UInt_t reqSegsCapacity,
449 UInt_t reqPols, UInt_t reqPolsCapacity) :
450 TBuffer3D(type, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
451 fRadiusInner(0.0), fRadiusOuter(1.0), fHalfLength(1.0)
458 TBuffer3DTubeSeg::TBuffer3DTubeSeg(UInt_t reqPnts, UInt_t reqPntsCapacity,
459 UInt_t reqSegs, UInt_t reqSegsCapacity,
460 UInt_t reqPols, UInt_t reqPolsCapacity) :
461 TBuffer3DTube(TBuffer3DTypes::kTubeSeg, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
462 fPhiMin(0.0), fPhiMax(360.0)
469 TBuffer3DTubeSeg::TBuffer3DTubeSeg(Int_t type,
470 UInt_t reqPnts, UInt_t reqPntsCapacity,
471 UInt_t reqSegs, UInt_t reqSegsCapacity,
472 UInt_t reqPols, UInt_t reqPolsCapacity) :
473 TBuffer3DTube(type, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
474 fPhiMin(0.0), fPhiMax(360.0)
481 TBuffer3DCutTube::TBuffer3DCutTube(UInt_t reqPnts, UInt_t reqPntsCapacity,
482 UInt_t reqSegs, UInt_t reqSegsCapacity,
483 UInt_t reqPols, UInt_t reqPolsCapacity) :
484 TBuffer3DTubeSeg(TBuffer3DTypes::kCutTube, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity)
486 fLowPlaneNorm[0] = 0.0; fLowPlaneNorm[0] = 0.0; fLowPlaneNorm[0] = -1.0;
487 fHighPlaneNorm[0] = 0.0; fHighPlaneNorm[0] = 0.0; fHighPlaneNorm[0] = 1.0;
491 UInt_t TBuffer3D::fgCSLevel = 0;
496 UInt_t TBuffer3D::GetCSLevel()
504 void TBuffer3D::IncCSLevel()
512 UInt_t TBuffer3D::DecCSLevel()