5 #ifndef __eigenpy_angle_axis_hpp__ 6 #define __eigenpy_angle_axis_hpp__ 12 template <
typename AngleAxis>
15 template <
typename Scalar>
22 const AngleAxis&
self,
const AngleAxis& other,
23 const Scalar& prec = Eigen::NumTraits<Scalar>::dummy_precision()) {
24 return self.isApprox(other, prec);
28 template <
typename AngleAxis>
29 class AngleAxisVisitor :
public bp::def_visitor<AngleAxisVisitor<AngleAxis> > {
30 typedef typename AngleAxis::Scalar
Scalar;
31 typedef typename AngleAxis::Vector3
Vector3;
32 typedef typename AngleAxis::Matrix3
Matrix3;
34 typedef typename Eigen::Quaternion<Scalar, 0>
Quaternion;
41 template <class PyClass>
42 void visit(PyClass& cl)
const {
43 cl.def(bp::init<>(bp::arg(
"self"),
"Default constructor"))
44 .def(bp::init<Scalar, Vector3>(bp::args(
"self",
"angle",
"axis"),
45 "Initialize from angle and axis."))
46 .def(bp::init<Matrix3>(bp::args(
"self",
"R"),
47 "Initialize from a rotation matrix"))
48 .def(bp::init<Quaternion>(bp::args(
"self",
"quaternion"),
49 "Initialize from a quaternion."))
50 .def(bp::init<AngleAxis>(bp::args(
"self",
"copy"),
"Copy constructor."))
56 bp::return_internal_reference<>()),
57 &AngleAxisVisitor::setAxis,
"The rotation axis.")
58 .add_property(
"angle",
59 (Scalar(AngleAxis::*)()
const) & AngleAxis::angle,
63 .def(
"inverse", &AngleAxis::inverse, bp::arg(
"self"),
64 "Return the inverse rotation.")
65 .def(
"fromRotationMatrix",
66 &AngleAxis::template fromRotationMatrix<Matrix3>,
67 (bp::arg(
"self"), bp::arg(
"rotation matrix")),
68 "Sets *this from a 3x3 rotation matrix", bp::return_self<>())
69 .def(
"toRotationMatrix", &AngleAxis::toRotationMatrix,
71 "Constructs and returns an equivalent rotation matrix.")
72 .def(
"matrix", &AngleAxis::matrix, bp::arg(
"self"),
73 "Returns an equivalent rotation matrix.")
76 isApproxAngleAxis_overload(
77 bp::args(
"self",
"other",
"prec"),
78 "Returns true if *this is approximately equal to other, " 79 "within the precision determined by prec."))
82 .def(bp::self * bp::other<Vector3>())
83 .def(bp::self * bp::other<Quaternion>())
84 .def(bp::self * bp::self)
88 .def(
"__str__", &
print)
89 .def(
"__repr__", &
print);
93 static void setAxis(AngleAxis&
self,
const Vector3&
axis) {
97 static void setAngle(AngleAxis&
self,
const Scalar& angle) {
101 static bool __eq__(
const AngleAxis& u,
const AngleAxis&
v) {
102 return u.axis() == v.axis() && v.angle() == u.angle();
105 static bool __ne__(
const AngleAxis& u,
const AngleAxis&
v) {
106 return !__eq__(u, v);
109 static std::string
print(
const AngleAxis&
self) {
110 std::stringstream ss;
111 ss <<
"angle: " <<
self.angle() << std::endl;
112 ss <<
"axis: " <<
self.axis().transpose() << std::endl;
119 bp::class_<AngleAxis>(
120 "AngleAxis",
"AngleAxis representation of a rotation.\n\n", bp::no_init)
124 bp::implicitly_convertible<AngleAxis, RotationBase>();
130 #endif // ifndef __eigenpy_angle_axis_hpp__
static void setAngle(AngleAxis &self, const Scalar &angle)
Eigen::AngleAxis< Scalar > AngleAxis
static std::string print(const AngleAxis &self)
Allows a template specialization.
static bool isApprox(const AngleAxis &self, const AngleAxis &other, const Scalar &prec=Eigen::NumTraits< Scalar >::dummy_precision())
static bool __ne__(const AngleAxis &u, const AngleAxis &v)
BOOST_PYTHON_FUNCTION_OVERLOADS(isApproxAngleAxis_overload, call< AngleAxis >::isApprox, 2, 3) public
Eigen::Quaternion< Scalar, 0 > Quaternion
static bool __eq__(const AngleAxis &u, const AngleAxis &v)
AngleAxis::Matrix3 Matrix3
AngleAxis::Vector3 Vector3
void print(const Tensor &tensor)
Eigen::RotationBase< AngleAxis, 3 > RotationBase