71 fX[ 0] = fR0-0.2*fDr; fY[ 0] = 0;
72 fX[ 1] = fR0+fDr; fY[ 1] = 0.75*fDr;
73 fX[ 2] = fR0+fDr; fY[ 2] = -0.75*fDr;
74 fX[ 3] = fR0+2.2*fDr; fY[ 3] = 1.5*fDr;
75 fX[ 4] = fR0+2.2*fDr; fY[ 4] = 0;
76 fX[ 5] = fR0+2.2*fDr; fY[ 5] = -1.5*fDr;
77 fX[ 6] = fR0+3.4*fDr; fY[ 6] = 2.2*fDr;
78 fX[ 7] = fR0+3.4*fDr; fY[ 7] = 0.7*fDr;
79 fX[ 8] = fR0+3.4*fDr; fY[ 8] = -0.7*fDr;
80 fX[ 9] = fR0+3.4*fDr; fY[ 9] = -2.2*fDr;
81 fX[10] = fR0+4.6*fDr; fY[10] = 2.8*fDr;
82 fX[11] = fR0+4.6*fDr; fY[11] = 1.4*fDr;
83 fX[12] = fR0+4.6*fDr; fY[12] = 0;
84 fX[13] = fR0+4.6*fDr; fY[13] = -1.4*fDr;
85 fX[14] = fR0+4.6*fDr; fY[14] = -2.8*fDr;
107 if (px+py < 0)
return 1;
117 fCanvas =
new TCanvas(
"wheel",
"ROOT Color Wheel",10,10,400,400);
120 fCanvas->Range(-10.5,-10.5,10.5,10.5);
156 static char info[50];
160 if (
n < 0)
return info;
162 if (!color)
return info;
166 int res =
snprintf(info,
sizeof(info),
"col %d, %s, r=%3d, g=%3d, b=%3d",
n,color->GetName(),
r,
g,
b);
168 if ((res < 0) || (res >= (
int)
sizeof(info)))
182 for (
Int_t i=0;i<15;i++) {
185 if (dx*dx+dy*dy < r2)
return coffset+i-10;
197 if (ang < 0) ang += 360;
198 if (ang < 60)
return kWhite;
199 if (ang < 120)
return kGray;
200 if (ang < 180)
return kGray+1;
201 if (ang < 240)
return kGray+2;
202 if (ang < 300)
return kGray+3;
215 if (u < fRmin || u >
fRmax)
return -1;
217 if (
v > 0)
return coffset + div+1;
218 return coffset+div-9;
246 fText->SetTextFont(72);
248 fText->SetTextAlign(11);
249 fText->SetTextSize(0.03);
250 fText->SetTextAngle(0);
251 fText->PaintText(-10.2,-10.2,
"ROOT Color Wheel");
264 fArc->SetFillColor(colorn);
265 fArc->SetLineColor(14);
267 fArc->PaintEllipse(u,
v,
r,
r,0,360,0);
268 fText->SetTextSize(0.03);
269 fText->SetTextAlign(22);
285 fText->SetTextAlign(22);
286 fText->SetTextFont(72);
287 fText->SetTextColor(1);
288 fText->SetTextSize(0.03);
290 if (angle == 240) tangle = -30;
291 if (angle == 300) tangle = 30;
292 TColor *col =
gROOT->GetColor(coffset);
294 fText->SetTextAngle(tangle);
297 for (
Int_t i=0;i<15;i++) {
313 Rotate(rmax+0.62*dr,0,u,
v,ang);
316 fText->SetTextAlign(22);
317 fText->SetTextFont(72);
318 fText->SetTextColor(1);
319 fText->SetTextSize(0.03);
321 if (angle == 30) tangle = -60;
322 if (angle == 90) tangle = 0;
323 if (angle == 150) tangle = 60;
324 if (angle == 210) tangle = -60;
325 if (angle == 270) tangle = 0;
326 fText->SetTextAngle(tangle);
329 fText->PaintText(u,
v,color->GetName());
333 for (
Int_t j=0;j<2;j++) {
334 for (
Int_t i=0;i<10;i++) {
336 Int_t colorn = coffset +
n;
339 Rotate(rmin+i*dr, dy,
x[1],
y[1],ang);
340 Rotate(rmin+i*dr+dr,dy,
x[2],
y[2],ang);
341 Rotate(rmin+i*dr+dr, 0,
x[3],
y[3],ang);
342 fGraph->SetFillColor(colorn);
344 Rotate(rmin+i*dr+0.5*dr,0.5*dy,
x[0],
y[0],ang);
345 fText->SetTextSize(0.03);
346 fText->SetTextAlign(22);
351 if (angle > 180) tang -=180;
352 fText->SetTextAngle(tang);
367 fLine->SetLineWidth(1);
368 Rotate(rmin+3*dr,-dy,
x[0],
y[0],ang);
369 Rotate(rmin+3*dr, dy,
x[1],
y[1],ang);
371 Rotate(rmin+6*dr,-dy,
x[0],
y[0],ang);
372 Rotate(rmin+6*dr, dy,
x[1],
y[1],ang);
374 Rotate(rmin+9*dr,-dy,
x[0],
y[0],ang);
375 Rotate(rmin+9*dr, dy,
x[1],
y[1],ang);
377 Rotate(rmin+7*dr,-dy,
x[0],
y[0],ang);
378 Rotate(rmin+7*dr, dy,
x[1],
y[1],ang);
392 fArc->PaintEllipse(0,0,
r,
r,0,60,0);
394 fArc->PaintEllipse(0,0,
r,
r,60,120,0);
396 fArc->PaintEllipse(0,0,
r,
r,120,180,0);
398 fArc->PaintEllipse(0,0,
r,
r,180,240,0);
400 fArc->PaintEllipse(0,0,
r,
r,240,300,0);
402 fArc->PaintEllipse(0,0,
r,
r,300,360,0);
404 fText->SetTextAlign(22);
405 fText->SetTextFont(62);
406 fText->SetTextColor(1);
407 fText->SetTextSize(0.02);
408 fText->SetTextAngle(40);
409 fText->PaintText(0.5*
r,0.3*
r,
"kWhite");
410 fText->SetTextAngle(0);
411 fText->PaintText(0,0.8*
r,
"kGray");
412 fText->SetTextColor(10);
413 fText->SetTextFont(72);
414 fText->SetTextSize(0.03);
415 fText->PaintText(-0.6*
r, 0.3*
r,
"+1");
416 fText->PaintText(-0.6*
r,-0.3*
r,
"+2");
417 fText->PaintText(0,-0.6*
r,
"+3");
418 fText->SetTextAngle(-40);
419 fText->SetTextSize(0.02);
420 fText->SetTextFont(62);
421 fText->PaintText(0.5*
r,-0.35*
r,
"kBlack");
int Int_t
Signed integer 4 bytes (int).
double Double_t
Double 8 bytes.
const char Option_t
Option string (const char).
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Int_t InRectangles(Double_t x, Double_t y, Int_t coffset, Double_t angle) const
TCanvas * fCanvas
! Canvas used to draw the Color Wheel
TArc * fArc
! pointer to utility arc
TLine * fLine
! pointer to utility line
Double_t fRgray
Maximum radius of gray circle.
void PaintCircle(Int_t coffset, Int_t n, Double_t x, Double_t y, Double_t ang) const
Int_t InCircles(Double_t x, Double_t y, Int_t coffset, Double_t angle) const
virtual Int_t GetColor(Int_t px, Int_t py) const
Double_t fR0
Minimum radius for circles.
Double_t fY[15]
Y coordinates of the center of circles.
Int_t InGray(Double_t x, Double_t y) const
Double_t fX[15]
X coordinates of the center of circles.
Double_t fRmin
Minimum radius for rectangles.
TText * fText
! pointer to utility text
Double_t fRmax
Maximum radius for rectangles.
char * GetObjectInfo(Int_t px, Int_t py) const override
Returns string containing info about the object at position (px,py).
void Paint(Option_t *option="") override
This method must be overridden if a class wants to paint itself.
void PaintCircles(Int_t coffset, Double_t angle) const
void Draw(Option_t *option="") override
Default Draw method for all objects.
Double_t fDr
Circles radius.
void PaintRectangles(Int_t coffset, Double_t angle) const
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Computes distance from point (px,py) to the object.
void Rotate(Double_t x, Double_t y, Double_t &u, Double_t &v, Double_t ang) const
TGraph * fGraph
! pointer to utility graph
static Int_t GetColor(const char *hexcolor)
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
Double_t ATan2(Double_t y, Double_t x)
Returns the principal value of the arc tangent of y/x, expressed in radians.
constexpr Double_t DegToRad()
Conversion from degree to radian: .
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
constexpr Double_t RadToDeg()
Conversion from radian to degree: .
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.