Skip to content
Snippets Groups Projects
Unverified Commit e0c48bf7 authored by Justin Carpentier's avatar Justin Carpentier Committed by GitHub
Browse files

Merge pull request #37 from jcarpent/devel

Register Eigen::MatrixBase
parents aaa031dc ce9e361c
No related branches found
No related tags found
No related merge requests found
...@@ -183,13 +183,6 @@ namespace eigenpy ...@@ -183,13 +183,6 @@ namespace eigenpy
template<typename MatType> template<typename MatType>
struct EigenFromPy struct EigenFromPy
{ {
EigenFromPy()
{
bp::converter::registry::push_back
(reinterpret_cast<void *(*)(_object *)>(&convertible),
&construct,bp::type_id<MatType>());
}
// Determine if obj_ptr can be converted in a Eigenvec // Determine if obj_ptr can be converted in a Eigenvec
static void* convertible(PyArrayObject* obj_ptr) static void* convertible(PyArrayObject* obj_ptr)
{ {
...@@ -330,6 +323,34 @@ namespace eigenpy ...@@ -330,6 +323,34 @@ namespace eigenpy
enableEigenPySpecific<MatType>(); enableEigenPySpecific<MatType>();
} }
template<typename MatType>
struct EigenFromPyConverter
{
static void registration()
{
bp::converter::registry::push_back
(reinterpret_cast<void *(*)(_object *)>(&EigenFromPy<MatType>::convertible),
&EigenFromPy<MatType>::construct,bp::type_id<MatType>());
// Add also conversion to Eigen::MatrixBase<MatType>
bp::converter::registry::push_back
(reinterpret_cast<void *(*)(_object *)>(&EigenFromPy<MatType>::convertible),
&EigenFromPy<MatType>::construct,bp::type_id< Eigen::MatrixBase<MatType> >());
}
};
template<typename MatType>
struct EigenFromPyConverter< eigenpy::Ref<MatType> >
{
static void registration()
{
bp::converter::registry::push_back
(reinterpret_cast<void *(*)(_object *)>(&EigenFromPy<MatType>::convertible),
&EigenFromPy<MatType>::construct,bp::type_id<MatType>());
}
};
template<typename MatType> template<typename MatType>
void enableEigenPySpecific() void enableEigenPySpecific()
{ {
...@@ -337,7 +358,8 @@ namespace eigenpy ...@@ -337,7 +358,8 @@ namespace eigenpy
if(check_registration<MatType>()) return; if(check_registration<MatType>()) return;
bp::to_python_converter<MatType,EigenToPy<MatType> >(); bp::to_python_converter<MatType,EigenToPy<MatType> >();
EigenFromPy<MatType>(); EigenFromPyConverter<MatType>::registration();
} }
} // namespace eigenpy } // namespace eigenpy
......
...@@ -72,8 +72,15 @@ Eigen::MatrixXd reflex(const MatType & M, bool verbose) ...@@ -72,8 +72,15 @@ Eigen::MatrixXd reflex(const MatType & M, bool verbose)
return Eigen::MatrixXd(M); return Eigen::MatrixXd(M);
} }
template<typename MatrixDerived>
MatrixDerived base(const Eigen::MatrixBase<MatrixDerived> & m)
{
return m.derived();
}
BOOST_PYTHON_MODULE(matrix) BOOST_PYTHON_MODULE(matrix)
{ {
using namespace Eigen;
namespace bp = boost::python; namespace bp = boost::python;
eigenpy::enableEigenPy(); eigenpy::enableEigenPy();
...@@ -92,4 +99,7 @@ BOOST_PYTHON_MODULE(matrix) ...@@ -92,4 +99,7 @@ BOOST_PYTHON_MODULE(matrix)
bp::def("emptyVector", emptyVector); bp::def("emptyVector", emptyVector);
bp::def("emptyMatrix", emptyMatrix); bp::def("emptyMatrix", emptyMatrix);
bp::def("base", base<VectorXd>);
bp::def("base", base<MatrixXd>);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment