From af8a918e04f58afdd28bdc4d94191533943b8653 Mon Sep 17 00:00:00 2001 From: ozantonkal Date: Sat, 31 Aug 2013 11:30:37 +0200 Subject: [PATCH] fix minor bug, minor cleaning, cv_assert with messages --- modules/viz/include/opencv2/viz/widgets.hpp | 3 - modules/viz/src/cloud_widgets.cpp | 6 +- modules/viz/src/interactor_style.cpp | 14 +--- modules/viz/src/shape_widgets.cpp | 32 +++------ modules/viz/src/types.cpp | 2 +- modules/viz/src/viz3d_impl.cpp | 72 +++------------------ modules/viz/src/viz3d_impl.hpp | 12 +--- modules/viz/src/widget.cpp | 20 +++--- 8 files changed, 36 insertions(+), 125 deletions(-) diff --git a/modules/viz/include/opencv2/viz/widgets.hpp b/modules/viz/include/opencv2/viz/widgets.hpp index 3f631c0118..9f1d14f13c 100644 --- a/modules/viz/include/opencv2/viz/widgets.hpp +++ b/modules/viz/include/opencv2/viz/widgets.hpp @@ -61,9 +61,6 @@ namespace cv { public: LineWidget(const Point3f &pt1, const Point3f &pt2, const Color &color = Color::white()); - - void setLineWidth(float line_width); - float getLineWidth(); }; class CV_EXPORTS PlaneWidget : public Widget3D diff --git a/modules/viz/src/cloud_widgets.cpp b/modules/viz/src/cloud_widgets.cpp index a30c97a32a..adf842a0f2 100644 --- a/modules/viz/src/cloud_widgets.cpp +++ b/modules/viz/src/cloud_widgets.cpp @@ -298,7 +298,7 @@ struct cv::viz::CloudCollectionWidget::CreateCloudWidget } vtkPolyData *data = vtkPolyData::SafeDownCast(mapper->GetInput()); - CV_Assert(data); + CV_Assert("Cloud Widget without data" && data); vtkSmartPointer appendFilter = vtkSmartPointer::New(); appendFilter->AddInputConnection(mapper->GetInput()->GetProducerPort()); @@ -357,7 +357,7 @@ void cv::viz::CloudCollectionWidget::addCloud(InputArray _cloud, InputArray _col transform_filter->Update(); vtkLODActor *actor = vtkLODActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Incompatible widget type." && actor); Vec3d minmax(scalars->GetRange()); CreateCloudWidget::createMapper(actor, transform_filter->GetOutput(), minmax); @@ -392,7 +392,7 @@ void cv::viz::CloudCollectionWidget::addCloud(InputArray _cloud, const Color &co transform_filter->Update(); vtkLODActor *actor = vtkLODActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Incompatible widget type." && actor); Vec3d minmax(scalars->GetRange()); CreateCloudWidget::createMapper(actor, transform_filter->GetOutput(), minmax); diff --git a/modules/viz/src/interactor_style.cpp b/modules/viz/src/interactor_style.cpp index db3d979791..06e7af4c20 100644 --- a/modules/viz/src/interactor_style.cpp +++ b/modules/viz/src/interactor_style.cpp @@ -152,17 +152,9 @@ void cv::viz::InteractorStyle::registerKeyboardCallback(void (*callback)(const K void cv::viz::InteractorStyle::OnKeyDown () { - if (!init_) - { - std::cout << "Interactor style not initialized. Please call Initialize () before continuing" << std::endl; - return; - } - - if (!renderer_) - { - std::cout << "No renderer given! Use SetRendererCollection () before continuing." << std::endl; - return; - } + + CV_Assert("Interactor style not initialized. Please call Initialize () before continuing" && init_); + CV_Assert("No renderer given! Use SetRendererCollection () before continuing." && renderer_); FindPokedRenderer (Interactor->GetEventPosition ()[0], Interactor->GetEventPosition ()[1]); diff --git a/modules/viz/src/shape_widgets.cpp b/modules/viz/src/shape_widgets.cpp index cb66e80b39..84fdc77287 100644 --- a/modules/viz/src/shape_widgets.cpp +++ b/modules/viz/src/shape_widgets.cpp @@ -27,20 +27,6 @@ cv::viz::LineWidget::LineWidget(const Point3f &pt1, const Point3f &pt2, const Co setColor(color); } -void cv::viz::LineWidget::setLineWidth(float line_width) -{ - vtkActor *actor = vtkActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); - actor->GetProperty()->SetLineWidth(line_width); -} - -float cv::viz::LineWidget::getLineWidth() -{ - vtkActor *actor = vtkActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); - return actor->GetProperty()->GetLineWidth(); -} - template<> cv::viz::LineWidget cv::viz::Widget::cast() { Widget3D widget = this->cast(); @@ -556,12 +542,12 @@ cv::viz::Text3DWidget::Text3DWidget(const String &text, const Point3f &position, void cv::viz::Text3DWidget::setText(const String &text) { vtkFollower *actor = vtkFollower::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("This widget does not support text." && actor); // Update text source vtkPolyDataMapper *mapper = vtkPolyDataMapper::SafeDownCast(actor->GetMapper()); vtkVectorText * textSource = vtkVectorText::SafeDownCast(mapper->GetInputConnection(0,0)->GetProducer()); - CV_Assert(textSource); + CV_Assert("This widget does not support text." && textSource); textSource->SetText(text.c_str()); textSource->Update(); @@ -570,11 +556,11 @@ void cv::viz::Text3DWidget::setText(const String &text) cv::String cv::viz::Text3DWidget::getText() const { vtkFollower *actor = vtkFollower::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("This widget does not support text." && actor); vtkPolyDataMapper *mapper = vtkPolyDataMapper::SafeDownCast(actor->GetMapper()); vtkVectorText * textSource = vtkVectorText::SafeDownCast(mapper->GetInputConnection(0,0)->GetProducer()); - CV_Assert(textSource); + CV_Assert("This widget does not support text." && textSource); return textSource->GetText(); } @@ -615,14 +601,14 @@ template<> cv::viz::TextWidget cv::viz::Widget::cast() void cv::viz::TextWidget::setText(const String &text) { vtkTextActor *actor = vtkTextActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("This widget does not support text." && actor); actor->SetInput(text.c_str()); } cv::String cv::viz::TextWidget::getText() const { vtkTextActor *actor = vtkTextActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("This widget does not support text." && actor); return actor->GetInput(); } @@ -671,10 +657,10 @@ void cv::viz::ImageOverlayWidget::setImage(const Mat &image) CV_Assert(!image.empty() && image.depth() == CV_8U); vtkActor2D *actor = vtkActor2D::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("This widget does not support overlay image." && actor); vtkImageMapper *mapper = vtkImageMapper::SafeDownCast(actor->GetMapper()); - CV_Assert(mapper); + CV_Assert("This widget does not support overlay image." && mapper); // Create the vtk image and set its parameters based on input image vtkSmartPointer vtk_image = vtkSmartPointer::New(); @@ -821,7 +807,7 @@ void cv::viz::Image3DWidget::setImage(const Mat &image) CV_Assert(!image.empty() && image.depth() == CV_8U); vtkActor *actor = vtkActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("This widget does not support 3D image." && actor); // Create the vtk image and set its parameters based on input image vtkSmartPointer vtk_image = vtkSmartPointer::New(); diff --git a/modules/viz/src/types.cpp b/modules/viz/src/types.cpp index 64d6f91a15..e915207e30 100644 --- a/modules/viz/src/types.cpp +++ b/modules/viz/src/types.cpp @@ -74,7 +74,7 @@ struct cv::viz::Mesh3d::loadMeshImpl reader->Update(); vtkSmartPointer poly_data = reader->GetOutput (); - CV_Assert(poly_data); + CV_Assert("File does not exist or file format is not supported." && poly_data); vtkSmartPointer mesh_points = poly_data->GetPoints (); vtkIdType nr_points = mesh_points->GetNumberOfPoints (); diff --git a/modules/viz/src/viz3d_impl.cpp b/modules/viz/src/viz3d_impl.cpp index d04bb5426e..7a1518c2c0 100644 --- a/modules/viz/src/viz3d_impl.cpp +++ b/modules/viz/src/viz3d_impl.cpp @@ -34,9 +34,6 @@ cv::viz::Viz3d::VizImpl::VizImpl (const std::string &name) ///////////////////////////////////////////////// interactor_ = vtkSmartPointer ::Take (vtkRenderWindowInteractorFixNew ()); - //win_->PointSmoothingOn (); - //win_->LineSmoothingOn (); - //win_->PolygonSmoothingOn (); window_->AlphaBitPlanesOff (); window_->PointSmoothingOff (); window_->LineSmoothingOff (); @@ -46,7 +43,6 @@ cv::viz::Viz3d::VizImpl::VizImpl (const std::string &name) interactor_->SetRenderWindow (window_); interactor_->SetInteractorStyle (style_); - //interactor_->SetStillUpdateRate (30.0); interactor_->SetDesiredUpdateRate (30.0); // Initialize and create timer, also create window @@ -119,8 +115,8 @@ void cv::viz::Viz3d::VizImpl::removeWidget(const String &id) { WidgetActorMap::iterator wam_itr = widget_actor_map_->find(id); bool exists = wam_itr != widget_actor_map_->end(); - CV_Assert(exists); - CV_Assert(removeActorFromRenderer (wam_itr->second)); + CV_Assert("Widget does not exist." && exists); + CV_Assert("Widget could not be removed." && removeActorFromRenderer (wam_itr->second)); widget_actor_map_->erase(wam_itr); } @@ -129,7 +125,7 @@ cv::viz::Widget cv::viz::Viz3d::VizImpl::getWidget(const String &id) const { WidgetActorMap::const_iterator wam_itr = widget_actor_map_->find(id); bool exists = wam_itr != widget_actor_map_->end(); - CV_Assert(exists); + CV_Assert("Widget does not exist." && exists); Widget widget; WidgetAccessor::setProp(widget, wam_itr->second); @@ -141,10 +137,10 @@ void cv::viz::Viz3d::VizImpl::setWidgetPose(const String &id, const Affine3f &po { WidgetActorMap::iterator wam_itr = widget_actor_map_->find(id); bool exists = wam_itr != widget_actor_map_->end(); - CV_Assert(exists); + CV_Assert("Widget does not exist." && exists); vtkProp3D *actor = vtkProp3D::SafeDownCast(wam_itr->second); - CV_Assert(actor); + CV_Assert("Widget is not 3D." && actor); vtkSmartPointer matrix = convertToVtkMatrix(pose.matrix); actor->SetUserMatrix (matrix); @@ -156,10 +152,10 @@ void cv::viz::Viz3d::VizImpl::updateWidgetPose(const String &id, const Affine3f { WidgetActorMap::iterator wam_itr = widget_actor_map_->find(id); bool exists = wam_itr != widget_actor_map_->end(); - CV_Assert(exists); + CV_Assert("Widget does not exist." && exists); vtkProp3D *actor = vtkProp3D::SafeDownCast(wam_itr->second); - CV_Assert(actor); + CV_Assert("Widget is not 3D." && actor); vtkSmartPointer matrix = actor->GetUserMatrix(); if (!matrix) @@ -180,10 +176,10 @@ cv::Affine3f cv::viz::Viz3d::VizImpl::getWidgetPose(const String &id) const { WidgetActorMap::const_iterator wam_itr = widget_actor_map_->find(id); bool exists = wam_itr != widget_actor_map_->end(); - CV_Assert(exists); + CV_Assert("Widget does not exist." && exists); vtkProp3D *actor = vtkProp3D::SafeDownCast(wam_itr->second); - CV_Assert(actor); + CV_Assert("Widget is not 3D." && actor); vtkSmartPointer matrix = actor->GetUserMatrix(); Matx44f matrix_cv = convertToMatx(matrix); @@ -254,56 +250,6 @@ void cv::viz::Viz3d::VizImpl::removeAllWidgets() renderer_->RemoveAllViewProps(); } -////////////////////////////////////////////////////////////////////////////////////////// -bool cv::viz::Viz3d::VizImpl::removeActorFromRenderer (const vtkSmartPointer &actor) -{ - vtkLODActor* actor_to_remove = vtkLODActor::SafeDownCast (actor); - - - - // Iterate over all actors in this renderer - vtkPropCollection* actors = renderer_->GetViewProps (); - actors->InitTraversal (); - - vtkProp* current_actor = NULL; - while ((current_actor = actors->GetNextProp ()) != NULL) - { - if (current_actor != actor_to_remove) - continue; - renderer_->RemoveActor (actor); - // renderer->Render (); - // Found the correct viewport and removed the actor - return (true); - } - - return false; -} - -////////////////////////////////////////////////////////////////////////////////////////// -bool cv::viz::Viz3d::VizImpl::removeActorFromRenderer (const vtkSmartPointer &actor) -{ - vtkActor* actor_to_remove = vtkActor::SafeDownCast (actor); - - // Add it to all renderers - //rens_->InitTraversal (); - - - // Iterate over all actors in this renderer - vtkPropCollection* actors = renderer_->GetViewProps (); - actors->InitTraversal (); - vtkProp* current_actor = NULL; - while ((current_actor = actors->GetNextProp ()) != NULL) - { - if (current_actor != actor_to_remove) - continue; - renderer_->RemoveActor (actor); - // renderer->Render (); - // Found the correct viewport and removed the actor - return (true); - } - return false; -} - ///////////////////////////////////////////////////////////////////////////////////////////// bool cv::viz::Viz3d::VizImpl::removeActorFromRenderer (const vtkSmartPointer &actor) { diff --git a/modules/viz/src/viz3d_impl.hpp b/modules/viz/src/viz3d_impl.hpp index 61948f912d..b2339c40c8 100644 --- a/modules/viz/src/viz3d_impl.hpp +++ b/modules/viz/src/viz3d_impl.hpp @@ -119,6 +119,7 @@ private: if (event_id == vtkCommand::ExitEvent) { viz_->stopped_ = true; + viz_->interactor_->GetRenderWindow()->Finalize(); viz_->interactor_->TerminateApp (); } } @@ -142,12 +143,6 @@ private: /** \brief The render window interactor style. */ vtkSmartPointer style_; - - /** \brief Internal list with actor pointers and name IDs for point clouds. */ -// cv::Ptr cloud_actor_map_; - - /** \brief Internal list with actor pointers and name IDs for shapes. */ -// cv::Ptr shape_actor_map_; /** \brief Internal list with actor pointers and name IDs for all widget actors */ cv::Ptr widget_actor_map_; @@ -155,13 +150,8 @@ private: /** \brief Boolean that holds whether or not the camera parameters were manually initialized*/ bool camera_set_; - bool removeActorFromRenderer (const vtkSmartPointer &actor); - bool removeActorFromRenderer (const vtkSmartPointer &actor); bool removeActorFromRenderer (const vtkSmartPointer &actor); - //void addActorToRenderer (const vtkSmartPointer &actor); - - /** \brief Internal method. Creates a vtk actor from a vtk polydata object. * \param[in] data the vtk polydata object to create an actor for * \param[out] actor the resultant vtk actor object diff --git a/modules/viz/src/widget.cpp b/modules/viz/src/widget.cpp index b0b76c4352..196ec99399 100644 --- a/modules/viz/src/widget.cpp +++ b/modules/viz/src/widget.cpp @@ -40,7 +40,7 @@ cv::viz::Widget cv::viz::Widget::fromPlyFile(const String &file_name) reader->SetFileName (file_name.c_str ()); vtkSmartPointer data = reader->GetOutput(); - CV_Assert(data); + CV_Assert("File does not exist or file format is not supported." && data); vtkSmartPointer actor = vtkSmartPointer::New(); @@ -77,7 +77,7 @@ cv::viz::Widget cv::viz::Widget::fromPlyFile(const String &file_name) void cv::viz::Widget::setRenderingProperty(int property, double value) { vtkActor *actor = vtkActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Widget type is not supported." && actor); switch (property) { @@ -118,7 +118,7 @@ void cv::viz::Widget::setRenderingProperty(int property, double value) double cv::viz::Widget::getRenderingProperty(int property) const { vtkActor *actor = vtkActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Widget type is not supported." && actor); double value = 0.0; switch (property) @@ -239,7 +239,7 @@ struct cv::viz::Widget3D::MatrixConverter void cv::viz::Widget3D::setPose(const Affine3f &pose) { vtkProp3D *actor = vtkProp3D::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Widget is not 3D." && actor); vtkSmartPointer matrix = convertToVtkMatrix(pose.matrix); actor->SetUserMatrix (matrix); @@ -249,7 +249,7 @@ void cv::viz::Widget3D::setPose(const Affine3f &pose) void cv::viz::Widget3D::updatePose(const Affine3f &pose) { vtkProp3D *actor = vtkProp3D::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Widget is not 3D." && actor); vtkSmartPointer matrix = actor->GetUserMatrix(); if (!matrix) @@ -269,7 +269,7 @@ void cv::viz::Widget3D::updatePose(const Affine3f &pose) cv::Affine3f cv::viz::Widget3D::getPose() const { vtkProp3D *actor = vtkProp3D::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Widget is not 3D." && actor); vtkSmartPointer matrix = actor->GetUserMatrix(); Matx44f matrix_cv = MatrixConverter::convertToMatx(matrix); @@ -280,7 +280,7 @@ void cv::viz::Widget3D::setColor(const Color &color) { // Cast to actor instead of prop3d since prop3d doesn't provide getproperty vtkActor *actor = vtkActor::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Widget type is not supported." && actor); Color c = vtkcolor(color); actor->GetMapper ()->ScalarVisibilityOff (); @@ -292,7 +292,7 @@ void cv::viz::Widget3D::setColor(const Color &color) template<> cv::viz::Widget3D cv::viz::Widget::cast() { vtkProp3D *actor = vtkProp3D::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Widget cannot be cast." && actor); Widget3D widget; WidgetAccessor::setProp(widget, actor); @@ -305,7 +305,7 @@ template<> cv::viz::Widget3D cv::viz::Widget::cast() void cv::viz::Widget2D::setColor(const Color &color) { vtkActor2D *actor = vtkActor2D::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Widget type is not supported." && actor); Color c = vtkcolor(color); actor->GetProperty ()->SetColor (c.val); actor->Modified (); @@ -314,7 +314,7 @@ void cv::viz::Widget2D::setColor(const Color &color) template<> cv::viz::Widget2D cv::viz::Widget::cast() { vtkActor2D *actor = vtkActor2D::SafeDownCast(WidgetAccessor::getProp(*this)); - CV_Assert(actor); + CV_Assert("Widget cannot be cast." && actor); Widget2D widget; WidgetAccessor::setProp(widget, actor);