]>
Commit | Line | Data |
---|---|---|
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 | ||
21 | class TRandom; | |
22 | ||
23 | namespace Reve { | |
24 | ||
25 | struct 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 | 47 | class OldQuadSet : public TNamed, public TAtt3D, public TAttBBox |
5a5a1232 | 48 | { |
3aa97c5d | 49 | friend class OldQuadSetGL; |
5a5a1232 | 50 | |
5a5a1232 | 51 | protected: |
52 | std::vector<Quad> fQuads; | |
53 | Double_t fMatrix[16]; | |
54 | Bool_t fTrans; | |
55 | ||
56 | public: | |
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 | ||
78 | class 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 | 89 | public: |
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 | |
117 | protected: | |
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 | 144 | protected: |
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 | 168 | public: |
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); | |
9bbf03ba | 194 | |
195 | Bool_t GetValueIsColor() const { return fValueIsColor; } | |
8be1b0cc | 196 | |
197 | RGBAPalette* GetPalette() const { return fPalette; } | |
198 | void SetPalette(RGBAPalette* p); | |
20358789 | 199 | RGBAPalette* AssertPalette(); |
8be1b0cc | 200 | |
201 | RenderMode_e GetRenderMode() const { return fRenderMode; } | |
202 | void SetRenderMode(RenderMode_e rm) { fRenderMode = rm; } | |
3aa97c5d | 203 | |
5ac9ed05 | 204 | Bool_t GetEmitSignals() const { return fEmitSignals; } |
205 | void SetEmitSignals(Bool_t f) { fEmitSignals = f; } | |
206 | ||
3aa97c5d | 207 | ZTrans& RefHMTrans() { return fHMTrans; } |
208 | void SetTransMatrix(Double_t* carr) { fHMTrans.SetFrom(carr); } | |
209 | void SetTransMatrix(const TGeoMatrix& mat) { fHMTrans.SetFrom(mat); } | |
210 | ||
8be1b0cc | 211 | // -------------------------------- |
212 | ||
213 | void AddQuad(Float_t* verts); | |
20358789 | 214 | |
8be1b0cc | 215 | void AddQuad(Float_t x, Float_t y); |
216 | void AddQuad(Float_t x, Float_t y, Float_t z); | |
217 | void AddQuad(Float_t x, Float_t y, Float_t w, Float_t h); | |
218 | void AddQuad(Float_t x, Float_t y, Float_t z, Float_t w, Float_t h); | |
219 | ||
20358789 | 220 | void AddLine(Float_t x, Float_t y, Float_t w, Float_t h); |
221 | ||
96c51586 | 222 | void AddHexagon(Float_t x, Float_t y, Float_t z, Float_t r); |
223 | ||
8be1b0cc | 224 | void QuadValue(Int_t value); |
225 | void QuadColor(Color_t ci); | |
226 | void QuadColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a=255); | |
227 | ||
bcb20c3e | 228 | void QuadId(TObject* id); |
229 | Bool_t GetOwnIds() const { return fOwnIds; } | |
230 | void SetOwnIds(Bool_t o) { fOwnIds = o; } | |
231 | ||
232 | QuadBase* GetQuad(Int_t n) { return (QuadBase*) fPlex.Atom(n); } | |
233 | TObject* GetId(Int_t n) { return GetQuad(n)->fId.GetObject(); } | |
234 | ||
235 | virtual void QuadSelected(Int_t idx); | |
236 | ||
5ac9ed05 | 237 | virtual void CtrlClicked(QuadSet* qs, Int_t idx); // *SIGNAL* |
238 | ||
8be1b0cc | 239 | // -------------------------------- |
240 | ||
241 | // void Test(Int_t nquads); | |
5a5a1232 | 242 | |
243 | virtual void ComputeBBox(); | |
244 | ||
8be1b0cc | 245 | virtual void Paint(Option_t* option=""); |
5a5a1232 | 246 | |
ca462fa9 | 247 | VoidCPlex* GetPlex() { return &fPlex; } |
248 | ||
5a5a1232 | 249 | ClassDef(QuadSet, 1); |
250 | }; | |
251 | ||
252 | } // namespace Reve | |
253 | ||
254 | #endif |