// @(#)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 "TVirtualPad.h"
#include "TVirtualViewer3D.h"
#include "TView.h"
ClassImp(TBuffer3D)
//______________________________________________________________________________
TBuffer3D::TBuffer3D()
{
fTransparency = 0;
fType = -1;
fOption = kPAD;
fId = 0;
fNbPnts = 0;
fNbSegs = 0;
fNbPols = 0;
fPnts = 0;
fSegs = 0;
fPols = 0;
fPntsSize = 0;
fSegsSize = 0;
fPolsSize = 0;
fColor = 0;
}
//______________________________________________________________________________
TBuffer3D::TBuffer3D(Int_t n1, Int_t n2, Int_t n3)
{
fTransparency = 0;
fPntsSize = n1;
fSegsSize = n2;
fPolsSize = n3;
fType = -1;
fOption = kPAD;
fId = 0;
fNbPnts = 0;
fNbSegs = 0;
fNbPols = 0;
fPnts = 0;
fSegs = 0;
fPols = 0;
fColor = 0;
if ( fPntsSize>0 ) fPnts = new Double_t[fPntsSize];
if ( fSegsSize>0 ) fSegs = new Int_t[fSegsSize];
if ( fPolsSize>0 ) fPols = new Int_t[fPolsSize];
}
//______________________________________________________________________________
TBuffer3D::~TBuffer3D()
{
if (fPnts) delete [] fPnts;
if (fSegs) delete [] fSegs;
if (fPols) delete [] fPols;
}
//______________________________________________________________________________
void TBuffer3D::Paint(Option_t *option)
{
Int_t i, i0, i1, i2;
Double_t x0, y0, z0, x1, y1, z1;
TVirtualViewer3D *viewer3D;
TView *view;
// Compute the shape range and update gPad->fView
switch (fOption) {
case kRANGE:
x0 = x1 = fPnts[0];
y0 = y1 = fPnts[1];
z0 = z1 = fPnts[2];
for (i=1; i<fNbPnts; i++) {
i0 = 3*i; i1 = i0+1; i2 = i0+2;
x0 = fPnts[i0] < x0 ? fPnts[i0] : x0;
y0 = fPnts[i1] < y0 ? fPnts[i1] : y0;
z0 = fPnts[i2] < z0 ? fPnts[i2] : z0;
x1 = fPnts[i0] > x1 ? fPnts[i0] : x1;
y1 = fPnts[i1] > y1 ? fPnts[i1] : y1;
z1 = fPnts[i2] > z1 ? fPnts[i2] : z1;
}
view = gPad->GetView();
if (view->GetAutoRange()) view->SetRange(x0,y0,z0,x1,y1,z1,2);
break;
// Update viewer
case kSIZE:
case kX3D:
case kOGL:
viewer3D = gPad->GetViewer3D();
if (viewer3D) viewer3D->UpdateScene(option);
break;
// Paint this in gPad
case kPAD:
default:
if (option && !strcmp(option, "ogl")) return; // In case of OpenGL, the pad is not redrawn
if (fTransparency > 50) return; //do not show semi transparent objects
if ( fType==kMARKER ) {
view = gPad->GetView();
Double_t pndc[3], temp[3];
for (i=0; i<fNbPnts; i++) {
for ( i0=0; i0<3; i0++ ) temp[i0] = fPnts[3*i+i0];
view->WCtoNDC(temp, pndc);
gPad->PaintPolyMarker(1, &pndc[0], &pndc[1]);
}
} else {
for (i=0; i<fNbSegs; i++) {
i0 = 3*fSegs[3*i+1];
Double_t *ptpoints_0 = &(fPnts[i0]);
i0 = 3*fSegs[3*i+2];
Double_t *ptpoints_3 = &(fPnts[i0]);
gPad->PaintLine3D(ptpoints_0, ptpoints_3);
}
}
break;
}
}
//______________________________________________________________________________
void TBuffer3D::ReAllocate(Int_t n1, Int_t n2, Int_t n3)
{
if (n1 > fPntsSize) {
delete [] fPnts;
fPntsSize = n1;
fPnts = new Double_t[fPntsSize];
}
if (n2 > fSegsSize) {
delete [] fSegs;
fSegsSize = n2;
fSegs = new Int_t[fSegsSize];
}
if (n3 > fPolsSize) {
delete [] fPols;
fPolsSize = n3;
fPols = new Int_t[fPolsSize];
}
}
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.