5 #ifndef __eigenpy_angle_axis_hpp__
6 #define __eigenpy_angle_axis_hpp__
12 template <
typename AngleAxis>
15 template <
typename Scalar>
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", (
Scalar(AngleAxis::*)()
const)&AngleAxis::angle,
62 .def(
"inverse", &AngleAxis::inverse, bp::arg(
"self"),
63 "Return the inverse rotation.")
64 .def(
"fromRotationMatrix",
65 &AngleAxis::template fromRotationMatrix<Matrix3>,
66 (bp::arg(
"self"), bp::arg(
"rotation matrix")),
67 "Sets *this from a 3x3 rotation matrix", bp::return_self<>())
68 .def(
"toRotationMatrix", &AngleAxis::toRotationMatrix,
70 "Constructs and returns an equivalent rotation matrix.")
71 .def(
"matrix", &AngleAxis::matrix, bp::arg(
"self"),
72 "Returns an equivalent rotation matrix.")
75 isApproxAngleAxis_overload(
76 bp::args(
"self",
"other",
"prec"),
77 "Returns true if *this is approximately equal to other, "
78 "within the precision determined by prec."))
81 .def(bp::self * bp::other<Vector3>())
82 .def(bp::self * bp::other<Quaternion>())
83 .def(bp::self * bp::self)
87 .def(
"__str__", &
print)
88 .def(
"__repr__", &
print);
92 static void setAxis(AngleAxis&
self,
const Vector3&
axis) {
100 static bool __eq__(
const AngleAxis& u,
const AngleAxis&
v) {
101 return u.axis() ==
v.axis() &&
v.angle() == u.angle();
104 static bool __ne__(
const AngleAxis& u,
const AngleAxis&
v) {
108 static std::string
print(
const AngleAxis&
self) {
109 std::stringstream ss;
110 ss <<
"angle: " <<
self.angle() << std::endl;
111 ss <<
"axis: " <<
self.axis().transpose() << std::endl;
118 bp::class_<AngleAxis>(
119 "AngleAxis",
"AngleAxis representation of a rotation.\n\n", bp::no_init)
124 bp::implicitly_convertible<AngleAxis, RotationBase>();
130 #endif // ifndef __eigenpy_angle_axis_hpp__