Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
flower.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_cocoa
3/// A demo to show transparency with TMultiGraph
4/// (and a really interesting curve/equation). Point compression in TPadPainter.
5/// You can see all three flowers ONLY with Cocoa (transparency).
6///
7/// The equation by Paul Burke: http://paulbourke.net/geometry/
8///
9/// \macro_code
10///
11/// \author Timur Pocheptsov
12
13#include <cassert>
14#include <vector>
15
16#include "TMultiGraph.h"
17#include "TVirtualX.h"
18#include "TCanvas.h"
19#include "TGraph.h"
20#include "TError.h"
21#include "TColor.h"
22#include "TMath.h"
23
24#include "customcolor.h"
25
26namespace {
27
28typedef std::vector<Double_t> vector_type;
29typedef vector_type::size_type size_type;
30
31//______________________________________________________________________
32void create_flower(vector_type &xs, vector_type &ys, size_type nPoints, Double_t r)
33{
34 assert(nPoints > 100 && "create_flower, number of points is too small");
35
36 xs.resize(nPoints + 1);
37 ys.resize(nPoints + 1);
38
39 const Double_t angle = 21. * TMath::Pi() / nPoints;
40
41 for (size_type i = 0; i <= nPoints; ++i) {
42 const Double_t u = i * angle;
43 const Double_t p4 = TMath::Sin(17 * u / 3);
44 const Double_t p8 = TMath::Sin(2 * TMath::Cos(3 * u) - 28 * u);
45 const Double_t rr =
46 r * (1 + TMath::Sin(11 * u / 5)) - 4 * p4 * p4 * p4 * p4 * p8 * p8 * p8 * p8 * p8 * p8 * p8 * p8;
47
48 xs[i] = rr * TMath::Cos(u);
49 ys[i] = rr * TMath::Sin(u);
50 }
51}
52
53} // unnamed namespace.
54
55void flower()
56{
57 // 0. Indices for custom colors.
58 Color_t indices[3] = {};
60 ::Error("flower", "failed to create custom colors");
61 return;
62 }
63
64 // 1. I have to create a canvas to initialize gVirtualX.
65 TCanvas *const cnv = new TCanvas("Chrysanthemum", "Chrysanthemum", 900, 900);
66 if (gVirtualX && !gVirtualX->InheritsFrom("TGCocoa")) {
67 ::Error("flower", "This macro requires OS X version of ROOT with cocoa enabled");
68 delete cnv;
69 return;
70 }
71
72 cnv->cd(); // Just to suppress a warning if compiled.
73
74 vector_type xs, ys;
75
76 // 2. Create graphs and custom colors for each graph.
77 create_flower(xs, ys, 300, 6);
78 TGraph *const gr1 = new TGraph(Int_t(xs.size()), &xs[0], &ys[0]);
79 new TColor(indices[0], 0., 0., 0.5, "custom_blue", 0.7);
80 gr1->SetFillColor(indices[0]);
81 gr1->SetName("part1");
82 gr1->SetTitle("part1");
83
84 create_flower(xs, ys, 500000, 8);
85 TGraph *const gr2 = new TGraph(Int_t(xs.size()), &xs[0], &ys[0]);
86 new TColor(indices[1], 0.5, 0., 0.5, "custom_purple", 0.5);
87 gr2->SetFillColor(indices[1]);
88 gr2->SetName("part2");
89 gr2->SetTitle("part2");
90
91 create_flower(xs, ys, 100000, 10);
92 TGraph *const gr3 = new TGraph(Int_t(xs.size()), &xs[0], &ys[0]);
93
94 // If you want to see the difference, change 0.2 to 1 in the next call:
95 new TColor(indices[2], 1., 0., 0.4, "custom_magenta", 0.2);
96 gr3->SetFillColor(indices[2]);
97 gr3->SetName("part3");
98 gr3->SetTitle("part3");
99
100 // 3. Create a final multigraph.
101
102 // Otcveli, uzh davno ... nu ti ponEl.
103
104 TMultiGraph *const flower = new TMultiGraph("Chrysanthemum", "Chrysanthemum");
105 flower->Add(gr1);
106 flower->Add(gr2);
107 flower->Add(gr3);
108
109 flower->Draw("AFP");
110}
int Int_t
Definition RtypesCore.h:45
short Color_t
Definition RtypesCore.h:85
double Double_t
Definition RtypesCore.h:59
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
Definition TError.cxx:185
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint angle
#define gVirtualX
Definition TVirtualX.h:337
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition TAttFill.h:37
The Canvas class.
Definition TCanvas.h:23
TVirtualPad * cd(Int_t subpadnumber=0) override
Set current canvas & pad.
Definition TCanvas.cxx:719
The color creation and management class.
Definition TColor.h:21
A TGraph is an object made of two arrays X and Y with npoints each.
Definition TGraph.h:41
void SetName(const char *name="") override
Set graph name.
Definition TGraph.cxx:2386
void SetTitle(const char *title="") override
Change (i.e.
Definition TGraph.cxx:2402
A TMultiGraph is a collection of TGraph (or derived) objects.
Definition TMultiGraph.h:34
virtual void Add(TGraph *graph, Option_t *chopt="")
Add a new graph to the list of graphs.
void Draw(Option_t *chopt="") override
Draw this multigraph with its current attributes.
unsigned FindFreeCustomColorIndices(Color_t(&indices)[N])
Definition customcolor.h:38
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Definition TMath.h:598
constexpr Double_t Pi()
Definition TMath.h:37
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Definition TMath.h:592