From 0b16ade389c964af25ea7b1474930197c9092cb7 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Mon, 19 Apr 2021 15:24:49 +0200 Subject: [PATCH] Add new ARON types to TypedDataVisitor --- .../navigator/visitors/TypedDataVisitor.cpp | 24 +++++- .../navigator/visitors/TypedDataVisitor.h | 84 +++++++++++++++++-- 2 files changed, 99 insertions(+), 9 deletions(-) diff --git a/source/RobotAPI/libraries/aron/core/navigator/visitors/TypedDataVisitor.cpp b/source/RobotAPI/libraries/aron/core/navigator/visitors/TypedDataVisitor.cpp index 263253c88..55a30cff9 100644 --- a/source/RobotAPI/libraries/aron/core/navigator/visitors/TypedDataVisitor.cpp +++ b/source/RobotAPI/libraries/aron/core/navigator/visitors/TypedDataVisitor.cpp @@ -87,8 +87,20 @@ namespace armarx::aron::visitor { return visit(*t, key, dynamic_cast<StringDataNavigator&>(data)); } + else if (auto t = dynamic_cast<TimeTypeNavigator*>(&type)) + { + return visit(*t, key, dynamic_cast<LongDataNavigator&>(data)); + } - if (auto t = dynamic_cast<EigenMatrixTypeNavigator*>(&type)) + if (auto t = dynamic_cast<PCLPointCloudTypeNavigator*>(&type)) + { + return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); + } + else if (auto t = dynamic_cast<EigenMatrixTypeNavigator*>(&type)) + { + return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); + } + else if (auto t = dynamic_cast<EigenQuaternionTypeNavigator*>(&type)) { return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); } @@ -100,7 +112,15 @@ namespace armarx::aron::visitor { return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); } - else if (auto t = dynamic_cast<PCLPointCloudTypeNavigator*>(&type)) + else if (auto t = dynamic_cast<PoseTypeNavigator*>(&type)) + { + return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); + } + else if (auto t = dynamic_cast<PositionTypeNavigator*>(&type)) + { + return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); + } + else if (auto t = dynamic_cast<OrientationTypeNavigator*>(&type)) { return visit(*t, key, dynamic_cast<NDArrayDataNavigator&>(data)); } diff --git a/source/RobotAPI/libraries/aron/core/navigator/visitors/TypedDataVisitor.h b/source/RobotAPI/libraries/aron/core/navigator/visitors/TypedDataVisitor.h index 13800fa67..77c73fe08 100644 --- a/source/RobotAPI/libraries/aron/core/navigator/visitors/TypedDataVisitor.h +++ b/source/RobotAPI/libraries/aron/core/navigator/visitors/TypedDataVisitor.h @@ -29,8 +29,8 @@ namespace armarx::aron::visitor * To the the location of the passed navigator in the original `AronType`, * use `navigator.getPath()`. * - * @see `aron::Type::AronTypePtr` - * @see `aron::Typenavigator::Navigator` + * @see `aron::Type::AronTypePtr` + * @see `aron::Typenavigator::Navigator` * @see `std::stack` To manage Type with stack semantics. */ class TypedDataVisitor @@ -73,12 +73,18 @@ namespace armarx::aron::visitor using IntTypeNavigator = typenavigator::IntNavigator; using LongTypeNavigator = typenavigator::LongNavigator; using StringTypeNavigator = typenavigator::StringNavigator; + using TimeTypeNavigator = typenavigator::TimeNavigator; + // Array-valued using EigenMatrixTypeNavigator = typenavigator::EigenMatrixNavigator; + using EigenQuaternionTypeNavigator = typenavigator::EigenQuaternionNavigator; using IVTCByteImageTypeNavigator = typenavigator::IVTCByteImageNavigator; using OpenCVMatTypeNavigator = typenavigator::OpenCVMatNavigator; using PCLPointCloudTypeNavigator = typenavigator::PCLPointCloudNavigator; + using PoseTypeNavigator = typenavigator::PoseNavigator; + using PositionTypeNavigator = typenavigator::PositionNavigator; + using OrientationTypeNavigator = typenavigator::OrientationNavigator; public: @@ -166,26 +172,55 @@ namespace armarx::aron::visitor (void) type, (void) data; return true; } + virtual bool visit(TimeTypeNavigator& type, LongDataNavigator& data) + { + return visit(type, IceUtil::Time::microSeconds(data.getValue())); + } + virtual bool visit(TimeTypeNavigator& type, const IceUtil::Time& data) + { + (void) type, (void) data; + return true; + } virtual bool visit(EigenMatrixTypeNavigator& type, NDArrayDataNavigator& data) { - (void) type, (void) type, (void) data; + (void) type, (void) data; + return true; + } + virtual bool visit(EigenQuaternionTypeNavigator& type, NDArrayDataNavigator& data) + { + (void) type, (void) data; return true; } virtual bool visit(IVTCByteImageTypeNavigator& type, NDArrayDataNavigator& data) { - (void) type, (void) type, (void) data; + (void) type, (void) data; return true; } virtual bool visit(OpenCVMatTypeNavigator& type, NDArrayDataNavigator& data) { - (void) type, (void) type, (void) data; + (void) type, (void) data; return true; } virtual bool visit(PCLPointCloudTypeNavigator& type, NDArrayDataNavigator& data) { - (void) type, (void) type, (void) data; + (void) type, (void) data; + return true; + } + virtual bool visit(PoseTypeNavigator& type, NDArrayDataNavigator& data) + { + (void) type, (void) data; + return true; + } + virtual bool visit(PositionTypeNavigator& type, NDArrayDataNavigator& data) + { + (void) type, (void) data; + return true; + } + virtual bool visit(OrientationTypeNavigator& type, NDArrayDataNavigator& data) + { + (void) type, (void) data; return true; } @@ -280,6 +315,18 @@ namespace armarx::aron::visitor visit(type, data); return true; } + virtual bool visit(TimeTypeNavigator& type, const std::string& key, LongDataNavigator& data) + { + (void) key; + visit(type, data); + return true; + } + virtual bool visit(TimeTypeNavigator& type, const std::string& key, const IceUtil::Time& data) + { + (void) key; + visit(type, data); + return true; + } virtual bool visit(EigenMatrixTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) @@ -288,6 +335,12 @@ namespace armarx::aron::visitor visit(type, data); return true; } + virtual bool visit(EigenQuaternionTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) + { + (void) type, (void) key; + visit(type, data); + return true; + } virtual bool visit(IVTCByteImageTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) { (void) type, (void) key; @@ -306,7 +359,24 @@ namespace armarx::aron::visitor visit(type, data); return true; } - + virtual bool visit(PoseTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) + { + (void) type, (void) key; + visit(type, data); + return true; + } + virtual bool visit(PositionTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) + { + (void) type, (void) key; + visit(type, data); + return true; + } + virtual bool visit(OrientationTypeNavigator& type, const std::string& key, NDArrayDataNavigator& data) + { + (void) type, (void) key; + visit(type, data); + return true; + } private: -- GitLab