diff --git a/Comparison/src/main/java/cz/fidentis/analyst/visitors/face/HausdorffDistancePrioritized.java b/Comparison/src/main/java/cz/fidentis/analyst/visitors/face/HausdorffDistancePrioritized.java index de2c96b11752453c188e9b6d6cfc26e1321309c5..9425d55f9afe2252dd4049d56106947325272520 100644 --- a/Comparison/src/main/java/cz/fidentis/analyst/visitors/face/HausdorffDistancePrioritized.java +++ b/Comparison/src/main/java/cz/fidentis/analyst/visitors/face/HausdorffDistancePrioritized.java @@ -15,8 +15,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import javax.vecmath.Point3d; /** @@ -222,30 +220,11 @@ public class HausdorffDistancePrioritized extends HumanFaceVisitor { @Override public void visitHumanFace(HumanFace humanFace) { - final FeaturePoint featurePoint = humanFace.getFeaturePoints().get(featurePointType.getType()); - final List<MeshFacet> facets = humanFace.getMeshModel().getFacets(); - - final ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + humanFace.getMeshModel().compute(distanceVisitor, inParallel()); + final FeaturePoint featurePoint = humanFace.getFeaturePoints().get(featurePointType.getType()); final PrioritySphere priorityVisitor = new PrioritySphere(featurePoint.getPosition(), 1 /*TODO TEMPORARY - sphere radius needs to be computed dynamically*/); - for (final MeshFacet comparedFacet: facets) { // For each mesh facet of the visited human face - if (inParallel() && distanceVisitor.isThreadSafe()) { - executor.execute(() -> comparedFacet.accept(distanceVisitor)); // Fork and continue - } else { - comparedFacet.accept(distanceVisitor); // Process immediately - } - if (inParallel() && priorityVisitor.isThreadSafe()) { - executor.execute(() -> comparedFacet.accept(priorityVisitor)); // Fork and continue - } else { - comparedFacet.accept(priorityVisitor); // Proces immediately - } - // Visitors store results into their internal structure - } - - if (inParallel()) { - executor.shutdown(); - while (!executor.isTerminated()){} // Wait until all computations are finished - } + humanFace.getMeshModel().compute(priorityVisitor, inParallel()); synchronized(this) { // Retrieve results from the visitor's internal structure