Commit 22d5987e authored by adammajzlik's avatar adammajzlik
Browse files

feat: Introduce dependency injection to Geometry Engines - Sampling

parent 8cea89d7
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ import cz.fidentis.analyst.engines.icp.IcpConfig;
import cz.fidentis.analyst.engines.landmarks.PrTransformation;
import cz.fidentis.analyst.engines.sampling.PointSamplingConfig;
import cz.fidentis.analyst.engines.sampling.PointSamplingVisitor;
import cz.fidentis.analyst.engines.sampling.provider.SamplingProviderService;
import cz.fidentis.analyst.engines.symmetry.SymmetryConfig;
import cz.fidentis.analyst.gui.elements.SpinSlider;
import cz.fidentis.analyst.gui.task.ControlPanelAction;
@@ -89,6 +90,8 @@ public class RegistrationAction extends ControlPanelAction<RegistrationPanel> im
    private final HumanFacesEventBusService humanFacesEventBusService;
    private final FaceService faceService;

    SamplingProviderService samplingProviderService = Aca.getInstance().getBean(SamplingProviderService.class);

    /**
     * Constructor.
     * A new {@code RegistrationPanel} is instantiated and added to the {@code topControlPane}
@@ -211,7 +214,7 @@ public class RegistrationAction extends ControlPanelAction<RegistrationPanel> im
                if (samplingVisitor != null) {
                    samplingVisitor.dispose();
                }
                samplingVisitor = strategy == null ? null : strategy.getVisitor();
                samplingVisitor = strategy == null ? null : samplingProviderService.createVisitor(strategy);
                if (samplingVisitor != null) {
                    getPrimaryFace().getMeshModel().getFacets().forEach(facet -> samplingVisitor.visitMeshFacet(facet));
                }
+4 −1
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ import cz.fidentis.analyst.engines.face.FaceFrontalDirectionServices;
import cz.fidentis.analyst.engines.face.FaceStateServices;
import cz.fidentis.analyst.engines.sampling.PointSamplingConfig;
import cz.fidentis.analyst.engines.sampling.PointSamplingVisitor;
import cz.fidentis.analyst.engines.sampling.provider.SamplingProviderService;
import cz.fidentis.analyst.engines.symmetry.SymmetryConfig;
import cz.fidentis.analyst.gui.elements.SpinSlider;
import cz.fidentis.analyst.gui.elements.histogram.InteractiveHistogramComponent;
@@ -56,6 +57,8 @@ public class SymmetryAction extends ControlPanelAction<SymmetryPanel> implements

    private MeshDistances meshDistance = null;

    SamplingProviderService samplingFactory = Aca.getInstance().getBean(SamplingProviderService.class);

    /**
     * Constructor. 
     * A new {@code SymmetryPanel} is instantiated and added to the {@code topControlPane}
@@ -131,7 +134,7 @@ public class SymmetryAction extends ControlPanelAction<SymmetryPanel> implements
                }

                var strategy = getSamplingStrategy(getControlPanel().getPointSamplingStrength1());
                samplingVisitor = strategy == null ? null : strategy.getVisitor();
                samplingVisitor = strategy == null ? null : samplingFactory.createVisitor(strategy);
                if (samplingVisitor != null) {
                    getPrimaryFace().getMeshModel().getFacets().forEach(facet -> samplingVisitor.visitMeshFacet(facet));
                }
+5 −0
Original line number Diff line number Diff line
@@ -76,6 +76,11 @@
            <version>${version.org.junit.jupiter}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>3.4.4</version>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+42 −0
Original line number Diff line number Diff line
package cz.fidentis.analyst.engines;

import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;

/**
 * A singleton class that provides access to the Spring application context.
 * This class is used to retrieve beans from the application context.
 *
 * @author Adam Majzlík
 */
@Service
public class AcaGeometryEngines {
    private static AcaGeometryEngines instance;

    public static AcaGeometryEngines getInstance() {
        return instance;
    }

    private ApplicationContext context;

    /**
     * Constructor that initializes the Aca instance with the provided application context.
     *
     * @param context The Spring application context.
     */
    public AcaGeometryEngines(ApplicationContext context) {
        this.context = context;
        instance = this;
    }

    /**
     * Retrieves a bean of the specified class from the application context.
     *
     * @param clazz The class of the bean to retrieve.
     * @param <T>   The type of the bean.
     * @return An instance of the specified bean type.
     */
    public <T> T getBean(Class<T> clazz) {
        return context.getBean(clazz);
    }
}
+5 −1
Original line number Diff line number Diff line
@@ -4,10 +4,12 @@ import cz.fidentis.analyst.data.mesh.Curvature;
import cz.fidentis.analyst.data.mesh.MeshFacet;
import cz.fidentis.analyst.data.mesh.MeshPoint;
import cz.fidentis.analyst.data.shapes.Glyph;
import cz.fidentis.analyst.engines.AcaGeometryEngines;
import cz.fidentis.analyst.engines.curvature.CurvatureServices;
import cz.fidentis.analyst.engines.glyphs.GlyphsVisitor;
import cz.fidentis.analyst.engines.sampling.PointSamplingConfig;
import cz.fidentis.analyst.engines.sampling.PointSamplingVisitor;
import cz.fidentis.analyst.engines.sampling.provider.SamplingProviderService;

import java.util.ArrayList;
import java.util.List;
@@ -22,12 +24,14 @@ public class GlyphsVisitorImpl implements GlyphsVisitor {
    private final List<MeshFacet> facets = new ArrayList<>();
    private final PointSamplingVisitor samplingVisitor;

    private final SamplingProviderService samplingFactory = AcaGeometryEngines.getInstance().getBean(SamplingProviderService.class);

    /**
     * Constructor.
     * @param samplingConfig Sub-sampling configuration. Must not be {@code null}
     */
    public GlyphsVisitorImpl(PointSamplingConfig samplingConfig) {
        this.samplingVisitor = samplingConfig.getVisitor();
        this.samplingVisitor = samplingFactory.createVisitor(samplingConfig);
    }

    @Override
Loading