// @(#)root/base:$Name: $:$Id: TBuffer3D.cxx,v 1.00
// Author: Olivier Couet 05/05/04
/*************************************************************************
* Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#include "TBuffer3D.h"
#include "TBuffer3DTypes.h"
//////////////////////////////////////////////////////////////////////////
// //
// TBuffer3D //
// //
// Generic 3D primitive description class - see TBuffer3DTypes for //
// producer classes //
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// //
// TBuffer3D //
// //
// Generic 3D primitive description class - see TBuffer3DTypes for //
// producer classes //
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Construct from supplied shape type and raw sizes
// //
// TBuffer3D //
// //
// Generic 3D primitive description class - see TBuffer3DTypes for //
// producer classes //
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Destructor
// Construct from supplied shape type and raw sizes
// //
// TBuffer3D //
// //
// Generic 3D primitive description class - see TBuffer3DTypes for //
// producer classes //
//////////////////////////////////////////////////////////////////////////
// Initialise buffer
ClassImp(TBuffer3D)
// Destructor
// Construct from supplied shape type and raw sizes
//______________________________________________________________________________
TBuffer3D::TBuffer3D(Int_t type,
UInt_t reqPnts, UInt_t reqPntsCapacity,
UInt_t reqSegs, UInt_t reqSegsCapacity,
UInt_t reqPols, UInt_t reqPolsCapacity) :
fType(type)
// Initialise buffer
{
// Destructor
// Construct from supplied shape type and raw sizes
Init();
SetRawSizes(reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity);
}
//______________________________________________________________________________
TBuffer3D::~TBuffer3D()
// Initialise buffer
{
// Destructor
if (fPnts) delete [] fPnts;
if (fSegs) delete [] fSegs;
if (fPols) delete [] fPols;
//______________________________________________________________________________
}
//______________________________________________________________________________
void TBuffer3D::Init()
{
// Initialise buffer
fID = 0;
fColor = 0;
// Set fLocalMaster in section kCore to identity
fTransparency = 0;
fLocalFrame = kFALSE;
fReflection = kFALSE;
SetLocalMasterIdentity();
// Reset bounding box
for (UInt_t v=0; v<8; v++) {
for (UInt_t i=0; i<3; i++) {
fBBVertex[v][i] = 0.0;
}
}
// Set fLocalMaster in section kCore to identity
// Set kRaw tesselation section of buffer with supplied sizes
fPnts = 0;
fSegs = 0;
fPols = 0;
fNbPnts = 0;
fNbSegs = 0;
fNbPols = 0;
fPntsCapacity = 0;
fSegsCapacity = 0;
fPolsCapacity = 0;
// Set fLocalMaster in section kCore to identity
// Set kRaw tesselation section of buffer with supplied sizes
ClearSectionsValid();
}
//______________________________________________________________________________
void TBuffer3D::ClearSectionsValid()
{
// Clear any sections marked valid
fSections = 0U;
SetRawSizes(0, 0, 0, 0, 0, 0);
}
//______________________________________________________________________________
void TBuffer3D::SetLocalMasterIdentity()
{
// Set kRaw tesselation section of buffer with supplied sizes
// Set fLocalMaster in section kCore to identity
for (UInt_t i=0; i<16; i++) {
if (i%5) {
fLocalMaster[i] = 0.0;
}
else {
fLocalMaster[i] = 1.0;
}
}
}
//______________________________________________________________________________
void TBuffer3D::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 lengths
//
// 7-------6
// /| /|
// 3-------2 |
// | 4-----|-5
// |/ |/
// 0-------1
//
// Vertex 0
fBBVertex[0][0] = origin[0] - halfLengths[0]; // x
fBBVertex[0][1] = origin[1] - halfLengths[1]; // y
fBBVertex[0][2] = origin[2] - halfLengths[2]; // z
// Vertex 1
fBBVertex[1][0] = origin[0] + halfLengths[0]; // x
fBBVertex[1][1] = origin[1] - halfLengths[1]; // y
fBBVertex[1][2] = origin[2] - halfLengths[2]; // z
// Vertex 2
fBBVertex[2][0] = origin[0] + halfLengths[0]; // x
fBBVertex[2][1] = origin[1] + halfLengths[1]; // y
fBBVertex[2][2] = origin[2] - halfLengths[2]; // z
// Vertex 3
fBBVertex[3][0] = origin[0] - halfLengths[0]; // x
fBBVertex[3][1] = origin[1] + halfLengths[1]; // y
fBBVertex[3][2] = origin[2] - halfLengths[2]; // z
// Vertex 4
fBBVertex[4][0] = origin[0] - halfLengths[0]; // x
fBBVertex[4][1] = origin[1] - halfLengths[1]; // y
fBBVertex[4][2] = origin[2] + halfLengths[2]; // z
// Vertex 5
fBBVertex[5][0] = origin[0] + halfLengths[0]; // x
fBBVertex[5][1] = origin[1] - halfLengths[1]; // y
fBBVertex[5][2] = origin[2] + halfLengths[2]; // z
// Vertex 6
fBBVertex[6][0] = origin[0] + halfLengths[0]; // x
fBBVertex[6][1] = origin[1] + halfLengths[1]; // y
fBBVertex[6][2] = origin[2] + halfLengths[2]; // z
// Vertex 7
fBBVertex[7][0] = origin[0] - halfLengths[0]; // x
fBBVertex[7][1] = origin[1] + halfLengths[1]; // y
fBBVertex[7][2] = origin[2] + halfLengths[2]; // z
}
//______________________________________________________________________________
Bool_t TBuffer3D::SetRawSizes(UInt_t reqPnts, UInt_t reqPntsCapacity,
UInt_t reqSegs, UInt_t reqSegsCapacity,
UInt_t reqPols, UInt_t reqPolsCapacity)
{
// Set kRaw tesselation section of buffer with supplied sizes
Bool_t allocateOK = kTRUE;
fNbPnts = reqPnts;
fNbSegs = reqSegs;
fNbPols = reqPols;
if (reqPntsCapacity > fPntsCapacity) {
delete [] fPnts;
fPnts = new Double_t[reqPntsCapacity];
if (fPnts) {
fPntsCapacity = reqPntsCapacity;
} else {
fPntsCapacity = fNbPnts = 0;
allocateOK = kFALSE;
}
}
if (reqSegsCapacity > fSegsCapacity) {
delete [] fSegs;
fSegs = new Int_t[reqSegsCapacity];
if (fSegs) {
fSegsCapacity = reqSegsCapacity;
} else {
fSegsCapacity = fNbSegs = 0;
allocateOK = kFALSE;
}
}
if (reqPolsCapacity > fPolsCapacity) {
delete [] fPols;
fPols = new Int_t[reqPolsCapacity];
if (fPols) {
fPolsCapacity = reqPolsCapacity;
} else {
fPolsCapacity = fNbPols = 0;
allocateOK = kFALSE;
}
}
return allocateOK;
}
//______________________________________________________________________________
TBuffer3DSphere::TBuffer3DSphere(UInt_t reqPnts, UInt_t reqPntsCapacity,
UInt_t reqSegs, UInt_t reqSegsCapacity,
UInt_t reqPols, UInt_t reqPolsCapacity) :
TBuffer3D(TBuffer3DTypes::kSphere, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
fRadiusInner(0.0), fRadiusOuter(0.0),
fThetaMin(0.0), fThetaMax(180.0),
fPhiMin(0.0), fPhiMax(360.0)
{
}
//______________________________________________________________________________
Bool_t TBuffer3DSphere::IsSolidUncut() const
{
// Test if buffer represents a solid uncut sphere
if (fRadiusInner != 0.0 ||
fThetaMin != 0.0 ||
fThetaMax != 180.0 ||
fPhiMin != 0.0 ||
fPhiMax != 360.0 ) {
return kFALSE;
} else {
return kTRUE;
}
}
//______________________________________________________________________________
TBuffer3DTube::TBuffer3DTube(UInt_t reqPnts, UInt_t reqPntsCapacity,
UInt_t reqSegs, UInt_t reqSegsCapacity,
UInt_t reqPols, UInt_t reqPolsCapacity) :
TBuffer3D(TBuffer3DTypes::kTube, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
fRadiusInner(0.0), fRadiusOuter(1.0), fHalfLength(1.0)
{
}
//______________________________________________________________________________
TBuffer3DTube::TBuffer3DTube(Int_t type,
UInt_t reqPnts, UInt_t reqPntsCapacity,
UInt_t reqSegs, UInt_t reqSegsCapacity,
UInt_t reqPols, UInt_t reqPolsCapacity) :
TBuffer3D(type, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
fRadiusInner(0.0), fRadiusOuter(1.0), fHalfLength(1.0)
{
}
//______________________________________________________________________________
TBuffer3DTubeSeg::TBuffer3DTubeSeg(UInt_t reqPnts, UInt_t reqPntsCapacity,
UInt_t reqSegs, UInt_t reqSegsCapacity,
UInt_t reqPols, UInt_t reqPolsCapacity) :
TBuffer3DTube(TBuffer3DTypes::kTubeSeg, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
fPhiMin(0.0), fPhiMax(360.0)
{
}
//______________________________________________________________________________
TBuffer3DTubeSeg::TBuffer3DTubeSeg(Int_t type,
UInt_t reqPnts, UInt_t reqPntsCapacity,
UInt_t reqSegs, UInt_t reqSegsCapacity,
UInt_t reqPols, UInt_t reqPolsCapacity) :
TBuffer3DTube(type, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity),
fPhiMin(0.0), fPhiMax(360.0)
{
}
//______________________________________________________________________________
TBuffer3DCutTube::TBuffer3DCutTube(UInt_t reqPnts, UInt_t reqPntsCapacity,
UInt_t reqSegs, UInt_t reqSegsCapacity,
UInt_t reqPols, UInt_t reqPolsCapacity) :
TBuffer3DTubeSeg(TBuffer3DTypes::kCutTube, reqPnts, reqPntsCapacity, reqSegs, reqSegsCapacity, reqPols, reqPolsCapacity)
{
fLowPlaneNorm[0] = 0.0; fLowPlaneNorm[0] = 0.0; fLowPlaneNorm[0] = -1.0;
fHighPlaneNorm[0] = 0.0; fHighPlaneNorm[0] = 0.0; fHighPlaneNorm[0] = 1.0;
}
//CS specific
UInt_t TBuffer3D::fCSLevel = 0;
//______________________________________________________________________________
UInt_t TBuffer3D::GetCSLevel()
{
return fCSLevel;
}
//______________________________________________________________________________
void TBuffer3D::IncCSLevel()
{
++fCSLevel;
}
//______________________________________________________________________________
UInt_t TBuffer3D::DecCSLevel()
{
return --fCSLevel;
}
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.