]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Reve/QuadSet.h
Added method SortPathMarksByTime().
[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
6#include <Gtypes.h>
7#include <TNamed.h>
5ac9ed05 8#include <TQObject.h>
5a5a1232 9#include <TAtt3D.h>
10#include <TAttBBox.h>
11
3aa97c5d 12#include <Reve/Reve.h>
8be1b0cc 13#include <Reve/RenderElement.h>
14#include <Reve/FrameBox.h>
15#include <Reve/RGBAPalette.h>
16#include <Reve/Plex.h>
17#include <Reve/ZTrans.h>
3aa97c5d 18
5a5a1232 19#include <vector>
20
21class TRandom;
22
23namespace Reve {
24
25struct Quad
26{
27 Float_t vertices[12];
28 Int_t color;
29
30 void ColorFromIdx(Color_t ci);
31
265ecb21 32 Quad(Color_t col = 1) : color(0)
5a5a1232 33 { ColorFromIdx(col); }
34
265ecb21 35 Quad(Color_t col, Float_t* p) : color(0)
5a5a1232 36 { ColorFromIdx(col); memcpy(vertices, p, 12*sizeof(Float_t)); }
37
38 Quad(TRandom& rnd, Float_t origin, Float_t size);
39
265ecb21 40 Quad(const Quad& org) : color(0) { memcpy(this, &org, sizeof(Quad)); }
5a5a1232 41
a8b53f69 42 virtual ~Quad() {}
43
5a5a1232 44 ClassDef(Quad, 1);
45};
46
3aa97c5d 47class OldQuadSet : public TNamed, public TAtt3D, public TAttBBox
5a5a1232 48{
3aa97c5d 49 friend class OldQuadSetGL;
5a5a1232 50
5a5a1232 51protected:
52 std::vector<Quad> fQuads;
53 Double_t fMatrix[16];
54 Bool_t fTrans;
55
56public:
3aa97c5d 57 OldQuadSet(const Text_t* n="QuadSet", const Text_t* t="");
58 virtual ~OldQuadSet() {}
5a5a1232 59
60 Bool_t GetTrans() const { return fTrans; }
61 void SetTrans(Bool_t t) { fTrans = t; }
62
3aa97c5d 63 std::vector<Reve::Quad>& Quads() { return fQuads; }
64
65 void Test(Int_t nquads);
66
67 virtual void ComputeBBox();
68
69 virtual void Paint(Option_t* option = "");
70
71 ClassDef(OldQuadSet, 1);
72};
73
74/**************************************************************************/
c4f03896 75// To become new implementation of QuadSet ... somewhat finished.
3aa97c5d 76/**************************************************************************/
77
78class QuadSet : public RenderElement,
5ac9ed05 79 public TNamed, public TQObject,
3aa97c5d 80 public TAtt3D,
81 public TAttBBox
82{
c4f03896 83 friend class QuadSetEditor;
3aa97c5d 84 friend class QuadSetGL;
85
3c67f72c 86 QuadSet(const QuadSet&); // Not implemented
87 QuadSet& operator=(const QuadSet&); // Not implemented
88
3aa97c5d 89public:
90 enum QuadType_e
8be1b0cc 91 {
20358789 92 QT_Undef, // unknown-ignored
93 QT_FreeQuad, // arbitrary quad: specify 4*(x,y,z) quad corners
94 QT_RectangleXY, // rectangle in x-y plane: specify x, y, z, w, h
95 QT_RectangleXYFixedDim, // rectangle in x-y plane: specify x, y, z; w, h taken from fDefWidth/Height
96 QT_RectangleXYFixedZ, // rectangle in x-y plane: specify x, y, w, h; z taken from fDefCoord
97 QT_RectangleXZFixedY, // rectangle in x-z plane: specify x, z, w, h; y taken from fDefCoord
98 QT_RectangleXYFixedDimZ, // rectangle in x-y plane: specify x, y; w, h, z taken from fDefWidth/Height/Coord
99 QT_RectangleXZFixedDimY, // rectangle in x-z plane: specify x, z; w, h, y taken from fDefWidth/Height/Coord
96c51586 100 QT_Rectangle_End,
8be1b0cc 101 // line modes (needed for uniform handling of silicon-strip digits)
96c51586 102 QT_LineXYFixedZ, // line in x-y plane: specify x, y, w(dx), h(dy); z taken from fDefCoord
103 QT_LineXZFixedY, // line in x-z plane: specify x, z, w(dx), h(dz); y taken from fDefCoord
104 QT_Line_End,
105 // hexagon modes
106 QT_HexagonXY, // horizontal hexagon: specify x, y, z, r
107 QT_HexagonYX, // vertical hexagon: specify x, y, z, r
108 QT_Hexagon_End
20358789 109 // circle modes:
110 // QT_CircleXY, // specify r, z
111 // QT_CircleXYFixedZ, // specify r
112 // QT_CircleXYFixedR, // specify z
8be1b0cc 113 };
114
115 enum RenderMode_e { RM_AsIs, RM_Line, RM_Fill };
3aa97c5d 116
117protected:
8be1b0cc 118 struct QuadBase
119 {
120 Int_t fValue;
bcb20c3e 121 TRef fId;
122
8be1b0cc 123 // Here could have additional integer (like time, second threshold).
124
125 QuadBase(Int_t v=0) : fValue(v) {}
3aa97c5d 126 };
127
20358789 128 struct QFreeQuad : public QuadBase { Float_t fVertices[12]; };
3aa97c5d 129
20358789 130 struct QOrigin : public QuadBase { Float_t fX, fY; };
3aa97c5d 131
20358789 132 struct QRectFixDimC : public QOrigin { };
3aa97c5d 133
20358789 134 struct QRectFixDim : public QRectFixDimC { Float_t fZ; };
3aa97c5d 135
20358789 136 struct QRectFixC : public QRectFixDimC { Float_t fW, fH; };
3aa97c5d 137
20358789 138 struct QRect : public QRectFixDim { Float_t fW, fH; };
139
140 struct QLineFixC : public QOrigin { Float_t fDx, fDy; };
8be1b0cc 141
96c51586 142 struct QHex : public QOrigin { Float_t fZ, fR; };
143
3aa97c5d 144protected:
145 QuadType_e fQuadType;
8be1b0cc 146 Int_t fDefaultValue;
bcb20c3e 147 Bool_t fValueIsColor;
148 Bool_t fOwnIds; //Flag specifying if id-objects are owned by the QuadSet
8be1b0cc 149 VoidCPlex fPlex;
150 QuadBase* fLastQuad; //!
3aa97c5d 151
3aa97c5d 152 Float_t fDefWidth;
153 Float_t fDefHeight;
8be1b0cc 154 Float_t fDefCoord;
3aa97c5d 155
8be1b0cc 156 FrameBox* fFrame;
157 RGBAPalette* fPalette;
158 RenderMode_e fRenderMode;
20358789 159 Bool_t fDisableLigting;
5ac9ed05 160 Bool_t fEmitSignals;
3aa97c5d 161 ZTrans fHMTrans;
162
8be1b0cc 163 static Int_t SizeofAtom(QuadType_e qt);
164 QuadBase* NewQuad();
165
bcb20c3e 166 void ReleaseIds();
167
3aa97c5d 168public:
169 QuadSet(const Text_t* n="QuadSet", const Text_t* t="");
8be1b0cc 170 QuadSet(QuadType_e quadType, Bool_t valIsCol, Int_t chunkSize,
171 const Text_t* n="QuadSet", const Text_t* t="");
172 virtual ~QuadSet();
173
174 virtual Bool_t CanEditMainColor() { return kTRUE; }
5ac9ed05 175 virtual void SetMainColor(Color_t color);
8be1b0cc 176
177 void Reset(QuadType_e quadType, Bool_t valIsCol, Int_t chunkSize);
178 void RefitPlex();
179
180 void ScanMinMaxValues(Int_t& min, Int_t& max);
181
182 Float_t GetDefWidth() const { return fDefWidth; }
183 Float_t GetDefHeight() const { return fDefHeight; }
184 Float_t GetDefCoord() const { return fDefCoord; }
185
186 void SetDefWidth(Float_t v) { fDefWidth = v ; }
187 void SetDefHeight(Float_t v) { fDefHeight = v ; }
188 void SetDefCoord(Float_t v) { fDefCoord = v ; }
189
190 // --------------------------------
191
192 FrameBox* GetFrame() const { return fFrame; }
193 void SetFrame(FrameBox* b);
194
195 RGBAPalette* GetPalette() const { return fPalette; }
196 void SetPalette(RGBAPalette* p);
20358789 197 RGBAPalette* AssertPalette();
8be1b0cc 198
199 RenderMode_e GetRenderMode() const { return fRenderMode; }
200 void SetRenderMode(RenderMode_e rm) { fRenderMode = rm; }
3aa97c5d 201
5ac9ed05 202 Bool_t GetEmitSignals() const { return fEmitSignals; }
203 void SetEmitSignals(Bool_t f) { fEmitSignals = f; }
204
3aa97c5d 205 ZTrans& RefHMTrans() { return fHMTrans; }
206 void SetTransMatrix(Double_t* carr) { fHMTrans.SetFrom(carr); }
207 void SetTransMatrix(const TGeoMatrix& mat) { fHMTrans.SetFrom(mat); }
208
8be1b0cc 209 // --------------------------------
210
211 void AddQuad(Float_t* verts);
20358789 212
8be1b0cc 213 void AddQuad(Float_t x, Float_t y);
214 void AddQuad(Float_t x, Float_t y, Float_t z);
215 void AddQuad(Float_t x, Float_t y, Float_t w, Float_t h);
216 void AddQuad(Float_t x, Float_t y, Float_t z, Float_t w, Float_t h);
217
20358789 218 void AddLine(Float_t x, Float_t y, Float_t w, Float_t h);
219
96c51586 220 void AddHexagon(Float_t x, Float_t y, Float_t z, Float_t r);
221
8be1b0cc 222 void QuadValue(Int_t value);
223 void QuadColor(Color_t ci);
224 void QuadColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255);
225
bcb20c3e 226 void QuadId(TObject* id);
227 Bool_t GetOwnIds() const { return fOwnIds; }
228 void SetOwnIds(Bool_t o) { fOwnIds = o; }
229
230 QuadBase* GetQuad(Int_t n) { return (QuadBase*) fPlex.Atom(n); }
231 TObject* GetId(Int_t n) { return GetQuad(n)->fId.GetObject(); }
232
233 virtual void QuadSelected(Int_t idx);
234
5ac9ed05 235 virtual void CtrlClicked(QuadSet* qs, Int_t idx); // *SIGNAL*
236
8be1b0cc 237 // --------------------------------
238
239 // void Test(Int_t nquads);
5a5a1232 240
241 virtual void ComputeBBox();
242
8be1b0cc 243 virtual void Paint(Option_t* option="");
5a5a1232 244
ca462fa9 245 VoidCPlex* GetPlex() { return &fPlex; }
246
5a5a1232 247 ClassDef(QuadSet, 1);
248};
249
250} // namespace Reve
251
252#endif