From 97d8d5cd82c96b2e4d9e9b990ec9f0e49b0f1038 Mon Sep 17 00:00:00 2001 From: jcarpent <jcarpent@laas.fr> Date: Wed, 18 Jul 2018 19:46:21 +0200 Subject: [PATCH] [Conversion] Register Eigen::MatrixBase --- include/eigenpy/details.hpp | 38 +++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/include/eigenpy/details.hpp b/include/eigenpy/details.hpp index dfaef06f..2d77adef 100644 --- a/include/eigenpy/details.hpp +++ b/include/eigenpy/details.hpp @@ -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 -- GitLab