summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDon Bright <hugh.m.bright@gmail.com>2011-12-18 21:55:12 (GMT)
committerDon Bright <hugh.m.bright@gmail.com>2011-12-18 21:55:12 (GMT)
commitc2d94835b0fab1455c2e9ac290abfa80e5a9b09b (patch)
tree6a925f9d7a333a7ce8dc326f0aa3a9541c4c4b00 /src
parent541db676ee079eef7a6614cdd991514bf0c8ff52 (diff)
translate old style viewport mouse drag into Eigen math (see T. Hunter bug rpt)
Diffstat (limited to 'src')
-rw-r--r--src/glview.cc36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/glview.cc b/src/glview.cc
index 1dcddb7..59a56d6 100644
--- a/src/glview.cc
+++ b/src/glview.cc
@@ -58,6 +58,8 @@
#define FAR_FAR_AWAY 100000.0
+#include <Eigen/Geometry>
+
GLView::GLView(QWidget *parent) : QGLWidget(parent), renderer(NULL)
{
init();
@@ -558,7 +560,6 @@ void GLView::mousePressEvent(QMouseEvent *event)
setFocus();
}
-
void GLView::normalizeAngle(GLdouble& angle)
{
while(angle < 0)
@@ -595,8 +596,37 @@ void GLView::mouseMoveEvent(QMouseEvent *event)
if ((QApplication::keyboardModifiers() & Qt::ShiftModifier) != 0) {
viewer_distance += (GLdouble)dy;
} else {
- object_trans_x += dx * viewer_distance/1000;
- object_trans_z -= dy * viewer_distance/1000;
+
+ double mx = +(dx) * viewer_distance/1000;
+ double my = -(dy) * viewer_distance/1000;
+
+ Eigen::Matrix3d aax, aay, aaz, tm3;
+ aax = Eigen::AngleAxisd(-(object_rot_x/180) * M_PI,Eigen::Vector3d::UnitX());
+ aay = Eigen::AngleAxisd(-(object_rot_y/180) * M_PI,Eigen::Vector3d::UnitY());
+ aaz = Eigen::AngleAxisd(-(object_rot_z/180) * M_PI,Eigen::Vector3d::UnitZ());
+ tm3 = Eigen::Matrix3d::Identity();
+ tm3 = aaz * (aay * (aax * tm3));
+
+ Eigen::Matrix4d tm;
+ tm = Eigen::Matrix4d::Identity();
+ for (int i=0;i<3;i++) for (int j=0;j<3;j++) tm(j,i)=tm3(j,i);
+
+ Eigen::Matrix4d vec;
+ vec <<
+ 0, 0, 0, mx,
+ 0, 0, 0, 0,
+ 0, 0, 0, my,
+ 0, 0, 0, 1
+ ;
+ if ((QApplication::keyboardModifiers() & Qt::ShiftModifier) != 0) {
+ vec(0,3) = 0;
+ vec(1,3) = my;
+ vec(2,3) = 0;
+ }
+ tm = tm * vec;
+ object_trans_x += tm(0,3);
+ object_trans_y += tm(1,3);
+ object_trans_z += tm(2,3);
}
}
updateGL();
contact: Jan Huwald // Impressum