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

Refactor Glyphs

parent 5f91f1bc
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -4,7 +4,6 @@ import cz.fidentis.analyst.data.face.HumanFace;
import cz.fidentis.analyst.data.mesh.measurement.MeshDistances;
import cz.fidentis.analyst.engines.AcaGeometryEngines;
import cz.fidentis.analyst.engines.face.impl.FaceStateServicesImpl;
import cz.fidentis.analyst.engines.sampling.PointSamplingConfig;

/**
 * Services for managing a state (internal elements) of a single human face.
@@ -65,18 +64,6 @@ public interface FaceStateServices {
        impl().updateBoundingBox(face, mode);
    }

    /**
     * Manages glyphs of the given human face.
     *
     * @param face Human face
     * @param mode Operation to be performed
     * @param method Sub-sampling method. Used only if new glyphs are computed.
     * @param maxSamples Maximum number of glyphs. Used only if new glyphs are computed.
     */
    static void updateGlyphs(HumanFace face, Mode mode, PointSamplingConfig.Method method, int maxSamples) {
        impl().updateGlyphs(face, mode, method, maxSamples);
    }

    /**
     * Manages curvature values of the given human face.
     *
+1 −33
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@ import cz.fidentis.analyst.engines.distance.MeshDistanceConfig;
import cz.fidentis.analyst.engines.face.FaceDistanceServices;
import cz.fidentis.analyst.engines.face.FaceFrontalDirectionServices;
import cz.fidentis.analyst.engines.face.FaceStateServices;
import cz.fidentis.analyst.engines.glyphs.GlyphServices;
import cz.fidentis.analyst.engines.glyphs.GlyphsConfig;
import cz.fidentis.analyst.engines.icp.IcpConfig;
import cz.fidentis.analyst.engines.icp.IcpServices;
import cz.fidentis.analyst.engines.point2surface.PointToSurfaceDistanceConfig;
@@ -40,12 +38,10 @@ import java.util.Collection;
public class FaceStateServicesImpl implements FaceStateServices {

    private IcpServices icpServices;
    private GlyphServices glyphServices;

    @Autowired
    public FaceStateServicesImpl(IcpServices icpServices, GlyphServices glyphServices) {
    public FaceStateServicesImpl(IcpServices icpServices) {
        this.icpServices = icpServices;
        this.glyphServices = glyphServices;
    }

    /**
@@ -145,34 +141,6 @@ public class FaceStateServicesImpl implements FaceStateServices {
        }
    }

    /**
     * Manages glyphs of the given human face.
     *
     * @param face       Human face
     * @param mode       Operation to be performed
     * @param method     Sub-sampling method
     * @param maxSamples Maximum number of glyphs
     */
    public void updateGlyphs(HumanFace face, Mode mode, PointSamplingConfig.Method method, int maxSamples) {
        var config = new GlyphsConfig(new PointSamplingConfig(method, maxSamples));

        switch (mode) {
            case RECOMPUTE_IF_PRESENT -> {
                if (face.hasGlyphs()) {
                    face.setGlyphs(glyphServices.calculateGlyphs(face.getMeshModel(), config));
                }
            }
            case COMPUTE_IF_ABSENT -> {
                if (!face.hasGlyphs()) {
                    face.setGlyphs(glyphServices.calculateGlyphs(face.getMeshModel(), config));
                }
            }
            case COMPUTE_ALWAYS -> face.setGlyphs(glyphServices.calculateGlyphs(face.getMeshModel(), config));
            case DELETE -> face.setGlyphs(null);
            default -> throw new IllegalStateException("Unexpected value: " + mode);
        }
    }

    /**
     * Manages curvature values of the given human face.
     *
+2 −1
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ import cz.fidentis.analyst.engines.face.FaceFrontalDirectionServices;
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.symmetry.SymmetryManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
@@ -408,7 +409,7 @@ public class FaceFrontalDirectionStats implements CommandLineRunner {
                new PointSamplingConfig(PointSamplingConfig.Method.UNIFORM_SPACE, 200),
                1000
        );
        symmetryManager.estimate(face, symmetryConfig, SymmetryManager.Method.ROBUST_MESH, SymmetryManager.UpdateMode.COMPUTE_ALWAYS);
        symmetryManager.estimate(face, symmetryConfig, SymmetryManager.Method.ROBUST_MESH, FaceStateUpdateMode.COMPUTE_ALWAYS);
    }

    private static Point3d getPronasaleCorrect(HumanFace face) {
+2 −1
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ 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.symmetry.SymmetryManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
@@ -177,7 +178,7 @@ public class SymmetryComputationStats implements CommandLineRunner {

                COMPUTATION_TIME_SW.start();
                // Computation of symmetry plane
                symmetryManager.estimate(face, estimator0, SYMMETRY_METHOD, SymmetryManager.UpdateMode.COMPUTE_IF_ABSENT);
                symmetryManager.estimate(face, estimator0, SYMMETRY_METHOD, FaceStateUpdateMode.COMPUTE_IF_ABSENT);
                COMPUTATION_TIME_SW.stop();

                // Computation of average plane
+2 −1
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ 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.symmetry.SymmetryManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
@@ -158,7 +159,7 @@ public class SymmetryOfChildren implements CommandLineRunner {
    protected double computeSymmetry(HumanFace face, SymmetryConfig config, SymmetryManager.Method symmetryMethod) {
        Plane plane = null;
        if (config != null) {
            symmetryManager.estimate(face, config, symmetryMethod, SymmetryManager.UpdateMode.COMPUTE_ALWAYS);
            symmetryManager.estimate(face, config, symmetryMethod, FaceStateUpdateMode.COMPUTE_ALWAYS);
            plane = face.getSymmetryPlane();
        } else {
            plane = LandmarkServices.computeSymmetryPlane(face.getLandmarks().getAllLandmarks().stream().filter(fp ->
Loading