fix minor bug, minor cleaning, cv_assert with messages
authorozantonkal <ozantonkal@gmail.com>
Sat, 31 Aug 2013 09:30:37 +0000 (11:30 +0200)
committerOzan Tonkal <ozantonkal@gmail.com>
Thu, 5 Sep 2013 19:03:39 +0000 (21:03 +0200)
modules/viz/include/opencv2/viz/widgets.hpp
modules/viz/src/cloud_widgets.cpp
modules/viz/src/interactor_style.cpp
modules/viz/src/shape_widgets.cpp
modules/viz/src/types.cpp
modules/viz/src/viz3d_impl.cpp
modules/viz/src/viz3d_impl.hpp
modules/viz/src/widget.cpp

index 3f631c0..9f1d14f 100644 (file)
@@ -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
index a30c97a..adf842a 100644 (file)
@@ -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<vtkAppendPolyData> appendFilter = vtkSmartPointer<vtkAppendPolyData>::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);
index db3d979..06e7af4 100644 (file)
@@ -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]);
 
index cb66e80..84fdc77 100644 (file)
@@ -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<cv::viz::LineWidget>()
 {
     Widget3D widget = this->cast<Widget3D>();
@@ -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<cv::viz::TextWidget>()
 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<vtkImageData> vtk_image = vtkSmartPointer<vtkImageData>::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<vtkImageData> vtk_image = vtkSmartPointer<vtkImageData>::New();
index 64d6f91..e915207 100644 (file)
@@ -74,7 +74,7 @@ struct cv::viz::Mesh3d::loadMeshImpl
         reader->Update();
         
         vtkSmartPointer<vtkPolyData> poly_data = reader->GetOutput ();
-        CV_Assert(poly_data);
+        CV_Assert("File does not exist or file format is not supported." && poly_data);
         
         vtkSmartPointer<vtkPoints> mesh_points = poly_data->GetPoints ();
         vtkIdType nr_points = mesh_points->GetNumberOfPoints ();
index d04bb54..7a1518c 100644 (file)
@@ -34,9 +34,6 @@ cv::viz::Viz3d::VizImpl::VizImpl (const std::string &name)
     /////////////////////////////////////////////////
     interactor_ = vtkSmartPointer <vtkRenderWindowInteractor>::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<vtkMatrix4x4> 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<vtkMatrix4x4> 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<vtkMatrix4x4> 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<vtkLODActor> &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<vtkActor> &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<vtkProp> &actor)
 {
index 61948f9..b2339c4 100644 (file)
@@ -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<InteractorStyle> style_;
-
-    /** \brief Internal list with actor pointers and name IDs for point clouds. */
-//     cv::Ptr<CloudActorMap> cloud_actor_map_;
-
-    /** \brief Internal list with actor pointers and name IDs for shapes. */
-//     cv::Ptr<ShapeActorMap> shape_actor_map_;
     
     /** \brief Internal list with actor pointers and name IDs for all widget actors */
     cv::Ptr<WidgetActorMap> 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<vtkLODActor> &actor);
-    bool removeActorFromRenderer (const vtkSmartPointer<vtkActor> &actor);
     bool removeActorFromRenderer (const vtkSmartPointer<vtkProp> &actor);
 
-    //void addActorToRenderer (const vtkSmartPointer<vtkProp> &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
index b0b76c4..196ec99 100644 (file)
@@ -40,7 +40,7 @@ cv::viz::Widget cv::viz::Widget::fromPlyFile(const String &file_name)
     reader->SetFileName (file_name.c_str ());
     
     vtkSmartPointer<vtkDataSet> data = reader->GetOutput();
-    CV_Assert(data);
+    CV_Assert("File does not exist or file format is not supported." && data);
 
     vtkSmartPointer<vtkLODActor> actor = vtkSmartPointer<vtkLODActor>::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<vtkMatrix4x4> 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<vtkMatrix4x4> 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<vtkMatrix4x4> 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<cv::viz::Widget3D>()
 {
     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<cv::viz::Widget3D>()
 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<cv::viz::Widget2D>()
 {
     vtkActor2D *actor = vtkActor2D::SafeDownCast(WidgetAccessor::getProp(*this));
-    CV_Assert(actor);
+    CV_Assert("Widget cannot be cast." && actor);
 
     Widget2D widget;
     WidgetAccessor::setProp(widget, actor);