diff --git a/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java b/Comparison/src/main/java/cz/fidentis/analyst/EfficiencyTests.java index 22fdd534b41afbdd804e395bb5e9708a7013608c..8f39e0925a8482bbfec40b97521d51689a30aedf 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 c2a3520f98e4110a4bbff851cc9c87ac9d2de471..61a773781b87b698bc3790d0c6f721f7248209e3 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++) {