ROOT
v6-32
Reference Guide
Loading...
Searching...
No Matches
boxset.C File Reference
Tutorials
»
Event display tutorials
Detailed Description
Demonstrates usage of
TEveBoxSet
class.
#include "
TRandom.h
"
#include <
ROOT/REveElement.hxx
>
#include <
ROOT/REveScene.hxx
>
#include <
ROOT/REveManager.hxx
>
#include <
ROOT/REveBoxSet.hxx
>
using namespace
ROOT::Experimental
;
std::string customTooltip(
const
ROOT::Experimental::REveDigitSet
*digitSet,
int
n
)
{
auto
d
= digitSet->
GetDigit
(
n
);
return
TString::Format
(
"Custom tooltip:\n value %d idx %d\n"
,
d
->fValue,
n
).
Data
();
}
REveBoxSet
* boxset_free(
Int_t
num=100)
{
TRandom
r
(0);
auto
pal =
new
REveRGBAPalette
(0, 130);
pal->SetMin(80);
auto
q
=
new
REveBoxSet
(
"BoxSet"
);
q
->SetPalette(pal);
q
->Reset(
REveBoxSet::kBT_FreeBox
,
kFALSE
, 64);
#define RND_BOX(x) (Float_t)r.Uniform(-(x), (x))
const
float
R
= 500;
const
float
A = 40;
const
float
D = 1;
for
(
int
i
= 0;
i
< num; ++
i
) {
float
x
=
RND_BOX
(
R
);
float
y
=
RND_BOX
(
R
);
float
z =
RND_BOX
(
R
);
float
a
=
r
.Uniform(0.2*A, A);
float
d
= D;
float
verts[24] = {
x
-
a
+
RND_BOX
(
d
),
y
-
a
+
RND_BOX
(
d
), z -
a
+
RND_BOX
(
d
),
x
-
a
+
RND_BOX
(
d
),
y
+
a
+
RND_BOX
(
d
), z -
a
+
RND_BOX
(
d
),
x
+
a
+
RND_BOX
(
d
),
y
+
a
+
RND_BOX
(
d
), z -
a
+
RND_BOX
(
d
),
x
+
a
+
RND_BOX
(
d
),
y
-
a
+
RND_BOX
(
d
), z -
a
+
RND_BOX
(
d
),
x
-
a
+
RND_BOX
(
d
),
y
-
a
+
RND_BOX
(
d
), z +
a
+
RND_BOX
(
d
),
x
-
a
+
RND_BOX
(
d
),
y
+
a
+
RND_BOX
(
d
), z +
a
+
RND_BOX
(
d
),
x
+
a
+
RND_BOX
(
d
),
y
+
a
+
RND_BOX
(
d
), z +
a
+
RND_BOX
(
d
),
x
+
a
+
RND_BOX
(
d
),
y
-
a
+
RND_BOX
(
d
), z +
a
+
RND_BOX
(
d
) };
q
->AddFreeBox(verts);
q
->DigitValue(
r
.Uniform(0, 130));
}
q
->RefitPlex();
#undef RND_BOX
// Uncomment these two lines to get internal highlight / selection.
q
->SetPickable(1);
q
->SetAlwaysSecSelect(1);
q
->SetTooltipCBFoo(customTooltip);
return
q
;
}
REveBoxSet
* boxset_axisaligned(
Float_t
x
=0,
Float_t
y
=0,
Float_t
z=0,
Int_t
num=100)
{
TRandom
r
(0);
auto
pal =
new
REveRGBAPalette
(0, 130);
auto
frm =
new
REveFrameBox
();
frm->SetAABoxCenterHalfSize(0, 0, 0, 12, 12, 12);
frm->SetFrameColor(
kCyan
);
frm->SetBackColorRGBA(120,120,120,20);
frm->SetDrawBack(
kTRUE
);
auto
q
=
new
REveBoxSet
(
"BoxSet"
);
q
->SetPalette(pal);
q
->SetFrame(frm);
q
->Reset(
REveBoxSet::kBT_InstancedScaled
,
kFALSE
, 64);
for
(
Int_t
i
=0;
i
<num; ++
i
) {
q
->AddInstanceScaled(
r
.Uniform(-10, 10),
r
.Uniform(-10, 10),
r
.Uniform(-10, 10),
r
.Uniform(0.2, 1),
r
.Uniform(0.2, 1),
r
.Uniform(0.2, 1));
q
->DigitValue(
r
.Uniform(0, 130));
}
q
->RefitPlex();
REveTrans
& t =
q
->RefMainTrans();
t.SetPos(
x
,
y
, z);
// Uncomment these two lines to get internal highlight / selection.
q
->SetPickable(1);
q
->SetAlwaysSecSelect(1);
q
->SetTooltipCBFoo(customTooltip);
return
q
;
}
REveBoxSet
* boxset_colisval(
Float_t
x
=0,
Float_t
y
=0,
Float_t
z=0,
Int_t
num=100)
{
TRandom
r
(0);
auto
q
=
new
REveBoxSet
(
"BoxSet"
);
q
->Reset(
REveBoxSet::kBT_InstancedScaled
,
kTRUE
, 64);
for
(
Int_t
i
=0;
i
<num; ++
i
) {
q
->AddInstanceScaled(
r
.Uniform(-10, 10),
r
.Uniform(-10, 10),
r
.Uniform(-10, 10),
r
.Uniform(0.2, 1),
r
.Uniform(0.2, 1),
r
.Uniform(0.2, 1));
q
->DigitColor(
r
.Uniform(20, 255),
r
.Uniform(20, 255),
r
.Uniform(20, 255),
r
.Uniform(20, 255));
}
q
->RefitPlex();
REveTrans
& t =
q
->RefMainTrans();
t.SetPos(
x
,
y
, z);
return
q
;
}
REveBoxSet
* boxset_single_color(
Float_t
x
=0,
Float_t
y
=0,
Float_t
z=0,
Int_t
num=100)
{
TRandom
r
(0);
auto
q
=
new
REveBoxSet
(
"BoxSet"
);
q
->UseSingleColor();
q
->SetMainColorPtr(
new
Color_t
);
q
->SetMainColor(
kRed
);
q
->SetMainTransparency(50);
q
->Reset(
REveBoxSet::kBT_InstancedScaled
,
kFALSE
, 64);
for
(
Int_t
i
=0;
i
<num; ++
i
) {
q
->AddInstanceScaled(
r
.Uniform(-10, 10),
r
.Uniform(-10, 10),
r
.Uniform(-10, 10),
r
.Uniform(0.2, 1),
r
.Uniform(0.2, 1),
r
.Uniform(0.2, 1));
}
q
->RefitPlex();
REveTrans
& t =
q
->RefMainTrans();
t.SetPos(
x
,
y
, z);
return
q
;
}
REveBoxSet
* boxset_fixed_dim(
Float_t
x
=0,
Float_t
y
=0,
Float_t
z=0,
Int_t
num=100)
{
TRandom
r
(0);
auto
q
=
new
REveBoxSet
(
"BoxSet"
);
q
->UseSingleColor();
q
->SetMainColorPtr(
new
Color_t
);
q
->SetMainColor(
kRed
);
q
->SetMainTransparency(50);
q
->Reset(
REveBoxSet::kBT_Instanced
,
kFALSE
, 64);
for
(
Int_t
i
=0;
i
<num; ++
i
) {
q
->AddInstance(
r
.Uniform(-10, 10),
r
.Uniform(-10, 10),
r
.Uniform(-10, 10));
}
q
->RefitPlex();
q
->SetPickable(1);
q
->SetAlwaysSecSelect(1);
REveTrans
& t =
q
->RefMainTrans();
t.SetPos(
x
,
y
, z);
return
q
;
}
REveBoxSet
* boxset_hex(
Float_t
x
=0,
Float_t
y
=0,
Float_t
z=0,
Int_t
num=100)
{
TRandom
r
(0);
auto
q
=
new
REveBoxSet
(
"BoxSet"
);
q
->Reset(
REveBoxSet::kBT_InstancedScaledRotated
,
kTRUE
, 64);
for
(
Int_t
i
=0;
i
<num; ++
i
) {
q
->AddHex(
REveVector
(
r
.Uniform(-10, 10),
r
.Uniform(-10, 10),
r
.Uniform(-10, 10)),
r
.Uniform(0.2, 1),
r
.Uniform(0, 60),
r
.Uniform(0.2, 5));
q
->DigitColor(
r
.Uniform(20, 255),
r
.Uniform(20, 255),
r
.Uniform(20, 255),
r
.Uniform(20, 255));
}
q
->RefitPlex();
q
->SetPickable(
true
);
q
->SetAlwaysSecSelect(
true
);
REveTrans
& t =
q
->RefMainTrans();
t.SetPos(
x
,
y
, z);
return
q
;
}
REveBoxSet
* boxset_gentrans(
Float_t
x
=0,
Float_t
y
=0,
Float_t
z=0,
int
num = 10)
{
auto
q
=
new
REveBoxSet
(
"BoxSet-GenTrans"
);
q
->Reset(
REveBoxSet::kBT_InstancedScaledRotated
,
kTRUE
, 64);
TRandom
r
(0);
for
(
Int_t
i
=0;
i
< num; ++
i
)
{
// Create per digit transformation
REveTrans
t;
float
x
= 50 -
i
*10;
t.Move3LF(
x
, 0, 0);
t.Scale(1, 1, 10);
t.RotateLF(1, 2,
r
.Uniform(3.14));
// t.Print();
float
farr[16];
for
(
int
m
=0;
m
<16;
m
++)
farr[
m
] = t.Array()[
m
];
q
->AddInstanceMat4(farr);
q
->DigitColor(255, 0, 0, 100);
// AMT how the treansparency handled, last ergument alpha
}
q
->RefitPlex();
q
->SetPickable(
true
);
q
->SetAlwaysSecSelect(
true
);
REveTrans
& t =
q
->RefMainTrans();
t.SetPos(
x
,
y
, z);
return
q
;
}
void
boxset()
{
enum
EBoxDemo_t {ScaledRotated, Free, AxisAligned, Hexagon, FixedDimension, SingleColor};
// EBoxDemo_t demo = ScaledRotated;
EBoxDemo_t
demo
= AxisAligned;
auto
eveMng
=
REveManager::Create
();
REveBoxSet
*
b
=
nullptr
;
switch
(
demo
)
{
case
ScaledRotated:
b
= boxset_gentrans();
break
;
case
Free:
b
= boxset_free();
break
;
case
AxisAligned:
b
= boxset_axisaligned();
break
;
case
FixedDimension:
b
= boxset_fixed_dim();
break
;
case
Hexagon:
b
= boxset_hex();
break
;
case
SingleColor:
b
= boxset_single_color();
break
;
default
:
printf(
"Unsupported demo type. \n"
);
return
;
}
eveMng
->GetEventScene()->AddElement(
b
);
// Add palette to scene to be streamed and edited in controller
if
(
b
->GetPalette())
eveMng
->GetEventScene()->AddElement(
b
->GetPalette());
eveMng
->Show();
REveViewer
*
v
=
ROOT::Experimental::gEve
->GetDefaultViewer();
v
->SetAxesType(
REveViewer::kAxesOrigin
);
// AMT temporary solution: add geo-shape to set scene bounding box
// digits at the moment have no bounding box calculation and lights are consequently
// in inital empty position at extend size of 1
auto
b1 =
new
REveGeoShape
(
"Bounding Box Barrel"
);
b1->SetShape(
new
TGeoTube
(30, 32, 10));
b1->SetMainColor(
kCyan
);
b1->SetNSegments(80);
b1->SetMainTransparency(95);
ROOT::Experimental::gEve
->GetGlobalScene()->AddElement(b1);
}
REveBoxSet.hxx
REveElement.hxx
REveManager.hxx
REveScene.hxx
d
#define d(i)
Definition
RSha256.hxx:102
b
#define b(i)
Definition
RSha256.hxx:100
a
#define a(i)
Definition
RSha256.hxx:99
R
#define R(a, b, c, d, e, f, g, h, i)
Definition
RSha256.hxx:110
Int_t
int Int_t
Definition
RtypesCore.h:45
Color_t
short Color_t
Definition
RtypesCore.h:92
Float_t
float Float_t
Definition
RtypesCore.h:57
kFALSE
constexpr Bool_t kFALSE
Definition
RtypesCore.h:101
kTRUE
constexpr Bool_t kTRUE
Definition
RtypesCore.h:100
kRed
@ kRed
Definition
Rtypes.h:66
kCyan
@ kCyan
Definition
Rtypes.h:66
r
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
Definition
TGWin32VirtualXProxy.cxx:168
i
Int_t i
Definition
TGraphAsymmErrors.cxx:1306
q
float * q
Definition
THbookFile.cxx:89
TRandom.h
REveBoxSet
Collection of 3D primitives (fixed-size boxes, boxes of different sizes, or arbitrary sexto-epipeds,...
REveFrameBox
Description of a 2D or 3D frame that can be used to visually group a set of objects.
REveGeoShape
Wrapper for TGeoShape with absolute positioning and color attributes allowing display of extracted TG...
REveRGBAPalette
A generic, speed-optimised mapping from value to RGBA color supporting different wrapping and range t...
REveTrans
REveTrans is a 4x4 transformation matrix for homogeneous coordinates stored internally in a column-ma...
REveViewer
Eve representation of a GL view.
ROOT::Experimental::REveBoxSet::kBT_FreeBox
@ kBT_FreeBox
Definition
REveBoxSet.hxx:33
ROOT::Experimental::REveBoxSet::kBT_InstancedScaledRotated
@ kBT_InstancedScaledRotated
Definition
REveBoxSet.hxx:36
ROOT::Experimental::REveBoxSet::kBT_InstancedScaled
@ kBT_InstancedScaled
Definition
REveBoxSet.hxx:35
ROOT::Experimental::REveBoxSet::kBT_Instanced
@ kBT_Instanced
Definition
REveBoxSet.hxx:34
ROOT::Experimental::REveDigitSet
Definition
REveDigitSet.hxx:35
ROOT::Experimental::REveDigitSet::GetDigit
DigitBase_t * GetDigit(Int_t n) const
Definition
REveDigitSet.hxx:128
ROOT::Experimental::REveManager::Create
static REveManager * Create()
If global REveManager* REX::gEve is not set initialize it.
Definition
REveManager.cxx:676
ROOT::Experimental::REveViewer::kAxesOrigin
@ kAxesOrigin
Definition
REveViewer.hxx:31
TGeoTube
Cylindrical tube class.
Definition
TGeoTube.h:17
TRandom
This is the base class for the ROOT Random number generators.
Definition
TRandom.h:27
TString::Data
const char * Data() const
Definition
TString.h:376
TString::Format
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition
TString.cxx:2378
eveMng
ROOT::Experimental::REveManager * eveMng
Definition
collection_proxies.C:59
RND_BOX
#define RND_BOX(x)
y
Double_t y[n]
Definition
legend1.C:17
x
Double_t x[n]
Definition
legend1.C:17
n
const Int_t n
Definition
legend1.C:16
ROOT::Experimental
Definition
RDirectory.hxx:30
ROOT::Experimental::gEve
R__EXTERN REveManager * gEve
Definition
REveManager.hxx:286
ROOT::Experimental::REveVector
REveVectorT< Float_t > REveVector
Definition
REveVector.hxx:119
demo
Definition
demo.py:1
v
@ v
Definition
rootcling_impl.cxx:3687
m
TMarker m
Definition
textangle.C:8
Author
Matevz Tadel
Definition in file
boxset.C
.
tutorials
eve
boxset.C
ROOT v6-32 - Reference Guide Generated on Sun May 17 2026 02:44:20 (GVA Time) using Doxygen 1.13.2