From d80a965f97460a035a60c88fe2db0f6be5b363be Mon Sep 17 00:00:00 2001 From: ozantonkal Date: Thu, 4 Jul 2013 16:32:06 +0300 Subject: [PATCH] sphere widget implementation --- modules/viz/include/opencv2/viz/widgets.hpp | 6 ++++++ modules/viz/src/simple_widgets.cpp | 22 +++++++++++++++++++++ modules/viz/test/test_viz3d.cpp | 8 ++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/modules/viz/include/opencv2/viz/widgets.hpp b/modules/viz/include/opencv2/viz/widgets.hpp index fc2660d7bb..69c2c56241 100644 --- a/modules/viz/include/opencv2/viz/widgets.hpp +++ b/modules/viz/include/opencv2/viz/widgets.hpp @@ -49,6 +49,12 @@ namespace temp_viz PlaneWidget(const Vec4f& coefs, const Color &color = Color::white()); PlaneWidget(const Vec4f& coefs, const Point3f& pt, const Color &color = Color::white()); }; + + class CV_EXPORTS SphereWidget : public Widget + { + public: + SphereWidget(const cv::Point3f ¢er, float radius, int sphere_resolution = 10, const Color &color = Color::white()); + }; } diff --git a/modules/viz/src/simple_widgets.cpp b/modules/viz/src/simple_widgets.cpp index 27e4789647..dcca437baa 100644 --- a/modules/viz/src/simple_widgets.cpp +++ b/modules/viz/src/simple_widgets.cpp @@ -66,5 +66,27 @@ temp_viz::PlaneWidget::PlaneWidget(const Vec4f& coefs, const Point3f& pt, const vtkSmartPointer actor = WidgetAccessor::getActor(*this); actor->SetMapper(mapper); + setColor(color); +} + +/////////////////////////////////////////////////////////////////////////////////////////////// +/// sphere widget implementation + +temp_viz::SphereWidget::SphereWidget(const cv::Point3f ¢er, float radius, int sphere_resolution, const Color &color) +{ + vtkSmartPointer sphere = vtkSmartPointer::New (); + sphere->SetRadius (radius); + sphere->SetCenter (center.x, center.y, center.z); + sphere->SetPhiResolution (sphere_resolution); + sphere->SetThetaResolution (sphere_resolution); + sphere->LatLongTessellationOff (); + sphere->Update (); + + vtkSmartPointer mapper = vtkSmartPointer::New (); + mapper->SetInput(sphere->GetOutput ()); + + vtkSmartPointer actor = WidgetAccessor::getActor(*this); + actor->SetMapper(mapper); + setColor(color); } \ No newline at end of file diff --git a/modules/viz/test/test_viz3d.cpp b/modules/viz/test/test_viz3d.cpp index f3ddfc7e31..cf666d8023 100644 --- a/modules/viz/test/test_viz3d.cpp +++ b/modules/viz/test/test_viz3d.cpp @@ -92,12 +92,14 @@ TEST(Viz_viz3d, accuracy) int col_green = 0; int col_red = 0; v.showCircle("circle1", cv::Point3f(0,0,0), 1.0, temp_viz::Color(0,255,0)); - v.showSphere("sphere1", cv::Point3f(0,0,0), 0.5, temp_viz::Color(0,0,255)); v.showArrow("arrow1", cv::Point3f(0,0,0), cv::Point3f(1,1,1), temp_viz::Color(255,0,0)); temp_viz::LineWidget lw(cv::Point3f(0.0,0.0,0.0), cv::Point3f(1.0,1.0,1.0), temp_viz::Color(0,255,0)); temp_viz::PlaneWidget pw(cv::Vec4f(0.0,1.0,2.0,3.0)); + temp_viz::SphereWidget sw(cv::Point3f(0,0,0), 0.5); + v.showWidget("line", lw); v.showWidget("plane", pw); + v.showWidget("sphere", sw); temp_viz::LineWidget lw2 = lw; @@ -114,13 +116,15 @@ TEST(Viz_viz3d, accuracy) // v.showCube("cube1", cv::Point3f(pos_x, pos_y, pos_z), cv::Point3f(pos_x+0.5, pos_y+0.5, pos_z+0.5), temp_viz::Color(255,150,50)); // v.showCylinder("cylinder1", cv::Point3f(0,0,0), cv::Point3f(pos_x, 1.0, 1.0), 0.5, 5*pos_x+3, temp_viz::Color(0,255,0)); v.setShapePose("circle1", cloudPosition); - v.setShapePose("sphere1", cloudPosition); v.setShapePose("arrow1", cloudPosition); lw2.setColor(temp_viz::Color(col_blue, col_green, col_red)); lw.setLineWidth(lw.getLineWidth()+pos_x * 10); pw.setColor(temp_viz::Color(col_blue, col_green, col_red)); + sw.setPose(cloudPosition); + pw.setPose(cloudPosition); + angle_x += 0.1f; angle_y -= 0.1f; angle_z += 0.1f;