From c5d798de9d67913888cf33a8826d25005b43baf6 Mon Sep 17 00:00:00 2001 From: zaza <zain.selman@rwth-aachen.de> Date: Mon, 26 Oct 2020 09:22:22 +0100 Subject: [PATCH] still doesnt work --- PlanePlugin.cc | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/PlanePlugin.cc b/PlanePlugin.cc index 91874c8..e82e0d6 100644 --- a/PlanePlugin.cc +++ b/PlanePlugin.cc @@ -140,9 +140,10 @@ void PlanePlugin::slotMouseEvent(QMouseEvent *_event) { det = edge1 | pvec; constexpr double EPSILON = std::numeric_limits<double>::epsilon() * 1e2; - if (det > -EPSILON && det < EPSILON) + if (det > -EPSILON && det < EPSILON) { + std::cerr << "det within eps!" << std::endl; return false; - + } inv_det = 1.f / det; tvec = origin - p; alpha = (tvec | pvec) * inv_det; @@ -216,13 +217,22 @@ void PlanePlugin::slotMouseEvent(QMouseEvent *_event) { /// compute intersection { - const auto ray_length = 1e6; - const auto ray_end = origin + (viewDirection_ * ray_length); + double u = -1, v = -1, w = -1; + // const auto ray_length = 1e6; + // const auto ray_end = origin + (viewDirection_ * + // ray_length); const auto intersect = - ACG::Geometry::edgeConvexPolygonIntersection( - corners, origin, ray_end, result_); - if (!intersect) + rayPlaneIntersection(origin, viewDirection_, corners[0], + corners[1], corners[2], u, v); + // const auto intersect = + // ACG::Geometry::edgeConvexPolygonIntersection( + // corners, origin, ray_end, result_); + if (!intersect) { + std::cerr << "no intersection" << std::endl; return; + } + w = 1 - (u + v); + result_ = (w * corners[0]) + (u * corners[1]) + (v * corners[2]); } // std::cerr << "intersection found at: " << result_ << @@ -299,6 +309,9 @@ void PlanePlugin::slotMouseEvent(QMouseEvent *_event) { currWorldPos_ = (w * p0) + (u * p1) + (v * p2); } + std::cerr << "click pos: " << result_ << std::endl; + std::cerr << "drag pos: " << currWorldPos_ << std::endl; + /// update vector in worldspace const auto worldSpaceUpdate = (currWorldPos_ - result_) / 2.; @@ -309,7 +322,7 @@ void PlanePlugin::slotMouseEvent(QMouseEvent *_event) { const auto distClickOrigin = result_; /// 1. translate to origin - plane.position -= initPos; + // plane.position -= initPos; /*/// 2. rotate to be planar // const auto n0 = ACG::Vec3f{plane.normal}; @@ -323,11 +336,10 @@ void PlanePlugin::slotMouseEvent(QMouseEvent *_event) { /// 3. scale by half updates length auto transformation = ACG::GLMatrixf(ACG::Matrix4x4f()); transformation.identity(); // init - auto scale = - ACG::Vec3f{(worldSpaceUpdate + distClickOrigin) / distClickOrigin}; + auto scale = (worldSpaceUpdate + distClickOrigin) / distClickOrigin; scale[2] = 1; /// we dont do anything in z-dir - transformation.scale(scale); + transformation.scale(scale[0], scale[1], scale[2]); // const auto xscale = scale[0] * plane.xDirection.length(); // const auto yscale = scale[1] * plane.yDirection.length(); // plane.setSize(xscale, yscale); @@ -336,11 +348,12 @@ void PlanePlugin::slotMouseEvent(QMouseEvent *_event) { // << " ydir: " << plane.yDirection << std::endl; // std::cerr << "initial click pos: " << distClickOrigin << // std::endl; std::cerr << "current click pos: " << currWorldPos_ - // << std::endl; std::cerr << "scale: " << scale << std::endl; + // << std::endl; + std::cerr << "scale: " << scale << std::endl; std::cerr << "update: " << worldSpaceUpdate << std::endl; plane.transform(transformation); - plane.position += initPos; + // plane.position += initPos; plane.position += worldSpaceUpdate; curPlane_->plane() = plane; /// overwrite plane -- GitLab