18#ifdef VGM_USES_TEMPLATE
19 #define VGIZMO_BASE_CLASS virtualGizmoBaseClass<T>
20 #define imGuIZMO_BASE_CLASS virtualGizmoBaseClass<float>
22 #define VGIZMO_BASE_CLASS virtualGizmoBaseClass
23 #define imGuIZMO_BASE_CLASS VGIZMO_BASE_CLASS
149 auto vecFromPos = [&] (
tVec3 &v) {
152 const T len = length(v);
153 v.z = len>
T(0) ? pow(
T(2), -
T(.5) * len) :
T(1);
160 tVec3 axis = cross(a, b);
161 axis = normalize(axis);
164 T angle = acos( AdotB>
T(1) ?
T(1) : (AdotB<-
T(1) ? -
T(1) : AdotB));
300 void motion(
T x,
T y) {
if(this->tbActive) VGIZMO_BASE_CLASS::motion(x,y); }
307 model = translate(model, -this->rotationCenter);
308 VGIZMO_BASE_CLASS::applyRotation(model);
309 model = translate(model, this->rotationCenter);
314 tMat4 trans, invTrans, rotation;
315 rotation = mat4_cast(this->qtV);
317 trans = translate(
tMat4(
T(1)),this->rotationCenter);
318 invTrans = translate(
tMat4(
T(1)),-this->rotationCenter);
320 return invTrans * rotation * trans;
341using VGIZMO_BASE_CLASS::delta;
342using VGIZMO_BASE_CLASS::qtV;
353 VGIZMO_BASE_CLASS::mouse(button, mod, pressed, x, y);
356 this->activateMouse(x,y);
359 this->deactivateMouse();
365 this->activateMouse(x,y);
368 this->deactivateMouse();
387 tVec3 v(delta.x, delta.y,
T(0));
399 if (this->tbActive) VGIZMO_BASE_CLASS::updateGizmo();
406 m = translate(m,
pan);
407 m = translate(m,
dolly);
408 m = translate(m, -this->rotationCenter);
409 VGIZMO_BASE_CLASS::applyRotation(m);
410 m = translate(m, this->rotationCenter);
415 tMat4 trans, invTrans, rotation;
416 tMat4 panMat, dollyMat;
423 rotation = mat4_cast(qtV);
426 trans = translate(
tMat4(
T(1)), this->rotationCenter);
427 invTrans = translate(
tMat4(
T(1)),-this->rotationCenter);
430 return panMat * dollyMat * invTrans * rotation * trans;
487 this->tbActive =
true;
488 this->delta =
tVec2(dx,-dy);
489 this->pos =
tVec2( x, y);
512#ifdef VGM_USES_TEMPLATE
513 #ifdef VGM_USES_DOUBLE_PRECISION
520 #ifndef IMGUIZMO_USE_ONLY_ROT
526 #ifndef IMGUIZMO_USE_ONLY_ROT
void motion(int x, int y)
void setPosition(const tVec3 &p)
vgModifiers dollyControlModifiers
void setDollyControl(vgButtons b, vgModifiers m=evNoModifier)
void motionImmediateMode(T x, T y, T dx, T dy, vgModifiers mod)
void setPanScale(T scale)
void mouse(vgButtons button, vgModifiers mod, bool pressed, int x, int y)
vgModifiers panControlModifiers
void setPanControl(vgButtons b, vgModifiers m=evNoModifier)
void setDollyPosition(const tVec3 &pos)
int getPanControlModifier()
void mouse(vgButtons button, vgModifiers mod, bool pressed, T x, T y)
void setDollyScale(T scale)
void setPanPosition(const tVec3 &pos)
tVec3 & getDollyPosition()
vgButtons panControlButton
void applyTransform(tMat4 &m)
tVec3 getPosition() const
vgButtons dollyControlButton
int getPanControlButton()
void setDollyPosition(T pos)
void setWheelScale(T scale)
vgModifiers xRotationModifier
void mouse(vgButtons button, vgModifiers mod, bool pressed, T x, T y)
void setGizmoRotXControl(vgButtons b, vgModifiers m=evNoModifier)
vgButtons tbControlButton
void setGizmoRotControl(vgButtons b, vgModifiers m=evNoModifier)
void viewportSize(T w, T h)
vgModifiers tbControlModifiers
virtual void motionImmediateMode(T x, T y, T dx, T dy, vgModifiers mod)
tVec3 & getRotationCenter()
void motionImmediateLeftButton(T x, T y, T dx, T dy)
virtual ~virtualGizmoBaseClass()
void setRotationCenter(const tVec3 &c)
void setStepRotation(const tQuat &q)
void setGizmoRotZControl(vgButtons b, vgModifiers m=evNoModifier)
void viewportSize(int w, int h)
void setGizmoRotYControl(vgButtons b, vgModifiers m=evNoModifier)
vgButtons tbRotationButton
vgModifiers zRotationModifier
void testRotModifier(int x, int y, vgModifiers mod)
vgModifiers yRotationModifier
virtual void applyTransform(tMat4 &model)=0
void setGizmoFeeling(T scale)
tQuat & getStepRotation()
void setRotation(const tQuat &q)
virtual tMat4 getTransform()=0
void applyRotation(tMat4 &m)
void activateMouse(T x, T y)
void applyTransform(tMat4 &model)
virtualGizmo3DClass vGizmo3D
virtualGizmo3DClass vImGuIZMO
vgm::VEC3_PRECISION tVec3
vgm::QUAT_PRECISION tQuat
vgm::VEC2_PRECISION tVec2
#define TEMPLATE_TYPENAME_T
vgm::MAT4_PRECISION tMat4