16struct call<Eigen::AngleAxis<Scalar>> {
17 typedef Eigen::AngleAxis<Scalar> AngleAxis;
19 static inline void expose() { AngleAxisVisitor<AngleAxis>::expose(); }
21 static inline bool isApprox(
22 const AngleAxis& self,
const AngleAxis& other,
23 const Scalar& prec = Eigen::NumTraits<Scalar>::dummy_precision()) {
24 return self.isApprox(other, prec);
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;
35 typedef Eigen::RotationBase<AngleAxis, 3> RotationBase;
37 BOOST_PYTHON_FUNCTION_OVERLOADS(isApproxAngleAxis_overload,
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."))
55 bp::make_function((Vector3 & (AngleAxis::*)()) & AngleAxis::axis,
56 bp::return_internal_reference<>()),
57 &AngleAxisVisitor::setAxis,
"The rotation axis.")
58 .add_property(
"angle",
59 (Scalar (AngleAxis::*)()
const) & AngleAxis::angle,
60 &AngleAxisVisitor::setAngle,
"The rotation 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)
85 .def(
"__eq__", &AngleAxisVisitor::__eq__)
86 .def(
"__ne__", &AngleAxisVisitor::__ne__)
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)
125 bp::implicitly_convertible<AngleAxis, RotationBase>();