1 // Multi-view (3d, rphi, rhoz) service class using EVE Window Manager.
2 // Author: Matevz Tadel 2009
4 #include <TEveManager.h>
6 #include <TEveViewer.h>
10 #include <TEveGeoShape.h>
12 #include <TEveProjectionManager.h>
13 #include <TEveProjectionAxes.h>
15 #include <TEveBrowser.h>
16 #include <TEveWindow.h>
20 // Structure encapsulating standard views: 3D, r-phi and rho-z.
21 // Includes scenes and projection managers.
23 // Should be used in compiled mode.
28 TEveProjectionManager *fRPhiMgr;
29 TEveProjectionManager *fRhoZMgr;
32 TEveViewer *fRPhiView;
33 TEveViewer *fRhoZView;
35 TEveScene *fRPhiGeomScene;
36 TEveScene *fRhoZGeomScene;
37 TEveScene *fRPhiEventScene;
38 TEveScene *fRhoZEventScene;
40 TEveGeoShape *fGeomGentle;
41 TEveGeoShape *fGeomGentleRPhi;
42 TEveGeoShape *fGeomGentleRhoZ;
43 TEveGeoShape *fGeomGentleTrd;
44 TEveGeoShape *fGeomGentleMuon;
46 //-------------------------------------------------------------------------
49 fGeomGentle(0), fGeomGentleRPhi(0), fGeomGentleRhoZ(0),
50 fGeomGentleTrd(0), fGeomGentleMuon(0)
52 // Constructor --- creates required scenes, projection managers
58 fRPhiGeomScene = gEve->SpawnNewScene("RPhi Geometry",
59 "Scene holding projected geometry for the RPhi view.");
60 fRhoZGeomScene = gEve->SpawnNewScene("RhoZ Geometry",
61 "Scene holding projected geometry for the RhoZ view.");
62 fRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data",
63 "Scene holding projected event-data for the RPhi view.");
64 fRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data",
65 "Scene holding projected event-data for the RhoZ view.");
68 // Projection managers
69 //=====================
71 fRPhiMgr = new TEveProjectionManager();
72 fRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
73 gEve->AddToListTree(fRPhiMgr, kFALSE);
75 TEveProjectionAxes* a = new TEveProjectionAxes(fRPhiMgr);
76 a->SetMainColor(kWhite);
78 a->SetTitleSize(0.05);
80 a->SetLabelSize(0.025);
82 fRPhiGeomScene->AddElement(a);
85 fRhoZMgr = new TEveProjectionManager();
86 fRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
87 gEve->AddToListTree(fRhoZMgr, kFALSE);
89 TEveProjectionAxes* a = new TEveProjectionAxes(fRhoZMgr);
90 a->SetMainColor(kWhite);
92 a->SetTitleSize(0.05);
94 a->SetLabelSize(0.025);
96 fRhoZGeomScene->AddElement(a);
103 TEveWindowSlot *slot = 0;
104 TEveWindowPack *pack = 0;
106 slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
107 pack = slot->MakePack();
108 pack->SetElementName("Multi View");
109 pack->SetHorizontal();
110 pack->SetShowTitleBar(kFALSE);
111 pack->NewSlot()->MakeCurrent();
112 f3DView = gEve->SpawnNewViewer("3D View", "");
113 f3DView->AddScene(gEve->GetGlobalScene());
114 f3DView->AddScene(gEve->GetEventScene());
116 pack = pack->NewSlot()->MakePack();
117 pack->SetShowTitleBar(kFALSE);
118 pack->NewSlot()->MakeCurrent();
119 fRPhiView = gEve->SpawnNewViewer("RPhi View", "");
120 fRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
121 fRPhiView->AddScene(fRPhiGeomScene);
122 fRPhiView->AddScene(fRPhiEventScene);
124 pack->NewSlot()->MakeCurrent();
125 fRhoZView = gEve->SpawnNewViewer("RhoZ View", "");
126 fRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
127 fRhoZView->AddScene(fRhoZGeomScene);
128 fRhoZView->AddScene(fRhoZEventScene);
131 //-------------------------------------------------------------------------
133 void InitGeomGentle(TEveGeoShape* g3d, TEveGeoShape* grphi, TEveGeoShape* grhoz)
136 fGeomGentleRPhi = grphi; fGeomGentleRPhi->IncDenyDestroy();
137 fGeomGentleRhoZ = grhoz; fGeomGentleRhoZ->IncDenyDestroy();
139 fRPhiMgr->SetCurrentDepth(-10);
140 ImportGeomRPhi(fGeomGentleRPhi);
141 fRPhiMgr->SetCurrentDepth(0);
143 fRhoZMgr->SetCurrentDepth(-10);
144 ImportGeomRhoZ(fGeomGentleRhoZ);
145 fRhoZMgr->SetCurrentDepth(0);
148 void InitGeomGentleTrd(TEveGeoShape* gtrd)
150 fGeomGentleTrd = gtrd;
151 ImportGeomRPhi(fGeomGentleTrd);
152 ImportGeomRhoZ(fGeomGentleTrd);
155 void InitGeomGentleMuon(TEveGeoShape* gmuon, Bool_t showRPhi, Bool_t showRhoZ)
157 fGeomGentleMuon = gmuon;
158 if (showRPhi) ImportGeomRPhi(fGeomGentleMuon);
159 if (showRhoZ) ImportGeomRhoZ(fGeomGentleMuon);
162 //-------------------------------------------------------------------------
164 void ImportGeomRPhi(TEveElement* el)
166 fRPhiMgr->ImportElements(el, fRPhiGeomScene);
169 void ImportGeomRhoZ(TEveElement* el)
171 fRhoZMgr->ImportElements(el, fRhoZGeomScene);
174 void ImportEventRPhi(TEveElement* el)
176 fRPhiMgr->ImportElements(el, fRPhiEventScene);
179 void ImportEventRhoZ(TEveElement* el)
181 fRhoZMgr->ImportElements(el, fRhoZEventScene);
184 void DestroyEventRPhi()
186 fRPhiEventScene->DestroyElements();
189 void DestroyEventRhoZ()
191 fRhoZEventScene->DestroyElements();
194 void SetCenterRPhi(Double_t x, Double_t y, Double_t z)
196 fRPhiMgr->SetCenter(x, y, z);
199 void SetCenterRhoZ(Double_t x, Double_t y, Double_t z)
201 fRhoZMgr->SetCenter(x, y, z);
205 MultiView *gMultiView = 0;