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