From 692d9b3aa7ea266b5143e9704ffe8d6efce8787f Mon Sep 17 00:00:00 2001
From: Radek Oslejsek <oslejsek@fi.muni.cz>
Date: Fri, 19 Mar 2021 18:14:22 +0100
Subject: [PATCH] Fixed initiation of treiangles

---
 .../cz/fidentis/analyst/EfficiencyTests.java    | 17 +++++++++++++++++
 .../analyst/symmetry/SymmetryEstimator.java     |  8 ++++++++
 2 files changed, 25 insertions(+)

diff --git a/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java b/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java
index 22fdd534..8f39e092 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java
@@ -3,6 +3,9 @@ package cz.fidentis.analyst;
 import cz.fidentis.analyst.face.HumanFace;
 import cz.fidentis.analyst.kdtree.KdTree;
 import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.symmetry.Config;
+import cz.fidentis.analyst.symmetry.Plane;
+import cz.fidentis.analyst.symmetry.SymmetryEstimator;
 import cz.fidentis.analyst.visitors.mesh.HausdorffDistance;
 import cz.fidentis.analyst.visitors.mesh.HausdorffDistance.Strategy;
 import java.io.File;
@@ -34,6 +37,8 @@ public class EfficiencyTests {
         face1 = new HumanFace(faceFile2);
         face2 = new HumanFace(faceFile4);
         
+        System.out.println(measureSymmetryPlane(face1, true) + "\tmsec:\tSymmetry plane computation");
+        
         System.out.println(measureKdTreeCreation(face1) + "\tmsec:\tKd-tree creation of first face");
         System.out.println(measureKdTreeCreation(face2) + "\tmsec:\tKd-tree creation of second face");
         
@@ -80,4 +85,16 @@ public class EfficiencyTests {
         return System.currentTimeMillis() - startTime;
     }
     
+    private static long measureSymmetryPlane(HumanFace face, boolean printDetails) {
+        long startTime = System.currentTimeMillis();
+        SymmetryEstimator est = new SymmetryEstimator(face.getMeshModel().getFacets().get(0), new Config());
+        Plane plane = est.getApproxSymmetryPlane(null);
+        long retTime =  System.currentTimeMillis() - startTime;
+        
+        if (printDetails) {
+            System.out.println(plane.getNormal() + ", " + plane.getDistance());
+        }
+        
+        return retTime;
+    }
 }
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 c2a3520f..61a77378 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java
@@ -8,6 +8,7 @@ import cz.fidentis.analyst.mesh.core.MeshFacetImpl;
 import cz.fidentis.analyst.mesh.core.MeshPointImpl;
 import cz.fidentis.analyst.mesh.core.MeshTriangle;
 import cz.fidentis.analyst.visitors.mesh.BoundingBoxVisitor;
+import cz.fidentis.analyst.visitors.mesh.TriangleListVisitor;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -53,6 +54,10 @@ public class SymmetryEstimator {
         for (MeshTriangle tri: f) {
             areas[i++] = computeTriangleVertexAreas(tri);
         }
+        
+        TriangleListVisitor vis = new TriangleListVisitor(false);
+        f.accept(vis);
+        triangles = vis.getTriangles();
     }
     
     /**
@@ -236,6 +241,9 @@ public class SymmetryEstimator {
     }
     
     private Plane computeNewPlane(List<ApproxSymmetryPlane> finalPlanes) {
+        if (finalPlanes.isEmpty()) {
+            return null;
+        }
         double newA = 0, newB = 0, newC = 0, newD = 0;
         Vector3d refDir = finalPlanes.get(0).getNormal();
         for (int i = 0; i < finalPlanes.size(); i++) {
-- 
GitLab