#include "TEveViewer.h"
#include "TEveScene.h"
#include "TEveSceneInfo.h"
#include "TEveManager.h"
#include "TGLSAViewer.h"
#include "TGLScenePad.h"
#include "TGLOrthoCamera.h"
ClassImp(TEveViewer)
TEveViewer::TEveViewer(const Text_t* n, const Text_t* t) :
TEveElementList(n, t),
fGLViewer (0)
{
SetChildClass(TEveSceneInfo::Class());
}
const TGPicture* TEveViewer::GetListTreeIcon()
{
return TEveElement::fgListTreeIcons[1];
}
void TEveViewer::SetGLViewer(TGLViewer* s)
{
delete fGLViewer;
fGLViewer = s;
fGLViewer->SetSmartRefresh(kTRUE);
fGLViewer->SetResetCameraOnDoubleClick(kFALSE);
}
void TEveViewer::SpawnGLViewer(const TGWindow* parent, TGedEditor* ged)
{
TGLSAViewer* v = new TGLSAViewer(parent, 0, ged);
v->ToggleEditObject();
SetGLViewer(v);
}
void TEveViewer::AddScene(TEveScene* scene)
{
static const TEveException eh("TEveViewer::AddScene ");
TGLSceneInfo* glsi = fGLViewer->AddScene(scene->GetGLScene());
if (glsi != 0) {
TEveSceneInfo* si = new TEveSceneInfo(this, scene, glsi);
gEve->AddElement(si, this);
} else {
throw(eh + "scene already in the viewer.");
}
}
void TEveViewer::RemoveElementLocal(TEveElement* el)
{
fGLViewer->RemoveScene(((TEveSceneInfo*)el)->GetGLScene());
}
void TEveViewer::RemoveElementsLocal()
{
fGLViewer->RemoveAllScenes();
}
TObject* TEveViewer::GetEditorObject(const TEveException& eh) const
{
if (!fGLViewer)
throw(eh + "fGLViewer not set.");
return fGLViewer;
}
Bool_t TEveViewer::HandleElementPaste(TEveElement* el)
{
static const TEveException eh("TEveViewer::HandleElementPaste ");
TEveScene* scene = dynamic_cast<TEveScene*>(el);
if (scene != 0) {
AddScene(scene);
return kTRUE;
} else {
Warning(eh.Data(), "class TEveViewer only accepts TEveScene paste argument.");
return kFALSE;
}
}
ClassImp(TEveViewerList)
TEveViewerList::TEveViewerList(const Text_t* n, const Text_t* t) :
TEveElementList(n, t)
{
SetChildClass(TEveViewer::Class());
}
void TEveViewerList::RepaintChangedViewers(Bool_t resetCameras, Bool_t dropLogicals)
{
for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
{
TGLViewer* glv = ((TEveViewer*)*i)->GetGLViewer();
if (glv->IsChanged())
{
if (resetCameras) glv->PostSceneBuildSetup(kTRUE);
if (dropLogicals) glv->SetSmartRefresh(kFALSE);
glv->RequestDraw(TGLRnrCtx::kLODHigh);
if (dropLogicals) glv->SetSmartRefresh(kTRUE);
}
}
}
void TEveViewerList::RepaintAllViewers(Bool_t resetCameras, Bool_t dropLogicals)
{
for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
{
TGLViewer* glv = ((TEveViewer*)*i)->GetGLViewer();
if (resetCameras) glv->PostSceneBuildSetup(kTRUE);
if (dropLogicals) glv->SetSmartRefresh(kFALSE);
glv->RequestDraw(TGLRnrCtx::kLODHigh);
if (dropLogicals) glv->SetSmartRefresh(kTRUE);
}
}
void TEveViewerList::SceneDestructing(TEveScene* scene)
{
for (List_i i=fChildren.begin(); i!=fChildren.end(); ++i)
{
TEveViewer* viewer = (TEveViewer*) *i;
List_i j = viewer->BeginChildren();
while (j != viewer->EndChildren())
{
TEveSceneInfo* sinfo = (TEveSceneInfo*) *j;
++j;
if (sinfo->GetScene() == scene)
gEve->RemoveElement(sinfo, viewer);
}
}
}
Last update: Thu Jan 17 08:49:47 2008
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.