quadset.C

Go to the documentation of this file.
00001 // @(#)root/eve:$Id: quadset.C 37560 2010-12-13 12:28:23Z matevz $
00002 // Author: Matevz Tadel
00003 
00004 // Demonstates usage of 2D digit class TEveQuadSet.
00005 
00006 TEveQuadSet* quadset(Float_t x=0, Float_t y=0, Float_t z=0,
00007                        Int_t num=100, Bool_t register=kTRUE)
00008 {
00009    TEveManager::Create();
00010 
00011    TRandom r(0);
00012    gStyle->SetPalette(1, 0);
00013 
00014    TEveRGBAPalette *pal = new TEveRGBAPalette(0, 130);
00015    TEveFrameBox    *box = new TEveFrameBox();
00016    box->SetAAQuadXY(-10, -10, 0, 20, 20);
00017    box->SetFrameColor(kGray);
00018 
00019    TEveQuadSet* q = new TEveQuadSet("RectangleXY");
00020    q->SetOwnIds(kTRUE);
00021    q->SetPalette(pal);
00022    q->SetFrame(box);
00023    q->Reset(TEveQuadSet::kQT_RectangleXY, kFALSE, 32);
00024    for (Int_t i=0; i<num; ++i)
00025    {
00026       q->AddQuad(r.Uniform(-10, 9), r.Uniform(-10, 9), 0,
00027                  r.Uniform(0.2, 1), r.Uniform(0.2, 1));
00028       q->QuadValue(r.Uniform(0, 130));
00029       q->QuadId(new TNamed(Form("QuadIdx %d", i),
00030                            "TNamed assigned to a quad as an indentifier."));
00031    }
00032    q->RefitPlex();
00033 
00034    TEveTrans& t = q->RefMainTrans();
00035    t.RotateLF(1, 3, 0.5*TMath::Pi());
00036    t.SetPos(x, y, z);
00037 
00038    TGLViewer* v = gEve->GetDefaultGLViewer();
00039    v->SetCurrentCamera(TGLViewer::kCameraOrthoZOY);
00040    TGLCameraOverlay* co = v->GetCameraOverlay();
00041    co->SetShowOrthographic(kTRUE);
00042    co->SetOrthographicMode(TGLCameraOverlay::kGridFront);
00043 
00044    // Uncomment these two lines to get internal highlight / selection.
00045    // q->SetPickable(1);
00046    // q->SetAlwaysSecSelect(1);
00047 
00048    if (register)
00049    {
00050       gEve->AddElement(q);
00051       gEve->Redraw3D(kTRUE);
00052    }
00053 
00054    Info("quadset", "use alt-left-mouse to select individual digits.");
00055 
00056    return q;
00057 }
00058 
00059 TEveQuadSet* quadset_emc(Float_t x=0, Float_t y=0, Float_t z=0,
00060                            Int_t num=100)
00061 {
00062    TEveManager::Create();
00063 
00064    TRandom r(0);
00065    gStyle->SetPalette(1, 0);
00066 
00067    TEveQuadSet* q = new TEveQuadSet("EMC Supermodule");
00068    q->SetOwnIds(kTRUE);
00069    q->Reset(TEveQuadSet::kQT_RectangleXZFixedDimY, kFALSE, 32);
00070    q->SetDefWidth(8);
00071    q->SetDefHeight(8);
00072 
00073    for (Int_t i=0; i<num; ++i)
00074    {
00075       q->AddQuad(r.Uniform(-100, 100), r.Uniform(-100, 100));
00076       q->QuadValue(r.Uniform(0, 130));
00077       q->QuadId(new TNamed(Form("Cell %d", i), "Dong!"));
00078    }
00079    q->RefitPlex();
00080 
00081    TEveTrans& t = q->RefMainTrans();
00082    t.SetPos(x, y, z);
00083 
00084    gEve->AddElement(q);
00085    gEve->Redraw3D();
00086 
00087    return q;
00088 }
00089 
00090 TEveQuadSet* quadset_circ()
00091 {
00092    TEveManager::Create();
00093 
00094    TRandom rnd(0);
00095    gStyle->SetPalette(1, 0);
00096 
00097    Float_t R = 10, dW = 1, dH = .5;
00098 
00099    TEveFrameBox *box = new TEveFrameBox();
00100    {
00101       Float_t  frame[3*36];
00102       Float_t *p = frame;
00103       for (Int_t i = 0; i < 36; ++i, p += 3) {
00104          p[0] = 11 * TMath::Cos(TMath::TwoPi()*i/36);
00105          p[1] = 11 * TMath::Sin(TMath::TwoPi()*i/36);
00106          p[2] = 0;
00107       }
00108       box->SetQuadByPoints(frame, 36);
00109    }
00110    box->SetFrameColor(kGray);
00111 
00112    TEveQuadSet* q = new TEveQuadSet("Pepe");
00113    q->SetFrame(box);
00114    q->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
00115 
00116    for (Float_t r = R; r > 2; r *= 0.8)
00117    {
00118       Int_t maxI = 2.0*TMath::Pi()*r / 2;
00119       for (Int_t i = 0; i < maxI; ++i)
00120       {
00121          Float_t x = r * TMath::Cos(TMath::TwoPi()*i/maxI);
00122          Float_t y = r * TMath::Sin(TMath::TwoPi()*i/maxI);
00123          q->AddHexagon(x, y, rnd.Uniform(-1, 1), rnd.Uniform(0.2, 1));
00124          q->QuadValue(rnd.Uniform(0, 130));
00125       }
00126    }
00127    q->RefitPlex();
00128 
00129    TEveTrans& t = q->RefMainTrans();
00130    t.RotateLF(1, 3, 0.5*TMath::Pi());
00131 
00132    gEve->AddElement(q);
00133    gEve->Redraw3D();
00134 
00135    return q;
00136 }
00137 
00138 TEveQuadSet* quadset_hex(Float_t x=0, Float_t y=0, Float_t z=0,
00139                            Int_t num=100, Bool_t register=kTRUE)
00140 {
00141    TEveManager::Create();
00142 
00143    TRandom r(0);
00144    gStyle->SetPalette(1, 0);
00145 
00146    {
00147       TEveQuadSet* q = new TEveQuadSet("HexagonXY");
00148       q->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
00149       for (Int_t i=0; i<num; ++i)
00150       {
00151          q->AddHexagon(r.Uniform(-10, 10),
00152                        r.Uniform(-10, 10),
00153                        r.Uniform(-10, 10),
00154                        r.Uniform(0.2, 1));
00155          q->QuadValue(r.Uniform(0, 120));
00156       }
00157       q->RefitPlex();
00158 
00159       TEveTrans& t = q->RefMainTrans();
00160       t.SetPos(x, y, z);
00161 
00162       if (register)
00163       {
00164          gEve->AddElement(q);
00165          gEve->Redraw3D();
00166       }
00167    }
00168 
00169    {
00170       TEveQuadSet* q = new TEveQuadSet("HexagonYX");
00171       q->Reset(TEveQuadSet::kQT_HexagonYX, kFALSE, 32);
00172       for (Int_t i=0; i<num; ++i)
00173       {
00174          q->AddHexagon(r.Uniform(-10, 10),
00175                        r.Uniform(-10, 10),
00176                        r.Uniform(-10, 10),
00177                        r.Uniform(0.2, 1));
00178          q->QuadValue(r.Uniform(0, 120));
00179       }
00180       q->RefitPlex();
00181 
00182       TEveTrans& t = q->RefMainTrans();
00183       t.SetPos(x, y, z);
00184 
00185       if (register)
00186       {
00187          gEve->AddElement(q);
00188          gEve->Redraw3D();
00189       }
00190    }
00191 
00192    return q;
00193 }
00194 
00195 TEveQuadSet* quadset_hexid(Float_t x=0, Float_t y=0, Float_t z=0,
00196                              Int_t num=100, Bool_t register=kTRUE)
00197 {
00198    TEveManager::Create();
00199 
00200    TRandom r(0);
00201    gStyle->SetPalette(1, 0);
00202 
00203    {
00204       TEveQuadSet* q = new TEveQuadSet("HexagonXY");
00205       q->SetOwnIds(kTRUE);
00206       q->Reset(TEveQuadSet::kQT_HexagonXY, kFALSE, 32);
00207       for (Int_t i=0; i<num; ++i)
00208       {
00209          q->AddHexagon(r.Uniform(-10, 10),
00210                        r.Uniform(-10, 10),
00211                        r.Uniform(-10, 10),
00212                        r.Uniform(0.2, 1));
00213          q->QuadValue(r.Uniform(0, 120));
00214          q->QuadId(new TNamed(Form("Quad with idx=%d", i),
00215                               "This title is not confusing."));
00216       }
00217       q->RefitPlex();
00218 
00219       TEveTrans& t = q->RefMainTrans();
00220       t.SetPos(x, y, z);
00221 
00222       if (register)
00223       {
00224          gEve->AddElement(q);
00225          gEve->Redraw3D();
00226       }
00227    }
00228 
00229    // This show another way of getting notified about
00230    // secondary selection hit. The callback function and the
00231    // setting of it must be done in compiled code.
00232    gROOT->ProcessLine(".L quadset_callback.cxx+");
00233    quadset_set_callback(q);
00234 
00235    return q;
00236 }
00237 
00238 void quadset_hierarchy(Int_t n=4)
00239 {
00240    TEveManager::Create();
00241 
00242    gStyle->SetPalette(1, 0);
00243 
00244    TEveRGBAPalette* pal = new TEveRGBAPalette(20, 100);
00245    pal->SetLimits(0, 120);
00246 
00247    TEveFrameBox* box = new TEveFrameBox();
00248    box->SetAABox(-10, -10, -10, 20, 20, 20);
00249    box->SetFrameColor(33);
00250 
00251    TEveElementList* l = new TEveElementList("Parent/Dir");
00252    l->SetTitle("Tooltip");
00253    //  l->SetMainColor(3);
00254    gEve->AddElement(l);
00255 
00256    for (Int_t i=0; i<n; ++i)
00257    {
00258       TEveQuadSet* qs = quadset_hexid(0, 0, 50*i, 50, kFALSE);
00259       qs->SetPalette(pal);
00260       qs->SetFrame(box);
00261       l->AddElement(qs);
00262    }
00263 
00264    gEve->Redraw3D();
00265 }

Generated on Tue Jul 5 15:43:52 2011 for ROOT_528-00b_version by  doxygen 1.5.1