]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Reve/QuadSet.cxx
Fixed compilation warnings with gcc-4.
[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
34Quad::Quad(TRandom& rnd, Float_t origin, Float_t size)
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
55void QuadSet::Init()
56{
57 fTrans = false;
58}
59
60void QuadSet::Test(Int_t nquads)
61{
62 TRandom rnd(0);
63 fQuads.resize(nquads);
64 for(Int_t i=0; i<nquads; ++i) {
65 new (&fQuads[i]) Quad(rnd, 10, 2);
66 }
67}
68
69void QuadSet::Paint(Option_t* )
70{
71 TBuffer3D buffer(TBuffer3DTypes::kGeneric);
72
73 // Section kCore
74 buffer.fID = this;
75 buffer.fColor = 1;
76 buffer.fTransparency = 0;
77 buffer.fLocalFrame = fTrans;
78 if (fTrans)
79 memcpy(buffer.fLocalMaster, fMatrix, 16*sizeof(Double_t));
80 buffer.SetSectionsValid(TBuffer3D::kCore);
81
82 // We fill kCore on first pass and try with viewer
83 Int_t reqSections = gPad->GetViewer3D()->AddObject(buffer);
84 if (reqSections == TBuffer3D::kNone) {
85 // printf("QuadSet::Paint viewer was happy with Core buff3d.\n");
86 return;
87 }
88
89 if (reqSections & TBuffer3D::kRawSizes) {
90 Int_t nbPnts = fQuads.size()*4;
91 Int_t nbSegs = nbPnts;
92 if (!buffer.SetRawSizes(nbPnts, 3*nbPnts, nbSegs, 3*nbSegs, fQuads.size(), fQuads.size()*6)) {
93 return;
94 }
95 buffer.SetSectionsValid(TBuffer3D::kRawSizes);
96 }
97
98 if ((reqSections & TBuffer3D::kRaw) && buffer.SectionsValid(TBuffer3D::kRawSizes)) {
99 // Points
100 Int_t pidx = 0;
101 for (std::vector<Quad>::iterator i=fQuads.begin(); i!=fQuads.end(); ++i) {
102 for (Int_t k = 0; k < 12; k++ ){
103 buffer.fPnts[pidx] = (*i).vertices[k];
104 pidx++;
105 }
106 }
107
108 // Segments
109 Int_t sidx = 0;
110 for (Int_t q = 0; q < (Int_t)fQuads.size(); ++q) {
111 for (Int_t s = 0; s < 4; ++s ) {
112 buffer.fSegs[3*sidx ] = 4;
113 buffer.fSegs[3*sidx+1] = sidx;
114 if (s == 3)
115 buffer.fSegs[3*sidx+2] = q*4;
116 else
117 buffer.fSegs[3*sidx+2] = sidx + 1;
118 sidx ++;
119 }
120 }
121
122 // Polygons
123 for (Int_t q = 0; q < (Int_t)fQuads.size(); ++q) {
124 buffer.fPols[6*q] = fQuads[q].color;
125 buffer.fPols[6*q +1] = 4;
126 buffer.fPols[6*q +2] = 4*q +0;
127 buffer.fPols[6*q +3] = 4*q +1;
128 buffer.fPols[6*q +4] = 4*q +2;
129 buffer.fPols[6*q +5] = 4*q +3;
130 }
131
132 buffer.SetSectionsValid(TBuffer3D::kRaw);
133 buffer.fColor = 5;
134 }
135
136 gPad->GetViewer3D()->AddObject(buffer);
137}
138
139/**************************************************************************/
140
141void QuadSet::ComputeBBox()
142{
143 if(fQuads.empty()) {
144 bbox_zero();
145 return;
146 }
147
148 bbox_init();
149
150 for(std::vector<Quad>::iterator q=fQuads.begin(); q!=fQuads.end(); ++q) {
151 Float_t* p = q->vertices;
152 for(int i=0; i<4; ++i, p+=3)
153 bbox_check_point(p);
154 }
155
156 // printf("%s BBox is x(%f,%f), y(%f,%f), z(%f,%f)\n", GetName(),
157 // fBBox[0], fBBox[1], fBBox[2], fBBox[3], fBBox[4], fBBox[5]);
158}