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 c05b2f5804db7f33c0caf16ddf2694fb2fe08b79..3941584ac23a8ea7a7f60cb576a40318bbb35553 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java @@ -1,10 +1,15 @@ package cz.fidentis.analyst.distance; 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.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.Map; import javax.swing.JComboBox; import javax.swing.JTabbedPane; @@ -21,6 +26,7 @@ public class DistanceAction extends ControlPanelAction { * Attributes handling the state */ private HausdorffDistancePrioritized visitor = null; + private final Map<FeaturePointType, Double> featurePointTypes = new HashMap<>(); private String strategy = DistancePanel.STRATEGY_POINT_TO_POINT; private boolean relativeDist = false; @@ -63,6 +69,9 @@ public class DistanceAction extends ControlPanelAction { this.visitor = null; // recompute setHeatmap(); break; + case DistancePanel.ACTION_COMMAND_FEATURE_POINT_HIGHLIGHT: + highlightFeaturePoint((LoadedActionEvent) ae); + break; default: // to nothing } @@ -84,7 +93,7 @@ public class DistanceAction extends ControlPanelAction { if (visitor == null) { this.visitor = new HausdorffDistancePrioritized(getPrimaryDrawableFace().getModel(), - Map.of(), // TODO temporary!! + featurePointTypes, useStrategy, relativeDist, true); @@ -94,4 +103,24 @@ public class DistanceAction extends ControlPanelAction { getSecondaryDrawableFace().setHeatMap(visitor.getDistances()); } + private void highlightFeaturePoint(LoadedActionEvent actionEvent) { + final int index = (int) actionEvent.getData(); + final FeaturePointType fpType = getTypeOfFeaturePoint(index); + final DrawableFeaturePoints secondaryFeaturePoints = getSecondaryFeaturePoints(); + + if (((JToggleButton) actionEvent.getSource()).isSelected()) { + secondaryFeaturePoints.setColor(index, Color.MAGENTA); + featurePointTypes.put(fpType, secondaryFeaturePoints.getSize(index)); + } else { + secondaryFeaturePoints.resetColorToDefault(index); + featurePointTypes.remove(fpType); + } + } + + private FeaturePointType getTypeOfFeaturePoint(int index) { + return getSecondaryFeaturePoints().getFeaturePoints() + .get(index) + .getFeaturePointType(); + } + } 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 517d5adcad751baab84ff63fe37bc6b0f179023d..2997ad1b09a9d345a1db0defd0a2a6b6997e19ac 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java @@ -30,6 +30,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_FEATURE_POINT_HIGHLIGHT = "highlight feature point with color"; /* * Configuration of panel-specific GUI elements @@ -72,15 +73,15 @@ public class DistancePanel extends ControlPanel { final JCheckBox checkBox = fpBuilder.addCheckBox( false, - null // TODO implement action + createListener(action, ACTION_COMMAND_FEATURE_POINT_HIGHLIGHT, i) ); checkBox.setText(featurePoint.getFeaturePointType().getName()); - + fpBuilder.addLine(); } builder.addScrollPane(featurePointsPanel); builder.addLine(); - + builder.addCaptionLine("Visualization options:"); builder.addLine(); builder.addCheckBoxOptionLine(