From a6065e939de439b847c479b0db495dea0698b489 Mon Sep 17 00:00:00 2001
From: jean_patrick_mathes <uomnk@student.kit.edu>
Date: Wed, 5 Oct 2022 14:30:56 +0200
Subject: [PATCH] Add operation to remove the placeholders

---
 .../InteractiveMemoryEditor/Editor.cpp        | 37 +++++++++++++------
 .../InteractiveMemoryEditor/Editor.h          |  3 +-
 2 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/source/RobotAPI/components/InteractiveMemoryEditor/Editor.cpp b/source/RobotAPI/components/InteractiveMemoryEditor/Editor.cpp
index 96cba7cf6..4b8db8b54 100644
--- a/source/RobotAPI/components/InteractiveMemoryEditor/Editor.cpp
+++ b/source/RobotAPI/components/InteractiveMemoryEditor/Editor.cpp
@@ -226,7 +226,11 @@ namespace armarx
 
     void Editor::visualizePlaceholder(PlaceholderState::Placeholder const& placeholder, size_t id)
     {
-        viz::InteractionDescription interaction = viz::interaction().selection().transform().hideDuringTransform();
+        viz::InteractionDescription interaction = viz::interaction()
+                .selection()
+                .transform()
+                .hideDuringTransform()
+                .contextMenu({"Remove"});
 
         viz::Box box = viz::Box("placeholder_" + std::to_string(id))
                         .set(placeholder.box.transformed(placeholder.transform))
@@ -234,13 +238,16 @@ namespace armarx
                         .enable(interaction);
 
         observer.addObserved(metaLayer, box)
-                .onTransformEnd([this, id](const Eigen::Matrix4f& transform)
-                                {
-                                    placeholders.movePlaceholder(id, transform);
-                                    isMetaVizRequired = true;
-
-                                    ARMARX_INFO << "transform ended for " << std::to_string(id);
-                                });
+                .onContextMenu(0, [this, id]()
+                {
+                    placeholders.removePlaceholder(id);
+                    isMetaVizRequired = true;
+                })
+                .onTransformEnd([this, id](Eigen::Matrix4f const& transform)
+                {
+                    placeholders.movePlaceholder(id, transform);
+                    isMetaVizRequired = true;
+                });
     }
 
     void Editor::ChangeState::clear()
@@ -455,17 +462,25 @@ namespace armarx
         placeholder.transform = transform * placeholder.transform;
     }
 
+    void Editor::PlaceholderState::removePlaceholder(size_t id)
+    {
+        auto& [placeholder, isActive] = placeholders[id];
+        isActive = false;
+
+        unusedIds.push(id);
+    }
+
     size_t Editor::PlaceholderState::getId()
     {
-        if (ids.empty())
+        if (unusedIds.empty())
         {
             size_t id = placeholders.size();
             placeholders.emplace_back(std::make_pair(Placeholder(), false));
             return id;
         }
 
-        size_t id = ids.top();
-        ids.pop();
+        size_t id = unusedIds.top();
+        unusedIds.pop();
         return id;
     }
 }  // namespace armarx
diff --git a/source/RobotAPI/components/InteractiveMemoryEditor/Editor.h b/source/RobotAPI/components/InteractiveMemoryEditor/Editor.h
index 595e3942a..5b9a4a7d6 100644
--- a/source/RobotAPI/components/InteractiveMemoryEditor/Editor.h
+++ b/source/RobotAPI/components/InteractiveMemoryEditor/Editor.h
@@ -112,11 +112,12 @@ namespace armarx
             void addPlaceholder(simox::OrientedBoxf box);
             void visualizePlaceholders(Editor* editor);
             void movePlaceholder(size_t id, Eigen::Matrix4f const& transform);
+            void removePlaceholder(size_t id);
 
         private:
             size_t getId();
 
-            std::priority_queue<size_t, std::vector<size_t>, std::greater<>> ids;
+            std::priority_queue<size_t, std::vector<size_t>, std::greater<>> unusedIds;
             std::vector<std::pair<Placeholder, bool>> placeholders;
         };
 
-- 
GitLab