From 28c138f65e6d3ec0b781223f11cb23e1eb62c72c Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Fri, 20 Sep 2024 08:09:06 +0200
Subject: [PATCH] ObjectMemory: reloadKnownObjectClasses()

---
 .../armem/server/ObjectMemory/ObjectMemory.cpp  |  8 ++++++++
 .../armem/server/ObjectMemory/ObjectMemory.h    |  2 ++
 .../armem/server/ObjectMemoryInterface.ice      |  1 +
 .../armem_objects/server/class/Segment.cpp      | 17 ++++++++++++++++-
 .../armem_objects/server/class/Segment.h        |  2 ++
 5 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
index 7403e8331..deeec0ebb 100644
--- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
+++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp
@@ -350,4 +350,12 @@ namespace armarx::armem::server::obj
         }
     }
 
+    void ObjectMemory::reloadKnownObjectClasses(const Ice::Current& current)
+    {
+        ARMARX_INFO << "Reloading object classes ...";
+        classSegment.reloadObjectClassesByObjectFinder();
+        ARMARX_INFO << "Reloaded object classes.";
+    }
+
+
 }
diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h
index 9a97c2374..ec78eb3fa 100644
--- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h
+++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h
@@ -110,6 +110,8 @@ namespace armarx::armem::server::obj
         void createRemoteGuiTab();
         void RemoteGui_update() override;
 
+        // Updates the list of known classes and generates a new snapshot in the memory
+        void reloadKnownObjectClasses(const Ice::Current& current) override;
 
     private:
 
diff --git a/source/RobotAPI/interface/armem/server/ObjectMemoryInterface.ice b/source/RobotAPI/interface/armem/server/ObjectMemoryInterface.ice
index fdae53a72..fa9d74f16 100644
--- a/source/RobotAPI/interface/armem/server/ObjectMemoryInterface.ice
+++ b/source/RobotAPI/interface/armem/server/ObjectMemoryInterface.ice
@@ -54,6 +54,7 @@ module armarx
                     , FamiliarObjectInstanceSegmentInterface
             {
 
+                void reloadKnownObjectClasses();
             };
 
         };
diff --git a/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp
index a9b406a13..c25da26b1 100644
--- a/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/class/Segment.cpp
@@ -56,11 +56,26 @@ namespace armarx::armem::server::obj::clazz
 
         if (p.loadFromObjectsPackage)
         {
-            ARMARX_VERBOSE << "Loading objects from package";
+            ARMARX_VERBOSE << "Loading objects from package `" << p.objectsPackage << "`.";
             loadByObjectFinder(p.objectsPackage);
         }
     }
 
+    void
+    Segment::reloadObjectClassesByObjectFinder()
+    {
+        if (p.loadFromObjectsPackage)
+        {
+            ARMARX_VERBOSE << "Loading objects from package `" << p.objectsPackage << "`.";
+            loadByObjectFinder(p.objectsPackage);
+        }
+        else
+        {
+            ARMARX_INFO << "Loading object from package in `reloadObjectClassesByObjectFinder()` "
+                           "is disabled via property. No object classes will be reloaded!";
+        }
+    }
+
     void
     Segment::connect(viz::Client arviz)
     {
diff --git a/source/RobotAPI/libraries/armem_objects/server/class/Segment.h b/source/RobotAPI/libraries/armem_objects/server/class/Segment.h
index ba42e0072..b2da5cd1b 100644
--- a/source/RobotAPI/libraries/armem_objects/server/class/Segment.h
+++ b/source/RobotAPI/libraries/armem_objects/server/class/Segment.h
@@ -38,6 +38,8 @@ namespace armarx::armem::server::obj::clazz
         void loadByObjectFinder(const ObjectFinder& finder);
         void loadByObjectFinder();
 
+        void reloadObjectClassesByObjectFinder();
+
         void visualizeClass(const MemoryID& entityID, bool showAABB = true, bool showOOBB = true);
 
 
-- 
GitLab