diff --git a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp index d8ae0a10b97825f924d7e1605dc4687dcce9bfee..d491662edda9ff00244178735c0c84c26a923688 100644 --- a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp +++ b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.cpp @@ -3,6 +3,7 @@ #include <SimoxUtility/json.h> #include <RobotAPI/libraries/ArmarXObjects/ObjectID.h> +#include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h> // #include <RobotAPI/libraries/armem/core/json_conversions.h> @@ -15,6 +16,20 @@ namespace armarx::armem::obj return ObjectID(className); } + + ObjectID SceneSnapshot::Object::getClassID(ObjectFinder& finder) const + { + ObjectID id = getClassID(); + if (id.dataset().empty()) + { + if (std::optional<ObjectInfo> info = finder.findObject(id.className())) + { + return info->id(); + } + } + return id; + } + } diff --git a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h index 2baa2cd3c323794aa4112bbc5df8c3353073dc61..add5f1f183d15b6ec7c0588a5d4a9abc7e558d82 100644 --- a/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h +++ b/source/RobotAPI/libraries/armem_objects/SceneSnapshot.h @@ -29,6 +29,7 @@ namespace armarx { class ObjectID; + class ObjectFinder; } namespace armarx::armem::obj { @@ -44,6 +45,7 @@ namespace armarx::armem::obj Eigen::Quaternionf orientation = Eigen::Quaternionf::Identity(); ObjectID getClassID() const; + ObjectID getClassID(ObjectFinder& finder) const; }; std::vector<Object> objects; }; diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp index ae496c09b2e72b906966958b4d03973e19dfa3ad..f85d7146065dc8f9ac648b889ab1db27ab5c30a9 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp @@ -842,7 +842,7 @@ namespace armarx::armem::server::obj::instance for (const auto& object : scene.objects) { - const ObjectID classID = object.getClassID(); + const ObjectID classID = object.getClassID(objectFinder); objpose::ObjectPose& pose = objectPoses.emplace_back();