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
instance/serialize_path.cpp
instance/display_visitors/DataDisplayVisitor.cpp
instance/display_visitors/StringStreamMixin.cpp
instance/display_visitors/TypedDataDisplayVisitor.cpp
instance/tree_builders/DataTreeBuilder.cpp
......@@ -87,6 +88,7 @@ set(HEADERS
instance/serialize_path.h
instance/display_visitors/DataDisplayVisitor.h
instance/display_visitors/StringStreamMixin.h
instance/display_visitors/TypedDataDisplayVisitor.h
instance/tree_builders/DataTreeBuilder.h
......
......@@ -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,101 @@ 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);
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 @@
#include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h>
#include "StringStreamMixin.h"
namespace armarx::aron
{
class DataDisplayVisitor : public aron::data::ConstVariantVisitor
class DataDisplayVisitor : public aron::data::ConstVariantVisitor, public StringStreamMixin
{
public:
static std::string getValue(const data::VariantPtr& n);
public:
std::stringstream value;
void visitDict(const data::VariantPtr& n) override;
void visitList(const data::VariantPtr& n) override;
......@@ -30,6 +28,11 @@ namespace armarx::aron
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
return v.value.str();
}
TypedDataDisplayVisitor::TypedDataDisplayVisitor() :
coeffSep(" "), eigenIof(Eigen::StreamPrecision, 0, coeffSep, "\n", "", "", "", "")
TypedDataDisplayVisitor::TypedDataDisplayVisitor()
{
}
......@@ -104,7 +103,9 @@ namespace armarx::aron
TypedDataDisplayVisitor::processMatrix(const type::Matrix& type, const data::NDArray& data)
{
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);
}
......@@ -158,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(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);
}
value << DataDisplayVisitor::getValue(data);
}
void
......@@ -204,16 +184,4 @@ namespace armarx::aron
value << DataDisplayVisitor::getValue(data);
}
void
TypedDataDisplayVisitor::setStreamPrecision()
{
setStreamPrecision(value);
}
void
TypedDataDisplayVisitor::setStreamPrecision(std::ostream& os)
{
os << std::setprecision(2) << std::fixed;
}
} // namespace armarx::aron
......@@ -7,25 +7,22 @@
#include <RobotAPI/libraries/aron/core/data/visitor/variant/VariantVisitor.h>
#include "StringStreamMixin.h"
namespace armarx::aron
{
class TypedDataDisplayVisitor : public aron::data::ConstTypedVariantVisitor
class TypedDataDisplayVisitor :
public aron::data::ConstTypedVariantVisitor,
public StringStreamMixin
{
public:
static std::string getValue(const type::VariantPtr& type, const data::VariantPtr& data);
public:
TypedDataDisplayVisitor();
std::stringstream value;
void visitDict(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
// 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);
void processQuaternion(const data::NDArray& data);
......@@ -63,10 +53,6 @@ namespace armarx::aron
void processPose(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 setStreamPrecision();
void setStreamPrecision(std::ostream& os);
};
}
} // namespace armarx::aron