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 ff3c4df2e224718958dcf119f71015f97923ef4d..a814c111cf8d24b728e0406ff89d9f428ab6ed99 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp @@ -81,18 +81,7 @@ namespace armarx::aron { 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") + if (d->getType() == "float") { setStreamPrecision(); processMatrix<float>(*d); @@ -104,19 +93,48 @@ namespace armarx::aron } else { - base(); + printShape(*d); } } + void + DataDisplayVisitor::printShape(const data::NDArray& d) + { + value << "shape " << aron::data::NDArray::DimensionsToString(d.getShape()) << ", type '" + << d.getType() << "'"; + } + 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); + const int rows = data.getShape().at(0); + const int cols = data.getShape().at(1); + + const Eigen::Map<Eigen::Matrix<ScalarT, Eigen::Dynamic, Eigen::Dynamic>> m( + reinterpret_cast<ScalarT*>(data.getData()), rows, cols); + + const int maxRows = 10; + const int maxCols = 10; + + if (cols > maxCols) + { + printShape(data); + } + else if (rows > maxRows) + { + int shownRows = 2; + + value << "("; + printShape(data); + value << ")\n" + << m.block(0, 0, shownRows, cols) << "\n...\n" + << m.block(rows - shownRows, 0, shownRows, cols); + } + else + { + value << m.format(eigenIof); + } } 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 8f15373c0d90e24f042ffd15ce16fbbcf0b96a48..26d8aae07a87dbc82bb3b44e9e8154f3cfc8315f 100644 --- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h +++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h @@ -31,6 +31,8 @@ namespace armarx::aron private: template <typename ScalarT> void processMatrix(const data::NDArray& data); + + void printShape(const data::NDArray& data); }; } // namespace armarx::aron