Skip to content
Snippets Groups Projects
Commit a6065e93 authored by Jean Patrick Mathes's avatar Jean Patrick Mathes
Browse files

Add operation to remove the placeholders

parent dae58e7d
No related branches found
No related tags found
1 merge request!283Resolve "Add component to interactively change the object instances in the memory via ArViz interactive"
......@@ -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
......@@ -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;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment