47 Double_t outerRadius, Double_t* center )
48 : TNamed( name,
title ), TAttLine(), TAttFill() {
51 if ( gDebug ) cout <<
"BesCircle2D normal ctor called" << endl;
53 fCenter =
new Double_t[3];
54 for ( Int_t i = 0; i < 3; i++ ) fCenter[i] = center[i];
57 fInnerRadius = innerRadius;
58 fOuterRadius = outerRadius;
60 f_innerCircleX = NULL;
61 f_innerCircleY = NULL;
62 f_outerCircleX = NULL;
63 f_outerCircleY = NULL;
82 const Int_t inaxis = 7;
85 Int_t puxmin = gPad->XtoAbsPixel( gPad->GetUxmin() );
86 Int_t puymin = gPad->YtoAbsPixel( gPad->GetUymin() );
87 Int_t puxmax = gPad->XtoAbsPixel( gPad->GetUxmax() );
88 Int_t puymax = gPad->YtoAbsPixel( gPad->GetUymax() );
91 if ( px < puxmin - inaxis )
return dist;
92 if ( py > puymin + inaxis )
return dist;
93 if ( px > puxmax + inaxis )
return dist;
94 if ( py < puymax - inaxis )
return dist;
97 if ( !view )
return dist;
99 Double_t x = gPad->PadtoX( gPad->AbsPixeltoX( px ) );
100 Double_t y = gPad->PadtoY( gPad->AbsPixeltoY( py ) );
113 Double_t distw = 0.0;
114 for ( Int_t i = 0; i < 2; i++ )
115 { distw += ( xwc[i] - fCenter[i] ) * ( xwc[i] - fCenter[i] ); }
118 if ( distw >= fInnerRadius * fInnerRadius && distw <= fOuterRadius * fOuterRadius )
return 0;
146 TString opt = option;
151 if ( view == 0 ) cout <<
"no view found" << endl;
154 Int_t np = fNSegment;
156 if ( f_innerCircleX )
158 delete[] f_innerCircleX;
159 f_innerCircleX = NULL;
161 if ( f_innerCircleY )
163 delete[] f_innerCircleY;
164 f_innerCircleY = NULL;
166 if ( f_outerCircleX )
168 delete[] f_outerCircleX;
169 f_outerCircleX = NULL;
171 if ( f_outerCircleY )
173 delete[] f_outerCircleY;
174 f_outerCircleY = NULL;
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];
198 Double_t dphi = 2 * TMath::Pi() / ( np );
199 Double_t pointWC[3], pointNDC[3];
201 for ( Int_t i = 0; i < np; i++ )
203 angle = Double_t( i ) * dphi;
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];
217 f_areaX[4 * np - 3] = pointNDC[0];
218 f_areaY[4 * np - 3] = pointNDC[1];
222 f_areaX[4 * i - 3] = pointNDC[0];
223 f_areaY[4 * i - 3] = pointNDC[1];
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];
238 f_areaX[4 * np - 2] = pointNDC[0];
239 f_areaY[4 * np - 2] = pointNDC[1];
243 f_areaX[4 * i - 2] = pointNDC[0];
244 f_areaY[4 * i - 2] = pointNDC[1];
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];
255 for ( Int_t i = 0; i < np; i++ )
256 { gPad->PaintFillArea( 4, &f_areaX[4 * i], &f_areaY[4 * i] ); }
260 gPad->PaintPolyLine( np + 1, f_innerCircleX, f_innerCircleY );
261 gPad->PaintPolyLine( np + 1, f_outerCircleX, f_outerCircleY );