#include "TGLTransManip.h"
#include "TGLPhysicalShape.h"
#include "TGLCamera.h"
#include "TGLIncludes.h"
ClassImp(TGLTransManip)
TGLTransManip::TGLTransManip()
{
}
TGLTransManip::TGLTransManip(TGLPhysicalShape * shape) :
TGLManip(shape)
{
}
TGLTransManip::~TGLTransManip()
{
}
void TGLTransManip::Draw(const TGLCamera & camera) const
{
if (!fShape) {
return;
}
const TGLBoundingBox & box = fShape->BoundingBox();
Double_t baseScale;
TGLVector3 axisScale[3];
CalcDrawScale(box, camera, baseScale, axisScale);
TGLPhysicalShape::EManip manip = fShape->GetManip();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_CULL_FACE);
if (manip & TGLPhysicalShape::kTranslateX) {
glPushName(1);
TGLUtil::DrawLine(box.Center(), axisScale[0], TGLUtil::kLineHeadArrow,
baseScale, fSelectedWidget == 1 ? fgYellow : fgRed);
glPopName();
} else {
TGLUtil::DrawLine(box.Center(), axisScale[0], TGLUtil::kLineHeadArrow,
baseScale, fgGrey);
}
if (manip & TGLPhysicalShape::kTranslateY) {
glPushName(2);
TGLUtil::DrawLine(box.Center(), axisScale[1], TGLUtil::kLineHeadArrow,
baseScale, fSelectedWidget == 2 ? fgYellow : fgGreen);
glPopName();
} else {
TGLUtil::DrawLine(box.Center(), axisScale[1], TGLUtil::kLineHeadArrow,
baseScale, fgGrey);
}
if (manip & TGLPhysicalShape::kTranslateZ) {
glPushName(3);
TGLUtil::DrawLine(box.Center(), axisScale[2], TGLUtil::kLineHeadArrow,
baseScale, fSelectedWidget == 3 ? fgYellow : fgBlue);
glPopName();
} else {
TGLUtil::DrawLine(box.Center(), axisScale[2], TGLUtil::kLineHeadArrow,
baseScale, fgGrey);
}
TGLUtil::DrawSphere(box.Center(), baseScale/2.0, fgWhite);
glEnable(GL_CULL_FACE);
glDisable(GL_BLEND);
}
Bool_t TGLTransManip::HandleMotion(const Event_t & event, const TGLCamera & camera, const TGLBoundingBox & sceneBox)
{
if (fActive) {
TGLVector3 shift = camera.ViewportDeltaToWorld(fShape->BoundingBox().Center(),
event.fX - fLastMouse.GetX(),
-event.fY + fLastMouse.GetY());
UInt_t axisIndex = fSelectedWidget - 1;
TGLVector3 widgetAxis = fShape->BoundingBox().Axis(axisIndex, kTRUE);
TGLVector3 constrainedShift = widgetAxis * Dot(shift, widgetAxis);
fShape->Translate(constrainedShift);
fLastMouse.SetX(event.fX);
fLastMouse.SetY(event.fY);
return kTRUE;
} else {
return TGLManip::HandleMotion(event, camera, sceneBox);
}
}
ROOT page - Class index - Class Hierarchy - Top of the page
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.