Skip to content

Commit 97d8d5c

Browse files
committed
[Conversion] Register Eigen::MatrixBase
1 parent aaa031d commit 97d8d5c

File tree

1 file changed

+30
-8
lines changed

1 file changed

+30
-8
lines changed

include/eigenpy/details.hpp

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -183,13 +183,6 @@ namespace eigenpy
183183
template<typename MatType>
184184
struct EigenFromPy
185185
{
186-
EigenFromPy()
187-
{
188-
bp::converter::registry::push_back
189-
(reinterpret_cast<void *(*)(_object *)>(&convertible),
190-
&construct,bp::type_id<MatType>());
191-
}
192-
193186
// Determine if obj_ptr can be converted in a Eigenvec
194187
static void* convertible(PyArrayObject* obj_ptr)
195188
{
@@ -330,14 +323,43 @@ namespace eigenpy
330323
enableEigenPySpecific<MatType>();
331324
}
332325

326+
template<typename MatType>
327+
struct EigenFromPyConverter
328+
{
329+
static void registration()
330+
{
331+
bp::converter::registry::push_back
332+
(reinterpret_cast<void *(*)(_object *)>(&EigenFromPy<MatType>::convertible),
333+
&EigenFromPy<MatType>::construct,bp::type_id<MatType>());
334+
335+
// Add also conversion to Eigen::MatrixBase<MatType>
336+
bp::converter::registry::push_back
337+
(reinterpret_cast<void *(*)(_object *)>(&EigenFromPy<MatType>::convertible),
338+
&EigenFromPy<MatType>::construct,bp::type_id< Eigen::MatrixBase<MatType> >());
339+
}
340+
};
341+
342+
template<typename MatType>
343+
struct EigenFromPyConverter< eigenpy::Ref<MatType> >
344+
{
345+
static void registration()
346+
{
347+
bp::converter::registry::push_back
348+
(reinterpret_cast<void *(*)(_object *)>(&EigenFromPy<MatType>::convertible),
349+
&EigenFromPy<MatType>::construct,bp::type_id<MatType>());
350+
}
351+
};
352+
353+
333354
template<typename MatType>
334355
void enableEigenPySpecific()
335356
{
336357
numpy_import_array();
337358
if(check_registration<MatType>()) return;
338359

339360
bp::to_python_converter<MatType,EigenToPy<MatType> >();
340-
EigenFromPy<MatType>();
361+
EigenFromPyConverter<MatType>::registration();
362+
341363
}
342364

343365
} // namespace eigenpy

0 commit comments

Comments
 (0)