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