Hi Christian,
now implemented along the lines you suggested. There are three new static
TColor methods:
TColor::GetColor(Int_t r, Int_t g, Int_t b) r,g,b in range [0,255]
TColor::GetColor(Float_t r, Float_t g, Float_t b) r,g,b in range [0,1]
TColor::GetColor(const char *hexcolor) hexcolor of the form "#rrggbb",
eg "#c0c0c0".
These methods return the color number for the specified color.
See new tutorial greyscale.C for example usage, which also shows how
to set a TPad and TText to the default GUI background color (as was
asked for by Simon.
Cheers, Fons.
Christian Holm Christensen wrote:
>
> Hi Rene et al,
>
> On Thu, 10 May 2001 09:12:17 +0000
> Rene Brun <Rene.Brun@cern.ch> wrote
> concerning ": Re: [ROOT] Different color palettes within one canvas":
> > Hi Christian,
> >
> > I do not agree with your request of SetLineColor(r,g,b);
> > The TAttLine object must be as small as possible (currently 3 shorts).
> > Your request would imply to add 3 floats (or 3 doubles).
> > I do not see the interest to define the rgb on a per object basis.
> > You define the color once, then you reference the color.
>
> Well, TAttLine needn't contain the three float, does it. I could
> imagine having:
>
> TAttLine::SetLineColor(float r, float g, float b) {
> // Get list of all defined colours.
> TObjArray *colours = (TObjArray*)gROOT->GetListOfColors();
>
> // Dummy.
> TColor* colour = 0;
>
> // Look for colour by name
> if ((colour = (TColor*)colours->FindObject(Form("#%02x%02x%02x",
> 255 * r, 255 * g,
> 255 * b))) {
> // We found the colour by name, so we use that right away
> fLineColor = colour->GetNumber();
> return;
> }
>
> // Iterator
> TIter next(colours);
>
> // Loop over all defined colours.
> while((colour = (TColor*)next())) {
> if (colour->GetRed() != r)
> continue;
> if (colour->GetGreen() != g)
> continue;
> if (colour->GetBlue() != b)
> continue;
>
> // We found a matching colour in the colour table
> fLineColor = colour->GetNumber();
> return;
> }
>
> // We didn't find a matching colour in the colour table, so we
> // add it. Note name is of the form "#rrggbb" where rr, etc are
> // hexadecimal numbers.
> colour = new TColor(colours->GetEntries(), r, g, b,
> Form("#%02x%02x%02x", 255 * r, 255 * g, 255 * b));
> fLineColor = colour->GetNumber();
> }
>
> Perhaps a static method of TColor, say
>
> static int TColor::GetColor(float, float, float) {
> // Get list of all defined colours.
> TObjArray *colours = (TObjArray*)gROOT->GetListOfColors();
>
> // Dummy.
> TColor* colour = 0;
>
> // Look for colour by name
> if ((colour = (TColor*)colours->FindObject(Form("#%02x%02x%02x",
> 255 * r, 255 * g,
> 255 * b)))
> // We found the colour by name, so we use that right away
> return colour->GetNumber();
>
> // Iterator
> TIter next(colours);
>
> // Loop over all defined colours.
> while((colour = (TColor*)next())) {
> if (colour->GetRed() != r)
> continue;
> if (colour->GetGreen() != g)
> continue;
> if (colour->GetBlue() != b)
> continue;
>
> // We found a matching colour in the colour table
> return colour->GetNumber();
> }
>
> // We didn't find a matching colour in the colour table, so we
> // add it. Note name is of the form "#rrggbb" where rr, etc are
> // hexadecimal numbers.
> colour = new TColor(colours->GetEntries(), r, g, b,
> Form("#%02x%02x%02x", 255 * r, 255 * g, 255 * b));
> return colour->GetNumber();
> }
>
> could provide this service for all T...Attr classes that need this.
>
> Doing it like this, you don't need to have more members in the classes
> TAtt... or TColor, and you can get hold of such colours again, by
> requesting the colour by name, like
>
> TColor* colour =
> (TColor*)gROOT->GetListOfColors->FindObject("#0f5086");
>
> Perhaps, TColor objects should, if the user didn't give a name, have
> names of the form "#rrggbb", where rr is hexadecimal number. I think
> that's better than the present "COLOR_...", since the format "#rrggbb"
> is widely used by a great deal of programs and formats (like HTML,
> LaTeX, and so on), and also "COLOR_..." doesn't really tell you
> anything about the actual colour, while "#rrggbb" does.
>
> I hope you find this suggestion useful.
>
> Yours,
>
> Christian -----------------------------------------------------------
> Holm Christensen Phone: (+45) 35 35 96 91
> Sankt Hansgade 23, 1. th. Office: (+45) 353 25 305
> DK-2200 Copenhagen N Web: www.nbi.dk/~cholm
> Denmark Email: cholm@nbi.dk
--
Org: CERN, European Laboratory for Particle Physics.
Mail: 1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248
WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7677910
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:52 MET