From $ROOTSYS/tutorials/eve/boxset_cones.C

// @(#)root/eve:$Id$
// Author: Alja Mrak-Tadel

// Demonstrates usage of 'cone' mode in TEveBoxSet class.

TEveBoxSet* boxset_cones(Float_t x=0, Float_t y=0, Float_t z=0,
                         Int_t num=100, Bool_t register=kTRUE)
{
  TEveManager::Create();

  using namespace TMath;

  TEveStraightLineSet* lines = new TEveStraightLineSet("StraightLines");
  lines->SetLineColor(kYellow);
  lines->SetLineWidth(2);

  TRandom r(0);
  gStyle->SetPalette(1, 0);
  TEveRGBAPalette* pal = new TEveRGBAPalette(0, 500);
  TEveBoxSet* cones = new TEveBoxSet("ConeSet");
  cones->SetPalette(pal);
  cones->Reset(TEveBoxSet::kBT_Cone, kFALSE, 64);

  Float_t a = 40; // max distance between cones
  TEveVector dir, pos;
  Float_t theta, phi, height, rad;
  for (Int_t i=0; i<num; ++i)
  {
    theta  = r.Uniform(0,TMath::Pi());
    phi    = r.Uniform (-TMath::Pi(), TMath::Pi());
    height = r.Uniform(5, 15);
    rad    = r.Uniform(3, 5);
    dir.Set(Cos(phi)*Cos(theta), Sin(phi)*Cos(theta), Sin(theta));
    dir *= height;
    pos.Set(r.Uniform(-a,a), r.Uniform(-a, a), r.Uniform(-a, a));

    cones->AddCone(pos, dir, rad);
    cones->DigitValue(r.Uniform(0, 500));

    // draw axis line 30% longer than cone height
    TEveVector end = pos + dir*1.3f;
    lines->AddLine(pos.fX, pos.fY, pos.fZ, end.fX, end.fY, end.fZ);
  }

  // by default cone cap not drawn
  if (r.Integer(2)>0)  cones->SetDrawConeCap(kTRUE);

  cones->RefitPlex();
  TEveTrans& t = cones->RefMainTrans();
  t.SetPos(x, y, z);

  gEve->AddElement(cones);
  gEve->AddElement(lines);

  gEve->Redraw3D(kTRUE);

  return cones;
}

TEveBoxSet*
elliptic_boxset_cones(Float_t x=0, Float_t y=0, Float_t z=0,
                   Int_t num=100, Bool_t register=kTRUE)
{
  TEveManager::Create();

  using namespace TMath;

  TEveManager::Create();

  TEveStraightLineSet* lines = new TEveStraightLineSet("StraightLines");
  lines->SetLineColor(kYellow);
  lines->SetLineWidth(2);

  TRandom r(0);

  TEveBoxSet* cones = new TEveBoxSet("EllipticConeSet");
  cones->Reset(TEveBoxSet::kBT_EllipticCone, kTRUE, 64);

  cones->SetPickable(kTRUE);

  Float_t a = 40; // max distance between cones
  TEveVector dir, pos;
  Float_t theta, phi, height, rad;
  for (Int_t i=0; i<num; ++i)
  {
    theta  = r.Uniform(0,TMath::Pi());
    phi    = r.Uniform (-TMath::Pi(), TMath::Pi());
    height = r.Uniform(5, 15);
    rad    = r.Uniform(3, 5);
    dir.Set(Cos(phi)*Cos(theta), Sin(phi)*Cos(theta), Sin(theta));
    dir *= height;
    pos.Set(r.Uniform(-a,a), r.Uniform(-a, a), r.Uniform(-a, a));

    cones->AddEllipticCone(pos, dir, rad, 0.5*rad, r.Uniform(0,360));
    cones->DigitColor(r.Uniform(20, 255), r.Uniform(20, 255),
                      r.Uniform(20, 255), r.Uniform(20, 255));

    // draw axis line 30% longer than cone height
    TEveVector end = pos + dir*1.3f;
    lines->AddLine(pos.fX, pos.fY, pos.fZ, end.fX, end.fY, end.fZ);
  }

  // by default cone cap not drawn
  if (r.Integer(2)>0)  cones->SetDrawConeCap(kTRUE);

  cones->RefitPlex();
  TEveTrans& t = cones->RefMainTrans();
  t.SetPos(x, y, z);

  gEve->AddElement(cones);
  gEve->AddElement(lines);

  gEve->Redraw3D(kTRUE);

  return cones;
}
 boxset_cones.C:1
 boxset_cones.C:2
 boxset_cones.C:3
 boxset_cones.C:4
 boxset_cones.C:5
 boxset_cones.C:6
 boxset_cones.C:7
 boxset_cones.C:8
 boxset_cones.C:9
 boxset_cones.C:10
 boxset_cones.C:11
 boxset_cones.C:12
 boxset_cones.C:13
 boxset_cones.C:14
 boxset_cones.C:15
 boxset_cones.C:16
 boxset_cones.C:17
 boxset_cones.C:18
 boxset_cones.C:19
 boxset_cones.C:20
 boxset_cones.C:21
 boxset_cones.C:22
 boxset_cones.C:23
 boxset_cones.C:24
 boxset_cones.C:25
 boxset_cones.C:26
 boxset_cones.C:27
 boxset_cones.C:28
 boxset_cones.C:29
 boxset_cones.C:30
 boxset_cones.C:31
 boxset_cones.C:32
 boxset_cones.C:33
 boxset_cones.C:34
 boxset_cones.C:35
 boxset_cones.C:36
 boxset_cones.C:37
 boxset_cones.C:38
 boxset_cones.C:39
 boxset_cones.C:40
 boxset_cones.C:41
 boxset_cones.C:42
 boxset_cones.C:43
 boxset_cones.C:44
 boxset_cones.C:45
 boxset_cones.C:46
 boxset_cones.C:47
 boxset_cones.C:48
 boxset_cones.C:49
 boxset_cones.C:50
 boxset_cones.C:51
 boxset_cones.C:52
 boxset_cones.C:53
 boxset_cones.C:54
 boxset_cones.C:55
 boxset_cones.C:56
 boxset_cones.C:57
 boxset_cones.C:58
 boxset_cones.C:59
 boxset_cones.C:60
 boxset_cones.C:61
 boxset_cones.C:62
 boxset_cones.C:63
 boxset_cones.C:64
 boxset_cones.C:65
 boxset_cones.C:66
 boxset_cones.C:67
 boxset_cones.C:68
 boxset_cones.C:69
 boxset_cones.C:70
 boxset_cones.C:71
 boxset_cones.C:72
 boxset_cones.C:73
 boxset_cones.C:74
 boxset_cones.C:75
 boxset_cones.C:76
 boxset_cones.C:77
 boxset_cones.C:78
 boxset_cones.C:79
 boxset_cones.C:80
 boxset_cones.C:81
 boxset_cones.C:82
 boxset_cones.C:83
 boxset_cones.C:84
 boxset_cones.C:85
 boxset_cones.C:86
 boxset_cones.C:87
 boxset_cones.C:88
 boxset_cones.C:89
 boxset_cones.C:90
 boxset_cones.C:91
 boxset_cones.C:92
 boxset_cones.C:93
 boxset_cones.C:94
 boxset_cones.C:95
 boxset_cones.C:96
 boxset_cones.C:97
 boxset_cones.C:98
 boxset_cones.C:99
 boxset_cones.C:100
 boxset_cones.C:101
 boxset_cones.C:102
 boxset_cones.C:103
 boxset_cones.C:104
 boxset_cones.C:105
 boxset_cones.C:106
 boxset_cones.C:107
 boxset_cones.C:108
 boxset_cones.C:109
 boxset_cones.C:110
 boxset_cones.C:111
 boxset_cones.C:112
 boxset_cones.C:113
 boxset_cones.C:114
 boxset_cones.C:115
 boxset_cones.C:116
 boxset_cones.C:117