From 659c352c4d570a40dd8605cce321f869488d11b0 Mon Sep 17 00:00:00 2001 From: Daniel Schramm <xschramm@fi.muni.cz> Date: Wed, 15 Sep 2021 18:31:43 +0200 Subject: [PATCH] Overview of feature point weights implemented --- .../analyst/distance/DistanceAction.java | 26 ++++++++++++++++ .../analyst/distance/DistancePanel.java | 31 ++++++++++++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java index da156bba..908e9a41 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java @@ -86,6 +86,7 @@ public class DistanceAction extends ControlPanelAction { case DistancePanel.ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE: this.visitor = null; // recompute setHeatmap(); + setFeaturePointWeigths(); break; default: // to nothing @@ -130,6 +131,31 @@ public class DistanceAction extends ControlPanelAction { ); } + private void setFeaturePointWeigths() { + if (!weightedDist) { + controlPanel.updateFeaturePointWeights(Map.of()); + return; + } + + final Map<FeaturePointType, Map<MeshFacet, Double>> faceWeights = visitor.getFeaturePointWeights() + .get(getSecondaryDrawableFace().getHumanFace()); + + final Map<FeaturePointType, Double> featurePointWeights = new HashMap<>(faceWeights.size()); + for (final Map.Entry<FeaturePointType, Map<MeshFacet, Double>> fpWeights: faceWeights.entrySet()) { + featurePointWeights.put( + fpWeights.getKey(), + fpWeights.getValue() + .values() + .stream() + .mapToDouble(weight -> weight) + .average() + .orElse(Double.NaN) + ); + } + + controlPanel.updateFeaturePointWeights(featurePointWeights); + } + private Map<MeshFacet, List<Double>> calculateHausdorffDistance() { if (weightedDist) { // TODO Merge the map of distances with the map of priorities diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java index 5f6f3dc9..a454c746 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java @@ -3,17 +3,21 @@ package cz.fidentis.analyst.distance; import cz.fidentis.analyst.core.ControlPanel; import cz.fidentis.analyst.core.ControlPanelBuilder; import cz.fidentis.analyst.feature.FeaturePoint; +import cz.fidentis.analyst.feature.FeaturePointType; import cz.fidentis.analyst.scene.DrawableFeaturePoints; import cz.fidentis.analyst.symmetry.SymmetryPanel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JScrollPane; import javax.swing.JTextField; /** @@ -47,6 +51,7 @@ public class DistancePanel extends ControlPanel { public static final String STRATEGY_POINT_TO_POINT = "Point to point"; public static final String STRATEGY_POINT_TO_TRIANGLE = "Point to triangle"; + private final JPanel featurePointsStats; private final JLabel avgHD, maxHD, minHD; /** @@ -111,7 +116,8 @@ public class DistancePanel extends ControlPanel { fpBuilder.addLine(); } - builder.addScrollPane(featurePointsPanel); + builder.addScrollPane(featurePointsPanel) + .setBorder(BorderFactory.createTitledBorder("Feature points")); builder.addLine(); final JButton recomputeButton = builder.addButton( @@ -174,6 +180,15 @@ public class DistancePanel extends ControlPanel { builder.addGap(); builder.addLine(); + featurePointsStats = new JPanel(); + final JScrollPane fpStatsScrollPanel = builder.addScrollPane(featurePointsStats); + fpStatsScrollPanel.setBorder(BorderFactory.createTitledBorder("Feature point weights")); + fpStatsScrollPanel.setVisible(false); + weightedDistChBx.addActionListener((ActionEvent ae) -> { + fpStatsScrollPanel.setVisible(weightedDistChBx.isSelected()); + }); + builder.addLine(); + builder.addVerticalStrut(); } @@ -197,4 +212,18 @@ public class DistancePanel extends ControlPanel { minHD.setText(Double.toString(minDist)); } + public void updateFeaturePointWeights(Map<FeaturePointType, Double> featurePointWeights) { + featurePointsStats.removeAll(); + + final ControlPanelBuilder fpBuilder = new ControlPanelBuilder(featurePointsStats); + for (final Map.Entry<FeaturePointType, Double> fpStats: featurePointWeights.entrySet()) { + fpBuilder.addOptionText(fpStats.getKey().getName()); + fpBuilder.addGap(); + + fpBuilder.addLabelLine(Double.toString(fpStats.getValue())); + fpBuilder.addGap(); + fpBuilder.addLine(); + } + } + } -- GitLab