From 7d7a3907a32178f38e3852261b9bc31428683a34 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Fri, 11 Feb 2022 16:02:35 +0100
Subject: [PATCH] Allow ObjectMemory to load multiple scenes on startup

---
 .../armem_objects/server/instance/Segment.cpp     | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
index 9f0d71748..72faed5fe 100644
--- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
+++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp
@@ -32,6 +32,7 @@
 #include <ArmarXCore/core/time/TimeUtil.h>
 
 #include <SimoxUtility/algorithm/get_map_keys_values.h>
+#include <SimoxUtility/algorithm/string.h>
 #include <SimoxUtility/json.h>
 #include <SimoxUtility/math/pose/pose.h>
 
@@ -100,8 +101,9 @@ namespace armarx::armem::server::obj::instance
         defs->optional(p.sceneSnapshotsDirectory, prefix + "scene.11_Directory",
                        "Directory in Package/data/Package/ containing the scene snapshots.");
         defs->optional(p.sceneSnapshotToLoad, prefix + "scene.12_SnapshotToLoad",
-                       "Scene snapshot to load on startup (e.g. 'Scene_2021-06-24_20-20-03').\n"
-                       "You can also specify paths relative to 'Package/scenes/'.");
+                       "Scene to load on startup (e.g. 'Scene_2021-06-24_20-20-03').\n"
+                       "You can also specify paths relative to 'Package/scenes/'. \n"
+                       "You can also specify a ; separated list of scenes.");
 
         decay.defineProperties(defs, prefix + "decay.");
     }
@@ -113,8 +115,13 @@ namespace armarx::armem::server::obj::instance
 
         if (not p.sceneSnapshotToLoad.empty())
         {
-            bool lockMemory = false;
-            commitSceneSnapshotFromFilename(p.sceneSnapshotToLoad, lockMemory);
+            bool trim = true;
+            const std::vector<std::string> scenes = simox::alg::split(p.sceneSnapshotToLoad, ";", trim);
+            for (const std::string& scene : scenes)
+            {
+                const bool lockMemory = false;
+                commitSceneSnapshotFromFilename(scene, lockMemory);
+            }
         }
     }
 
-- 
GitLab