58 TCrown::TCrown(): TEllipse()
75 TCrown::TCrown(Double_t x1, Double_t y1,Double_t radin, Double_t radout,Double_t phimin,Double_t phimax)
76 :TEllipse(x1,y1,radin,radout,phimin,phimax,0)
83 TCrown::TCrown(
const TCrown &crown) : TEllipse(crown)
86 ((TCrown&)crown).Copy(*
this);
99 void TCrown::Copy(TObject &crown)
const
102 TEllipse::Copy(crown);
111 Int_t TCrown::DistancetoPrimitive(Int_t px, Int_t py)
114 const Double_t kPI = TMath::Pi();
115 Double_t x = gPad->PadtoX(gPad->AbsPixeltoX(px)) - fX1;
116 Double_t y = gPad->PadtoY(gPad->AbsPixeltoY(py)) - fY1;
120 Double_t r = TMath::Sqrt(x*x+y*y);
128 if (r > r2)
return dist;
129 if (r < r1)
return dist;
130 if (fPhimax-fPhimin < 360) {
131 Double_t phi = 180*TMath::ACos(x/r)/kPI;
132 if (y<0) phi = 360-phi;
133 Double_t phi1 = fPhimin;
134 Double_t phi2 = fPhimax;
135 if (phi1<0) phi1=phi1+360;
136 if (phi2<0) phi2=phi2+360;
138 if (phi < phi1 && phi > phi2)
return dist;
140 if (phi < phi1)
return dist;
141 if (phi > phi2)
return dist;
145 if (GetFillColor() && GetFillStyle()) {
148 if (TMath::Abs(r2-r)/r2 < 0.02)
return 0;
149 if (TMath::Abs(r1-r)/r1 < 0.02)
return 0;
157 void TCrown::DrawCrown(Double_t x1, Double_t y1,Double_t radin,Double_t radout,Double_t phimin,Double_t phimax,Option_t *option)
160 TCrown *newcrown =
new TCrown(x1, y1, radin, radout, phimin, phimax);
161 TAttLine::Copy(*newcrown);
162 TAttFill::Copy(*newcrown);
163 newcrown->SetBit(kCanDelete);
164 newcrown->AppendPad(option);
172 void TCrown::ExecuteEvent(Int_t event, Int_t px, Int_t py)
175 TEllipse::ExecuteEvent(event,px,py);
181 void TCrown::Paint(Option_t *)
184 const Double_t kPI = TMath::Pi();
186 static Double_t x[2*np+3], y[2*np+3];
190 Double_t angle,dx,dy;
191 Double_t dphi = (fPhimax-fPhimin)*kPI/(180*np);
192 Double_t ct = TMath::Cos(kPI*fTheta/180);
193 Double_t st = TMath::Sin(kPI*fTheta/180);
196 for (i=0;i<=np;i++) {
197 angle = fPhimin*kPI/180 + Double_t(i)*dphi;
198 dx = fR2*TMath::Cos(angle);
199 dy = fR2*TMath::Sin(angle);
200 x[i] = fX1 + dx*ct - dy*st;
201 y[i] = fY1 + dx*st + dy*ct;
204 for (i=0;i<=np;i++) {
205 angle = fPhimin*kPI/180 + Double_t(i)*dphi;
206 dx = fR1*TMath::Cos(angle);
207 dy = fR1*TMath::Sin(angle);
208 x[2*np-i+1] = fX1 + dx*ct - dy*st;
209 y[2*np-i+1] = fY1 + dx*st + dy*ct;
213 if (fPhimax-fPhimin >= 360 ) {
215 if (GetFillColor() && GetFillStyle()) {
216 gPad->PaintFillArea(2*np+2,x,y);
219 if (GetLineStyle()) {
220 gPad->PaintPolyLine(np+1,x,y);
221 gPad->PaintPolyLine(np+1,&x[np+1],&y[np+1]);
225 if (GetFillColor() && GetFillStyle()) gPad->PaintFillArea(2*np+2,x,y);
226 if (GetLineStyle()) gPad->PaintPolyLine(2*np+3,x,y);
233 void TCrown::SavePrimitive(std::ostream &out, Option_t * )
237 if (gROOT->ClassSaved(TCrown::Class())) {
242 out<<
"crown = new TCrown("<<fX1<<
","<<fY1<<
","<<fR1<<
","<<fR2
243 <<
","<<fPhimin<<
","<<fPhimax<<
");"<<std::endl;
245 SaveFillAttributes(out,
"crown",0,1001);
246 SaveLineAttributes(out,
"crown",1,1,1);
248 if (GetNoEdges()) out<<
" crown->SetNoEdges();"<<std::endl;
250 out<<
" crown->Draw();"<<std::endl;