From 0b67faa3b9548e4bea9a03b3ce4c73e2a6afa697 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Wed, 8 Feb 2023 15:25:14 +0100
Subject: [PATCH] reading variable size eigen matrices

---
 .../codewriter/cpp/generator/ndarray/Matrix.cpp          | 9 ++++++++-
 .../codewriter/cpp/generator/ndarray/Matrix.h            | 3 +++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp
index 2fbfad0e8..9b84c8204 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp
@@ -44,7 +44,7 @@ namespace armarx::aron::codegenerator::cpp::generator
             "Eigen::Matrix<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">",
             "Eigen::Matrix<" + std::get<0>(ElementType2Cpp.at(n.getElementType())) + ", " + (n.getRows() == -1 ? "Eigen::Dynamic" : std::to_string(n.getRows())) + ", " + (n.getCols() == -1 ? "Eigen::Dynamic" : std::to_string(n.getCols())) + ">",
             simox::meta::get_type_name<data::dto::NDArray>(),
-            simox::meta::get_type_name<type::dto::Matrix>(), n)
+            simox::meta::get_type_name<type::dto::Matrix>(), n), matrixType(n)
     {
     }
 
@@ -102,6 +102,13 @@ namespace armarx::aron::codegenerator::cpp::generator
         block_if_data->addLine("std::vector<int> " + dims + ";");
         block_if_data->addLine("std::vector<unsigned char> " + data + ";");
         block_if_data->addLine("" + ARON_READER_ACCESSOR + ".readNDArray("+variantAccessor+", "+dims+", "+type+", "+data+"); // of " + cppAccessor);
+        
+        if(matrixType.getRows() == Eigen::Dynamic or matrixType.getCols() == Eigen::Dynamic)
+        {
+            // TODO  assert(aron_variant_kpImpedance_shape.size() == 2);
+            block_if_data->addLine(cppAccessor + nextEl() + "resize(" + dims + ".at(0), " + dims + ".at(1));");
+        }
+
         block_if_data->addLine("std::memcpy(reinterpret_cast<unsigned char*>(" + cppAccessor + nextEl() + "data()), "+data+".data(), "+data+".size());");
         return resolveMaybeReadBlock(block_if_data, cppAccessor, variantAccessor);
     }
diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h
index 9f56f2b98..8c8c24606 100644
--- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h
+++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h
@@ -47,5 +47,8 @@ namespace armarx::aron::codegenerator::cpp::generator
         CppBlockPtr getWriteBlock(const std::string& cppAccessor, const Path&, std::string& variantAccessor) const final;
         CppBlockPtr getReadBlock(const std::string& cppAccessor, const std::string& variantAccessor) const final;
         CppBlockPtr getEqualsBlock(const std::string&, const std::string&) const final;
+
+    private:
+        const type::Matrix matrixType;
     };
 }
-- 
GitLab