addeed test for text 2d/3d
authorAnatoly Baksheev <no@email>
Sat, 11 Jan 2014 20:31:45 +0000 (00:31 +0400)
committerAnatoly Baksheev <no@email>
Sun, 19 Jan 2014 14:38:56 +0000 (18:38 +0400)
modules/viz/include/opencv2/viz/widgets.hpp
modules/viz/src/shapes.cpp
modules/viz/test/tests_simple.cpp

index f745e54..75f9670 100644 (file)
@@ -206,7 +206,7 @@ namespace cv
         class CV_EXPORTS WText : public Widget2D
         {
         public:
-            WText(const String &text, const Point2i &pos, int font_size = 20, const Color &color = Color::white());
+            WText(const String &text, const Point &pos, int font_size = 20, const Color &color = Color::white());
 
             void setText(const String &text);
             String getText() const;
@@ -215,6 +215,7 @@ namespace cv
         class CV_EXPORTS WText3D : public Widget3D
         {
         public:
+            //! creates text label in 3D. If face_camera = false, text plane normal is oriented along z-axis. Use widget pose to orient it properly
             WText3D(const String &text, const Point3d &position, double text_scale = 1., bool face_camera = true, const Color &color = Color::white());
 
             void setText(const String &text);
index 5e76286..2e36a6d 100644 (file)
@@ -135,8 +135,12 @@ cv::viz::WPlane::WPlane(const Vec4d& coefs, double size, const Color &color)
     Vec3d p_center;
     plane->GetOrigin(p_center.val);
 
+
+    vtkSmartPointer<vtkTransformPolyDataFilter> filter = PlaneUtils::setSize(p_center, plane->GetOutputPort(), size);
+    filter->Update();
+
     vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
-    mapper->SetInputConnection(PlaneUtils::setSize(p_center, plane->GetOutputPort(), size)->GetOutputPort());
+    VtkUtils::SetInputData(mapper, filter->GetOutput());
 
     vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
     actor->SetMapper(mapper);
@@ -571,6 +575,7 @@ cv::viz::WText3D::WText3D(const String &text, const Point3d &position, double te
         actor->SetMapper(mapper);
         actor->SetPosition(position.x, position.y, position.z);
         actor->SetScale(text_scale);
+        actor->GetProperty()->LightingOff();
         WidgetAccessor::setProp(*this, actor);
     }
 
@@ -579,7 +584,7 @@ cv::viz::WText3D::WText3D(const String &text, const Point3d &position, double te
 
 void cv::viz::WText3D::setText(const String &text)
 {
-    vtkFollower *actor = vtkFollower::SafeDownCast(WidgetAccessor::getProp(*this));
+    vtkActor *actor = vtkActor::SafeDownCast(WidgetAccessor::getProp(*this));
     CV_Assert("This widget does not support text." && actor);
 
     // Update text source
@@ -613,7 +618,7 @@ template<> cv::viz::WText3D cv::viz::Widget::cast<cv::viz::WText3D>()
 ///////////////////////////////////////////////////////////////////////////////////////////////
 /// text widget implementation
 
-cv::viz::WText::WText(const String &text, const Point2i &pos, int font_size, const Color &color)
+cv::viz::WText::WText(const String &text, const Point &pos, int font_size, const Color &color)
 {
     vtkSmartPointer<vtkTextActor> actor = vtkSmartPointer<vtkTextActor>::New();
     actor->SetPosition(pos.x, pos.y);
index 58e909f..fe5cf33 100644 (file)
@@ -291,6 +291,7 @@ TEST(Viz, DISABLED_show_image_3d)
 TEST(Viz, show_simple_widgets)
 {
     Viz3d viz("show_simple_widgets");
+
     viz.showWidget("coos", WCoordinateSystem());
     viz.showWidget("cube", WCube());
     viz.showWidget("cub0", WCube(Vec3d::all(-1.0), Vec3d::all(-0.5), false, Color::indigo()));
@@ -301,6 +302,26 @@ TEST(Viz, show_simple_widgets)
     viz.showWidget("cyl0", WCylinder(Vec3d(-0.5, 0.5, -0.5), Vec3d(0.5, 0.5, -0.5), 0.125, 30, Color::brown()));
     viz.showWidget("con0", WCone(0.25, 0.125, 6, Color::azure()));
     viz.showWidget("con1", WCone(0.125, Point3d(0.5, -0.5, 0.5), Point3d(0.5, -1.0, 0.5), 6, Color::turquoise()));
+
+    viz.showWidget("text2d", WText("Simple text", Point(20, 20), 20, Color::green()));
+
+    viz.showWidget("text3d", WText3D("Simple 3D text", Point3d( 0.5,  0.5, 0.5), 0.125, false, Color::green()));
+
+    viz.spinOnce(1500, true);
+    viz.getWidget("text2d").cast<WText>().setText("New simple text");
+    viz.getWidget("text3d").cast<WText3D>().setText("Updated text 3D");
+    viz.spin();
+}
+
+TEST(Viz, show_follower)
+{
+    Viz3d viz("show_follower");
+
+    viz.showWidget("coos", WCoordinateSystem());
+    viz.showWidget("cube", WCube());
+    viz.showWidget("t3d_2", WText3D("Simple 3D follower", Point3d(-0.5, -0.5, 0.5), 0.125, true,  Color::green()));
+    viz.spinOnce(1500, true);
+    //viz.getWidget("t3d_2").cast<WText3D>().setText("Updated follower 3D");
     viz.spin();
 }