144 {
145
146 TString opt = option;
147 opt.ToUpper();
148
149
150 BesView* view = dynamic_cast<BesView*>( gPad->GetView() );
151 if ( view == 0 ) cout << "no view found" << endl;
152
153
154 Int_t np = fNSegment;
155
156 if ( f_innerCircleX )
157 {
158 delete[] f_innerCircleX;
159 f_innerCircleX = NULL;
160 }
161 if ( f_innerCircleY )
162 {
163 delete[] f_innerCircleY;
164 f_innerCircleY = NULL;
165 }
166 if ( f_outerCircleX )
167 {
168 delete[] f_outerCircleX;
169 f_outerCircleX = NULL;
170 }
171 if ( f_outerCircleY )
172 {
173 delete[] f_outerCircleY;
174 f_outerCircleY = NULL;
175 }
176 if ( f_areaX )
177 {
178 delete[] f_areaX;
179 f_areaX = NULL;
180 }
181 if ( f_areaY )
182 {
183 delete[] f_areaY;
184 f_areaY = NULL;
185 }
186
187 f_innerCircleX = new Double_t[np + 1];
188 f_innerCircleY = new Double_t[np + 1];
189 f_outerCircleX = new Double_t[np + 1];
190 f_outerCircleY = new Double_t[np + 1];
191 f_areaX = new Double_t[4 * np];
192 f_areaY = new Double_t[4 * np];
193
194 TAttLine::Modify();
195 TAttFill::Modify();
196
197 Double_t angle;
198 Double_t dphi = 2 * TMath::Pi() / ( np );
199 Double_t pointWC[3], pointNDC[3];
200
201 for ( Int_t i = 0; i < np; i++ )
202 {
203 angle = Double_t( i ) * dphi;
204
205
206
207 pointWC[0] = fCenter[0] + fInnerRadius * TMath::Cos( angle );
208 pointWC[1] = fCenter[1] + fInnerRadius * TMath::Sin( angle );
209 pointWC[2] = fCenter[2];
210 view->
WCtoNDC( pointWC, pointNDC );
211 f_innerCircleX[i] = pointNDC[0];
212 f_innerCircleY[i] = pointNDC[1];
213 f_areaX[4 * i] = pointNDC[0];
214 f_areaY[4 * i] = pointNDC[1];
215 if ( i == 0 )
216 {
217 f_areaX[4 * np - 3] = pointNDC[0];
218 f_areaY[4 * np - 3] = pointNDC[1];
219 }
220 else
221 {
222 f_areaX[4 * i - 3] = pointNDC[0];
223 f_areaY[4 * i - 3] = pointNDC[1];
224 }
225
226
227
228 pointWC[0] = fCenter[0] + fOuterRadius * TMath::Cos( angle );
229 pointWC[1] = fCenter[1] + fOuterRadius * TMath::Sin( angle );
230 pointWC[2] = fCenter[2];
231 view->
WCtoNDC( pointWC, pointNDC );
232 f_outerCircleX[i] = pointNDC[0];
233 f_outerCircleY[i] = pointNDC[1];
234 f_areaX[4 * i + 3] = pointNDC[0];
235 f_areaY[4 * i + 3] = pointNDC[1];
236 if ( i == 0 )
237 {
238 f_areaX[4 * np - 2] = pointNDC[0];
239 f_areaY[4 * np - 2] = pointNDC[1];
240 }
241 else
242 {
243 f_areaX[4 * i - 2] = pointNDC[0];
244 f_areaY[4 * i - 2] = pointNDC[1];
245 }
246 }
247
248
249 f_innerCircleX[np] = f_innerCircleX[0];
250 f_innerCircleY[np] = f_innerCircleY[0];
251 f_outerCircleX[np] = f_outerCircleX[0];
252 f_outerCircleY[np] = f_outerCircleY[0];
253
254
255 for ( Int_t i = 0; i < np; i++ )
256 { gPad->PaintFillArea( 4, &f_areaX[4 * i], &f_areaY[4 * i] ); }
257
258
259
260 gPad->PaintPolyLine( np + 1, f_innerCircleX, f_innerCircleY );
261 gPad->PaintPolyLine( np + 1, f_outerCircleX, f_outerCircleY );
262}
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)