Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
boxset.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_eve
3 /// Demonstrates usage of TEveBoxSet class.
4 ///
5 /// \image html eve_boxset.png
6 /// \macro_code
7 ///
8 /// \author Matevz Tadel
9 
10 TEveBoxSet* boxset(Float_t x=0, Float_t y=0, Float_t z=0,
11  Int_t num=100, Bool_t registerSet=kTRUE)
12 {
13  TEveManager::Create();
14 
15  TRandom r(0);
16 
17  auto pal = new TEveRGBAPalette(0, 130);
18 
19  auto frm = new TEveFrameBox();
20  frm->SetAABoxCenterHalfSize(0, 0, 0, 12, 12, 12);
21  frm->SetFrameColor(kCyan);
22  frm->SetBackColorRGBA(120,120,120,20);
23  frm->SetDrawBack(kTRUE);
24 
25  auto q = new TEveBoxSet("BoxSet");
26  q->SetPalette(pal);
27  q->SetFrame(frm);
28  q->Reset(TEveBoxSet::kBT_AABox, kFALSE, 64);
29  for (Int_t i=0; i<num; ++i) {
30  q->AddBox(r.Uniform(-10, 10), r.Uniform(-10, 10), r.Uniform(-10, 10),
31  r.Uniform(0.2, 1), r.Uniform(0.2, 1), r.Uniform(0.2, 1));
32  q->DigitValue(r.Uniform(0, 130));
33  }
34  q->RefitPlex();
35 
36  TEveTrans& t = q->RefMainTrans();
37  t.SetPos(x, y, z);
38 
39  // Uncomment these two lines to get internal highlight / selection.
40  // q->SetPickable(1);
41  // q->SetAlwaysSecSelect(1);
42 
43  if (registerSet)
44  {
45  gEve->AddElement(q);
46  gEve->Redraw3D(kTRUE);
47  }
48 
49  return q;
50 }
51 
52 TEveBoxSet* boxset_colisval(Float_t x=0, Float_t y=0, Float_t z=0,
53  Int_t num=100, Bool_t registerSet=kTRUE)
54 {
55  TEveManager::Create();
56 
57  TRandom r(0);
58 
59  auto q = new TEveBoxSet("BoxSet");
60  q->Reset(TEveBoxSet::kBT_AABox, kTRUE, 64);
61  for (Int_t i=0; i<num; ++i) {
62  q->AddBox(r.Uniform(-10, 10), r.Uniform(-10, 10), r.Uniform(-10, 10),
63  r.Uniform(0.2, 1), r.Uniform(0.2, 1), r.Uniform(0.2, 1));
64  q->DigitColor(r.Uniform(20, 255), r.Uniform(20, 255),
65  r.Uniform(20, 255), r.Uniform(20, 255));
66  }
67  q->RefitPlex();
68 
69  TEveTrans& t = q->RefMainTrans();
70  t.SetPos(x, y, z);
71 
72  if (registerSet)
73  {
74  gEve->AddElement(q);
75  gEve->Redraw3D(kTRUE);
76  }
77 
78  return q;
79 }
80 
81 TEveBoxSet* boxset_single_color(Float_t x=0, Float_t y=0, Float_t z=0,
82  Int_t num=100, Bool_t registerSet=kTRUE)
83 {
84  TEveManager::Create();
85 
86  TRandom r(0);
87 
88  auto q = new TEveBoxSet("BoxSet");
89  q->UseSingleColor();
90  q->SetMainColor(kCyan-2);
91  q->SetMainTransparency(50);
92  q->Reset(TEveBoxSet::kBT_AABox, kFALSE, 64);
93  for (Int_t i=0; i<num; ++i) {
94  q->AddBox(r.Uniform(-10, 10), r.Uniform(-10, 10), r.Uniform(-10, 10),
95  r.Uniform(0.2, 1), r.Uniform(0.2, 1), r.Uniform(0.2, 1));
96  }
97  q->RefitPlex();
98 
99  TEveTrans& t = q->RefMainTrans();
100  t.SetPos(x, y, z);
101 
102  if (registerSet) {
103  gEve->AddElement(q);
104  gEve->Redraw3D(kTRUE);
105  }
106 
107  return q;
108 }
109 
110 TEveBoxSet* boxset_freebox(Int_t num=100, Bool_t registerSet=kTRUE)
111 {
112  TEveManager::Create();
113 
114  TRandom r(0);
115 
116  auto pal = new TEveRGBAPalette(0, 130);
117 
118  auto q = new TEveBoxSet("BoxSet");
119  q->SetPalette(pal);
120  q->Reset(TEveBoxSet::kBT_FreeBox, kFALSE, 64);
121 
122 #define RND_BOX(x) (Float_t)r.Uniform(-(x), (x))
123 
124  Float_t verts[24];
125  for (Int_t i=0; i<num; ++i) {
126  Float_t x = RND_BOX(10);
127  Float_t y = RND_BOX(10);
128  Float_t z = RND_BOX(10);
129  Float_t a = r.Uniform(0.2, 0.5);
130  Float_t d = 0.05;
131  Float_t verts[24] = {
132  x - a + RND_BOX(d), y - a + RND_BOX(d), z - a + RND_BOX(d),
133  x - a + RND_BOX(d), y + a + RND_BOX(d), z - a + RND_BOX(d),
134  x + a + RND_BOX(d), y + a + RND_BOX(d), z - a + RND_BOX(d),
135  x + a + RND_BOX(d), y - a + RND_BOX(d), z - a + RND_BOX(d),
136  x - a + RND_BOX(d), y - a + RND_BOX(d), z + a + RND_BOX(d),
137  x - a + RND_BOX(d), y + a + RND_BOX(d), z + a + RND_BOX(d),
138  x + a + RND_BOX(d), y + a + RND_BOX(d), z + a + RND_BOX(d),
139  x + a + RND_BOX(d), y - a + RND_BOX(d), z + a + RND_BOX(d) };
140  q->AddBox(verts);
141  q->DigitValue(r.Uniform(0, 130));
142  }
143  q->RefitPlex();
144 
145 #undef RND_BOX
146 
147  // Uncomment these two lines to get internal highlight / selection.
148  // q->SetPickable(1);
149  // q->SetAlwaysSecSelect(1);
150 
151  if (registerSet) {
152  gEve->AddElement(q);
153  gEve->Redraw3D(kTRUE);
154  }
155 
156  return q;
157 }
158 
159 TEveBoxSet* boxset_hex(Float_t x=0, Float_t y=0, Float_t z=0,
160  Int_t num=100, Bool_t registerSet=kTRUE)
161 {
162  TEveManager::Create();
163 
164  TRandom r(0);
165 
166  auto q = new TEveBoxSet("BoxSet");
167  q->Reset(TEveBoxSet::kBT_Hex, kTRUE, 64);
168 
169  for (Int_t i=0; i<num; ++i) {
170  q->AddHex(TEveVector(r.Uniform(-10, 10), r.Uniform(-10, 10), r.Uniform(-10, 10)),
171  r.Uniform(0.2, 1), r.Uniform(0, 60), r.Uniform(0.2, 5));
172  q->DigitColor(r.Uniform(20, 255), r.Uniform(20, 255),
173  r.Uniform(20, 255), r.Uniform(20, 255));
174  }
175  q->RefitPlex();
176 
177  q->SetPickable(true);
178  q->SetAlwaysSecSelect(true);
179 
180  TEveTrans& t = q->RefMainTrans();
181  t.SetPos(x, y, z);
182 
183  if (registerSet)
184  {
185  gEve->AddElement(q);
186  gEve->Redraw3D(kTRUE);
187  }
188 
189  return q;
190 }