7 #include <Reve/ReveManager.h>
9 #include <TGLSAViewer.h>
10 #include <TGLScenePad.h>
12 #include <TGLOrthoCamera.h> // For fixing defaults in root 5.17.4
16 //______________________________________________________________________
22 Viewer::Viewer(const Text_t* n, const Text_t* t) :
23 RenderElementList(n, t),
26 SetChildClass(SceneInfo::Class());
32 /**************************************************************************/
34 void Viewer::SetGLViewer(TGLViewer* s)
39 fGLViewer->SetSmartRefresh(kTRUE);
40 // fGLViewer->SetResetCamerasOnUpdate(kFALSE);
41 fGLViewer->SetResetCameraOnDoubleClick(kFALSE);
43 // Temporary fix for wrong defaults in root 5.17.04
44 fGLViewer->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
45 ((TGLOrthoCamera&)(fGLViewer->CurrentCamera())).SetEnableRotate(kTRUE);
46 fGLViewer->SetCurrentCamera(TGLViewer::kCameraOrthoXOZ);
47 ((TGLOrthoCamera&)(fGLViewer->CurrentCamera())).SetEnableRotate(kTRUE);
48 fGLViewer->SetCurrentCamera(TGLViewer::kCameraOrthoZOY);
49 ((TGLOrthoCamera&)(fGLViewer->CurrentCamera())).SetEnableRotate(kTRUE);
50 fGLViewer->SetCurrentCamera(TGLViewer::kCameraPerspXOZ);
53 void Viewer::SpawnGLViewer(const TGWindow* parent, TGedEditor* ged)
55 TGLSAViewer* v = new TGLSAViewer(parent, 0, ged);
56 v->ToggleEditObject();
60 /**************************************************************************/
62 void Viewer::AddScene(Scene* scene)
64 static const Exc_t eH("Viewer::AddScene ");
66 TGLSceneInfo* glsi = fGLViewer->AddScene(scene->GetGLScene());
68 SceneInfo* si = new SceneInfo(this, scene, glsi);
69 gReve->AddRenderElement(si, this);
71 throw(eH + "scene already in the viewer.");
75 void Viewer::RemoveElementLocal(RenderElement* el)
77 fGLViewer->RemoveScene(((SceneInfo*)el)->GetGLScene());
80 void Viewer::RemoveElementsLocal()
82 fGLViewer->RemoveAllScenes();
85 TObject* Viewer::GetEditorObject() const
90 Bool_t Viewer::HandleElementPaste(RenderElement* el)
92 static const Exc_t eH("Viewer::HandleElementPaste ");
94 Scene* scene = dynamic_cast<Scene*>(el);
99 Warning(eH.Data(), "class Viewer only accepts Scene paste argument.");
104 /**************************************************************************/
105 /**************************************************************************/
106 /**************************************************************************/
108 //______________________________________________________________________
114 ViewerList::ViewerList(const Text_t* n, const Text_t* t) :
115 RenderElementList(n, t)
117 SetChildClass(Viewer::Class());
120 ViewerList::~ViewerList()
123 /**************************************************************************/
125 void ViewerList::RepaintChangedViewers(Bool_t resetCameras, Bool_t dropLogicals)
127 for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
129 TGLViewer* glv = ((Viewer*)*i)->GetGLViewer();
130 if (glv->IsChanged())
132 // printf(" Viewer '%s' changed ... reqesting draw.\n", (*i)->GetObject()->GetName());
134 if (resetCameras) glv->PostSceneBuildSetup(kTRUE);
135 if (dropLogicals) glv->SetSmartRefresh(kFALSE);
137 glv->RequestDraw(TGLRnrCtx::kLODHigh);
139 if (dropLogicals) glv->SetSmartRefresh(kTRUE);
144 void ViewerList::RepaintAllViewers(Bool_t resetCameras, Bool_t dropLogicals)
146 for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
148 TGLViewer* glv = ((Viewer*)*i)->GetGLViewer();
150 // printf(" Viewer '%s' sending redraw reqest.\n", (*i)->GetObject()->GetName());
152 if (resetCameras) glv->PostSceneBuildSetup(kTRUE);
153 if (dropLogicals) glv->SetSmartRefresh(kFALSE);
155 glv->RequestDraw(TGLRnrCtx::kLODHigh);
157 if (dropLogicals) glv->SetSmartRefresh(kTRUE);
161 /**************************************************************************/
163 void ViewerList::SceneDestructing(Scene* scene)
165 for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
167 Viewer* viewer = (Viewer*) *i;
168 List_i j = viewer->BeginChildren();
169 while (j != viewer->EndChildren())
171 SceneInfo* sinfo = (SceneInfo*) *j;
173 if (sinfo->GetScene() == scene)
174 gReve->RemoveRenderElement(sinfo, viewer);