From 6d1f9ac39a8adc45282018ddc5fc1c131605b73f Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Fri, 24 Jan 2025 17:50:35 +0100 Subject: [PATCH] articulated object writer: implementation such that the default behavior is changed: by default, only the instance will be stored and not the class --- .../ArticulatedObjectWriter.cpp | 28 ++++++++++--------- .../ArticulatedObjectWriter.h | 15 +++++++--- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp index 28f93084c..9e03b50c0 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.cpp @@ -14,13 +14,14 @@ namespace armarx::armem::articulated_object { - - armem::articulated_object::ArticulatedObject + // Slow version with filesystem access. It runs CMake for each project / environment variable. + static armem::articulated_object::ArticulatedObject convert(const VirtualRobot::Robot& obj, const armem::Time& timestamp) { ARMARX_DEBUG << "Filename is " << obj.getFilename(); + // this is very inefficient. It runs CMake for each project const std::vector<std::string> packages = armarx::CMakePackageFinder::FindAllArmarXSourcePackages(); const std::string package = armarx::ArmarXDataPath::getProject(packages, obj.getFilename()); @@ -53,8 +54,9 @@ namespace armarx::armem::articulated_object .timestamp = timestamp}; } - armem::articulated_object::ArticulatedObject - convert2(const VirtualRobot::Robot& obj, const armem::Time& timestamp) + // fast version without filesystem (CMake) access + static armem::articulated_object::ArticulatedObject + convertWithoutPackagePath(const VirtualRobot::Robot& obj, const armem::Time& timestamp) { ARMARX_DEBUG << "Filename is " << obj.getFilename(); @@ -69,30 +71,30 @@ namespace armarx::armem::articulated_object } bool - ArticulatedObjectWriter::storeArticulatedObject(const VirtualRobot::RobotPtr& articulatedObject, - const armem::Time& timestamp, - const bool isStatic) + ArticulatedObjectWriter::storeArticulatedObjectWithObjectClass( + const VirtualRobot::RobotPtr& articulatedObject, + const armem::Time& timestamp, + const bool isStatic) { ARMARX_CHECK_NOT_NULL(articulatedObject); armarx::armem::articulated_object::ArticulatedObject armemArticulatedObject = - convert(*articulatedObject, Time::Now()); + convert(*articulatedObject, timestamp); return store(armemArticulatedObject, isStatic); } bool - ArticulatedObjectWriter::storeArticulatedObject2( - const VirtualRobot::RobotPtr& articulatedObject, - const armem::Time& timestamp, - const bool isStatic) + ArticulatedObjectWriter::storeArticulatedObject(const VirtualRobot::RobotPtr& articulatedObject, + const armem::Time& timestamp, + const bool isStatic) { ARMARX_CHECK_NOT_NULL(articulatedObject); armarx::armem::articulated_object::ArticulatedObject armemArticulatedObject = - convert2(*articulatedObject, Time::Now()); + convertWithoutPackagePath(*articulatedObject, timestamp); return storeInstance(armemArticulatedObject, isStatic); } diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h index 4171529f5..4d6fca627 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/ArticulatedObjectWriter.h @@ -14,15 +14,22 @@ namespace armarx::armem::articulated_object public: using Writer::Writer; + /** + * @brief Stores the articulated object in the memory. + * + */ bool storeArticulatedObject(const VirtualRobot::RobotPtr& articulatedObject, const armem::Time& timestamp, bool isStatic = false); - bool storeArticulatedObject2(const VirtualRobot::RobotPtr& articulatedObject, - const armem::Time& timestamp, - bool isStatic = false); + /** + * @brief Stores the articulated object. If the object class in unknown, + * it will also be stored in the corresponding class core segment. + */ + bool storeArticulatedObjectWithObjectClass(const VirtualRobot::RobotPtr& articulatedObject, + const armem::Time& timestamp, + bool isStatic = false); private: - }; } // namespace armarx::armem::articulated_object -- GitLab