Magnum/EigenIntegration/DynamicMatrixIntegration.h file new in Git master

Conversion of Eigen dynamically sized matrix types.

In addition to converting betweem fixed-size types provided by Magnum/EigenIntegration/Integration.h, which always involves a copy, it's possible to make Containers::StridedArrayView instances point to Eigen types and, conversely, an Eigen::Map from any Containers::StridedArrayView1D or StridedArrayView2D using EigenIntegration::arrayCast():

#include <Magnum/EigenIntegration/DynamicMatrixIntegration.h>



Float data[15];
Containers::StridedArrayView2D<Float> view{data, {3, 5}};

/* To avoid a copy make sure to either use `auto` or specify the correct type.
   In this case the correct type would be `Eigen::Map<Eigen::MatrixXf,
   Eigen::Unaligned, Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>>`. */
auto map = EigenIntegration::arrayCast(view);

/* To actually copy the data, specify an Eigen Matrix as the type */
Eigen::MatrixXf m = EigenIntegration::arrayCast(view);

/* Get back a StridedArrayView onto the second row */
Containers::StridedArrayView1D<Float> rowView =
    EigenIntegration::arrayCast(m.row(2));

Namespaces

namespace Magnum
Root namespace.
namespace Magnum::EigenIntegration new in 2019.10
Integration with Eigen.

Functions

template<class T>
auto arrayCast(const Containers::StridedArrayView2D<T>& from) -> Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>, Eigen::Unaligned, Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>> new in Git master
Convert a Containers::StridedArrayView2D to Eigen's dynamic matrix type.
template<class T>
auto arrayCast(const Containers::StridedArrayView1D<T>& from) -> Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, 1>, Eigen::Unaligned, Eigen::InnerStride<>> new in Git master
Convert a Containers::StridedArrayView1D to Eigen's dynamic vector type.
template<class Derived>
auto arrayCast(const Eigen::DenseCoeffsBase<Derived, Eigen::DirectWriteAccessors>& from) -> std::enable_if<..., Containers::StridedArrayView1D<typename Derived::Scalar>>::type new in Git master
Convert an Eigen expression to Containers::StridedArrayView1D.
template<class Derived>
auto arrayCast(const Eigen::DenseCoeffsBase<Derived, Eigen::DirectWriteAccessors>& from) -> std::enable_if<..., Containers::StridedArrayView2D<typename Derived::Scalar>>::type new in Git master
Convert an Eigen expression to Containers::StridedArrayView2D.
template<class Derived, int Direction>
auto arrayCast(const Eigen::Reverse<Derived, Direction>& from) -> std::enable_if<..., Containers::StridedArrayView1D<typename Derived::Scalar>>::type new in Git master
Convert an Eigen reverse expression to Containers::StridedArrayView1D.
template<class Derived, int Direction>
auto arrayCast(const Eigen::Reverse<Derived, Direction>& from) -> std::enable_if<..., Containers::StridedArrayView2D<typename Derived::Scalar>>::type new in Git master
Convert an Eigen reverse expression to Containers::StridedArrayView2D.