Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • sw/armarx/robot-api
  • uwkce_singer/robot-api
  • untcg_hofmann/robot-api
  • ulqba_korosakov/RobotAPI
4 results
Show changes
Commits on Source (5)
...@@ -38,6 +38,7 @@ set(SOURCES ...@@ -38,6 +38,7 @@ set(SOURCES
instance/serialize_path.cpp instance/serialize_path.cpp
instance/display_visitors/DataDisplayVisitor.cpp instance/display_visitors/DataDisplayVisitor.cpp
instance/display_visitors/StringStreamMixin.cpp
instance/display_visitors/TypedDataDisplayVisitor.cpp instance/display_visitors/TypedDataDisplayVisitor.cpp
instance/tree_builders/DataTreeBuilder.cpp instance/tree_builders/DataTreeBuilder.cpp
...@@ -87,6 +88,7 @@ set(HEADERS ...@@ -87,6 +88,7 @@ set(HEADERS
instance/serialize_path.h instance/serialize_path.h
instance/display_visitors/DataDisplayVisitor.h instance/display_visitors/DataDisplayVisitor.h
instance/display_visitors/StringStreamMixin.h
instance/display_visitors/TypedDataDisplayVisitor.h instance/display_visitors/TypedDataDisplayVisitor.h
instance/tree_builders/DataTreeBuilder.h instance/tree_builders/DataTreeBuilder.h
......
...@@ -5,26 +5,30 @@ ...@@ -5,26 +5,30 @@
namespace armarx::aron namespace armarx::aron
{ {
std::string DataDisplayVisitor::getValue(const data::VariantPtr& n) std::string
DataDisplayVisitor::getValue(const data::VariantPtr& n)
{ {
DataDisplayVisitor v; DataDisplayVisitor v;
data::visit(v, n); data::visit(v, n);
return v.value.str(); return v.value.str();
} }
void DataDisplayVisitor::visitDict(const data::VariantPtr& n) void
DataDisplayVisitor::visitDict(const data::VariantPtr& n)
{ {
auto x = data::Dict::DynamicCastAndCheck(n); auto x = data::Dict::DynamicCastAndCheck(n);
value << x->childrenSize() << " items"; value << x->childrenSize() << " items";
} }
void DataDisplayVisitor::visitList(const data::VariantPtr& n) void
DataDisplayVisitor::visitList(const data::VariantPtr& n)
{ {
auto x = data::List::DynamicCastAndCheck(n); auto x = data::List::DynamicCastAndCheck(n);
value << x->childrenSize() << " items"; value << x->childrenSize() << " items";
} }
void DataDisplayVisitor::visitBool(const data::VariantPtr& b) void
DataDisplayVisitor::visitBool(const data::VariantPtr& b)
{ {
auto x = data::Bool::DynamicCastAndCheck(b); auto x = data::Bool::DynamicCastAndCheck(b);
if (x->getValue()) if (x->getValue())
...@@ -37,41 +41,101 @@ namespace armarx::aron ...@@ -37,41 +41,101 @@ namespace armarx::aron
} }
} }
void DataDisplayVisitor::visitDouble(const data::VariantPtr& n) void
DataDisplayVisitor::visitDouble(const data::VariantPtr& n)
{ {
auto x = data::Double::DynamicCastAndCheck(n); auto x = data::Double::DynamicCastAndCheck(n);
value << x->getValue(); value << x->getValue();
} }
void DataDisplayVisitor::visitFloat(const data::VariantPtr& n) void
DataDisplayVisitor::visitFloat(const data::VariantPtr& n)
{ {
auto x = data::Float::DynamicCastAndCheck(n); auto x = data::Float::DynamicCastAndCheck(n);
value << x->getValue(); value << x->getValue();
} }
void DataDisplayVisitor::visitInt(const data::VariantPtr& n) void
DataDisplayVisitor::visitInt(const data::VariantPtr& n)
{ {
auto x = data::Int::DynamicCastAndCheck(n); auto x = data::Int::DynamicCastAndCheck(n);
value << x->getValue(); value << x->getValue();
} }
void DataDisplayVisitor::visitLong(const data::VariantPtr& n) void
DataDisplayVisitor::visitLong(const data::VariantPtr& n)
{ {
auto x = data::Long::DynamicCastAndCheck(n); auto x = data::Long::DynamicCastAndCheck(n);
value << x->getValue(); value << x->getValue();
} }
void DataDisplayVisitor::visitString(const data::VariantPtr& n) void
DataDisplayVisitor::visitString(const data::VariantPtr& n)
{ {
auto x = data::String::DynamicCastAndCheck(n); auto x = data::String::DynamicCastAndCheck(n);
value << "'" << x->getValue() << "'"; value << "'" << x->getValue() << "'";
} }
void DataDisplayVisitor::visitNDArray(const data::VariantPtr& n) void
DataDisplayVisitor::visitNDArray(const data::VariantPtr& data)
{ {
auto x = data::NDArray::DynamicCastAndCheck(n); auto d = data::NDArray::DynamicCastAndCheck(data);
value << "shape " << aron::data::NDArray::DimensionsToString(x->getShape()) << ", type '" << x->getType() << "'";
if (d->getType() == "float")
{
setStreamPrecision();
processMatrix<float>(*d);
}
else if (d->getType() == "double")
{
setStreamPrecision();
processMatrix<double>(*d);
}
else
{
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)
{
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);
}
} }
} } // namespace armarx::aron
...@@ -4,20 +4,18 @@ ...@@ -4,20 +4,18 @@
#include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h> #include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h>
#include "StringStreamMixin.h"
namespace armarx::aron namespace armarx::aron
{ {
class DataDisplayVisitor : public aron::data::ConstVariantVisitor class DataDisplayVisitor : public aron::data::ConstVariantVisitor, public StringStreamMixin
{ {
public: public:
static std::string getValue(const data::VariantPtr& n); static std::string getValue(const data::VariantPtr& n);
public: public:
std::stringstream value;
void visitDict(const data::VariantPtr& n) override; void visitDict(const data::VariantPtr& n) override;
void visitList(const data::VariantPtr& n) override; void visitList(const data::VariantPtr& n) override;
...@@ -30,6 +28,11 @@ namespace armarx::aron ...@@ -30,6 +28,11 @@ namespace armarx::aron
void visitNDArray(const data::VariantPtr& n) override; void visitNDArray(const data::VariantPtr& n) override;
private:
template <typename ScalarT>
void processMatrix(const data::NDArray& data);
void printShape(const data::NDArray& data);
}; };
} } // namespace armarx::aron
#include "StringStreamMixin.h"
#include <iomanip> // std::setprecision
namespace armarx::aron
{
StringStreamMixin::StringStreamMixin() :
coeffSep(" "), eigenIof(Eigen::StreamPrecision, 0, coeffSep, "\n", "", "", "", "")
{
}
void
StringStreamMixin::setStreamPrecision()
{
setStreamPrecision(value);
}
void
StringStreamMixin::setStreamPrecision(std::ostream& os)
{
os << std::setprecision(2) << std::fixed;
}
} // namespace armarx::aron
#pragma once
#include <sstream>
#include <Eigen/Core>
namespace armarx::aron
{
class StringStreamMixin
{
public:
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
...@@ -24,8 +24,7 @@ namespace armarx::aron ...@@ -24,8 +24,7 @@ namespace armarx::aron
return v.value.str(); return v.value.str();
} }
TypedDataDisplayVisitor::TypedDataDisplayVisitor() : TypedDataDisplayVisitor::TypedDataDisplayVisitor()
coeffSep(" "), eigenIof(Eigen::StreamPrecision, 0, coeffSep, "\n", "", "", "", "")
{ {
} }
...@@ -104,7 +103,9 @@ namespace armarx::aron ...@@ -104,7 +103,9 @@ namespace armarx::aron
TypedDataDisplayVisitor::processMatrix(const type::Matrix& type, const data::NDArray& data) TypedDataDisplayVisitor::processMatrix(const type::Matrix& type, const data::NDArray& data)
{ {
Eigen::Map<Eigen::Matrix<ScalarT, Eigen::Dynamic, Eigen::Dynamic>> m( Eigen::Map<Eigen::Matrix<ScalarT, Eigen::Dynamic, Eigen::Dynamic>> m(
reinterpret_cast<ScalarT*>(data.getData()), type.getRows(), type.getCols()); reinterpret_cast<ScalarT*>(data.getData()),
data.getShape().at(0),
data.getShape().at(1));
value << m.format(eigenIof); value << m.format(eigenIof);
} }
...@@ -158,28 +159,7 @@ namespace armarx::aron ...@@ -158,28 +159,7 @@ namespace armarx::aron
void void
TypedDataDisplayVisitor::visitMatrix(const data::VariantPtr& data, const type::VariantPtr& type) TypedDataDisplayVisitor::visitMatrix(const data::VariantPtr& data, const type::VariantPtr& type)
{ {
auto t = *type::Matrix::DynamicCastAndCheck(type); value << DataDisplayVisitor::getValue(data);
auto d = *data::NDArray::DynamicCastAndCheck(data);
if (std::max(t.getRows(), t.getCols()) > 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);
}
} }
void void
...@@ -204,16 +184,4 @@ namespace armarx::aron ...@@ -204,16 +184,4 @@ namespace armarx::aron
value << DataDisplayVisitor::getValue(data); value << DataDisplayVisitor::getValue(data);
} }
void
TypedDataDisplayVisitor::setStreamPrecision()
{
setStreamPrecision(value);
}
void
TypedDataDisplayVisitor::setStreamPrecision(std::ostream& os)
{
os << std::setprecision(2) << std::fixed;
}
} // namespace armarx::aron } // namespace armarx::aron
...@@ -7,25 +7,22 @@ ...@@ -7,25 +7,22 @@
#include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h> #include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h>
#include "StringStreamMixin.h"
namespace armarx::aron namespace armarx::aron
{ {
class TypedDataDisplayVisitor : public aron::data::ConstTypedVariantVisitor class TypedDataDisplayVisitor :
public aron::data::ConstTypedVariantVisitor,
public StringStreamMixin
{ {
public: public:
static std::string getValue(const type::VariantPtr& type, const data::VariantPtr& data); static std::string getValue(const type::VariantPtr& type, const data::VariantPtr& data);
public: public:
TypedDataDisplayVisitor(); TypedDataDisplayVisitor();
std::stringstream value;
void visitDict(const data::VariantPtr& data, const type::VariantPtr& type) override; void visitDict(const data::VariantPtr& data, const type::VariantPtr& type) override;
void visitObject(const data::VariantPtr& data, const type::VariantPtr& type) override; void visitObject(const data::VariantPtr& data, const type::VariantPtr& type) override;
...@@ -48,14 +45,7 @@ namespace armarx::aron ...@@ -48,14 +45,7 @@ namespace armarx::aron
// What about NDArray? currently defaulted // What about NDArray? currently defaulted
protected:
std::string coeffSep;
Eigen::IOFormat eigenIof;
private: private:
template <typename ScalarT> template <typename ScalarT>
void processMatrix(const type::Matrix&, const data::NDArray& data); void processMatrix(const type::Matrix&, const data::NDArray& data);
void processQuaternion(const data::NDArray& data); void processQuaternion(const data::NDArray& data);
...@@ -63,10 +53,6 @@ namespace armarx::aron ...@@ -63,10 +53,6 @@ namespace armarx::aron
void processPose(const type::Matrix&, const data::NDArray& data); void processPose(const type::Matrix&, const data::NDArray& data);
void processPosition(const type::Matrix&, const data::NDArray& data); void processPosition(const type::Matrix&, const data::NDArray& data);
void processOrientation(const type::Quaternion&, const data::NDArray& data); void processOrientation(const type::Quaternion&, const data::NDArray& data);
void setStreamPrecision();
void setStreamPrecision(std::ostream& os);
}; };
} } // namespace armarx::aron