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 bd573f0c39d6d5e7f18572d491f48dbccc2394b5..38e786bb182d217672a1c1e0f464b1eaf8ccdf20 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java @@ -4,12 +4,14 @@ import cz.fidentis.analyst.canvas.Canvas; import cz.fidentis.analyst.core.LoadedActionEvent; import cz.fidentis.analyst.core.ControlPanelAction; import cz.fidentis.analyst.feature.FeaturePointType; +import cz.fidentis.analyst.mesh.core.MeshFacet; import cz.fidentis.analyst.scene.DrawableFeaturePoints; import cz.fidentis.analyst.visitors.face.HausdorffDistancePrioritized; import cz.fidentis.analyst.visitors.mesh.HausdorffDistance.Strategy; import java.awt.Color; import java.awt.event.ActionEvent; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.swing.JComboBox; import javax.swing.JTabbedPane; @@ -31,6 +33,7 @@ public class DistanceAction extends ControlPanelAction { private final Map<FeaturePointType, Double> featurePointTypes = new HashMap<>(); private String strategy = DistancePanel.STRATEGY_POINT_TO_POINT; private boolean relativeDist = false; + private boolean weightedDist = false; private final DistancePanel controlPanel; @@ -77,6 +80,8 @@ public class DistanceAction extends ControlPanelAction { case DistancePanel.ACTION_COMMAND_FEATURE_POINT_RESIZE: resizeFeaturePoint((LoadedActionEvent) ae); break; + case DistancePanel.ACTION_COMMAND_WEIGHTED_DISTANCE: + this.weightedDist = ((JToggleButton) ae.getSource()).isSelected(); case DistancePanel.ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE: this.visitor = null; // recompute setHeatmap(); @@ -109,9 +114,17 @@ public class DistanceAction extends ControlPanelAction { getSecondaryDrawableFace().getHumanFace().accept(visitor); } - getSecondaryDrawableFace().setHeatMap(visitor.getDistances()); + getSecondaryDrawableFace().setHeatMap(calculateHausdorffDistance()); } + private Map<MeshFacet, List<Double>> calculateHausdorffDistance() { + if (weightedDist) { + // TODO Merge the map of distances with the map of priorities + } + + return visitor.getDistances(); + } + private void highlightFeaturePoint(LoadedActionEvent actionEvent) { final int index = (int) actionEvent.getData(); final FeaturePointType fpType = getTypeOfFeaturePoint(index); 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 835f3dfea3ffaffeedbcd675a2851727de73db9c..51a2c8d0549aee23b09528818657e0ed76e1e9f1 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java @@ -35,6 +35,7 @@ public class DistancePanel extends ControlPanel { public static final String ACTION_COMMAND_SHOW_HIDE_HEATMAP = "show-hide heatmap"; public static final String ACTION_COMMAND_SET_DISTANCE_STRATEGY = "set strategy"; public static final String ACTION_COMMAND_RELATIVE_ABSOLUTE_DIST = "switch abosulte-relative distance"; + public static final String ACTION_COMMAND_WEIGHTED_DISTANCE = "switch weighted distance on/off"; public static final String ACTION_COMMAND_FEATURE_POINT_HIGHLIGHT = "highlight feature point with color"; public static final String ACTION_COMMAND_FEATURE_POINT_RESIZE = "set size of feature point"; public static final String ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE = "recompute weighted distance"; @@ -77,7 +78,7 @@ public class DistancePanel extends ControlPanel { null, "Weighted Hausdorff distance", false, - null // TODO implement action + createListener(action, ACTION_COMMAND_WEIGHTED_DISTANCE) ); builder.addLine(); @@ -115,9 +116,9 @@ public class DistancePanel extends ControlPanel { createListener(action, ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE) ); recomputeButton.setEnabled(false); - recomputeButton.addActionListener((ActionEvent ae) -> { - recomputeButton.setEnabled(false); - }); + recomputeButton.addActionListener((ActionEvent ae) -> + recomputeButton.setEnabled(false) + ); weightedDistChBx.addActionListener((ActionEvent ae) -> { if (!weightedDistChBx.isSelected()) { recomputeButton.setEnabled(false); @@ -166,4 +167,5 @@ public class DistancePanel extends ControlPanel { public static ImageIcon getStaticIcon() { return new ImageIcon(SymmetryPanel.class.getClassLoader().getResource("/" + ICON)); } + }