From 3e2caaac7b0808a6fb3c8385715a47cbf11dc1dd Mon Sep 17 00:00:00 2001
From: Radek Oslejsek <oslejsek@fi.muni.cz>
Date: Mon, 22 Mar 2021 17:38:26 +0100
Subject: [PATCH] Symmetry estimator extended with a constructor enabling to
 reuse existing curvatures

---
 .../cz/fidentis/analyst/EfficiencyTests.java  |  2 ++
 .../analyst/symmetry/SymmetryEstimator.java   | 27 ++++++++++++++++---
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java b/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java
index decf7d23..d4df83fd 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java
@@ -51,6 +51,7 @@ public class EfficiencyTests {
         printSymmetryPlane(face1, false, printDetails, false);
         printSymmetryPlane(face1, false, printDetails, true);
         
+        /*
         System.out.println();
         System.out.println(measureKdTreeCreation(face1) + "\tmsec:\tKd-tree creation of first face");
         System.out.println(measureKdTreeCreation(face2) + "\tmsec:\tKd-tree creation of second face");
@@ -66,6 +67,7 @@ public class EfficiencyTests {
         testAndPrint(face1, new HausdorffDistance(face2.getMeshModel(), Strategy.POINT_TO_POINT_ABSOLUTE, false, false, true), printDetails);
         testAndPrint(face1, new HausdorffDistance(face2.getMeshModel(), Strategy.POINT_TO_POINT, relativeDist, false, true), printDetails);
         testAndPrint(face1, new HausdorffDistance(face2.getMeshModel(), Strategy.POINT_TO_TRIANGLE_APPROXIMATE, relativeDist, false, true), printDetails);
+        */
     }
     
     protected static void testAndPrint(HumanFace face, HausdorffDistance vis, boolean printDetails) {
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java
index 2808c115..def09958 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java
@@ -37,7 +37,6 @@ public class SymmetryEstimator {
     
     private final MeshFacet facet;
     private final Config config;
-    private final boolean maxCurvatureAlg;
     
     // results:
     private List<Double> curvatures;
@@ -63,7 +62,30 @@ public class SymmetryEstimator {
         }
         this.facet = facet;
         this.config = config;
-        this.maxCurvatureAlg = maxCurvatureAlg;
+        this.curvatures = calculateCurvatures(facet, maxCurvatureAlg);
+    }
+    
+    /**
+     * Constructor.
+     * 
+     * @param facet Mesh facet for which the symmetry plane is calculated
+     * @param config Algorighm options
+     * @param curvatures Precomputed curvature values. Must not be null or empty.
+     * @throws IllegalArgumentException if some input paramter is missing
+     */
+    public SymmetryEstimator(MeshFacet facet, Config config, List<Double> curvatures) {
+        if (facet == null) {
+            throw new IllegalArgumentException("facet");
+        }
+        if (config == null) {
+            throw new IllegalArgumentException("config");
+        }
+        if (curvatures == null || curvatures.isEmpty()) {
+            throw new IllegalArgumentException("curvatures");
+        }
+        this.facet = facet;
+        this.config = config;
+        this.curvatures = curvatures;
     }
     
     /**
@@ -74,7 +96,6 @@ public class SymmetryEstimator {
     public void calculateSymmetryPlane(boolean concurrently) {
         List<Plane> planes = new ArrayList<>();
         
-        curvatures = calculateCurvatures(facet, maxCurvatureAlg);
         final SignificantPoints sigPoints = new SignificantPoints(curvatures, config.getSignificantPointCount());
         sigPoints.cacheData(facet);
         final double maxDistance = calculateMaxRelativeDistance(facet, config);
-- 
GitLab