From 33dd527925a8b44886ff4fee6b84c6e7335e370c Mon Sep 17 00:00:00 2001
From: Radek Oslejsek <oslejsek@fi.muni.cz>
Date: Sat, 20 Feb 2021 08:49:10 +0100
Subject: [PATCH] Code cleaning

---
 .../analyst/comparison/ClosestVertices.java   |  40 --
 .../analyst/comparison/Comparison.java        |  95 -----
 .../analyst/comparison/HausdorffDistance.java | 359 ------------------
 .../analyst/comparison/Registration.java      |  27 --
 .../comparison/RegistrationMethod.java        |   8 -
 5 files changed, 529 deletions(-)
 delete mode 100644 Comparison/src/main/java/cz/fidentis/analyst/comparison/ClosestVertices.java
 delete mode 100644 Comparison/src/main/java/cz/fidentis/analyst/comparison/Comparison.java
 delete mode 100644 Comparison/src/main/java/cz/fidentis/analyst/comparison/HausdorffDistance.java
 delete mode 100644 Comparison/src/main/java/cz/fidentis/analyst/comparison/Registration.java
 delete mode 100644 Comparison/src/main/java/cz/fidentis/analyst/comparison/RegistrationMethod.java

diff --git a/Comparison/src/main/java/cz/fidentis/analyst/comparison/ClosestVertices.java b/Comparison/src/main/java/cz/fidentis/analyst/comparison/ClosestVertices.java
deleted file mode 100644
index 76142ad7..00000000
--- a/Comparison/src/main/java/cz/fidentis/analyst/comparison/ClosestVertices.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cz.fidentis.analyst.comparison;
-
-import cz.fidentis.analyst.mesh.core.MeshPoint;
-
-/**
- * The pair of closest vertices and their distance.
- * 
- * @author Matej Lukes
- */
-public class ClosestVertices {
-    
-    private MeshPoint firstVertex;
-    private MeshPoint secondVertex;
-    private double distance;
-
-    /**
-     * Constructor.
-     * 
-     * @param firstVertex Firt vertex of the pair
-     * @param secondVertex Second vertex of the pair
-     * @param distance Distance
-     */
-    public ClosestVertices(MeshPoint firstVertex, MeshPoint secondVertex, double distance) {
-        this.firstVertex = firstVertex;
-        this.secondVertex = secondVertex;
-        this.distance = distance;
-    }
-
-    public MeshPoint getFirstVertex() {
-        return firstVertex;
-    }
-
-    public MeshPoint getSecondVertex() {
-        return secondVertex;
-    }
-
-    public double getDistance() {
-        return distance;
-    }
-}
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/comparison/Comparison.java b/Comparison/src/main/java/cz/fidentis/analyst/comparison/Comparison.java
deleted file mode 100644
index a7ce1c30..00000000
--- a/Comparison/src/main/java/cz/fidentis/analyst/comparison/Comparison.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package cz.fidentis.analyst.comparison;
-
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-import cz.fidentis.analyst.mesh.io.MeshObjLoader;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-
-/**
- * @author Matej Lukes
- */
-public class Comparison {
-    private HausdorffDistance hausdorffDistance;
-
-    private MeshFacet mainFacet;
-    private MeshFacet comparedFacet;
-
-    /**
-     * Asynchronously loads main meshModel
-     *
-     * @param path path to meshModel file
-     * @return CompletableFuture
-     */
-    public CompletableFuture loadMainModel(String path) {
-
-        return CompletableFuture.runAsync(() -> {
-            try {
-                mainFacet = MeshObjLoader.read(new File(path)).getFacets().get(1);
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        });
-    }
-
-    /**
-     * Asynchronously loads compared meshModel
-     *
-     * @param path path to meshModel file
-     * @return CompletableFuture
-     */
-    public CompletableFuture loadComparedModel(String path) {
-        return CompletableFuture.runAsync(() -> {
-            try {
-                comparedFacet = MeshObjLoader.read(new File(path)).getFacets().get(1);
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        });
-    }
-
-    /**
-     * Asynchronously registers compared meshFacet to main meshFacet
-     *
-     * @param method registration method
-     * @return CompletableFuture
-     */
-    public CompletableFuture register(RegistrationMethod method) {
-        return CompletableFuture.runAsync(() -> comparedFacet = Registration
-                .register(mainFacet, comparedFacet, method));
-    }
-
-    /**
-     * Asynchronously compares MeshFacets from vertices to vertices
-     *
-     * @return list containing vertex from first facet, closest vertex to it from second facet, distance
-     */
-    public CompletableFuture<List<ClosestVertices>> compareHausdorffDistanceToVertices() {
-        hausdorffDistance = new HausdorffDistance(mainFacet, comparedFacet);
-        return CompletableFuture.supplyAsync(() -> hausdorffDistance.calculateHausdorffDistanceToVertices());
-    }
-
-    /**
-     * Asynchronously compares MeshFacets from vertices to any point on mesh
-     *
-     * @return list containing vertex from first facet, closest point to it from second facet, distance
-     */
-    public CompletableFuture<List<ClosestVertices>> compareHausdorffDistanceToMesh() {
-        hausdorffDistance = new HausdorffDistance(mainFacet, comparedFacet);
-        return CompletableFuture.supplyAsync(() -> hausdorffDistance.calculateHausdorffDistanceToMesh());
-    }
-
-    /**
-     * returns progress percentage
-     *
-     * @return progress percentage
-     */
-    public double getComparisonProgress() {
-        if (hausdorffDistance == null) {
-            return -1;
-        }
-        return hausdorffDistance.getProgressPercentage();
-    }
-}
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/comparison/HausdorffDistance.java b/Comparison/src/main/java/cz/fidentis/analyst/comparison/HausdorffDistance.java
deleted file mode 100644
index f63122bd..00000000
--- a/Comparison/src/main/java/cz/fidentis/analyst/comparison/HausdorffDistance.java
+++ /dev/null
@@ -1,359 +0,0 @@
-package cz.fidentis.analyst.comparison;
-
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-import cz.fidentis.analyst.mesh.core.MeshPoint;
-import cz.fidentis.analyst.mesh.core.MeshPointImpl;
-import cz.fidentis.analyst.mesh.core.MeshTriangle;
-import cz.fidentis.analyst.mesh.visitors.TriangleListVisitor;
-
-import javax.vecmath.Vector3d;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
-
-/**
- * @author Matej Lukes
- */
-public class HausdorffDistance {
-    
-    private MeshFacet mainFacet;
-    private MeshFacet comparedFacet;
-
-    private AtomicInteger progress = new AtomicInteger();
-    private int numberOfVertices;
-
-    /**
-     * @param mainFacet     main MeshFacet
-     * @param comparedFacet compared MeshFacet
-     */
-    public HausdorffDistance(MeshFacet mainFacet, MeshFacet comparedFacet) {
-        this.mainFacet = mainFacet;
-        this.comparedFacet = comparedFacet;
-        this.numberOfVertices = mainFacet.getNumberOfVertices();
-    }
-
-    /**
-     * returns progress percentage
-     *
-     * @return progress
-     */
-    public double getProgressPercentage() {
-        return ((double) progress.get() / numberOfVertices) * 100;
-    }
-
-    /**
-     * Finds the nearest vertex on the second facet.
-     *
-     * @param vertex vertex from
-     * @return vertex, nearest vertex from second facet, distance
-     */
-    private ClosestVertices getNearestVertex(MeshPoint vertex) {
-        Optional<Pair<MeshPoint, Double>> closestVertexAndDistance = comparedFacet.getVertices().parallelStream()
-                .map((meshPoint) -> new Pair<>(meshPoint, getDistanceBetweenPoints(vertex, meshPoint.getPosition())))
-                .max((Comparator.comparingDouble(Pair::getValue)));
-        return closestVertexAndDistance.map(vector3dDoublePair -> new ClosestVertices(vertex,
-                vector3dDoublePair.getKey(),
-                vector3dDoublePair.getValue())).orElse(null);
-    }
-
-    /**
-     * returns distance between two points
-     *
-     * @param point1 first point
-     * @param point2 second point
-     * @return distance
-     */
-    private double getDistanceBetweenPoints(MeshPoint point1, Vector3d point2) {
-        Vector3d helperVector = new Vector3d();
-        helperVector.sub(point1.getPosition(), point2);
-        return Math.signum(helperVector.dot(point1.getNormal())) * helperVector.length();
-    }
-
-    /**
-     * calculates Hausdorff Distance to the nearest vertex from second facet for each vertex in first facet
-     * this implementation uses executor
-     *
-     * @return list containing vertex from first facet, closest vertex to it from second facet, distance
-     */
-    public List<ClosestVertices> calculateHausdorffDistanceToVertices() {
-        progress.set(0);
-        int numberOfVertices = mainFacet.getNumberOfVertices();
-        List<Future<ClosestVertices>> closestVerticesFutures = new ArrayList<>(numberOfVertices);
-        ExecutorService executor = Executors.newCachedThreadPool();
-
-        for (final MeshPoint vertex : mainFacet.getVertices()) {
-            closestVerticesFutures.add(executor.submit(() -> {
-                ClosestVertices result = getNearestVertex(vertex);
-                progress.addAndGet(1);
-                return result;
-            }));
-        }
-
-        List<ClosestVertices> closestVertices = new ArrayList<>(numberOfVertices);
-        for (Future<ClosestVertices> future :
-                closestVerticesFutures) {
-            executor.submit(() -> {
-                try {
-                    ClosestVertices result = future.get();
-                    synchronized (closestVertices) {
-                        closestVertices.add(result);
-                    }
-                } catch (InterruptedException | ExecutionException e) {
-                    e.printStackTrace();
-                }
-            });
-        }
-
-        executor.shutdown();
-        return closestVertices;
-    }
-
-    /**
-     * calculates Hausdorff Distance to the nearest vertex from second facet for each vertex in first facet
-     * this implementation uses parallel streams
-     *
-     * @return list containing vertex from first facet, closest vertex to it from second facet, distance
-     */
-    public List<ClosestVertices> calculateHausdorffDistanceToVertices2() {
-        progress.set(0);
-        return mainFacet.getVertices().parallelStream()
-                .map((vertex) -> {
-                    ClosestVertices result = getNearestVertex(vertex);
-                    progress.addAndGet(1);
-                    return result;
-                })
-                .collect(Collectors.toList());
-    }
-
-    /**
-     * calculates Hausdorff Distance to the nearest point on second facet for each vertex
-     * this implementation uses executor
-     *
-     * @return list containing vertex from first facet, closest point to it from second facet, distance
-     */
-    public List<ClosestVertices> calculateHausdorffDistanceToMesh() {
-        progress.set(0);
-        int numberOfVertices = mainFacet.getNumberOfVertices();
-        List<Future<ClosestVertices>> closestPointsFutures = new ArrayList<>(numberOfVertices);
-        ExecutorService executor = Executors.newCachedThreadPool();
-
-        for (final MeshPoint vertex : mainFacet.getVertices()) {
-            closestPointsFutures.add(executor.submit(() -> {
-                ClosestVertices result = calculateNearestPointOnMesh(vertex,
-                        comparedFacet.getCornerTable()
-                                .getTriangleIndexesByVertexIndex(comparedFacet.getVertices()
-                                        .indexOf(getNearestVertex(vertex)
-                                                .getSecondVertex())));
-                progress.addAndGet(1);
-                return result;
-            }));
-        }
-
-        List<ClosestVertices> closestVertices = new ArrayList<>(numberOfVertices);
-        for (Future<ClosestVertices> future : closestPointsFutures) {
-            executor.submit(() -> {
-                try {
-                    ClosestVertices result = future.get();
-                    synchronized (closestVertices) {
-                        closestVertices.add(result);
-                    }
-                } catch (InterruptedException | ExecutionException e) {
-                    e.printStackTrace();
-                }
-            });
-        }
-
-        executor.shutdown();
-        return closestVertices;
-    }
-
-    /**
-     * calculates Hausdorff Distance to the nearest point on second facet for each vertex
-     * this implementation uses parallel streams
-     *
-     * @return list containing vertex from first facet, closest point to it from second facet, distance
-     */
-    public List<ClosestVertices> calculateHausdorffDistanceToMesh2() {
-        progress.set(0);
-        return mainFacet.getVertices().parallelStream()
-                .map((meshPoint) -> {
-                    ClosestVertices result = calculateNearestPointOnMesh(meshPoint,
-                            comparedFacet.getCornerTable()
-                                    .getTriangleIndexesByVertexIndex(comparedFacet.getVertices()
-                                            .indexOf(getNearestVertex(meshPoint)
-                                                    .getSecondVertex())));
-                    progress.addAndGet(1);
-                    return result;
-                }).collect(Collectors.toList());
-    }
-
-    /**
-     * calculates Hausdorff Distance to the nearest point on second facet for vertex
-     *
-     * @param vertex                     vertex from first facet
-     * @param indicesOfTrianglesOfVertex indices of triangles that contain the nearest vertex on second mesh
-     * @return vertex from first facet, closest point to it from second facet, distance
-     */
-    private ClosestVertices calculateNearestPointOnMesh(MeshPoint vertex, List<Integer> indicesOfTrianglesOfVertex) {
-        Vector3d vertexPosition = vertex.getPosition();
-        List<Pair<Vector3d, Double>> projections = new ArrayList<>(indicesOfTrianglesOfVertex.size());
-        Vector3d helperVector = new Vector3d();
-
-        TriangleListVisitor visitor = new TriangleListVisitor();
-        comparedFacet.accept(visitor);
-        List<MeshTriangle> trList = visitor.getTriangles();
-        for (int index : indicesOfTrianglesOfVertex) {
-            List<Vector3d> triangle = new ArrayList<>();
-            triangle.add(trList.get(index).vertex1.getPosition());
-            triangle.add(trList.get(index).vertex2.getPosition());
-            triangle.add(trList.get(index).vertex3.getPosition());
-            //List<Vector3d> triangle = comparedFacet.asTriangles()..getVerticesOfTriangle(index).stream()
-            //        .map(MeshPoint::getPosition)
-            //        .collect(Collectors.toList());
-            Vector3d projection = getProjectionToTrianglePlane(vertexPosition, triangle);
-            if (isPointInTriangle(projection, triangle)) {
-                helperVector.sub(vertexPosition, projection);
-                projections.add(new Pair<>(projection, helperVector.length()));
-            } else {
-                projection = getProjectionToClosestEdge(projection, triangle);
-                helperVector.sub(vertexPosition, projection);
-                projections.add(new Pair<>(projection, helperVector.length()));
-            }
-        }
-
-        Pair<Vector3d, Double> closestPosition = projections.stream()
-                .min(Comparator.comparingDouble(Pair::getValue)).orElseGet(() -> new Pair<>(null, Double.MAX_VALUE));
-        return new ClosestVertices(vertex,
-                new MeshPointImpl(closestPosition.getKey(), null, null),
-                closestPosition.getValue());
-    }
-
-    /**
-     * returns perpendicular projection from vertex to plane of triangle
-     *
-     * @param vertex   vertex from which the projection is created
-     * @param triangle triangle that defines the plane
-     * @return projection to plane of triangle
-     */
-    private Vector3d getProjectionToTrianglePlane(Vector3d vertex, List<Vector3d> triangle) {
-        Vector3d ab = new Vector3d();
-        ab.sub(triangle.get(0), triangle.get(1));
-        Vector3d ac = new Vector3d();
-        ac.sub(triangle.get(0), triangle.get(2));
-        Vector3d normal = new Vector3d();
-        normal.cross(ab, ac);
-        normal.normalize();
-
-        Vector3d helperVector = new Vector3d(vertex);
-        helperVector.sub(triangle.get(0));
-        double distance = helperVector.dot(normal);
-        helperVector.scaleAdd(-distance, normal, helperVector);
-        return helperVector;
-    }
-
-    /**
-     * checks if a point in plane of triangle lies within the triangle
-     *
-     * @param point    checked point
-     * @param triangle triangle
-     * @return true if point is in triangle, false otherwise
-     */
-    private boolean isPointInTriangle(Vector3d point, List<Vector3d> triangle) {
-        List<Vector3d> pointToVertices = triangle.stream()
-                .map((vertex) -> {
-                    Vector3d v = new Vector3d(vertex);
-                    v.sub(point);
-                    return v;
-                }).collect(Collectors.toList());
-
-        double angleSum = 0;
-        for (int i = 0; i < 3; i++) {
-            angleSum += pointToVertices.get(i).angle(pointToVertices.get((i + 1) % 3));
-        }
-        angleSum -= Math.PI;
-        return -0.01 < angleSum && angleSum < 0.01;
-    }
-
-    /**
-     * returns projection to to the nearest edge of triangle
-     *
-     * @param point    point in plane of triangle
-     * @param triangle triangle
-     * @return perpendicular projection to the nearest edge
-     */
-    private Vector3d getProjectionToClosestEdge(Vector3d point, List<Vector3d> triangle) {
-        Vector3d[] projections = new Vector3d[3];
-        for (int i = 0; i < 3; i++) {
-            projections[i] = getProjectionToEdge(point, triangle.get(i), triangle.get((i + 1) % 3));
-        }
-
-        double minDistance = Double.MAX_VALUE;
-        Vector3d closestProjection = null;
-        Vector3d helperVector = new Vector3d();
-        for (Vector3d projection :
-                projections) {
-            helperVector.sub(point, projection);
-            double distance = helperVector.length();
-            if (distance < minDistance) {
-                minDistance = distance;
-                closestProjection = projection;
-            }
-        }
-        return closestProjection;
-    }
-
-    /**
-     * returns projection to edge
-     *
-     * @param point       point in plane of triangle
-     * @param edgeVertex1 first vertex of edge
-     * @param edgeVertex2 second vertex of edge
-     * @return projection to edge
-     */
-    private Vector3d getProjectionToEdge(Vector3d point, Vector3d edgeVertex1, Vector3d edgeVertex2) {
-        Vector3d ab = new Vector3d();
-        ab.sub(edgeVertex1, edgeVertex2);
-        Vector3d ap = new Vector3d();
-        ap.sub(edgeVertex1, point);
-        double t = ab.dot(ap) / ab.lengthSquared();
-        return new Vector3d(edgeVertex1.x + t * ab.x, edgeVertex1.y + t * ab.y, edgeVertex1.z + t * ab.z);
-    }
-    
-    
-    /**
-     * Helper class for pairs.
-     * 
-     * @param <K> key 
-     * @param <V> value
-     * @author Radek Oslejsek
-     */
-    private final class Pair<K,V> {
-        private final K key;
-        private final V value;
-       
-        /**
-         * Constructor.
-         * @param key key
-         * @param value value
-         */
-        private Pair(K key, V value) {
-            this.key = key;
-            this.value = value;
-        }
-        
-        public K getKey() {
-            return key;
-        }
-        
-        public V getValue() {
-            return value;
-        }
-    }
-}
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/comparison/Registration.java b/Comparison/src/main/java/cz/fidentis/analyst/comparison/Registration.java
deleted file mode 100644
index dc681e55..00000000
--- a/Comparison/src/main/java/cz/fidentis/analyst/comparison/Registration.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package cz.fidentis.analyst.comparison;
-
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-
-/**
- * 
- * @author Matej Lukes
- */
-public class Registration {
-
-    /**
-     * Heler method - TO DO
-     * 
-     * @param facet main facet
-     * @param registeredFacet refistered facet
-     * @param method registration method
-     * @return TO DO
-     */
-    public static MeshFacet register(MeshFacet facet, MeshFacet registeredFacet, RegistrationMethod method) {
-        switch (method) {
-            case NO_REGISTRATION:
-                return registeredFacet;
-            default:
-                return null;
-        }
-    }
-}
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/comparison/RegistrationMethod.java b/Comparison/src/main/java/cz/fidentis/analyst/comparison/RegistrationMethod.java
deleted file mode 100644
index 730fcf27..00000000
--- a/Comparison/src/main/java/cz/fidentis/analyst/comparison/RegistrationMethod.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package cz.fidentis.analyst.comparison;
-
-/**
- * @author Matej Lukes
- */
-public enum RegistrationMethod {
-    NO_REGISTRATION
-}
-- 
GitLab