]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Reve/QuadSet.h
Merged EVE-dev-after-merge to EVE-dev into HEAD. Requires ROOT-5.17.04.
[u/mrichter/AliRoot.git] / EVE / Reve / QuadSet.h
CommitLineData
a8b53f69 1// $Header$
2
5a5a1232 3#ifndef REVE_QuadSet_H
4#define REVE_QuadSet_H
5
32e219c2 6#include <Reve/DigitSet.h>
5a5a1232 7
32e219c2 8#include <vector> // For OldQuadSet
5a5a1232 9
10class TRandom;
11
12namespace Reve {
13
14struct Quad
15{
16 Float_t vertices[12];
17 Int_t color;
18
19 void ColorFromIdx(Color_t ci);
20
265ecb21 21 Quad(Color_t col = 1) : color(0)
5a5a1232 22 { ColorFromIdx(col); }
23
265ecb21 24 Quad(Color_t col, Float_t* p) : color(0)
5a5a1232 25 { ColorFromIdx(col); memcpy(vertices, p, 12*sizeof(Float_t)); }
26
27 Quad(TRandom& rnd, Float_t origin, Float_t size);
28
265ecb21 29 Quad(const Quad& org) : color(0) { memcpy(this, &org, sizeof(Quad)); }
5a5a1232 30
a8b53f69 31 virtual ~Quad() {}
32
5a5a1232 33 ClassDef(Quad, 1);
34};
35
3aa97c5d 36class OldQuadSet : public TNamed, public TAtt3D, public TAttBBox
5a5a1232 37{
3aa97c5d 38 friend class OldQuadSetGL;
5a5a1232 39
5a5a1232 40protected:
41 std::vector<Quad> fQuads;
42 Double_t fMatrix[16];
43 Bool_t fTrans;
44
45public:
3aa97c5d 46 OldQuadSet(const Text_t* n="QuadSet", const Text_t* t="");
47 virtual ~OldQuadSet() {}
5a5a1232 48
49 Bool_t GetTrans() const { return fTrans; }
50 void SetTrans(Bool_t t) { fTrans = t; }
51
3aa97c5d 52 std::vector<Reve::Quad>& Quads() { return fQuads; }
53
54 void Test(Int_t nquads);
55
56 virtual void ComputeBBox();
57
58 virtual void Paint(Option_t* option = "");
59
60 ClassDef(OldQuadSet, 1);
61};
62
63/**************************************************************************/
c4f03896 64// To become new implementation of QuadSet ... somewhat finished.
3aa97c5d 65/**************************************************************************/
66
32e219c2 67class QuadSet : public DigitSet
3aa97c5d 68{
69 friend class QuadSetGL;
70
3c67f72c 71 QuadSet(const QuadSet&); // Not implemented
72 QuadSet& operator=(const QuadSet&); // Not implemented
73
3aa97c5d 74public:
75 enum QuadType_e
8be1b0cc 76 {
20358789 77 QT_Undef, // unknown-ignored
78 QT_FreeQuad, // arbitrary quad: specify 4*(x,y,z) quad corners
79 QT_RectangleXY, // rectangle in x-y plane: specify x, y, z, w, h
253a61b0 80 QT_RectangleXZ, // rectangle in x-z plane: specify x, y, z, w, h
81 QT_RectangleYZ, // rectangle in y-z plane: specify x, y, z, w, h
20358789 82 QT_RectangleXYFixedDim, // rectangle in x-y plane: specify x, y, z; w, h taken from fDefWidth/Height
83 QT_RectangleXYFixedZ, // rectangle in x-y plane: specify x, y, w, h; z taken from fDefCoord
84 QT_RectangleXZFixedY, // rectangle in x-z plane: specify x, z, w, h; y taken from fDefCoord
253a61b0 85 QT_RectangleYZFixedX, // rectangle in y-z plane: specify y, z, w, h; x taken from fDefWidth/Height/Coord
20358789 86 QT_RectangleXYFixedDimZ, // rectangle in x-y plane: specify x, y; w, h, z taken from fDefWidth/Height/Coord
87 QT_RectangleXZFixedDimY, // rectangle in x-z plane: specify x, z; w, h, y taken from fDefWidth/Height/Coord
253a61b0 88 QT_RectangleYZFixedDimX, // rectangle in y-z plane: specify y, z; w, h, x taken from fDefWidth/Height/Coord
96c51586 89 QT_Rectangle_End,
8be1b0cc 90 // line modes (needed for uniform handling of silicon-strip digits)
96c51586 91 QT_LineXYFixedZ, // line in x-y plane: specify x, y, w(dx), h(dy); z taken from fDefCoord
92 QT_LineXZFixedY, // line in x-z plane: specify x, z, w(dx), h(dz); y taken from fDefCoord
93 QT_Line_End,
94 // hexagon modes
95 QT_HexagonXY, // horizontal hexagon: specify x, y, z, r
96 QT_HexagonYX, // vertical hexagon: specify x, y, z, r
97 QT_Hexagon_End
20358789 98 // circle modes:
99 // QT_CircleXY, // specify r, z
100 // QT_CircleXYFixedZ, // specify r
101 // QT_CircleXYFixedR, // specify z
8be1b0cc 102 };
103
104 enum RenderMode_e { RM_AsIs, RM_Line, RM_Fill };
3aa97c5d 105
106protected:
3aa97c5d 107
32e219c2 108 struct QFreeQuad : public DigitBase { Float_t fVertices[12]; };
3aa97c5d 109
32e219c2 110 struct QOrigin : public DigitBase { Float_t fA, fB; };
3aa97c5d 111
20358789 112 struct QRectFixDimC : public QOrigin { };
3aa97c5d 113
253a61b0 114 struct QRectFixDim : public QRectFixDimC { Float_t fC; };
3aa97c5d 115
20358789 116 struct QRectFixC : public QRectFixDimC { Float_t fW, fH; };
3aa97c5d 117
20358789 118 struct QRect : public QRectFixDim { Float_t fW, fH; };
119
120 struct QLineFixC : public QOrigin { Float_t fDx, fDy; };
8be1b0cc 121
253a61b0 122 struct QHex : public QOrigin { Float_t fC, fR; };
96c51586 123
3aa97c5d 124protected:
125 QuadType_e fQuadType;
3aa97c5d 126
253a61b0 127 Float_t fDefWidth; // Breadth assigned to first coordinate (A)
128 Float_t fDefHeight; // Breadth assigned to second coordinate (B)
129 Float_t fDefCoord; // Default value for third coordinate (C)
3aa97c5d 130
8be1b0cc 131 static Int_t SizeofAtom(QuadType_e qt);
bcb20c3e 132
3aa97c5d 133public:
134 QuadSet(const Text_t* n="QuadSet", const Text_t* t="");
8be1b0cc 135 QuadSet(QuadType_e quadType, Bool_t valIsCol, Int_t chunkSize,
136 const Text_t* n="QuadSet", const Text_t* t="");
137 virtual ~QuadSet();
138
8be1b0cc 139 void Reset(QuadType_e quadType, Bool_t valIsCol, Int_t chunkSize);
8be1b0cc 140
141 Float_t GetDefWidth() const { return fDefWidth; }
142 Float_t GetDefHeight() const { return fDefHeight; }
143 Float_t GetDefCoord() const { return fDefCoord; }
144
145 void SetDefWidth(Float_t v) { fDefWidth = v ; }
146 void SetDefHeight(Float_t v) { fDefHeight = v ; }
147 void SetDefCoord(Float_t v) { fDefCoord = v ; }
148
149 // --------------------------------
150
8be1b0cc 151 void AddQuad(Float_t* verts);
20358789 152
253a61b0 153 void AddQuad(Float_t a, Float_t b);
154 void AddQuad(Float_t a, Float_t b, Float_t c);
155 void AddQuad(Float_t a, Float_t b, Float_t w, Float_t h);
156 void AddQuad(Float_t a, Float_t b, Float_t c, Float_t w, Float_t h);
8be1b0cc 157
253a61b0 158 void AddLine(Float_t a, Float_t b, Float_t w, Float_t h);
20358789 159
253a61b0 160 void AddHexagon(Float_t a, Float_t b, Float_t z, Float_t r);
96c51586 161
32e219c2 162 // Wrappers to make transition to DigitSet as base easier
163 void QuadValue(Int_t value) { DigitValue(value); }
164 void QuadColor(Color_t ci) { DigitColor(ci); }
165 void QuadColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255) { DigitColor(r, g, b, a); }
166 void QuadId(TObject* id) { DigitId(id); }
5ac9ed05 167
8be1b0cc 168 // --------------------------------
169
170 // void Test(Int_t nquads);
5a5a1232 171
172 virtual void ComputeBBox();
173
32e219c2 174 // virtual void Paint(Option_t* option="");
ca462fa9 175
5a5a1232 176 ClassDef(QuadSet, 1);
177};
178
179} // namespace Reve
180
181#endif