#include "TEveLegoEventHandler.h"
#include "TGLViewer.h"
#include "TGLWidget.h"
#include "TGLOverlay.h"
#include "TGLLogicalShape.h"
#include "TGLPhysicalShape.h"
#include "KeySymbols.h"
#include "TMath.h"
#include "TGLUtil.h"
#include "TEveCalo.h"
ClassImp(TEveLegoEventHandler);
TEveLegoEventHandler::TEveLegoEventHandler(const char *name, TGWindow *w, TObject *obj,
const char *title) :
TGLEventHandler(name, w, obj, title),
fMode(kFree),
fTransTheta(0.5f),
fTheta(0.f),
fLastPickedLego(0)
{
}
Bool_t TEveLegoEventHandler::HandleKey(Event_t *event)
{
if (event->fCode == kKey_Home)
fMode = kFree;
return TGLEventHandler::HandleKey(event);
}
Bool_t TEveLegoEventHandler::HandleDoubleClick(Event_t *event)
{
if (fGLViewer->IsLocked()) return kFALSE;
if (event->fCode == kButton1)
{
fGLViewer->RequestSelect(event->fX, event->fY);
TGLPhysicalShape* pshape = fGLViewer->GetSelRec().GetPhysShape();
if (pshape && fGLViewer->GetSelRec().GetN() > 2)
{
TGLLogicalShape& lshape = const_cast<TGLLogicalShape&> (*pshape->GetLogical());
TGLLogicalShape* f = &lshape;
TEveCaloLego* lego = dynamic_cast<TEveCaloLego*>(f->GetExternal());
if (lego)
{
fLastPickedLego = lego;
lego->SetTowerPicked(fGLViewer->GetSelRec().GetItem(2));
}
}
else if (fLastPickedLego)
{
fLastPickedLego->SetTowerPicked(-1);
}
fGLViewer->RequestDraw();
}
return kTRUE;
}
Bool_t TEveLegoEventHandler::Rotate(Int_t xDelta, Int_t yDelta, Bool_t mod1, Bool_t mod2)
{
using namespace TMath;
TGLCamera &cam = fGLViewer->GetRnrCtx()->RefCamera();
Double_t hRotate = cam.AdjustDelta(-yDelta, Pi()/cam.RefViewport().Height(), mod1, mod2);
if (fMode == kLocked)
{
fTheta += hRotate;
if (fTheta < 0) fTheta = 0;
if (fTheta > fTransTheta)
{
fGLViewer->SetCurrentCamera(TGLViewer::kCameraPerspXOY);
fMode = kFree;
}
}
else
{
Double_t theta = cam.GetTheta();
Double_t thetaN = theta + hRotate;
if (thetaN > Pi() - cam.GetVAxisMinAngle()) thetaN = Pi() - cam.GetVAxisMinAngle();
else if (thetaN < cam.GetVAxisMinAngle()) thetaN = cam.GetVAxisMinAngle();
fTheta = thetaN;
if (thetaN < fTransTheta)
{
fGLViewer->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
fMode = kLocked;
}
else
{
fGLViewer->CurrentCamera().Rotate(xDelta, -yDelta, mod1, mod2);
}
}
return kTRUE;
}
TEveLegoEventHandler.cxx:1 TEveLegoEventHandler.cxx:2 TEveLegoEventHandler.cxx:3 TEveLegoEventHandler.cxx:4 TEveLegoEventHandler.cxx:5 TEveLegoEventHandler.cxx:6 TEveLegoEventHandler.cxx:7 TEveLegoEventHandler.cxx:8 TEveLegoEventHandler.cxx:9 TEveLegoEventHandler.cxx:10 TEveLegoEventHandler.cxx:11 TEveLegoEventHandler.cxx:12 TEveLegoEventHandler.cxx:13 TEveLegoEventHandler.cxx:14 TEveLegoEventHandler.cxx:15 TEveLegoEventHandler.cxx:16 TEveLegoEventHandler.cxx:17 TEveLegoEventHandler.cxx:18 TEveLegoEventHandler.cxx:19 TEveLegoEventHandler.cxx:20 TEveLegoEventHandler.cxx:21 TEveLegoEventHandler.cxx:22 TEveLegoEventHandler.cxx:23 TEveLegoEventHandler.cxx:24 TEveLegoEventHandler.cxx:25 TEveLegoEventHandler.cxx:26 TEveLegoEventHandler.cxx:27 TEveLegoEventHandler.cxx:28 TEveLegoEventHandler.cxx:29 TEveLegoEventHandler.cxx:30 TEveLegoEventHandler.cxx:31 TEveLegoEventHandler.cxx:32 TEveLegoEventHandler.cxx:33 TEveLegoEventHandler.cxx:34 TEveLegoEventHandler.cxx:35 TEveLegoEventHandler.cxx:36 TEveLegoEventHandler.cxx:37 TEveLegoEventHandler.cxx:38 TEveLegoEventHandler.cxx:39 TEveLegoEventHandler.cxx:40 TEveLegoEventHandler.cxx:41 TEveLegoEventHandler.cxx:42 TEveLegoEventHandler.cxx:43 TEveLegoEventHandler.cxx:44 TEveLegoEventHandler.cxx:45 TEveLegoEventHandler.cxx:46 TEveLegoEventHandler.cxx:47 TEveLegoEventHandler.cxx:48 TEveLegoEventHandler.cxx:49 TEveLegoEventHandler.cxx:50 TEveLegoEventHandler.cxx:51 TEveLegoEventHandler.cxx:52 TEveLegoEventHandler.cxx:53 TEveLegoEventHandler.cxx:54 TEveLegoEventHandler.cxx:55 TEveLegoEventHandler.cxx:56 TEveLegoEventHandler.cxx:57 TEveLegoEventHandler.cxx:58 TEveLegoEventHandler.cxx:59 TEveLegoEventHandler.cxx:60 TEveLegoEventHandler.cxx:61 TEveLegoEventHandler.cxx:62 TEveLegoEventHandler.cxx:63 TEveLegoEventHandler.cxx:64 TEveLegoEventHandler.cxx:65 TEveLegoEventHandler.cxx:66 TEveLegoEventHandler.cxx:67 TEveLegoEventHandler.cxx:68 TEveLegoEventHandler.cxx:69 TEveLegoEventHandler.cxx:70 TEveLegoEventHandler.cxx:71 TEveLegoEventHandler.cxx:72 TEveLegoEventHandler.cxx:73 TEveLegoEventHandler.cxx:74 TEveLegoEventHandler.cxx:75 TEveLegoEventHandler.cxx:76 TEveLegoEventHandler.cxx:77 TEveLegoEventHandler.cxx:78 TEveLegoEventHandler.cxx:79 TEveLegoEventHandler.cxx:80 TEveLegoEventHandler.cxx:81 TEveLegoEventHandler.cxx:82 TEveLegoEventHandler.cxx:83 TEveLegoEventHandler.cxx:84 TEveLegoEventHandler.cxx:85 TEveLegoEventHandler.cxx:86 TEveLegoEventHandler.cxx:87 TEveLegoEventHandler.cxx:88 TEveLegoEventHandler.cxx:89 TEveLegoEventHandler.cxx:90 TEveLegoEventHandler.cxx:91 TEveLegoEventHandler.cxx:92 TEveLegoEventHandler.cxx:93 TEveLegoEventHandler.cxx:94 TEveLegoEventHandler.cxx:95 TEveLegoEventHandler.cxx:96 TEveLegoEventHandler.cxx:97 TEveLegoEventHandler.cxx:98 TEveLegoEventHandler.cxx:99 TEveLegoEventHandler.cxx:100 TEveLegoEventHandler.cxx:101 TEveLegoEventHandler.cxx:102 TEveLegoEventHandler.cxx:103 TEveLegoEventHandler.cxx:104 TEveLegoEventHandler.cxx:105 TEveLegoEventHandler.cxx:106 TEveLegoEventHandler.cxx:107 TEveLegoEventHandler.cxx:108 TEveLegoEventHandler.cxx:109 TEveLegoEventHandler.cxx:110 TEveLegoEventHandler.cxx:111 TEveLegoEventHandler.cxx:112 TEveLegoEventHandler.cxx:113 TEveLegoEventHandler.cxx:114 TEveLegoEventHandler.cxx:115 TEveLegoEventHandler.cxx:116 TEveLegoEventHandler.cxx:117 TEveLegoEventHandler.cxx:118 TEveLegoEventHandler.cxx:119 TEveLegoEventHandler.cxx:120 TEveLegoEventHandler.cxx:121 TEveLegoEventHandler.cxx:122 TEveLegoEventHandler.cxx:123 TEveLegoEventHandler.cxx:124 TEveLegoEventHandler.cxx:125 TEveLegoEventHandler.cxx:126 TEveLegoEventHandler.cxx:127 TEveLegoEventHandler.cxx:128 TEveLegoEventHandler.cxx:129 TEveLegoEventHandler.cxx:130 TEveLegoEventHandler.cxx:131 TEveLegoEventHandler.cxx:132 TEveLegoEventHandler.cxx:133 TEveLegoEventHandler.cxx:134 TEveLegoEventHandler.cxx:135 TEveLegoEventHandler.cxx:136 TEveLegoEventHandler.cxx:137 TEveLegoEventHandler.cxx:138 TEveLegoEventHandler.cxx:139 TEveLegoEventHandler.cxx:140