00001 // @(#)root/eve:$Id: geom_cms_stereo.C 31843 2009-12-11 10:33:59Z matevz $ 00002 // Author: Matevz Tadel 00003 00004 // Shows CMS geometry in stereo mode. 00005 // This requires quad-buffer support in the OpenGL hardware / driver, 00006 // otheriwse a fatal error occurs. 00007 00008 void geom_cms_stereo() 00009 { 00010 TEveManager::Create(); 00011 00012 TFile::SetCacheFileDir("."); 00013 gGeoManager = gEve->GetGeometry("http://root.cern.ch/files/cms.root"); 00014 gGeoManager->DefaultColors(); 00015 00016 TGeoVolume* top = gGeoManager->GetTopVolume()->FindNode("CMSE_1")->GetVolume(); 00017 00018 TEveGeoTopNode* trk = new TEveGeoTopNode(gGeoManager, top->FindNode("TRAK_1")); 00019 trk->SetVisLevel(6); 00020 gEve->AddGlobalElement(trk); 00021 00022 TEveGeoTopNode* calo = new TEveGeoTopNode(gGeoManager, top->FindNode("CALO_1")); 00023 calo->SetVisLevel(3); 00024 gEve->AddGlobalElement(calo); 00025 00026 TEveGeoTopNode* muon = new TEveGeoTopNode(gGeoManager, top->FindNode("MUON_1")); 00027 muon->SetVisLevel(4); 00028 gEve->AddGlobalElement(muon); 00029 00030 // --- Stereo --- 00031 00032 TEveWindowSlot* slot = 0; 00033 slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight()); 00034 00035 TEveViewer* sv = new TEveViewer("Stereo GL", "Stereoscopic view"); 00036 sv->SpawnGLViewer(gEve->GetEditor(), kTRUE); 00037 sv->AddScene(gEve->GetGlobalScene()); 00038 00039 slot->ReplaceWindow(sv); 00040 00041 gEve->GetViewers()->AddElement(sv); 00042 00043 gEve->GetBrowser()->GetTabRight()->SetTab(1); 00044 00045 // --- Redraw --- 00046 00047 gEve->FullRedraw3D(kTRUE); 00048 gEve->EditElement(sv); 00049 00050 // --- Fix editor --- 00051 00052 // EClipType not exported to CINT (see TGLUtil.h): 00053 // 0 - no clip, 1 - clip plane, 2 - clip box 00054 TGLViewer *v = gEve->GetDefaultGLViewer(); 00055 v->GetClipSet()->SetClipType(1); 00056 v->ColorSet().Background().SetColor(kMagenta+4); 00057 v->SetGuideState(TGLUtil::kAxesEdge, kTRUE, kFALSE, 0); 00058 v->RefreshPadEditor(v); 00059 00060 v->CurrentCamera().RotateRad(-1.2, 0.5); 00061 v->DoDraw(); 00062 }