diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp index 99f95201e220830607148af08c1a9cce6ded71d2..ff3c4df2e224718958dcf119f71015f97923ef4d 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp @@ -5,26 +5,30 @@ namespace armarx::aron { - std::string DataDisplayVisitor::getValue(const data::VariantPtr& n) + std::string + DataDisplayVisitor::getValue(const data::VariantPtr& n) { DataDisplayVisitor v; data::visit(v, n); return v.value.str(); } - void DataDisplayVisitor::visitDict(const data::VariantPtr& n) + void + DataDisplayVisitor::visitDict(const data::VariantPtr& n) { auto x = data::Dict::DynamicCastAndCheck(n); value << x->childrenSize() << " items"; } - void DataDisplayVisitor::visitList(const data::VariantPtr& n) + void + DataDisplayVisitor::visitList(const data::VariantPtr& n) { auto x = data::List::DynamicCastAndCheck(n); value << x->childrenSize() << " items"; } - void DataDisplayVisitor::visitBool(const data::VariantPtr& b) + void + DataDisplayVisitor::visitBool(const data::VariantPtr& b) { auto x = data::Bool::DynamicCastAndCheck(b); if (x->getValue()) @@ -37,41 +41,83 @@ namespace armarx::aron } } - void DataDisplayVisitor::visitDouble(const data::VariantPtr& n) + void + DataDisplayVisitor::visitDouble(const data::VariantPtr& n) { auto x = data::Double::DynamicCastAndCheck(n); value << x->getValue(); } - void DataDisplayVisitor::visitFloat(const data::VariantPtr& n) + void + DataDisplayVisitor::visitFloat(const data::VariantPtr& n) { auto x = data::Float::DynamicCastAndCheck(n); value << x->getValue(); } - void DataDisplayVisitor::visitInt(const data::VariantPtr& n) + void + DataDisplayVisitor::visitInt(const data::VariantPtr& n) { auto x = data::Int::DynamicCastAndCheck(n); value << x->getValue(); } - void DataDisplayVisitor::visitLong(const data::VariantPtr& n) + void + DataDisplayVisitor::visitLong(const data::VariantPtr& n) { auto x = data::Long::DynamicCastAndCheck(n); value << x->getValue(); } - void DataDisplayVisitor::visitString(const data::VariantPtr& n) + void + DataDisplayVisitor::visitString(const data::VariantPtr& n) { auto x = data::String::DynamicCastAndCheck(n); value << "'" << x->getValue() << "'"; } - void DataDisplayVisitor::visitNDArray(const data::VariantPtr& n) + void + DataDisplayVisitor::visitNDArray(const data::VariantPtr& data) { - auto x = data::NDArray::DynamicCastAndCheck(n); - value << "shape " << aron::data::NDArray::DimensionsToString(x->getShape()) << ", type '" << x->getType() << "'"; + auto d = data::NDArray::DynamicCastAndCheck(data); + + auto base = [this, &d]() + { + value << "shape " << aron::data::NDArray::DimensionsToString(d->getShape()) + << ", type '" << d->getType() << "'"; + }; + + if (std::max(d->getShape().at(0), d->getShape().at(1)) > 10) + { + // Just show the shape. + base(); + } + else if (d->getType() == "float") + { + setStreamPrecision(); + processMatrix<float>(*d); + } + else if (d->getType() == "double") + { + setStreamPrecision(); + processMatrix<double>(*d); + } + else + { + base(); + } + } + + template <typename ScalarT> + void + DataDisplayVisitor::processMatrix(const data::NDArray& data) + { + Eigen::Map<Eigen::Matrix<ScalarT, Eigen::Dynamic, Eigen::Dynamic>> m( + reinterpret_cast<ScalarT*>(data.getData()), + data.getShape().at(0), + data.getShape().at(1)); + value << m.format(eigenIof); } -} +} // namespace armarx::aron diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h index d6341001207674f171f5172039987a0afaec2366..8f15373c0d90e24f042ffd15ce16fbbcf0b96a48 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h @@ -27,6 +27,10 @@ namespace armarx::aron void visitString(const data::VariantPtr& n) override; void visitNDArray(const data::VariantPtr& n) override; + + private: + template <typename ScalarT> + void processMatrix(const data::NDArray& data); }; } // namespace armarx::aron diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp index 72ee86e05c866cc37c5e6d5f1b9f40d647e10358..768a69b885efa7ae7aa36d8534cb52ece737dd00 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp @@ -4,6 +4,11 @@ namespace armarx::aron { + StringStreamMixin::StringStreamMixin() : + coeffSep(" "), eigenIof(Eigen::StreamPrecision, 0, coeffSep, "\n", "", "", "", "") + { + } + void StringStreamMixin::setStreamPrecision() { diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h index 1b3316af4c9d40f89c7e7a34ec91f1552ee26432..01dfb9d91bef2208400c7a25cad3c5cfa29b8df5 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h @@ -2,17 +2,26 @@ #include <sstream> +#include <Eigen/Core> + namespace armarx::aron { class StringStreamMixin { public: - std::stringstream value; + StringStreamMixin(); protected: void setStreamPrecision(); void setStreamPrecision(std::ostream& os); + + public: + std::stringstream value; + + protected: + const std::string coeffSep; + const Eigen::IOFormat eigenIof; }; } // namespace armarx::aron diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp index b51cf38df43a8c2d4695cf67a102d70c53e7fba1..e9bb7bc4441bb2246ca2d360dc747a3398b4fdfd 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp @@ -24,8 +24,7 @@ namespace armarx::aron return v.value.str(); } - TypedDataDisplayVisitor::TypedDataDisplayVisitor() : - coeffSep(" "), eigenIof(Eigen::StreamPrecision, 0, coeffSep, "\n", "", "", "", "") + TypedDataDisplayVisitor::TypedDataDisplayVisitor() { } @@ -160,28 +159,7 @@ namespace armarx::aron void TypedDataDisplayVisitor::visitMatrix(const data::VariantPtr& data, const type::VariantPtr& type) { - auto t = *type::Matrix::DynamicCastAndCheck(type); - auto d = *data::NDArray::DynamicCastAndCheck(data); - - if (std::max(d.getShape().at(0), d.getShape().at(1)) > 10) - { - // Just show the shape. - value << DataDisplayVisitor::getValue(data); - } - else if (d.getType() == "float") - { - setStreamPrecision(); - processMatrix<float>(t, d); - } - else if (d.getType() == "double") - { - setStreamPrecision(); - processMatrix<double>(t, d); - } - else - { - value << DataDisplayVisitor::getValue(data); - } + value << DataDisplayVisitor::getValue(data); } void diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h index 6700f95693c4ec281e1e6bc168fa9eb66eec27d6..cdbcf69129ff9a3224c3f14d8f87a168d54238c4 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h @@ -45,11 +45,6 @@ namespace armarx::aron // What about NDArray? currently defaulted - protected: - std::string coeffSep; - Eigen::IOFormat eigenIof; - - private: template <typename ScalarT> void processMatrix(const type::Matrix&, const data::NDArray& data);