From a2dee547e0fe396413ceca59709247af49f305a4 Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Mon, 28 Oct 2024 04:52:21 +0100 Subject: [PATCH] object class reader: +getAllObjectClasses --- .../client/class/ClassReader.cpp | 42 +++++++++++++++++-- .../armem_objects/client/class/ClassReader.h | 2 + 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.cpp b/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.cpp index ca365080d..de1a50c49 100644 --- a/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.cpp @@ -36,10 +36,10 @@ namespace armarx::armem::obj::clazz { armem::client::query::Builder builder; auto& entities = builder.coreSegments() - .withName(properties().coreSegmentName) - .providerSegments() - .all() - .entities(); + .withName(properties().coreSegmentName) + .providerSegments() + .all() + .entities(); for (const ObjectID& objectID : objectIDs) { @@ -67,6 +67,40 @@ namespace armarx::armem::obj::clazz return objectClasses; } + std::map<ObjectID, armem::clazz::ObjectClass> + ClassReader::getAllObjectClasses() + { + armem::client::query::Builder builder; + + // clang-format off + builder + .coreSegments().withName(properties().coreSegmentName) + .providerSegments().all() + .entities().all() + .snapshots().latest(); + // clang-format on + + const armem::client::QueryResult result = memoryReader().query(builder); + if (not result.success) + { + throw armem::error::QueryFailed(result.errorMessage); + } + + std::map<ObjectID, armem::clazz::ObjectClass> objectClasses; + + result.memory.forEachInstance( + [&objectClasses](const armem::wm::EntityInstance& instance) -> bool + { + const ObjectID classID = ObjectID::FromString(instance.id().entityName); + auto aron = instance.dataAs<armarx::armem::arondto::ObjectClass>(); + armarx::armem::clazz::fromAron(aron, objectClasses[classID]); + + return true; + }); + + return objectClasses; + } + std::string ClassReader::propertyPrefix() const { diff --git a/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.h b/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.h index 8dd50018a..4fe194389 100644 --- a/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.h +++ b/source/RobotAPI/libraries/armem_objects/client/class/ClassReader.h @@ -46,6 +46,8 @@ namespace armarx::armem::obj::clazz std::map<armarx::ObjectID, armem::clazz::ObjectClass> getObjectClasses(const std::vector<armarx::ObjectID>& objectIDs); + std::map<armarx::ObjectID, armem::clazz::ObjectClass> getAllObjectClasses(); + protected: std::string propertyPrefix() const final; Properties defaultProperties() const final; -- GitLab