ROOT logo
void triangles(Int_t ntriangles=50) {
  //generate small triangles randomly in the canvas.
  //Each triangle has a unique id and a random color in the color palette
  //root > .x triangles.C
  //then click on any triangle. A message showing the triangle number
  //and its color will be printed.
  //Author: Rene Brun
   
  TCanvas *c1 = new TCanvas("c1","triangles",10,10,700,700);
  TRandom r;
  Double_t dx = 0.2; Double_t dy = 0.2;
  Int_t ncolors = gStyle->GetNumberOfColors();
  Double_t x[4],y[4];
  for (Int_t i=0;i<ntriangles;i++) {
     x[0] = r.Uniform(.05,.95); y[0] = r.Uniform(.05,.95);
     x[1] = x[0] + dx*r.Rndm(); y[1] = y[0] + dy*r.Rndm();
     x[2] = x[1] - dx*r.Rndm(); y[2] = y[1] - dy*r.Rndm();
     x[3] = x[0];               y[3] = y[0];
     TPolyLine *pl = new TPolyLine(4,x,y);
     pl->SetUniqueID(i);
     pl->SetFillColor(ncolors*r.Rndm());
     pl->Draw("f");
  }
  c1->AddExec("ex","TriangleClicked()");
}

void TriangleClicked() {
   //this action function is called whenever you move the mouse
   //it just prints the id of the picked triangle
   //you can add graphics actions instead
   int event = gPad->GetEvent();
   if (event != 11) return; //may be comment this line 
   TObject *select = gPad->GetSelected();
   if (!select) return;
   if (select->InheritsFrom("TPolyLine")) {
      TPolyLine *pl = (TPolyLine*)select;
      printf("You have clicked triangle %d, color=%d\n",
              pl->GetUniqueID(),pl->GetFillColor());
   }
}
 triangles.C:1
 triangles.C:2
 triangles.C:3
 triangles.C:4
 triangles.C:5
 triangles.C:6
 triangles.C:7
 triangles.C:8
 triangles.C:9
 triangles.C:10
 triangles.C:11
 triangles.C:12
 triangles.C:13
 triangles.C:14
 triangles.C:15
 triangles.C:16
 triangles.C:17
 triangles.C:18
 triangles.C:19
 triangles.C:20
 triangles.C:21
 triangles.C:22
 triangles.C:23
 triangles.C:24
 triangles.C:25
 triangles.C:26
 triangles.C:27
 triangles.C:28
 triangles.C:29
 triangles.C:30
 triangles.C:31
 triangles.C:32
 triangles.C:33
 triangles.C:34
 triangles.C:35
 triangles.C:36
 triangles.C:37
 triangles.C:38
 triangles.C:39
 triangles.C:40
 triangles.C:41