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