From $ROOTSYS/tutorials/geom/shapesAnim.C

//macro illustrating how to animate a geometry picture using a Timer
//Author: Rene Brun

Double_t pi;
Float_t theta = 0;
Float_t phi   = 30;
void shapesAnim() {
   TCanvas *c1 = new TCanvas("c1","Geometry Shapes",10,10,500,500);

   //  Define some volumes
   TBRIK *brik  = new TBRIK("BRIK","BRIK","void",200,150,150);
   TTRD1 *trd1  = new TTRD1("TRD1","TRD1","void",200,50,100,100);
   TTRD2 *trd2  = new TTRD2("TRD2","TRD2","void",200,50,200,50,100);
   TTRAP *trap  = new TTRAP("TRAP","TRAP","void",190,0,0,60,40,90,15,120,80,180,15);
   TPARA *para  = new TPARA("PARA","PARA","void",100,200,200,15,30,30);
   TGTRA *gtra  = new TGTRA("GTRA","GTRA","void",390,0,0,20,60,40,90,15,120,80,180,15);
   TTUBE *tube  = new TTUBE("TUBE","TUBE","void",150,200,400);
   TTUBS *tubs  = new TTUBS("TUBS","TUBS","void",80,100,100,90,235);
   TCONE *cone  = new TCONE("CONE","CONE","void",100,50,70,120,150);
   TCONS *cons  = new TCONS("CONS","CONS","void",50,100,100,200,300,90,270);
   TSPHE *sphe  = new TSPHE("SPHE","SPHE","void",25,340, 45,135, 0,270);
   TSPHE *sphe1 = new TSPHE("SPHE1","SPHE1","void",0,140, 0,180, 0,360);
   TSPHE *sphe2 = new TSPHE("SPHE2","SPHE2","void",0,200, 10,120, 45,145);

   TPCON *pcon = new TPCON("PCON","PCON","void",180,270,4);
   pcon->DefineSection(0,-200,50,100);
   pcon->DefineSection(1,-50,50,80);
   pcon->DefineSection(2,50,50,80);
   pcon->DefineSection(3,200,50,100);

   TPGON *pgon = new TPGON("PGON","PGON","void",180,270,8,4);
   pgon->DefineSection(0,-200,50,100);
   pgon->DefineSection(1,-50,50,80);
   pgon->DefineSection(2,50,50,80);
   pgon->DefineSection(3,200,50,100);

   //  Set shapes attributes
   brik->SetLineColor(1);
   trd1->SetLineColor(2);
   trd2->SetLineColor(3);
   trap->SetLineColor(4);
   para->SetLineColor(5);
   gtra->SetLineColor(7);
   tube->SetLineColor(6);
   tubs->SetLineColor(7);
   cone->SetLineColor(2);
   cons->SetLineColor(3);
   pcon->SetLineColor(6);
   pgon->SetLineColor(2);
   sphe->SetLineColor(kRed);
   sphe1->SetLineColor(kBlack);
   sphe2->SetLineColor(kBlue);


   //  Build the geometry hierarchy
   TNode *node1 = new TNode("NODE1","NODE1","BRIK");
   node1->cd();

   TNode *node2  = new TNode("NODE2","NODE2","TRD1",0,0,-1000);
   TNode *node3  = new TNode("NODE3","NODE3","TRD2",0,0,1000);
   TNode *node4  = new TNode("NODE4","NODE4","TRAP",0,-1000,0);
   TNode *node5  = new TNode("NODE5","NODE5","PARA",0,1000,0);
   TNode *node6  = new TNode("NODE6","NODE6","TUBE",-1000,0,0);
   TNode *node7  = new TNode("NODE7","NODE7","TUBS",1000,0,0);
   TNode *node8  = new TNode("NODE8","NODE8","CONE",-300,-300,0);
   TNode *node9  = new TNode("NODE9","NODE9","CONS",300,300,0);
   TNode *node10 = new TNode("NODE10","NODE10","PCON",0,-1000,-1000);
   TNode *node11 = new TNode("NODE11","NODE11","PGON",0,1000,1000);
   TNode *node12 = new TNode("NODE12","NODE12","GTRA",0,-400,700);
   TNode *node13 = new TNode("NODE13","NODE13","SPHE",10,-400,500);
   TNode *node14 = new TNode("NODE14","NODE14","SPHE1",10, 250,300);
   TNode *node15 = new TNode("NODE15","NODE15","SPHE2",10,-100,-200);


   // Draw this geometry in the current canvas
   node1->cd();
   node1->Draw();
   c1->Update();

   //start a Timer
   TTimer *timer = new TTimer(20);
   timer->SetCommand("Animate()");
   timer->TurnOn();
}
void Animate()
{
   theta += 2;
   phi   += 2;
   gPad->GetView()->RotateView(theta,phi);
   gPad->Modified();
   gPad->Update();
}
 shapesAnim.C:1
 shapesAnim.C:2
 shapesAnim.C:3
 shapesAnim.C:4
 shapesAnim.C:5
 shapesAnim.C:6
 shapesAnim.C:7
 shapesAnim.C:8
 shapesAnim.C:9
 shapesAnim.C:10
 shapesAnim.C:11
 shapesAnim.C:12
 shapesAnim.C:13
 shapesAnim.C:14
 shapesAnim.C:15
 shapesAnim.C:16
 shapesAnim.C:17
 shapesAnim.C:18
 shapesAnim.C:19
 shapesAnim.C:20
 shapesAnim.C:21
 shapesAnim.C:22
 shapesAnim.C:23
 shapesAnim.C:24
 shapesAnim.C:25
 shapesAnim.C:26
 shapesAnim.C:27
 shapesAnim.C:28
 shapesAnim.C:29
 shapesAnim.C:30
 shapesAnim.C:31
 shapesAnim.C:32
 shapesAnim.C:33
 shapesAnim.C:34
 shapesAnim.C:35
 shapesAnim.C:36
 shapesAnim.C:37
 shapesAnim.C:38
 shapesAnim.C:39
 shapesAnim.C:40
 shapesAnim.C:41
 shapesAnim.C:42
 shapesAnim.C:43
 shapesAnim.C:44
 shapesAnim.C:45
 shapesAnim.C:46
 shapesAnim.C:47
 shapesAnim.C:48
 shapesAnim.C:49
 shapesAnim.C:50
 shapesAnim.C:51
 shapesAnim.C:52
 shapesAnim.C:53
 shapesAnim.C:54
 shapesAnim.C:55
 shapesAnim.C:56
 shapesAnim.C:57
 shapesAnim.C:58
 shapesAnim.C:59
 shapesAnim.C:60
 shapesAnim.C:61
 shapesAnim.C:62
 shapesAnim.C:63
 shapesAnim.C:64
 shapesAnim.C:65
 shapesAnim.C:66
 shapesAnim.C:67
 shapesAnim.C:68
 shapesAnim.C:69
 shapesAnim.C:70
 shapesAnim.C:71
 shapesAnim.C:72
 shapesAnim.C:73
 shapesAnim.C:74
 shapesAnim.C:75
 shapesAnim.C:76
 shapesAnim.C:77
 shapesAnim.C:78
 shapesAnim.C:79
 shapesAnim.C:80
 shapesAnim.C:81
 shapesAnim.C:82
 shapesAnim.C:83
 shapesAnim.C:84
 shapesAnim.C:85
 shapesAnim.C:86
 shapesAnim.C:87
 shapesAnim.C:88
 shapesAnim.C:89
 shapesAnim.C:90
 shapesAnim.C:91
 shapesAnim.C:92
 shapesAnim.C:93