diff --git a/modules/viz/include/opencv2/viz/viz3d.hpp b/modules/viz/include/opencv2/viz/viz3d.hpp index 5c88f431ef..19fe4c03ad 100644 --- a/modules/viz/include/opencv2/viz/viz3d.hpp +++ b/modules/viz/include/opencv2/viz/viz3d.hpp @@ -72,6 +72,7 @@ namespace temp_viz bool wasStopped() const; void showWidget(const String &id, const Widget &widget); + bool removeWidget(const String &id); private: Viz3d(const Viz3d&); Viz3d& operator=(const Viz3d&); diff --git a/modules/viz/src/q/viz3d_impl.hpp b/modules/viz/src/q/viz3d_impl.hpp index 9544a31421..2f09aea0b0 100644 --- a/modules/viz/src/q/viz3d_impl.hpp +++ b/modules/viz/src/q/viz3d_impl.hpp @@ -247,6 +247,8 @@ public: void setSize (int xw, int yw); void showWidget(const String &id, const Widget &widget); + bool removeWidget(const String &id); + void all_data(); private: diff --git a/modules/viz/src/viz3d.cpp b/modules/viz/src/viz3d.cpp index 76e7459eb9..76392acf7d 100644 --- a/modules/viz/src/viz3d.cpp +++ b/modules/viz/src/viz3d.cpp @@ -143,3 +143,8 @@ void temp_viz::Viz3d::showWidget(const String &id, const Widget &widget) { impl_->showWidget(id, widget); } + +bool temp_viz::Viz3d::removeWidget(const String &id) +{ + return impl_->removeWidget(id); +} diff --git a/modules/viz/src/viz3d_impl.cpp b/modules/viz/src/viz3d_impl.cpp index 627ec48d92..22eaf21ba5 100644 --- a/modules/viz/src/viz3d_impl.cpp +++ b/modules/viz/src/viz3d_impl.cpp @@ -1183,3 +1183,21 @@ void temp_viz::Viz3d::VizImpl::showWidget(const String &id, const Widget &widget renderer_->AddActor(WidgetAccessor::getActor(widget)); (*widget_actor_map_)[id].actor = WidgetAccessor::getActor(widget); } + +bool temp_viz::Viz3d::VizImpl::removeWidget(const String &id) +{ + WidgetActorMap::iterator wam_itr = widget_actor_map_->find(id); + bool exists = !(wam_itr == widget_actor_map_->end()); + + if (!exists) + { + std::cout << "[removeWidget] A widget with id <" << id << "> does not exist!" << std::endl; + return false; + } + + if (!removeActorFromRenderer (wam_itr->second.actor)) + return false; + + widget_actor_map_->erase(wam_itr); + return true; +}