]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Reve/QuadSet.cxx
Fix effc++ warnings.
[u/mrichter/AliRoot.git] / EVE / Reve / QuadSet.cxx
CommitLineData
a8b53f69 1// $Header$
2
5a5a1232 3#include "QuadSet.h"
4
5#include <TColor.h>
6
7#include <TBuffer3D.h>
8#include <TBuffer3DTypes.h>
9#include <TGeometry.h>
10#include <TVirtualPad.h>
11#include <TVirtualViewer3D.h>
12
13#include <TROOT.h>
14#include <TRandom.h>
15
16
17using namespace Reve;
18
19/**************************************************************************/
20// Quad
21/**************************************************************************/
22ClassImp(Reve::Quad)
23
24void Quad::ColorFromIdx(Color_t ci)
25{
26 TColor* c = gROOT->GetColor(ci);
27 if(c) {
28 UChar_t *x = (UChar_t*) &color;
29 x[0] = (UChar_t)(255*c->GetRed()); x[1] = (UChar_t)(255*c->GetGreen());
30 x[2] = (UChar_t)(255*c->GetBlue()); x[3] = 255;
31 }
32}
33
265ecb21 34Quad::Quad(TRandom& rnd, Float_t origin, Float_t size) : color(0)
5a5a1232 35{
36 ColorFromIdx(Int_t(30*rnd.Rndm()));
37 Float_t x = 2*origin*(rnd.Rndm() - 0.5);
38 Float_t y = 2*origin*(rnd.Rndm() - 0.5);
39 Float_t z = 2*origin*(rnd.Rndm() - 0.5);
40 Float_t* p = vertices;
41 for(int i=0; i<4; ++i) {
42 p[0] = x + 2*size*(rnd.Rndm() - 0.5);
43 p[1] = y + 2*size*(rnd.Rndm() - 0.5);
44 p[2] = z + 2*size*(rnd.Rndm() - 0.5);
45 p += 3;
46 }
47}
48
49/**************************************************************************/
50// QuadSet
51/**************************************************************************/
52ClassImp(Reve::QuadSet)
53
54
606c4ed7 55QuadSet::QuadSet(const Text_t* n, const Text_t* t) :
56 TNamed(n, t),
265ecb21 57 fQuads(),
606c4ed7 58 fTrans(false)
59{}
5a5a1232 60
61void QuadSet::Test(Int_t nquads)
62{
63 TRandom rnd(0);
64 fQuads.resize(nquads);
65 for(Int_t i=0; i<nquads; ++i) {
66 new (&fQuads[i]) Quad(rnd, 10, 2);
67 }
68}
69
70void QuadSet::Paint(Option_t* )
71{
72 TBuffer3D buffer(TBuffer3DTypes::kGeneric);
73
74 // Section kCore
75 buffer.fID = this;
76 buffer.fColor = 1;
77 buffer.fTransparency = 0;
78 buffer.fLocalFrame = fTrans;
79 if (fTrans)
80 memcpy(buffer.fLocalMaster, fMatrix, 16*sizeof(Double_t));
81 buffer.SetSectionsValid(TBuffer3D::kCore);
82
83 // We fill kCore on first pass and try with viewer
84 Int_t reqSections = gPad->GetViewer3D()->AddObject(buffer);
85 if (reqSections == TBuffer3D::kNone) {
86 // printf("QuadSet::Paint viewer was happy with Core buff3d.\n");
87 return;
88 }
89
90 if (reqSections & TBuffer3D::kRawSizes) {
91 Int_t nbPnts = fQuads.size()*4;
92 Int_t nbSegs = nbPnts;
93 if (!buffer.SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, fQuads.size(), fQuads.size()*6)) {
94 return;
95 }
96 buffer.SetSectionsValid(TBuffer3D::kRawSizes);
97 }
98
99 if ((reqSections & TBuffer3D::kRaw) && buffer.SectionsValid(TBuffer3D::kRawSizes)) {
100 // Points
101 Int_t pidx = 0;
102 for (std::vector<Quad>::iterator i=fQuads.begin(); i!=fQuads.end(); ++i) {
103 for (Int_t k = 0; k < 12; k++ ){
104 buffer.fPnts[pidx] = (*i).vertices[k];
105 pidx++;
106 }
107 }
108
109 // Segments
110 Int_t sidx = 0;
111 for (Int_t q = 0; q < (Int_t)fQuads.size(); ++q) {
112 for (Int_t s = 0; s < 4; ++s ) {
113 buffer.fSegs[3*sidx ] = 4;
114 buffer.fSegs[3*sidx+1] = sidx;
115 if (s == 3)
116 buffer.fSegs[3*sidx+2] = q*4;
117 else
118 buffer.fSegs[3*sidx+2] = sidx + 1;
119 sidx ++;
120 }
121 }
122
123 // Polygons
124 for (Int_t q = 0; q < (Int_t)fQuads.size(); ++q) {
125 buffer.fPols[6*q] = fQuads[q].color;
126 buffer.fPols[6*q +1] = 4;
127 buffer.fPols[6*q +2] = 4*q +0;
128 buffer.fPols[6*q +3] = 4*q +1;
129 buffer.fPols[6*q +4] = 4*q +2;
130 buffer.fPols[6*q +5] = 4*q +3;
131 }
132
133 buffer.SetSectionsValid(TBuffer3D::kRaw);
134 buffer.fColor = 5;
135 }
136
137 gPad->GetViewer3D()->AddObject(buffer);
138}
139
140/**************************************************************************/
141
142void QuadSet::ComputeBBox()
143{
144 if(fQuads.empty()) {
606c4ed7 145#if ROOT_VERSION_CODE <= ROOT_VERSION(5,11,2)
5a5a1232 146 bbox_zero();
606c4ed7 147#else
148 BBoxZero();
149#endif
5a5a1232 150 return;
151 }
606c4ed7 152#if ROOT_VERSION_CODE <= ROOT_VERSION(5,11,2)
5a5a1232 153 bbox_init();
606c4ed7 154#else
155 BBoxInit();
156#endif
5a5a1232 157 for(std::vector<Quad>::iterator q=fQuads.begin(); q!=fQuads.end(); ++q) {
158 Float_t* p = q->vertices;
159 for(int i=0; i<4; ++i, p+=3)
606c4ed7 160#if ROOT_VERSION_CODE <= ROOT_VERSION(5,11,2)
5a5a1232 161 bbox_check_point(p);
606c4ed7 162#else
163 BBoxCheckPoint(p);
164#endif
5a5a1232 165 }
166
167 // printf("%s BBox is x(%f,%f), y(%f,%f), z(%f,%f)\n", GetName(),
606c4ed7 168 // fBBox[0], fBBox[1], fBBox[2], fBBox[3], fBBox[4], fBBox[5]);
5a5a1232 169}