diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java index 819fecda076fc7e37a0474594b987c6f803f86b6..045fcfbec9be0971d9d19a788fc132f4975011cd 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java +++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java @@ -4,7 +4,6 @@ import cz.fidentis.analyst.canvas.Canvas; import cz.fidentis.analyst.scene.DrawableFace; import cz.fidentis.analyst.scene.DrawableFeaturePoints; import cz.fidentis.analyst.scene.Scene; -import java.awt.Color; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.JTabbedPane; diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java b/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java index 3e52795be4f1e0aa84395c803a2196e3511f07e2..d5bb4b699fadf5bc04f86ffbe68e3645bd3c928d 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java +++ b/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java @@ -26,10 +26,10 @@ public class FaceToFaceTab extends TopComponent { * @param name Tab name */ public FaceToFaceTab(HumanFace primary, HumanFace secondary, String name) { - controlPanel = new TopControlPanel(); canvas = new Canvas(); - renderingToolBar = new FaceToFaceToolBar(canvas, controlPanel); canvas.initScene(primary, secondary); + controlPanel = new TopControlPanel(); + renderingToolBar = new FaceToFaceToolBar(canvas, controlPanel); setName(name); initComponents(); } diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java b/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java index f7e4d8a04284ca1382aa864d9956b6bc08218c46..61629541e2a4f6ea468f6b5cfb9f76d463d56bba 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java +++ b/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java @@ -25,10 +25,10 @@ public final class SingleFaceTab extends TopComponent { * @param name Tab name */ public SingleFaceTab(HumanFace face, String name) { - controlPanel = new TopControlPanel(); canvas = new Canvas(); - renderingToolBar = new SingleFaceToolBar(canvas, controlPanel); canvas.initScene(face); + controlPanel = new TopControlPanel(); + renderingToolBar = new SingleFaceToolBar(canvas, controlPanel); setName(name); initComponents(); } diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java index 8e251c7b4a9bbcc7c0ea7bbc5ad4a47dcf0ecea6..f95094786ff6d95031b74d4bdefa29d2b799965b 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java +++ b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java @@ -9,7 +9,6 @@ import cz.fidentis.analyst.icp.NoUndersampling; import cz.fidentis.analyst.icp.RandomStrategy; import cz.fidentis.analyst.icp.UndersamplingStrategy; import cz.fidentis.analyst.mesh.core.MeshFacet; -import cz.fidentis.analyst.mesh.core.MeshModel; import cz.fidentis.analyst.mesh.core.MeshPoint; import cz.fidentis.analyst.visitors.mesh.HausdorffDistance; import java.awt.Color; @@ -39,6 +38,9 @@ public class RegistrationAction extends ControlPanelAction { private int maxIterations = 10; private double error = 0.3; private UndersamplingStrategy undersampling = new RandomStrategy(200); + private HausdorffDistance hdVisitor = null; + private String strategy = RegistrationPanel.STRATEGY_POINT_TO_POINT; + private boolean relativeDist = false; /* * Coloring threshold and statistical values of feature point distances: @@ -218,6 +220,25 @@ public class RegistrationAction extends ControlPanelAction { throw new UnsupportedOperationException(item); } break; + case RegistrationPanel.ACTION_COMMAND_HD_HEATMAP: + if (((JToggleButton) ae.getSource()).isSelected()) { + calculateHausdorffDistance(); + setHeatmap(); + getSecondaryDrawableFace().setRenderHeatmap(true); + } else { + getSecondaryDrawableFace().setRenderHeatmap(false); + } + break; + case RegistrationPanel.ACTION_COMMAND_HD_STRATEGY: + strategy = (String) ((JComboBox) ae.getSource()).getSelectedItem(); + this.hdVisitor = null; // recompute + setHeatmap(); + break; + case RegistrationPanel.ACTION_COMMAND_HD_RELATIVE_DIST: + this.relativeDist = ((JToggleButton) ae.getSource()).isSelected(); + this.hdVisitor = null; // recompute + setHeatmap(); + break; default: // to nothing } @@ -391,4 +412,26 @@ public class RegistrationAction extends ControlPanelAction { point.y *= 1 + getSecondaryDrawableFace().getScale().y; point.z *= 1 + getSecondaryDrawableFace().getScale().z; } + + protected void setHeatmap() { + HausdorffDistance.Strategy useStrategy; + switch (strategy) { + case RegistrationPanel.STRATEGY_POINT_TO_POINT: + useStrategy = HausdorffDistance.Strategy.POINT_TO_POINT; + break; + case RegistrationPanel.STRATEGY_POINT_TO_TRIANGLE: + useStrategy = HausdorffDistance.Strategy.POINT_TO_TRIANGLE_APPROXIMATE; + break; + default: + throw new UnsupportedOperationException(strategy); + } + + if (hdVisitor == null) { + this.hdVisitor = new HausdorffDistance(getPrimaryDrawableFace().getModel(), useStrategy, relativeDist, true); + getSecondaryDrawableFace().getModel().compute(hdVisitor); + } + + getSecondaryDrawableFace().setHeatMap(hdVisitor.getDistances()); + } + } diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form index 3fc26c8d9479e702f33816f7eb637b901fd40946..bbf03adfe438d8425abec868587cb67421c37b32 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form +++ b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form @@ -43,10 +43,13 @@ </Group> <Group type="102" attributes="0"> <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jPanel1" min="-2" max="-2" attributes="0"/> - <Component id="jPanel2" alignment="0" min="-2" pref="922" max="-2" attributes="0"/> <Component id="transformationPanel" alignment="0" min="-2" pref="692" max="-2" attributes="0"/> <Component id="jPanel4" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="jPanel6" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0"> + <Component id="jPanel2" alignment="0" pref="624" max="32767" attributes="0"/> + <Component id="jPanel1" alignment="0" max="32767" attributes="0"/> + </Group> </Group> <EmptySpace min="0" pref="0" max="32767" attributes="0"/> </Group> @@ -57,14 +60,16 @@ <Group type="102" alignment="0" attributes="0"> <Component id="jPanel1" min="-2" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> - <Component id="jPanel2" min="-2" pref="180" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> + <Component id="jPanel2" min="-2" pref="77" max="-2" attributes="0"/> + <EmptySpace min="-2" max="-2" attributes="0"/> <Component id="jPanel4" min="-2" pref="135" max="-2" attributes="0"/> <EmptySpace min="-2" max="-2" attributes="0"/> <Component id="transformationPanel" min="-2" pref="209" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="21" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jPanel6" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="77" max="-2" attributes="0"/> <Component id="jSeparator11" min="-2" pref="10" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="215" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="221" max="-2" attributes="0"/> <Component id="jSeparator2" min="-2" pref="10" max="-2" attributes="0"/> <EmptySpace max="32767" attributes="0"/> </Group> @@ -623,7 +628,7 @@ <Group type="102" alignment="0" attributes="0"> <EmptySpace min="-2" pref="6" max="-2" attributes="0"/> <Group type="103" groupAlignment="1" max="-2" attributes="0"> - <Component id="rotationZFTF" alignment="0" max="32767" attributes="0"/> + <Component id="rotationZFTF" alignment="0" min="-2" pref="54" max="-2" attributes="0"/> <Group type="102" alignment="0" attributes="0"> <Component id="leftRotationZButton" min="-2" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> @@ -662,10 +667,7 @@ <Component id="rightRotationZButton" alignment="0" min="-2" max="-2" attributes="0"/> </Group> <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="rotationZFTF" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="rotationYFTF" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> + <Component id="rotationZFTF" min="-2" max="-2" attributes="0"/> </Group> <Group type="102" alignment="1" attributes="0"> <Group type="103" groupAlignment="0" attributes="0"> @@ -674,7 +676,10 @@ </Group> <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> - <Component id="rotationXFTF" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="rotationXFTF" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="rotationYFTF" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> <Group type="102" alignment="1" attributes="0"> <Component id="rotationButton" max="-2" attributes="0"/> <EmptySpace min="-2" pref="5" max="-2" attributes="0"/> @@ -1278,39 +1283,40 @@ <Group type="102" attributes="0"> <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> <Group type="102" alignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel8" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="2" max="-2" attributes="0"/> + <Component id="jComboBox1" min="-2" pref="166" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> <Group type="102" alignment="0" attributes="0"> <Component id="jLabel7" min="-2" max="-2" attributes="0"/> <EmptySpace min="-2" pref="6" max="-2" attributes="0"/> <Component id="jCheckBox1" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="51" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> <Component id="jLabel5" min="-2" max="-2" attributes="0"/> <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> <Component id="jFormattedTextField1" min="-2" pref="49" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Component id="jLabel8" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="2" max="-2" attributes="0"/> - <Component id="jComboBox1" min="-2" pref="166" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="57" max="-2" attributes="0"/> </Group> </Group> - <EmptySpace min="-2" pref="40" max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace min="12" pref="12" max="-2" attributes="0"/> - <Component id="jButton1" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" attributes="0"> + <Component id="jButton1" alignment="1" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="1" attributes="0"> <Component id="jLabel6" min="-2" max="-2" attributes="0"/> <EmptySpace min="-2" pref="3" max="-2" attributes="0"/> <Component id="jFormattedTextField2" min="-2" pref="53" max="-2" attributes="0"/> </Group> </Group> + <EmptySpace min="-2" pref="54" max="-2" attributes="0"/> </Group> </Group> - <EmptySpace pref="410" max="32767" attributes="0"/> </Group> </Group> </DimensionLayout> @@ -1331,10 +1337,12 @@ </Group> </Group> <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jLabel8" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jComboBox1" alignment="3" min="-2" pref="27" max="-2" attributes="0"/> - <Component id="jButton1" alignment="3" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jButton1" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel8" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jComboBox1" alignment="3" min="-2" pref="27" max="-2" attributes="0"/> + </Group> </Group> <EmptySpace pref="13" max="32767" attributes="0"/> </Group> @@ -1454,25 +1462,19 @@ <Group type="103" groupAlignment="0" attributes="0"> <Component id="jLabel4" alignment="0" min="-2" max="-2" attributes="0"/> <Component id="jSeparator1" alignment="0" min="-2" pref="600" max="-2" attributes="0"/> - <Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <Component id="jPanel3" max="32767" attributes="0"/> - <EmptySpace min="-2" pref="68" max="-2" attributes="0"/> - <Component id="jToggleButton1" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Component id="jLabel22" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jCheckBox2" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="44" max="-2" attributes="0"/> - <Component id="jLabel23" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jComboBox2" min="-2" pref="145" max="-2" attributes="0"/> - </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel22" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jCheckBox2" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel23" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jComboBox2" min="-2" pref="145" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="40" max="-2" attributes="0"/> + <Component id="jToggleButton1" min="-2" max="-2" attributes="0"/> </Group> - <Component id="jPanel5" alignment="0" min="-2" max="-2" attributes="0"/> </Group> - <EmptySpace pref="310" max="32767" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> </Group> </Group> </DimensionLayout> @@ -1484,24 +1486,18 @@ <Group type="103" groupAlignment="1" attributes="0"> <Group type="102" attributes="0"> <Component id="jLabel4" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jCheckBox2" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jLabel22" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jLabel23" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jComboBox2" alignment="3" min="-2" pref="29" max="-2" attributes="0"/> - </Group> + <EmptySpace min="-2" pref="12" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jCheckBox2" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="jLabel22" min="-2" max="-2" attributes="0"/> </Group> - <EmptySpace max="-2" attributes="0"/> - <Component id="jPanel3" min="-2" pref="50" max="-2" attributes="0"/> </Group> - <Component id="jToggleButton1" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel23" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jComboBox2" alignment="3" min="-2" pref="29" max="-2" attributes="0"/> + <Component id="jToggleButton1" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> </Group> - <EmptySpace max="-2" attributes="0"/> - <Component id="jPanel5" min="-2" pref="50" max="-2" attributes="0"/> <EmptySpace max="32767" attributes="0"/> </Group> </Group> @@ -1518,105 +1514,6 @@ </Property> </Properties> </Component> - <Container class="javax.swing.JPanel" name="jPanel3"> - <Properties> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> - <TitledBorder title="Hausdorff distance"> - <ResourceString PropertyName="titleX" bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jPanel3.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </TitledBorder> - </Border> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="9" max="-2" attributes="0"/> - <Component id="jLabel16" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel17" min="-2" pref="40" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="2" max="-2" attributes="0"/> - <Component id="jLabel18" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel19" min="-2" pref="40" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel20" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel21" min="-2" pref="40" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="3" max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jLabel16" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel17" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel18" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel19" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel20" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel21" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="jLabel16"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Ubuntu" size="15" style="1"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel16.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel17"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Ubuntu" size="15" style="1"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel17.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel18"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel18.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel19"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel19.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel20"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel20.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel21"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel21.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - </SubComponents> - </Container> <Component class="javax.swing.JSeparator" name="jSeparator1"> </Component> <Component class="javax.swing.JLabel" name="jLabel22"> @@ -1669,111 +1566,6 @@ <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jToggleButton1ActionPerformed"/> </Events> </Component> - <Container class="javax.swing.JPanel" name="jPanel5"> - <Properties> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> - <TitledBorder title="distance of feature points"> - <ResourceString PropertyName="titleX" bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jPanel5.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </TitledBorder> - </Border> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="9" max="-2" attributes="0"/> - <Component id="jLabel12" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel13" min="-2" pref="42" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel10" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel15" min="-2" pref="39" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel11" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel14" min="-2" pref="45" max="-2" attributes="0"/> - <EmptySpace pref="26" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="3" max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jLabel12" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel13" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel10" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel15" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel11" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel14" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="jLabel12"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Ubuntu" size="15" style="1"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel12.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel13"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Ubuntu" size="15" style="1"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel13.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel10"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel10.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel15"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Ubuntu" size="15" style="0"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel15.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel11"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel11.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel14"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Ubuntu" size="15" style="0"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel14.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - </SubComponents> - </Container> </SubComponents> </Container> <Container class="javax.swing.JPanel" name="jPanel4"> @@ -1831,7 +1623,7 @@ </Group> <Group type="102" alignment="0" attributes="0"> <EmptySpace min="-2" pref="18" max="-2" attributes="0"/> - <Component id="transparencyButton" min="-2" pref="28" max="-2" attributes="0"/> + <Component id="transparencyButton" min="-2" max="-2" attributes="0"/> </Group> </Group> <EmptySpace type="unrelated" max="-2" attributes="0"/> @@ -2055,5 +1847,261 @@ </Component> </SubComponents> </Container> + <Container class="javax.swing.JPanel" name="jPanel6"> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" max="-2" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Component id="jPanel5" min="-2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + <Component id="jPanel3" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="22" max="-2" attributes="0"/> + </Group> + <Component id="jLabel9" min="-2" max="-2" attributes="0"/> + <Component id="jSeparator6" min="-2" pref="587" max="-2" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jSeparator6" min="-2" pref="10" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="2" max="-2" attributes="0"/> + <Component id="jLabel9" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jPanel5" min="-2" pref="50" max="-2" attributes="0"/> + <Component id="jPanel3" min="-2" pref="50" max="-2" attributes="0"/> + </Group> + <EmptySpace min="0" pref="20" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel9"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Ubuntu" size="15" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel9.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Container class="javax.swing.JPanel" name="jPanel5"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="distance of feature points"> + <ResourceString PropertyName="titleX" bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jPanel5.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </TitledBorder> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="9" max="-2" attributes="0"/> + <Component id="jLabel12" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel13" min="-2" pref="42" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel10" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel15" min="-2" pref="39" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel11" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel14" min="-2" pref="45" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="3" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel12" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel13" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel10" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel15" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel11" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel14" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel12"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Ubuntu" size="15" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel12.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel13"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Ubuntu" size="15" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel13.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel10"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel10.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel15"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Ubuntu" size="15" style="0"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel15.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel11"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel11.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel14"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Ubuntu" size="15" style="0"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel14.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="jPanel3"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Hausdorff distance"> + <ResourceString PropertyName="titleX" bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jPanel3.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </TitledBorder> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="9" max="-2" attributes="0"/> + <Component id="jLabel16" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel17" min="-2" pref="40" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="2" max="-2" attributes="0"/> + <Component id="jLabel18" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel19" min="-2" pref="40" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel20" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel21" min="-2" pref="40" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="3" max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel16" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel17" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel18" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel19" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel20" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel21" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel16"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Ubuntu" size="15" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel16.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel17"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Ubuntu" size="15" style="1"/> + </Property> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel17.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel18"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel18.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel19"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel19.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel20"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel20.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel21"> + <Properties> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel21.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JSeparator" name="jSeparator6"> + </Component> + </SubComponents> + </Container> </SubComponents> </Form> diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.java b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.java index eac65ef4c3efb550bb0208cc39aa97cb655ceaba..610477e27ff43eebd7aadcd47d0ab0eb4412ec04 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.java +++ b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.java @@ -7,6 +7,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.DecimalFormat; import java.text.NumberFormat; +import javax.swing.AbstractAction; import javax.swing.ImageIcon; import javax.swing.JFormattedTextField; import javax.swing.JLabel; @@ -29,6 +30,7 @@ public class RegistrationPanel extends ControlPanel { * External actions */ public static final String ACTION_COMMAND_APPLY_ICP = "apply ICP"; + public static final String ACTION_COMMAND_SHIFT_X = "shift x"; public static final String ACTION_COMMAND_SHIFT_Y = "shift y"; public static final String ACTION_COMMAND_SHIFT_Z = "shift z"; @@ -36,19 +38,32 @@ public class RegistrationPanel extends ControlPanel { public static final String ACTION_COMMAND_ROTATE_Y = "rotate y"; public static final String ACTION_COMMAND_ROTATE_Z = "rotate z"; public static final String ACTION_COMMAND_SCALE = "scale"; - public static final String ACTION_COMMAND_FRONT_VIEW = "front view"; - public static final String ACTION_COMMAND_SIDE_VIEW = "side view"; public static final String ACTION_COMMAND_RESET_ROTATION = "reset translation"; public static final String ACTION_COMMAND_RESET_TRANSLATION = "reset rotation"; public static final String ACTION_COMMAND_RESET_SCALE = "reset scale"; public static final String ACTION_COMMAND_APPLY_TRANSFORMATIONS = "apply transformations"; + + public static final String ACTION_COMMAND_FRONT_VIEW = "front view"; + public static final String ACTION_COMMAND_SIDE_VIEW = "side view"; public static final String ACTION_COMMAND_TRANSPARENCY = "transparency"; + public static final String ACTION_COMMAND_FP_CLOSENESS_THRESHOLD = "fp closeness treshold"; + public static final String ACTION_COMMAND_ICP_SCALE = "ICP scale"; public static final String ACTION_COMMAND_ICP_MAX_ITERATIONS = "ICP iterations"; public static final String ACTION_COMMAND_ICP_ERROR = "ICP error"; public static final String ACTION_COMMAND_ICP_UNDERSAMPLING = "ICP undersampling"; + public static final String ACTION_COMMAND_HD_HEATMAP = "show-hide heatmap"; + public static final String ACTION_COMMAND_HD_STRATEGY = "set strategy"; + public static final String ACTION_COMMAND_HD_RELATIVE_DIST = "switch abosulte-relative distance"; + + /* + * Configuration of panel-specific GUI elements + */ + public static final String STRATEGY_POINT_TO_POINT= "Point to point"; + public static final String STRATEGY_POINT_TO_TRIANGLE= "Point to triangle"; + public static final double TRANSFORMATION_FINESS = 1.0; /** @@ -122,6 +137,28 @@ public class RegistrationPanel extends ControlPanel { jFormattedTextField1.addActionListener(createListener(action, ACTION_COMMAND_ICP_ERROR)); jFormattedTextField2.addActionListener(createListener(action, ACTION_COMMAND_ICP_MAX_ITERATIONS)); jComboBox1.addActionListener(createListener(action, ACTION_COMMAND_ICP_UNDERSAMPLING)); + + jCheckBox2.addActionListener(createListener(action, ACTION_COMMAND_HD_RELATIVE_DIST)); + jComboBox2.addActionListener(createListener(action, ACTION_COMMAND_HD_STRATEGY)); + jToggleButton1.addActionListener(createListener(action, ACTION_COMMAND_HD_HEATMAP)); + + // Hide then re-compute HD when manipulating with the secondary face: + ActionListener heatmapOff = new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + if (jToggleButton1.isSelected()) { + jToggleButton1.doClick(); + } + initHDStats(); + } + }; + translationXFTF.addActionListener(heatmapOff); + translationYFTF.addActionListener(heatmapOff); + translationZFTF.addActionListener(heatmapOff); + rotationXFTF.addActionListener(heatmapOff); + rotationYFTF.addActionListener(heatmapOff); + rotationZFTF.addActionListener(heatmapOff); + scaleFTF.addActionListener(heatmapOff); } /** @@ -166,6 +203,10 @@ public class RegistrationPanel extends ControlPanel { jLabel17.setText(formatter.format(avg)); } + private void initHDStats() { + updateHDStats(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); + } + private void setStats(double newVal, double oldVal, JLabel label) { if (newVal < oldVal) { label.setForeground(Color.GREEN); @@ -264,6 +305,8 @@ public class RegistrationPanel extends ControlPanel { translationYFTF.setValue(0.0); translationZFTF.setValue(0.0); scaleFTF.setValue(0.0); + + initHDStats(); } private void increaseInputField(JFormattedTextField textField) { @@ -351,26 +394,12 @@ public class RegistrationPanel extends ControlPanel { jButton1 = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); - jPanel3 = new javax.swing.JPanel(); - jLabel16 = new javax.swing.JLabel(); - jLabel17 = new javax.swing.JLabel(); - jLabel18 = new javax.swing.JLabel(); - jLabel19 = new javax.swing.JLabel(); - jLabel20 = new javax.swing.JLabel(); - jLabel21 = new javax.swing.JLabel(); jSeparator1 = new javax.swing.JSeparator(); jLabel22 = new javax.swing.JLabel(); jCheckBox2 = new javax.swing.JCheckBox(); jLabel23 = new javax.swing.JLabel(); jComboBox2 = new javax.swing.JComboBox<>(); jToggleButton1 = new javax.swing.JToggleButton(); - jPanel5 = new javax.swing.JPanel(); - jLabel12 = new javax.swing.JLabel(); - jLabel13 = new javax.swing.JLabel(); - jLabel10 = new javax.swing.JLabel(); - jLabel15 = new javax.swing.JLabel(); - jLabel11 = new javax.swing.JLabel(); - jLabel14 = new javax.swing.JLabel(); jPanel4 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); visualizationLabel = new javax.swing.JLabel(); @@ -383,6 +412,23 @@ public class RegistrationPanel extends ControlPanel { thersholdUpButton = new javax.swing.JButton(); thresholdDownButton = new javax.swing.JButton(); jSeparator3 = new javax.swing.JSeparator(); + jPanel6 = new javax.swing.JPanel(); + jLabel9 = new javax.swing.JLabel(); + jPanel5 = new javax.swing.JPanel(); + jLabel12 = new javax.swing.JLabel(); + jLabel13 = new javax.swing.JLabel(); + jLabel10 = new javax.swing.JLabel(); + jLabel15 = new javax.swing.JLabel(); + jLabel11 = new javax.swing.JLabel(); + jLabel14 = new javax.swing.JLabel(); + jPanel3 = new javax.swing.JPanel(); + jLabel16 = new javax.swing.JLabel(); + jLabel17 = new javax.swing.JLabel(); + jLabel18 = new javax.swing.JLabel(); + jLabel19 = new javax.swing.JLabel(); + jLabel20 = new javax.swing.JLabel(); + jLabel21 = new javax.swing.JLabel(); + jSeparator6 = new javax.swing.JSeparator(); setMinimumSize(new java.awt.Dimension(600, 600)); setPreferredSize(new java.awt.Dimension(600, 600)); @@ -762,7 +808,7 @@ public class RegistrationPanel extends ControlPanel { .addGroup(rotationPanelLayout.createSequentialGroup() .addGap(6, 6, 6) .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(rotationZFTF, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rotationZFTF, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, rotationPanelLayout.createSequentialGroup() .addComponent(leftRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) @@ -790,16 +836,16 @@ public class RegistrationPanel extends ControlPanel { .addComponent(leftRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(rightRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(rotationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(rotationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(rotationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(rotationPanelLayout.createSequentialGroup() .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(leftRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(rightRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rotationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(rotationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(rotationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, rotationPanelLayout.createSequentialGroup() .addComponent(rotationButton) .addGap(5, 5, 5)))) @@ -1079,31 +1125,32 @@ public class RegistrationPanel extends ControlPanel { .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel3) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel3) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel8) + .addGap(2, 2, 2) + .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel7) .addGap(6, 6, 6) .addComponent(jCheckBox1) - .addGap(51, 51, 51) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel5) .addGap(4, 4, 4) - .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(jLabel8) - .addGap(2, 2, 2) - .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addGap(40, 40, 40) + .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(57, 57, 57))) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGap(12, 12, 12) - .addComponent(jButton1)) - .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(jLabel6) .addGap(3, 3, 3) - .addComponent(jFormattedTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE))))) - .addContainerGap(410, Short.MAX_VALUE)) + .addComponent(jFormattedTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(54, 54, 54)))) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -1120,10 +1167,11 @@ public class RegistrationPanel extends ControlPanel { .addComponent(jLabel6) .addComponent(jFormattedTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel8) - .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jButton1)) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jButton1) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel8) + .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(13, Short.MAX_VALUE)) ); @@ -1132,55 +1180,6 @@ public class RegistrationPanel extends ControlPanel { jLabel4.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel4.text")); // NOI18N - jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jPanel3.border.title"))); // NOI18N - - jLabel16.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel16, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel16.text")); // NOI18N - - jLabel17.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel17, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel17.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel18, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel18.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel19, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel19.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel20, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel20.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel21, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel21.text")); // NOI18N - - javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); - jPanel3.setLayout(jPanel3Layout); - jPanel3Layout.setHorizontalGroup( - jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel3Layout.createSequentialGroup() - .addGap(9, 9, 9) - .addComponent(jLabel16) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel17, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(2, 2, 2) - .addComponent(jLabel18) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel19, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel20) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel21, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - jPanel3Layout.setVerticalGroup( - jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel3Layout.createSequentialGroup() - .addGap(3, 3, 3) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel16) - .addComponent(jLabel17) - .addComponent(jLabel18) - .addComponent(jLabel19) - .addComponent(jLabel20) - .addComponent(jLabel21)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - org.openide.awt.Mnemonics.setLocalizedText(jLabel22, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel22.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jCheckBox2, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jCheckBox2.text")); // NOI18N @@ -1202,57 +1201,6 @@ public class RegistrationPanel extends ControlPanel { } }); - jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jPanel5.border.title"))); // NOI18N - - jLabel12.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel12, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel12.text")); // NOI18N - - jLabel13.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel13, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel13.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel10, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel10.text")); // NOI18N - - jLabel15.setFont(new java.awt.Font("Ubuntu", 0, 15)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel15, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel15.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel11, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel11.text")); // NOI18N - - jLabel14.setFont(new java.awt.Font("Ubuntu", 0, 15)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel14, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel14.text")); // NOI18N - - javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); - jPanel5.setLayout(jPanel5Layout); - jPanel5Layout.setHorizontalGroup( - jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel5Layout.createSequentialGroup() - .addGap(9, 9, 9) - .addComponent(jLabel12) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel10) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel11) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(26, Short.MAX_VALUE)) - ); - jPanel5Layout.setVerticalGroup( - jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel5Layout.createSequentialGroup() - .addGap(3, 3, 3) - .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel12) - .addComponent(jLabel13) - .addComponent(jLabel10) - .addComponent(jLabel15) - .addComponent(jLabel11) - .addComponent(jLabel14)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( @@ -1262,21 +1210,17 @@ public class RegistrationPanel extends ControlPanel { .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel4) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 600, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addGroup(jPanel2Layout.createSequentialGroup() - .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(68, 68, 68) - .addComponent(jToggleButton1)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup() - .addComponent(jLabel22) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jCheckBox2) - .addGap(44, 44, 44) - .addComponent(jLabel23) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(310, Short.MAX_VALUE)) + .addGroup(jPanel2Layout.createSequentialGroup() + .addComponent(jLabel22) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jCheckBox2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel23) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(40, 40, 40) + .addComponent(jToggleButton1))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -1286,19 +1230,14 @@ public class RegistrationPanel extends ControlPanel { .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel4) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBox2) - .addComponent(jLabel22)) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel23) - .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(jToggleButton1)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(12, 12, 12) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jCheckBox2) + .addComponent(jLabel22))) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel23) + .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jToggleButton1))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); @@ -1424,7 +1363,7 @@ public class RegistrationPanel extends ControlPanel { .addComponent(visualizationLabel)) .addGroup(jPanel4Layout.createSequentialGroup() .addGap(18, 18, 18) - .addComponent(transparencyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(transparencyButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel4Layout.createSequentialGroup() @@ -1441,6 +1380,138 @@ public class RegistrationPanel extends ControlPanel { .addGap(0, 0, Short.MAX_VALUE)))) ); + jLabel9.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel9, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel9.text")); // NOI18N + + jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jPanel5.border.title"))); // NOI18N + + jLabel12.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel12, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel12.text")); // NOI18N + + jLabel13.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel13, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel13.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel10, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel10.text")); // NOI18N + + jLabel15.setFont(new java.awt.Font("Ubuntu", 0, 15)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel15, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel15.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel11, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel11.text")); // NOI18N + + jLabel14.setFont(new java.awt.Font("Ubuntu", 0, 15)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel14, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel14.text")); // NOI18N + + javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); + jPanel5.setLayout(jPanel5Layout); + jPanel5Layout.setHorizontalGroup( + jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel5Layout.createSequentialGroup() + .addGap(9, 9, 9) + .addComponent(jLabel12) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel10) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel11) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel5Layout.setVerticalGroup( + jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel5Layout.createSequentialGroup() + .addGap(3, 3, 3) + .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel12) + .addComponent(jLabel13) + .addComponent(jLabel10) + .addComponent(jLabel15) + .addComponent(jLabel11) + .addComponent(jLabel14)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jPanel3.border.title"))); // NOI18N + + jLabel16.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel16, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel16.text")); // NOI18N + + jLabel17.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel17, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel17.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel18, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel18.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel19, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel19.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel20, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel20.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel21, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel21.text")); // NOI18N + + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGap(9, 9, 9) + .addComponent(jLabel16) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel17, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(2, 2, 2) + .addComponent(jLabel18) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel19, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel20) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel21, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGap(3, 3, 3) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel16) + .addComponent(jLabel17) + .addComponent(jLabel18) + .addComponent(jLabel19) + .addComponent(jLabel20) + .addComponent(jLabel21)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); + jPanel6.setLayout(jPanel6Layout); + jPanel6Layout.setHorizontalGroup( + jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel6Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup() + .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(22, 22, 22)) + .addComponent(jLabel9) + .addComponent(jSeparator6, javax.swing.GroupLayout.PREFERRED_SIZE, 587, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel6Layout.setVerticalGroup( + jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel6Layout.createSequentialGroup() + .addComponent(jSeparator6, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(2, 2, 2) + .addComponent(jLabel9) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 20, Short.MAX_VALUE)) + ); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -1454,10 +1525,12 @@ public class RegistrationPanel extends ControlPanel { .addGap(450, 450, 450)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 922, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 692, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 624, Short.MAX_VALUE) + .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGap(0, 0, Short.MAX_VALUE)) ); layout.setVerticalGroup( @@ -1465,14 +1538,16 @@ public class RegistrationPanel extends ControlPanel { .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(21, 21, 21) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(77, 77, 77) .addComponent(jSeparator11, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(215, 215, 215) + .addGap(221, 221, 221) .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); @@ -1715,11 +1790,13 @@ public class RegistrationPanel extends ControlPanel { private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; + private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; + private javax.swing.JPanel jPanel6; private javax.swing.JSeparator jSeparator1; private javax.swing.JSeparator jSeparator10; private javax.swing.JSeparator jSeparator11; @@ -1727,6 +1804,7 @@ public class RegistrationPanel extends ControlPanel { private javax.swing.JSeparator jSeparator3; private javax.swing.JSeparator jSeparator4; private javax.swing.JSeparator jSeparator5; + private javax.swing.JSeparator jSeparator6; private javax.swing.JToggleButton jToggleButton1; private javax.swing.JButton leftRotationXButton; private javax.swing.JButton leftRotationYButton; diff --git a/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java b/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java index f79f7a8be03aec3866b5f173e122388c7e59900a..9df7b46ba231f59ed54401e0ea5db6a08a0f2ef6 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java +++ b/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java @@ -39,6 +39,7 @@ public class FaceToFaceToolBar extends RenderingToolBar { button.setIcon(DistancePanel.getStaticIcon()); button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "FaceToFaceToolBar.distance.text")); add(button); + button.doClick(); // show } private void addRegistrationButton(JTabbedPane controlPanel) { @@ -48,5 +49,6 @@ public class FaceToFaceToolBar extends RenderingToolBar { button.setIcon(RegistrationPanel.getStaticIcon()); button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "FaceToFaceToolBar.registration.text")); add(button); + button.doClick(); // show } } diff --git a/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties index 04994f37297207d9b290006cb43d780c1653e6d0..d15a3ec8f6a9a605b93fc73d2816cf4c61a390e0 100644 --- a/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties +++ b/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties @@ -1,8 +1,8 @@ -RegistrationPanel.jButton1.text=(Re)compute ICP +RegistrationPanel.jButton1.text=(Re)compute RegistrationPanel.jCheckBox1.text= RegistrationPanel.jFormattedTextField1.text=0,3 RegistrationPanel.jLabel5.text=minimal error: -RegistrationPanel.jFormattedTextField2.text=10 +RegistrationPanel.jFormattedTextField2.text=50 RegistrationPanel.jLabel6.text=max. iteration.: RegistrationPanel.jLabel7.text=scale face: RegistrationPanel.jLabel8.text=undersampling: @@ -76,12 +76,13 @@ RegistrationPanel.leftTranslationYButton.text= RegistrationPanel.translationXFTF.toolTipText= RegistrationPanel.rightTranslationXButton.text= RegistrationPanel.translationButton.toolTipText=reset translation -RegistrationPanel.jLabel3.text=Automatic registration -RegistrationPanel.jLabel4.text=Distance +RegistrationPanel.jLabel3.text=ICP registration +RegistrationPanel.jLabel4.text=Hausdorff distance RegistrationPanel.jPanel3.border.title=Hausdorff distance RegistrationPanel.jLabel22.text=relative distance: RegistrationPanel.jCheckBox2.text= -RegistrationPanel.jLabel23.text=distance strategy: +RegistrationPanel.jLabel23.text=strategy: RegistrationPanel.jToggleButton1.text=Show heatmap RegistrationPanel.jLabel1.text=View RegistrationPanel.jPanel5.border.title=distance of feature points +RegistrationPanel.jLabel9.text=Stats