]>
Commit | Line | Data |
---|---|---|
0145e89a | 1 | #ifndef ALIMUONPAINTERCONTOURMAKER_H |
2 | #define ALIMUONPAINTERCONTOURMAKER_H | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | // $Id$ | |
8 | ||
9 | /// \ingroup graphics | |
10 | /// \class AliMUONPainterContourMaker | |
11 | /// \brief Utility class to build painter contours | |
12 | /// | |
13 | // Author Laurent Aphecetche, Subatech | |
14 | ||
15 | #ifndef ROOT_TVector2 | |
16 | # include "TVector2.h" | |
17 | #endif | |
18 | ||
19 | #ifndef ROOT_TObject | |
20 | # include "TObject.h" | |
21 | #endif | |
22 | ||
23 | #ifndef ALIMUONVPAINTER_H | |
24 | # include "AliMUONVPainter.h" | |
25 | #endif | |
26 | ||
27 | class AliMpExMap; | |
28 | class AliMpMotifPosition; | |
29 | class AliMUONAttPainter; | |
30 | class AliMUONPainterContour; | |
31 | class AliMUONPainterPadStore; | |
32 | class TArrayI; | |
33 | class TMap; | |
34 | #include <TLine.h> | |
35 | class TPolyLine; | |
36 | class TObjArray; | |
37 | ||
38 | class AliMUONPainterContourMaker : public TObject | |
39 | { | |
40 | public: | |
41 | AliMUONPainterContourMaker(AliMpExMap* globalTransformations=0x0); | |
42 | virtual ~AliMUONPainterContourMaker(); | |
43 | ||
44 | void Add(AliMUONPainterContour* contour); | |
45 | ||
46 | AliMUONPainterContour* FindLocalManuContour(Int_t detElemId, Int_t manuId) const; | |
47 | ||
48 | AliMUONPainterContour* GetContour(const char* name) const; | |
49 | ||
50 | AliMUONPainterContour* GenerateManuContour(const char* name, | |
51 | Int_t detElemId, | |
52 | Int_t manuId, | |
53 | AliMUONAttPainter viewType) const; | |
54 | ||
55 | Bool_t HasContour(const char* name) const; | |
56 | ||
57 | AliMUONPainterContour* MergeContours(const TObjArray& contours, | |
58 | const char* contourName) const; | |
59 | ||
60 | Int_t Size() const; | |
61 | ||
62 | void Print(Option_t* opt="") const; | |
63 | ||
64 | public: | |
65 | ||
9016a84e | 66 | /// \ingroup graphics |
67 | /// \brief Store information about one pad's neighbours. | |
cec5da80 | 68 | /// \author Laurent Aphecetche, Subatech |
0145e89a | 69 | class AliMUONNeighbour : public TObject |
70 | { | |
71 | public: | |
9016a84e | 72 | /// default ctor |
0145e89a | 73 | AliMUONNeighbour() |
74 | : fID(-1), fPosition(), fDimensions(), | |
75 | fLeft(kFALSE), fRight(kFALSE), | |
76 | fTop(kFALSE), fBottom(kFALSE) {} | |
77 | ||
9016a84e | 78 | /// normal ctor |
0145e89a | 79 | AliMUONNeighbour(Int_t absID, |
80 | const TVector2& position, | |
81 | const TVector2& dimensions, | |
82 | Bool_t hasLeftNeighbour, Bool_t hasRightNeighbour, | |
83 | Bool_t hasTopNeighbour, Bool_t hasBottomNeighbour) | |
84 | : fID(absID), fPosition(position), fDimensions(dimensions), | |
85 | fLeft(hasLeftNeighbour), fRight(hasRightNeighbour), | |
86 | fTop(hasTopNeighbour), fBottom(hasBottomNeighbour) {} | |
87 | ||
9016a84e | 88 | /// dtor |
0145e89a | 89 | virtual ~AliMUONNeighbour() {} |
90 | ||
9016a84e | 91 | /// we are sortable |
0145e89a | 92 | virtual Bool_t IsSortable() const { return kTRUE; } |
93 | ||
94 | virtual Int_t Compare(const TObject* object) const; | |
95 | ||
9016a84e | 96 | /// our id |
0145e89a | 97 | Int_t ID() const { return fID; } |
9016a84e | 98 | |
99 | /// Whether we have a neighbour on our left | |
0145e89a | 100 | Bool_t HasLeftNeighbour() const { return fLeft; } |
9016a84e | 101 | /// Whether we have a neighbour on our right |
0145e89a | 102 | Bool_t HasRightNeighbour() const { return fRight; } |
9016a84e | 103 | /// Whether we have a neighbour above |
0145e89a | 104 | Bool_t HasTopNeighbour() const { return fTop; } |
9016a84e | 105 | /// Whether we have a neighbour below |
0145e89a | 106 | Bool_t HasBottomNeighbour() const { return fBottom; } |
107 | ||
9016a84e | 108 | /// Our position |
0145e89a | 109 | TVector2 Position() const { return fPosition; } |
9016a84e | 110 | /// Our (half-)dimensions |
0145e89a | 111 | TVector2 Dimensions() const { return fDimensions; } |
112 | ||
9016a84e | 113 | /// Lower left corner |
0145e89a | 114 | TVector2 LowerLeft() const { return fPosition - fDimensions; } |
9016a84e | 115 | /// Upper right corner |
0145e89a | 116 | TVector2 UpperRight() const { return fPosition + fDimensions; } |
117 | ||
118 | void Print(Option_t* opt="") const; | |
119 | ||
9016a84e | 120 | /// Set our position |
0145e89a | 121 | void SetPosition(Double_t x, Double_t y) { fPosition.Set(x,y); } |
122 | ||
123 | private: | |
124 | Int_t fID; ///< id of the pad | |
125 | TVector2 fPosition; ///< position | |
126 | TVector2 fDimensions; ///< (half)dimension | |
127 | Bool_t fLeft; ///< do we have a neighbour on our left ? | |
128 | Bool_t fRight; ///< do we have a neighbour on our right ? | |
129 | Bool_t fTop; ///< do we have a neighbour on top of us ? | |
130 | Bool_t fBottom; ///< do we have a neighbour below us ? | |
131 | ||
132 | ClassDef(AliMUONNeighbour,1) // Neighbour internal class | |
133 | }; | |
134 | ||
0145e89a | 135 | |
136 | public: | |
137 | ||
138 | ||
139 | void AddSegments(TObjArray& segments, const AliMUONPainterContour& contour) const; | |
140 | ||
141 | void AddSegment(TObjArray& segments, Double_t x1, Double_t y1, | |
142 | Double_t x2, Double_t y2, Int_t padID) const; | |
143 | ||
144 | TLine* AddToLine(TPolyLine& line, TObjArray& segments, Int_t i) const; | |
145 | ||
146 | AliMpMotifPosition* FindMotifPosition(Int_t detElemId, Int_t manuId) const; | |
147 | ||
148 | Int_t FindPoint(const TPolyLine& lines, Double_t x, Double_t y) const; | |
149 | ||
150 | Int_t FindPoint(Double_t x, Double_t y, TObjArray& segments) const; | |
151 | ||
152 | TLine* InsertSegment(TPolyLine& lines, TLine& l) const; | |
153 | ||
154 | using TObject::IsEqual; | |
155 | ||
156 | Bool_t IsEqual(Double_t x, Double_t y) const; | |
157 | ||
158 | Int_t Overlap(const TLine& line1, const TLine& line2) const; | |
159 | ||
160 | Bool_t IsLineClosed(const TPolyLine& line) const; | |
161 | ||
162 | AliMUONPainterContour* ConvertEdgePadsToContour(TObjArray& edgePads, const char* name) const; | |
163 | ||
164 | AliMUONPainterContour* ConvertSegmentsToContour(TObjArray& segments, const char* name) const; | |
165 | ||
166 | void Local2Global(Int_t detElemId, Double_t xl, Double_t yl, Double_t zl, | |
167 | Double_t& xg, Double_t& yg, Double_t& zg) const; | |
168 | ||
169 | TString NameIt(const AliMpMotifPosition& motifPosition) const; | |
170 | ||
171 | TPolyLine* Simplify(const TPolyLine& lines) const; | |
172 | ||
173 | Double_t Slope(const TLine& line) const; | |
174 | ||
175 | Bool_t IsPoint(const TLine& line) const; | |
176 | ||
177 | void PrintLine(const TLine& line, const char* msg="") const; | |
178 | ||
179 | void PrintSegments(const TObjArray& segments) const; | |
180 | ||
181 | Bool_t SameDirection(const TLine& line1, const TLine& line2) const; | |
182 | ||
183 | void Swap(TLine& line) const; | |
184 | ||
185 | TLine Shift(const TLine& line, Double_t x, Double_t y) const; | |
186 | ||
187 | Int_t IsInside(const TLine& line1, const TLine& line2, | |
188 | Bool_t useEndPoints=kFALSE) const; | |
189 | ||
190 | Bool_t IsInside(const TObjArray& segments, const TLine& line) const; | |
191 | ||
192 | Int_t IsInLine(const TLine& line, Double_t x, Double_t y, | |
193 | Bool_t strict=kTRUE) const; | |
194 | ||
195 | Bool_t IsEqual(const TLine& line1, const TLine& line2) const; | |
196 | ||
197 | Bool_t SanityCheck(const TObjArray& contours, const TObjArray& segments, Bool_t check=kTRUE) const; | |
198 | ||
199 | TString LineAsString(const TLine& line, Bool_t slope=kTRUE) const; | |
200 | ||
201 | Int_t IsInRange(Double_t x, Double_t a, Double_t b, | |
202 | Bool_t strict=kTRUE) const; | |
203 | ||
204 | Bool_t HasLine(const TObjArray& segments, const TLine& line) const; | |
205 | ||
206 | void CleanSegments(TObjArray& segments, const TArrayI& toBeRemoved) const; | |
207 | ||
208 | Int_t SplitSegments(TObjArray& segments) const; | |
209 | ||
210 | Int_t RemoveInsideSegments(const TObjArray& contours, TObjArray& segments) const; | |
211 | ||
212 | Bool_t IsHorizontal(const TLine& line) const; | |
213 | ||
214 | Bool_t IsVertical(const TLine& line) const; | |
215 | ||
216 | Int_t CountPoint(const TObjArray& segments, Double_t x, Double_t y) const; | |
217 | ||
218 | Bool_t ShouldBeRemoved(const TObjArray& contours, Double_t x, Double_t y) const; | |
219 | ||
220 | private: | |
9016a84e | 221 | /// not implemented |
222 | AliMUONPainterContourMaker(const AliMUONPainterContourMaker& rhs); | |
223 | /// not implemented | |
224 | AliMUONPainterContourMaker& operator=(const AliMUONPainterContourMaker& rhs); | |
225 | ||
0145e89a | 226 | AliMpExMap* fGlobalTransformations; ///< store of global transformations for DEs |
227 | TMap* fLocalManuContours; ///< store for local contours of all manus | |
228 | TMap* fContours; ///< store for all our contours | |
229 | ||
230 | ClassDef(AliMUONPainterContourMaker,1) // Painter contour builder | |
231 | }; | |
232 | ||
233 | #endif | |
234 |