From fc39f1de855fdab14905f4bfb3a5b119e3dfe36b Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Tue, 15 Jun 2021 15:27:54 +0200
Subject: [PATCH] [GL/Grid] Reduce MathLib::Point3d dependency.

---
 GeoLib/Grid.h | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/GeoLib/Grid.h b/GeoLib/Grid.h
index eefa8813e95..0d6900a6df8 100644
--- a/GeoLib/Grid.h
+++ b/GeoLib/Grid.h
@@ -14,6 +14,7 @@
 
 #pragma once
 
+#include <array>
 #include <bitset>
 #include <vector>
 
@@ -21,11 +22,9 @@
 
 // GeoLib
 #include "AABB.h"
+#ifndef NDEBUG
 #include "GEOObjects.h"
-
-// MathLib
-#include "MathLib/MathTools.h"
-#include "MathLib/Point3d.h"
+#endif
 
 namespace GeoLib
 {
@@ -255,8 +254,8 @@ Grid<POINT>::getPntVecsOfGridCellsIntersectingCube(P const& center,
                                                    double half_len) const
 {
     std::vector<std::vector<POINT*> const*> pnts;
-    MathLib::Point3d tmp_pnt{{{center[0] - half_len, center[1] - half_len,
-                               center[2] - half_len}}};  // min
+    POINT tmp_pnt{center[0] - half_len, center[1] - half_len,
+                  center[2] - half_len};  // min
     std::array<std::size_t, 3> min_coords(getGridCoords(tmp_pnt));
 
     tmp_pnt[0] = center[0] + half_len;
@@ -542,7 +541,10 @@ POINT* Grid<POINT>::getNearestPoint(P const& pnt) const
         }  // end while
     }      // end else
 
-    double len(std::sqrt(MathLib::sqrDist(pnt, *nearest_pnt)));
+    auto to_eigen = [](auto const& point)
+    { return Eigen::Map<Eigen::Vector3d const>(point.getCoords()); };
+
+    double len((to_eigen(pnt) - to_eigen(*nearest_pnt)).norm());
     // search all other grid cells within the cube with the edge nodes
     std::vector<std::vector<POINT*> const*> vecs_of_pnts(
         getPntVecsOfGridCellsIntersectingCube(pnt, len));
@@ -554,7 +556,8 @@ POINT* Grid<POINT>::getNearestPoint(P const& pnt) const
         const std::size_t n_pnts(pnts.size());
         for (std::size_t k(0); k < n_pnts; k++)
         {
-            const double sqr_dist(MathLib::sqrDist(pnt, *pnts[k]));
+            const double sqr_dist(
+                (to_eigen(pnt) - to_eigen(*pnts[k])).squaredNorm());
             if (sqr_dist < sqr_min_dist)
             {
                 sqr_min_dist = sqr_dist;
@@ -658,12 +661,16 @@ bool Grid<POINT>::calcNearestPointInGridCell(
     if (pnts.empty())
         return false;
 
+    auto to_eigen = [](auto const& point)
+    { return Eigen::Map<Eigen::Vector3d const>(point.getCoords()); };
+
     const std::size_t n_pnts(pnts.size());
-    sqr_min_dist = MathLib::sqrDist(*pnts[0], pnt);
+    sqr_min_dist = (to_eigen(*pnts[0]) - to_eigen(pnt)).squaredNorm();
     nearest_pnt = pnts[0];
     for (std::size_t i(1); i < n_pnts; i++)
     {
-        const double sqr_dist(MathLib::sqrDist(*pnts[i], pnt));
+        const double sqr_dist(
+            (to_eigen(*pnts[i]) - to_eigen(pnt)).squaredNorm());
         if (sqr_dist < sqr_min_dist)
         {
             sqr_min_dist = sqr_dist;
@@ -683,12 +690,15 @@ std::vector<std::size_t> Grid<POINT>::getPointsInEpsilonEnvironment(
 
     double const sqr_eps(eps * eps);
 
+    auto to_eigen = [](auto const& point)
+    { return Eigen::Map<Eigen::Vector3d const>(point.getCoords()); };
+
     std::vector<std::size_t> pnts;
     for (auto vec : vec_pnts)
     {
         for (auto const p : *vec)
         {
-            if (MathLib::sqrDist(*p, pnt) <= sqr_eps)
+            if ((to_eigen(*p) - to_eigen(pnt)).squaredNorm() <= sqr_eps)
             {
                 pnts.push_back(p->getID());
             }
-- 
GitLab