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
template<typename MatType>
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
static void* convertible(PyArrayObject* obj_ptr)
{
......@@ -330,6 +323,34 @@ namespace eigenpy
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>
void enableEigenPySpecific()
{
......@@ -337,7 +358,8 @@ namespace eigenpy
if(check_registration<MatType>()) return;
bp::to_python_converter<MatType,EigenToPy<MatType> >();
EigenFromPy<MatType>();
EigenFromPyConverter<MatType>::registration();
}
} // namespace eigenpy
......
......@@ -72,8 +72,15 @@ Eigen::MatrixXd reflex(const MatType & M, bool verbose)
return Eigen::MatrixXd(M);
}
template<typename MatrixDerived>
MatrixDerived base(const Eigen::MatrixBase<MatrixDerived> & m)
{
return m.derived();
}
BOOST_PYTHON_MODULE(matrix)
{
using namespace Eigen;
namespace bp = boost::python;
eigenpy::enableEigenPy();
......@@ -92,4 +99,7 @@ BOOST_PYTHON_MODULE(matrix)
bp::def("emptyVector", emptyVector);
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.
Finish editing this message first!
Please register or to comment