Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
geom_cms_stereo.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_eve
3 /// Shows CMS geometry in stereo mode.
4 /// This requires quad-buffer support in the OpenGL hardware / driver,
5 /// otherwise a fatal error occurs.
6 ///
7 /// \image html eve_geom_cms_stereo.png
8 /// \macro_code
9 ///
10 /// \author Matevz Tadel
11 
12 void geom_cms_stereo(Bool_t quad_buf=kTRUE)
13 {
14  TEveManager::Create();
15 
16  TFile::SetCacheFileDir(".");
17  gGeoManager = gEve->GetGeometry("http://root.cern.ch/files/cms.root");
18  gGeoManager->DefaultColors();
19 
20  auto top = gGeoManager->GetTopVolume()->FindNode("CMSE_1")->GetVolume();
21 
22  auto trk = new TEveGeoTopNode(gGeoManager, top->FindNode("TRAK_1"));
23  trk->SetVisLevel(6);
24  gEve->AddGlobalElement(trk);
25 
26  auto calo = new TEveGeoTopNode(gGeoManager, top->FindNode("CALO_1"));
27  calo->SetVisLevel(3);
28  gEve->AddGlobalElement(calo);
29 
30  auto muon = new TEveGeoTopNode(gGeoManager, top->FindNode("MUON_1"));
31  muon->SetVisLevel(4);
32  gEve->AddGlobalElement(muon);
33 
34  // --- Stereo ---
35 
36  TEveWindowSlot* slot = 0;
37  slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
38 
39  auto sv = new TEveViewer("Stereo GL", "Stereoscopic view");
40  sv->SpawnGLViewer(gEve->GetEditor(), kTRUE, quad_buf);
41  sv->AddScene(gEve->GetGlobalScene());
42 
43  slot->ReplaceWindow(sv);
44 
45  gEve->GetViewers()->AddElement(sv);
46 
47  gEve->GetBrowser()->GetTabRight()->SetTab(1);
48 
49  // --- Redraw ---
50 
51  gEve->FullRedraw3D(kTRUE);
52  gEve->EditElement(sv);
53 
54  // --- Fix editor ---
55 
56  // EClipType not exported to CINT (see TGLUtil.h):
57  // 0 - no clip, 1 - clip plane, 2 - clip box
58  auto v = gEve->GetDefaultGLViewer();
59  v->GetClipSet()->SetClipType(TGLClip::EType(1));
60  v->ColorSet().Background().SetColor(kMagenta+4);
61  v->SetGuideState(TGLUtil::kAxesEdge, kTRUE, kFALSE, 0);
62  v->RefreshPadEditor(v);
63 
64  v->CurrentCamera().RotateRad(-1.2, 0.5);
65  v->DoDraw();
66 }