Loading [MathJax]/extensions/tex2jax.js
Logo ROOT  
Reference Guide
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
radialgradients.C File Reference

Detailed Description

This tutorial demonstrates how to use radial gradients, custom colors, transparency.

Requires OpenGL: either set OpenGL.CanvasPreferGL to 1 in the $ROOTSYS/etc/system.rootrc, or use gStyle->SetCanvasPreferGL(kTRUE).

//Includes for ACLiC:
#include <cassert>
#include <cstdlib>
#include "TColorGradient.h"
#include "TEllipse.h"
#include "TRandom.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TError.h"
//Aux. functions.
#include "customcolorgl.h"
namespace {
//Just some colors (rgba) to build our
//fancy gradients from.
const Double_t basicColors[][4] =
{
{1., 0., 0., 1.},
{1., 0.3, 0., 1.},
{0., 0., 1., 1.},
{1., 1., 0., 1.},
{1., 0., 1., 1.},
{0., 1., 1., 1.},
{0., 1., 0., 1.},
{0., 0.5, 0., 1.},
//transparent colors:
{1., 0., 0., 0.5},
{1., 0.3, 0., 0.5},
{0., 0., 1., 0.5},
{1., 1., 0., 0.5},
{1., 0., 1., 0.5},
{0., 1., 1., 0.5},
{0., 1., 0., 0.5},
{0., 0.5, 0., 0.5},
//and even more transparent:
{1., 0., 0., 0.2},
{1., 0.3, 0., 0.2},
{0., 0., 1., 0.2},
{1., 1., 0., 0.2},
{1., 0., 1., 0.2},
{0., 1., 1., 0.2},
{0., 1., 0., 0.2},
{0., 0.5, 0., 0.2}
};
const unsigned nBasicColors = sizeof basicColors / sizeof basicColors[0];
//______________________________________________________________________
Color_t CreateRandomGradientFill()
{
const Double_t * const fromRGBA = basicColors[(std::rand() % (nBasicColors / 2))];
//With odd number of colors the last one is never selected :)
const Double_t * const toRGBA = basicColors[nBasicColors / 2 + (std::rand() % (nBasicColors / 2))];
const Double_t locations[] = {0., 1.};
const Double_t rgbas[] = {fromRGBA[0], fromRGBA[1], fromRGBA[2], fromRGBA[3],
toRGBA[0], toRGBA[1], toRGBA[2], toRGBA[3]};
Color_t idx[1] = {};
return -1;
TRadialGradient * const grad = new TRadialGradient(idx[0], 2, locations, rgbas);
//
return idx[0];
}
//______________________________________________________________________
bool add_ellipse(const Double_t xC, const Double_t yC, const Double_t r)
{
assert(gPad != nullptr && "add_ellipse, no pad to add ellipse");
const Color_t newColor = CreateRandomGradientFill();
if (newColor == -1) {
::Error("add_ellipse", "failed to find a new color index for a gradient fill");
return false;
}
TEllipse * const newEllipse = new TEllipse(xC, yC, r, r);
newEllipse->SetFillColor(newColor);
newEllipse->Draw();
return true;
}
}
//______________________________________________________________________
void radialgradients()
{
gRandom->SetSeed(4357);//;)
TCanvas * const cnv = new TCanvas("radial gradients", "radial gradients", 800, 800);
if (!cnv->UseGL()) {
::Error("radialgradients", "this demo OpenGL");
delete cnv;
return;
}
for (unsigned i = 0; i < 100; ++i)
if (!add_ellipse(gRandom->Rndm(), gRandom->Rndm(), 0.5 * gRandom->Rndm()))
break;
cnv->Modified();
cnv->Update();
}
ROOT::R::TRInterface & r
Definition: Object.C:4
double Double_t
Definition: RtypesCore.h:57
short Color_t
Definition: RtypesCore.h:81
const Bool_t kTRUE
Definition: RtypesCore.h:89
void Error(const char *location, const char *msgfmt,...)
R__EXTERN TRandom * gRandom
Definition: TRandom.h:62
R__EXTERN TStyle * gStyle
Definition: TStyle.h:410
#define gPad
Definition: TVirtualPad.h:287
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition: TAttFill.h:37
The Canvas class.
Definition: TCanvas.h:27
virtual void Update()
Update canvas pad buffers.
Definition: TCanvas.cxx:2433
Bool_t UseGL() const
Definition: TCanvas.h:233
Draw Ellipses.
Definition: TEllipse.h:24
virtual void Draw(Option_t *option="")
Draw this ellipse with its current attributes.
Definition: TEllipse.cxx:168
void Modified(Bool_t flag=1)
Definition: TPad.h:417
Define a radial color gradient.
void SetRadialGradient(const Point &center, Double_t radius)
Set radial gradient.
virtual void SetSeed(ULong_t seed=0)
Set the random generator seed.
Definition: TRandom.cxx:597
virtual Double_t Rndm()
Machine independent random number generator.
Definition: TRandom.cxx:541
void SetCanvasPreferGL(Bool_t prefer=kTRUE)
Definition: TStyle.h:323
unsigned FindFreeCustomColorIndices(T(&indices)[N])
Definition: customcolorgl.h:40
Author
Timur Pocheptsov

Definition in file radialgradients.C.