26 #ifndef INCLUDED_EigenInterop_h_GUID_A07DFDC3_BA71_4894_6593_732B364A2AE7
27 #define INCLUDED_EigenInterop_h_GUID_A07DFDC3_BA71_4894_6593_732B364A2AE7
53 return Eigen::Map<Eigen::Vector3d>(&(vec.
data[0]));
59 return Eigen::Map<const Eigen::Vector3d>(&(vec.
data[0]));
82 Eigen::Isometry3d newPose;
85 Eigen::Vector3d::Constant(1));
95 Eigen::Quaterniond quat(xform.rotation());
105 Eigen::Affine3d xform(mat);
107 Eigen::Quaterniond quat(xform.rotation());
114 namespace eigen_interop {
115 inline Eigen::Map<const Eigen::Vector3d>
120 inline Eigen::Map<Eigen::Vector3d> map(
OSVR_Vec3 &vec) {
124 inline Eigen::Map<const Eigen::Vector3d> map(
OSVR_Vec3 const &vec) {
125 return const_map(vec);
168 template <
char Coefficient,
typename T = OSVR_Quaternion>
172 operator double()
const {
197 operator Eigen::Quaterniond()
const {
return quat(); }
212 typedef BaseQuatMap<> ConstQuatMap;
220 template <
typename T>
223 *m_quat = *other.m_quat;
227 template <
typename Derived>
229 operator=(Eigen::QuaternionBase<Derived>
const &other)
const {
257 return detail::ConstQuatMap(quat);
261 return const_map(quat);
265 return detail::QuatMap(quat);
276 typedef Eigen::Isometry3d TransformType;
277 typedef typename TransformType::MatrixType MatrixType;
291 return const_map(m_pose->translation);
296 return const_map(m_pose->rotation);
303 typedef BasePoseMap<> ConstPoseMap;
312 template <
typename T>
315 *m_pose = *other.m_pose;
344 inline detail::ConstPoseMap const_map(
OSVR_Pose3 const &pose) {
345 return detail::ConstPoseMap(pose);
348 inline detail::ConstPoseMap map(
OSVR_Pose3 const &pose) {
349 return const_map(pose);
352 inline detail::PoseMap map(
OSVR_Pose3 &pose) {
353 return detail::PoseMap(pose);
360 #endif // INCLUDED_EigenInterop_h_GUID_A07DFDC3_BA71_4894_6593_732B364A2AE7
void osvrQuatSetZ(OSVR_Quaternion *q, double val)
Setter for quaternion component Z.
QuatCoefficientMap<'X'> x() const
Read-write accessor for the x component of the quaternion.
QuatMap const & operator=(Eigen::QuaternionBase< Derived > const &other) const
Assignment operator from an Eigen quaternion.
QuatCoefficientMap<'W'> w() const
Read-write accessor for the w component of the quaternion.
QuatCoefficientMap<'Z'> z() const
Read-write accessor for the z component of the quaternion.
double osvrQuatGetY(OSVR_Quaternion const *q)
Accessor for quaternion component Y.
A structure defining a 3D vector, often a position/translation.
double w() const
Read-only accessor for the w component of the quaternion.
PoseMap const & operator=(Eigen::Isometry3d const &other) const
Assignment operator from an Eigen isometry.
OSVR_Quaternion rotation
Orientation as a unit quaternion.
PoseMap const & operator=(Eigen::Matrix4d const &other) const
Header wrapping include of and for warning quieting.
A structure defining a quaternion, often a unit quaternion representing 3D rotation.
void toPose(Eigen::Isometry3d const &xform, OSVR_Pose3 &pose)
Turn an Eigen::Isometry3d (transform) into an OSVR_Pose3.
Eigen::Map< Eigen::Vector3d > vecMap(OSVR_Vec3 &vec)
Wrap an OSVR_Vec3 in an Eigen object that allows it to interoperate with Eigen as though it were an E...
Eigen::Isometry3d fromPose(OSVR_Pose3 const &pose)
Turn an OSVR_Pose3 into an Eigen::Transform.
void osvrQuatSetY(OSVR_Quaternion *q, double val)
Setter for quaternion component Y.
double data[3]
Internal array data.
PoseMap const & operator=(BasePoseMap< T > const &other) const
Assignment operator from another PoseMap (const or not)
double osvrQuatGetX(OSVR_Quaternion const *q)
Accessor for quaternion component X.
Eigen::Map< Eigen::Vector3d > translation() const
Eigen::Quaterniond quat() const
void osvrQuatSetW(OSVR_Quaternion *q, double val)
Setter for quaternion component W.
QuatMap const & operator=(BaseQuatMap< T > const &other) const
Assignment from another QuatMap (whether const or not)
TransformType transform() const
Read-only accessor for the pose as an Eigen transform.
ConstQuatMap rotation() const
double z() const
Read-only accessor for the z component of the quaternion.
double x() const
Read-only accessor for the x component of the quaternion.
Eigen::Map< const Eigen::Vector3d > translation() const
void osvrQuatSetX(OSVR_Quaternion *q, double val)
Setter for quaternion component X.
Eigen::Quaterniond fromQuat(OSVR_Quaternion const &q)
Convert an OSVR_Quaternion to an Eigen::Quaterniond.
A structure defining a 3D (6DOF) rigid body pose: translation and rotation.
double osvrQuatGetW(OSVR_Quaternion const *q)
Accessor for quaternion component W.
MatrixType matrix() const
Read-only accessor for the pose as an Eigen Matrix.
void toQuat(Eigen::Quaterniond const &src, OSVR_Quaternion &q)
Convert an Eigen::Quaterniond to a OSVR_Quaternion.
double osvrQuatGetZ(OSVR_Quaternion const *q)
Accessor for quaternion component Z.
OSVR_Vec3 translation
Position vector.
double y() const
Read-only accessor for the y component of the quaternion.
QuatCoefficientMap<'Y'> y() const
Read-write accessor for the y component of the quaternion.