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 6ace1783e7b6cedbd7dc8312bb3c38265450c216..0cacba084a6a5fadd29fab1e67b736a64dc9ca15 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 @@ -69,15 +69,11 @@ namespace armarx::aron::codegenerator::cpp::generator std::pair<std::vector<std::pair<std::string, std::string>>, bool> Matrix::getCtorInitializers(const std::string& name) const { - if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT) - { - return {{}, false}; - } if (type.getDefaultValue() == aron::type::matrix::default_value::IDENTITY) { return {{{name, getInstantiatedCppTypename() + "::Identity()"}}, true}; } - if (type.getDefaultValue() == aron::type::matrix::default_value::ZEROS) + if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT || type.getDefaultValue() == aron::type::matrix::default_value::ZEROS) { return {{{name, getInstantiatedCppTypename() + "::Zero()"}}, true}; } @@ -93,6 +89,31 @@ namespace armarx::aron::codegenerator::cpp::generator } } + CppBlockPtr + Matrix::getResetHardBlock(const std::string& cppAccessor) const + { + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); + + if (type.getDefaultValue() == aron::type::matrix::default_value::IDENTITY) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Identity();"); + } + if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT || type.getDefaultValue() == aron::type::matrix::default_value::ZEROS) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Zero();"); + } + if (type.getDefaultValue() == aron::type::matrix::default_value::ONES) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::One();"); + } + else + { + // try to parse num. We ensure from typereader that defaultValue is valid number + block_if_data->addLine(cppAccessor + " = " + "::One() * " + type.getDefaultValue() + ";"); + } + return resolveMaybeResetHardBlock(block_if_data, cppAccessor); + } + CppBlockPtr Matrix::getResetSoftBlock(const std::string& cppAccessor) const { 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 452ac7b53e5e9d996bc8cbc7ffa41555d7275e65..69790642abf5681ec78b9aa25a6fc3eac9163a0d 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 @@ -42,6 +42,7 @@ namespace armarx::aron::codegenerator::cpp::generator std::vector<std::string> getRequiredIncludes() const final; std::pair<std::vector<std::pair<std::string, std::string>>, bool> getCtorInitializers(const std::string&) const final; + CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final; CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor,