Hi Christian, this makes a lot of sense and we'll try providing something like this. I am anyway currently revising a lot of color issues in the X11 interface so we can do this along the way. Cheers, Fons. On Thu, May 10, 2001 at 01:59:42PM +0200, 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:44 MET