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;
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);
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);
actor->SetMapper(mapper);
actor->SetPosition(position.x, position.y, position.z);
actor->SetScale(text_scale);
+ actor->GetProperty()->LightingOff();
WidgetAccessor::setProp(*this, actor);
}
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
///////////////////////////////////////////////////////////////////////////////////////////////
/// 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);
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()));
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();
}