From dac27c99138ac2a578bbf2fd650b18b0704ccf5c Mon Sep 17 00:00:00 2001 From: Anatoly Baksheev Date: Sat, 11 Jan 2014 23:07:30 +0400 Subject: [PATCH] refactored arrow --- modules/viz/src/shapes.cpp | 17 ++++------------- modules/viz/test/tests_simple.cpp | 11 +++++++++++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/modules/viz/src/shapes.cpp b/modules/viz/src/shapes.cpp index 611b1c3f95..6e0371a3fe 100644 --- a/modules/viz/src/shapes.cpp +++ b/modules/viz/src/shapes.cpp @@ -192,22 +192,13 @@ cv::viz::WArrow::WArrow(const Point3d& pt1, const Point3d& pt2, double thickness Vec3d zvec = normalized(xvec.cross(arbitrary)); Vec3d yvec = zvec.cross(xvec); - Affine3d pose = makeTransformToGlobal(xvec, yvec, zvec); + Matx33d R = makeTransformToGlobal(xvec, yvec, zvec).rotation(); + Affine3d transform_with_scale(R * length, startPoint); - // Apply the transforms - vtkSmartPointer transform = vtkSmartPointer::New(); - transform->Translate(startPoint.val); - transform->Concatenate(vtkmatrix(pose.matrix)); - transform->Scale(length, length, length); - - // Transform the polydata - vtkSmartPointer transformPD = vtkSmartPointer::New(); - transformPD->SetTransform(transform); - transformPD->SetInputConnection(arrow_source->GetOutputPort()); - transformPD->Update(); + vtkSmartPointer polydata = VtkUtils::TransformPolydata(arrow_source->GetOutputPort(), transform_with_scale); vtkSmartPointer mapper = vtkSmartPointer::New(); - VtkUtils::SetInputData(mapper, transformPD->GetOutput()); + VtkUtils::SetInputData(mapper, polydata); vtkSmartPointer actor = vtkSmartPointer::New(); actor->SetMapper(mapper); diff --git a/modules/viz/test/tests_simple.cpp b/modules/viz/test/tests_simple.cpp index bb3f2009eb..4d9b1cfd13 100644 --- a/modules/viz/test/tests_simple.cpp +++ b/modules/viz/test/tests_simple.cpp @@ -277,6 +277,8 @@ TEST(Viz, DISABLED_show_image_3d) viz.showWidget("arr1", WArrow(Vec3d(-0.5, -0.5, 0.0), Vec3d(0.2, 0.2, 0.0), 0.009, Color::raspberry())); viz.showWidget("img1", WImage3D(gray, Size2d(1.0, 1.0), Vec3d(-0.5, -0.5, 0.0), Vec3d(1.0, 1.0, 0.0), Vec3d(0.0, 1.0, 0.0))); + viz.showWidget("arr3", WArrow(Vec3d::all(-0.5), Vec3d::all(0.5), 0.009, Color::raspberry())); + int i = 0; while(!viz.wasStopped()) { @@ -286,6 +288,15 @@ TEST(Viz, DISABLED_show_image_3d) //viz.spin(); } +TEST(Viz, show_simple_widgets) +{ + Viz3d viz("show_simple_widgets"); + viz.showWidget("coos", WCoordinateSystem()); + viz.showWidget("cube", WCube()); + viz.showWidget("arr3", WArrow(Vec3d::all(-0.5), Vec3d::all(0.5), 0.009, Color::raspberry())); + viz.spin(); +} + TEST(Viz, DISABLED_spin_twice_____________________________TODO_UI_BUG) { Mesh mesh = Mesh::load(get_dragon_ply_file_path());