Skip to content

Commit 24e1044

Browse files
authored
Merge pull request #136 from jcarpent/devel
Improve conversion
2 parents b20044c + 4675699 commit 24e1044

File tree

3 files changed

+13
-32
lines changed

3 files changed

+13
-32
lines changed

include/eigenpy/angle-axis.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ namespace eigenpy
2222
struct call< Eigen::AngleAxis<Scalar> >
2323
{
2424
typedef Eigen::AngleAxis<Scalar> AngleAxis;
25+
2526
static inline void expose()
2627
{
2728
AngleAxisVisitor<AngleAxis>::expose();
@@ -46,6 +47,7 @@ namespace eigenpy
4647
typedef typename AngleAxis::Matrix3 Matrix3;
4748

4849
typedef typename Eigen::Quaternion<Scalar,0> Quaternion;
50+
typedef Eigen::RotationBase<AngleAxis,3> RotationBase;
4951

5052
public:
5153

@@ -136,6 +138,9 @@ namespace eigenpy
136138
"AngleAxis representation of a rotation.\n\n",
137139
bp::no_init)
138140
.def(AngleAxisVisitor<AngleAxis>());
141+
142+
// Cast to Eigen::RotationBase and vice-versa
143+
bp::implicitly_convertible<AngleAxis,RotationBase>();
139144
}
140145

141146
};

include/eigenpy/details.hpp

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -515,34 +515,8 @@ namespace eigenpy
515515
}
516516
};
517517

518-
template<typename MatType>
519-
struct EigenFromPy< Eigen::MatrixBase<MatType> >
520-
{
521-
typedef EigenFromPy<MatType> EigenFromPyDerived;
522-
typedef Eigen::MatrixBase<MatType> Base;
523-
524-
/// \brief Determine if pyObj can be converted into a MatType object
525-
static void* convertible(PyArrayObject* pyObj)
526-
{
527-
return EigenFromPyDerived::convertible(pyObj);
528-
}
529-
530-
/// \brief Allocate memory and copy pyObj in the new storage
531-
static void construct(PyObject* pyObj,
532-
bp::converter::rvalue_from_python_stage1_data* memory)
533-
{
534-
EigenFromPyDerived::construct(pyObj,memory);
535-
}
536-
537-
static void registration()
538-
{
539-
bp::converter::registry::push_back
540-
(reinterpret_cast<void *(*)(_object *)>(&EigenFromPy::convertible),
541-
&EigenFromPy::construct,bp::type_id<Base>());
542-
}
543-
};
544-
545518
template<typename MatType,typename EigenEquivalentType>
519+
EIGENPY_DEPRECATED
546520
void enableEigenPySpecific()
547521
{
548522
enableEigenPySpecific<MatType>();
@@ -557,7 +531,8 @@ namespace eigenpy
557531

558532
// Add also conversion to Eigen::MatrixBase<MatType>
559533
typedef Eigen::MatrixBase<MatType> MatTypeBase;
560-
EigenFromPy<MatTypeBase>::registration();
534+
bp::implicitly_convertible<MatType,MatTypeBase>();
535+
bp::implicitly_convertible<MatTypeBase,MatType>();
561536
}
562537
};
563538

@@ -585,7 +560,6 @@ namespace eigenpy
585560

586561
bp::to_python_converter<MatType,EigenToPy<MatType> >();
587562
EigenFromPyConverter<MatType>::registration();
588-
589563
}
590564

591565
} // namespace eigenpy

include/eigenpy/quaternion.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,11 @@ namespace eigenpy
263263
"'q*v' (rotating 'v' by 'q'), "
264264
"'q==q', 'q!=q', 'q[0..3]'.",
265265
bp::no_init)
266-
.def(QuaternionVisitor<Quaternion>())
267-
;
268-
266+
.def(QuaternionVisitor<Quaternion>());
267+
268+
// Cast to Eigen::QuaternionBase and vice-versa
269+
bp::implicitly_convertible<Quaternion,QuaternionBase >();
270+
bp::implicitly_convertible<QuaternionBase,Quaternion >();
269271
}
270272

271273
};

0 commit comments

Comments
 (0)