Commit 86b030a0 authored by Adam Majzlík's avatar Adam Majzlík Committed by Radek Ošlejšek
Browse files

Refactor Curvature services

parent bbb61545
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -54,16 +54,6 @@ public interface FaceStateServices {
        impl().updateOctree(face, mode);
    }

    /**
     * Manages curvature values of the given human face.
     *
     * @param face Human face
     * @param mode Operation to be performed
     */
    static void updateCurvature(HumanFace face, Mode mode) {
        impl().updateCurvature(face, mode);
    }

    /**
     * Manages vicinity of all landmarks of the given human face.
     *
+0 −26
Original line number Diff line number Diff line
@@ -11,8 +11,6 @@ import cz.fidentis.analyst.data.mesh.MeshPoint;
import cz.fidentis.analyst.data.mesh.measurement.MeshDistances;
import cz.fidentis.analyst.data.octree.Octree;
import cz.fidentis.analyst.data.shapes.Plane;
import cz.fidentis.analyst.engines.curvature.CurvatureConfig;
import cz.fidentis.analyst.engines.curvature.CurvatureServices;
import cz.fidentis.analyst.engines.distance.MeshDistanceConfig;
import cz.fidentis.analyst.engines.face.FaceDistanceServices;
import cz.fidentis.analyst.engines.face.FaceFrontalDirectionServices;
@@ -114,30 +112,6 @@ public class FaceStateServicesImpl implements FaceStateServices {
        }
    }

    /**
     * Manages curvature values of the given human face.
     *
     * @param face Human face
     * @param mode Operation to be performed
     */
    public void updateCurvature(HumanFace face, Mode mode) {
        switch (mode) {
            case RECOMPUTE_IF_PRESENT -> {
                if (face.getMeshModel().hasCurvature()) {
                    CurvatureServices.computeAndSet(face.getMeshModel(), new CurvatureConfig());
                }
            }
            case COMPUTE_IF_ABSENT -> {
                if (!face.getMeshModel().hasCurvature()) {
                    CurvatureServices.computeAndSet(face.getMeshModel(), new CurvatureConfig());
                }
            }
            case COMPUTE_ALWAYS -> CurvatureServices.computeAndSet(face.getMeshModel(), new CurvatureConfig());
            case DELETE -> throw new UnsupportedOperationException();
            default -> throw new IllegalStateException("Unexpected value: " + mode);
        }
    }

    /**
     * Computes vicinity of all landmarks of the given human face.
     *
+6 −4
Original line number Diff line number Diff line
@@ -9,12 +9,12 @@ import cz.fidentis.analyst.data.mesh.MeshModel;
import cz.fidentis.analyst.data.shapes.Plane;
import cz.fidentis.analyst.engines.distance.MeshDistanceConfig;
import cz.fidentis.analyst.engines.face.FaceDistanceServices;
import cz.fidentis.analyst.engines.face.FaceStateServices;
import cz.fidentis.analyst.engines.sampling.PointSamplingConfig;
import cz.fidentis.analyst.engines.symmetry.SymmetryConfig;
import cz.fidentis.analyst.gui.task.batch.Stopwatch;
import cz.fidentis.analyst.managers.enums.FaceStateUpdateMode;
import cz.fidentis.analyst.managers.CurvatureManager;
import cz.fidentis.analyst.managers.SymmetryManager;
import cz.fidentis.analyst.managers.enums.FaceStateUpdateMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
@@ -88,10 +88,12 @@ public class SymmetryComputationStats implements CommandLineRunner {
    private static CSVWriterService avgPlanesWriter;

    private final SymmetryManager symmetryManager;
    private final CurvatureManager curvatureManager;

    @Autowired
    public SymmetryComputationStats(SymmetryManager symmetryManager) {
    public SymmetryComputationStats(SymmetryManager symmetryManager, CurvatureManager curvatureManager) {
        this.symmetryManager = symmetryManager;
        this.curvatureManager = curvatureManager;
    }

    /**
@@ -128,7 +130,7 @@ public class SymmetryComputationStats implements CommandLineRunner {
            System.out.println(i + ": " + faces.get(i));

            HumanFace face = HumanFaceFactory.create(faces.get(i).toFile());
            FaceStateServices.updateCurvature(face, FaceStateServices.Mode.COMPUTE_IF_ABSENT);
            curvatureManager.computeAndSet(face, FaceStateUpdateMode.COMPUTE_IF_ABSENT);
            for (int densitySearchValue : SEARCH_DENSITY_VALUES) {
                for (int densityPruningValue : PRUNING_DENSITY_VALUES) {
                    calculateSymmetryStats(densitySearchValue, densityPruningValue, face);
+6 −4
Original line number Diff line number Diff line
@@ -8,14 +8,14 @@ import cz.fidentis.analyst.data.mesh.MeshModel;
import cz.fidentis.analyst.data.shapes.Plane;
import cz.fidentis.analyst.engines.distance.MeshDistanceConfig;
import cz.fidentis.analyst.engines.face.FaceDistanceServices;
import cz.fidentis.analyst.engines.face.FaceStateServices;
import cz.fidentis.analyst.engines.icp.IcpConfig;
import cz.fidentis.analyst.engines.icp.IcpServices;
import cz.fidentis.analyst.engines.landmarks.LandmarkServices;
import cz.fidentis.analyst.engines.sampling.PointSamplingConfig;
import cz.fidentis.analyst.engines.symmetry.SymmetryConfig;
import cz.fidentis.analyst.managers.enums.FaceStateUpdateMode;
import cz.fidentis.analyst.managers.CurvatureManager;
import cz.fidentis.analyst.managers.SymmetryManager;
import cz.fidentis.analyst.managers.enums.FaceStateUpdateMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
@@ -65,11 +65,13 @@ public class SymmetryOfChildren implements CommandLineRunner {
    );

    private final SymmetryManager symmetryManager;
    private final CurvatureManager curvatureManager;
    private final IcpServices icpServices;

    @Autowired
    public SymmetryOfChildren(SymmetryManager symmetryManager, IcpServices icpServices) {
    public SymmetryOfChildren(SymmetryManager symmetryManager, IcpServices icpServices, CurvatureManager curvatureManager) {
        this.symmetryManager = symmetryManager;
        this.curvatureManager = curvatureManager;
        this.icpServices = icpServices;
    }

@@ -109,7 +111,7 @@ public class SymmetryOfChildren implements CommandLineRunner {

            // Basic classification by age, gender, ...
            HumanFace face = HumanFaceFactory.create(faces.get(i).toFile());
            FaceStateServices.updateCurvature(face, FaceStateServices.Mode.COMPUTE_IF_ABSENT);
            curvatureManager.computeAndSet(face, FaceStateUpdateMode.COMPUTE_IF_ABSENT);
            System.out.println(i + ": " + face.getShortName());
            line.append(face.getShortName() + "|")
                    .append(face.getShortName().split("_", 4)[0] + "-" + face.getShortName().split("_", 4)[1] + "|")
+6 −4
Original line number Diff line number Diff line
@@ -8,12 +8,12 @@ import cz.fidentis.analyst.data.mesh.MeshFactory;
import cz.fidentis.analyst.data.mesh.MeshModel;
import cz.fidentis.analyst.engines.distance.MeshDistanceConfig;
import cz.fidentis.analyst.engines.distance.MeshDistanceServices;
import cz.fidentis.analyst.engines.face.FaceStateServices;
import cz.fidentis.analyst.engines.sampling.PointSamplingConfig;
import cz.fidentis.analyst.engines.symmetry.SymmetryConfig;
import cz.fidentis.analyst.gui.task.batch.Stopwatch;
import cz.fidentis.analyst.managers.enums.FaceStateUpdateMode;
import cz.fidentis.analyst.managers.CurvatureManager;
import cz.fidentis.analyst.managers.SymmetryManager;
import cz.fidentis.analyst.managers.enums.FaceStateUpdateMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
@@ -72,10 +72,12 @@ public class TestSymmetryAlgorithms implements CommandLineRunner {
    private static final int MAX_SAMPLES = 500;

    private final SymmetryManager symmetryManager;
    private final CurvatureManager curvatureManager;

    @Autowired
    public TestSymmetryAlgorithms(SymmetryManager symmetryManager) {
    public TestSymmetryAlgorithms(SymmetryManager symmetryManager, CurvatureManager curvatureManager) {
        this.symmetryManager = symmetryManager;
        this.curvatureManager = curvatureManager;
    }

    /**
@@ -127,7 +129,7 @@ public class TestSymmetryAlgorithms implements CommandLineRunner {
            System.out.println(i + ": " + faces.get(i));
            
            HumanFace face = faceService.loadTemporaryInMemoryFace(faces.get(i).toFile());
            FaceStateServices.updateCurvature(face, FaceStateServices.Mode.COMPUTE_IF_ABSENT);
            curvatureManager.computeAndSet(face, FaceStateUpdateMode.COMPUTE_IF_ABSENT);

            DoubleSummaryStatistics stats;
            
Loading