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