Browse Source

better tempaltes

Former-commit-id: c09454e3772b3796b57e7f721bf8f48f583000ee
Alec Jacobson 10 years ago
parent
commit
8c809663c2

+ 4 - 3
include/igl/snap_to_canonical_view_quat.cpp

@@ -96,12 +96,13 @@ IGL_INLINE bool igl::snap_to_canonical_view_quat(
   return false;
 }
 
+template <typename Scalarq, typename Scalars>
 IGL_INLINE bool igl::snap_to_canonical_view_quat(
-  const Eigen::Quaterniond & q,
+  const Eigen::Quaternion<Scalarq> & q,
   const double threshold,
-  Eigen::Quaterniond & s)
+  Eigen::Quaternion<Scalars> & s)
 {
-  return snap_to_canonical_view_quat<double>( 
+  return snap_to_canonical_view_quat<Scalars>( 
     q.coeffs().data(),threshold,s.coeffs().data());
 }
 

+ 3 - 2
include/igl/snap_to_canonical_view_quat.h

@@ -30,10 +30,11 @@ namespace igl
     const Q_type threshold,
     Q_type* s);
 
+  template <typename Scalarq, typename Scalars>
   IGL_INLINE bool snap_to_canonical_view_quat(
-    const Eigen::Quaterniond & q,
+    const Eigen::Quaternion<Scalarq> & q,
     const double threshold,
-    Eigen::Quaterniond & s);
+    Eigen::Quaternion<Scalars> & s);
 }
 
 #ifndef IGL_STATIC_LIBRARY

+ 4 - 3
include/igl/trackball.cpp

@@ -132,22 +132,23 @@ IGL_INLINE void igl::trackball(
   }
 }
 
+template <typename Scalardown_quat, typename Scalarquat>
 IGL_INLINE void igl::trackball(
   const double w,
   const double h,
   const double speed_factor,
-  const Eigen::Quaterniond & down_quat,
+  const Eigen::Quaternion<Scalardown_quat> & down_quat,
   const double down_mouse_x,
   const double down_mouse_y,
   const double mouse_x,
   const double mouse_y,
-  Eigen::Quaterniond & quat)
+  Eigen::Quaternion<Scalarquat> & quat)
 {
   using namespace std;
   return trackball(
     w,
     h,
-    speed_factor,
+    (Scalarquat)speed_factor,
     down_quat.coeffs().data(),
     down_mouse_x,
     down_mouse_y,

+ 3 - 2
include/igl/trackball.h

@@ -60,16 +60,17 @@ namespace igl
     const double mouse_y,
     Q_type * quat);
   // Eigen wrapper.
+  template <typename Scalardown_quat, typename Scalarquat>
   IGL_INLINE void trackball(
     const double w,
     const double h,
     const double speed_factor,
-    const Eigen::Quaterniond & down_quat,
+    const Eigen::Quaternion<Scalardown_quat> & down_quat,
     const double down_mouse_x,
     const double down_mouse_y,
     const double mouse_x,
     const double mouse_y,
-    Eigen::Quaterniond & quat);
+    Eigen::Quaternion<Scalarquat> & quat);
 }
 
 #ifndef IGL_STATIC_LIBRARY

+ 11 - 10
include/igl/two_axis_valuator_fixed_up.cpp

@@ -8,33 +8,34 @@
 #include "two_axis_valuator_fixed_up.h"
 #include "PI.h"
 
+template <typename Scalardown_quat, typename Scalarquat>
 IGL_INLINE void igl::two_axis_valuator_fixed_up(
   const int w,
   const int h,
   const double speed,
-  const Eigen::Quaterniond & down_quat,
+  const Eigen::Quaternion<Scalardown_quat> & down_quat,
   const int down_x,
   const int down_y,
   const int mouse_x,
   const int mouse_y,
-  Eigen::Quaterniond & quat)
+  Eigen::Quaternion<Scalarquat> & quat)
 {
   using namespace Eigen;
-  Vector3d axis(0,1,0);
+  Matrix<Scalarquat,3,1> axis(0,1,0);
   quat = down_quat * 
-    Quaterniond(
-      AngleAxisd(
-        PI*((double)(mouse_x-down_x))/(double)w*speed/2.0,
+    Quaternion<Scalarquat>(
+      AngleAxis<Scalarquat>(
+        PI*((Scalarquat)(mouse_x-down_x))/(Scalarquat)w*speed/2.0,
         axis.normalized()));
   quat.normalize();
   {
-    Vector3d axis(1,0,0);
+    Matrix<Scalarquat,3,1> axis(1,0,0);
     if(axis.norm() != 0)
     {
       quat = 
-        Quaterniond(
-          AngleAxisd(
-            PI*(mouse_y-down_y)/(double)h*speed/2.0,
+        Quaternion<Scalarquat>(
+          AngleAxis<Scalarquat>(
+            PI*(mouse_y-down_y)/(Scalarquat)h*speed/2.0,
             axis.normalized())) * quat;
       quat.normalize();
     }

+ 3 - 2
include/igl/two_axis_valuator_fixed_up.h

@@ -30,16 +30,17 @@ namespace igl
   //   quat  the resulting rotation (as quaternion)
   //
   // See also: snap_to_fixed_up
+  template <typename Scalardown_quat, typename Scalarquat>
   IGL_INLINE void two_axis_valuator_fixed_up(
     const int w,
     const int h,
     const double speed,
-    const Eigen::Quaterniond & down_quat,
+    const Eigen::Quaternion<Scalardown_quat> & down_quat,
     const int down_x,
     const int down_y,
     const int mouse_x,
     const int mouse_y,
-    Eigen::Quaterniond & quat);
+    Eigen::Quaternion<Scalarquat> & quat);
 }
 
 #ifndef IGL_STATIC_LIBRARY