25 ClassImp(TGLTransManip);
30 TGLTransManip::TGLTransManip()
38 TGLTransManip::TGLTransManip(TGLPhysicalShape * shape) :
46 TGLTransManip::~TGLTransManip()
55 void TGLTransManip::Draw(
const TGLCamera & camera)
const
62 const TGLBoundingBox & box = fShape->BoundingBox();
64 TGLVector3 axisScale[3];
65 CalcDrawScale(box, camera, baseScale, axisScale);
68 TGLPhysicalShape::EManip manip = fShape->GetManip();
71 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
72 glDisable(GL_CULL_FACE);
77 if (manip & TGLPhysicalShape::kTranslateX) {
79 TGLUtil::DrawLine(box.Center(), axisScale[0], TGLUtil::kLineHeadArrow,
80 baseScale, ColorFor(1));
83 TGLUtil::DrawLine(box.Center(), axisScale[0], TGLUtil::kLineHeadArrow,
84 baseScale, TGLUtil::fgGrey);
86 if (manip & TGLPhysicalShape::kTranslateY) {
88 TGLUtil::DrawLine(box.Center(), axisScale[1], TGLUtil::kLineHeadArrow,
89 baseScale, ColorFor(2));
92 TGLUtil::DrawLine(box.Center(), axisScale[1], TGLUtil::kLineHeadArrow,
93 baseScale, TGLUtil::fgGrey);
95 if (manip & TGLPhysicalShape::kTranslateZ) {
97 TGLUtil::DrawLine(box.Center(), axisScale[2], TGLUtil::kLineHeadArrow,
98 baseScale, ColorFor(3));
101 TGLUtil::DrawLine(box.Center(), axisScale[2], TGLUtil::kLineHeadArrow,
102 baseScale, TGLUtil::fgGrey);
105 TGLUtil::DrawSphere(box.Center(), baseScale/2.0, TGLUtil::fgWhite);
107 glEnable(GL_CULL_FACE);
117 Bool_t TGLTransManip::HandleMotion(
const Event_t & event,
118 const TGLCamera & camera)
123 camera.ViewportDeltaToWorld( fShape->BoundingBox().Center(),
124 event.fX - fLastMouse.GetX(),
125 -
event.fY + fLastMouse.GetY() );
129 UInt_t axisIndex = fSelectedWidget - 1;
130 TGLVector3 widgetAxis = fShape->BoundingBox().Axis(axisIndex, kTRUE);
131 TGLVector3 constrainedShift = widgetAxis * Dot(shift, widgetAxis);
132 fShape->Translate(constrainedShift);
134 fLastMouse.SetX(event.fX);
135 fLastMouse.SetY(event.fY);