bool multiArrayMessageMapToMatrixEigen(MultiArrayMessageType_& m, EigenType_& e) { if (e.IsRowMajor != isRowMajor(m)) { ROS_ERROR("multiArrayMessageToMatrixEigen() failed because the storage order is not compatible."); return false; } e.resize(getRows(m), getCols(m)); e = Eigen::Map<EigenType_>(m.data.data(), getRows(m), getCols(m)); return true; }
bool multiArrayMessageCopyToMatrixEigen(const MultiArrayMessageType_& m, EigenType_& e) { if (e.IsRowMajor != isRowMajor(m)) { ROS_ERROR("multiArrayMessageToMatrixEigen() failed because the storage order is not compatible."); return false; } EigenType_ tempE(getRows(m), getCols(m)); tempE = Eigen::Map<const EigenType_>(m.data.data(), getRows(m), getCols(m)); e = tempE; return true; }
bool isColumnMajor(blas::matrix_expression<Mat> const& mat){ return !isRowMajor(mat); }
bool isRowMajor(blas::matrix_expression<Mat> const& mat){ return isRowMajor(mat,typename Mat::orientation_category()); }
unsigned int getRows(const MultiArrayMessageType_& message) { if (isRowMajor(message)) return message.layout.dim.at(0).size; return message.layout.dim.at(1).size; }