From 9c20e77013312ce43fb959c1054b9f27cb866d3c Mon Sep 17 00:00:00 2001 From: ozantonkal Date: Mon, 5 Aug 2013 18:39:36 +0200 Subject: [PATCH] fix conversion functions to use appropriate vtk function --- modules/viz/include/opencv2/viz/viz3d.hpp | 4 ++-- modules/viz/src/viz3d.cpp | 4 ++-- modules/viz/src/viz3d_impl.cpp | 34 ++++++++++++------------------- modules/viz/src/viz3d_impl.hpp | 4 ++-- 4 files changed, 19 insertions(+), 27 deletions(-) diff --git a/modules/viz/include/opencv2/viz/viz3d.hpp b/modules/viz/include/opencv2/viz/viz3d.hpp index 921eb32..72e3076 100644 --- a/modules/viz/include/opencv2/viz/viz3d.hpp +++ b/modules/viz/include/opencv2/viz/viz3d.hpp @@ -44,8 +44,8 @@ namespace cv Affine3f getViewerPose(); void setViewerPose(const Affine3f &pose); - void convertToWindowCoordinates(const Point3f &pt, Point3f &window_coord); - void converTo3DRay(const Point3f &window_coord, Point3f &origin, Vec3f &direction); + void convertToWindowCoordinates(const Point3d &pt, Point3d &window_coord); + void converTo3DRay(const Point3d &window_coord, Point3d &origin, Vec3d &direction); void spin(); void spinOnce(int time = 1, bool force_redraw = false); diff --git a/modules/viz/src/viz3d.cpp b/modules/viz/src/viz3d.cpp index 9a65740..6908bc8 100644 --- a/modules/viz/src/viz3d.cpp +++ b/modules/viz/src/viz3d.cpp @@ -51,5 +51,5 @@ cv::viz::Camera cv::viz::Viz3d::getCamera() const { return impl_->getCamera(); } void cv::viz::Viz3d::setViewerPose(const Affine3f &pose) { impl_->setViewerPose(pose); } cv::Affine3f cv::viz::Viz3d::getViewerPose() { return impl_->getViewerPose(); } -void cv::viz::Viz3d::convertToWindowCoordinates(const Point3f &pt, Point3f &window_coord) { impl_->convertToWindowCoordinates(pt, window_coord); } -void cv::viz::Viz3d::converTo3DRay(const Point3f &window_coord, Point3f &origin, Vec3f &direction) { impl_->converTo3DRay(window_coord, origin, direction); } \ No newline at end of file +void cv::viz::Viz3d::convertToWindowCoordinates(const Point3d &pt, Point3d &window_coord) { impl_->convertToWindowCoordinates(pt, window_coord); } +void cv::viz::Viz3d::converTo3DRay(const Point3d &window_coord, Point3d &origin, Vec3d &direction) { impl_->converTo3DRay(window_coord, origin, direction); } \ No newline at end of file diff --git a/modules/viz/src/viz3d_impl.cpp b/modules/viz/src/viz3d_impl.cpp index 6bddd02..8dbf1fb 100644 --- a/modules/viz/src/viz3d_impl.cpp +++ b/modules/viz/src/viz3d_impl.cpp @@ -642,32 +642,24 @@ cv::Affine3f cv::viz::Viz3d::VizImpl::getViewerPose () } ///////////////////////////////////////////////////////////////////////////////////////////// -void cv::viz::Viz3d::VizImpl::convertToWindowCoordinates(const Point3f &pt, Point3f &window_coord) +void cv::viz::Viz3d::VizImpl::convertToWindowCoordinates(const Point3d &pt, Point3d &window_coord) { - // Use the built in function of renderer - double point_wcs[3] = {pt.x, pt.y, pt.z}; - renderer_->WorldToView(point_wcs[0], point_wcs[1], point_wcs[2]); - window_coord.x = point_wcs[0]; - window_coord.y = point_wcs[1]; - window_coord.z = point_wcs[2]; + Vec3d window_pt; + vtkInteractorObserver::ComputeWorldToDisplay(renderer_, pt.x, pt.y, pt.z, window_pt.val); + window_coord = window_pt; } ///////////////////////////////////////////////////////////////////////////////////////////// -void cv::viz::Viz3d::VizImpl::converTo3DRay(const Point3f &window_coord, Point3f &origin, Vec3f &direction) -{ - // Use the built in function of renderer - double point_view[3] = {window_coord.x, window_coord.y, window_coord.z}; - renderer_->ViewToWorld(point_view[0], point_view[1], point_view[2]); - +void cv::viz::Viz3d::VizImpl::converTo3DRay(const Point3d &window_coord, Point3d &origin, Vec3d &direction) +{ + Vec4d world_pt; + vtkInteractorObserver::ComputeDisplayToWorld(renderer_, window_coord.x, window_coord.y, window_coord.z, world_pt.val); + vtkCamera &active_camera = *renderer_->GetActiveCamera(); - double *cam_pos = active_camera.GetPosition(); - origin.x = cam_pos[0]; - origin.y = cam_pos[1]; - origin.z = cam_pos[2]; - direction[0] = point_view[0] - cam_pos[0]; - direction[1] = point_view[1] - cam_pos[1]; - direction[2] = point_view[2] - cam_pos[2]; - normalize(direction); + Vec3d cam_pos; + active_camera.GetPosition(cam_pos.val); + origin = cam_pos; + direction = normalize(Vec3d(world_pt.val) - cam_pos); } ///////////////////////////////////////////////////////////////////////////////////////////// diff --git a/modules/viz/src/viz3d_impl.hpp b/modules/viz/src/viz3d_impl.hpp index b0e87f0..d38204a 100644 --- a/modules/viz/src/viz3d_impl.hpp +++ b/modules/viz/src/viz3d_impl.hpp @@ -126,8 +126,8 @@ public: void setViewerPose(const Affine3f &pose); Affine3f getViewerPose(); - void convertToWindowCoordinates(const Point3f &pt, Point3f &window_coord); - void converTo3DRay(const Point3f &window_coord, Point3f &origin, Vec3f &direction); + void convertToWindowCoordinates(const Point3d &pt, Point3d &window_coord); + void converTo3DRay(const Point3d &window_coord, Point3d &origin, Vec3d &direction); -- 2.7.4