diff --git a/Comparison/src/main/java/cz/fidentis/analyst/BatchProcessor.java b/Comparison/src/main/java/cz/fidentis/analyst/BatchProcessor.java index 9b0aa3b56d876a5ca455a41094f7878f1408b0ee..0de5414dc250900339ad38ded8c12604b67faf91 100644 --- a/Comparison/src/main/java/cz/fidentis/analyst/BatchProcessor.java +++ b/Comparison/src/main/java/cz/fidentis/analyst/BatchProcessor.java @@ -7,8 +7,7 @@ import cz.fidentis.analyst.icp.IcpTransformer; import cz.fidentis.analyst.icp.UndersamplingStrategy; import cz.fidentis.analyst.kdtree.KdTree; import cz.fidentis.analyst.mesh.core.MeshFacet; -import cz.fidentis.analyst.symmetry.SignificantPoints; -import static cz.fidentis.analyst.symmetry.SignificantPoints.CurvatureAlg.GAUSSIAN; +import cz.fidentis.analyst.symmetry.CurvatureAlg; import cz.fidentis.analyst.symmetry.SymmetryConfig; import cz.fidentis.analyst.symmetry.SymmetryEstimator; import java.io.File; @@ -30,7 +29,6 @@ public class BatchProcessor { private double avgIcpIterations = 0.0; private SymmetryConfig symmetryConfig; - private SignificantPoints.CurvatureAlg symmetryCurvArg = GAUSSIAN; /** * Constructor. @@ -72,7 +70,7 @@ public class BatchProcessor { for (String facePath: faceIDs) { String faceId = HumanFaceFactory.instance().loadFace(new File(facePath)); HumanFace face = HumanFaceFactory.instance().getFace(faceId); - SymmetryEstimator se = new SymmetryEstimator(this.symmetryConfig, this.symmetryCurvArg); + SymmetryEstimator se = new SymmetryEstimator(this.symmetryConfig); face.getMeshModel().compute(se); face.setSymmetryPlane(se.getSymmetryPlane(), se.getSymmetryPlaneMesh()); } diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/CurvatureAlg.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/CurvatureAlg.java new file mode 100644 index 0000000000000000000000000000000000000000..64eabced06338550c08014ce6b4ca0dae8b862a3 --- /dev/null +++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/CurvatureAlg.java @@ -0,0 +1,13 @@ +package cz.fidentis.analyst.symmetry; + +/** + * Curvature algorithm used for the selection of the top X significant points. + * + * @author Radek Oslejsek + */ +public enum CurvatureAlg { + MEAN, + GAUSSIAN, + MAX, + MIN +} diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SignificantPoints.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SignificantPoints.java index cee086f5094b1902c5fe24f9d42a58a49cab19f0..1aa8bceb697b75e943b69606835622c254c809b5 100644 --- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SignificantPoints.java +++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SignificantPoints.java @@ -24,17 +24,6 @@ import javax.vecmath.Vector3d; */ public class SignificantPoints extends MeshVisitor { - /** - * Curvature algorithm used for the selection of the top X significant points. - * @author Radek Oslejsek - */ - public enum CurvatureAlg { - MEAN, - GAUSSIAN, - MAX, - MIN - }; - private final int maxPoints; private final Curvature curvatureVisitor; diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryConfig.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryConfig.java index c4ee1faa4832f9757285a182e0cee19a1763f86c..bb4d0482a5cb2cb8846951f26da5b05e156c5509 100644 --- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryConfig.java +++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryConfig.java @@ -16,6 +16,7 @@ public class SymmetryConfig { private static final double DEFAULT_MAX_REL_DISTANCE = 1.0 / 100.0; private static final int DEFAULT_SIGNIFICANT_POINT_COUNT = 200; private static final boolean DEFAULT_AVERAGING = true; + private static final CurvatureAlg DEFAULT_CURVATURE_ALGORITHM = CurvatureAlg.GAUSSIAN; private double minCurvRatio; private double minAngleCos; @@ -23,6 +24,7 @@ public class SymmetryConfig { private double maxRelDistance; private int significantPointCount; private boolean averaging; + private CurvatureAlg curvatureAlg; /** * Creates configuration with default values @@ -34,6 +36,31 @@ public class SymmetryConfig { maxRelDistance = DEFAULT_MAX_REL_DISTANCE; significantPointCount = DEFAULT_SIGNIFICANT_POINT_COUNT; averaging = DEFAULT_AVERAGING; + curvatureAlg = DEFAULT_CURVATURE_ALGORITHM; + } + + /** + * Copy constructor. + * + * @param conf Original configuration + */ + public SymmetryConfig(SymmetryConfig conf) { + copy(conf); + } + + /** + * Copies values from another configuration object. + * + * @param conf Another configuration + */ + public void copy(SymmetryConfig conf) { + minCurvRatio = conf.minCurvRatio; + minAngleCos = conf.maxRelDistance; + minNormAngleCos = conf.minNormAngleCos; + maxRelDistance = conf.maxRelDistance; + significantPointCount = conf.significantPointCount; + averaging = conf.averaging; + curvatureAlg = conf.curvatureAlg; } /** @@ -147,6 +174,22 @@ public class SymmetryConfig { public void setAveraging(boolean averaging) { this.averaging = averaging; } + + /** + * Returns curvature algorithm. + * @return curvature algorithm + */ + public CurvatureAlg getCurvatureAlg() { + return this.curvatureAlg; + } + + /** + * Sets curvature algorithm. + * @param alg curvature algorithm + */ + public void setCurvatureAlg(CurvatureAlg alg) { + this.curvatureAlg = alg; + } /** * @@ -162,6 +205,7 @@ public class SymmetryConfig { str += "Max relative distance: " + maxRelDistance + "\n"; str += "Significant points: " + significantPointCount + "\n"; str += "Averaging: " + averaging + "\n"; + str += "Curvature: " + curvatureAlg + "\n"; return str; } } \ No newline at end of file diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java index 44b1f66152dcb982ac2a19c9124d3ef465c49b1f..4a2b0cc77c9a926c53f5bfd62e44bdc32100a8ad 100644 --- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java +++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java @@ -5,10 +5,8 @@ import cz.fidentis.analyst.mesh.core.CornerTableRow; import cz.fidentis.analyst.mesh.core.MeshFacet; import cz.fidentis.analyst.mesh.core.MeshFacetImpl; import cz.fidentis.analyst.mesh.core.MeshPointImpl; -import cz.fidentis.analyst.symmetry.SignificantPoints.CurvatureAlg; import cz.fidentis.analyst.visitors.mesh.BoundingBox; import cz.fidentis.analyst.visitors.mesh.BoundingBox.BBox; -import cz.fidentis.analyst.visitors.mesh.Curvature; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; @@ -46,16 +44,14 @@ public class SymmetryEstimator extends MeshVisitor { * Constructor. * * @param config Algorithm options - * @param curvatureAlg Curvature algorithm used for the selection of significant points. - * See {@link Curvature} for more details. * @throws IllegalArgumentException if some input parameter is missing */ - public SymmetryEstimator(SymmetryConfig config, CurvatureAlg curvatureAlg) { + public SymmetryEstimator(SymmetryConfig config) { if (config == null) { throw new IllegalArgumentException("config"); } this.config = config; - this.sigPointsVisitor = new SignificantPoints(curvatureAlg, config.getSignificantPointCount()); + this.sigPointsVisitor = new SignificantPoints(config.getCurvatureAlg(), config.getSignificantPointCount()); } @Override @@ -76,8 +72,9 @@ public class SymmetryEstimator extends MeshVisitor { } /** - * Computes the symmetry plane concurrently. The plane is computed only once, - * then the same instance is returned. + * Computes the symmetry plane concurrently.The plane is computed only once, then the same instance is returned. + * + * @return Symmetry plane */ public Plane getSymmetryPlane() { return getSymmetryPlane(true); diff --git a/Comparison/src/test/java/cz/fidentis/analyst/visitors/kdtree/KdTreeApproxDistToTriTest.java b/Comparison/src/test/java/cz/fidentis/analyst/visitors/kdtree/KdTreeApproxDistToTriTest.java index 9980ec45e3a5edafde31945ed15b4bffdb796ce8..1151119ee965afe396dcb75cc6e3bc92bc6a18b6 100644 --- a/Comparison/src/test/java/cz/fidentis/analyst/visitors/kdtree/KdTreeApproxDistToTriTest.java +++ b/Comparison/src/test/java/cz/fidentis/analyst/visitors/kdtree/KdTreeApproxDistToTriTest.java @@ -1,18 +1,10 @@ package cz.fidentis.analyst.visitors.kdtree; import cz.fidentis.analyst.kdtree.KdTree; -import cz.fidentis.analyst.kdtree.KdTreeVisitor; import cz.fidentis.analyst.mesh.core.CornerTableRow; import cz.fidentis.analyst.mesh.core.MeshFacet; import cz.fidentis.analyst.mesh.core.MeshFacetImpl; -import cz.fidentis.analyst.mesh.core.MeshPoint; import cz.fidentis.analyst.mesh.core.MeshPointImpl; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; import javax.vecmath.Point3d; import javax.vecmath.Vector3d; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.form b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.form similarity index 86% rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.form rename to GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.form index 1c4273533b0c5a475555b30b37ca60567f472bfc..776493ee17f09e9f0184688002e2e24c46cea444 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.form +++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.form @@ -27,7 +27,6 @@ <Color blue="28" green="28" red="28" type="rgb"/> </Property> <Property name="toolTipText" type="java.lang.String" value=""/> - <Property name="opaque" type="boolean" value="true"/> </Properties> <Events> <EventHandler event="componentResized" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="jLayeredPane1ComponentResized"/> @@ -191,6 +190,9 @@ </Component> <Component class="javax.swing.JLabel" name="jLabel1"> <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="28" green="28" red="28" type="rgb"/> + </Property> <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> <Image iconType="3" name="/navigBackground.png"/> </Property> @@ -226,44 +228,6 @@ </Constraint> </Constraints> </Component> - <Component class="javax.swing.JLabel" name="whiteBackroundButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/whiteBackroundCanvas.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="White backround"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="whiteBackroundButtonMouseClicked"/> - </Events> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="50" y="130" width="-1" height="-1"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JLabel" name="blackBackroundButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/blackBackroundCanvas.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Dark background"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="blackBackroundButtonMouseClicked"/> - </Events> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="50" y="190" width="-1" height="-1"/> - </Constraint> - </Constraints> - </Component> <Container class="javax.swing.JPanel" name="jPanel1"> <Properties> <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java similarity index 87% rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.java rename to GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java index 8b74f81ac2ac1828de5c6208053e5e6c4f393e6d..bcc2da965d616d126c9ae36ab4ec576a1bc1986e 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.java +++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java @@ -1,12 +1,12 @@ -package cz.fidentis.analyst.gui.canvas; +package cz.fidentis.analyst.canvas; import com.jogamp.opengl.GLCapabilities; import com.jogamp.opengl.GLProfile; import com.jogamp.opengl.awt.GLCanvas; import cz.fidentis.analyst.face.HumanFace; -import cz.fidentis.analyst.gui.scene.Camera; -import cz.fidentis.analyst.gui.scene.Scene; -import cz.fidentis.analyst.gui.scene.SceneRenderer; +import cz.fidentis.analyst.scene.Camera; +import cz.fidentis.analyst.scene.Scene; +import cz.fidentis.analyst.scene.SceneRenderer; import java.awt.Color; import java.awt.Cursor; @@ -83,7 +83,8 @@ public class Canvas extends javax.swing.JPanel { /** * Initializes the scene for the 1:1 comparison. Can be called only once. * - * @param face Human face + * @param primary Primary face + * @param secondary Secondary face * @throws UnsupportedOperationException the the scene is already initiated * @throws IllegalArgumentException if some face is missing */ @@ -102,6 +103,9 @@ public class Canvas extends javax.swing.JPanel { return sceneRenderer; } + /** + * Renders the scene. + */ public void renderScene() { glCanvas.display(); } @@ -169,8 +173,6 @@ public class Canvas extends javax.swing.JPanel { plusNavigationButton = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); rightNavigationButton1 = new javax.swing.JButton(); - whiteBackroundButton = new javax.swing.JLabel(); - blackBackroundButton = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); setBackground(new java.awt.Color(0, 0, 0)); @@ -178,7 +180,6 @@ public class Canvas extends javax.swing.JPanel { jLayeredPane1.setBackground(new java.awt.Color(40, 40, 40)); jLayeredPane1.setToolTipText(""); - jLayeredPane1.setOpaque(true); jLayeredPane1.addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(java.awt.event.ComponentEvent evt) { jLayeredPane1ComponentResized(evt); @@ -292,6 +293,7 @@ public class Canvas extends javax.swing.JPanel { jLayeredPane1.add(plusNavigationButton); plusNavigationButton.setBounds(30, 90, 30, 30); + jLabel1.setBackground(new java.awt.Color(40, 40, 40)); jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/navigBackground.png"))); // NOI18N jLayeredPane1.add(jLabel1); jLabel1.setBounds(30, 10, 90, 90); @@ -313,28 +315,6 @@ public class Canvas extends javax.swing.JPanel { jLayeredPane1.add(rightNavigationButton1); rightNavigationButton1.setBounds(90, 40, 30, 30); - whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvas.png"))); // NOI18N - whiteBackroundButton.setToolTipText("White backround"); - whiteBackroundButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - whiteBackroundButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - whiteBackroundButtonMouseClicked(evt); - } - }); - jLayeredPane1.add(whiteBackroundButton); - whiteBackroundButton.setBounds(50, 130, 56, 56); - - blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvas.png"))); // NOI18N - blackBackroundButton.setToolTipText("Dark background"); - blackBackroundButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - blackBackroundButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - blackBackroundButtonMouseClicked(evt); - } - }); - jLayeredPane1.add(blackBackroundButton); - blackBackroundButton.setBounds(50, 190, 56, 56); - jPanel1.setBackground(new java.awt.Color(0, 0, 0)); jPanel1.setLayout(new java.awt.BorderLayout()); jLayeredPane1.add(jPanel1); @@ -427,22 +407,7 @@ public class Canvas extends javax.swing.JPanel { resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButton.png"))); }//GEN-LAST:event_resetButtonMouseExited - private void whiteBackroundButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_whiteBackroundButtonMouseClicked - sceneRenderer.setBrightBackground(); - renderScene(); - whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvasPressed.png"))); - blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvas.png"))); - }//GEN-LAST:event_whiteBackroundButtonMouseClicked - - private void blackBackroundButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_blackBackroundButtonMouseClicked - sceneRenderer.setDarkBackground(); - renderScene(); - whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvas.png"))); - blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvasPressed.png"))); - }//GEN-LAST:event_blackBackroundButtonMouseClicked - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel blackBackroundButton; private javax.swing.JButton downNavigationButton; private javax.swing.JLabel jLabel1; private javax.swing.JLayeredPane jLayeredPane1; @@ -453,6 +418,5 @@ public class Canvas extends javax.swing.JPanel { private javax.swing.JLabel resetButton; private javax.swing.JButton rightNavigationButton1; private javax.swing.JButton upNavigationButton; - private javax.swing.JLabel whiteBackroundButton; // End of variables declaration//GEN-END:variables } diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/CanvasListener.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/CanvasListener.java similarity index 94% rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/CanvasListener.java rename to GUI/src/main/java/cz/fidentis/analyst/canvas/CanvasListener.java index d8fbc1c9236e321ea829072988895a53fda7e7ca..21f9e7110aaa830b1cd3d2c5d9433153573c0b67 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/CanvasListener.java +++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/CanvasListener.java @@ -1,4 +1,4 @@ -package cz.fidentis.analyst.gui.canvas; +package cz.fidentis.analyst.canvas; import com.jogamp.opengl.GLAutoDrawable; import com.jogamp.opengl.GLEventListener; @@ -39,7 +39,7 @@ public class CanvasListener implements GLEventListener { @Override public void display(GLAutoDrawable glad) { //System.out.println("CanvasListener.display " + this.toString()); - canvas.getSceneRenderer().renderScene(canvas.getCamera(), canvas.getScene().getDrawables()); + canvas.getSceneRenderer().renderScene(canvas.getCamera(), canvas.getScene().getAllDrawables()); } @Override diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Direction.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/Direction.java similarity index 89% rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Direction.java rename to GUI/src/main/java/cz/fidentis/analyst/canvas/Direction.java index a0be3b48a1f8a78770c302fe970a9a0e25652c34..04a8348e70dc6dc4491860d9b1f5d392b816e36e 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Direction.java +++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/Direction.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package cz.fidentis.analyst.gui.canvas; +package cz.fidentis.analyst.canvas; /** * diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/MouseRotationListener.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/MouseRotationListener.java similarity index 95% rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/MouseRotationListener.java rename to GUI/src/main/java/cz/fidentis/analyst/canvas/MouseRotationListener.java index 2a9ecd90239a937f08f0be6fb58e3907ede4571e..26753fbdd348d09f060a2a9b5eb419d948496df5 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/MouseRotationListener.java +++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/MouseRotationListener.java @@ -1,4 +1,4 @@ -package cz.fidentis.analyst.gui.canvas; +package cz.fidentis.analyst.canvas; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/RotationAnimator.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/RotationAnimator.java similarity index 97% rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/RotationAnimator.java rename to GUI/src/main/java/cz/fidentis/analyst/canvas/RotationAnimator.java index 850d395f45972db169ce6f2a48efdddb7feb7d67..618d50f314463ea7776b5086cb25ef00ae5e7145 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/RotationAnimator.java +++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/RotationAnimator.java @@ -1,8 +1,8 @@ -package cz.fidentis.analyst.gui.canvas; +package cz.fidentis.analyst.canvas; import com.jogamp.opengl.awt.GLCanvas; import com.jogamp.opengl.util.FPSAnimator; -import cz.fidentis.analyst.gui.scene.Camera; +import cz.fidentis.analyst.scene.Camera; import java.util.Timer; import java.util.TimerTask; diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanel.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanel.java new file mode 100644 index 0000000000000000000000000000000000000000..2df031451bc5b5508f788aac3fd305ac3cc637dc --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanel.java @@ -0,0 +1,18 @@ +package cz.fidentis.analyst.core; + +import javax.swing.ImageIcon; +import javax.swing.JPanel; + +/** + * An abstract class for control panels that can be docked in the {@link TopControlPanel}. + * + * @author Radek Oslejsek + */ +public abstract class ControlPanel extends JPanel { + + /** + * Returns panel's icon. + * @return panel's icon + */ + public abstract ImageIcon getIcon(); +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java new file mode 100644 index 0000000000000000000000000000000000000000..da404c4984d67d296c726fb6a9dd6eb4f1f1ef57 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java @@ -0,0 +1,98 @@ +package cz.fidentis.analyst.core; + +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.event.ActionEvent; +import javax.swing.AbstractAction; +import javax.swing.JTabbedPane; +import javax.swing.JToggleButton; + +/** + * Default action listener used to connect specific control panel with the rest of + * the analytical tab, i.e. canvas and toolbar(s) + * + * @author Radek Oslejsek + */ +public abstract class ControlPanelAction extends AbstractAction { + + /* + * Handled actions + */ + public static final String ACTION_COMMAND_SHOW_HIDE_PANEL = "show-hide control panel"; + + /* + * Top component - the space delimited for placing control panels + */ + private final JTabbedPane topControlPanel; + + /** + * Canvas component + */ + private final Canvas canvas; + + /** + * Constructor. + * + * @param canvas OpenGL canvas + * @param topControlPanel Top component for placing control panels + * @throws IllegalArgumentException if some param is missing + */ + public ControlPanelAction(Canvas canvas, JTabbedPane topControlPanel) { + if (canvas == null) { + throw new IllegalArgumentException("canvas"); + } + if (topControlPanel == null) { + throw new IllegalArgumentException("topControlPanel"); + } + this.canvas = canvas; + this.topControlPanel = topControlPanel; + } + + @Override + public abstract void actionPerformed(ActionEvent ae); + + protected Canvas getCanvas() { + return canvas; + } + + /** + * The generic code for showing/hiding the control panel + * + * @param ae Action event + */ + protected void hideShowPanelActionPerformed(ActionEvent ae, ControlPanel controlPanel) { + if (((JToggleButton) ae.getSource()).isSelected()) { + topControlPanel.addTab(controlPanel.getName(), controlPanel.getIcon(), controlPanel); + topControlPanel.setSelectedComponent(controlPanel); // focus + } else { + topControlPanel.remove(controlPanel); + } + } + + protected Scene getScene() { + return canvas.getScene(); + } + + protected DrawableFace getPrimaryDrawableFace() { + return (canvas.getScene() != null) ? canvas.getScene().getDrawableFace(0) : null; + } + + protected DrawableFace getSecondaryDrawableFace() { + return (canvas.getScene() != null) ? canvas.getScene().getDrawableFace(1) : null; + } + + protected DrawableFeaturePoints getPrimaryFeaturePoints() { + return (canvas.getScene() != null) ? canvas.getScene().getDrawableFeaturePoints(0) : null; + } + + protected DrawableFeaturePoints getSecondaryFeaturePoints() { + return (canvas.getScene() != null) ? canvas.getScene().getDrawableFeaturePoints(1) : null; + } + + protected void renderScene() { + canvas.renderScene(); + } + +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..5abef3e79f8d59530bc1c4902868257ab4309845 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java @@ -0,0 +1,432 @@ +package cz.fidentis.analyst.core; + +import java.awt.Color; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import javax.swing.Box; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFormattedTextField; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSlider; +import javax.swing.JTextField; +import javax.swing.event.ChangeEvent; +import javax.swing.text.NumberFormatter; + +/** + * Builder for control panels. Layout is based on GridBagLayout. + * + * @author Radek Oslejsek + */ +public class ControlPanelBuilder { + + public static final Font CAPTION_FONT= new Font("Arial", 1, 18); + public static final Insets CAPTION_PADDING = new Insets(20, 0, 20, 0); // top, left, bottom, right + public static final ImageIcon HELP_ICON = new ImageIcon(ControlPanelBuilder.class.getResource("/info.png")); + public static final Font OPTION_TEXT_FONT = new Font("Arial", 1, 14); + public static final Color OPTION_TEXT_COLOR = new Color(20, 114, 105); + public static final int OPTION_TEXT_WIDTH = 20; // number of cells + public static final int SLIDER_WIDTH = 20; // number of cells + public static final int BUTTON_WIDTH = 12; // number of cells + + public static final int NUMBER_OF_FRACTION_DIGITS = 3; + + private JPanel controlPanel; + private int row = 0; + private int col = 0; + + /** + * Constructor. + * + * @param controlPanel Control panel to which the GUI elements are inserted. + */ + public ControlPanelBuilder(JPanel controlPanel) { + if (controlPanel == null) { + throw new IllegalArgumentException("controlPanel"); + } + this.controlPanel = controlPanel; + GridBagLayout layout = new GridBagLayout(); + this.controlPanel.setLayout(layout); + } + + /** + * Helper method that parses and returns integer from the input field taking + * Local into consideration. + * + * @param inputField The input field + * @return Integer or 0 + */ + public static int parseLocaleInt(JTextField inputField) { + NumberFormat format = NumberFormat.getInstance(Locale.getDefault()); + try { + Number number = format.parse(inputField.getText()); + return number.intValue(); + } catch (ParseException ex) { + return 0; + } + } + + /** + * Helper method that parses and returns floating point number from the input field + * takingLocale into consideration Locale. + * + * @param inputField The input field + * @return Double or 0.0 + */ + public static double parseLocaleDouble(JTextField inputField) { + NumberFormat format = NumberFormat.getInstance(Locale.getDefault()); + try { + Number number = format.parse(inputField.getText()); + return number.doubleValue(); + } catch (ParseException ex) { + return 0; + } + } + + /** + * Converts number into the text taking into account Locale + * @param value Number + * @return Text representation of given number + */ + public static String intToStringLocale(int value) { + return ""+value; + } + + /** + * Converts number into the text taking into account Locale + * @param value Number + * @return Text representation of given number + */ + public static String doubleToStringLocale(double value) { + NumberFormat formatter = DecimalFormat.getInstance(Locale.getDefault()); + formatter.setMinimumFractionDigits(1); + formatter.setMaximumFractionDigits(NUMBER_OF_FRACTION_DIGITS); + formatter.setRoundingMode(RoundingMode.HALF_UP); + return formatter.format(value); + } + + /** + * Adds a line with caption. + * + * @param caption Caption text. + * @return This new GUI object + */ + public JLabel addCaptionLine(String caption) { + GridBagConstraints c = new GridBagConstraints(); + c.insets = CAPTION_PADDING; + c.gridwidth = GridBagConstraints.REMAINDER; + c.gridx = col; + c.gridy = row; + c.anchor = GridBagConstraints.LINE_START; + c.fill = GridBagConstraints.NONE; + JLabel label = new JLabel(caption); + label.setFont(CAPTION_FONT); + controlPanel.add(label, c); + //addLine(); + return label; + } + + /** + * Adds a line with slider option. + * + * @param helpAction Action listener invoked when the help icon is clicked. If {@code null}, then no help is shown. + * @param text Option text. + * @param sliderMax Max value of the slider (and the value field). If {@code -1}, then percentage slider is shown with 100 as the max. value. + * @param helpAction Action listener invoked when the input field is changed + * @return Creates slider + */ + public JTextField addSliderOptionLine(ActionListener helpAction, String text, int sliderMax, ActionListener inputAction) { + if (helpAction != null) { + addOptionHelpIcon(helpAction); + } else { + col++; + } + addOptionText((text == null) ? "" : text); + + NumberFormatter formatter; + if (sliderMax == -1) { // percents in [0,1] => use two digit double + NumberFormat format = DecimalFormat.getInstance(Locale.getDefault()); + format.setMinimumFractionDigits(1); + format.setMaximumFractionDigits(NUMBER_OF_FRACTION_DIGITS); + format.setRoundingMode(RoundingMode.HALF_UP); + formatter = new NumberFormatter(format); + formatter.setValueClass(Double.class); + formatter.setMinimum(0.0); + formatter.setMaximum(1.0); + } else { + NumberFormat format = NumberFormat.getInstance(); + formatter = new NumberFormatter(format); + formatter.setValueClass(Integer.class); + formatter.setMinimum(0); + formatter.setMaximum(sliderMax); + } + formatter.setAllowsInvalid(false); + JFormattedTextField input = new JFormattedTextField(formatter); + + //JTextField input = new JTextField(); + input.setText("0"); + input.addActionListener(inputAction); + addSliderWithVal(sliderMax, input); + //addLine(); + return input; + } + + /** + * Adds a line with a checkbox option. + * + * @param helpAction Action listener invoked when the help icon is clicked. If {@code null}, then no help is shown. + * @param text Option text. + * @param selected Initial state of the checkbox. + * @param checkBoxAction Action listener invoked when the check box is clicked. + * @return Created checkbox + */ + public JCheckBox addCheckBoxOptionLine(ActionListener helpAction, String text, boolean selected, ActionListener checkBoxAction) { + if (helpAction != null) { + addOptionHelpIcon(helpAction); + } else { + col++; + } + addOptionText((text == null) ? "" : text); + JCheckBox cb = addCheckBox(selected, checkBoxAction); + //addLine(); + return cb; + } + + /** + * Moves the builder to the new line. Methods with "Line" suffix add new line automatically. + * + * @return This builder + */ + public ControlPanelBuilder addLine() { + row++; + col = 0; + return this; + } + + /** + * Adds a button section at the bottom of the control panel. + * + * @param buttons Labels. + * @param actions Action listener invoked when the corresponding button is clicked. + * @return This builder + * @throws IllegalArgumentException if the size of the two lists is different + */ + public List<JButton> addButtons(List<String> buttons, List<ActionListener> actions) { + if (buttons.size() != actions.size()) { + throw new IllegalArgumentException(); + } + + GridBagConstraints c = new GridBagConstraints(); + c.insets = new Insets(2, 0, 40, 0); // small external space on top and bottom + c.weighty = 1.0; //request any extra vertical space + c.gridwidth = BUTTON_WIDTH; + c.gridy = row; + c.anchor = GridBagConstraints.PAGE_END; + c.fill = GridBagConstraints.NONE; + + List<JButton> retButtons = new ArrayList<>(); + for (int i = 0; i < buttons.size(); i++) { + JButton button = new JButton(); + button.setText(buttons.get(i)); + button.addActionListener(actions.get(i)); + c.gridx = col; + col += BUTTON_WIDTH; + controlPanel.add(button, c); + retButtons.add(button); + } + + return retButtons; + } + + /** + * Adds a combo box + * @param items Items + * @param action Action listener invoked when some item is selected + * @return + */ + public JComboBox addComboBox(List<String> items, ActionListener action) { + GridBagConstraints c = new GridBagConstraints(); + c.insets = new Insets(0, 25, 0, 0); + c.gridwidth = OPTION_TEXT_WIDTH; + c.gridy = row; + c.gridx = col; + col += OPTION_TEXT_WIDTH; + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.NONE; + + JComboBox cbox = new JComboBox(items.toArray(String[]::new)); + cbox.addActionListener(action); + controlPanel.add(cbox, c); + + return cbox; + } + + /** + * Adds a horizontal strut that moves upper lines to the top of the panel + */ + public void addVerticalStrut() { + GridBagConstraints c = new GridBagConstraints(); + c.weighty = 1.0; + c.gridwidth = 1; + c.gridy = row; + c.gridx = col++; + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.BOTH; + controlPanel.add(Box.createHorizontalStrut(5), c); + } + + /** + * Adds a gap occupying given number of grid cells + */ + public void addGap() { + GridBagConstraints c = new GridBagConstraints(); + c.weightx = 0.4; + c.gridwidth = 1; + c.gridy = row; + c.gridx = col++; + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + controlPanel.add(Box.createVerticalStrut(5), c); + } + + /** + * Adds a check box. + * + * @param selected Initial state + * @param actions Action listener invoked when the checkbox is clicked. + * @return This builder + */ + public JCheckBox addCheckBox(boolean selected, ActionListener action) { + GridBagConstraints c = new GridBagConstraints(); + c.insets = new Insets(0, 25, 0, 0); + c.gridwidth = 1; + c.gridx = col++; + c.gridy = row; + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.NONE; + + JCheckBox checkBox = new JCheckBox(); + checkBox.setSelected(selected); + checkBox.addActionListener(action); + controlPanel.add(checkBox, c); + + return checkBox; + } + + /** + * Adds a help icon. + * + * @param actions Action listener invoked when the icon is clicked. + * @return This builder + */ + public JButton addOptionHelpIcon(ActionListener action) { + GridBagConstraints c = new GridBagConstraints(); + c.gridwidth = 1; + c.gridx = col++; + c.gridy = row; + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.NONE; + + JButton button = new JButton(); + button.setBorderPainted(false); + button.setFocusPainted(false); + button.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); + button.addActionListener(action); + button.setIcon(HELP_ICON); + + controlPanel.add(button, c); + return button; + } + + /** + * Adds a text of the option. + * + * @param text Text. + * @return This builder + */ + public JLabel addOptionText(String text) { + GridBagConstraints c = new GridBagConstraints(); + c.gridwidth = OPTION_TEXT_WIDTH; + c.gridx = col; + col += OPTION_TEXT_WIDTH; + c.gridy = row; + c.anchor = GridBagConstraints.LINE_START; + c.fill = GridBagConstraints.HORIZONTAL; + + JLabel label = new JLabel(); + label.setFont(OPTION_TEXT_FONT); + label.setForeground(OPTION_TEXT_COLOR); + label.setText(text); + + controlPanel.add(label, c); + return label; + } + + /** + * Adds a slider and connects it with given input field + * + * @param max Max value of the slider (and the value field). If {@code -1}, then percentage slider is shown with 100 as the max. value. + * @param inputField Input field connected with the slider. + * @return This builder + */ + public JSlider addSliderWithVal(int max, JTextField inputField) { + GridBagConstraints c = new GridBagConstraints(); + c.gridwidth = SLIDER_WIDTH; + c.gridx = col; + col += SLIDER_WIDTH; + c.gridy = row; + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + + JSlider slider = new JSlider(); + + if (max == -1) { // percents + slider.setMaximum(100); + } else { // absolute values + slider.setMaximum(max); + } + + slider.addChangeListener((ChangeEvent ce) -> { + if (max == -1) { + inputField.setText(doubleToStringLocale(slider.getValue() / 100.0)); + } else { + inputField.setText(intToStringLocale(slider.getValue())); + } + inputField.postActionEvent(); // invoke textField action listener + }); + + inputField.addActionListener((ActionEvent ae) -> { + if (max == -1) { // percents in [0,1] + slider.setValue((int) (parseLocaleDouble(inputField) * 100)); + } else { // integers + slider.setValue(parseLocaleInt(inputField)); + } + }); + controlPanel.add(slider, c); + + c.gridwidth = 2; + c.gridx = col; + col += 2; + c.gridy = row; + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.BOTH; + controlPanel.add(inputField, c); + + return slider; + } + +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java b/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java new file mode 100644 index 0000000000000000000000000000000000000000..cb8b16bb0eed5071b66df2be89487ebfa3c93d9a --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java @@ -0,0 +1,72 @@ +package cz.fidentis.analyst.core; + +import cz.fidentis.analyst.canvas.Canvas; +import cz.fidentis.analyst.face.HumanFace; +import cz.fidentis.analyst.toolbar.FaceToFaceToolBar; +import cz.fidentis.analyst.toolbar.RenderingToolBar; +import javax.swing.GroupLayout; +import javax.swing.LayoutStyle; +import org.openide.windows.TopComponent; + +/** + * The non-singleton window/tab for the analysis of two faces. + * + * @author Radek Oslejsek + */ +public class FaceToFaceTab extends TopComponent { + + public static final int CONTROL_PANEL_WIDTH = 600; + + private final Canvas canvas ; + private final FaceToFaceToolBar renderingToolBar; + private final TopControlPanel controlPanel; + + /** + * Constructor. + * @param primary Primary face + * @param secondary Secondary face + * @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); + setName(name); + initComponents(); + } + + @Override + public int getPersistenceType() { + return TopComponent.PERSISTENCE_NEVER; // TO DO: change to .PERSISTENCE_ONLY_OPENED when we can re-create the ProjectTC + } + + private void initComponents() { + GroupLayout layout = new GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(canvas, GroupLayout.DEFAULT_SIZE, 651, Short.MAX_VALUE) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(renderingToolBar, GroupLayout.PREFERRED_SIZE, RenderingToolBar.WIDTH, GroupLayout.PREFERRED_SIZE) + .addComponent(controlPanel, CONTROL_PANEL_WIDTH, CONTROL_PANEL_WIDTH, CONTROL_PANEL_WIDTH) + ) + ); + layout.setVerticalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createBaselineGroup(true, true) + .addComponent(canvas) + .addComponent(renderingToolBar) + .addComponent(controlPanel) + )) + ); + } + + public Canvas getCanvas() { + return canvas; + } + +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form similarity index 91% rename from GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form rename to GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form index 4f1add03f53bc8b2f78668a5d393fbd63d52ca33..ad7009457170488e08a4a0fabe517a3993b8ede1 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form +++ b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form @@ -160,7 +160,7 @@ <Font name="Tahoma" size="12" style="0"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.addButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.addButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> <Events> @@ -178,7 +178,7 @@ <Font name="Tahoma" size="12" style="0"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.removeButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.removeButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> <Events> @@ -196,7 +196,7 @@ <Font name="Tahoma" size="12" style="0"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.selectAllButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.selectAllButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> <Constraints> @@ -211,7 +211,7 @@ <Font name="Tahoma" size="12" style="0"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.deselectAllButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.deselectAllButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> <Constraints> @@ -226,7 +226,7 @@ <Font name="Tahoma" size="12" style="0"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.collapseButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.collapseButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> <Constraints> @@ -241,7 +241,7 @@ <Font name="Tahoma" size="12" style="0"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.inflateButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.inflateButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="alignmentX" type="float" value="0.5"/> </Properties> @@ -260,10 +260,13 @@ <Font name="Tahoma" size="12" style="0"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.analyzeButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.analyzeButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="alignmentX" type="float" value="0.5"/> </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="analyzeButton1MouseClicked"/> + </Events> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="16" insetsLeft="43" insetsBottom="13" insetsRight="25" anchor="10" weightX="0.0" weightY="0.0"/> diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.java b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java similarity index 77% rename from GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.java rename to GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java index 19a2e835fe22f2c720ee3c41d730ef1546f7566a..c474a90427b104bbc24f2e70a66faa150ee65f0f 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.java +++ b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java @@ -3,9 +3,8 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package cz.fidentis.analyst.gui; +package cz.fidentis.analyst.core; -import cz.fidentis.analyst.gui.tab.SingleFaceTab; import org.netbeans.api.settings.ConvertAsProperties; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; @@ -15,7 +14,11 @@ import cz.fidentis.analyst.Project; import cz.fidentis.analyst.face.HumanFace; import cz.fidentis.analyst.face.HumanFaceFactory; import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.swing.filechooser.FileNameExtensionFilter; import org.openide.filesystems.FileChooserBuilder; @@ -52,6 +55,7 @@ public final class ProjectTopComp extends TopComponent { private final Project project; private Map<HumanFace, SingleFaceTab> singleFaceTabs = new HashMap<>(); + private Map<HumanFace, FaceToFaceTab> faceToFaceTabs = new HashMap<>(); /** @@ -197,6 +201,11 @@ public final class ProjectTopComp extends TopComponent { analyzeButton1.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(analyzeButton1, org.openide.util.NbBundle.getMessage(ProjectTopComp.class, "ProjectTopComp.analyzeButton1.text")); // NOI18N analyzeButton1.setAlignmentX(0.5F); + analyzeButton1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + analyzeButton1MouseClicked(evt); + } + }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.insets = new java.awt.Insets(16, 43, 13, 25); jPanel5.add(analyzeButton1, gridBagConstraints); @@ -242,6 +251,11 @@ public final class ProjectTopComp extends TopComponent { } }//GEN-LAST:event_removeButton1MouseClicked + private void analyzeButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_analyzeButton1MouseClicked + // TODO add your handling code here: + loadTwoModels(); + }//GEN-LAST:event_analyzeButton1MouseClicked + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addButton1; private javax.swing.JButton analyzeButton1; @@ -295,19 +309,99 @@ public final class ProjectTopComp extends TopComponent { } else { String faceId = HumanFaceFactory.instance().loadFace(file); HumanFace face = HumanFaceFactory.instance().getFace(faceId); + + try { + // simple hack: + Path path = Paths.get(file.getAbsolutePath()); + Path folder = path.getParent(); + Path filename = path.getFileName(); + String filestr = filename.toString(); + filestr = filestr.split("_ECA.obj")[0]; + filestr = filestr + "_landmarks.csv"; + face.loadFeaturePoints(folder.toString(), filestr); + } catch(IOException ex) { + ex.printStackTrace(); + } + this.project.setPrimaryFace(face); jLabel1.setText(face.getName()); createSingleFaceTab(face, face.getName()); } } + /** + * Load two models for 1:1 comparison + */ + public void loadTwoModels () { + File file1 = new FileChooserBuilder(ProjectTopComp.class) + .setTitle("Open human face(s)") + .setDefaultWorkingDirectory(new File (System.getProperty("user.home"))) + //.setApproveText("Add") + .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj")) + .setAcceptAllFileFilterUsed(true) + .showOpenDialog(); + + File file2 = new FileChooserBuilder(ProjectTopComp.class) + .setTitle("Open human face(s)") + .setDefaultWorkingDirectory(new File (System.getProperty("user.home"))) + //.setApproveText("Add") + .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj")) + .setAcceptAllFileFilterUsed(true) + .showOpenDialog(); + + if (file1 == null || file2 == null) { + System.out.print("Missing file."); + } else { + String faceId1 = HumanFaceFactory.instance().loadFace(file1); + String faceId2 = HumanFaceFactory.instance().loadFace(file2); + HumanFace face1 = HumanFaceFactory.instance().getFace(faceId1); + HumanFace face2 = HumanFaceFactory.instance().getFace(faceId2); + + try { + // simple hack: + Path path = Paths.get(file1.getAbsolutePath()); + Path folder = path.getParent(); + Path filename = path.getFileName(); + String filestr = filename.toString(); + filestr = filestr.split("_ECA.obj")[0]; + filestr = filestr + "_landmarks.csv"; + face1.loadFeaturePoints(folder.toString(), filestr); + } catch(IOException ex) { + ex.printStackTrace(); + } + + try { + // simple hack: + Path path = Paths.get(file2.getAbsolutePath()); + Path folder = path.getParent(); + Path filename = path.getFileName(); + String filestr = filename.toString(); + filestr = filestr.split("_ECA.obj")[0]; + filestr = filestr + "_landmarks.csv"; + face2.loadFeaturePoints(folder.toString(), filestr); + } catch(IOException ex) { + ex.printStackTrace(); + } + + this.project.setPrimaryFace(face1); + this.project.setSecondaryFaces(List.of(face2)); + jLabel1.setText(face1.getName()); + createFaceToFaceTab(face1, face2, "1:1"); + } + } + private void createSingleFaceTab(HumanFace face, String name) { - SingleFaceTab newTab = new SingleFaceTab(); - newTab.setName(name); - newTab.getCanvas().initScene(face); + SingleFaceTab newTab = new SingleFaceTab(face, name); this.singleFaceTabs.put(face, newTab); newTab.open(); newTab.requestActive(); } + private void createFaceToFaceTab(HumanFace face1, HumanFace face2, String name) { + FaceToFaceTab newTab = new FaceToFaceTab(face1, face2, name); + this.faceToFaceTabs.put(face1, newTab); + this.faceToFaceTabs.put(face2, newTab); + newTab.open(); + newTab.requestActive(); + } } diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java b/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java new file mode 100644 index 0000000000000000000000000000000000000000..7227d05cf944f2f954f44865a4d9ee1420e0fd18 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java @@ -0,0 +1,70 @@ +package cz.fidentis.analyst.core; + +import cz.fidentis.analyst.canvas.Canvas; +import cz.fidentis.analyst.face.HumanFace; +import cz.fidentis.analyst.toolbar.RenderingToolBar; +import cz.fidentis.analyst.toolbar.SingleFaceToolBar; +import javax.swing.GroupLayout; +import javax.swing.LayoutStyle; +import org.openide.windows.TopComponent; + +/** + * The non-singleton window/tab for detail inspection of a single face. + * + * @author Radek Oslejsek + */ +public final class SingleFaceTab extends TopComponent { + + public static final int CONTROL_PANEL_WIDTH = 600; + + private final Canvas canvas; + private final RenderingToolBar renderingToolBar; + private final TopControlPanel controlPanel; + + /** + * Constructor. + * @param face Face + * @param name Tab name + */ + public SingleFaceTab(HumanFace face, String name) { + controlPanel = new TopControlPanel(); + canvas = new Canvas(); + renderingToolBar = new SingleFaceToolBar(canvas, controlPanel); + canvas.initScene(face); + setName(name); + initComponents(); + } + + @Override + public int getPersistenceType() { + return TopComponent.PERSISTENCE_NEVER; // TO DO: change to .PERSISTENCE_ONLY_OPENED when we can re-create the ProjectTC + } + + private void initComponents() { + GroupLayout layout = new GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(canvas, GroupLayout.DEFAULT_SIZE, 651, Short.MAX_VALUE) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(renderingToolBar, GroupLayout.PREFERRED_SIZE, RenderingToolBar.WIDTH, GroupLayout.PREFERRED_SIZE) + .addComponent(controlPanel, CONTROL_PANEL_WIDTH, CONTROL_PANEL_WIDTH, CONTROL_PANEL_WIDTH) + ) + ); + layout.setVerticalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createBaselineGroup(true, true) + .addComponent(canvas) + .addComponent(renderingToolBar) + .addComponent(controlPanel) + )) + ); + } + + public Canvas getCanvas() { + return canvas; + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/TopControlPanel.java b/GUI/src/main/java/cz/fidentis/analyst/core/TopControlPanel.java new file mode 100644 index 0000000000000000000000000000000000000000..b66128635efb54ec03f6221d0db4324926ecaeb9 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/core/TopControlPanel.java @@ -0,0 +1,24 @@ +package cz.fidentis.analyst.core; + +import java.awt.Font; +import javax.swing.BorderFactory; +import javax.swing.JTabbedPane; +import javax.swing.border.TitledBorder; + +/** + * The space for control panels. + * + * @author Radek Oslejsek + */ +public class TopControlPanel extends JTabbedPane { + + /** + * Constructor. + */ + public TopControlPanel() { + TitledBorder border = BorderFactory.createTitledBorder("Control Panels"); + border.setTitleFont(border.getTitleFont().deriveFont(Font.BOLD)); + //border.setTitleColor(ControlPanelBuilder.OPTION_TEXT_COLOR); + setBorder(border); + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvatureAction.java b/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvatureAction.java new file mode 100644 index 0000000000000000000000000000000000000000..b6622eff31e767a847bd36481675429a5197dfa1 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvatureAction.java @@ -0,0 +1,94 @@ +package cz.fidentis.analyst.curvature; + +import cz.fidentis.analyst.canvas.Canvas; +import cz.fidentis.analyst.core.ControlPanelAction; +import cz.fidentis.analyst.visitors.mesh.Curvature; +import java.awt.event.ActionEvent; +import javax.swing.JComboBox; +import javax.swing.JTabbedPane; +import javax.swing.JToggleButton; + +/** + * Action listener for the curvature computation. + * + * @author Radek Oslejsek + */ +public class CurvatureAction extends ControlPanelAction { + + /* + * Handled actions + */ + public static final String ACTION_COMMAND_SHOW_HIDE_HEATMAP = "show-hide heatmap"; + public static final String ACTION_COMMAND_SET_CURVATURE_TYPE = "set curvature type"; + + /* + * Attributes handling the state + */ + private Curvature visitor = null; + private String curvatureType = CurvaturePanel.GAUSSIAN_CURVATURE; + + private final CurvaturePanel controlPanel; + + /** + * Constructor. + * + * @param canvas OpenGL canvas + * @param topControlPanel Top component for placing control panels + */ + public CurvatureAction(Canvas canvas, JTabbedPane topControlPanel) { + super(canvas, topControlPanel); + this.controlPanel = new CurvaturePanel(this); + } + + @Override + public void actionPerformed(ActionEvent ae) { + String action = ae.getActionCommand(); + + switch (action) { + case ACTION_COMMAND_SHOW_HIDE_PANEL: + hideShowPanelActionPerformed(ae, this.controlPanel); + break; + case ACTION_COMMAND_SHOW_HIDE_HEATMAP: + if (((JToggleButton) ae.getSource()).isSelected()) { + setHeatmap(); + getPrimaryDrawableFace().setRenderHeatmap(true); + } else { + getPrimaryDrawableFace().setRenderHeatmap(false); + } + break; + case ACTION_COMMAND_SET_CURVATURE_TYPE: + this.curvatureType = (String) ((JComboBox) ae.getSource()).getSelectedItem(); + setHeatmap(); + break; + default: + throw new UnsupportedOperationException(action); + } + + renderScene(); + } + + protected void setHeatmap() { + if (visitor == null) { // compute missing curvature + this.visitor = new Curvature(); + getPrimaryDrawableFace().getModel().compute(visitor); + } + + switch (this.curvatureType) { + case CurvaturePanel.GAUSSIAN_CURVATURE: + getPrimaryDrawableFace().setHeatMap(visitor.getGaussianCurvatures()); + break; + case CurvaturePanel.MEAN_CURVATURE: + getPrimaryDrawableFace().setHeatMap(visitor.getMeanCurvatures()); + break; + case CurvaturePanel.MIN_CURVATURE: + getPrimaryDrawableFace().setHeatMap(visitor.getMinPrincipalCurvatures()); + break; + case CurvaturePanel.MAX_CURVATURE: + getPrimaryDrawableFace().setHeatMap(visitor.getMaxPrincipalCurvatures()); + break; + default: + throw new UnsupportedOperationException(curvatureType); + } + + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvaturePanel.java b/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvaturePanel.java new file mode 100644 index 0000000000000000000000000000000000000000..f4bccda7263c25b50dc3dfa68bbf577c889f9b24 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvaturePanel.java @@ -0,0 +1,78 @@ +package cz.fidentis.analyst.curvature; + +import cz.fidentis.analyst.core.ControlPanel; +import cz.fidentis.analyst.core.ControlPanelBuilder; +import java.awt.event.ActionEvent; +import java.util.List; +import javax.swing.ImageIcon; + +/** + * Control panel for curvature analysis. + * + * @author Radek Oslejsek + */ +public class CurvaturePanel extends ControlPanel { + + /* + * Mandatory design elements + */ + public static final String ICON = "curvature28x28.png"; + public static final String NAME = "Curvature"; + + /* + * Configuration of panel-specific GUI elements + */ + public static final String GAUSSIAN_CURVATURE = "Gaussian"; + public static final String MEAN_CURVATURE = "Mean"; + public static final String MIN_CURVATURE = "Min"; + public static final String MAX_CURVATURE = "Max"; + + /** + * Constructor. + * @param action Action listener + */ + public CurvaturePanel(CurvatureAction action) { + this.setName(NAME); + + ControlPanelBuilder builder = new ControlPanelBuilder(this); + + builder.addCaptionLine("Visualization options:"); + builder.addLine(); + + builder.addCheckBoxOptionLine(null, "Show curvature", false, + (ActionEvent e) -> { + action.actionPerformed(new ActionEvent( + e.getSource(), + ActionEvent.ACTION_PERFORMED, + CurvatureAction.ACTION_COMMAND_SHOW_HIDE_HEATMAP) + ); + }); + builder.addComboBox(List.of(GAUSSIAN_CURVATURE, MEAN_CURVATURE, MIN_CURVATURE, MAX_CURVATURE), + (ActionEvent e) -> { + action.actionPerformed(new ActionEvent( + e.getSource(), + ActionEvent.ACTION_PERFORMED, + CurvatureAction.ACTION_COMMAND_SET_CURVATURE_TYPE) + ); + }); + builder.addGap(); + builder.addLine(); + builder.addCaptionLine("TO DO: Interactive histogram"); + builder.addLine(); + builder.addVerticalStrut(); + } + + @Override + public ImageIcon getIcon() { + return getStaticIcon(); + } + + /** + * Static implementation of the {@link #getIcon()} method. + * + * @return Control panel icon + */ + public static ImageIcon getStaticIcon() { + return new ImageIcon(CurvaturePanel.class.getClassLoader().getResource("/" + ICON)); + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java new file mode 100644 index 0000000000000000000000000000000000000000..72b26fa37e07843ad8a7f076044d81318baf938a --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java @@ -0,0 +1,98 @@ +package cz.fidentis.analyst.distance; + +import cz.fidentis.analyst.canvas.Canvas; +import cz.fidentis.analyst.core.ControlPanelAction; +import cz.fidentis.analyst.visitors.mesh.HausdorffDistance; +import cz.fidentis.analyst.visitors.mesh.HausdorffDistance.Strategy; +import java.awt.event.ActionEvent; +import javax.swing.JComboBox; +import javax.swing.JTabbedPane; +import javax.swing.JToggleButton; + +/** + * Action listener for the curvature computation. + * + * @author Radek Oslejsek + */ +public class DistanceAction extends ControlPanelAction { + + /* + * Handled actions + */ + 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"; + + /* + * Attributes handling the state + */ + private HausdorffDistance visitor = null; + private String strategy = DistancePanel.STRATEGY_POINT_TO_POINT; + private boolean relativeDist = false; + + private final DistancePanel controlPanel; + + /** + * Constructor. + * + * @param canvas OpenGL canvas + * @param topControlPanel Top component for placing control panels + */ + public DistanceAction(Canvas canvas, JTabbedPane topControlPanel) { + super(canvas, topControlPanel); + this.controlPanel = new DistancePanel(this); + } + + @Override + public void actionPerformed(ActionEvent ae) { + String action = ae.getActionCommand(); + + switch (action) { + case ACTION_COMMAND_SHOW_HIDE_PANEL: + hideShowPanelActionPerformed(ae, this.controlPanel); + break; + case ACTION_COMMAND_SHOW_HIDE_HEATMAP: + if (((JToggleButton) ae.getSource()).isSelected()) { + setHeatmap(); + getSecondaryDrawableFace().setRenderHeatmap(true); + } else { + getSecondaryDrawableFace().setRenderHeatmap(false); + } + break; + case ACTION_COMMAND_SET_DISTANCE_STRATEGY: + strategy = (String) ((JComboBox) ae.getSource()).getSelectedItem(); + this.visitor = null; // recompute + setHeatmap(); + break; + case ACTION_COMMAND_RELATIVE_ABSOLUTE_DIST: + this.relativeDist = ((JToggleButton) ae.getSource()).isSelected(); + this.visitor = null; // recompute + setHeatmap(); + break; + default: + throw new UnsupportedOperationException(action); + } + renderScene(); + } + + protected void setHeatmap() { + Strategy useStrategy; + switch (strategy) { + case DistancePanel.STRATEGY_POINT_TO_POINT: + useStrategy = Strategy.POINT_TO_POINT; + break; + case DistancePanel.STRATEGY_POINT_TO_TRIANGLE: + useStrategy = Strategy.POINT_TO_TRIANGLE_APPROXIMATE; + break; + default: + throw new UnsupportedOperationException(strategy); + } + + if (visitor == null) { + this.visitor = new HausdorffDistance(getPrimaryDrawableFace().getModel(), useStrategy, relativeDist, true); + getSecondaryDrawableFace().getModel().compute(visitor); + } + + getSecondaryDrawableFace().setHeatMap(visitor.getDistances()); + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java new file mode 100644 index 0000000000000000000000000000000000000000..8a39790f2a1c09b78afff34c903f384971a022f1 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java @@ -0,0 +1,90 @@ +package cz.fidentis.analyst.distance; + +import cz.fidentis.analyst.core.ControlPanel; +import cz.fidentis.analyst.core.ControlPanelBuilder; +import cz.fidentis.analyst.symmetry.SymmetryPanel; +import java.awt.event.ActionEvent; +import java.util.List; +import javax.swing.ImageIcon; + +/** + * Control panel for Hausdorff distance. + * + * @author Radek Oslejsek + */ +public class DistancePanel extends ControlPanel { + + /* + * Mandatory design elements + */ + public static final String ICON = "distance28x28.png"; + public static final String NAME = "Hausdorff 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"; + + /** + * Constructor. + * @param action Action listener + */ + public DistancePanel(DistanceAction action) { + this.setName(NAME); + + ControlPanelBuilder builder = new ControlPanelBuilder(this); + + builder.addCaptionLine("Computation options:"); + builder.addLine(); + + builder.addCheckBoxOptionLine(null, "Relative distance", false, + (ActionEvent e) -> { + action.actionPerformed(new ActionEvent( + e.getSource(), + ActionEvent.ACTION_PERFORMED, + DistanceAction.ACTION_COMMAND_RELATIVE_ABSOLUTE_DIST) + ); + }); + builder.addLine(); + + builder.addOptionText("Distance strategy"); + builder.addComboBox(List.of(STRATEGY_POINT_TO_POINT, STRATEGY_POINT_TO_TRIANGLE), + (ActionEvent e) -> { + action.actionPerformed(new ActionEvent( + e.getSource(), + ActionEvent.ACTION_PERFORMED, + DistanceAction.ACTION_COMMAND_SET_DISTANCE_STRATEGY) + ); + }); + builder.addGap(); + builder.addLine(); + + builder.addCaptionLine("Visualization options:"); + builder.addLine(); + builder.addCheckBoxOptionLine(null, "Show Hausdorff distance", false, + (ActionEvent e) -> { + action.actionPerformed(new ActionEvent( + e.getSource(), + ActionEvent.ACTION_PERFORMED, + DistanceAction.ACTION_COMMAND_SHOW_HIDE_HEATMAP) + ); + }); + builder.addLine(); + builder.addVerticalStrut(); + } + + @Override + public ImageIcon getIcon() { + return getStaticIcon(); + } + + /** + * Static implementation of the {@link #getIcon()} method. + * + * @return Control panel icon + */ + public static ImageIcon getStaticIcon() { + return new ImageIcon(SymmetryPanel.class.getClassLoader().getResource("/" + ICON)); + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.form b/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.form deleted file mode 100644 index d102516eb4e46619c14a2504400d662522b91d02..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.form +++ /dev/null @@ -1,305 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<Form version="1.9" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="0" green="0" red="0" type="rgb"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,93,0,0,1,-79"/> - </AuxValues> - - <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> - <SubComponents> - <Container class="javax.swing.JLayeredPane" name="jLayeredPane1"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="28" green="28" red="28" type="rgb"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value=""/> - <Property name="opaque" type="boolean" value="true"/> - </Properties> - <Events> - <EventHandler event="componentResized" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="jLayeredPane1ComponentResized"/> - <EventHandler event="componentShown" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="jLayeredPane1ComponentShown"/> - </Events> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> - <BorderConstraints direction="Center"/> - </Constraint> - </Constraints> - - <Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout"> - <Property name="useNullLayout" type="boolean" value="true"/> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="resetButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/resetButton.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Reset position of model"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="resetButtonMouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="resetButtonMouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="resetButtonMouseExited"/> - </Events> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="60" y="40" width="30" height="30"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JButton" name="upNavigationButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/upButton.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Rotate up"/> - <Property name="borderPainted" type="boolean" value="false"/> - <Property name="contentAreaFilled" type="boolean" value="false"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="upNavigationButtonMousePressed"/> - <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="upNavigationButtonMouseReleased"/> - </Events> - <AuxValues> - <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/> - </AuxValues> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="60" y="10" width="30" height="30"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JButton" name="leftNavigationButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/leftButton.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Rotate left"/> - <Property name="borderPainted" type="boolean" value="false"/> - <Property name="contentAreaFilled" type="boolean" value="false"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="leftNavigationButtonMousePressed"/> - <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="leftNavigationButtonMouseReleased"/> - </Events> - <AuxValues> - <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/> - </AuxValues> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="30" y="40" width="30" height="30"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JButton" name="minusNavigationButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/minus.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Zoom out"/> - <Property name="borderPainted" type="boolean" value="false"/> - <Property name="contentAreaFilled" type="boolean" value="false"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="minusNavigationButtonMousePressed"/> - <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="minusNavigationButtonMouseReleased"/> - </Events> - <AuxValues> - <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/> - </AuxValues> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="90" y="90" width="30" height="30"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JButton" name="downNavigationButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/downButton.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Rotate down"/> - <Property name="borderPainted" type="boolean" value="false"/> - <Property name="contentAreaFilled" type="boolean" value="false"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="downNavigationButtonMousePressed"/> - <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="downNavigationButtonMouseReleased"/> - </Events> - <AuxValues> - <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/> - </AuxValues> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="60" y="70" width="30" height="30"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JButton" name="plusNavigationButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/plus.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Zoom in"/> - <Property name="borderPainted" type="boolean" value="false"/> - <Property name="contentAreaFilled" type="boolean" value="false"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="plusNavigationButtonMousePressed"/> - <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="plusNavigationButtonMouseReleased"/> - </Events> - <AuxValues> - <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/> - </AuxValues> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="30" y="90" width="30" height="30"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JLabel" name="jLabel1"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/navigBackground.png"/> - </Property> - </Properties> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="30" y="10" width="90" height="90"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JLabel" name="loadModelButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/loadCanva.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value=""/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="loadModelButtonMouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="loadModelButtonMouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="loadModelButtonMouseExited"/> - </Events> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="200" y="100" width="210" height="220"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JButton" name="rightNavigationButton1"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/rightButton.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Rotate right"/> - <Property name="borderPainted" type="boolean" value="false"/> - <Property name="contentAreaFilled" type="boolean" value="false"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="rightNavigationButton1MousePressed"/> - <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="rightNavigationButton1MouseReleased"/> - </Events> - <AuxValues> - <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/> - </AuxValues> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="90" y="40" width="30" height="30"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JLabel" name="whiteBackroundButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/whiteBackroundCanvas.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="White backround"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="whiteBackroundButtonMouseClicked"/> - </Events> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="50" y="130" width="-1" height="-1"/> - </Constraint> - </Constraints> - </Component> - <Component class="javax.swing.JLabel" name="blackBackroundButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/blackBackroundCanvas.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Dark background"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="blackBackroundButtonMouseClicked"/> - </Events> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="50" y="190" width="-1" height="-1"/> - </Constraint> - </Constraints> - </Component> - <Container class="javax.swing.JPanel" name="jPanel1"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="0" green="0" red="0" type="rgb"/> - </Property> - </Properties> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription"> - <AbsoluteConstraints x="0" y="0" width="-1" height="-1"/> - </Constraint> - </Constraints> - - <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> - </Container> - </SubComponents> - </Container> - </SubComponents> -</Form> diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.java b/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.java deleted file mode 100644 index 2c7113705780ef9ee26f9c53f425c2bfcf34b32f..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.java +++ /dev/null @@ -1,803 +0,0 @@ -package cz.fidentis.analyst.gui; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLEventListener; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.awt.GLCanvas; -import cz.fidentis.analyst.face.HumanFace; -import cz.fidentis.analyst.mesh.core.MeshModel; -import com.jogamp.opengl.util.FPSAnimator; - -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Dimension; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; -import java.util.Scanner; -import java.util.Timer; -import java.util.TimerTask; -import javax.swing.ImageIcon; -import javax.swing.JOptionPane; -import javax.swing.filechooser.FileNameExtensionFilter; -import org.openide.filesystems.FileChooserBuilder; - -/** - * Canvas for displaying models containing GLCanvas and navigation. - * - * @author Natalia Bebjakova - */ -public class Canvas extends javax.swing.JPanel { - - protected GLCanvas glCanvas; - protected long startClickTime = 0; - - protected TimerTask task; - protected Timer timer; - - protected GeneralGLEventListener listener; - - /** - * Mouse adapter for 3D manipulation - */ - protected Manipulator3D manipulator; - - /** - * animator's target frames per second - */ - private static final int FPS = 60; - private final FPSAnimator animator; - - /** - * decides if model is displayed as wire-frame - */ - protected static boolean drawWireModel; - - /** - * decides if the symmetryPlane is displayed - */ - protected static boolean drawSymmetryPlane; - - /** - * original face that is loaded from file - */ - protected HumanFace loadedFace; - - protected boolean loaded; - - /** - * - * @return true if model is loaded on canvas, false otherwise - */ - public boolean isLoaded() { - return loaded; - } - - /** - * Creates new form Canva - */ - public Canvas() { - initComponents(); - - // gl version 2 is used - GLCapabilities capabilities = new GLCapabilities(GLProfile.get(GLProfile.GL2)); - capabilities.setDoubleBuffered(true); - - // creates new glCanvas panel for displaying model - glCanvas = new GLCanvas(capabilities); - jPanel1.add(glCanvas); - glCanvas.setVisible(false); - glCanvas.setBackground(Color.black); - - // enables glCanvas to react to events - glCanvas.requestFocusInWindow(); - glCanvas.setSize(getWidth() - getInsets().left - getInsets().right, getHeight() - getInsets().top - getInsets().bottom); - - // enables animated transition - animator = new FPSAnimator(glCanvas, FPS, true); - animator.start(); - listener = new GeneralGLEventListener(this); - - // enables 3D manipualtion - manipulator = new Manipulator3D(listener); - setMouseListeners(); - - this.validate(); - } - - private void removeMoseListeners() { - glCanvas.removeMouseListener(this.manipulator); - glCanvas.removeMouseMotionListener(this.manipulator); - glCanvas.removeMouseWheelListener(this.manipulator); - } - - private void setMouseListeners() { - glCanvas.addMouseListener(manipulator); - glCanvas.addMouseMotionListener(manipulator); - glCanvas.addMouseWheelListener(manipulator); - } - - /** - * Sets new mouse listeners for this canvas - * - * @param manipulator new Manipulator3D, probably with different listener - */ - public void setManipulator(Manipulator3D manipulator) { - removeMoseListeners(); - this.manipulator = manipulator; - setMouseListeners(); - } - - /** - * Changing the size of glCanvas - * - * @param d New size of glCanvas - */ - public void resizeCanvas(Dimension d) { - jPanel1.setSize(d); - glCanvas.setSize(d); - this.validate(); - this.repaint(); - loadModelButton.setLocation(this.getWidth() / 2 - 35, this.getHeight() / 2 - 40); - } - - /** - * - * @return Original face that is loaded from file - */ - public HumanFace getLoadedFace() { - return loadedFace; - } - - /** - * Sets GLListener of the canvas - * - * @param listener GLListener for manipulation with model - */ - public void setListener(GeneralGLEventListener listener) { - this.listener = listener; - } - - /** - * - * @param drawWire Decides if model is displayed as wife-frame - */ - public static void setDrawWired(boolean drawWire) { - drawWireModel = drawWire; - } - - /** - * - * @return Returns if model is displayed as wife-frame - */ - public boolean getDrawWired(){ - return drawWireModel; - } - - /** - * - * @param drawSymmetry Decides if the symmetry plane is displayed - */ - public static void setDrawSymmetryPlane(boolean drawSymmetry) { - drawSymmetryPlane = drawSymmetry; - } - - /** - * - * @return Returns if the symmetry plane is displayed - */ - public boolean getDrawSymmetryPlane(){ - return drawSymmetryPlane; - } - - /** - * - * @param v Decides if button for loading model is visible - */ - public void setImportLabelVisible(Boolean v) { - loadModelButton.setVisible(v); - } - - /** - * Loads model selected in file chooser by user - */ - public void loadModel () { - File file = new FileChooserBuilder(ProjectTopComp.class) - .setTitle("Open human face(s)") - .setDefaultWorkingDirectory(new File (System.getProperty("user.home"))) - //.setApproveText("Add") - .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj")) - .setAcceptAllFileFilterUsed(true) - .showOpenDialog(); - - if (file== null) { - System.out.print("No file chosen."); - } else { - this.addModel(file); - } - glCanvas.setVisible(true); - } - - private void setPrefferedModelPath(String s) { - //TODO remove duplicate with PreferenceTopComponent - try { - FileWriter rewriter = new FileWriter("preferences.fip", false); - rewriter.write(s); - rewriter.close(); - } catch (IOException ex) { - ex.printStackTrace(); - } - } - - private String getPrefferedModelPath() { - //TODO remove duplicate with PreferenceTopComponent - String data = ""; - try { - File myObj = new File(/*propPath + */"preferences.fip"); - if (myObj.length() == 0) - return data; - try (Scanner myReader = new Scanner(myObj)) { - data = myReader.nextLine(); - } - } catch (FileNotFoundException e) { - System.out.println("An error occurred."); - e.printStackTrace(); - } - return data; - } - - /** - * Loads the model in .obj format from file and adds this model to listener for displaying. - * If file does not contain 3D model or model is not correct, shows dialog with message - * - * @param file File from which model will be read - */ - private void addModel (final File file) { - try { - loadedFace = new HumanFace(new File (file.getPath())); - - if (loadedFace.getMeshModel() != null) { - // listener enables to manipulate and interact with model - listener.setCameraPosition(0, 0, 300); - glCanvas.addGLEventListener((GLEventListener) listener); - listener.setModel(loadedFace.getMeshModel()); - listener.rotationAndSizeRestart(); - loadModelButton.setVisible(false); - loaded = true; - } - } catch (Exception e) { - System.out.println(e.getMessage()); - JOptionPane.showMessageDialog(this, "File doesn't contain any model", "Model is not loaded.", - 0, new ImageIcon(getClass().getResource("/notLoadedModel.png"))); - System.out.println ("File doesn't contain any model"); - loaded = false; - } - } - - /** - * reset position of the displayed model - */ - public void resetPosition(){ - listener.rotationAndSizeRestart(); - } - - /** - * Changes the model to be displayed - * - * @param model New model that will be displayed on canvas - */ - public void changeModel(MeshModel model) { - MeshModel newModel = new MeshModel(model); - listener.setModel(newModel); - } - - /** - * Returns the model which is displayed on canvas - * - * @return Model that is displayed on canvas - */ - public MeshModel getModel() { - return listener.getModel(); - } - - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - * - * Generated code from NetBeans - */ - @SuppressWarnings("unchecked") - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - jLayeredPane1 = new javax.swing.JLayeredPane(); - resetButton = new javax.swing.JLabel(); - upNavigationButton = new javax.swing.JButton(); - leftNavigationButton = new javax.swing.JButton(); - minusNavigationButton = new javax.swing.JButton(); - downNavigationButton = new javax.swing.JButton(); - plusNavigationButton = new javax.swing.JButton(); - jLabel1 = new javax.swing.JLabel(); - loadModelButton = new javax.swing.JLabel(); - rightNavigationButton1 = new javax.swing.JButton(); - whiteBackroundButton = new javax.swing.JLabel(); - blackBackroundButton = new javax.swing.JLabel(); - jPanel1 = new javax.swing.JPanel(); - - setBackground(new java.awt.Color(0, 0, 0)); - setLayout(new java.awt.BorderLayout()); - - jLayeredPane1.setBackground(new java.awt.Color(40, 40, 40)); - jLayeredPane1.setToolTipText(""); - jLayeredPane1.setOpaque(true); - jLayeredPane1.addComponentListener(new java.awt.event.ComponentAdapter() { - public void componentResized(java.awt.event.ComponentEvent evt) { - jLayeredPane1ComponentResized(evt); - } - public void componentShown(java.awt.event.ComponentEvent evt) { - jLayeredPane1ComponentShown(evt); - } - }); - - resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButton.png"))); // NOI18N - resetButton.setToolTipText("Reset position of model"); - resetButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - resetButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - resetButtonMouseMoved(evt); - } - }); - resetButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - resetButtonMouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - resetButtonMouseExited(evt); - } - }); - jLayeredPane1.add(resetButton); - resetButton.setBounds(60, 40, 30, 30); - - upNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/upButton.png"))); // NOI18N - upNavigationButton.setToolTipText("Rotate up"); - upNavigationButton.setBorderPainted(false); - upNavigationButton.setContentAreaFilled(false); - upNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - upNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - upNavigationButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - upNavigationButtonMouseReleased(evt); - } - }); - jLayeredPane1.setLayer(upNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER); - jLayeredPane1.add(upNavigationButton); - upNavigationButton.setBounds(60, 10, 30, 30); - - leftNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/leftButton.png"))); // NOI18N - leftNavigationButton.setToolTipText("Rotate left"); - leftNavigationButton.setBorderPainted(false); - leftNavigationButton.setContentAreaFilled(false); - leftNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - leftNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - leftNavigationButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - leftNavigationButtonMouseReleased(evt); - } - }); - jLayeredPane1.setLayer(leftNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER); - jLayeredPane1.add(leftNavigationButton); - leftNavigationButton.setBounds(30, 40, 30, 30); - - minusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/minus.png"))); // NOI18N - minusNavigationButton.setToolTipText("Zoom out"); - minusNavigationButton.setBorderPainted(false); - minusNavigationButton.setContentAreaFilled(false); - minusNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - minusNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - minusNavigationButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - minusNavigationButtonMouseReleased(evt); - } - }); - jLayeredPane1.setLayer(minusNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER); - jLayeredPane1.add(minusNavigationButton); - minusNavigationButton.setBounds(90, 90, 30, 30); - - downNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/downButton.png"))); // NOI18N - downNavigationButton.setToolTipText("Rotate down"); - downNavigationButton.setBorderPainted(false); - downNavigationButton.setContentAreaFilled(false); - downNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - downNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - downNavigationButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - downNavigationButtonMouseReleased(evt); - } - }); - jLayeredPane1.setLayer(downNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER); - jLayeredPane1.add(downNavigationButton); - downNavigationButton.setBounds(60, 70, 30, 30); - - plusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/plus.png"))); // NOI18N - plusNavigationButton.setToolTipText("Zoom in"); - plusNavigationButton.setBorderPainted(false); - plusNavigationButton.setContentAreaFilled(false); - plusNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - plusNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - plusNavigationButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - plusNavigationButtonMouseReleased(evt); - } - }); - jLayeredPane1.setLayer(plusNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER); - jLayeredPane1.add(plusNavigationButton); - plusNavigationButton.setBounds(30, 90, 30, 30); - - jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/navigBackground.png"))); // NOI18N - jLayeredPane1.add(jLabel1); - jLabel1.setBounds(30, 10, 90, 90); - - loadModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadCanva.png"))); // NOI18N - loadModelButton.setToolTipText(""); - loadModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - loadModelButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - loadModelButtonMouseMoved(evt); - } - }); - loadModelButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - loadModelButtonMouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - loadModelButtonMouseExited(evt); - } - }); - jLayeredPane1.add(loadModelButton); - loadModelButton.setBounds(200, 100, 210, 220); - - rightNavigationButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/rightButton.png"))); // NOI18N - rightNavigationButton1.setToolTipText("Rotate right"); - rightNavigationButton1.setBorderPainted(false); - rightNavigationButton1.setContentAreaFilled(false); - rightNavigationButton1.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - rightNavigationButton1.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - rightNavigationButton1MousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - rightNavigationButton1MouseReleased(evt); - } - }); - jLayeredPane1.setLayer(rightNavigationButton1, javax.swing.JLayeredPane.MODAL_LAYER); - jLayeredPane1.add(rightNavigationButton1); - rightNavigationButton1.setBounds(90, 40, 30, 30); - - whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvas.png"))); // NOI18N - whiteBackroundButton.setToolTipText("White backround"); - whiteBackroundButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - whiteBackroundButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - whiteBackroundButtonMouseClicked(evt); - } - }); - jLayeredPane1.add(whiteBackroundButton); - whiteBackroundButton.setBounds(50, 130, 56, 56); - - blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvas.png"))); // NOI18N - blackBackroundButton.setToolTipText("Dark background"); - blackBackroundButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - blackBackroundButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - blackBackroundButtonMouseClicked(evt); - } - }); - jLayeredPane1.add(blackBackroundButton); - blackBackroundButton.setBounds(50, 190, 56, 56); - - jPanel1.setBackground(new java.awt.Color(0, 0, 0)); - jPanel1.setLayout(new java.awt.BorderLayout()); - jLayeredPane1.add(jPanel1); - jPanel1.setBounds(0, 0, 0, 0); - - add(jLayeredPane1, java.awt.BorderLayout.CENTER); - }// </editor-fold>//GEN-END:initComponents - - /** - * - * @param evt Resizing glCanvas cantaining components - */ - private void jLayeredPane1ComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jLayeredPane1ComponentResized - jPanel1.setBounds(0, 0, jLayeredPane1.getWidth(), jLayeredPane1.getHeight()); - glCanvas.setBounds(jLayeredPane1.getX(), jLayeredPane1.getY(), jLayeredPane1.getWidth(), jLayeredPane1.getHeight()); - loadModelButton.setLocation(this.getWidth() / 2 - 35, this.getHeight() / 2 - 40); - }//GEN-LAST:event_jLayeredPane1ComponentResized - - /** - * - * @param evt Showing glCanvas cantaining components - */ - private void jLayeredPane1ComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jLayeredPane1ComponentShown - jPanel1.setBounds(0, 0, jLayeredPane1.getWidth(), jLayeredPane1.getHeight()); - glCanvas.setBounds(jLayeredPane1.getX(), jLayeredPane1.getY(), jLayeredPane1.getWidth(), jLayeredPane1.getHeight()); - loadModelButton.setLocation(this.getWidth() / 2 - 35, this.getHeight() / 2 - 40); - }//GEN-LAST:event_jLayeredPane1ComponentShown - - /** - * - * @param evt Enables to rotate left the model when left navigation button is pressed - */ - private void leftNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftNavigationButtonMousePressed - timer = new Timer(); - startClickTime = System.currentTimeMillis(); - task = new TimerTask() { - @Override - public void run() { - listener.rotateLeft(2); - } - }; - timer.schedule(task, 500, 100); - leftNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/leftButtonPressed.png"))); - }//GEN-LAST:event_leftNavigationButtonMousePressed - - /** - * - * @param evt Enables to rotate up the model when up navigation button is pressed - */ - private void upNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_upNavigationButtonMousePressed - timer = new Timer(); - startClickTime = System.currentTimeMillis(); - task = new TimerTask() { - @Override - public void run() { - listener.rotateUp(2); - } - }; - timer.schedule(task, 500, 100); - upNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/upButtonPressed.png"))); - }//GEN-LAST:event_upNavigationButtonMousePressed - - /** - * - * @param evt Enables to rotate down the model when down navigation button is pressed - */ - private void downNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_downNavigationButtonMousePressed - timer = new Timer(); - startClickTime = System.currentTimeMillis(); - task = new TimerTask() { - @Override - public void run() { - listener.rotateDown(2); - } - }; - timer.schedule(task, 500, 100); - downNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/downButtonPressed.png"))); - }//GEN-LAST:event_downNavigationButtonMousePressed - - /** - * - * @param evt Enables to zoom in the model when plus navigation button is pressed - */ - private void plusNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_plusNavigationButtonMousePressed - timer = new Timer(); - startClickTime = System.currentTimeMillis(); - task = new TimerTask() { - @Override - public void run() { - listener.zoomIn(3); - } - }; - timer.schedule(task, 500, 100); - plusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/plusPressed.png"))); - }//GEN-LAST:event_plusNavigationButtonMousePressed - - /** - * - * @param evt Enables to zoom out the model when minus navigation button is pressed - */ - private void minusNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_minusNavigationButtonMousePressed - timer = new Timer(); - startClickTime = System.currentTimeMillis(); - task = new TimerTask() { - @Override - public void run() { - listener.zoomOut(3); - } - }; - timer.schedule(task, 500, 100); - minusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/minusPressed.png"))); - }//GEN-LAST:event_minusNavigationButtonMousePressed - - /** - * - * @param evt Stops rotating left - */ - private void leftNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftNavigationButtonMouseReleased - timer.cancel(); - if ((System.currentTimeMillis() - startClickTime) < 500) { - listener.rotateLeft(22.5); - } - startClickTime = 0; - leftNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/leftButton.png"))); - }//GEN-LAST:event_leftNavigationButtonMouseReleased - - /** - * - * @param evt Stops rotating up - */ - private void upNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_upNavigationButtonMouseReleased - timer.cancel(); - if ((System.currentTimeMillis() - startClickTime) < 500) { - listener.rotateUp(22.5); - } - startClickTime = 0; - upNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/upButton.png"))); - }//GEN-LAST:event_upNavigationButtonMouseReleased - - /** - * - * @param evt Stops rotating down - */ - private void downNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_downNavigationButtonMouseReleased - timer.cancel(); - if ((System.currentTimeMillis() - startClickTime) < 500) { - listener.rotateDown(22.5); - } - startClickTime = 0; - downNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/downButton.png"))); - }//GEN-LAST:event_downNavigationButtonMouseReleased - - /** - * - * @param evt Stops zooming in - */ - private void plusNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_plusNavigationButtonMouseReleased - timer.cancel(); - if ((System.currentTimeMillis() - startClickTime) < 500) { - listener.zoomIn(30); - } - startClickTime = 0; - plusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/plus.png"))); - }//GEN-LAST:event_plusNavigationButtonMouseReleased - - /** - * - * @param evt Stops zooming out - */ - private void minusNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_minusNavigationButtonMouseReleased - timer.cancel(); - if ((System.currentTimeMillis() - startClickTime) < 500) { - listener.zoomOut(30); - } - startClickTime = 0; - minusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/minus.png"))); - }//GEN-LAST:event_minusNavigationButtonMouseReleased - - /** - * - * @param evt Laoding the .obj file when button pressed - */ - private void loadModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_loadModelButtonMouseClicked - loadModel(); - }//GEN-LAST:event_loadModelButtonMouseClicked - - /** - * - * @param evt Design is reacting to mouse movement - */ - private void loadModelButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_loadModelButtonMouseMoved - loadModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadCanvaClicked.png"))); - }//GEN-LAST:event_loadModelButtonMouseMoved - - /** - * - * @param evt Design is reacting to mouse movement - */ - private void loadModelButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_loadModelButtonMouseExited - loadModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadCanva.png"))); - }//GEN-LAST:event_loadModelButtonMouseExited - - /** - * - * @param evt Enables to rotate down the model when down navigation button is pressed - */ - private void rightNavigationButton1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightNavigationButton1MousePressed - timer = new Timer(); - startClickTime = System.currentTimeMillis(); - task = new TimerTask() { - @Override - public void run() { - listener.rotateRight(2); - } - }; - timer.schedule(task, 500, 100); - rightNavigationButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/rightButtonPressed.png"))); - }//GEN-LAST:event_rightNavigationButton1MousePressed - - /** - * - * @param evt Stops rotating right - */ - private void rightNavigationButton1MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightNavigationButton1MouseReleased - timer.cancel(); - if ((System.currentTimeMillis() - startClickTime) < 500) { - listener.rotateRight(22.5); - } - startClickTime = 0; - rightNavigationButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/rightButton.png"))); - }//GEN-LAST:event_rightNavigationButton1MouseReleased - - /** - * - * @param evt Position of model on glCanvas is set to starting position - */ - private void resetButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetButtonMouseClicked - listener.rotationAndSizeRestart(); - }//GEN-LAST:event_resetButtonMouseClicked - - /** - * - * @param evt Design is reacting to mouse movement - */ - private void resetButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetButtonMouseMoved - resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButtonPressed.png"))); - resetButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - }//GEN-LAST:event_resetButtonMouseMoved - - /** - * - * @param evt Design is reacting to mouse movement - */ - private void resetButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetButtonMouseExited - resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButton.png"))); - }//GEN-LAST:event_resetButtonMouseExited - - /** - * - * @param evt Changes backround of the canvas into white color - */ - private void whiteBackroundButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_whiteBackroundButtonMouseClicked - listener.setWhiteBackround(true); - whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvasPressed.png"))); - blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvas.png"))); - }//GEN-LAST:event_whiteBackroundButtonMouseClicked - - /** - * - * @param evt Changes backround of the canvas into dark color - */ - private void blackBackroundButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_blackBackroundButtonMouseClicked - listener.setWhiteBackround(false); - whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvas.png"))); - blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvasPressed.png"))); - }//GEN-LAST:event_blackBackroundButtonMouseClicked - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel blackBackroundButton; - private javax.swing.JButton downNavigationButton; - private javax.swing.JLabel jLabel1; - private javax.swing.JLayeredPane jLayeredPane1; - private javax.swing.JPanel jPanel1; - private javax.swing.JButton leftNavigationButton; - private javax.swing.JLabel loadModelButton; - private javax.swing.JButton minusNavigationButton; - private javax.swing.JButton plusNavigationButton; - private javax.swing.JLabel resetButton; - private javax.swing.JButton rightNavigationButton1; - private javax.swing.JButton upNavigationButton; - private javax.swing.JLabel whiteBackroundButton; - // End of variables declaration//GEN-END:variables -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.form b/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.form deleted file mode 100644 index 45c7d46376fe40d322bbbd95864b70b68d1d9fa4..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<!-- - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - ---> - -<Form version="1.4" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="575" max="32767" attributes="0"/> - <Group type="103" rootIndex="1" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="0" pref="0" max="-2" attributes="0"/> - <Component id="canvas1" max="32767" attributes="0"/> - <EmptySpace min="0" pref="0" max="-2" attributes="0"/> - </Group> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="411" max="32767" attributes="0"/> - <Group type="103" rootIndex="1" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="0" pref="0" max="-2" attributes="0"/> - <Component id="canvas1" max="32767" attributes="0"/> - <EmptySpace min="0" pref="0" max="-2" attributes="0"/> - </Group> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="cz.fidentis.analyst.gui.Canvas" name="canvas1"> - </Component> - </SubComponents> -</Form> diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.java b/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.java deleted file mode 100644 index 5f08cc63a4299f64e06982d0072941e4657a3efa..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package cz.fidentis.analyst.gui; - -import org.netbeans.api.settings.ConvertAsProperties; -import org.openide.awt.ActionID; -import org.openide.awt.ActionReference; -import org.openide.windows.TopComponent; -import org.openide.util.NbBundle.Messages; - -/** - * - * @author Richard Pajerský - * - * Window for Canvas - */ -@ConvertAsProperties( - dtd = "-//cz.fidentis.analyst.gui//Canvas//EN", - autostore = false -) -@TopComponent.Description( - preferredID = "CanvasTopComponent", - //iconBase="SET/PATH/TO/ICON/HERE", - persistenceType = TopComponent.PERSISTENCE_ALWAYS -) -@TopComponent.Registration(mode = "editor", openAtStartup = false) -@ActionID(category = "Window", id = "cz.fidentis.analyst.gui.CanvasTopComponent") -@ActionReference(path = "Menu/Window" /*, position = 333 */) -@TopComponent.OpenActionRegistration( - displayName = "#CTL_CanvasAction", - preferredID = "CanvasTopComponent" -) -@Messages({ - "CTL_CanvasAction=Canvas", - "CTL_CanvasTopComponent=Canvas", - "HINT_CanvasTopComponent=This is a Canvas window" -}) -public final class CanvasTopComponent extends TopComponent { - - public CanvasTopComponent() { - initComponents(); - setName(Bundle.CTL_CanvasTopComponent()); - setToolTipText(Bundle.HINT_CanvasTopComponent()); - //putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE); - //putClientProperty(TopComponent.PROP_DRAGGING_DISABLED, Boolean.TRUE); - //putClientProperty(TopComponent.PROP_UNDOCKING_DISABLED, Boolean.TRUE); - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - canvas1 = new cz.fidentis.analyst.gui.Canvas(); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 575, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(0, 0, 0) - .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(0, 0, 0))) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 411, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(0, 0, 0) - .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(0, 0, 0))) - ); - }// </editor-fold>//GEN-END:initComponents - - // Variables declaration - do not modify//GEN-BEGIN:variables - private cz.fidentis.analyst.gui.Canvas canvas1; - // End of variables declaration//GEN-END:variables - @Override - public void componentOpened() { - // TODO add custom code on component opening - } - - @Override - public void componentClosed() { - // TODO add custom code on component closing - } - - void writeProperties(java.util.Properties p) { - // better to version settings since initial version as advocated at - // http://wiki.apidesign.org/wiki/PropertyFiles - p.setProperty("version", "1.0"); - // TODO store your settings - } - - void readProperties(java.util.Properties p) { - String version = p.getProperty("version"); - // TODO read your settings according to their version - } - - public cz.fidentis.analyst.gui.Canvas getCanvas() { - return canvas1; - } -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/ComparisonGLEventListener.java b/GUI/src/main/java/cz/fidentis/analyst/gui/ComparisonGLEventListener.java deleted file mode 100644 index c1b8dbd858c2e55a25544fad029dc4d07f9a893e..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/ComparisonGLEventListener.java +++ /dev/null @@ -1,176 +0,0 @@ -package cz.fidentis.analyst.gui; - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2; -import com.jogamp.opengl.GLAutoDrawable; -import cz.fidentis.analyst.face.HumanFace; -import cz.fidentis.analyst.mesh.core.MeshFacet; -import cz.fidentis.analyst.mesh.core.MeshModel; -import cz.fidentis.analyst.visitors.mesh.HausdorffDistance; - -import javax.vecmath.Vector3d; -import java.awt.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static com.jogamp.opengl.GL.GL_FRONT_AND_BACK; -import static com.jogamp.opengl.GL.GL_VIEWPORT; -import static com.jogamp.opengl.GL2GL3.GL_FILL; -import static com.jogamp.opengl.GL2GL3.GL_LINE; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_MODELVIEW_MATRIX; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_PROJECTION_MATRIX; -import javax.vecmath.Point3d; - -/** - * - * @author Daniel Sokol - * - * Rendering face with heatmap. - */ -public class ComparisonGLEventListener extends GeneralGLEventListener { - boolean renderHeatmap; - Color minColor; - Color maxColor; - private Map<MeshFacet, List<Double>> distances = new HashMap<>(); - private HumanFace comparedFace; - - - public ComparisonGLEventListener(Canvas canvas) { - super(canvas); - } - - public void setComparedFace(HumanFace inputComparedFace) { - if (inputComparedFace != null) { - comparedFace = inputComparedFace; - } - renderHeatmap = false; - } - - public void compare(Color minColor, Color maxColor) { - HausdorffDistance hVisitor = new HausdorffDistance(getModel(), HausdorffDistance.Strategy.POINT_TO_POINT, false, false); - comparedFace.getMeshModel().compute(hVisitor); - distances = hVisitor.getDistances(); - renderHeatmap = true; - this.minColor = minColor; - this.maxColor = maxColor; - } - - @Override - public void display(GLAutoDrawable glad) { - wireModel = glCanvas.getDrawWired(); // is wire-frame or not - - if (whiteBackround) { - gl.glClearColor(0.9f, 0.9f, 0.9f, 0); - } else { - gl.glClearColor(0.25f, 0.25f, 0.25f, 0); - } - // background for GLCanvas - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - gl.glLoadIdentity(); - - // sets model to proper position - glu.gluLookAt(xCameraPosition, yCameraPosition, zCameraPosition, xCenter, yCenter, zCenter, xUpPosition, yUpPosition, zUpPosition); - - gl.glShadeModel(GL2.GL_SMOOTH); - gl.glGetIntegerv(GL_VIEWPORT, viewport, 0); - gl.glGetFloatv(GL_MODELVIEW_MATRIX, modelViewMatrix, 0); - gl.glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix, 0); - - //if there is any model, draw - if (comparedFace != null) { - if (renderHeatmap) { - drawHeatmap(comparedFace.getMeshModel()); - } else { - drawWithoutTextures(comparedFace.getMeshModel()); - } - } else if (getModel() != null) { - if (wireModel) { - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //drawn as wire-frame - } else { - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // drawn as full traingles - } - - drawWithoutTextures(getModel()); - } - - gl.glFlush(); - } - - public void drawHeatmap(MeshModel model) { - for (int i = 0; i < model.getFacets().size(); i++) { - List<Double> distanceList = distances.get(model.getFacets().get(i)); - Double minDistance = distanceList.stream().mapToDouble(Double::doubleValue).min().getAsDouble(); - Double maxDistance = distanceList.stream().mapToDouble(Double::doubleValue).max().getAsDouble(); - renderFaceWithHeatmap(model.getFacets().get(i), distances.get(model.getFacets().get(i)), minDistance, maxDistance); - } - } - - public void renderFaceWithHeatmap(MeshFacet facet, List<Double> distancesList, Double minDistance, Double maxDistance) { - gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles - - // get the normal and tex coords indicies for face i - for (int v = 0; v < facet.getCornerTable().getSize(); v++) { - // render the normals - Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal(); - if (norm != null) { - gl.glNormal3d(norm.x, norm.y, norm.z); - } - // render the vertices - Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition(); - //get color of vertex - Color c = getColor(distancesList.get(facet.getCornerTable().getRow(v).getVertexIndex()), minDistance, maxDistance); - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, c.getComponents(null), 0); - - gl.glVertex3d(vert.x, vert.y, vert.z); - } - gl.glEnd(); - gl.glPopAttrib(); - } - - Color getColor(Double currentDistance, Double minDistance, Double maxDistance) { - double currentParameter = ((currentDistance - minDistance) / (maxDistance - minDistance)); - - float[] hsb1 = Color.RGBtoHSB(minColor.getRed(), minColor.getGreen(), minColor.getBlue(), null); - float h1 = hsb1[0]; - float s1 = hsb1[1]; - float b1 = hsb1[2]; - - float[] hsb2 = Color.RGBtoHSB(maxColor.getRed(), maxColor.getGreen(), maxColor.getBlue(), null); - float h2 = hsb2[0]; - float s2 = hsb2[1]; - float b2 = hsb2[2]; - - // determine clockwise and counter-clockwise distance between hues - float distCCW; - float distCW; - - if (h1 >= h2) { - distCCW = h1 - h2; - distCW = 1 + h2 - h1; - } else { - distCCW = 1 + h1 - h2; - distCW = h2 - h1; - } - - float hue; - - if (distCW >= distCCW) { - hue = (float) (h1 + (distCW * currentParameter)); - } else { - hue = (float) (h1 - (distCCW * currentParameter)); - } - - if (hue < 0) { - hue = 1 + hue; - } - if (hue > 1) { - hue = hue - 1; - } - - float saturation = (float) ((1 - currentParameter) * s1 + currentParameter * s2); - float brightness = (float) ((1 - currentParameter) * b1 + currentParameter * b2); - - return Color.getHSBColor(hue, saturation, brightness); - } -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/GeneralGLEventListener.java b/GUI/src/main/java/cz/fidentis/analyst/gui/GeneralGLEventListener.java deleted file mode 100644 index f9b5276a2ac50935f73e34b21b40a3b77da75334..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/GeneralGLEventListener.java +++ /dev/null @@ -1,560 +0,0 @@ -package cz.fidentis.analyst.gui; - -import cz.fidentis.analyst.mesh.core.MeshModel; -import cz.fidentis.analyst.mesh.core.MeshFacet; -import com.jogamp.opengl.GL; -import static com.jogamp.opengl.GL.GL_DEPTH_TEST; -import static com.jogamp.opengl.GL.GL_FRONT_AND_BACK; -import static com.jogamp.opengl.GL.GL_VIEWPORT; -import com.jogamp.opengl.GL2; -import static com.jogamp.opengl.GL2GL3.GL_FILL; -import static com.jogamp.opengl.GL2GL3.GL_LINE; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLEventListener; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_MODELVIEW_MATRIX; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_PROJECTION_MATRIX; -import com.jogamp.opengl.glu.GLU; -import cz.fidentis.analyst.symmetry.SymmetryConfig; -import cz.fidentis.analyst.symmetry.SignificantPoints; -import cz.fidentis.analyst.symmetry.SymmetryEstimator; -import javax.vecmath.Point3d; - -import javax.vecmath.Vector3d; -import javax.vecmath.Vector3f; - -/** - * - * @author Natália Bebjaková - */ -public class GeneralGLEventListener implements GLEventListener { - - /** - * MeshModel that is displayed - */ - private MeshModel model = new MeshModel(); - - /** - * MeshModel of the symmetry plane - */ - private MeshFacet symmetryPlaneFacet = null; - - /** - * GLCanvas which listener belongs to - */ - protected Canvas glCanvas; - - /** - * GLU object. - */ - protected GLU glu; - - /** - * Usage of openGL version 2 - */ - protected GL2 gl; - - /** - * The last viewport. - */ - protected int[] viewport = new int[4]; - - /** - * The last model matrix. - */ - protected float[] modelViewMatrix = new float[16]; - - /** - * The last projection matrix. - */ - protected float[] projectionMatrix = new float[16]; - - /** - * The X coordinate of the last known mouse position during the scene rotation. - */ - int mouseX = 0; - - /** - * The Y coordinate of the last know mouse position during the scene rotation. - */ - int mouseY = 0; - - protected Vector3f defaultPosition = new Vector3f(0, 0, 300); - protected Vector3f currentPosition = new Vector3f(0, 0, 300); - - protected double zCenter = 0; - protected double xCenter = 0; - protected double yCenter = 0; - - protected double zCameraPosition; - protected double xCameraPosition; - protected double yCameraPosition; - - protected double zUpPosition = 0; - protected double xUpPosition = 0; - protected double yUpPosition = 1; - - /** - * Decides if model is displayed as wire-frame - */ - protected boolean wireModel = false; - - /** - * decides if the symmetryPlane is displayed - */ - protected static boolean symmetryPlane; - - /** - * Decides if the background will be white - */ - protected boolean whiteBackround = false; - - /** - * - * @return is background white or not - */ - public boolean isWhiteBackround() { - return whiteBackround; - } - - /** - * - * @return Matrix for model view - */ - public float[] getModelViewMatrix() { - return modelViewMatrix; - } - - /** - * - * @return Matrix for projection - */ - public float[] getProjectionMatrix() { - return projectionMatrix; - } - - /** - * - * @return GlCanvas for displaying - */ - public Canvas getGlCanvas() { - return glCanvas; - } - - /** - * - * @param drawWire Decides if model is displayed as wire-frame - */ - public void setWireMode(boolean drawWire) { - wireModel = drawWire; - } - - /** - * - * @param drawSymmetry Decides if model is displayed as wire-frame - */ - public void setSymmetryPlane(boolean drawSymmetry) { - symmetryPlane = drawSymmetry; - } - - /** - * - * @param whiteBackround Is backround white or not - */ - public void setWhiteBackround(boolean whiteBackround) { - this.whiteBackround = whiteBackround; - } - - /** - * Creates new EventListener - * @param canvas GLCanvas which listener belongs to - */ - public GeneralGLEventListener(Canvas canvas) { - this.glCanvas = canvas; - } - - /** - * - * @param model Set model to be displayed - */ - public void setModel(MeshModel model) { - this.model = model; - } - - /** - * - * @param symmetryPlaneFacet Set model of the symmetry plane - */ - public void setSymmetryPlaneFacet(MeshFacet symmetryPlaneFacet) { - this.symmetryPlaneFacet = symmetryPlaneFacet; - } - - /** - * - * @return Returns displayed model - */ - public MeshModel getModel() { - return model; - } - - - /** - * Invoked when main frame is created - * @param glad Glad object - */ - @Override - public void init(GLAutoDrawable glad) { - System.out.println("OLD GeneralGLEventListener.init"); - - this.gl = (GL2) glad.getGL(); - glu = new GLU(); - - gl.setSwapInterval(1); - gl.glEnable(GL2.GL_LIGHTING); - gl.glEnable(GL2.GL_LIGHT0); - gl.glEnable(GL2.GL_DEPTH_TEST); - gl.glClearColor(0,0,0,0); // background for GLCanvas - gl.glClear(GL2.GL_COLOR_BUFFER_BIT); - - gl.glShadeModel(GL2.GL_SMOOTH); // use smooth shading - - gl.glDepthFunc(GL2.GL_LESS); - gl.glDepthRange(0.0, 1.0); - gl.glEnable(GL_DEPTH_TEST); - - gl.glEnable(GL2.GL_NORMALIZE); - gl.glDisable(GL2.GL_CULL_FACE); - } - - /** - * Invoked when main frame is closed - * @param glad Glad object - */ - @Override - public void dispose(GLAutoDrawable glad) { - } - - /** - * Invoked every frame. - * @param glad Glad object - */ - @Override - public void display(GLAutoDrawable glad) { - wireModel = glCanvas.getDrawWired(); // is wire-frame or not - symmetryPlane = glCanvas.getDrawSymmetryPlane(); - - //Generate SymmetryPlane first time we request to see it - if (symmetryPlane && symmetryPlaneFacet == null) { - SymmetryEstimator estimator = new SymmetryEstimator(new SymmetryConfig(), SignificantPoints.CurvatureAlg.GAUSSIAN); - model.getFacets().get(0).accept(estimator); - symmetryPlaneFacet = estimator.getSymmetryPlaneMesh(); - - //Set calculated planes for the loaded Face - glCanvas.loadedFace.setSymmetryPlane(estimator.getSymmetryPlane(), symmetryPlaneFacet); - glCanvas.loadedFace.setCuttingPlane(symmetryPlaneFacet); - } - - if (whiteBackround) { - gl.glClearColor(0.9f,0.9f,0.9f,0); - } else { - gl.glClearColor(0.25f,0.25f,0.25f,0); - } - // background for GLCanvas - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - gl.glLoadIdentity(); - - // sets model to proper position - glu.gluLookAt(xCameraPosition, yCameraPosition, zCameraPosition, xCenter, yCenter, zCenter, xUpPosition, yUpPosition, zUpPosition); - - gl.glShadeModel(GL2.GL_SMOOTH); - gl.glGetIntegerv(GL_VIEWPORT, viewport, 0); - gl.glGetFloatv(GL_MODELVIEW_MATRIX, modelViewMatrix, 0); - gl.glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix, 0); - - //if there is any model, draw - if (model != null) { - if (wireModel) { - gl.glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); //drawn as wire-frame - } else { - gl.glPolygonMode( GL_FRONT_AND_BACK, GL_FILL); // drawn as full traingles - } - - drawWithoutTextures(model); - if (symmetryPlane) { - renderFacet(symmetryPlaneFacet); - } - } - - //gl.glPopMatrix(); - gl.glFlush(); - } - - /** - * Loops through the facets and render each of them - * - * @param model model of the face - */ - public void drawWithoutTextures(MeshModel model) { - for (int i = 0; i < model.getFacets().size(); i++) { - renderFacet(model.getFacets().get(i)); - } - } - - /** - * Loops through the facet and render all the vertices as they are stored in corner table - * - * @param facet facet of model - */ - public void renderFacet(MeshFacet facet) { - gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles - - // get the normal and tex coords indicies for face i - for (int v = 0; v < facet.getCornerTable().getSize(); v++) { - // render the normals - Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal(); - if(norm != null) { - gl.glNormal3d(norm.x, norm.y, norm.z); - } - // render the vertices - Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition(); - gl.glVertex3d(vert.x, vert.y, vert.z); - } - gl.glEnd(); - - } - - /** - * - * @param glad Glad object - * @param x x - * @param y y - * @param width New width - * @param height New height - */ - @Override - public void reshape(GLAutoDrawable glad, int x, int y, int width, int height) { - - if (height == 0) { - height = 1; // to avoid division by 0 in aspect ratio below - } - gl.glViewport(x, y, width, height); // size of drawing area - - float h = (float) height / (float) width; - - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glLoadIdentity(); - - glu.gluPerspective(65, width / (float) height, 5.0f, 1500.0f); - gl.glMatrixMode(GL2.GL_MODELVIEW); - gl.glLoadIdentity(); - - gl.glTranslatef(0.0f, 0.0f, -40.0f); - } - - /** - * - * @param x New x position - * @param y New y position - * @param z New z position - */ - public void setCameraPosition(float x, float y, float z) { - currentPosition.set(x, y, z); - - setNewCameraPosition(currentPosition); - zCameraPosition = defaultPosition.z; - xCameraPosition = defaultPosition.x; - yCameraPosition = defaultPosition.y; - } - - /** - * - * @param position New position of camera - */ - public void setNewCameraPosition(Vector3f position) { - xCameraPosition = position.x; - yCameraPosition = position.y; - zCameraPosition = position.z; - } - - /** - * - * @param degree degree of rotation - */ - public void rotateUp(double degree) { - rotate(-degree, 0); - } - - /** - * - * @param degree degree of rotation - */ - public void rotateDown(double degree) { - rotate(degree, 0); - } - - /** - * - * @param degree degree of rotation - */ - public void rotateLeft(double degree) { - rotate(0, degree); - } - - /** - * - * @param degree degree of rotation - */ - public void rotateRight(double degree) { - rotate(0, -degree); - } - - /** - * - * @return X axis - */ - private Vector3f getXaxis() { - Vector3f xAxis = new Vector3f( - (float) ((yCameraPosition - yCenter) *zUpPosition - (zCameraPosition - zCenter) * yUpPosition), - (float) ((zCameraPosition - zCenter) * xUpPosition - (xCameraPosition - xCenter) * zUpPosition), - (float) ((xCameraPosition - xCenter) * yUpPosition - xUpPosition * (yCameraPosition - yCenter))); - - float length = (float) Math.sqrt(xAxis.x * xAxis.x + - xAxis.y * xAxis.y + xAxis.z * xAxis.z); - xAxis.set(xAxis.x / length, xAxis.y / length, xAxis.z / length); - return xAxis; - } - - /** - * - * @return Y axis - */ - private Vector3f getYaxis() { - Vector3f yAxis = new Vector3f((float) xUpPosition, (float) yUpPosition, (float) zUpPosition); - float length = (float) Math.sqrt(yAxis.x * yAxis.x + - yAxis.y * yAxis.y + yAxis.z * yAxis.z); - yAxis.set((yAxis.x / length), (yAxis.y / length), (yAxis.z / length)); - return yAxis; - } - - /** - * Rotates object around axes that apear as horizontal and vertical axe on - * screen (paralel to the sceen edges), intersecting at the center of - * screen( i.e head center). - * - * @param xAngle angle around vertical axe on screen - * @param yAngle angle around horizontal axe on screen - */ - public void rotate(double xAngle, double yAngle) { - Vector3f xAxis = getXaxis(); - Vector3f yAxis = getYaxis(); - - Vector3f point = new Vector3f((float) xCameraPosition, - (float) yCameraPosition, (float) zCameraPosition); - - Vector3f camera = rotateAroundAxe(point, xAxis, Math.toRadians(xAngle)); - camera = rotateAroundAxe(camera, yAxis, Math.toRadians(yAngle)); - - point = new Vector3f((float) xUpPosition, (float) yUpPosition, (float) zUpPosition); - - Vector3f up = rotateAroundAxe(point, xAxis, Math.toRadians(xAngle)); - up = rotateAroundAxe(up, yAxis, Math.toRadians(yAngle)); - - xUpPosition = up.x; - yUpPosition = up.y; - zUpPosition = up.z; - - setNewCameraPosition(camera); - } - - /** - * - * @param xShift xShift - * @param yShift yShift - */ - public void move(double xShift, double yShift) { - Vector3f xAxis = getXaxis(); - Vector3f yAxis = getYaxis(); - - Vector3f shift = new Vector3f((float) (xAxis.x * xShift + yAxis.x * yShift), - (float) (xAxis.y * xShift + yAxis.y * yShift), (float) (xAxis.z * xShift + yAxis.z * yShift)); - Vector3f camera = new Vector3f((float) xCameraPosition + shift.x, (float) yCameraPosition + shift.y, - (float) zCameraPosition + shift.z); - xCenter += shift.x; - yCenter += shift.y; - zCenter += shift.z; - - setNewCameraPosition(camera); - } - - /** - * Calculate the new position f point from given angle and rotation axe. - * - * @param point original position - * @param u vector of rotation axe - * @param angle angle of rotation - * @return new position - */ - public Vector3f rotateAroundAxe(Vector3f point, Vector3f u, double angle) { - Vector3f p; - float x = (float) ((Math.cos(angle) + u.x * u.x * (1 - Math.cos(angle))) * point.x - + (u.x * u.y * (1 - Math.cos(angle)) - u.z * Math.sin(angle)) * point.y - + (u.x * u.z * (1 - Math.cos(angle)) + u.y * Math.sin(angle)) * point.z); - float y = (float) ((u.x * u.y * (1 - Math.cos(angle)) + u.z * Math.sin(angle)) * point.x - + (Math.cos(angle) + u.y * u.y * (1 - Math.cos(angle))) * point.y - + (u.y * u.z * (1 - Math.cos(angle)) - u.x * Math.sin(angle)) * point.z); - float z = (float) ((u.x * u.z * (1 - Math.cos(angle)) - u.y * Math.sin(angle)) * point.x - + (u.y * u.z * (1 - Math.cos(angle)) + u.x * Math.sin(angle)) * point.y - + (Math.cos(angle) + u.z * u.z * (1 - Math.cos(angle))) * point.z); - p = new Vector3f(x, y, z); - - return p; - } - - /** - * Sets model to the starting position - */ - public void rotationAndSizeRestart() { - xUpPosition = 0; - yUpPosition = 1; - zUpPosition = 0; - - setNewCameraPosition(defaultPosition); - xCenter = 0; - yCenter = 0; - zCenter = 0; - } - - /** - * - * @param distance Distance to be zoom in - */ - public void zoomIn(double distance) { - double x = xCameraPosition - xCenter; - double y = yCameraPosition - yCenter; - double z = zCameraPosition - zCenter; - double sqrt = Math.sqrt(x * x + y * y + z * z); - - if (sqrt > 0) { - xCameraPosition = xCenter + ((sqrt - distance) * x / sqrt); - yCameraPosition = yCenter + ((sqrt - distance) * y / sqrt); - zCameraPosition = zCenter + ((sqrt - distance) * z / sqrt); - } - } - - /** - * - * @param distance Distance to be zoom out - */ - public void zoomOut(double distance) { - double x = xCameraPosition - xCenter; - double y = yCameraPosition - yCenter; - double z = zCameraPosition - zCenter; - double sqrt = Math.sqrt(x * x + y * y + z * z); - - if (sqrt == 0) { - sqrt = 1; - } - xCameraPosition = xCenter + ((sqrt + distance) * x / sqrt); - yCameraPosition = yCenter + ((sqrt + distance) * y / sqrt); - zCameraPosition = zCenter + ((sqrt + distance) * z / sqrt); - } -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/Manipulator3D.java b/GUI/src/main/java/cz/fidentis/analyst/gui/Manipulator3D.java deleted file mode 100644 index eb1ef64a51d9aeac580ba6a1bddb852b68b91ed4..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/Manipulator3D.java +++ /dev/null @@ -1,106 +0,0 @@ -package cz.fidentis.analyst.gui; - -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseWheelEvent; -//import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; - -/** - * - * @author Richard Pajersky - * - * 3D manipulation with mouse, using 3D movement from GeneralGLEventListener - */ -public class Manipulator3D extends MouseAdapter { - - private GeneralGLEventListener listener; - - private float lastX = 0; - private float lastY = 0; - - private static double rotationSpeed = 0.4; - private static double moveSpeed = 0.4; - - public Manipulator3D(GeneralGLEventListener listener) { - this.listener = listener; - } - - /** - * Left mouse button dragging rotates - * Right mouse button dragging moves - * Middle mouse button dragging resets rotation and zoom - */ - @Override - public void mouseDragged(MouseEvent evt) { - //JOptionPane.showMessageDialog(null, evt.getButton()); - - if (SwingUtilities.isLeftMouseButton(evt)) { - double rotateX = -(lastY - evt.getY()) * rotationSpeed; - double rotateY = +(lastX - evt.getX()) * rotationSpeed; - if (Math.abs(rotateX) < Math.abs(rotateY)) { - rotateX = 0; - } else if (Math.abs(rotateY) < Math.abs(rotateX)) { - rotateY = 0; - } - listener.rotate(rotateX, rotateY); - } - if (SwingUtilities.isRightMouseButton(evt)) { - double moveX = -(lastX - evt.getX()) * moveSpeed; - double moveY = -(lastY - evt.getY()) * moveSpeed; - listener.move(moveX, moveY); - } - if (SwingUtilities.isMiddleMouseButton(evt)) { - listener.rotationAndSizeRestart(); - } - lastX = evt.getX(); - lastY = evt.getY(); - } - - /** - * Actualize mouse movement - */ - @Override - public void mouseMoved(MouseEvent e) { - lastX = e.getX(); - lastY = e.getY(); - } - - /** - * Zoom in or out based on mouse wheel movement - */ - @Override - public void mouseWheelMoved(MouseWheelEvent evt) { - if (evt.getWheelRotation() > 0) { - listener.zoomIn(-5 * evt.getWheelRotation()); - } else { - listener.zoomOut(5 * evt.getWheelRotation()); - } - } - - /** - * Middle mouse button click resets rotation and zoom - */ - @Override - public void mouseClicked(MouseEvent evt) { - if (SwingUtilities.isMiddleMouseButton(evt)) - listener.rotationAndSizeRestart(); - } - - public static double getRotationSpeed() { - return rotationSpeed; - } - - public static void setRotationSpeed(double rotationSpeed) { - Manipulator3D.rotationSpeed = rotationSpeed; - } - - public static double getMoveSpeed() { - return moveSpeed; - } - - public static void setMoveSpeed(double moveSpeed) { - Manipulator3D.moveSpeed = moveSpeed; - } - -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationGLEventListener.java b/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationGLEventListener.java deleted file mode 100644 index 7317ff4e774468f3b7da09a22fb690f902386456..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationGLEventListener.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package cz.fidentis.analyst.gui; - -import com.jogamp.opengl.GL; -import static com.jogamp.opengl.GL.GL_FRONT_AND_BACK; -import static com.jogamp.opengl.GL.GL_VIEWPORT; -import com.jogamp.opengl.GL2; -import static com.jogamp.opengl.GL2GL3.GL_FILL; -import static com.jogamp.opengl.GL2GL3.GL_LINE; -import com.jogamp.opengl.GLAutoDrawable; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_MODELVIEW_MATRIX; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_PROJECTION_MATRIX; -import cz.fidentis.analyst.icp.IcpTransformer; -import cz.fidentis.analyst.icp.RandomStrategy; -//import cz.fidentis.analyst.face.HumanFace; -import cz.fidentis.analyst.mesh.core.MeshFacet; -import cz.fidentis.analyst.mesh.core.MeshModel; -import cz.fidentis.analyst.mesh.core.MeshPoint; -import java.awt.Color; -import javax.vecmath.Point3d; -import javax.vecmath.Vector3d; - -/** - * - * @author Richard Pajersky - */ -public class RegistrationGLEventListener extends GeneralGLEventListener{ - - private MeshModel primaryModel = null; - private MeshModel secondaryModel = null; - - private Color primaryColor = Color.BLUE; - private Color secondaryColor = Color.RED; - - private boolean other = false; - - private double leftPt = 0.0f; - private double rightPt = 0.0f; - private double topPt = 0.0f; - private double bottomPt = 0.0f; - private double farPt = 0.0f; - private double nearPt = 0.0f; - private Vector3d center; - - public RegistrationGLEventListener(Canvas primary, Canvas secondary) { - super(primary); - } - - private void calculateCenter(MeshModel model) { - for (MeshFacet mf : model.getFacets()) { - for (MeshPoint mp : mf.getVertices()) { - Point3d vert = mp.getPosition(); - if (vert.x > rightPt) { - rightPt = vert.x; - } - if (vert.x < leftPt) { - leftPt = vert.x; - } - if (vert.y > topPt) { - topPt = vert.y; - } - if (vert.y < bottomPt) { - bottomPt = vert.y; - } - if (vert.z > nearPt) { - nearPt = vert.z; - } - if (vert.z < farPt) { - farPt = vert.z; - } - } - } - double xc = (rightPt + leftPt) / 2.0f; - double yc = (topPt + bottomPt) / 2.0f; - double zc = (nearPt + farPt) / 2.0f; - center = new Vector3d(xc, yc, zc); - } - - @Override - public void setModel(MeshModel model) { - if (primaryModel == null) { - primaryModel = model; - } - else { - IcpTransformer icpVisitor = new IcpTransformer(primaryModel, 10, true, 0.05, new RandomStrategy(0.5)); - for (MeshFacet f: model.getFacets()) { - icpVisitor.visitMeshFacet(f); - } - secondaryModel = model; - /* - Icp icp = new Icp(); - icp.setParameters(10, false, 0.05); - MeshFacet facet = icp.getTransformedFacet(primaryModel.getFacets().get(0), model.getFacets().get(0)); - MeshModel newModel = new MeshModel(); - newModel.addFacet(facet); - secondaryModel = newModel; - */ - } - } - - @Override - public void display(GLAutoDrawable glad) { - wireModel = glCanvas.getDrawWired(); // is wire-frame or not - if (whiteBackround) { - gl.glClearColor(0.9f,0.9f,0.9f,0); - } else { - gl.glClearColor(0.25f,0.25f,0.25f,0); - } - // background for GLCanvas - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - gl.glLoadIdentity(); - - // sets model to proper position - glu.gluLookAt(xCameraPosition, yCameraPosition, zCameraPosition, xCenter, yCenter, zCenter, xUpPosition, yUpPosition, zUpPosition); - - gl.glShadeModel(GL2.GL_SMOOTH); - gl.glGetIntegerv(GL_VIEWPORT, viewport, 0); - gl.glGetFloatv(GL_MODELVIEW_MATRIX, modelViewMatrix, 0); - gl.glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix, 0); - - //if there is any model, draw - if (primaryModel != null) { - if (wireModel) { - gl.glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); //drawn as wire-frame - drawWithoutTextures(primaryModel); - if (secondaryModel != null) - drawWithoutTextures(secondaryModel); - } else { - gl.glPolygonMode( GL_FRONT_AND_BACK, GL_FILL); // drawn as full traingles - drawWithoutTextures(primaryModel); - if (secondaryModel != null) - drawWithoutTextures(secondaryModel); - } - } - - //gl.glPopMatrix(); - gl.glFlush(); - } - - /** - * Loops through the facets and render each of them - * - * @param model model of the face - */ - @Override - public void drawWithoutTextures(MeshModel model) { - for (int i = 0; i < model.getFacets().size(); i++) { - renderFacet(model.getFacets().get(i)); - } - other = !other; - } - - /** - * Loops through the facet and render all the vertices as they are stored in corner table - * - * @param facet facet of model - */ - @Override - public void renderFacet(MeshFacet facet) { - gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles - // get the normal and tex coords indicies for face i - for (int v = 0; v < facet.getCornerTable().getSize(); v++) { - // render the normals - Vector3d norm; - norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal(); - if(norm != null) { - gl.glNormal3d(norm.x, norm.y, norm.z); - } - // render the vertices - Point3d vert; - vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition(); - //Color c = Color.GREEN; - if (other && secondaryModel != null) - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, secondaryColor.getComponents(null), 0); - else - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, primaryColor.getComponents(null), 0); - gl.glVertex3d(vert.x, vert.y, vert.z); - } - gl.glEnd(); - } - - public Color getPrimaryColor() { - return primaryColor; - } - - public void setPrimaryColor(Color primaryColor) { - this.primaryColor = primaryColor; - } - - public Color getSecondaryColor() { - return secondaryColor; - } - - public void setSecondaryColor(Color secondaryColor) { - this.secondaryColor = secondaryColor; - } - -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryEstimator.java b/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryEstimator.java deleted file mode 100644 index cadbb914dc697d00c95538de658354d33b4093b8..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryEstimator.java +++ /dev/null @@ -1,48 +0,0 @@ -package cz.fidentis.analyst.gui; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import org.openide.awt.ActionID; -import org.openide.awt.ActionReference; -import org.openide.awt.ActionReferences; -import org.openide.awt.ActionRegistration; -import org.openide.util.NbBundle.Messages; - -/** - * - * @author Natalia Bebjakova - * - * Symmetry estimator. - */ - -@ActionID( - category = "File", - id = "cz.fidentis.analyst.gui.SymmetryEstimator" -) -@ActionRegistration( - iconBase = "symmetry16x16.png", - displayName = "#CTL_SymmetryEstimator" -) -@ActionReferences({ - @ActionReference(path = "Menu/Edit", position = 2600, separatorBefore = 2550), - @ActionReference(path = "Toolbars/File", position = 300) -}) -@Messages("CTL_SymmetryEstimator=Symmetry Estimator") -public final class SymmetryEstimator implements ActionListener { - - /** - * Flag for whether the symmetry plane should be displayed - */ - boolean symmetryPlaneClicked = false; - - @Override - public void actionPerformed(ActionEvent e) { - if (symmetryPlaneClicked) { - symmetryPlaneClicked = false; - Canvas.setDrawSymmetryPlane(symmetryPlaneClicked); - } else { - symmetryPlaneClicked = true; - Canvas.setDrawSymmetryPlane(symmetryPlaneClicked); - } - } -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.form b/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.form deleted file mode 100644 index 6080c1c14b9ea359619d3141209a7efa4adaae1a..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.form +++ /dev/null @@ -1,499 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="symetrySpecificationPanel" alignment="0" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="symetrySpecificationPanel" alignment="0" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Container class="javax.swing.JPanel" name="symetrySpecificationPanel"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="e2" green="e6" red="b0" type="rgb"/> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="1" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> - <Component id="defaultValues" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" attributes="0"> - <EmptySpace min="-2" pref="17" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace min="-2" pref="154" max="-2" attributes="0"/> - <Component id="jLabel1" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" attributes="0"> - <Component id="showPlaneLabel" min="-2" pref="147" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - <Component id="originalModelButton" min="-2" pref="181" max="-2" attributes="0"/> - </Group> - </Group> - </Group> - <Group type="102" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace min="-2" pref="10" max="-2" attributes="0"/> - <Component id="minCurvatio8" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Component id="averagingCheckBox" min="-2" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - <Component id="symetryButton" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="infoMinAngleCos" min="-2" max="-2" attributes="0"/> - <Component id="infoRelDist" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="infoNormalAngle" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="infoPoints" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="infoMinCurv" alignment="0" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="minCurvatio4" pref="0" max="32767" attributes="0"/> - <Group type="102" alignment="0" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="minCurvatio" min="-2" max="-2" attributes="0"/> - <Component id="minCurvatio3" min="-2" max="-2" attributes="0"/> - <Component id="minCurvatio2" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="significantPointLabel" alignment="0" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> - </Group> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Group type="103" groupAlignment="0" max="-2" attributes="0"> - <Component id="curavatureSlider" alignment="1" pref="0" max="32767" attributes="0"/> - <Component id="relativeDistanceSlider" alignment="1" pref="0" max="32767" attributes="0"/> - <Component id="significantPointSlider" alignment="1" min="-2" pref="164" max="-2" attributes="0"/> - <Component id="angleCosineSlider" alignment="1" min="-2" pref="164" max="-2" attributes="0"/> - </Group> - <Component id="normalAngleSlider" min="-2" pref="164" max="-2" attributes="0"/> - </Group> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" max="-2" attributes="0"> - <Component id="distanceTextField" max="32767" attributes="0"/> - <Component id="normalTextField" alignment="0" max="32767" attributes="0"/> - <Component id="significantTextField" min="-2" pref="46" max="-2" attributes="0"/> - <Component id="textFieldCurvature" min="-2" pref="46" max="-2" attributes="0"/> - <Component id="textFieldMinCos" min="-2" pref="46" max="-2" attributes="0"/> - </Group> - </Group> - </Group> - </Group> - </Group> - <EmptySpace max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace max="32767" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Group type="103" alignment="1" groupAlignment="0" attributes="0"> - <Component id="infoPoints" min="-2" max="-2" attributes="0"/> - <Component id="significantPointLabel" min="-2" pref="27" max="-2" attributes="0"/> - </Group> - <Group type="103" alignment="1" groupAlignment="0" attributes="0"> - <Component id="significantTextField" min="-2" max="-2" attributes="0"/> - <Component id="significantPointSlider" min="-2" pref="28" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Component id="minCurvatio" min="-2" pref="26" max="-2" attributes="0"/> - <Group type="102" alignment="1" attributes="0"> - <Component id="textFieldCurvature" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> - </Group> - <Component id="infoMinCurv" min="-2" max="-2" attributes="0"/> - <Component id="curavatureSlider" min="-2" pref="26" max="-2" attributes="0"/> - </Group> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="infoMinAngleCos" alignment="1" min="-2" max="-2" attributes="0"/> - <Component id="minCurvatio2" alignment="1" min="-2" pref="26" max="-2" attributes="0"/> - <Component id="textFieldMinCos" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="angleCosineSlider" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <Group type="103" groupAlignment="0" max="-2" attributes="0"> - <Component id="normalAngleSlider" max="32767" attributes="0"/> - <Component id="normalTextField" max="32767" attributes="0"/> - </Group> - <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/> - <Component id="distanceTextField" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="minCurvatio4" min="-2" pref="27" max="-2" attributes="0"/> - <Component id="infoNormalAngle" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="32767" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="infoRelDist" alignment="1" min="-2" max="-2" attributes="0"/> - <Group type="103" alignment="1" groupAlignment="0" attributes="0"> - <Component id="relativeDistanceSlider" min="-2" pref="22" max="-2" attributes="0"/> - <Component id="minCurvatio3" min="-2" pref="26" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace min="-2" pref="13" max="-2" attributes="0"/> - </Group> - </Group> - <Component id="defaultValues" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="17" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Component id="symetryButton" min="-2" pref="75" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - <Component id="originalModelButton" min="-2" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Group type="103" groupAlignment="1" attributes="0"> - <Component id="averagingCheckBox" min="-2" max="-2" attributes="0"/> - <Component id="minCurvatio8" min="-2" pref="28" max="-2" attributes="0"/> - </Group> - <EmptySpace pref="53" max="32767" attributes="0"/> - <Component id="jLabel1" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="45" max="-2" attributes="0"/> - <Component id="showPlaneLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace pref="27" max="32767" attributes="0"/> - </Group> - </Group> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JSlider" name="curavatureSlider"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="fa" green="fa" red="fa" type="rgb"/> - </Property> - <Property name="majorTickSpacing" type="int" value="1"/> - <Property name="minimum" type="int" value="50"/> - <Property name="snapToTicks" type="boolean" value="true"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JSlider" name="angleCosineSlider"> - <Properties> - <Property name="minimum" type="int" value="80"/> - <Property name="snapToTicks" type="boolean" value="true"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="minCurvatio"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Arial" size="14" style="1"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="Min. Curvature Ratio"/> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="minCurvatio2"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Arial" size="14" style="1"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="Min. Angle Cosine"/> - </Properties> - </Component> - <Component class="javax.swing.JSlider" name="normalAngleSlider"> - <Properties> - <Property name="minimum" type="int" value="80"/> - <Property name="snapToTicks" type="boolean" value="true"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="minCurvatio3"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Arial" size="14" style="1"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="Relative Distance"/> - </Properties> - </Component> - <Component class="javax.swing.JSlider" name="significantPointSlider"> - <Properties> - <Property name="majorTickSpacing" type="int" value="100"/> - <Property name="maximum" type="int" value="300"/> - <Property name="snapToTicks" type="boolean" value="true"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="minCurvatio4"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Arial" size="14" style="1"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="Normal Angle Cosine"/> - </Properties> - </Component> - <Component class="javax.swing.JSlider" name="relativeDistanceSlider"> - <Properties> - <Property name="maximum" type="int" value="5"/> - <Property name="snapToTicks" type="boolean" value="true"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="significantPointLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Arial" size="14" style="1"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="Significant Points"/> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="symetryButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/symetryCount.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="symetryButtonMouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="symetryButtonMouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="symetryButtonMouseExited"/> - </Events> - </Component> - <Component class="javax.swing.JCheckBox" name="averagingCheckBox"> - <Properties> - <Property name="selected" type="boolean" value="true"/> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="averagingCheckBoxMouseClicked"/> - </Events> - </Component> - <Component class="javax.swing.JTextField" name="textFieldCurvature"> - <Properties> - <Property name="text" type="java.lang.String" value="0.5"/> - <Property name="toolTipText" type="java.lang.String" value=""/> - </Properties> - </Component> - <Component class="javax.swing.JTextField" name="textFieldMinCos"> - <Properties> - <Property name="text" type="java.lang.String" value="0.985"/> - <Property name="toolTipText" type="java.lang.String" value=""/> - </Properties> - </Component> - <Component class="javax.swing.JTextField" name="normalTextField"> - <Properties> - <Property name="text" type="java.lang.String" value="0.985"/> - <Property name="toolTipText" type="java.lang.String" value=""/> - </Properties> - </Component> - <Component class="javax.swing.JTextField" name="distanceTextField"> - <Properties> - <Property name="text" type="java.lang.String" value="0.01"/> - <Property name="toolTipText" type="java.lang.String" value=""/> - </Properties> - </Component> - <Component class="javax.swing.JTextField" name="significantTextField"> - <Properties> - <Property name="text" type="java.lang.String" value="200"/> - <Property name="toolTipText" type="java.lang.String" value=""/> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="minCurvatio8"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Arial" size="14" style="1"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="Averaging"/> - <Property name="toolTipText" type="java.lang.String" value="Average planes with highest number of votes"/> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel1"> - </Component> - <Component class="javax.swing.JLabel" name="originalModelButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/originalModel.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="originalModelButtonMouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="originalModelButtonMouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="originalModelButtonMouseExited"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="showPlaneLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Arial" size="16" style="1"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/show2.png"/> - </Property> - <Property name="text" type="java.lang.String" value="Show plane"/> - <Property name="toolTipText" type="java.lang.String" value="Show approximate plane of symmetry"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="doubleBuffered" type="boolean" value="true"/> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="showPlaneLabelMouseClicked"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="defaultValues"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Arial" size="14" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" value="Default values"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="defaultValuesMouseClicked"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="infoPoints"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/info.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Info "/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoPointsMouseClicked"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="infoMinAngleCos"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/info.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Info "/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoMinAngleCosMouseClicked"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="infoRelDist"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/info.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Info "/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoRelDistMouseClicked"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="infoNormalAngle"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/info.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Info "/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoNormalAngleMouseClicked"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="infoMinCurv"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/info.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Info "/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoMinCurvMouseClicked"/> - </Events> - </Component> - </SubComponents> - </Container> - </SubComponents> -</Form> diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.java b/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.java deleted file mode 100644 index d5de605ee9e3991d0afc688037cffe8e1bb1a621..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.java +++ /dev/null @@ -1,727 +0,0 @@ -package cz.fidentis.analyst.gui; - -import static cz.fidentis.analyst.gui.UserInterface.frameMain; -import cz.fidentis.analyst.mesh.core.MeshFacet; -import cz.fidentis.analyst.mesh.core.MeshModel; -import cz.fidentis.analyst.symmetry.SymmetryConfig; -import cz.fidentis.analyst.symmetry.Plane; -import cz.fidentis.analyst.symmetry.SignificantPoints; -import cz.fidentis.analyst.symmetry.SymmetryEstimator; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.ImageIcon; -import javax.swing.JOptionPane; -import javax.swing.JSlider; -import javax.swing.JTextField; -import javax.swing.event.ChangeEvent; - -/** - * Panel for estimating approximate symmetry of the model - * - * @author Natalia Bebjakova - */ -public final class SymmetryPanel extends javax.swing.JPanel { - - /** - * Configuration with optional parameters of the algorithm - */ - private SymmetryConfig config; - - /** - * GL Canvas on which model is displayed - */ - private Canvas canvas; - - /** - * Computed approximate plane of the symmetry - */ - private Plane symmetryPlane; - - /** - * - * @return GL canvas for displaying the model - */ - public Canvas getCanvas() { - return canvas; - } - - /** - * Sets canvas for displaying the model - * - * @param canvas GL Canvas - */ - public void setCanvas(Canvas canvas) { - this.canvas = canvas; - } - - /** - * - * @return Configuration for computing symmetry - */ - public SymmetryConfig getConfig() { - return config; - } - - /** - * - * @param config Configuration for computing symmetry - */ - public void setConfig(SymmetryConfig config) { - this.config = config; - } - - - /** - * Sets configuration values according to text fields on panel - * User can change this text fields - */ - public void setConfigParams() { - config.setMaxRelDistance(Double.parseDouble(distanceTextField.getText())); - config.setMinAngleCos(Double.parseDouble(textFieldMinCos.getText())); - config.setMinCurvRatio(Double.parseDouble(textFieldCurvature.getText())); - config.setMinNormAngleCos(Double.parseDouble(normalTextField.getText())); - config.setSignificantPointCount(Integer.parseInt(significantTextField.getText())); - } - - /** - * Sets values in text field according to configuration - */ - public void setTextFieldsDueToConfig() { - distanceTextField.setText(Double.toString(config.getMaxRelDistance())); - textFieldMinCos.setText(Double.toString(config.getMinAngleCos())); - textFieldCurvature.setText(Double.toString(config.getMinCurvRatio())); - normalTextField.setText(Double.toString(config.getMinNormAngleCos())); - significantTextField.setText(Integer.toString(config.getSignificantPointCount())); - } - - /** - * - * @param slider Slider - * @param field text field which belongs to slider - */ - public void setSlider(JSlider slider, JTextField field) { - slider.setValue((int) (Double.parseDouble(field.getText()) * 100)); - - slider.addChangeListener((ChangeEvent ce) -> { - field.setText(""+slider.getValue()/100.0); - defaultValues.setVisible(true); - }); - - } - - /** - * Sets values of the sliders according to textFields - */ - public void setSliders() { - setSlider(relativeDistanceSlider, distanceTextField); - setSlider(curavatureSlider, textFieldCurvature); - setSlider(angleCosineSlider, textFieldMinCos); - setSlider(normalAngleSlider, normalTextField); - - significantPointSlider.setValue((int) (Double.parseDouble(significantTextField.getText()))); - significantPointSlider.addChangeListener((ChangeEvent ce) -> { - significantTextField.setText("" + significantPointSlider.getValue()); - }); - } - - /** - * If plane of symmtery is computed, three new buttons are shown on panel - * - * @param isComputed true if plane is computed and shown on model otherwise false - */ - public void showPlaneButtonsOnPanel(boolean isComputed) { - originalModelButton.setVisible(isComputed); - showPlaneLabel.setVisible(isComputed); - } - - /** - * Creates new form symmetryPanel - */ - public SymmetryPanel() { - initComponents(); - config = new SymmetryConfig(); - setSliders(); - - showPlaneButtonsOnPanel(false); - } - - /** - * Calculate approxy symmetry of the model - * Accuracy of the symmetry plane is influenced by configuration represented by config - * - * @throws InterruptedException exception can be thrown beacause of progress monitor - */ - private void computeSymmetryPlane() throws InterruptedException { - MeshModel model = new MeshModel(); - canvas.changeModel(canvas.getLoadedFace().getMeshModel()); - SymmetryEstimator est = new SymmetryEstimator(config, SignificantPoints.CurvatureAlg.GAUSSIAN); // MISTO TRUE MUSI BYT VYBER STRATEGIE VYPOCTU ZAKRIVENI!!! - canvas.getLoadedFace().getMeshModel().getFacets().get(0).accept(est); - symmetryPlane = est.getSymmetryPlane(); - MeshFacet facet = est.getSymmetryPlaneMesh(); - if (facet != null) { - model.addFacet(facet); - this.canvas.changeModel(model); - } - } - - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - * - * Code generated by NetBeans - */ - @SuppressWarnings("unchecked") - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - symetrySpecificationPanel = new javax.swing.JPanel(); - curavatureSlider = new javax.swing.JSlider(); - angleCosineSlider = new javax.swing.JSlider(); - minCurvatio = new javax.swing.JLabel(); - minCurvatio2 = new javax.swing.JLabel(); - normalAngleSlider = new javax.swing.JSlider(); - minCurvatio3 = new javax.swing.JLabel(); - significantPointSlider = new javax.swing.JSlider(); - minCurvatio4 = new javax.swing.JLabel(); - relativeDistanceSlider = new javax.swing.JSlider(); - significantPointLabel = new javax.swing.JLabel(); - symetryButton = new javax.swing.JLabel(); - averagingCheckBox = new javax.swing.JCheckBox(); - textFieldCurvature = new javax.swing.JTextField(); - textFieldMinCos = new javax.swing.JTextField(); - normalTextField = new javax.swing.JTextField(); - distanceTextField = new javax.swing.JTextField(); - significantTextField = new javax.swing.JTextField(); - minCurvatio8 = new javax.swing.JLabel(); - jLabel1 = new javax.swing.JLabel(); - originalModelButton = new javax.swing.JLabel(); - showPlaneLabel = new javax.swing.JLabel(); - defaultValues = new javax.swing.JLabel(); - infoPoints = new javax.swing.JLabel(); - infoMinAngleCos = new javax.swing.JLabel(); - infoRelDist = new javax.swing.JLabel(); - infoNormalAngle = new javax.swing.JLabel(); - infoMinCurv = new javax.swing.JLabel(); - - symetrySpecificationPanel.setBackground(new java.awt.Color(176, 230, 226)); - - curavatureSlider.setBackground(new java.awt.Color(250, 250, 250)); - curavatureSlider.setMajorTickSpacing(1); - curavatureSlider.setMinimum(50); - curavatureSlider.setSnapToTicks(true); - curavatureSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - curavatureSlider.setOpaque(false); - - angleCosineSlider.setMinimum(80); - angleCosineSlider.setSnapToTicks(true); - angleCosineSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - angleCosineSlider.setOpaque(false); - - minCurvatio.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N - minCurvatio.setForeground(new java.awt.Color(20, 114, 105)); - minCurvatio.setText("Min. Curvature Ratio"); - - minCurvatio2.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N - minCurvatio2.setForeground(new java.awt.Color(20, 114, 105)); - minCurvatio2.setText("Min. Angle Cosine"); - - normalAngleSlider.setMinimum(80); - normalAngleSlider.setSnapToTicks(true); - normalAngleSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - normalAngleSlider.setOpaque(false); - - minCurvatio3.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N - minCurvatio3.setForeground(new java.awt.Color(20, 114, 105)); - minCurvatio3.setText("Relative Distance"); - - significantPointSlider.setMajorTickSpacing(100); - significantPointSlider.setMaximum(300); - significantPointSlider.setSnapToTicks(true); - significantPointSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - significantPointSlider.setOpaque(false); - - minCurvatio4.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N - minCurvatio4.setForeground(new java.awt.Color(20, 114, 105)); - minCurvatio4.setText("Normal Angle Cosine"); - - relativeDistanceSlider.setMaximum(5); - relativeDistanceSlider.setSnapToTicks(true); - relativeDistanceSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - relativeDistanceSlider.setOpaque(false); - - significantPointLabel.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N - significantPointLabel.setForeground(new java.awt.Color(20, 114, 105)); - significantPointLabel.setText("Significant Points"); - - symetryButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryCount.png"))); // NOI18N - symetryButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - symetryButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - symetryButtonMouseMoved(evt); - } - }); - symetryButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - symetryButtonMouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - symetryButtonMouseExited(evt); - } - }); - - averagingCheckBox.setSelected(true); - averagingCheckBox.setOpaque(false); - averagingCheckBox.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - averagingCheckBoxMouseClicked(evt); - } - }); - - textFieldCurvature.setText("0.5"); - textFieldCurvature.setToolTipText(""); - - textFieldMinCos.setText("0.985"); - textFieldMinCos.setToolTipText(""); - - normalTextField.setText("0.985"); - normalTextField.setToolTipText(""); - - distanceTextField.setText("0.01"); - distanceTextField.setToolTipText(""); - - significantTextField.setText("200"); - significantTextField.setToolTipText(""); - - minCurvatio8.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N - minCurvatio8.setForeground(new java.awt.Color(20, 114, 105)); - minCurvatio8.setText("Averaging"); - minCurvatio8.setToolTipText("Average planes with highest number of votes"); - - originalModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/originalModel.png"))); // NOI18N - originalModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - originalModelButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - originalModelButtonMouseMoved(evt); - } - }); - originalModelButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - originalModelButtonMouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - originalModelButtonMouseExited(evt); - } - }); - - showPlaneLabel.setFont(new java.awt.Font("Arial", 1, 16)); // NOI18N - showPlaneLabel.setForeground(new java.awt.Color(20, 114, 105)); - showPlaneLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/show2.png"))); // NOI18N - showPlaneLabel.setText("Show plane"); - showPlaneLabel.setToolTipText("Show approximate plane of symmetry"); - showPlaneLabel.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - showPlaneLabel.setDoubleBuffered(true); - showPlaneLabel.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - showPlaneLabelMouseClicked(evt); - } - }); - - defaultValues.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N - defaultValues.setForeground(new java.awt.Color(20, 114, 105)); - defaultValues.setText("Default values"); - defaultValues.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - defaultValues.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - defaultValuesMouseClicked(evt); - } - }); - - infoPoints.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N - infoPoints.setToolTipText("Info "); - infoPoints.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - infoPoints.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - infoPointsMouseClicked(evt); - } - }); - - infoMinAngleCos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N - infoMinAngleCos.setToolTipText("Info "); - infoMinAngleCos.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - infoMinAngleCos.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - infoMinAngleCosMouseClicked(evt); - } - }); - - infoRelDist.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N - infoRelDist.setToolTipText("Info "); - infoRelDist.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - infoRelDist.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - infoRelDistMouseClicked(evt); - } - }); - - infoNormalAngle.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N - infoNormalAngle.setToolTipText("Info "); - infoNormalAngle.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - infoNormalAngle.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - infoNormalAngleMouseClicked(evt); - } - }); - - infoMinCurv.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N - infoMinCurv.setToolTipText("Info "); - infoMinCurv.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - infoMinCurv.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - infoMinCurvMouseClicked(evt); - } - }); - - javax.swing.GroupLayout symetrySpecificationPanelLayout = new javax.swing.GroupLayout(symetrySpecificationPanel); - symetrySpecificationPanel.setLayout(symetrySpecificationPanelLayout); - symetrySpecificationPanelLayout.setHorizontalGroup( - symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(defaultValues)) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGap(17, 17, 17) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGap(154, 154, 154) - .addComponent(jLabel1)) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addComponent(showPlaneLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(originalModelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 181, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGap(10, 10, 10) - .addComponent(minCurvatio8) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(averagingCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(symetryButton)) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(infoMinAngleCos) - .addComponent(infoRelDist) - .addComponent(infoNormalAngle) - .addComponent(infoPoints) - .addComponent(infoMinCurv)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(minCurvatio4, javax.swing.GroupLayout.DEFAULT_SIZE, 157, Short.MAX_VALUE) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(minCurvatio) - .addComponent(minCurvatio3) - .addComponent(minCurvatio2) - .addComponent(significantPointLabel)) - .addGap(0, 0, Short.MAX_VALUE))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(curavatureSlider, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) - .addComponent(relativeDistanceSlider, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) - .addComponent(significantPointSlider, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(angleCosineSlider, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(normalAngleSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(distanceTextField) - .addComponent(normalTextField) - .addComponent(significantTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(textFieldCurvature, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(textFieldMinCos, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)))))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - symetrySpecificationPanelLayout.setVerticalGroup( - symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(infoPoints) - .addComponent(significantPointLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(significantTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(significantPointSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(minCurvatio, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addComponent(textFieldCurvature, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(4, 4, 4)) - .addComponent(infoMinCurv) - .addComponent(curavatureSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(infoMinAngleCos, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(minCurvatio2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(textFieldMinCos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(angleCosineSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(normalAngleSlider, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(normalTextField)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(distanceTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(minCurvatio4, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(infoNormalAngle)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(infoRelDist, javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(relativeDistanceSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(minCurvatio3, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addGap(13, 13, 13))) - .addComponent(defaultValues) - .addGap(17, 17, 17) - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addComponent(symetryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(originalModelButton) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGroup(symetrySpecificationPanelLayout.createSequentialGroup() - .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(averagingCheckBox) - .addComponent(minCurvatio8, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 53, Short.MAX_VALUE) - .addComponent(jLabel1) - .addGap(45, 45, 45) - .addComponent(showPlaneLabel) - .addContainerGap(27, Short.MAX_VALUE)))) - ); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(symetrySpecificationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(symetrySpecificationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - ); - }// </editor-fold>//GEN-END:initComponents - - /** - * - * @param evt Final computed plane is shown to user - */ - private void showPlaneLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_showPlaneLabelMouseClicked - JOptionPane.showMessageDialog(frameMain, "Approximate plane of symmetry: \n" + symmetryPlane.getNormal().x + "\n" + symmetryPlane.getNormal().y + "\n" + symmetryPlane.getNormal().z + "\n" + - symmetryPlane.getDistance() + "\n", "Final plane.", 0, new ImageIcon(getClass().getResource("/showPlanePane.png"))); - }//GEN-LAST:event_showPlaneLabelMouseClicked - - /** - * - * @param evt Changes button - */ - private void originalModelButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_originalModelButtonMouseExited - originalModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/originalModel.png"))); - }//GEN-LAST:event_originalModelButtonMouseExited - - /** - * - * @param evt Original model (without plane) is displayed - */ - private void originalModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_originalModelButtonMouseClicked - canvas.changeModel(canvas.getLoadedFace().getMeshModel()); - showPlaneButtonsOnPanel(false); - }//GEN-LAST:event_originalModelButtonMouseClicked - - /** - * - * @param evt Changes button - */ - private void originalModelButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_originalModelButtonMouseMoved - originalModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/originalModelPressed.png"))); - }//GEN-LAST:event_originalModelButtonMouseMoved - - /** - * - * @param evt Decides if averaging is ON or OFF - */ - private void averagingCheckBoxMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_averagingCheckBoxMouseClicked - if(config.isAveraging()) { - config.setAveraging(false); - } else { - config.setAveraging(true); - } - }//GEN-LAST:event_averagingCheckBoxMouseClicked - - /** - * - * @param evt Changes button - */ - private void symetryButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_symetryButtonMouseExited - symetryButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryCount.png"))); - }//GEN-LAST:event_symetryButtonMouseExited - - /** - * - * @param evt Symmetry is estimated. If model is not loaded, user is warned - */ - private void symetryButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_symetryButtonMouseClicked - setConfigParams(); - if (canvas.getModel().getFacets().isEmpty()){ - JOptionPane.showMessageDialog(frameMain, "You have to load the model.", "Model not loaded", - 0, new ImageIcon(getClass().getResource("/notLoadedModel.png"))); - } else { - try { - computeSymmetryPlane(); - } catch (InterruptedException ex) { - Logger.getLogger(SymmetryPanel.class.getName()).log(Level.SEVERE, null, ex); - } - showPlaneButtonsOnPanel(true); - } - }//GEN-LAST:event_symetryButtonMouseClicked - - /** - * - * @param evt Changes button - */ - private void symetryButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_symetryButtonMouseMoved - symetryButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryCountClicked.png"))); - }//GEN-LAST:event_symetryButtonMouseMoved - - /** - * - * @param evt configuration is set to deafult values - */ - private void defaultValuesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_defaultValuesMouseClicked - config = new SymmetryConfig(); - setTextFieldsDueToConfig(); - setSliders(); - }//GEN-LAST:event_defaultValuesMouseClicked - - /** - * Shows details about minimum curv ratio parameter - * - * @param evt - */ - private void infoMinCurvMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoMinCurvMouseClicked - JOptionPane.showMessageDialog(frameMain, - "Entered number represents how similar the curvature in two vertices must be\n" - + "to take into account these vertices while counting the plane of approximate symmetry.\n" - + "The higher the number is the more similar they must be.\n\n" - - + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.\n" - + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.", - "Minimum curvature ratio", - 0, new ImageIcon(getClass().getResource("/curvature.png"))); - }//GEN-LAST:event_infoMinCurvMouseClicked - - /** - * Shows details about maximum relative distance parameter - * - * @param evt - */ - private void infoRelDistMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoRelDistMouseClicked - JOptionPane.showMessageDialog(frameMain, - "Entered number represents how far middle point of two vertices can be from candidate plane of symmetry\n" - + "to give this plane vote. Plane with highest number of votes is plane of approximate symmetry.\n\n" - - + "Higher number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.\n" - + "Lower number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.", - "Maximum relative distance from plane", - 0, new ImageIcon(getClass().getResource("/distance.png"))); - }//GEN-LAST:event_infoRelDistMouseClicked - - /** - * Shows details about significant points parameter - * - * @param evt - */ - private void infoPointsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoPointsMouseClicked - JOptionPane.showMessageDialog(frameMain, - "Entered number represents amount of points of the mesh that are taken into account\n" - + "while counting the plane of approximate symmetry.\n\n" - - + "Higher number → longer calculation, possibly more accurate result.\n" - + "Lower number → shorter calculation, possibly less accurate result.", - "Significant points", - 0, new ImageIcon(getClass().getResource("/points.png"))); - }//GEN-LAST:event_infoPointsMouseClicked - - /** - * Shows details about minimum angle cosine parameter - * - * @param evt - */ - private void infoMinAngleCosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoMinAngleCosMouseClicked - JOptionPane.showMessageDialog(frameMain, - "Entered number represents how large the angle between normal vector of candidate plane and the vector\n" - + "of two vertices can be to take into account these vertices while counting the approximate symmetry.\n\n" - - + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.\n" - + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.", - "Minimum angle", - 0, new ImageIcon(getClass().getResource("/angle.png"))); - }//GEN-LAST:event_infoMinAngleCosMouseClicked - - /** - * Shows details about minimum normal angle cosine parameter - * - * @param evt - */ - private void infoNormalAngleMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoNormalAngleMouseClicked - JOptionPane.showMessageDialog(frameMain, - "Entered number represents how large the angle between normal vector of candidate plane and vector\n" - + "from subtraction of normal vectors of two vertices can be to take into account these vertices while counting the approximate symmetry.\n\n" - - + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.\n" - + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.", - "Minimum normal angle", - 0, new ImageIcon(getClass().getResource("/angle.png"))); - }//GEN-LAST:event_infoNormalAngleMouseClicked - - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JSlider angleCosineSlider; - private javax.swing.JCheckBox averagingCheckBox; - private javax.swing.JSlider curavatureSlider; - private javax.swing.JLabel defaultValues; - private javax.swing.JTextField distanceTextField; - private javax.swing.JLabel infoMinAngleCos; - private javax.swing.JLabel infoMinCurv; - private javax.swing.JLabel infoNormalAngle; - private javax.swing.JLabel infoPoints; - private javax.swing.JLabel infoRelDist; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel minCurvatio; - private javax.swing.JLabel minCurvatio2; - private javax.swing.JLabel minCurvatio3; - private javax.swing.JLabel minCurvatio4; - private javax.swing.JLabel minCurvatio8; - private javax.swing.JSlider normalAngleSlider; - private javax.swing.JTextField normalTextField; - private javax.swing.JLabel originalModelButton; - private javax.swing.JSlider relativeDistanceSlider; - private javax.swing.JLabel showPlaneLabel; - private javax.swing.JLabel significantPointLabel; - private javax.swing.JSlider significantPointSlider; - private javax.swing.JTextField significantTextField; - private javax.swing.JLabel symetryButton; - private javax.swing.JPanel symetrySpecificationPanel; - private javax.swing.JTextField textFieldCurvature; - private javax.swing.JTextField textFieldMinCos; - // End of variables declaration//GEN-END:variables -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.form b/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.form deleted file mode 100644 index 32e21d509eecc227098c5c444f58235a3bf4cc9a..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.form +++ /dev/null @@ -1,956 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JFrameFormInfo"> - <Properties> - <Property name="defaultCloseOperation" type="int" value="3"/> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Default Cursor"/> - </Property> - <Property name="locationByPlatform" type="boolean" value="true"/> - </Properties> - <SyntheticProperties> - <SyntheticProperty name="formSizePolicy" type="int" value="1"/> - <SyntheticProperty name="generateCenter" type="boolean" value="true"/> - </SyntheticProperties> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="topPanel" max="32767" attributes="0"/> - <Component id="jPanel1" alignment="1" max="32767" attributes="0"/> - <Group type="103" rootIndex="1" groupAlignment="0" attributes="0"> - <Component id="jPanel2" alignment="0" 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="jPanel1" min="-2" pref="52" max="-2" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Component id="topPanel" min="-2" pref="239" max="-2" attributes="0"/> - <EmptySpace min="0" pref="565" max="32767" attributes="0"/> - </Group> - <Group type="103" rootIndex="1" groupAlignment="0" attributes="0"> - <Component id="jPanel2" alignment="1" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Container class="javax.swing.JPanel" name="jPanel1"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[1200, 77]"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseDragged" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="jPanel1MouseDragged"/> - <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jPanel1MousePressed"/> - </Events> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="homeButton" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="newProject" min="-2" pref="149" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="wiredModelButton" min="-2" pref="134" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="wiredModelButton" alignment="0" max="32767" attributes="0"/> - <Component id="newProject" max="32767" attributes="0"/> - <Component id="homeButton" alignment="0" pref="52" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="newProject"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Neue Haas Unica Pro" size="18" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="ff" green="ff" red="ff" type="rgb"/> - </Property> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/newP.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="opaque" type="boolean" value="true"/> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="newProjectMouseMoved"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="newProjectMouseExited"/> - <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="newProjectMousePressed"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="wiredModelButton"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/wireframe2.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="opaque" type="boolean" value="true"/> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="wiredModelButtonMouseClicked"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="homeButton"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/home.png"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value="Home"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="opaque" type="boolean" value="true"/> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="homeButtonMouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="homeButtonMouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="homeButtonMouseExited"/> - </Events> - </Component> - </SubComponents> - </Container> - <Container class="javax.swing.JPanel" name="topPanel"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[1200, 266]"/> - </Property> - </Properties> - <AccessibilityProperties> - <Property name="AccessibleContext.accessibleName" type="java.lang.String" value=""/> - </AccessibilityProperties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace pref="99" max="32767" attributes="0"/> - <Component id="compareTwo" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="105" max="-2" attributes="0"/> - <Component id="compareDB" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="94" max="-2" attributes="0"/> - <Component id="batchProcessing" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="94" max="-2" attributes="0"/> - <Component id="symetryEstimator" min="-2" max="-2" attributes="0"/> - <EmptySpace pref="98" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace min="-2" pref="52" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="symetryEstimator" alignment="1" max="32767" attributes="0"/> - <Component id="compareDB" alignment="1" max="32767" attributes="0"/> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> - <Component id="compareTwo" min="-2" max="-2" attributes="0"/> - </Group> - <Component id="batchProcessing" alignment="1" max="32767" attributes="0"/> - </Group> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Container class="javax.swing.JPanel" name="compareTwo"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel1" max="32767" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace min="-2" pref="30" max="-2" attributes="0"/> - <Component id="jLabel1" max="32767" attributes="0"/> - <EmptySpace min="-2" pref="28" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="jLabel1"> - <Properties> - <Property name="horizontalAlignment" type="int" value="0"/> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/compareTwoStart.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Default Cursor"/> - </Property> - </Properties> - </Component> - </SubComponents> - </Container> - <Container class="javax.swing.JPanel" name="compareDB"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jLabel3" alignment="1" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jLabel3" alignment="1" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="jLabel3"> - <Properties> - <Property name="horizontalAlignment" type="int" value="0"/> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/batchProcessingStart.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Default Cursor"/> - </Property> - </Properties> - </Component> - </SubComponents> - </Container> - <Container class="javax.swing.JPanel" name="batchProcessing"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace min="-2" pref="26" max="-2" attributes="0"/> - <Component id="jLabel2" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel2" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="jLabel2"> - <Properties> - <Property name="horizontalAlignment" type="int" value="0"/> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/copareWithDatabaseStart.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Default Cursor"/> - </Property> - </Properties> - </Component> - </SubComponents> - </Container> - <Container class="javax.swing.JPanel" name="symetryEstimator"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="69" green="72" red="14" type="rgb"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="symetryEstimatorMouseClicked"/> - </Events> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel4" max="32767" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace max="32767" attributes="0"/> - <Component id="jLabel4" min="-2" pref="137" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="36" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="jLabel4"> - <Properties> - <Property name="horizontalAlignment" type="int" value="0"/> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/symetryStartP.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="jLabel4MouseMoved1"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jLabel4MouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jLabel4MouseExited"/> - </Events> - </Component> - </SubComponents> - </Container> - </SubComponents> - </Container> - <Container class="javax.swing.JPanel" name="jPanel2"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Arial" size="13" style="1"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> - <Connection component="Form" name="preferredSize" type="property"/> - </Property> - </Properties> - - <Layout class="org.netbeans.modules.form.compat2.layouts.DesignCardLayout"/> - <SubComponents> - <Container class="javax.swing.JPanel" name="startingPanel"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value=""/> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[0, 0]"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[1200, 800]"/> - </Property> - <Property name="requestFocusEnabled" type="boolean" value="false"/> - </Properties> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignCardLayout" value="org.netbeans.modules.form.compat2.layouts.DesignCardLayout$CardConstraintsDescription"> - <CardConstraints cardName="card3"/> - </Constraint> - </Constraints> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace pref="81" max="32767" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jPanel3" min="-2" max="-2" attributes="0"/> - <Group type="102" alignment="1" attributes="0"> - <Component id="logo" min="-2" pref="218" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="400" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace pref="81" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace pref="133" max="32767" attributes="0"/> - <Component id="logo" min="-2" pref="124" max="-2" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Component id="jPanel3" min="-2" max="-2" attributes="0"/> - <EmptySpace pref="136" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="logo"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/logo3.png"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/> - <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/> - </AuxValues> - </Component> - <Container class="javax.swing.JPanel" name="jPanel3"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value=""/> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace pref="17" max="32767" attributes="0"/> - <Component id="viewerButton" min="-2" pref="323" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="compareTwoMain" alignment="1" min="-2" max="-2" attributes="0"/> - <Component id="compareTwoMain1" alignment="1" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace min="-2" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Component id="JLabel8" max="32767" attributes="0"/> - <EmptySpace min="-2" pref="62" max="-2" attributes="0"/> - </Group> - <Group type="102" attributes="0"> - <Component id="JLabel9" min="-2" pref="196" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - </Group> - </Group> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="batchMain" min="-2" max="-2" attributes="0"/> - <Group type="102" attributes="0"> - <EmptySpace min="12" pref="12" max="-2" attributes="0"/> - <Component id="symetryMain" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace pref="42" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Group type="103" alignment="1" groupAlignment="0" attributes="0"> - <Component id="JLabel8" min="-2" pref="142" max="-2" attributes="0"/> - <Component id="compareTwoMain" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="1" attributes="0"> - <Component id="batchMain" min="-2" pref="173" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="28" max="-2" attributes="0"/> - </Group> - </Group> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="compareTwoMain1" alignment="1" min="-2" max="-2" attributes="0"/> - <Component id="symetryMain" alignment="1" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="296" max="-2" attributes="0"/> - <Component id="JLabel9" max="32767" attributes="0"/> - <EmptySpace min="-2" pref="8" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> - <Component id="viewerButton" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="41" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Container class="javax.swing.JPanel" name="compareTwoMain"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="177" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="170" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - </Container> - <Container class="javax.swing.JPanel" name="compareTwoMain1"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="220" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="169" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - </Container> - <Container class="javax.swing.JPanel" name="batchMain"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="JLabel10" min="-2" 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="25" max="-2" attributes="0"/> - <Component id="JLabel10" min="-2" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="JLabel10"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/batchProcessingStart.png"/> - </Property> - </Properties> - </Component> - </SubComponents> - </Container> - <Container class="javax.swing.JPanel" name="symetryMain"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="JLabel11" alignment="1" pref="189" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace min="-2" max="-2" attributes="0"/> - <Component id="JLabel11" pref="167" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="JLabel11"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/symetryStart.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="JLabel11MouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="JLabel11MouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="JLabel11MouseExited"/> - </Events> - </Component> - </SubComponents> - </Container> - <Component class="javax.swing.JLabel" name="viewerButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/modelView.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="viewerButtonMouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="viewerButtonMouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="viewerButtonMouseExited"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="JLabel8"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/compareTwoStart.png"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="JLabel9"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/copareWithDatabaseStart.png"/> - </Property> - </Properties> - </Component> - </SubComponents> - </Container> - </SubComponents> - </Container> - <Container class="javax.swing.JPanel" name="symetryPanel"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[1200, 800]"/> - </Property> - </Properties> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignCardLayout" value="org.netbeans.modules.form.compat2.layouts.DesignCardLayout$CardConstraintsDescription"> - <CardConstraints cardName="card3"/> - </Constraint> - </Constraints> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace pref="78" max="32767" attributes="0"/> - <Component id="viewerPanel" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="72" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="exportModelButton" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="reloadModelButton" min="-2" max="-2" attributes="0"/> - <Component id="symmetryPanel1" alignment="0" min="-2" pref="461" max="-2" attributes="0"/> - </Group> - <EmptySpace max="32767" attributes="0"/> - </Group> - <Component id="filler1" alignment="1" max="32767" attributes="0"/> - <Component id="filler2" alignment="0" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <Component id="filler2" min="-2" pref="58" max="-2" attributes="0"/> - <EmptySpace pref="46" max="32767" attributes="0"/> - <Group type="103" groupAlignment="0" max="-2" attributes="0"> - <Group type="102" attributes="0"> - <Component id="symmetryPanel1" min="-2" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - <Component id="exportModelButton" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="reloadModelButton" min="-2" max="-2" attributes="0"/> - </Group> - <Component id="viewerPanel" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Component id="filler1" min="-2" pref="51" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="93" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Container class="javax.swing.JPanel" name="viewerPanel"> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="canvasSymmetryPanel" pref="553" max="32767" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="canvasSymmetryPanel" pref="588" max="32767" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="cz.fidentis.analyst.gui.Canvas" name="canvasSymmetryPanel"> - </Component> - </SubComponents> - </Container> - <Component class="javax.swing.JLabel" name="reloadModelButton"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/loadModel.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="opaque" type="boolean" value="true"/> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButtonMouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButtonMouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButtonMouseExited"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="exportModelButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/exportModel.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="exportModelButtonMouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="exportModelButtonMouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="exportModelButtonMouseExited"/> - </Events> - </Component> - <Component class="cz.fidentis.analyst.gui.SymmetryPanel" name="symmetryPanel1"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="e2" green="e6" red="b0" type="rgb"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.Box$Filler" name="filler1"> - <Properties> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[0, 32767]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/> - </AuxValues> - </Component> - <Component class="javax.swing.Box$Filler" name="filler2"> - <Properties> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[0, 32767]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/> - </AuxValues> - </Component> - </SubComponents> - </Container> - <Container class="javax.swing.JPanel" name="modelViewPanel"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="toolTipText" type="java.lang.String" value=""/> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[1200, 800]"/> - </Property> - </Properties> - <AccessibilityProperties> - <Property name="AccessibleContext.accessibleName" type="java.lang.String" value=""/> - </AccessibilityProperties> - <Constraints> - <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignCardLayout" value="org.netbeans.modules.form.compat2.layouts.DesignCardLayout$CardConstraintsDescription"> - <CardConstraints cardName="card4"/> - </Constraint> - </Constraints> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="filler3" alignment="1" max="32767" attributes="0"/> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace pref="87" max="32767" attributes="0"/> - <Component id="jPanel4" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="reloadModelButton1" min="-2" max="-2" attributes="0"/> - <EmptySpace pref="95" max="32767" attributes="0"/> - </Group> - <Component id="filler4" alignment="0" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Component id="filler3" min="-2" pref="73" max="-2" attributes="0"/> - <EmptySpace pref="87" max="32767" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Component id="jPanel4" min="-2" pref="579" max="-2" attributes="0"/> - <Component id="reloadModelButton1" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Component id="filler4" min="-2" pref="31" max="-2" attributes="0"/> - <EmptySpace pref="92" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="reloadModelButton1"> - <Properties> - <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="a3" green="ae" red="0" type="rgb"/> - </Property> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/loadModel.png"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="opaque" type="boolean" value="true"/> - </Properties> - <Events> - <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButton1MouseMoved"/> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButton1MouseClicked"/> - <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButton1MouseExited"/> - </Events> - </Component> - <Container class="javax.swing.JPanel" name="jPanel4"> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="canvasModelView" min="-2" pref="795" 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="1" attributes="0"> - <EmptySpace max="32767" attributes="0"/> - <Component id="canvasModelView" min="-2" pref="553" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="98" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="cz.fidentis.analyst.gui.Canvas" name="canvasModelView"> - </Component> - </SubComponents> - </Container> - <Component class="javax.swing.Box$Filler" name="filler3"> - <Properties> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[0, 32767]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/> - </AuxValues> - </Component> - <Component class="javax.swing.Box$Filler" name="filler4"> - <Properties> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[0, 32767]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/> - </AuxValues> - </Component> - </SubComponents> - </Container> - </SubComponents> - </Container> - </SubComponents> -</Form> diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.java b/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.java deleted file mode 100644 index ee3b9d80afdc1ec3f64c0493f9578c15969397cb..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.java +++ /dev/null @@ -1,1109 +0,0 @@ -package cz.fidentis.analyst.gui; - -import cz.fidentis.analyst.mesh.io.MeshObjExporter; -import java.awt.Color; -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.ImageIcon; -import javax.swing.JFileChooser; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; - -/** - * - * @author Natália Bebjaková - * - * Main window of the applicaion - */ - -public class UserInterface extends javax.swing.JFrame { - /** - * Flag for backround color of the new project button - */ - boolean pressedNewProject = false; - /** - * Flag for whether model should be displayed as wire-frame - */ - boolean wiredModelClicked = false; - /** - * Panel that is actualy displayed on the window - */ - private JPanel actualPanel; - /** - * Main frame of the application - */ - public static JFrame frameMain; - /** - * x coordinate of the mouse - */ - int xMouse; - /** - * y coordinate of the mouse - */ - int yMouse; - - /** - * Creates new form Interface - */ - public UserInterface() { - initComponents(); - topPanel.setVisible(false); - actualPanel = startingPanel; - symmetryPanel1.setCanvas(canvasSymmetryPanel); - this.setExtendedState(JFrame.MAXIMIZED_BOTH); - } - - /** - * - * @return JPanel for estimating symmetry of the model - */ - public SymmetryPanel getSymmetryPanel1() { - return symmetryPanel1; - } - - /** - * Enables to switch between panels - * @param panel New panel that will be visible - */ - private void switchPanelOnMainPanel(JPanel panel) { - actualPanel = panel; - jPanel2.removeAll(); - jPanel2.repaint(); - jPanel2.revalidate(); - jPanel2.add(panel); - jPanel2.repaint(); - jPanel2.revalidate(); - panel.add(jPanel1); - jPanel1.setVisible(true); - } - - /** - * Changes backround of labels to darker green color - * @param jl label of which backround changes - */ - public void setLabelBackround(JLabel jl) { - jl.setBackground(new Color(11,56,49)); - } - - /** - * Changes backround of the label back to original - * @param jl label of which backround is return to original - */ - public void resetLabelBackround(JLabel jl) { - jl.setBackground(new Color(20,114,105)); - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - * - * Code generated by NetBeans - */ - @SuppressWarnings("unchecked") - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - jPanel1 = new javax.swing.JPanel(); - newProject = new javax.swing.JLabel(); - wiredModelButton = new javax.swing.JLabel(); - homeButton = new javax.swing.JLabel(); - topPanel = new javax.swing.JPanel(); - compareTwo = new javax.swing.JPanel(); - jLabel1 = new javax.swing.JLabel(); - compareDB = new javax.swing.JPanel(); - jLabel3 = new javax.swing.JLabel(); - batchProcessing = new javax.swing.JPanel(); - jLabel2 = new javax.swing.JLabel(); - symetryEstimator = new javax.swing.JPanel(); - jLabel4 = new javax.swing.JLabel(); - jPanel2 = new javax.swing.JPanel(); - startingPanel = new javax.swing.JPanel(); - javax.swing.JLabel logo = new javax.swing.JLabel(); - jPanel3 = new javax.swing.JPanel(); - compareTwoMain = new javax.swing.JPanel(); - compareTwoMain1 = new javax.swing.JPanel(); - batchMain = new javax.swing.JPanel(); - JLabel10 = new javax.swing.JLabel(); - symetryMain = new javax.swing.JPanel(); - JLabel11 = new javax.swing.JLabel(); - viewerButton = new javax.swing.JLabel(); - JLabel8 = new javax.swing.JLabel(); - JLabel9 = new javax.swing.JLabel(); - symetryPanel = new javax.swing.JPanel(); - viewerPanel = new javax.swing.JPanel(); - canvasSymmetryPanel = new cz.fidentis.analyst.gui.Canvas(); - reloadModelButton = new javax.swing.JLabel(); - exportModelButton = new javax.swing.JLabel(); - symmetryPanel1 = new cz.fidentis.analyst.gui.SymmetryPanel(); - filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); - filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); - modelViewPanel = new javax.swing.JPanel(); - reloadModelButton1 = new javax.swing.JLabel(); - jPanel4 = new javax.swing.JPanel(); - canvasModelView = new cz.fidentis.analyst.gui.Canvas(); - filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); - filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767)); - - setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); - setBackground(new java.awt.Color(0, 174, 163)); - setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - setLocationByPlatform(true); - - jPanel1.setBackground(new java.awt.Color(20, 114, 105)); - jPanel1.setPreferredSize(new java.awt.Dimension(1200, 77)); - jPanel1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseDragged(java.awt.event.MouseEvent evt) { - jPanel1MouseDragged(evt); - } - }); - jPanel1.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - jPanel1MousePressed(evt); - } - }); - - newProject.setBackground(new java.awt.Color(20, 114, 105)); - newProject.setFont(new java.awt.Font("Neue Haas Unica Pro", 0, 18)); // NOI18N - newProject.setForeground(new java.awt.Color(255, 255, 255)); - newProject.setIcon(new javax.swing.ImageIcon(getClass().getResource("/newP.png"))); // NOI18N - newProject.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - newProject.setOpaque(true); - newProject.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - newProjectMouseMoved(evt); - } - }); - newProject.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseExited(java.awt.event.MouseEvent evt) { - newProjectMouseExited(evt); - } - public void mousePressed(java.awt.event.MouseEvent evt) { - newProjectMousePressed(evt); - } - }); - - wiredModelButton.setBackground(new java.awt.Color(20, 114, 105)); - wiredModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/wireframe2.png"))); // NOI18N - wiredModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - wiredModelButton.setOpaque(true); - wiredModelButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - wiredModelButtonMouseClicked(evt); - } - }); - - homeButton.setBackground(new java.awt.Color(20, 114, 105)); - homeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/home.png"))); // NOI18N - homeButton.setToolTipText("Home"); - homeButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - homeButton.setOpaque(true); - homeButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - homeButtonMouseMoved(evt); - } - }); - homeButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - homeButtonMouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - homeButtonMouseExited(evt); - } - }); - - javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); - jPanel1.setLayout(jPanel1Layout); - jPanel1Layout.setHorizontalGroup( - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addComponent(homeButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(newProject, javax.swing.GroupLayout.PREFERRED_SIZE, 149, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(wiredModelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - jPanel1Layout.setVerticalGroup( - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(wiredModelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(newProject, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(homeButton, javax.swing.GroupLayout.DEFAULT_SIZE, 52, Short.MAX_VALUE) - ); - - topPanel.setBackground(new java.awt.Color(20, 114, 105)); - topPanel.setPreferredSize(new java.awt.Dimension(1200, 266)); - - compareTwo.setBackground(new java.awt.Color(20, 114, 105)); - compareTwo.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - - jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/compareTwoStart.png"))); // NOI18N - jLabel1.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - - javax.swing.GroupLayout compareTwoLayout = new javax.swing.GroupLayout(compareTwo); - compareTwo.setLayout(compareTwoLayout); - compareTwoLayout.setHorizontalGroup( - compareTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(compareTwoLayout.createSequentialGroup() - .addContainerGap() - .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) - ); - compareTwoLayout.setVerticalGroup( - compareTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(compareTwoLayout.createSequentialGroup() - .addGap(30, 30, 30) - .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(28, 28, 28)) - ); - - compareDB.setBackground(new java.awt.Color(20, 114, 105)); - compareDB.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - - jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/batchProcessingStart.png"))); // NOI18N - jLabel3.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - - javax.swing.GroupLayout compareDBLayout = new javax.swing.GroupLayout(compareDB); - compareDB.setLayout(compareDBLayout); - compareDBLayout.setHorizontalGroup( - compareDBLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - ); - compareDBLayout.setVerticalGroup( - compareDBLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - ); - - batchProcessing.setBackground(new java.awt.Color(20, 114, 105)); - batchProcessing.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - - jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/copareWithDatabaseStart.png"))); // NOI18N - jLabel2.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - - javax.swing.GroupLayout batchProcessingLayout = new javax.swing.GroupLayout(batchProcessing); - batchProcessing.setLayout(batchProcessingLayout); - batchProcessingLayout.setHorizontalGroup( - batchProcessingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(batchProcessingLayout.createSequentialGroup() - .addGap(26, 26, 26) - .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - batchProcessingLayout.setVerticalGroup( - batchProcessingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, batchProcessingLayout.createSequentialGroup() - .addContainerGap() - .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - symetryEstimator.setBackground(new java.awt.Color(20, 114, 105)); - symetryEstimator.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - symetryEstimator.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - symetryEstimatorMouseClicked(evt); - } - }); - - jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStartP.png"))); // NOI18N - jLabel4.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - jLabel4.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - jLabel4MouseMoved1(evt); - } - }); - jLabel4.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - jLabel4MouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - jLabel4MouseExited(evt); - } - }); - - javax.swing.GroupLayout symetryEstimatorLayout = new javax.swing.GroupLayout(symetryEstimator); - symetryEstimator.setLayout(symetryEstimatorLayout); - symetryEstimatorLayout.setHorizontalGroup( - symetryEstimatorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, symetryEstimatorLayout.createSequentialGroup() - .addContainerGap() - .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) - ); - symetryEstimatorLayout.setVerticalGroup( - symetryEstimatorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, symetryEstimatorLayout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(36, 36, 36)) - ); - - javax.swing.GroupLayout topPanelLayout = new javax.swing.GroupLayout(topPanel); - topPanel.setLayout(topPanelLayout); - topPanelLayout.setHorizontalGroup( - topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(topPanelLayout.createSequentialGroup() - .addContainerGap(99, Short.MAX_VALUE) - .addComponent(compareTwo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(105, 105, 105) - .addComponent(compareDB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(94, 94, 94) - .addComponent(batchProcessing, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(94, 94, 94) - .addComponent(symetryEstimator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(98, Short.MAX_VALUE)) - ); - topPanelLayout.setVerticalGroup( - topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(topPanelLayout.createSequentialGroup() - .addGap(52, 52, 52) - .addGroup(topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(symetryEstimator, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(compareDB, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, topPanelLayout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(compareTwo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(batchProcessing, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - ); - - jPanel2.setBackground(new java.awt.Color(0, 174, 163)); - jPanel2.setFont(new java.awt.Font("Arial", 1, 13)); // NOI18N - jPanel2.setPreferredSize(getPreferredSize()); - jPanel2.setLayout(new java.awt.CardLayout()); - - startingPanel.setBackground(new java.awt.Color(0, 174, 163)); - startingPanel.setToolTipText(""); - startingPanel.setMaximumSize(new java.awt.Dimension(0, 0)); - startingPanel.setPreferredSize(new java.awt.Dimension(1200, 800)); - startingPanel.setRequestFocusEnabled(false); - - logo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/logo3.png"))); // NOI18N - - jPanel3.setBackground(new java.awt.Color(0, 174, 163)); - jPanel3.setToolTipText(""); - - compareTwoMain.setBackground(new java.awt.Color(0, 174, 163)); - - javax.swing.GroupLayout compareTwoMainLayout = new javax.swing.GroupLayout(compareTwoMain); - compareTwoMain.setLayout(compareTwoMainLayout); - compareTwoMainLayout.setHorizontalGroup( - compareTwoMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 177, Short.MAX_VALUE) - ); - compareTwoMainLayout.setVerticalGroup( - compareTwoMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 170, Short.MAX_VALUE) - ); - - compareTwoMain1.setBackground(new java.awt.Color(0, 174, 163)); - - javax.swing.GroupLayout compareTwoMain1Layout = new javax.swing.GroupLayout(compareTwoMain1); - compareTwoMain1.setLayout(compareTwoMain1Layout); - compareTwoMain1Layout.setHorizontalGroup( - compareTwoMain1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 220, Short.MAX_VALUE) - ); - compareTwoMain1Layout.setVerticalGroup( - compareTwoMain1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 169, Short.MAX_VALUE) - ); - - batchMain.setBackground(new java.awt.Color(0, 174, 163)); - - JLabel10.setIcon(new javax.swing.ImageIcon(getClass().getResource("/batchProcessingStart.png"))); // NOI18N - - javax.swing.GroupLayout batchMainLayout = new javax.swing.GroupLayout(batchMain); - batchMain.setLayout(batchMainLayout); - batchMainLayout.setHorizontalGroup( - batchMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(batchMainLayout.createSequentialGroup() - .addContainerGap() - .addComponent(JLabel10) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - batchMainLayout.setVerticalGroup( - batchMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(batchMainLayout.createSequentialGroup() - .addGap(25, 25, 25) - .addComponent(JLabel10) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - symetryMain.setBackground(new java.awt.Color(0, 174, 163)); - - JLabel11.setBackground(new java.awt.Color(0, 174, 163)); - JLabel11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStart.png"))); // NOI18N - JLabel11.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - JLabel11.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - JLabel11MouseMoved(evt); - } - }); - JLabel11.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - JLabel11MouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - JLabel11MouseExited(evt); - } - }); - - javax.swing.GroupLayout symetryMainLayout = new javax.swing.GroupLayout(symetryMain); - symetryMain.setLayout(symetryMainLayout); - symetryMainLayout.setHorizontalGroup( - symetryMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(JLabel11, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 189, Short.MAX_VALUE) - ); - symetryMainLayout.setVerticalGroup( - symetryMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, symetryMainLayout.createSequentialGroup() - .addContainerGap() - .addComponent(JLabel11, javax.swing.GroupLayout.DEFAULT_SIZE, 167, Short.MAX_VALUE)) - ); - - viewerButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modelView.png"))); // NOI18N - viewerButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - viewerButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - viewerButtonMouseMoved(evt); - } - }); - viewerButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - viewerButtonMouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - viewerButtonMouseExited(evt); - } - }); - - JLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/compareTwoStart.png"))); // NOI18N - - JLabel9.setBackground(new java.awt.Color(0, 174, 163)); - JLabel9.setIcon(new javax.swing.ImageIcon(getClass().getResource("/copareWithDatabaseStart.png"))); // 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() - .addContainerGap(17, Short.MAX_VALUE) - .addComponent(viewerButton, javax.swing.GroupLayout.PREFERRED_SIZE, 323, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(compareTwoMain, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(compareTwoMain1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel3Layout.createSequentialGroup() - .addComponent(JLabel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(62, 62, 62)) - .addGroup(jPanel3Layout.createSequentialGroup() - .addComponent(JLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(batchMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(jPanel3Layout.createSequentialGroup() - .addGap(12, 12, 12) - .addComponent(symetryMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap(42, Short.MAX_VALUE)) - ); - jPanel3Layout.setVerticalGroup( - jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel3Layout.createSequentialGroup() - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() - .addContainerGap() - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(JLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(compareTwoMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(jPanel3Layout.createSequentialGroup() - .addComponent(batchMain, javax.swing.GroupLayout.PREFERRED_SIZE, 173, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(28, 28, 28))) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(compareTwoMain1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(symetryMain, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addGroup(jPanel3Layout.createSequentialGroup() - .addGap(296, 296, 296) - .addComponent(JLabel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(8, 8, 8))) - .addContainerGap()) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(viewerButton) - .addGap(41, 41, 41)) - ); - - javax.swing.GroupLayout startingPanelLayout = new javax.swing.GroupLayout(startingPanel); - startingPanel.setLayout(startingPanelLayout); - startingPanelLayout.setHorizontalGroup( - startingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(startingPanelLayout.createSequentialGroup() - .addContainerGap(81, Short.MAX_VALUE) - .addGroup(startingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, startingPanelLayout.createSequentialGroup() - .addComponent(logo, javax.swing.GroupLayout.PREFERRED_SIZE, 218, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(400, 400, 400))) - .addContainerGap(81, Short.MAX_VALUE)) - ); - startingPanelLayout.setVerticalGroup( - startingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(startingPanelLayout.createSequentialGroup() - .addContainerGap(133, Short.MAX_VALUE) - .addComponent(logo, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(136, Short.MAX_VALUE)) - ); - - jPanel2.add(startingPanel, "card3"); - - symetryPanel.setBackground(new java.awt.Color(0, 174, 163)); - symetryPanel.setPreferredSize(new java.awt.Dimension(1200, 800)); - - javax.swing.GroupLayout viewerPanelLayout = new javax.swing.GroupLayout(viewerPanel); - viewerPanel.setLayout(viewerPanelLayout); - viewerPanelLayout.setHorizontalGroup( - viewerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(viewerPanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(canvasSymmetryPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 553, Short.MAX_VALUE) - .addContainerGap()) - ); - viewerPanelLayout.setVerticalGroup( - viewerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(viewerPanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(canvasSymmetryPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 588, Short.MAX_VALUE) - .addContainerGap()) - ); - - reloadModelButton.setBackground(new java.awt.Color(0, 174, 163)); - reloadModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadModel.png"))); // NOI18N - reloadModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - reloadModelButton.setOpaque(true); - reloadModelButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - reloadModelButtonMouseMoved(evt); - } - }); - reloadModelButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - reloadModelButtonMouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - reloadModelButtonMouseExited(evt); - } - }); - - exportModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/exportModel.png"))); // NOI18N - exportModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - exportModelButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - exportModelButtonMouseMoved(evt); - } - }); - exportModelButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - exportModelButtonMouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - exportModelButtonMouseExited(evt); - } - }); - - symmetryPanel1.setBackground(new java.awt.Color(176, 230, 226)); - - javax.swing.GroupLayout symetryPanelLayout = new javax.swing.GroupLayout(symetryPanel); - symetryPanel.setLayout(symetryPanelLayout); - symetryPanelLayout.setHorizontalGroup( - symetryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(symetryPanelLayout.createSequentialGroup() - .addContainerGap(78, Short.MAX_VALUE) - .addComponent(viewerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(72, 72, 72) - .addGroup(symetryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(exportModelButton) - .addComponent(reloadModelButton) - .addComponent(symmetryPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 461, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addComponent(filler1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(filler2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - ); - symetryPanelLayout.setVerticalGroup( - symetryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(symetryPanelLayout.createSequentialGroup() - .addComponent(filler2, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE) - .addGroup(symetryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(symetryPanelLayout.createSequentialGroup() - .addComponent(symmetryPanel1, 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(exportModelButton) - .addGap(18, 18, 18) - .addComponent(reloadModelButton)) - .addComponent(viewerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(filler1, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(93, 93, 93)) - ); - - jPanel2.add(symetryPanel, "card3"); - - modelViewPanel.setBackground(new java.awt.Color(0, 174, 163)); - modelViewPanel.setToolTipText(""); - modelViewPanel.setPreferredSize(new java.awt.Dimension(1200, 800)); - - reloadModelButton1.setBackground(new java.awt.Color(0, 174, 163)); - reloadModelButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadModel.png"))); // NOI18N - reloadModelButton1.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - reloadModelButton1.setOpaque(true); - reloadModelButton1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { - public void mouseMoved(java.awt.event.MouseEvent evt) { - reloadModelButton1MouseMoved(evt); - } - }); - reloadModelButton1.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - reloadModelButton1MouseClicked(evt); - } - public void mouseExited(java.awt.event.MouseEvent evt) { - reloadModelButton1MouseExited(evt); - } - }); - - javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); - jPanel4.setLayout(jPanel4Layout); - jPanel4Layout.setHorizontalGroup( - jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel4Layout.createSequentialGroup() - .addContainerGap() - .addComponent(canvasModelView, javax.swing.GroupLayout.PREFERRED_SIZE, 795, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - jPanel4Layout.setVerticalGroup( - jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(canvasModelView, javax.swing.GroupLayout.PREFERRED_SIZE, 553, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(98, 98, 98)) - ); - - javax.swing.GroupLayout modelViewPanelLayout = new javax.swing.GroupLayout(modelViewPanel); - modelViewPanel.setLayout(modelViewPanelLayout); - modelViewPanelLayout.setHorizontalGroup( - modelViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(filler3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, modelViewPanelLayout.createSequentialGroup() - .addContainerGap(87, Short.MAX_VALUE) - .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(reloadModelButton1) - .addContainerGap(95, Short.MAX_VALUE)) - .addComponent(filler4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - ); - modelViewPanelLayout.setVerticalGroup( - modelViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(modelViewPanelLayout.createSequentialGroup() - .addComponent(filler3, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 87, Short.MAX_VALUE) - .addGroup(modelViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, 579, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(reloadModelButton1)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(filler4, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(92, Short.MAX_VALUE)) - ); - - jPanel2.add(modelViewPanel, "card4"); - modelViewPanel.getAccessibleContext().setAccessibleName(""); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); - getContentPane().setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(topPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(topPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 565, Short.MAX_VALUE)) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - topPanel.getAccessibleContext().setAccessibleName(""); - - pack(); - setLocationRelativeTo(null); - }// </editor-fold>//GEN-END:initComponents - - /** - * - * @param evt Changes the backround of the new project button - */ - private void newProjectMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_newProjectMouseMoved - setLabelBackround(newProject); - }//GEN-LAST:event_newProjectMouseMoved - - /** - * - * @param evt Changes back the backround of the new project button - */ - private void newProjectMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_newProjectMouseExited - if (!pressedNewProject) { - resetLabelBackround(newProject); - } - }//GEN-LAST:event_newProjectMouseExited - - /** - * - * @param evt While moved with mouse, symmetry label changes - */ - private void jLabel4MouseMoved1(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel4MouseMoved1 - jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStartPanel.png"))); - }//GEN-LAST:event_jLabel4MouseMoved1 - - /** - * - * @param evt Shows menu with icons for programs of the app - */ - private void newProjectMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_newProjectMousePressed - if(pressedNewProject) { - topPanel.setVisible(false); - pressedNewProject = false; - switchPanelOnMainPanel(actualPanel); - newProject.setIcon(new javax.swing.ImageIcon(getClass().getResource("/newP.png"))); - }else{ - topPanel.setVisible(true); - topPanel.add(jPanel1); - pressedNewProject = true; - newProject.setIcon(new javax.swing.ImageIcon(getClass().getResource("/new_project_opened.png"))); - } - }//GEN-LAST:event_newProjectMousePressed - - - /** - * - * @param evt Switch to symmetry panel - */ - private void JLabel11MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_JLabel11MouseClicked - switchPanelOnMainPanel(symetryPanel); - }//GEN-LAST:event_JLabel11MouseClicked - - /** - * - * @param evt Switch to symmetry panel - */ - private void symetryEstimatorMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_symetryEstimatorMouseClicked - switchPanelOnMainPanel(symetryPanel); - topPanel.setVisible(false); - ImageIcon icon = new ImageIcon(getClass().getResource("/newP.png")); - - newProject.setIcon(icon); - resetLabelBackround(newProject); - }//GEN-LAST:event_symetryEstimatorMouseClicked - - /** - * - * @param evt Enables to move with the window of the app - */ - private void jPanel1MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanel1MouseDragged - int x = evt.getXOnScreen(); - int y = evt.getYOnScreen(); - frameMain.setLocation(x - xMouse, y - yMouse); - }//GEN-LAST:event_jPanel1MouseDragged - - /** - * - * @param evt Enables to move with the window of the app - */ - private void jPanel1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanel1MousePressed - xMouse = evt.getX(); - yMouse = evt.getY(); - }//GEN-LAST:event_jPanel1MousePressed - - /** - * - * @param evt Changes the backround of the reload button - */ - private void reloadModelButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButtonMouseMoved - reloadModelButton.setBackground(new Color(176,230,226)); - }//GEN-LAST:event_reloadModelButtonMouseMoved - - /** - * - * @param evt Changes the backround of the reload button - */ - private void reloadModelButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButtonMouseExited - reloadModelButton.setBackground(new Color(0,174,163)); - }//GEN-LAST:event_reloadModelButtonMouseExited - - /** - * - * @param evt Loads the model that will be displayed - */ - private void reloadModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButtonMouseClicked - canvasSymmetryPanel.loadModel(); - if (canvasSymmetryPanel.isLoaded()) { - symmetryPanel1.showPlaneButtonsOnPanel(false); - } - }//GEN-LAST:event_reloadModelButtonMouseClicked - - /** - * letting know GLCanva if model will be displayed as wire-frame - */ - private void wiredModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_wiredModelButtonMouseClicked - if (wiredModelClicked) { - resetLabelBackround(wiredModelButton); - wiredModelClicked = false; - Canvas.setDrawWired(wiredModelClicked); - /*canvasSymmetryPanel.setDrawWired(wiredModelClicked); - canvasModelView.setDrawWired(wiredModelClicked);*/ - } else { - setLabelBackround(wiredModelButton); - wiredModelClicked = true; - Canvas.setDrawWired(wiredModelClicked); - /*canvasSymmetryPanel.setDrawWired(wiredModelClicked); - canvasModelView.setDrawWired(wiredModelClicked);*/ - } - }//GEN-LAST:event_wiredModelButtonMouseClicked - - /** - * - * @param evt Changes the backround of the home button - */ - private void homeButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_homeButtonMouseMoved - setLabelBackround(homeButton); - }//GEN-LAST:event_homeButtonMouseMoved - - /** - * - * @param evt Changes the backround of the home button - */ - private void homeButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_homeButtonMouseExited - resetLabelBackround(homeButton); - }//GEN-LAST:event_homeButtonMouseExited - - /** - * - * @param evt Returns to home panel of the app - */ - private void homeButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_homeButtonMouseClicked - switchPanelOnMainPanel(startingPanel); - }//GEN-LAST:event_homeButtonMouseClicked - - /** - * - * @param evt Changes the backround of the reload button - */ - private void reloadModelButton1MouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButton1MouseMoved - reloadModelButton1.setBackground(new Color(176,230,226)); - }//GEN-LAST:event_reloadModelButton1MouseMoved - - /** - * - * @param evt Loads the model that will be displayed - */ - private void reloadModelButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButton1MouseClicked - canvasModelView.loadModel(); - }//GEN-LAST:event_reloadModelButton1MouseClicked - - /** - * - * @param evt Changes the backround of the reload button - */ - private void reloadModelButton1MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButton1MouseExited - reloadModelButton1.setBackground(new Color(0,174,163)); - }//GEN-LAST:event_reloadModelButton1MouseExited - - /** - * - * @param evt Switch to panel for viewing the model - */ - private void viewerButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_viewerButtonMouseClicked - switchPanelOnMainPanel(modelViewPanel); - }//GEN-LAST:event_viewerButtonMouseClicked - - /** - * - * @param evt Changes the backround of the symmetry button - */ - private void JLabel11MouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_JLabel11MouseMoved - JLabel11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStartMoved.png"))); - }//GEN-LAST:event_JLabel11MouseMoved - - /** - * - * @param evt Changes the backround of the viewer panel button - */ - private void viewerButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_viewerButtonMouseMoved - viewerButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modelViewMoved.png"))); - }//GEN-LAST:event_viewerButtonMouseMoved - - /** - * - * @param evt Changes the backround of the viewer panel button - */ - private void viewerButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_viewerButtonMouseExited - viewerButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modelView.png"))); - }//GEN-LAST:event_viewerButtonMouseExited - - /** - * - * @param evt Changes the backround of the symmetry button - */ - private void JLabel11MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_JLabel11MouseExited - JLabel11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStart.png"))); - }//GEN-LAST:event_JLabel11MouseExited - - /** - * - * @param evt Switch to panel for symmetry - */ - private void jLabel4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel4MouseClicked - switchPanelOnMainPanel(symetryPanel); - topPanel.setVisible(false); - newProject.setIcon(new javax.swing.ImageIcon(getClass().getResource("/newP.png"))); - resetLabelBackround(newProject); - }//GEN-LAST:event_jLabel4MouseClicked - - /** - * - * @param evt Changes the backround of the export button - */ - private void exportModelButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_exportModelButtonMouseMoved - exportModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/exportModelPressed.png"))); - }//GEN-LAST:event_exportModelButtonMouseMoved - - /** - * - * @param evt Changes the backround of the export button - */ - private void exportModelButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_exportModelButtonMouseExited - exportModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/exportModel.png"))); - }//GEN-LAST:event_exportModelButtonMouseExited - - /** - * When export button pressed, new directory is created and model is exported to it - * If there is not loaded model, user is warned - */ - private void exportModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_exportModelButtonMouseClicked - if (canvasSymmetryPanel.getModel().getFacets().isEmpty()){ - JOptionPane.showMessageDialog(frameMain, "You have to load the model.", "Model not loaded", - 0, new ImageIcon(getClass().getResource("/notLoadedModel.png"))); - } else { - JFileChooser chooser = new JFileChooser(); - chooser.showSaveDialog(symetryPanel); - - MeshObjExporter exporter = new MeshObjExporter(canvasSymmetryPanel.getModel()); - try { - if (chooser.getSelectedFile() != null) { - exporter.exportModelToObj(chooser.getSelectedFile()); - JOptionPane.showMessageDialog(frameMain, "Model exported into: " + - chooser.getCurrentDirectory().toString() + "\\" + chooser.getSelectedFile().getName(), "Model exported", - 0, new ImageIcon(getClass().getResource("/exportedModel.png"))); - } - } catch (IOException ex) { - Logger.getLogger(UserInterface.class.getName()).log(Level.SEVERE, null, ex); - } - } - }//GEN-LAST:event_exportModelButtonMouseClicked - - /** - * - * @param evt Changes the backround of the symmetry button - */ - private void jLabel4MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel4MouseExited - jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStartP.png"))); - }//GEN-LAST:event_jLabel4MouseExited - - - /** - * @param args the command line arguments - */ - public static void main(String args[]) { - try { - for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { - if ("Nimbus".equals(info.getName())) { - javax.swing.UIManager.setLookAndFeel(info.getClassName()); - break; - } - } - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) { - java.util.logging.Logger.getLogger(UserInterface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); - } - java.awt.EventQueue.invokeLater(() -> { - frameMain = new UserInterface(); - frameMain.setBackground(new Color(49,165,154)); - frameMain.pack(); - frameMain.setVisible(true); - //enables to use design of operating system - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - }catch(ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException ex) { - } - }); - } - - - - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel JLabel10; - private javax.swing.JLabel JLabel11; - private javax.swing.JLabel JLabel8; - private javax.swing.JLabel JLabel9; - private javax.swing.JPanel batchMain; - private javax.swing.JPanel batchProcessing; - private cz.fidentis.analyst.gui.Canvas canvasModelView; - private cz.fidentis.analyst.gui.Canvas canvasSymmetryPanel; - private javax.swing.JPanel compareDB; - private javax.swing.JPanel compareTwo; - private javax.swing.JPanel compareTwoMain; - private javax.swing.JPanel compareTwoMain1; - private javax.swing.JLabel exportModelButton; - private javax.swing.Box.Filler filler1; - private javax.swing.Box.Filler filler2; - private javax.swing.Box.Filler filler3; - private javax.swing.Box.Filler filler4; - private javax.swing.JLabel homeButton; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel2; - private javax.swing.JLabel jLabel3; - private javax.swing.JLabel jLabel4; - private javax.swing.JPanel jPanel1; - private javax.swing.JPanel jPanel2; - private javax.swing.JPanel jPanel3; - private javax.swing.JPanel jPanel4; - private javax.swing.JPanel modelViewPanel; - private javax.swing.JLabel newProject; - private javax.swing.JLabel reloadModelButton; - private javax.swing.JLabel reloadModelButton1; - private javax.swing.JPanel startingPanel; - private javax.swing.JPanel symetryEstimator; - private javax.swing.JPanel symetryMain; - private javax.swing.JPanel symetryPanel; - private cz.fidentis.analyst.gui.SymmetryPanel symmetryPanel1; - private javax.swing.JPanel topPanel; - private javax.swing.JLabel viewerButton; - private javax.swing.JPanel viewerPanel; - private javax.swing.JLabel wiredModelButton; - // End of variables declaration//GEN-END:variables -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/Wireframe.java b/GUI/src/main/java/cz/fidentis/analyst/gui/Wireframe.java deleted file mode 100644 index a3e7abb5413c2a30d69d3f6acf15d36b4a16e581..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/Wireframe.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package cz.fidentis.analyst.gui; - -import java.awt.Color; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.JLabel; -import org.openide.awt.ActionID; -import org.openide.awt.ActionReference; -import org.openide.awt.ActionReferences; -import org.openide.awt.ActionRegistration; -import org.openide.util.NbBundle.Messages; - -/** - * - * @author Richard Pajerský - * - * Wireframe button in toolbar and Edit - */ -@ActionID( - category = "Edit", - id = "cz.fidentis.analyst.gui.Wireframe" -) -@ActionRegistration( - iconBase = "wireframe16x16.png", - displayName = "#CTL_Wireframe" -) -@ActionReferences({ - @ActionReference(path = "Menu/Edit", position = 2600, separatorBefore = 2550), - @ActionReference(path = "Toolbars/File", position = 300) -}) -@Messages("CTL_Wireframe=Wireframe") -public final class Wireframe implements ActionListener { - - /** - * Flag for whether model should be displayed as wire-frame - */ - boolean wiredModelClicked = false; - - @Override - public void actionPerformed(ActionEvent e) { - if (wiredModelClicked) { - //resetLabelBackround(wiredModelButton); - wiredModelClicked = false; - Canvas.setDrawWired(wiredModelClicked); - /*canvasSymmetryPanel.setDrawWired(wiredModelClicked); - canvasModelView.setDrawWired(wiredModelClicked);*/ - } else { - //setLabelBackround(wiredModelButton); - wiredModelClicked = true; - Canvas.setDrawWired(wiredModelClicked); - /*canvasSymmetryPanel.setDrawWired(wiredModelClicked); - canvasModelView.setDrawWired(wiredModelClicked);*/ - } - } - - /** - * Changes backround of labels to darker green color - * @param jl label of which backround changes - */ - private void setLabelBackround(JLabel jl) { - jl.setBackground(new Color(11,56,49)); - } - - /** - * Changes backround of the label back to original - * @param jl label of which backround is return to original - */ - private void resetLabelBackround(JLabel jl) { - jl.setBackground(new Color(20,114,105)); - } -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/DrawableMesh.java b/GUI/src/main/java/cz/fidentis/analyst/gui/scene/DrawableMesh.java deleted file mode 100644 index 2355656c9962671e75fa993f96f9401dfca7b11d..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/DrawableMesh.java +++ /dev/null @@ -1,305 +0,0 @@ -package cz.fidentis.analyst.gui.scene; - -import com.jogamp.opengl.GL2; -import cz.fidentis.analyst.feature.FeaturePoint; -import cz.fidentis.analyst.mesh.core.MeshFacet; -import cz.fidentis.analyst.mesh.core.MeshModel; -import java.awt.Color; -import java.util.ArrayList; -import java.util.List; -import javax.vecmath.Vector3d; - -/** - * A drawable triangular mesh, i.e., a mesh model with drawing information like - * material, transparency, color, relative transformations in the scene etc. - * This class encapsulates rendering state and parameters, - * - * @author Radek Oslejsek - * @author Richard Pajersky - */ -public class DrawableMesh { - - private final MeshModel model; - - private boolean display = true; - - /* material info */ - /** - * {@link Color} of mesh - */ - private Color color = new Color(255, 255, 255); - /** - * {@link Color} of highlights - */ - private Color highlights = new Color(0, 0, 0, 1); - /** - * Transparency of mesh - */ - private float transparency = 1; - - /* transformation info */ - /** - * Translation - */ - private Vector3d translation = new Vector3d(0, 0, 0); - /** - * Rotation - */ - private Vector3d rotation = new Vector3d(0, 0, 0); - /** - * Scale - */ - private Vector3d scale = new Vector3d(0, 0, 0); - - /* render mode */ - /** - * Render mode to use, one from {@code GL_FILL}, {@code GL_LINE}, {@code GL_POINT} - */ - private int renderMode = GL2.GL_FILL; - /** - * Flag if back should be rendered - */ - private boolean showBackface = true; - - /* feature points */ - /** - * {@link List} of feature points - */ - private List<FeaturePoint> featurePoints = new ArrayList<>(); - /** - * {@link List} of feature points color - */ - private List<Color> featurePointsColor = new ArrayList<>(); - /** - * Flag if feature points should be rendered - */ - private boolean renderFeaturePoints = false; - - /** - * Constructor. - * - * @param model Drawable mesh model - * @throws IllegalArgumentException if the model is {@code null} - */ - public DrawableMesh(MeshModel model) { - if (model == null) { - throw new IllegalArgumentException("model is null"); - } - this.model = model; - } - - /** - * Returns list of individual facets. - * - * @return list of individual facets. - */ - public List<MeshFacet> getFacets() { - return model.getFacets(); - } - - /** - * This drawable mesh is included in the rendered scene. - */ - public void show() { - display = true; - } - - /** - * This drawable mesh is excluded from the rendered scene (skipped). - */ - public void hide() { - display = false; - } - - /** - * - * @return {@code true} if the object is included (rendered) in the scene. - */ - public boolean isShown() { - return display; - } - - /** - * Sets color - * @param color Color - */ - public void setColor(Color color) { - this.color = color; - } - - /** - * @return {@link Color} - */ - public Color getColor() { - return color; - } - - /** - * @return Current value of transparency - */ - public float getTransparency() { - return transparency; - } - - /** - * Sets transparency - * @param transparency Transparency - */ - public void setTransparency(float transparency) { - this.transparency = transparency; - } - - /** - * @return Current translation - */ - public Vector3d getTranslation() { - return translation; - } - - /** - * Sets tranlation - * @param translation Translation - */ - public void setTranslation(Vector3d translation) { - this.translation = translation; - } - - /** - * @return Current rotation - */ - public Vector3d getRotation() { - return rotation; - } - - /** - * Sets rotation - * @param rotation - */ - public void setRotation(Vector3d rotation) { - this.rotation = rotation; - } - - /** - * @return Current scale - */ - public Vector3d getScale() { - return scale; - } - - /** - * Sets scale - * @param scale Scale - */ - public void setScale(Vector3d scale) { - this.scale = scale; - } - - /** - * @return {@link MeshModel} - */ - public MeshModel getModel() { - return this.model; - } - - /** - * @return {@link Color} of highlights - */ - public Color getHighlights() { - return highlights; - } - - /** - * Sets {@link Color} of highlights - * @param highlights - */ - public void setHighlights(Color highlights) { - this.highlights = highlights; - } - - /** - * @return Value of {@link #renderMode} - */ - public int getRenderMode() { - return renderMode; - } - - /** - * Sets render mode - * @param renderMode Render mode - * @throws IllegalArgumentException if renderMode isn't {@code GL_FILL}, {@code GL_LINE} or {@coed GL_POINT} - */ - public void setRenderMode(int renderMode) { - if (renderMode != GL2.GL_FILL && - renderMode != GL2.GL_LINE && - renderMode != GL2.GL_POINT) { - throw new IllegalArgumentException("invalid mode"); - } - this.renderMode = renderMode; - } - - /** - * @return {@link List} of {@link FeaturePoint} - */ - public List<FeaturePoint> getFeaturePoints() { - return featurePoints; - } - - /** - * Sets feature points - * @param featurePoints Feature points - */ - public void setFeaturePoints(List<FeaturePoint> featurePoints) { - this.featurePoints = featurePoints; - List<Color> colors = new ArrayList<>(); - featurePoints.forEach((_item) -> { - colors.add(this.color); - }); - this.setFeaturePointsColor(colors); - } - - /** - * @return {@link List} of feature points {@link Color} - */ - public List<Color> getFeaturePointsColor() { - return featurePointsColor; - } - - /** - * Sets colors of feature points - * @param featurePointsColor Colors of feature points - */ - public void setFeaturePointsColor(List<Color> featurePointsColor) { - this.featurePointsColor = featurePointsColor; - } - - /** - * @return {@code true} if feature points should be rendered - */ - public boolean isRenderFeaturePoints() { - return renderFeaturePoints; - } - - /** - * Sets if feature points should be renderred or not - * @param renderFeaturePoints - */ - public void setRenderFeaturePoints(boolean renderFeaturePoints) { - this.renderFeaturePoints = renderFeaturePoints; - } - - /** - * @return {@code true} if back face shoud be shown - */ - public boolean isShowBackface() { - return showBackface; - } - - /** - * Sets if back face should be shown or not - * @param showBackface - */ - public void setShowBackface(boolean showBackface) { - this.showBackface = showBackface; - } - -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Scene.java b/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Scene.java deleted file mode 100644 index 975fb80f3cc08fcd0a66fcdcd5f18f24488b1c46..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Scene.java +++ /dev/null @@ -1,70 +0,0 @@ -package cz.fidentis.analyst.gui.scene; - -import cz.fidentis.analyst.face.HumanFace; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -/** - * Abstract class for ... - * - * @author Radek Oslejsek - */ -public class Scene { - - private final HumanFace primaryFace; - - private final HumanFace secondaryFace ; - - private final List<DrawableMesh> drawables = new ArrayList<>(); - - /** - * Constructor for single face analysis. - * - * @param face Human face to be analyzed - * @throws IllegalArgumentException if the {@code face} is {@code null} - */ - public Scene(HumanFace face) { - if (face == null) { - throw new IllegalArgumentException("face"); - } - this.primaryFace = face; - this.secondaryFace = null; - - drawables.add(new DrawableMesh(primaryFace.getMeshModel())); - } - - /** - * Constructor for one-to-one analysis. - * - * @param primary Primary face to be analyzed - * @param primary Secondary face to be analyzed - * @throws IllegalArgumentException if some face is {@code null} - */ - public Scene(HumanFace primary, HumanFace secondary) { - if (primary == null) { - throw new IllegalArgumentException("primary"); - } - if (secondary == null) { - throw new IllegalArgumentException("secondary"); - } - this.primaryFace = primary; - this.secondaryFace = secondary; - - drawables.add(new DrawableMesh(primaryFace.getMeshModel())); - drawables.add(new DrawableMesh(secondaryFace.getMeshModel())); - } - - /** - * Returns all drawable objects in a modifiable collection (should be refactored in the future). - * - * @return all drawable objects - */ - public Collection<DrawableMesh> getDrawables() { - return this.drawables; - } - - /*public void setDrawables(Collection<DrawableMesh> drawables) { - this.drawables = this.drawables; - }*/ -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.form b/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.form deleted file mode 100644 index cebe2c58f760e41ebae4086d6afc2f22201b7e1e..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.form +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<!-- - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - ---> - -<Form version="1.4" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jToolBar1" pref="685" max="32767" attributes="0"/> - <Component id="canvas1" alignment="0" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Component id="jToolBar1" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="canvas1" pref="434" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="cz.fidentis.analyst.gui.canvas.Canvas" name="canvas1"> - </Component> - <Container class="javax.swing.JToolBar" name="jToolBar1"> - <Properties> - <Property name="rollover" type="boolean" value="true"/> - </Properties> - - <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/> - <SubComponents> - <Component class="javax.swing.JButton" name="jButton1"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/wireframe16x1624.png"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/newgui/swing/Bundle.properties" key="SingleFaceTab.jButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="focusable" type="boolean" value="false"/> - <Property name="horizontalTextPosition" type="int" value="0"/> - <Property name="verticalTextPosition" type="int" value="3"/> - </Properties> - </Component> - </SubComponents> - </Container> - </SubComponents> -</Form> diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.java b/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.java deleted file mode 100644 index 60e82105374ed069fdcaf4b5a0d33ac2bc84ca6d..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.java +++ /dev/null @@ -1,99 +0,0 @@ -package cz.fidentis.analyst.gui.tab; - -import cz.fidentis.analyst.gui.canvas.Canvas; -import org.netbeans.api.settings.ConvertAsProperties; -import org.openide.windows.TopComponent; - -/** - * The non-singleton window/tab for detail inspection of a single face. - * For the discussion on crating non-singleton top component, - * see {@link http://netbeans.apache.org/wiki/DevFaqNonSingletonTopComponents.asciidoc}. - * - * @author Richard Pajersky - */ -@ConvertAsProperties( - dtd = "-//cz.fidentis.analyst.gui.tab//SingleFaceTab//EN", - autostore = false -) -public final class SingleFaceTab extends TopComponent { - - /** - * Constructor. - */ - public SingleFaceTab() { - initComponents(); - } - - @Override - public int getPersistenceType() { - return TopComponent.PERSISTENCE_NEVER; // TO DO: change to .PERSISTENCE_ONLY_OPENED when we can re-create the ProjectTC - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - canvas1 = new cz.fidentis.analyst.gui.canvas.Canvas(); - jToolBar1 = new javax.swing.JToolBar(); - jButton1 = new javax.swing.JButton(); - - jToolBar1.setRollover(true); - - jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/wireframe16x1624.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(SingleFaceTab.class, "SingleFaceTab.jButton1.text")); // NOI18N - jButton1.setFocusable(false); - jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - jToolBar1.add(jButton1); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 685, Short.MAX_VALUE) - .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)) - ); - }// </editor-fold>//GEN-END:initComponents - - // Variables declaration - do not modify//GEN-BEGIN:variables - private cz.fidentis.analyst.gui.canvas.Canvas canvas1; - private javax.swing.JButton jButton1; - private javax.swing.JToolBar jToolBar1; - // End of variables declaration//GEN-END:variables - @Override - public void componentOpened() { - // TODO add custom code on component opening - } - - @Override - public void componentClosed() { - // TODO add custom code on component closing - } - - void writeProperties(java.util.Properties p) { - // better to version settings since initial version as advocated at - // http://wiki.apidesign.org/wiki/PropertyFiles - p.setProperty("version", "1.0"); - // TODO store your settings - } - - void readProperties(java.util.Properties p) { - String version = p.getProperty("version"); - // TODO read your settings according to their version - } - - public Canvas getCanvas() { - return canvas1; - } -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestOptionsPanelController.java b/GUI/src/main/java/cz/fidentis/analyst/options/TestOptionsPanelController.java similarity index 98% rename from GUI/src/main/java/cz/fidentis/analyst/gui/options/TestOptionsPanelController.java rename to GUI/src/main/java/cz/fidentis/analyst/options/TestOptionsPanelController.java index 19b26bc9b29749e09fb9afdf4b4838a2d1c6c90e..f9e474f30e8d3b1eed05ff04484041b1a3c4594b 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestOptionsPanelController.java +++ b/GUI/src/main/java/cz/fidentis/analyst/options/TestOptionsPanelController.java @@ -1,4 +1,4 @@ -package cz.fidentis.analyst.gui.options; +package cz.fidentis.analyst.options; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.form b/GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.form similarity index 93% rename from GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.form rename to GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.form index df4f02829e54efa3fd5b783d7bc18e1387d4d6b9..1ebf417cc58919ab5d74b10cdb7c91ad2a4c5252 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.form +++ b/GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.form @@ -58,7 +58,7 @@ <Component class="javax.swing.JLabel" name="jLabel1"> <Properties> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/gui/options/Bundle.properties" key="TestPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/options/Bundle.properties" key="TestPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.java b/GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.java similarity index 98% rename from GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.java rename to GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.java index 3645d60d1237e59d4c5589fa9e5e44e2026d0b61..54c09e3c0fba88e5cc4447695f160c6a55212648 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.java +++ b/GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.java @@ -1,4 +1,4 @@ -package cz.fidentis.analyst.gui.options; +package cz.fidentis.analyst.options; /** * Test option panel. To be replaced with suitable implementation(s) diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/options/package-info.java b/GUI/src/main/java/cz/fidentis/analyst/options/package-info.java similarity index 92% rename from GUI/src/main/java/cz/fidentis/analyst/gui/options/package-info.java rename to GUI/src/main/java/cz/fidentis/analyst/options/package-info.java index 29f2b35bf8d488e24222e3657c816ec774c837dd..9a55e97db4cfb93c75b388e120d3f5c8edd78654 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/options/package-info.java +++ b/GUI/src/main/java/cz/fidentis/analyst/options/package-info.java @@ -3,7 +3,7 @@ */ @OptionsPanelController.ContainerRegistration(id = "Fidentis", categoryName = "#OptionsCategory_Name_Fidentis", iconBase = "logo-28x32.png", keywords = "#OptionsCategory_Keywords_Fidentis", keywordsCategory = "Fidentis") @NbBundle.Messages(value = {"OptionsCategory_Name_Fidentis=Fidentis", "OptionsCategory_Keywords_Fidentis=fidentis"}) -package cz.fidentis.analyst.gui.options; +package cz.fidentis.analyst.options; import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.NbBundle; diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/ModelRotationAnimator.java b/GUI/src/main/java/cz/fidentis/analyst/registration/ModelRotationAnimator.java index 0ca7f89cbfe2b5fab7f83215e55ba7e6a7832a69..af62ed7b220eaeb617aaf85207c97a640efc2552 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/registration/ModelRotationAnimator.java +++ b/GUI/src/main/java/cz/fidentis/analyst/registration/ModelRotationAnimator.java @@ -1,13 +1,13 @@ package cz.fidentis.analyst.registration; -import cz.fidentis.analyst.gui.canvas.Direction; +import cz.fidentis.analyst.canvas.Direction; import com.jogamp.opengl.util.FPSAnimator; import java.util.Timer; import java.util.TimerTask; /** * Animator used to animate transformations of model. - * Based on {@link cz.fidentis.analyst.gui.canvas.RotationAnimator}. + * Based on {@link cz.fidentis.analyst.canvas.RotationAnimator}. * * @author Richard Pajersky */ @@ -44,7 +44,7 @@ public class ModelRotationAnimator { * @param dir Transform direction * @param panel Panel */ - public void startModelAnimation(Direction dir, PostRegistrationCP panel) { + public void startModelAnimation(Direction dir, RegistrationPanel panel) { if (this.direction != Direction.NONE) { throw new UnsupportedOperationException(); // this should no happen } @@ -66,7 +66,7 @@ public class ModelRotationAnimator { /** * Stops the animation. */ - public void stopModelAnimation(PostRegistrationCP panel) { + public void stopModelAnimation(RegistrationPanel panel) { timer.cancel(); if ((System.currentTimeMillis() - startClickTime) < 500) { panel.transform(direction); diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.java b/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.java deleted file mode 100644 index ad014e815d6fc778cdffcb0279816f6053cd2fbd..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.java +++ /dev/null @@ -1,2074 +0,0 @@ -package cz.fidentis.analyst.registration; - -import cz.fidentis.analyst.gui.canvas.Direction; -import java.awt.Color; -import javax.swing.JColorChooser; - -/** - * Panel used to interactively visualize two face and adjust their registration. - * - * @author Richard Pajersky - */ -public class PostRegistrationCP extends javax.swing.JPanel { - - /** - * Listener which translates executed actions - * into {@link cz.fidentis.analyst.gui.scene.DrawableMesh} - */ - private PostRegistrationListener listener; - /** - * Animator which animates transformations - */ - private final ModelRotationAnimator animator = new ModelRotationAnimator(); - - /** - * Creates new form {@link PostRegistrationPanel} - * - * @param listener Listener - */ - public void initPostRegistrationCP(PostRegistrationListener listener) { - initComponents(); - this.listener = listener; - setDefaults(); - } - - /** - * Additional initialization of panel - */ - private void setDefaults() { - primaryColorPanel.setBackground(PostRegistrationListener.DEFAULT_PRIMARY_COLOR); - secondaryColorPanel.setBackground(PostRegistrationListener.DEFAULT_SECONDARY_COLOR); - primaryFillRB.setSelected(true); - secondaryFillRB.setSelected(true); - lowShiftRB.setSelected(true); - thersholdFTF.setValue(listener.getFeaturePointsThreshold()); - resetAllButtonActionPerformed(null); - } - - /** - * Alters transformation based on move amount specified in listener - * by updating specific formatted field - * - * @param dir Transformation direction - * @throws UnsupportedOperationException if {@code dir} is invalid - */ - public void transform(Direction dir) { - double newValue; - switch (dir) { - case TRANSLATE_LEFT: - newValue = ((Number)translationXFTF.getValue()).doubleValue() - listener.getMoveModifier(); - translationXFTF.setValue(newValue); - break; - case TRANSLATE_RIGHT: - newValue = ((Number)translationXFTF.getValue()).doubleValue() + listener.getMoveModifier(); - translationXFTF.setValue(newValue); - break; - case TRANSLATE_UP: - newValue = ((Number)translationYFTF.getValue()).doubleValue() - listener.getMoveModifier(); - translationYFTF.setValue(newValue); - break; - case TRANSLATE_DOWN: - newValue = ((Number)translationYFTF.getValue()).doubleValue() + listener.getMoveModifier(); - translationYFTF.setValue(newValue); - break; - case TRANSLATE_IN: - newValue = ((Number)translationZFTF.getValue()).doubleValue() - listener.getMoveModifier(); - translationZFTF.setValue(newValue); - break; - case TRANSLATE_OUT: - newValue = ((Number)translationZFTF.getValue()).doubleValue() + listener.getMoveModifier(); - translationZFTF.setValue(newValue); - break; - case ROTATE_LEFT: - newValue = ((Number)rotationXFTF.getValue()).doubleValue() - listener.getMoveModifier(); - rotationXFTF.setValue(newValue); - break; - case ROTATE_RIGHT: - newValue = ((Number)rotationXFTF.getValue()).doubleValue() + listener.getMoveModifier(); - rotationXFTF.setValue(newValue); - break; - case ROTATE_UP: - newValue = ((Number)rotationYFTF.getValue()).doubleValue() - listener.getMoveModifier(); - rotationYFTF.setValue(newValue); - break; - case ROTATE_DOWN: - newValue = ((Number)rotationYFTF.getValue()).doubleValue() + listener.getMoveModifier(); - rotationYFTF.setValue(newValue); - break; - case ROTATE_IN: - newValue = ((Number)rotationZFTF.getValue()).doubleValue() - listener.getMoveModifier(); - rotationZFTF.setValue(newValue); - break; - case ROTATE_OUT: - newValue = ((Number)rotationZFTF.getValue()).doubleValue() + listener.getMoveModifier(); - rotationZFTF.setValue(newValue); - break; - case ZOOM_OUT: - newValue = ((Number)scaleFTF.getValue()).doubleValue() - listener.getMoveModifier(); - scaleFTF.setValue(newValue); - break; - case ZOOM_IN: - newValue = ((Number)scaleFTF.getValue()).doubleValue() + listener.getMoveModifier(); - scaleFTF.setValue(newValue); - break; - default: - throw new UnsupportedOperationException(); - } - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - primaryRenderModeGroup = new javax.swing.ButtonGroup(); - secondaryRenerModeGroup = new javax.swing.ButtonGroup(); - precisionGroup = new javax.swing.ButtonGroup(); - registrationAdjustmentLabel = new javax.swing.JLabel(); - jSeparator11 = new javax.swing.JSeparator(); - visualizationPanel = new javax.swing.JPanel(); - jSeparator8 = new javax.swing.JSeparator(); - jSeparator4 = new javax.swing.JSeparator(); - visualizationLabel = new javax.swing.JLabel(); - jSeparator1 = new javax.swing.JSeparator(); - modelPanel = new javax.swing.JPanel(); - modelLabel = new javax.swing.JLabel(); - pointsLabel = new javax.swing.JLabel(); - transparencyButton = new javax.swing.JButton(); - linesLabel = new javax.swing.JLabel(); - colorButton = new javax.swing.JButton(); - fillLabel = new javax.swing.JLabel(); - renderModeLabel = new javax.swing.JLabel(); - secondaryHighlightsCB = new javax.swing.JCheckBox(); - primaryHighlightsCB = new javax.swing.JCheckBox(); - highlightsLabel = new javax.swing.JLabel(); - primaryLabel = new javax.swing.JLabel(); - secondaryLabel = new javax.swing.JLabel(); - transparencySlider = new javax.swing.JSlider(); - secondaryColorPanel = new javax.swing.JPanel(); - primaryColorPanel = new javax.swing.JPanel(); - primaryLinesRB = new javax.swing.JRadioButton(); - secondaryFillRB = new javax.swing.JRadioButton(); - primaryPointsRB = new javax.swing.JRadioButton(); - secondaryPointsRB = new javax.swing.JRadioButton(); - secondaryLinesRB = new javax.swing.JRadioButton(); - primaryFillRB = new javax.swing.JRadioButton(); - viewPanel = new javax.swing.JPanel(); - profileButton = new javax.swing.JButton(); - frontButton = new javax.swing.JButton(); - viewLabel = new javax.swing.JLabel(); - backfaceButton = new javax.swing.JToggleButton(); - featurePointsPanel = new javax.swing.JPanel(); - featurePointsButton = new javax.swing.JToggleButton(); - thresholdDownButton = new javax.swing.JButton(); - thersholdUpButton = new javax.swing.JButton(); - thersholdButton = new javax.swing.JButton(); - thersholdFTF = new javax.swing.JFormattedTextField(); - featurePointsLabel = new javax.swing.JLabel(); - jSeparator3 = new javax.swing.JSeparator(); - transformationPanel = new javax.swing.JPanel(); - transformationLabel = new javax.swing.JLabel(); - jSeparator2 = new javax.swing.JSeparator(); - jSeparator6 = new javax.swing.JSeparator(); - translationPanel = new javax.swing.JPanel(); - translationButton = new javax.swing.JButton(); - jLabel2 = new javax.swing.JLabel(); - rightTranslationXButton = new javax.swing.JButton(); - translationXFTF = new javax.swing.JFormattedTextField(); - leftTranslationYButton = new javax.swing.JButton(); - translationYFTF = new javax.swing.JFormattedTextField(); - rightTranslationYButton = new javax.swing.JButton(); - translXLabel = new javax.swing.JLabel(); - translationZFTF = new javax.swing.JFormattedTextField(); - translZLabel = new javax.swing.JLabel(); - translYLabel = new javax.swing.JLabel(); - rightTranslationZButton = new javax.swing.JButton(); - leftTranslationXButton = new javax.swing.JButton(); - leftTranslationZButton = new javax.swing.JButton(); - rotationPanel = new javax.swing.JPanel(); - leftRotationYButton = new javax.swing.JButton(); - leftRotationXButton = new javax.swing.JButton(); - rotatZLabel = new javax.swing.JLabel(); - rotatYLabel = new javax.swing.JLabel(); - rotatXLabel = new javax.swing.JLabel(); - rotationButton = new javax.swing.JButton(); - rotationZFTF = new javax.swing.JFormattedTextField(); - rotationYFTF = new javax.swing.JFormattedTextField(); - rightRotationZButton = new javax.swing.JButton(); - rightRotationYButton = new javax.swing.JButton(); - leftRotationZButton = new javax.swing.JButton(); - rightRotationXButton = new javax.swing.JButton(); - rotationXFTF = new javax.swing.JFormattedTextField(); - jLabel3 = new javax.swing.JLabel(); - scalePanel = new javax.swing.JPanel(); - jLabel4 = new javax.swing.JLabel(); - scalePlusButton = new javax.swing.JButton(); - scaleMinusButton = new javax.swing.JButton(); - scaleFTF = new javax.swing.JFormattedTextField(); - scaleButton = new javax.swing.JButton(); - resetAllButton = new javax.swing.JButton(); - jSeparator7 = new javax.swing.JSeparator(); - jSeparator9 = new javax.swing.JSeparator(); - shiftPanel = new javax.swing.JPanel(); - shiftLabel = new javax.swing.JLabel(); - lowShiftRB = new javax.swing.JRadioButton(); - highShiftRB = new javax.swing.JRadioButton(); - jSeparator10 = new javax.swing.JSeparator(); - applyButton = new javax.swing.JButton(); - jSeparator5 = new javax.swing.JSeparator(); - - setMinimumSize(new java.awt.Dimension(415, 700)); - setPreferredSize(new java.awt.Dimension(415, 700)); - - registrationAdjustmentLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(registrationAdjustmentLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.registrationAdjustmentLabel.text")); // NOI18N - - visualizationPanel.setMinimumSize(new java.awt.Dimension(400, 0)); - visualizationPanel.setPreferredSize(new java.awt.Dimension(400, 265)); - - visualizationLabel.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(visualizationLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.visualizationLabel.text")); // NOI18N - - modelLabel.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(modelLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.modelLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(pointsLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.pointsLabel.text")); // NOI18N - - transparencyButton.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(transparencyButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.transparencyButton.text")); // NOI18N - transparencyButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.transparencyButton.toolTipText")); // NOI18N - transparencyButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder())); - transparencyButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - transparencyButton.setPreferredSize(new java.awt.Dimension(100, 19)); - transparencyButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - transparencyButtonActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(linesLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.linesLabel.text")); // NOI18N - - colorButton.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(colorButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.colorButton.text")); // NOI18N - colorButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.colorButton.toolTipText")); // NOI18N - colorButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder())); - colorButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - colorButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - colorButton.setIconTextGap(0); - colorButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - colorButtonActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(fillLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.fillLabel.text")); // NOI18N - - renderModeLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(renderModeLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.renderModeLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(secondaryHighlightsCB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryHighlightsCB.text")); // NOI18N - secondaryHighlightsCB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - secondaryHighlightsCB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - secondaryHighlightsCBActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(primaryHighlightsCB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryHighlightsCB.text")); // NOI18N - primaryHighlightsCB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - primaryHighlightsCB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - primaryHighlightsCBActionPerformed(evt); - } - }); - - highlightsLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(highlightsLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.highlightsLabel.text")); // NOI18N - - primaryLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(primaryLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryLabel.text")); // NOI18N - - secondaryLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(secondaryLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryLabel.text")); // NOI18N - secondaryLabel.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryLabel.toolTipText")); // NOI18N - - transparencySlider.setMajorTickSpacing(5); - transparencySlider.setMaximum(20); - transparencySlider.setMinorTickSpacing(5); - transparencySlider.setOrientation(javax.swing.JSlider.VERTICAL); - transparencySlider.setPaintTicks(true); - transparencySlider.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.transparencySlider.toolTipText")); // NOI18N - transparencySlider.setValue(10); - transparencySlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - transparencySlider.addChangeListener(new javax.swing.event.ChangeListener() { - public void stateChanged(javax.swing.event.ChangeEvent evt) { - transparencySliderStateChanged(evt); - } - }); - - secondaryColorPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - secondaryColorPanel.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryColorPanel.toolTipText")); // NOI18N - secondaryColorPanel.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - secondaryColorPanel.setPreferredSize(new java.awt.Dimension(70, 14)); - secondaryColorPanel.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - secondaryColorPanelMouseClicked(evt); - } - }); - - javax.swing.GroupLayout secondaryColorPanelLayout = new javax.swing.GroupLayout(secondaryColorPanel); - secondaryColorPanel.setLayout(secondaryColorPanelLayout); - secondaryColorPanelLayout.setHorizontalGroup( - secondaryColorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 48, Short.MAX_VALUE) - ); - secondaryColorPanelLayout.setVerticalGroup( - secondaryColorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) - ); - - primaryColorPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - primaryColorPanel.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryColorPanel.toolTipText")); // NOI18N - primaryColorPanel.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - primaryColorPanel.setPreferredSize(new java.awt.Dimension(72, 14)); - primaryColorPanel.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - primaryColorPanelMouseClicked(evt); - } - }); - - javax.swing.GroupLayout primaryColorPanelLayout = new javax.swing.GroupLayout(primaryColorPanel); - primaryColorPanel.setLayout(primaryColorPanelLayout); - primaryColorPanelLayout.setHorizontalGroup( - primaryColorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 48, Short.MAX_VALUE) - ); - primaryColorPanelLayout.setVerticalGroup( - primaryColorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) - ); - - primaryRenderModeGroup.add(primaryLinesRB); - org.openide.awt.Mnemonics.setLocalizedText(primaryLinesRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryLinesRB.text")); // NOI18N - primaryLinesRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - primaryLinesRB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - primaryLinesRBActionPerformed(evt); - } - }); - - secondaryRenerModeGroup.add(secondaryFillRB); - org.openide.awt.Mnemonics.setLocalizedText(secondaryFillRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryFillRB.text")); // NOI18N - secondaryFillRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - secondaryFillRB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - secondaryFillRBActionPerformed(evt); - } - }); - - primaryRenderModeGroup.add(primaryPointsRB); - org.openide.awt.Mnemonics.setLocalizedText(primaryPointsRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryPointsRB.text")); // NOI18N - primaryPointsRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - primaryPointsRB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - primaryPointsRBActionPerformed(evt); - } - }); - - secondaryRenerModeGroup.add(secondaryPointsRB); - org.openide.awt.Mnemonics.setLocalizedText(secondaryPointsRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryPointsRB.text")); // NOI18N - secondaryPointsRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - secondaryPointsRB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - secondaryPointsRBActionPerformed(evt); - } - }); - - secondaryRenerModeGroup.add(secondaryLinesRB); - org.openide.awt.Mnemonics.setLocalizedText(secondaryLinesRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryLinesRB.text")); // NOI18N - secondaryLinesRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - secondaryLinesRB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - secondaryLinesRBActionPerformed(evt); - } - }); - - primaryRenderModeGroup.add(primaryFillRB); - org.openide.awt.Mnemonics.setLocalizedText(primaryFillRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryFillRB.text")); // NOI18N - primaryFillRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); - primaryFillRB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - primaryFillRBActionPerformed(evt); - } - }); - - javax.swing.GroupLayout modelPanelLayout = new javax.swing.GroupLayout(modelPanel); - modelPanel.setLayout(modelPanelLayout); - modelPanelLayout.setHorizontalGroup( - modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(modelPanelLayout.createSequentialGroup() - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(primaryLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(modelLabel) - .addComponent(secondaryLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGap(18, 18, 18) - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(modelPanelLayout.createSequentialGroup() - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(highlightsLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(renderModeLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(transparencyButton, javax.swing.GroupLayout.DEFAULT_SIZE, 67, Short.MAX_VALUE)) - .addGroup(modelPanelLayout.createSequentialGroup() - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(modelPanelLayout.createSequentialGroup() - .addComponent(primaryColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(primaryHighlightsCB) - .addGap(28, 28, 28) - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(modelPanelLayout.createSequentialGroup() - .addComponent(primaryFillRB) - .addGap(18, 18, 18) - .addComponent(primaryLinesRB) - .addGap(18, 18, 18) - .addComponent(primaryPointsRB)) - .addGroup(modelPanelLayout.createSequentialGroup() - .addComponent(secondaryFillRB) - .addGap(18, 18, 18) - .addComponent(secondaryLinesRB) - .addGap(18, 18, 18) - .addComponent(secondaryPointsRB)) - .addGroup(modelPanelLayout.createSequentialGroup() - .addComponent(fillLabel) - .addGap(18, 18, 18) - .addComponent(linesLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(pointsLabel)))) - .addGroup(modelPanelLayout.createSequentialGroup() - .addComponent(secondaryColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(secondaryHighlightsCB))) - .addGap(18, 18, 18) - .addComponent(transparencySlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - modelPanelLayout.setVerticalGroup( - modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(modelPanelLayout.createSequentialGroup() - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(highlightsLabel) - .addComponent(renderModeLabel) - .addComponent(transparencyButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(colorButton)) - .addGap(4, 4, 4) - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(modelPanelLayout.createSequentialGroup() - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(fillLabel) - .addComponent(pointsLabel) - .addComponent(linesLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(primaryPointsRB) - .addGap(0, 0, Short.MAX_VALUE)) - .addComponent(transparencySlider, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))) - .addGroup(modelPanelLayout.createSequentialGroup() - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(secondaryColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(modelPanelLayout.createSequentialGroup() - .addComponent(modelLabel) - .addGap(29, 29, 29) - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(primaryHighlightsCB) - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(primaryColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(primaryLabel)) - .addComponent(primaryFillRB) - .addComponent(primaryLinesRB)) - .addGap(14, 14, 14) - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(secondaryLabel) - .addComponent(secondaryHighlightsCB, javax.swing.GroupLayout.Alignment.TRAILING)) - .addComponent(secondaryFillRB) - .addComponent(secondaryLinesRB) - .addComponent(secondaryPointsRB)))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - org.openide.awt.Mnemonics.setLocalizedText(profileButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.profileButton.text")); // NOI18N - profileButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.profileButton.toolTipText")); // NOI18N - profileButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder())); - profileButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - profileButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - profileButtonActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(frontButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.frontButton.text")); // NOI18N - frontButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.frontButton.toolTipText")); // NOI18N - frontButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder())); - frontButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - frontButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - frontButtonActionPerformed(evt); - } - }); - - viewLabel.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(viewLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.viewLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(backfaceButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.backfaceButton.text")); // NOI18N - backfaceButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder())); - backfaceButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - backfaceButtonActionPerformed(evt); - } - }); - - javax.swing.GroupLayout viewPanelLayout = new javax.swing.GroupLayout(viewPanel); - viewPanel.setLayout(viewPanelLayout); - viewPanelLayout.setHorizontalGroup( - viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(viewPanelLayout.createSequentialGroup() - .addComponent(viewLabel) - .addGap(18, 18, 18) - .addComponent(frontButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(profileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(backfaceButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - viewPanelLayout.setVerticalGroup( - viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(viewLabel) - .addComponent(frontButton) - .addComponent(profileButton) - .addComponent(backfaceButton)) - ); - - org.openide.awt.Mnemonics.setLocalizedText(featurePointsButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.featurePointsButton.text")); // NOI18N - featurePointsButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - featurePointsButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - featurePointsButtonActionPerformed(evt); - } - }); - - thresholdDownButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/subtract-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(thresholdDownButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.thresholdDownButton.text")); // NOI18N - thresholdDownButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - thresholdDownButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - thresholdDownButton.setEnabled(false); - thresholdDownButton.setMaximumSize(new java.awt.Dimension(24, 24)); - thresholdDownButton.setMinimumSize(new java.awt.Dimension(24, 24)); - thresholdDownButton.setPreferredSize(new java.awt.Dimension(24, 24)); - thresholdDownButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - thresholdDownButtonActionPerformed(evt); - } - }); - - thersholdUpButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(thersholdUpButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.thersholdUpButton.text")); // NOI18N - thersholdUpButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - thersholdUpButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - thersholdUpButton.setEnabled(false); - thersholdUpButton.setMaximumSize(new java.awt.Dimension(24, 24)); - thersholdUpButton.setMinimumSize(new java.awt.Dimension(24, 24)); - thersholdUpButton.setPreferredSize(new java.awt.Dimension(24, 24)); - thersholdUpButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - thersholdUpButtonActionPerformed(evt); - } - }); - - thersholdButton.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(thersholdButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.thersholdButton.text")); // NOI18N - thersholdButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - thersholdButton.setEnabled(false); - thersholdButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - thersholdButtonActionPerformed(evt); - } - }); - - thersholdFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); - thersholdFTF.setEnabled(false); - thersholdFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() { - public void propertyChange(java.beans.PropertyChangeEvent evt) { - thersholdFTFPropertyChange(evt); - } - }); - - featurePointsLabel.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(featurePointsLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.featurePointsLabel.text")); // NOI18N - - javax.swing.GroupLayout featurePointsPanelLayout = new javax.swing.GroupLayout(featurePointsPanel); - featurePointsPanel.setLayout(featurePointsPanelLayout); - featurePointsPanelLayout.setHorizontalGroup( - featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(featurePointsPanelLayout.createSequentialGroup() - .addComponent(featurePointsLabel) - .addGap(18, 18, 18) - .addComponent(featurePointsButton, javax.swing.GroupLayout.DEFAULT_SIZE, 43, Short.MAX_VALUE) - .addGap(18, 18, 18) - .addComponent(thersholdButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(thersholdFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(thersholdUpButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(thresholdDownButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - ); - featurePointsPanelLayout.setVerticalGroup( - featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(featurePointsLabel) - .addComponent(featurePointsButton) - .addComponent(thersholdButton) - .addComponent(thersholdFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(thersholdUpButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(thresholdDownButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - ); - - javax.swing.GroupLayout visualizationPanelLayout = new javax.swing.GroupLayout(visualizationPanel); - visualizationPanel.setLayout(visualizationPanelLayout); - visualizationPanelLayout.setHorizontalGroup( - visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(visualizationPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(jSeparator1) - .addComponent(jSeparator4) - .addComponent(jSeparator8) - .addComponent(visualizationLabel) - .addComponent(modelPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(featurePointsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(viewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap(12, Short.MAX_VALUE)) - .addComponent(jSeparator3) - ); - visualizationPanelLayout.setVerticalGroup( - visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, visualizationPanelLayout.createSequentialGroup() - .addComponent(visualizationLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jSeparator4, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(modelPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator8, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(viewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(featurePointsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(34, 34, 34) - .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(19, 19, 19)) - ); - - transformationPanel.setPreferredSize(new java.awt.Dimension(400, 400)); - - transformationLabel.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(transformationLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.transformationLabel.text")); // NOI18N - - translationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(translationButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translationButton.text")); // NOI18N - translationButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translationButton.toolTipText")); // NOI18N - translationButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - translationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - translationButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - translationButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - translationButtonActionPerformed(evt); - } - }); - - jLabel2.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.jLabel2.text")); // NOI18N - - rightTranslationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rightTranslationXButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightTranslationXButton.text")); // NOI18N - rightTranslationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - rightTranslationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - rightTranslationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - rightTranslationXButton.setMaximumSize(new java.awt.Dimension(24, 24)); - rightTranslationXButton.setMinimumSize(new java.awt.Dimension(24, 24)); - rightTranslationXButton.setPreferredSize(new java.awt.Dimension(24, 24)); - rightTranslationXButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - rightTranslationXButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - rightTranslationXButtonMouseReleased(evt); - } - }); - - translationXFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); - translationXFTF.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translationXFTF.toolTipText")); // NOI18N - translationXFTF.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR)); - translationXFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() { - public void propertyChange(java.beans.PropertyChangeEvent evt) { - translationXFTFPropertyChange(evt); - } - }); - - leftTranslationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(leftTranslationYButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftTranslationYButton.text")); // NOI18N - leftTranslationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - leftTranslationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - leftTranslationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - leftTranslationYButton.setPreferredSize(new java.awt.Dimension(24, 24)); - leftTranslationYButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - leftTranslationYButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - leftTranslationYButtonMouseReleased(evt); - } - }); - - translationYFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); - translationYFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() { - public void propertyChange(java.beans.PropertyChangeEvent evt) { - translationYFTFPropertyChange(evt); - } - }); - - rightTranslationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rightTranslationYButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightTranslationYButton.text")); // NOI18N - rightTranslationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - rightTranslationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - rightTranslationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - rightTranslationYButton.setPreferredSize(new java.awt.Dimension(24, 24)); - rightTranslationYButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - rightTranslationYButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - rightTranslationYButtonMouseReleased(evt); - } - }); - - translXLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(translXLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translXLabel.text")); // NOI18N - - translationZFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); - translationZFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() { - public void propertyChange(java.beans.PropertyChangeEvent evt) { - translationZFTFPropertyChange(evt); - } - }); - - translZLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(translZLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translZLabel.text")); // NOI18N - - translYLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(translYLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translYLabel.text")); // NOI18N - - rightTranslationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rightTranslationZButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightTranslationZButton.text")); // NOI18N - rightTranslationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - rightTranslationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - rightTranslationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - rightTranslationZButton.setPreferredSize(new java.awt.Dimension(24, 24)); - rightTranslationZButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - rightTranslationZButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - rightTranslationZButtonMouseReleased(evt); - } - }); - - leftTranslationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(leftTranslationXButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftTranslationXButton.text")); // NOI18N - leftTranslationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - leftTranslationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - leftTranslationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - leftTranslationXButton.setMaximumSize(new java.awt.Dimension(24, 24)); - leftTranslationXButton.setMinimumSize(new java.awt.Dimension(24, 24)); - leftTranslationXButton.setPreferredSize(new java.awt.Dimension(24, 24)); - leftTranslationXButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - leftTranslationXButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - leftTranslationXButtonMouseReleased(evt); - } - }); - - leftTranslationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(leftTranslationZButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftTranslationZButton.text")); // NOI18N - leftTranslationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - leftTranslationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - leftTranslationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - leftTranslationZButton.setPreferredSize(new java.awt.Dimension(24, 24)); - leftTranslationZButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - leftTranslationZButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - leftTranslationZButtonMouseReleased(evt); - } - }); - - javax.swing.GroupLayout translationPanelLayout = new javax.swing.GroupLayout(translationPanel); - translationPanel.setLayout(translationPanelLayout); - translationPanelLayout.setHorizontalGroup( - translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(translationPanelLayout.createSequentialGroup() - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(translationPanelLayout.createSequentialGroup() - .addComponent(jLabel2) - .addGap(28, 28, 28)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, translationPanelLayout.createSequentialGroup() - .addComponent(translationButton) - .addGap(18, 18, 18))) - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(translXLabel) - .addComponent(translationXFTF) - .addGroup(translationPanelLayout.createSequentialGroup() - .addComponent(leftTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(rightTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addGap(18, 18, 18) - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(translationPanelLayout.createSequentialGroup() - .addComponent(leftTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(rightTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(translYLabel) - .addComponent(translationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(translationPanelLayout.createSequentialGroup() - .addComponent(leftTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(rightTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(translationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(translZLabel)) - .addContainerGap(14, Short.MAX_VALUE)) - ); - translationPanelLayout.setVerticalGroup( - translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(translationPanelLayout.createSequentialGroup() - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(translXLabel) - .addComponent(translYLabel) - .addComponent(translZLabel)) - .addComponent(jLabel2)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(translationPanelLayout.createSequentialGroup() - .addComponent(rightTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, Short.MAX_VALUE)) - .addGroup(translationPanelLayout.createSequentialGroup() - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(leftTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(rightTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(translationPanelLayout.createSequentialGroup() - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rightTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(leftTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(translationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(translationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(translationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addComponent(translationButton)) - .addComponent(leftTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - ); - - leftRotationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(leftRotationYButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftRotationYButton.text")); // NOI18N - leftRotationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - leftRotationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - leftRotationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - leftRotationYButton.setMaximumSize(new java.awt.Dimension(24, 24)); - leftRotationYButton.setMinimumSize(new java.awt.Dimension(24, 24)); - leftRotationYButton.setPreferredSize(new java.awt.Dimension(24, 24)); - leftRotationYButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - leftRotationYButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - leftRotationYButtonMouseReleased(evt); - } - }); - - leftRotationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(leftRotationXButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftRotationXButton.text")); // NOI18N - leftRotationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - leftRotationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - leftRotationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - leftRotationXButton.setPreferredSize(new java.awt.Dimension(24, 24)); - leftRotationXButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - leftRotationXButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - leftRotationXButtonMouseReleased(evt); - } - }); - - rotatZLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rotatZLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotatZLabel.text")); // NOI18N - - rotatYLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rotatYLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotatYLabel.text")); // NOI18N - - rotatXLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rotatXLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotatXLabel.text")); // NOI18N - - rotationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rotationButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotationButton.text")); // NOI18N - rotationButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotationButton.toolTipText")); // NOI18N - rotationButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - rotationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - rotationButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - rotationButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - rotationButtonActionPerformed(evt); - } - }); - - rotationZFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); - rotationZFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() { - public void propertyChange(java.beans.PropertyChangeEvent evt) { - rotationZFTFPropertyChange(evt); - } - }); - - rotationYFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); - rotationYFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() { - public void propertyChange(java.beans.PropertyChangeEvent evt) { - rotationYFTFPropertyChange(evt); - } - }); - - rightRotationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rightRotationZButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightRotationZButton.text")); // NOI18N - rightRotationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - rightRotationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - rightRotationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - rightRotationZButton.setMaximumSize(new java.awt.Dimension(24, 24)); - rightRotationZButton.setMinimumSize(new java.awt.Dimension(24, 24)); - rightRotationZButton.setPreferredSize(new java.awt.Dimension(24, 24)); - rightRotationZButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - rightRotationZButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - rightRotationZButtonMouseReleased(evt); - } - }); - - rightRotationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rightRotationYButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightRotationYButton.text")); // NOI18N - rightRotationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - rightRotationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - rightRotationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - rightRotationYButton.setMaximumSize(new java.awt.Dimension(24, 24)); - rightRotationYButton.setMinimumSize(new java.awt.Dimension(24, 24)); - rightRotationYButton.setPreferredSize(new java.awt.Dimension(24, 24)); - rightRotationYButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - rightRotationYButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - rightRotationYButtonMouseReleased(evt); - } - }); - - leftRotationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(leftRotationZButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftRotationZButton.text")); // NOI18N - leftRotationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - leftRotationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - leftRotationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - leftRotationZButton.setMaximumSize(new java.awt.Dimension(24, 24)); - leftRotationZButton.setMinimumSize(new java.awt.Dimension(24, 24)); - leftRotationZButton.setPreferredSize(new java.awt.Dimension(24, 24)); - leftRotationZButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - leftRotationZButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - leftRotationZButtonMouseReleased(evt); - } - }); - - rightRotationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(rightRotationXButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightRotationXButton.text")); // NOI18N - rightRotationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - rightRotationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - rightRotationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - rightRotationXButton.setMaximumSize(new java.awt.Dimension(24, 24)); - rightRotationXButton.setMinimumSize(new java.awt.Dimension(24, 24)); - rightRotationXButton.setPreferredSize(new java.awt.Dimension(24, 24)); - rightRotationXButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - rightRotationXButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - rightRotationXButtonMouseReleased(evt); - } - }); - - rotationXFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); - rotationXFTF.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotationXFTF.toolTipText")); // NOI18N - rotationXFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() { - public void propertyChange(java.beans.PropertyChangeEvent evt) { - rotationXFTFPropertyChange(evt); - } - }); - - jLabel3.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.jLabel3.text")); // NOI18N - - javax.swing.GroupLayout rotationPanelLayout = new javax.swing.GroupLayout(rotationPanel); - rotationPanel.setLayout(rotationPanelLayout); - rotationPanelLayout.setHorizontalGroup( - rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rotationPanelLayout.createSequentialGroup() - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rotationPanelLayout.createSequentialGroup() - .addGap(48, 48, 48) - .addComponent(rotationButton)) - .addComponent(jLabel3)) - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rotationPanelLayout.createSequentialGroup() - .addGap(18, 18, 18) - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rotatXLabel) - .addGroup(rotationPanelLayout.createSequentialGroup() - .addComponent(leftRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(rightRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, rotationPanelLayout.createSequentialGroup() - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(rotationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addGap(21, 21, 21) - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rotationPanelLayout.createSequentialGroup() - .addComponent(leftRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(rightRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(rotationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(rotatYLabel)) - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rotationPanelLayout.createSequentialGroup() - .addGap(22, 22, 22) - .addComponent(rotatZLabel)) - .addGroup(rotationPanelLayout.createSequentialGroup() - .addGap(18, 18, 18) - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rotationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(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) - .addComponent(rightRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - rotationPanelLayout.setVerticalGroup( - rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rotationPanelLayout.createSequentialGroup() - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(rotatXLabel) - .addComponent(jLabel3)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(rotatYLabel) - .addComponent(rotatZLabel))) - .addGap(6, 6, 6) - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(rotationButton) - .addGroup(rotationPanelLayout.createSequentialGroup() - .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rightRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(leftRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .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) - .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(rotationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(rotationXFTF, 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)))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - jLabel4.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.jLabel4.text")); // NOI18N - - scalePlusButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(scalePlusButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scalePlusButton.text")); // NOI18N - scalePlusButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - scalePlusButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - scalePlusButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - scalePlusButton.setMaximumSize(new java.awt.Dimension(24, 24)); - scalePlusButton.setMinimumSize(new java.awt.Dimension(24, 24)); - scalePlusButton.setPreferredSize(new java.awt.Dimension(24, 24)); - scalePlusButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - scalePlusButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - scalePlusButtonMouseReleased(evt); - } - }); - - scaleMinusButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/subtract-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(scaleMinusButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scaleMinusButton.text")); // NOI18N - scaleMinusButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - scaleMinusButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - scaleMinusButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - scaleMinusButton.setMaximumSize(new java.awt.Dimension(24, 24)); - scaleMinusButton.setMinimumSize(new java.awt.Dimension(24, 24)); - scaleMinusButton.setPreferredSize(new java.awt.Dimension(24, 24)); - scaleMinusButton.addMouseListener(new java.awt.event.MouseAdapter() { - public void mousePressed(java.awt.event.MouseEvent evt) { - scaleMinusButtonMousePressed(evt); - } - public void mouseReleased(java.awt.event.MouseEvent evt) { - scaleMinusButtonMouseReleased(evt); - } - }); - - scaleFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); - scaleFTF.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scaleFTF.toolTipText")); // NOI18N - scaleFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() { - public void propertyChange(java.beans.PropertyChangeEvent evt) { - scaleFTFPropertyChange(evt); - } - }); - - scaleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(scaleButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scaleButton.text")); // NOI18N - scaleButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scaleButton.toolTipText")); // NOI18N - scaleButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - scaleButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - scaleButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); - scaleButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - scaleButtonActionPerformed(evt); - } - }); - - javax.swing.GroupLayout scalePanelLayout = new javax.swing.GroupLayout(scalePanel); - scalePanel.setLayout(scalePanelLayout); - scalePanelLayout.setHorizontalGroup( - scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup() - .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(scalePanelLayout.createSequentialGroup() - .addComponent(jLabel4) - .addGap(0, 42, Short.MAX_VALUE)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(scaleButton))) - .addGap(18, 18, 18) - .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup() - .addComponent(scalePlusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(scaleMinusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(scaleFTF, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap()) - ); - scalePanelLayout.setVerticalGroup( - scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(scalePanelLayout.createSequentialGroup() - .addGap(1, 1, 1) - .addComponent(jLabel4) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(scaleButton)) - .addGroup(scalePanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(scaleMinusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(scalePlusButton, 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(scaleFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - ); - - resetAllButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/refresh-line.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(resetAllButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.resetAllButton.text")); // NOI18N - resetAllButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.resetAllButton.toolTipText")); // NOI18N - resetAllButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - resetAllButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - resetAllButtonActionPerformed(evt); - } - }); - - jSeparator9.setOrientation(javax.swing.SwingConstants.VERTICAL); - - shiftLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(shiftLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.shiftLabel.text")); // NOI18N - shiftLabel.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.shiftLabel.toolTipText")); // NOI18N - - precisionGroup.add(lowShiftRB); - org.openide.awt.Mnemonics.setLocalizedText(lowShiftRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.lowShiftRB.text")); // NOI18N - lowShiftRB.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.lowShiftRB.toolTipText")); // NOI18N - lowShiftRB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - lowShiftRBActionPerformed(evt); - } - }); - - precisionGroup.add(highShiftRB); - org.openide.awt.Mnemonics.setLocalizedText(highShiftRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.highShiftRB.text")); // NOI18N - highShiftRB.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.highShiftRB.toolTipText")); // NOI18N - highShiftRB.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - highShiftRBActionPerformed(evt); - } - }); - - javax.swing.GroupLayout shiftPanelLayout = new javax.swing.GroupLayout(shiftPanel); - shiftPanel.setLayout(shiftPanelLayout); - shiftPanelLayout.setHorizontalGroup( - shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(shiftPanelLayout.createSequentialGroup() - .addGroup(shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(lowShiftRB) - .addComponent(highShiftRB)) - .addGap(0, 8, Short.MAX_VALUE)) - .addGroup(shiftPanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(shiftLabel) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - shiftPanelLayout.setVerticalGroup( - shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(shiftPanelLayout.createSequentialGroup() - .addComponent(shiftLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(lowShiftRB) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(highShiftRB) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - jSeparator10.setOrientation(javax.swing.SwingConstants.VERTICAL); - - org.openide.awt.Mnemonics.setLocalizedText(applyButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.applyButton.text")); // NOI18N - applyButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.applyButton.toolTipText")); // NOI18N - applyButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - applyButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); - applyButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - applyButtonActionPerformed(evt); - } - }); - - javax.swing.GroupLayout transformationPanelLayout = new javax.swing.GroupLayout(transformationPanel); - transformationPanel.setLayout(transformationPanelLayout); - transformationPanelLayout.setHorizontalGroup( - transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(transformationPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rotationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(transformationPanelLayout.createSequentialGroup() - .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(transformationLabel) - .addComponent(jSeparator6, javax.swing.GroupLayout.DEFAULT_SIZE, 371, Short.MAX_VALUE) - .addComponent(jSeparator2)) - .addComponent(translationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jSeparator7, javax.swing.GroupLayout.PREFERRED_SIZE, 371, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(transformationPanelLayout.createSequentialGroup() - .addComponent(scalePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator9, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(shiftPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator10, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(resetAllButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(applyButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) - .addComponent(jSeparator5, javax.swing.GroupLayout.Alignment.TRAILING) - ); - transformationPanelLayout.setVerticalGroup( - transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(transformationPanelLayout.createSequentialGroup() - .addComponent(transformationLabel) - .addGap(13, 13, 13) - .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(1, 1, 1) - .addComponent(translationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator6, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(rotationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator7, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(transformationPanelLayout.createSequentialGroup() - .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(applyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jSeparator10, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGroup(transformationPanelLayout.createSequentialGroup() - .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(transformationPanelLayout.createSequentialGroup() - .addComponent(scalePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(7, 7, 7)) - .addComponent(jSeparator9, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(shiftPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(resetAllButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - .addComponent(jSeparator5, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)) - ); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSeparator11, javax.swing.GroupLayout.DEFAULT_SIZE, 415, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(registrationAdjustmentLabel)) - .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(visualizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(registrationAdjustmentLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator11, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(visualizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 244, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 333, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(67, Short.MAX_VALUE)) - ); - }// </editor-fold>//GEN-END:initComponents - - /** - * Creates color chooser to change primary color - * @param evt - */ - private void primaryColorPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_primaryColorPanelMouseClicked - if (transparencySlider.getValue() == 0) { - return; - } - Color current = primaryColorPanel.getBackground(); - Color newColor = JColorChooser.showDialog(null, "Choose a color", current); - if (newColor != null) { - primaryColorPanel.setBackground(newColor); - listener.setPrimaryColor(newColor); - } - }//GEN-LAST:event_primaryColorPanelMouseClicked - - /** - * Creates color chooser to change secondary color - * @param evt - */ - private void secondaryColorPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_secondaryColorPanelMouseClicked - if (transparencySlider.getValue() == 2*PostRegistrationListener.TRANSPARENCY_RANGE) { - return; - } - Color current = secondaryColorPanel.getBackground(); - Color newColor = JColorChooser.showDialog(null, "Choose a color", current); - if (newColor != null) { - secondaryColorPanel.setBackground(newColor); - listener.setSecondaryColor(newColor); - } - }//GEN-LAST:event_secondaryColorPanelMouseClicked - - /** - * Resets transparency slider to default position - * @param evt - */ - private void transparencyButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_transparencyButtonActionPerformed - transparencySlider.setValue(PostRegistrationListener.TRANSPARENCY_RANGE); - transparencySlider.repaint(); - listener.setTransparency(PostRegistrationListener.TRANSPARENCY_RANGE); - }//GEN-LAST:event_transparencyButtonActionPerformed - - /** - * Disables buttons if set to maximum or minimum - * Sets transparency - * @param evt - */ - private void transparencySliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_transparencySliderStateChanged - int transparency = transparencySlider.getValue(); - if (transparency == 0) { - primaryColorPanel.setBackground(Color.lightGray); - primaryHighlightsCB.setEnabled(false); - primaryHighlightsCB.setEnabled(false); - primaryFillRB.setEnabled(false); - primaryLinesRB.setEnabled(false); - primaryPointsRB.setEnabled(false); - } else if (transparency == 2*PostRegistrationListener.TRANSPARENCY_RANGE) { - secondaryColorPanel.setBackground(Color.lightGray); - secondaryHighlightsCB.setEnabled(false); - secondaryHighlightsCB.setEnabled(false); - secondaryFillRB.setEnabled(false); - secondaryLinesRB.setEnabled(false); - secondaryPointsRB.setEnabled(false); - } else if (!primaryFillRB.isEnabled()) { - primaryColorPanel.setBackground(listener.getPrimaryColor()); - primaryHighlightsCB.setEnabled(true); - primaryHighlightsCB.setEnabled(true); - primaryFillRB.setEnabled(true); - primaryLinesRB.setEnabled(true); - primaryPointsRB.setEnabled(true); - } else if (!secondaryFillRB.isEnabled()) { - secondaryColorPanel.setBackground(listener.getSecondaryColor()); - secondaryHighlightsCB.setEnabled(true); - secondaryHighlightsCB.setEnabled(true); - secondaryFillRB.setEnabled(true); - secondaryLinesRB.setEnabled(true); - secondaryPointsRB.setEnabled(true); - } - listener.setTransparency(transparency); - }//GEN-LAST:event_transparencySliderStateChanged - - /** - * Sets front facing - * @param evt - */ - private void frontButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_frontButtonActionPerformed - listener.setFrontFacing(); - }//GEN-LAST:event_frontButtonActionPerformed - - /** - * Sets side facing - * @param evt - */ - private void profileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_profileButtonActionPerformed - listener.setSideFacing(); - }//GEN-LAST:event_profileButtonActionPerformed - - /** - * Resets translation - * @param evt - */ - private void translationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_translationButtonActionPerformed - translationXFTF.setValue(0); - translationYFTF.setValue(0); - translationZFTF.setValue(0); - listener.resetTranslation(); - }//GEN-LAST:event_translationButtonActionPerformed - - /** - * Resets rotation - * @param evt - */ - private void rotationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rotationButtonActionPerformed - rotationXFTF.setValue(0); - rotationYFTF.setValue(0); - rotationZFTF.setValue(0); - listener.resetRotation(); - }//GEN-LAST:event_rotationButtonActionPerformed - - /** - * Resets scale - * @param evt - */ - private void scaleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scaleButtonActionPerformed - scaleFTF.setValue(0); - listener.resetScale(); - }//GEN-LAST:event_scaleButtonActionPerformed - - /** - * Resetes all transformations - * @param evt - */ - private void resetAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetAllButtonActionPerformed - translationButtonActionPerformed(evt); - rotationButtonActionPerformed(evt); - scaleButtonActionPerformed(evt); - }//GEN-LAST:event_resetAllButtonActionPerformed - - /** - * Sets new translation on X-axis - * @param evt - */ - private void translationXFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_translationXFTFPropertyChange - double value = ((Number)translationXFTF.getValue()).doubleValue(); - listener.setXTranslation(value); - }//GEN-LAST:event_translationXFTFPropertyChange - - /** - * Sets new translation on Y-axis - * @param evt - */ - private void translationYFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_translationYFTFPropertyChange - double value = ((Number)translationYFTF.getValue()).doubleValue(); - listener.setYTranslation(value); - }//GEN-LAST:event_translationYFTFPropertyChange - - /** - * Sets new translation on Z-axis - * @param evt - */ - private void translationZFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_translationZFTFPropertyChange - double value = ((Number)translationZFTF.getValue()).doubleValue(); - listener.setZTranslation(value); - }//GEN-LAST:event_translationZFTFPropertyChange - - /** - * Sets new rotation on X-axis - * @param evt - */ - private void rotationXFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_rotationXFTFPropertyChange - double value = ((Number)rotationXFTF.getValue()).doubleValue(); - listener.setXRotation(value); - }//GEN-LAST:event_rotationXFTFPropertyChange - - /** - * Sets new rotation on Y-axis - * @param evt - */ - private void rotationYFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_rotationYFTFPropertyChange - double value = ((Number)rotationYFTF.getValue()).doubleValue(); - listener.setYRotation(value); - }//GEN-LAST:event_rotationYFTFPropertyChange - - /** - * Sets new rotation o Z-axis - * @param evt - */ - private void rotationZFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_rotationZFTFPropertyChange - double value = ((Number)rotationZFTF.getValue()).doubleValue(); - listener.setZRotation(value); - }//GEN-LAST:event_rotationZFTFPropertyChange - - /** - * Sets new scale - * @param evt - */ - private void scaleFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_scaleFTFPropertyChange - double value = ((Number)scaleFTF.getValue()).doubleValue(); - listener.setScale(value); - }//GEN-LAST:event_scaleFTFPropertyChange - - /** - * Adds or removes highlights of primary face - * @param evt - */ - private void primaryHighlightsCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_primaryHighlightsCBActionPerformed - if (primaryHighlightsCB.isSelected()) { - listener.setPrimaryHighlights(); - } else { - listener.removePrimaryHighlights(); - } - }//GEN-LAST:event_primaryHighlightsCBActionPerformed - - /** - * Adds or removes highlights of secondary face - * @param evt - */ - private void secondaryHighlightsCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_secondaryHighlightsCBActionPerformed - if (secondaryHighlightsCB.isSelected()) { - listener.setSecondaryHighlights(); - } else { - listener.removeSecondaryHighlights(); - } - }//GEN-LAST:event_secondaryHighlightsCBActionPerformed - - /** - * Sets primary face to render solid - * @param evt - */ - private void primaryFillRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_primaryFillRBActionPerformed - listener.setPrimaryFill(); - }//GEN-LAST:event_primaryFillRBActionPerformed - - /** - * Sets primary face to render as lines - * @param evt - */ - private void primaryLinesRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_primaryLinesRBActionPerformed - listener.setPrimaryLines(); - }//GEN-LAST:event_primaryLinesRBActionPerformed - - /** - * Sets primary face to render as points - * @param evt - */ - private void primaryPointsRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_primaryPointsRBActionPerformed - listener.setPrimaryPoints(); - }//GEN-LAST:event_primaryPointsRBActionPerformed - - /** - * Sets secondary face to render solid - * @param evt - */ - private void secondaryFillRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_secondaryFillRBActionPerformed - listener.setSecondaryFill(); - }//GEN-LAST:event_secondaryFillRBActionPerformed - - /** - * Sets secondary face to render as lines - * @param evt - */ - private void secondaryLinesRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_secondaryLinesRBActionPerformed - listener.setSecondaryLines(); - }//GEN-LAST:event_secondaryLinesRBActionPerformed - - /** - * Sets secondary face to render as points - * @param evt - */ - private void secondaryPointsRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_secondaryPointsRBActionPerformed - listener.setSecondaryPoints(); - }//GEN-LAST:event_secondaryPointsRBActionPerformed - - /** - * Resets colors to default - * @param evt - */ - private void colorButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_colorButtonActionPerformed - primaryColorPanel.setBackground(PostRegistrationListener.DEFAULT_PRIMARY_COLOR); - secondaryColorPanel.setBackground(PostRegistrationListener.DEFAULT_SECONDARY_COLOR); - listener.setDeafultColor(); - }//GEN-LAST:event_colorButtonActionPerformed - - /** - * Applies performed transformations - * @param evt - */ - private void applyButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_applyButtonActionPerformed - listener.transformFace(); - resetAllButtonActionPerformed(evt); - }//GEN-LAST:event_applyButtonActionPerformed - - /** - * Disables or enables feature points options and shows/hides feature points - * @param evt - */ - private void featurePointsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_featurePointsButtonActionPerformed - if (listener.areFeaturePointsActive()) { - featurePointsButton.setText("show"); - thersholdButton.setEnabled(false); - thersholdFTF.setEnabled(false); - thersholdUpButton.setEnabled(false); - thresholdDownButton.setEnabled(false); - listener.setFeaturePointsActive(false); - } else { - featurePointsButton.setText("hide"); - thersholdButton.setEnabled(true); - thersholdFTF.setEnabled(true); - thersholdUpButton.setEnabled(true); - thresholdDownButton.setEnabled(true); - listener.setFeaturePointsActive(true); - } - }//GEN-LAST:event_featurePointsButtonActionPerformed - - /** - * Sets new feature points thershold value - * @param evt - */ - private void thersholdFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_thersholdFTFPropertyChange - listener.setFeaturePointsThreshold(((Number)thersholdFTF.getValue()).doubleValue()); - }//GEN-LAST:event_thersholdFTFPropertyChange - - /** - * Starts animation of negative translation on X-axis - * @param evt - */ - private void leftTranslationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationXButtonMousePressed - animator.startModelAnimation(Direction.TRANSLATE_LEFT, this); - }//GEN-LAST:event_leftTranslationXButtonMousePressed - - /** - * Stops animation of negative translation on X-axis - * @param evt - */ - private void leftTranslationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationXButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_leftTranslationXButtonMouseReleased - - /** - * Starts animation of positive translation on X-axis - * @param evt - */ - private void rightTranslationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationXButtonMousePressed - animator.startModelAnimation(Direction.TRANSLATE_RIGHT, this); - }//GEN-LAST:event_rightTranslationXButtonMousePressed - - /** - * Stops animation of positive translation on X-axis - * @param evt - */ - private void rightTranslationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationXButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_rightTranslationXButtonMouseReleased - - /** - * Starts animation of negative translation on Y-axis - * @param evt - */ - private void leftTranslationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationYButtonMousePressed - animator.startModelAnimation(Direction.TRANSLATE_UP, this); - }//GEN-LAST:event_leftTranslationYButtonMousePressed - - /** - * Stops animation of negative translation on Y-axis - * @param evt - */ - private void leftTranslationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationYButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_leftTranslationYButtonMouseReleased - - /** - * Starts animation of positive translation on Y-axis - * @param evt - */ - private void rightTranslationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationYButtonMousePressed - animator.startModelAnimation(Direction.TRANSLATE_DOWN, this); - }//GEN-LAST:event_rightTranslationYButtonMousePressed - - /** - * Stops animation of positive translation on Y-axis - * @param evt - */ - private void rightTranslationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationYButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_rightTranslationYButtonMouseReleased - - /** - * Starts animation of negative translation on Z-axis - * @param evt - */ - private void leftTranslationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationZButtonMousePressed - animator.startModelAnimation(Direction.TRANSLATE_IN, this); - }//GEN-LAST:event_leftTranslationZButtonMousePressed - - /** - * Stops animation of negative translation on Z-axis - * @param evt - */ - private void leftTranslationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationZButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_leftTranslationZButtonMouseReleased - - /** - * Starts animation of positive translation on Z-axis - * @param evt - */ - private void rightTranslationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationZButtonMousePressed - animator.startModelAnimation(Direction.TRANSLATE_OUT, this); - }//GEN-LAST:event_rightTranslationZButtonMousePressed - - /** - * Stops animation of positive translation on Z-axis - * @param evt - */ - private void rightTranslationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationZButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_rightTranslationZButtonMouseReleased - - /** - * Starts animation of negative rotation on X-axis - * @param evt - */ - private void leftRotationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationXButtonMousePressed - animator.startModelAnimation(Direction.ROTATE_LEFT, this); - }//GEN-LAST:event_leftRotationXButtonMousePressed - - /** - * Stops animation of negative rotation on X-axis - * @param evt - */ - private void leftRotationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationXButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_leftRotationXButtonMouseReleased - - /** - * Starts animation of positive rotation on X-axis - * @param evt - */ - private void rightRotationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationXButtonMousePressed - animator.startModelAnimation(Direction.ROTATE_RIGHT, this); - }//GEN-LAST:event_rightRotationXButtonMousePressed - - /** - * Stops animation of positive rotation on X-axis - * @param evt - */ - private void rightRotationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationXButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_rightRotationXButtonMouseReleased - - /** - * Starts animation of negative rotation on Y-axis - * @param evt - */ - private void leftRotationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationYButtonMousePressed - animator.startModelAnimation(Direction.ROTATE_UP, this); - }//GEN-LAST:event_leftRotationYButtonMousePressed - - /** - * Stops animation of negative rotation on Y-axis - * @param evt - */ - private void leftRotationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationYButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_leftRotationYButtonMouseReleased - - /** - * Starts animation of positive rotation on Y-axis - * @param evt - */ - private void rightRotationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationYButtonMousePressed - animator.startModelAnimation(Direction.ROTATE_DOWN, this); - }//GEN-LAST:event_rightRotationYButtonMousePressed - - /** - * Stops animation of positive rotation on Y-axis - * @param evt - */ - private void rightRotationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationYButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_rightRotationYButtonMouseReleased - - /** - * Starts animation of negative rotation on Z-axis - * @param evt - */ - private void leftRotationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationZButtonMousePressed - animator.startModelAnimation(Direction.ROTATE_IN, this); - }//GEN-LAST:event_leftRotationZButtonMousePressed - - /** - * Stops animation of negative rotation on Z-axis - * @param evt - */ - private void leftRotationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationZButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_leftRotationZButtonMouseReleased - - /** - * Starts animation of positive rotation on Z-axis - * @param evt - */ - private void rightRotationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationZButtonMousePressed - animator.startModelAnimation(Direction.ROTATE_OUT, this); - }//GEN-LAST:event_rightRotationZButtonMousePressed - - /** - * Stops animation of positive rotation on Z-axis - * @param evt - */ - private void rightRotationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationZButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_rightRotationZButtonMouseReleased - - /** - * Starts animation of scaling down - * @param evt - */ - private void scaleMinusButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleMinusButtonMousePressed - animator.startModelAnimation(Direction.ZOOM_OUT, this); - }//GEN-LAST:event_scaleMinusButtonMousePressed - - /** - * Stops animation of scaling down - * @param evt - */ - private void scaleMinusButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleMinusButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_scaleMinusButtonMouseReleased - - /** - * Starts animation of scaling up - * @param evt - */ - private void scalePlusButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scalePlusButtonMousePressed - animator.startModelAnimation(Direction.ZOOM_IN, this); - }//GEN-LAST:event_scalePlusButtonMousePressed - - /** - * Stops animation of scaling up - * @param evt - */ - private void scalePlusButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scalePlusButtonMouseReleased - animator.stopModelAnimation(this); - }//GEN-LAST:event_scalePlusButtonMouseReleased - - /** - * Lowers feature points thershold - * @param evt - */ - private void thresholdDownButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thresholdDownButtonActionPerformed - double newValue = ((Number)thersholdFTF.getValue()).doubleValue() - 0.1; - thersholdFTF.setValue(newValue); - }//GEN-LAST:event_thresholdDownButtonActionPerformed - - /** - * Increases feature points thershold - * @param evt - */ - private void thersholdUpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thersholdUpButtonActionPerformed - double newValue = ((Number)thersholdFTF.getValue()).doubleValue() + 0.1; - thersholdFTF.setValue(newValue); - }//GEN-LAST:event_thersholdUpButtonActionPerformed - - /** - * Resets feature poitns thershold - * @param evt - */ - private void thersholdButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thersholdButtonActionPerformed - thersholdFTF.setValue(PostRegistrationListener.LOW_SHIFT_QUOTIENT); - }//GEN-LAST:event_thersholdButtonActionPerformed - - /** - * Sets transformation shifting amount to low - * @param evt - */ - private void lowShiftRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lowShiftRBActionPerformed - listener.setMoveModifier(PostRegistrationListener.LOW_SHIFT_QUOTIENT); - }//GEN-LAST:event_lowShiftRBActionPerformed - - /** - * Sets transformation shifting amount to high - * @param evt - */ - private void highShiftRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_highShiftRBActionPerformed - listener.setMoveModifier(PostRegistrationListener.HIGH_SHIFT_QUOTIENT); - }//GEN-LAST:event_highShiftRBActionPerformed - - /** - * Toggles rendering of back face on and off - * @param evt - */ - private void backfaceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backfaceButtonActionPerformed - if (listener.isShowBackfaceActive()) { - backfaceButton.setText("show backface"); - listener.setShowBackfaceActive(false); - } else { - backfaceButton.setText("hide backface"); - listener.setShowBackfaceActive(true); - } - }//GEN-LAST:event_backfaceButtonActionPerformed - - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton applyButton; - private javax.swing.JToggleButton backfaceButton; - private javax.swing.JButton colorButton; - private javax.swing.JToggleButton featurePointsButton; - private javax.swing.JLabel featurePointsLabel; - private javax.swing.JPanel featurePointsPanel; - private javax.swing.JLabel fillLabel; - private javax.swing.JButton frontButton; - private javax.swing.JRadioButton highShiftRB; - private javax.swing.JLabel highlightsLabel; - private javax.swing.JLabel jLabel2; - private javax.swing.JLabel jLabel3; - private javax.swing.JLabel jLabel4; - private javax.swing.JSeparator jSeparator1; - private javax.swing.JSeparator jSeparator10; - private javax.swing.JSeparator jSeparator11; - private javax.swing.JSeparator jSeparator2; - private javax.swing.JSeparator jSeparator3; - private javax.swing.JSeparator jSeparator4; - private javax.swing.JSeparator jSeparator5; - private javax.swing.JSeparator jSeparator6; - private javax.swing.JSeparator jSeparator7; - private javax.swing.JSeparator jSeparator8; - private javax.swing.JSeparator jSeparator9; - private javax.swing.JButton leftRotationXButton; - private javax.swing.JButton leftRotationYButton; - private javax.swing.JButton leftRotationZButton; - private javax.swing.JButton leftTranslationXButton; - private javax.swing.JButton leftTranslationYButton; - private javax.swing.JButton leftTranslationZButton; - private javax.swing.JLabel linesLabel; - private javax.swing.JRadioButton lowShiftRB; - private javax.swing.JLabel modelLabel; - private javax.swing.JPanel modelPanel; - private javax.swing.JLabel pointsLabel; - private javax.swing.ButtonGroup precisionGroup; - private javax.swing.JPanel primaryColorPanel; - private javax.swing.JRadioButton primaryFillRB; - private javax.swing.JCheckBox primaryHighlightsCB; - private javax.swing.JLabel primaryLabel; - private javax.swing.JRadioButton primaryLinesRB; - private javax.swing.JRadioButton primaryPointsRB; - private javax.swing.ButtonGroup primaryRenderModeGroup; - private javax.swing.JButton profileButton; - private javax.swing.JLabel registrationAdjustmentLabel; - private javax.swing.JLabel renderModeLabel; - private javax.swing.JButton resetAllButton; - private javax.swing.JButton rightRotationXButton; - private javax.swing.JButton rightRotationYButton; - private javax.swing.JButton rightRotationZButton; - private javax.swing.JButton rightTranslationXButton; - private javax.swing.JButton rightTranslationYButton; - private javax.swing.JButton rightTranslationZButton; - private javax.swing.JLabel rotatXLabel; - private javax.swing.JLabel rotatYLabel; - private javax.swing.JLabel rotatZLabel; - private javax.swing.JButton rotationButton; - private javax.swing.JPanel rotationPanel; - private javax.swing.JFormattedTextField rotationXFTF; - private javax.swing.JFormattedTextField rotationYFTF; - private javax.swing.JFormattedTextField rotationZFTF; - private javax.swing.JButton scaleButton; - private javax.swing.JFormattedTextField scaleFTF; - private javax.swing.JButton scaleMinusButton; - private javax.swing.JPanel scalePanel; - private javax.swing.JButton scalePlusButton; - private javax.swing.JPanel secondaryColorPanel; - private javax.swing.JRadioButton secondaryFillRB; - private javax.swing.JCheckBox secondaryHighlightsCB; - private javax.swing.JLabel secondaryLabel; - private javax.swing.JRadioButton secondaryLinesRB; - private javax.swing.JRadioButton secondaryPointsRB; - private javax.swing.ButtonGroup secondaryRenerModeGroup; - private javax.swing.JLabel shiftLabel; - private javax.swing.JPanel shiftPanel; - private javax.swing.JButton thersholdButton; - private javax.swing.JFormattedTextField thersholdFTF; - private javax.swing.JButton thersholdUpButton; - private javax.swing.JButton thresholdDownButton; - private javax.swing.JLabel transformationLabel; - private javax.swing.JPanel transformationPanel; - private javax.swing.JLabel translXLabel; - private javax.swing.JLabel translYLabel; - private javax.swing.JLabel translZLabel; - private javax.swing.JButton translationButton; - private javax.swing.JPanel translationPanel; - private javax.swing.JFormattedTextField translationXFTF; - private javax.swing.JFormattedTextField translationYFTF; - private javax.swing.JFormattedTextField translationZFTF; - private javax.swing.JButton transparencyButton; - private javax.swing.JSlider transparencySlider; - private javax.swing.JLabel viewLabel; - private javax.swing.JPanel viewPanel; - private javax.swing.JLabel visualizationLabel; - private javax.swing.JPanel visualizationPanel; - // End of variables declaration//GEN-END:variables -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationListener.java b/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationListener.java deleted file mode 100644 index f0d28d27da8df632367186ea53f7cfb1bba5646b..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationListener.java +++ /dev/null @@ -1,603 +0,0 @@ -package cz.fidentis.analyst.registration; - -import com.jogamp.opengl.GL2; -import cz.fidentis.analyst.feature.FeaturePoint; -import cz.fidentis.analyst.gui.canvas.Canvas; -import cz.fidentis.analyst.gui.scene.DrawableMesh; -import cz.fidentis.analyst.mesh.core.MeshFacet; -import cz.fidentis.analyst.mesh.core.MeshPoint; -import cz.fidentis.analyst.visitors.mesh.BoundingBox; -import java.awt.Color; -import java.util.ArrayList; -import javax.vecmath.Point3d; -import javax.vecmath.Vector3d; - -/** - * Updates primary resp. secondary {@link DrawableMesh}. - * - * @author Richard Pajersky - */ - -public class PostRegistrationListener { - - /** - * Transformation shift is higher - */ - public static final double HIGH_SHIFT_QUOTIENT = 1; - - /** - * Transformation shift is lower - */ - public static final double LOW_SHIFT_QUOTIENT = 0.1; - - /** - * Quotient which determines translation and scale amount - */ - private static final double CHANGE_QUOTIENT = 500d; - - /** - * Color used as default color of primary face - */ - public static final Color DEFAULT_PRIMARY_COLOR = new Color(101, 119, 179); - - /** - * Color used as default color of secondary face - */ - public static final Color DEFAULT_SECONDARY_COLOR = new Color(237, 217, 76); - - /** - * Range of transparency - */ - public static final int TRANSPARENCY_RANGE = 10; - - /** - * Canvas which contains faces - */ - private final Canvas canvas; - - /** - * Move amount on X-axis - */ - private final double moveX; - - /** - * Move amount on Y-axis - */ - private final double moveY; - - /** - * Move amount on Z-axis - */ - private final double moveZ; - - /** - * Scale amount in all axis - */ - private final double scaleXYZ; - - /** - * Primary face used for visualization - */ - private final DrawableMesh primaryFace; - - /** - * Secondary face used for visualization and transformation - */ - private final DrawableMesh secondaryFace; - - /** - * Transformation amount - */ - private double moveModifier = LOW_SHIFT_QUOTIENT; - - /** - * Threshold of feature points showing too far away - */ - private double featurePointsThreshold = LOW_SHIFT_QUOTIENT; - - /** - * Constructor - * First initialize {@link #canvas} then - * {@link #primaryFace} and {@link #secondaryFace} - * Then computes movement amounts based on - * {@link BoundingBox} of secondary face - * - * @param canvas Canvas with two faces - * @throws IllegalArgumentException if the canvas is {@code null} - */ - public PostRegistrationListener(Canvas canvas) { - if (canvas == null) { - throw new IllegalArgumentException("canvas is null"); - } - this.canvas = canvas; - - ArrayList<DrawableMesh> drawables = new ArrayList<>(canvas.getScene().getDrawables()); - if (drawables.size() < 2) { - throw new IllegalArgumentException("canvas doesn't contains at least 2 models"); - } - this.primaryFace = drawables.get(0); - this.secondaryFace = drawables.get(1); - setDeafultColor(); - - // set move amounts - BoundingBox visitor = new BoundingBox(); - this.secondaryFace.getModel().compute(visitor); - Point3d maxPoint = visitor.getBoundingBox().getMaxPoint(); - Point3d minPoint = visitor.getBoundingBox().getMinPoint(); - moveX = (maxPoint.x - minPoint.x) / CHANGE_QUOTIENT; - moveY = (maxPoint.y - minPoint.y) / CHANGE_QUOTIENT; - moveZ = (maxPoint.z - minPoint.z) / CHANGE_QUOTIENT; - scaleXYZ = (visitor.getBoundingBox().getMaxDiag() / (10 * CHANGE_QUOTIENT)); - } - - /** - * Calculates feature points which are too far away - * and changes their color to red - * otherwise set color to default - */ - private void calculateFeaturePoints() { - if (!primaryFace.isRenderFeaturePoints()) { - return; - } - ArrayList<Color> color = (ArrayList)secondaryFace.getFeaturePointsColor(); - for (int i = 0; i < primaryFace.getFeaturePoints().size(); i++) { - FeaturePoint primary = primaryFace.getFeaturePoints().get(i); - FeaturePoint secondary = secondaryFace.getFeaturePoints().get(i); - Point3d transformed = new Point3d(secondary.getX(), secondary.getY(), secondary.getZ()); - transformPoint(transformed); - double distance = Math.sqrt( - Math.pow(transformed.x - primary.getX(), 2) + - Math.pow(transformed.y - primary.getY(), 2) + - Math.pow(transformed.z - primary.getZ(), 2)); - if (distance > featurePointsThreshold) { - color.set(i, Color.RED); - } else { - color.set(i, DEFAULT_SECONDARY_COLOR); - } - } - } - - /** - * Applies carried out transformations - * first on {@link #secondaryFace} - * and then on {@link #secondaryFace} feature points - */ - public void transformFace() { - for (MeshFacet transformedFacet : secondaryFace.getFacets()) { - for (MeshPoint comparedPoint : transformedFacet.getVertices()) { - transformPoint(comparedPoint.getPosition()); - } - } - for (int i = 0; i < secondaryFace.getFeaturePoints().size(); i++) { - FeaturePoint point = secondaryFace.getFeaturePoints().get(i); - Point3d transformed = new Point3d(point.getX(), point.getY(), point.getZ()); - transformPoint(transformed); - point = new FeaturePoint(transformed.x, transformed.y, - transformed.z, point.getFeaturePointType()); - secondaryFace.getFeaturePoints().set(i, point); - } - } - - /** - * Transforms point based on transformation info from {@link #secondaryFace} - * - * @param point Point to transform - */ - public void transformPoint(Point3d point) { - if (point == null) { - throw new IllegalArgumentException("point is null"); - } - - Point3d newPoint = new Point3d(0, 0, 0); - double quotient; - - // rotate around X - quotient = Math.toRadians(secondaryFace.getRotation().x); - if (!Double.isNaN(quotient)) { - double cos = Math.cos(quotient); - double sin = Math.sin(quotient); - newPoint.y = point.y * cos - point.z * sin; - newPoint.z = point.z * cos + point.y * sin; - point.y = newPoint.y; - point.z = newPoint.z; - } - - // rotate around Y - quotient = Math.toRadians(secondaryFace.getRotation().y); - if (!Double.isNaN(quotient)) { - double cos = Math.cos(quotient); - double sin = Math.sin(quotient); - newPoint.x = point.x * cos + point.z * sin; - newPoint.z = point.z * cos - point.x * sin; - point.x = newPoint.x; - point.z = newPoint.z; - } - - // rotate around Z - quotient = Math.toRadians(secondaryFace.getRotation().z); - if (!Double.isNaN(quotient)) { - double cos = Math.cos(quotient); - double sin = Math.sin(quotient); - newPoint.x = point.x * cos - point.y * sin; - newPoint.y = point.y * cos + point.x * sin; - point.x = newPoint.x; - point.y = newPoint.y; - } - - // translate - point.x += secondaryFace.getTranslation().x; - point.y += secondaryFace.getTranslation().y; - point.z += secondaryFace.getTranslation().z; - - // scale - point.x *= 1 + secondaryFace.getScale().x; - point.y *= 1 + secondaryFace.getScale().y; - point.z *= 1 + secondaryFace.getScale().z; - } - - /** - * Sets {@link #primaryFace} to {@link #DEFAULT_PRIMARY_COLOR} and - * {@link #secondaryFace} to {@link #DEFAULT_SECONDARY_COLOR} - */ - public final void setDeafultColor() { - primaryFace.setColor(DEFAULT_PRIMARY_COLOR); - secondaryFace.setColor(DEFAULT_SECONDARY_COLOR); - canvas.renderScene(); - } - - /** - * Sets the color of {@link #primaryFace} - * @param color Color - */ - public void setPrimaryColor(Color color) { - primaryFace.setColor(color); - canvas.renderScene(); - } - - /** - * Sets the color of {@link #secondaryFace} - * @param color Color - */ - public void setSecondaryColor(Color color) { - secondaryFace.setColor(color); - canvas.renderScene(); - } - - /** - * @return {@link Color} of {@link #primaryFace} - */ - public Color getPrimaryColor() { - return primaryFace.getColor(); - } - - /** - * @return {@link Color} of {@link #secondaryFace} - */ - public Color getSecondaryColor() { - return secondaryFace.getColor(); - } - - /** - * Sets the transparency of {@link #primaryFace} or {@link #secondaryFace} - * based on the inputed value and {@link #TRANSPARENCY_RANGE} - * @param value Value - */ - public void setTransparency(int value) { - - if (value == TRANSPARENCY_RANGE) { - setPrimaryTransparency(1); - setSecondaryTransparency(1); - } - if (value < TRANSPARENCY_RANGE) { - setPrimaryTransparency(value / 10f); - setSecondaryTransparency(1); - } - if (value > TRANSPARENCY_RANGE) { - setSecondaryTransparency((2 * TRANSPARENCY_RANGE - value) / 10f); - setPrimaryTransparency(1); - } - canvas.renderScene(); - } - - /** - * Sets transparency of {@link #primaryFace} - * - * @param transparency Transparency value - */ - public void setPrimaryTransparency(float transparency) { - primaryFace.setTransparency(transparency); - } - - /** - * Sets transparency of {@link #secondaryFace} - * - */ - public void setSecondaryTransparency(float transparency) { - secondaryFace.setTransparency(transparency); - } - - /** - * @return Transparency of {@link #primaryFace} - */ - public double getPrimaryTransparency() { - return primaryFace.getTransparency(); - } - - /** - * @return Transparency of {@link #secondaryFace} - */ - public double getSecondaryTransparency() { - return secondaryFace.getTransparency(); - } - - /** - * Sets camera to show face from the front - */ - public void setFrontFacing() { - canvas.getCamera().initLocation(); - canvas.renderScene(); - } - - /** - * Sets camera to show face from the side - */ - public void setSideFacing() { - canvas.getCamera().initLocation(); - canvas.getCamera().rotate(0, 90); - canvas.renderScene(); - } - - /** - * Resets translation of {@link #secondaryFace} - */ - public void resetTranslation() { - secondaryFace.setTranslation(new Vector3d(0, 0, 0)); - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Resets rotation of {@link #secondaryFace} - */ - public void resetRotation() { - secondaryFace.setRotation(new Vector3d(0, 0, 0)); - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Resets scale of {@link #secondaryFace} - */ - public void resetScale() { - secondaryFace.setScale(new Vector3d(0, 0, 0)); - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Sets translation of {@link #secondaryFace} on X-axis - * @param value Translation amount - */ - public void setXTranslation(double value) { - secondaryFace.getTranslation().x = value * moveX; - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Sets translation of {@link #secondaryFace} on Y-axis - * @param value Translation amount - */ - public void setYTranslation(double value) { - secondaryFace.getTranslation().y = value * moveY; - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Sets translation of {@link #secondaryFace} on Z-axis - * @param value Translation amount - */ - public void setZTranslation(double value) { - secondaryFace.getTranslation().z = value * moveZ; - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Sets rotation of {@link #secondaryFace} around X-axis - * @param value Translation amount - */ - public void setXRotation(double value) { - secondaryFace.getRotation().x = value * moveX; - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Sets rotation of {@link #secondaryFace} around Y-axis - * @param value Translation amount - */ - public void setYRotation(double value) { - secondaryFace.getRotation().y = value * moveY; - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Sets rotation of {@link #secondaryFace} around Z-axis - * @param value Translation amount - */ - public void setZRotation(double value) { - secondaryFace.getRotation().z = value * moveZ; - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Sets scale of {@link #secondaryFace} - * @param value Translation amount - */ - public void setScale(double value) { - secondaryFace.getScale().x = value * scaleXYZ; - secondaryFace.getScale().y = value * scaleXYZ; - secondaryFace.getScale().z = value * scaleXYZ; - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * Sets color of {@link #primaryFace} highlights to white - */ - public void setPrimaryHighlights() { - primaryFace.setHighlights(new Color(1, 1, 1)); - canvas.renderScene(); - } - - /** - * Sets color of {@link #secondaryFace} highlights to white - */ - public void setSecondaryHighlights() { - secondaryFace.setHighlights(new Color(1, 1, 1)); - canvas.renderScene(); - } - - /** - * Sets color of {@link #primaryFace} highlights to black - */ - public void removePrimaryHighlights() { - primaryFace.setHighlights(new Color(0, 0, 0)); - canvas.renderScene(); - } - - /** - * Sets color of {@link #secondaryFace} highlights to black - */ - public void removeSecondaryHighlights() { - secondaryFace.setHighlights(new Color(0, 0, 0)); - canvas.renderScene(); - } - - /** - * Sets {@link #primaryFace} to be rendered as lines - */ - public void setPrimaryLines() { - primaryFace.setRenderMode(GL2.GL_LINE); - canvas.renderScene(); - } - - /** - * Sets {@link #secondaryFace} to be rendered as lines - */ - public void setSecondaryLines() { - secondaryFace.setRenderMode(GL2.GL_LINE); - canvas.renderScene(); - } - - /** - * Sets {@link #primaryFace} to be rendered as points - */ - public void setPrimaryPoints() { - primaryFace.setRenderMode(GL2.GL_POINT); - canvas.renderScene(); - } - - /** - * Sets {@link #secondaryFace} to be rendered as points - */ - public void setSecondaryPoints() { - secondaryFace.setRenderMode(GL2.GL_POINT); - canvas.renderScene(); - } - - /** - * Sets {@link #primaryFace} to be rendered solid - */ - public void setPrimaryFill() { - primaryFace.setRenderMode(GL2.GL_FILL); - canvas.renderScene(); - } - - /** - * Sets {@link #secondaryFace} to be rendered solid - */ - public void setSecondaryFill() { - secondaryFace.setRenderMode(GL2.GL_FILL); - canvas.renderScene(); - } - - /** - * @return {@code true} if feature points are being rendered - */ - public boolean areFeaturePointsActive() { - return primaryFace.isRenderFeaturePoints(); - } - - /** - * Sets feature points of {@link #primaryFace} and {@link #secondaryFace} - * to given state - * @param state State - */ - public void setFeaturePointsActive(boolean state) { - primaryFace.setRenderFeaturePoints(state); - secondaryFace.setRenderFeaturePoints(state); - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * @return Value of {@link #featurePointsThreshold} - */ - public double getFeaturePointsThreshold() { - return featurePointsThreshold; - } - - /** - * Sets {@link #featurePointsThreshold} to given value - * @param featurePointsThreshold Threshold - */ - public void setFeaturePointsThreshold(double featurePointsThreshold) { - this.featurePointsThreshold = featurePointsThreshold; - calculateFeaturePoints(); - canvas.renderScene(); - } - - /** - * @return Value of {@link #moveModifier} - */ - public double getMoveModifier() { - return moveModifier; - } - - /** - * Sets {@link #moveModifier} to given value - * @param moveModifier Modifier - */ - public void setMoveModifier(double moveModifier) { - this.moveModifier = moveModifier; - } - - /** - * @return {@link #canvas} - */ - public Canvas getCanvas() { - return canvas; - } - - /** - * @return {@code true} if back face is being shown - */ - public boolean isShowBackfaceActive() { - return primaryFace.isShowBackface(); - } - - /** - * Sets backface to be rendered or not based on the given state - * @param state State - */ - public void setShowBackfaceActive(boolean state) { - primaryFace.setShowBackface(state); - secondaryFace.setShowBackface(state); - canvas.renderScene(); - } -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.form b/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.form deleted file mode 100644 index e0ca68451f5a157b4645b7e68075753bc4c5c206..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.form +++ /dev/null @@ -1,78 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<!-- - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - ---> - -<Form version="1.4" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <Properties> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[405, 600]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <Component id="canvas1" pref="309" max="32767" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="postRegistrationCP1" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="canvas1" pref="708" max="32767" attributes="0"/> - <Component id="postRegistrationCP1" alignment="0" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="cz.fidentis.analyst.gui.canvas.Canvas" name="canvas1"> - </Component> - <Container class="cz.fidentis.analyst.registration.PostRegistrationCP" name="postRegistrationCP1"> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="340" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - </Container> - </SubComponents> -</Form> diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.java b/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.java deleted file mode 100644 index 9b6baaec5ce90ae071c0e4ef1ece6d4e248f23fa..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.java +++ /dev/null @@ -1,159 +0,0 @@ -package cz.fidentis.analyst.registration; - -import cz.fidentis.analyst.face.HumanFace; -import cz.fidentis.analyst.face.HumanFaceFactory; -import cz.fidentis.analyst.feature.FeaturePoint; -import cz.fidentis.analyst.gui.ProjectTopComp; -import cz.fidentis.analyst.gui.scene.DrawableMesh; -import java.io.File; -import java.util.ArrayList; -import javax.swing.filechooser.FileNameExtensionFilter; -import org.netbeans.api.settings.ConvertAsProperties; -import org.openide.awt.ActionID; -import org.openide.awt.ActionReference; -import org.openide.filesystems.FileChooserBuilder; -import org.openide.windows.TopComponent; -import org.openide.util.NbBundle.Messages; - -/** - * Top component used to test registration adjustment. - * - * @author Richard Pajersky - */ -@ConvertAsProperties( - dtd = "-//cz.fidentis.analyst.gui//RegistrationTest//EN", - autostore = false -) -@TopComponent.Description( - preferredID = "PostRegistrationTestTC", - //iconBase="SET/PATH/TO/ICON/HERE", - persistenceType = TopComponent.PERSISTENCE_ALWAYS -) -@TopComponent.Registration(mode = "properties", openAtStartup = false) -@ActionID(category = "Window", id = "cz.fidentis.analyst.gui.PostRegistrationTestTC") -@ActionReference(path = "Menu/Window" /*, position = 333 */) -@TopComponent.OpenActionRegistration( - displayName = "#CTL_RegistrationTestAction", - preferredID = "PostRegistrationTestTC" -) -@Messages({ - "CTL_RegistrationTestAction=RegistrationTest", - "CTL_RegistrationTestTopComponent=RegistrationTest Window", - "HINT_RegistrationTestTopComponent=This is a RegistrationTest window" -}) -public final class PostRegistrationTestTC extends TopComponent { - - /** - * Constructor - */ - public PostRegistrationTestTC() { - initComponents(); - setName(Bundle.CTL_RegistrationTestTopComponent()); - setToolTipText(Bundle.HINT_RegistrationTestTopComponent()); - - File file1 = new FileChooserBuilder(ProjectTopComp.class) - .setTitle("Open human face(s)") - .setDefaultWorkingDirectory(new File (System.getProperty("user.home"))) - //.setApproveText("Add") - .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj")) - .setAcceptAllFileFilterUsed(true) - .showOpenDialog(); - - File file2 = new FileChooserBuilder(ProjectTopComp.class) - .setTitle("Open human face(s)") - .setDefaultWorkingDirectory(new File (System.getProperty("user.home"))) - //.setApproveText("Add") - .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj")) - .setAcceptAllFileFilterUsed(true) - .showOpenDialog(); - - String primFaceId = HumanFaceFactory.instance().loadFace(file1); - String secFaceId = HumanFaceFactory.instance().loadFace(file2); - HumanFace primary = HumanFaceFactory.instance().getFace(primFaceId); - HumanFace secondary = HumanFaceFactory.instance().getFace(secFaceId); - - canvas1.initScene(primary, secondary); // init canvas - - /* feature points test */ - ArrayList<DrawableMesh> drawables = new ArrayList<>(canvas1.getScene().getDrawables()); - DrawableMesh primaryFace = drawables.get(0); - DrawableMesh secondaryFace = drawables.get(1); - - ArrayList<FeaturePoint> primar = new ArrayList<>(); - primar.add(new FeaturePoint(100, 0, 0, null)); - primaryFace.setFeaturePoints(primar); - - ArrayList<FeaturePoint> secondar = new ArrayList<>(); - secondar.add(new FeaturePoint(101, 0, 0, null)); - secondaryFace.setFeaturePoints(secondar); - - postRegistrationCP1.initPostRegistrationCP(new PostRegistrationListener(canvas1)); - - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - canvas1 = new cz.fidentis.analyst.gui.canvas.Canvas(); - postRegistrationCP1 = new cz.fidentis.analyst.registration.PostRegistrationCP(); - - setPreferredSize(new java.awt.Dimension(405, 600)); - - javax.swing.GroupLayout postRegistrationCP1Layout = new javax.swing.GroupLayout(postRegistrationCP1); - postRegistrationCP1.setLayout(postRegistrationCP1Layout); - postRegistrationCP1Layout.setHorizontalGroup( - postRegistrationCP1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 340, Short.MAX_VALUE) - ); - postRegistrationCP1Layout.setVerticalGroup( - postRegistrationCP1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 0, Short.MAX_VALUE) - ); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, 309, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(postRegistrationCP1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, 708, Short.MAX_VALUE) - .addComponent(postRegistrationCP1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - ); - }// </editor-fold>//GEN-END:initComponents - - // Variables declaration - do not modify//GEN-BEGIN:variables - private cz.fidentis.analyst.gui.canvas.Canvas canvas1; - private cz.fidentis.analyst.registration.PostRegistrationCP postRegistrationCP1; - // End of variables declaration//GEN-END:variables - @Override - public void componentOpened() { - // TODO add custom code on component opening - } - - @Override - public void componentClosed() { - // TODO add custom code on component closing - } - - void writeProperties(java.util.Properties p) { - // better to version settings since initial version as advocated at - // http://wiki.apidesign.org/wiki/PropertyFiles - p.setProperty("version", "1.0"); - // TODO store your settings - } - - void readProperties(java.util.Properties p) { - String version = p.getProperty("version"); - // TODO read your settings according to their version - } -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java new file mode 100644 index 0000000000000000000000000000000000000000..e0ba6d2587eb554fcda1960e2fa6209112f3177c --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java @@ -0,0 +1,385 @@ +package cz.fidentis.analyst.registration; + +import cz.fidentis.analyst.canvas.Canvas; +import cz.fidentis.analyst.core.ControlPanelAction; +import cz.fidentis.analyst.feature.FeaturePoint; +import cz.fidentis.analyst.icp.IcpTransformer; +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.MeshPoint; +import cz.fidentis.analyst.scene.DrawableFeaturePoints; +import java.awt.Color; +import java.awt.event.ActionEvent; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFormattedTextField; +import javax.swing.JSlider; +import javax.swing.JTabbedPane; +import javax.swing.JToggleButton; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3d; + +/** + * Action listener for the curvature computation. + * + * @author Richard Pajersky + * @author Radek Oslejsek + */ +public class RegistrationAction extends ControlPanelAction { + + /* + * Handled 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"; + public static final String ACTION_COMMAND_ROTATE_X = "rotate x"; + 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_ALL = "reset all"; + 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_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"; + + + /* + * Attributes handling the state + */ + private boolean scale = true; + private int maxIterations = 10; + private double error = 0.3; + private UndersamplingStrategy undersampling = new RandomStrategy(200); + + + /** + * Range of transparency + */ + public static final int TRANSPARENCY_RANGE = 10; + + /** + * Threshold of feature points showing too far away + */ + private double featurePointsThreshold = 5.0; + + private final RegistrationPanel controlPanel; + + /** + * Constructor. + * + * @param canvas OpenGL canvas + * @param topControlPanel Top component for placing control panels + */ + public RegistrationAction(Canvas canvas, JTabbedPane topControlPanel) { + super(canvas, topControlPanel); + this.controlPanel = new RegistrationPanel(this); + } + + @Override + public void actionPerformed(ActionEvent ae) { + double value; + String action = ae.getActionCommand(); + + switch (action) { + case ACTION_COMMAND_SHOW_HIDE_PANEL: + hideShowPanelActionPerformed(ae, this.controlPanel); + if (((JToggleButton) ae.getSource()).isSelected()) { + calculateFeaturePoints(); // color points + } else { + for (int i = 0; i < getPrimaryFeaturePoints().getFeaturePoints().size(); i++) { + getPrimaryFeaturePoints().setColor(i, DrawableFeaturePoints.DEFAULT_COLOR); + getSecondaryFeaturePoints().setColor(i, DrawableFeaturePoints.DEFAULT_COLOR); + } + } + break; + case ACTION_COMMAND_APPLY_ICP: + applyICP(); + calculateFeaturePoints(); + break; + case ACTION_COMMAND_SHIFT_X: + value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue(); + getSecondaryDrawableFace().getTranslation().x = value; + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().getTranslation().x = value; + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_SHIFT_Y: + value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue(); + getSecondaryDrawableFace().getTranslation().y = value; + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().getTranslation().y = value; + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_SHIFT_Z: + value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue(); + getSecondaryDrawableFace().getTranslation().z = value; + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().getTranslation().z = value; + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_ROTATE_X: + value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue(); + getSecondaryDrawableFace().getRotation().x = value; + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().getRotation().x = value; + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_ROTATE_Y: + value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue(); + getSecondaryDrawableFace().getRotation().y = value; + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().getRotation().y = value; + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_ROTATE_Z: + value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue(); + getSecondaryDrawableFace().getRotation().z = value; + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().getRotation().z = value; + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_SCALE: + value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue(); + getSecondaryDrawableFace().getScale().x = value; + getSecondaryDrawableFace().getScale().y = value; + getSecondaryDrawableFace().getScale().z = value; + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().getScale().x = value; + getSecondaryFeaturePoints().getScale().y = value; + getSecondaryFeaturePoints().getScale().z = value; + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_FRONT_VIEW: + getCanvas().getCamera().initLocation(); + break; + case ACTION_COMMAND_SIDE_VIEW: + getCanvas().getCamera().initLocation(); + getCanvas().getCamera().rotate(0, 90); + break; + case ACTION_COMMAND_RESET_TRANSLATION: + getSecondaryDrawableFace().setTranslation(new Vector3d(0, 0, 0)); + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().setTranslation(new Vector3d(0, 0, 0)); + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_RESET_ROTATION: + getSecondaryDrawableFace().setRotation(new Vector3d(0, 0, 0)); + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().setRotation(new Vector3d(0, 0, 0)); + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_RESET_SCALE: + getSecondaryDrawableFace().setScale(new Vector3d(0, 0, 0)); + if (getSecondaryFeaturePoints() != null) { + getSecondaryFeaturePoints().setScale(new Vector3d(0, 0, 0)); + } + calculateFeaturePoints(); + break; + case ACTION_COMMAND_RESET_ALL: + getSecondaryDrawableFace().setTranslation(new Vector3d(0, 0, 0)); + getSecondaryDrawableFace().setRotation(new Vector3d(0, 0, 0)); + getSecondaryDrawableFace().setScale(new Vector3d(0, 0, 0)); + calculateFeaturePoints(); + break; + case ACTION_COMMAND_APPLY_TRANSFORMATIONS: + transformFace(); + getSecondaryDrawableFace().setTranslation(new Vector3d(0, 0, 0)); + getSecondaryDrawableFace().setRotation(new Vector3d(0, 0, 0)); + getSecondaryDrawableFace().setScale(new Vector3d(0, 0, 0)); + break; + case ACTION_COMMAND_TRANSPARENCY: + int transparency = ((JSlider) ae.getSource()).getValue(); + setTransparency(transparency); + break; + case ACTION_COMMAND_FP_CLOSENESS_THRESHOLD: + featurePointsThreshold = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue(); + calculateFeaturePoints(); + break; + case ACTION_COMMAND_ICP_SCALE: + this.scale = ((JCheckBox) ae.getSource()).isSelected(); + break; + case ACTION_COMMAND_ICP_MAX_ITERATIONS: + maxIterations = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).intValue(); + break; + case ACTION_COMMAND_ICP_ERROR: + error = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue(); + break; + case ACTION_COMMAND_ICP_UNDERSAMPLING: + String item = (String)((JComboBox) ae.getSource()).getSelectedItem(); + switch (item) { + case "None": + this.undersampling = new NoUndersampling(); + break; + case "Random 200": + this.undersampling = new RandomStrategy(200); + break; + default: + throw new UnsupportedOperationException(item); + } + break; + default: + throw new UnsupportedOperationException(action); + } + + renderScene(); + } + + protected void applyICP() { + IcpTransformer visitor = new IcpTransformer(getPrimaryDrawableFace().getModel(), maxIterations, scale, error, undersampling); + getSecondaryDrawableFace().getModel().compute(visitor); // NOTE: the secondary face is physically transformed + } + + /** + * Sets the transparency of {@link #primaryFace} or {@link #secondaryFace} + * based on the inputed value and {@link #TRANSPARENCY_RANGE} + * @param value Value + */ + private void setTransparency(int value) { + if (value == TRANSPARENCY_RANGE) { + getPrimaryDrawableFace().setTransparency(1); + getSecondaryDrawableFace().setTransparency(1); + } + if (value < TRANSPARENCY_RANGE) { + getPrimaryDrawableFace().setTransparency(value / 10f); + getSecondaryDrawableFace().setTransparency(1); + } + if (value > TRANSPARENCY_RANGE) { + getPrimaryDrawableFace().setTransparency(1); + getSecondaryDrawableFace().setTransparency((2 * TRANSPARENCY_RANGE - value) / 10f); + } + } + + /** + * Calculates feature points which are too far away + * and changes their color to red + * otherwise set color to default + */ + private void calculateFeaturePoints() { + if (getPrimaryDrawableFace() == null) { // scene not yet initiated + return; + } + + if (getPrimaryFeaturePoints() == null || + getSecondaryFeaturePoints() == null || + getPrimaryFeaturePoints().getFeaturePoints().size() != getSecondaryFeaturePoints().getFeaturePoints().size()) { + return; + } + + for (int i = 0; i < getPrimaryFeaturePoints().getFeaturePoints().size(); i++) { + FeaturePoint primary = getPrimaryFeaturePoints().getFeaturePoints().get(i); + FeaturePoint secondary = getSecondaryFeaturePoints().getFeaturePoints().get(i); + Point3d transformed = new Point3d(secondary.getX(), secondary.getY(), secondary.getZ()); + transformPoint(transformed); + double distance = Math.sqrt( + Math.pow(transformed.x - primary.getX(), 2) + + Math.pow(transformed.y - primary.getY(), 2) + + Math.pow(transformed.z - primary.getZ(), 2)); + if (distance > featurePointsThreshold) { + getPrimaryFeaturePoints().setColor(i, Color.RED); + getSecondaryFeaturePoints().setColor(i, Color.RED); + } else { + getPrimaryFeaturePoints().setColor(i, DrawableFeaturePoints.DEFAULT_COLOR); + getSecondaryFeaturePoints().setColor(i, DrawableFeaturePoints.DEFAULT_COLOR); + } + } + } + + /** + * Applies carried out transformations + * first on {@link #secondaryFace} + * and then on {@link #secondaryFace} feature points + */ + private void transformFace() { + for (MeshFacet transformedFacet : getSecondaryDrawableFace().getFacets()) { + for (MeshPoint comparedPoint : transformedFacet.getVertices()) { + transformPoint(comparedPoint.getPosition()); + } + } + for (int i = 0; i < getSecondaryFeaturePoints().getFeaturePoints().size(); i++) { + FeaturePoint point = getSecondaryFeaturePoints().getFeaturePoints().get(i); + Point3d transformed = new Point3d(point.getX(), point.getY(), point.getZ()); + transformPoint(transformed); + point = new FeaturePoint(transformed.x, transformed.y, transformed.z, point.getFeaturePointType()); + getSecondaryFeaturePoints().getFeaturePoints().set(i, point); + } + } + + /** + * Transforms point based on transformation info from {@link #secondaryFace} + * + * @param point Point to transform + */ + private void transformPoint(Point3d point) { + if (point == null) { + throw new IllegalArgumentException("point is null"); + } + + Point3d newPoint = new Point3d(0, 0, 0); + double quotient; + + // rotate around X + quotient = Math.toRadians(getSecondaryDrawableFace().getRotation().x); + if (!Double.isNaN(quotient)) { + double cos = Math.cos(quotient); + double sin = Math.sin(quotient); + newPoint.y = point.y * cos - point.z * sin; + newPoint.z = point.z * cos + point.y * sin; + point.y = newPoint.y; + point.z = newPoint.z; + } + + // rotate around Y + quotient = Math.toRadians(getSecondaryDrawableFace().getRotation().y); + if (!Double.isNaN(quotient)) { + double cos = Math.cos(quotient); + double sin = Math.sin(quotient); + newPoint.x = point.x * cos + point.z * sin; + newPoint.z = point.z * cos - point.x * sin; + point.x = newPoint.x; + point.z = newPoint.z; + } + + // rotate around Z + quotient = Math.toRadians(getSecondaryDrawableFace().getRotation().z); + if (!Double.isNaN(quotient)) { + double cos = Math.cos(quotient); + double sin = Math.sin(quotient); + newPoint.x = point.x * cos - point.y * sin; + newPoint.y = point.y * cos + point.x * sin; + point.x = newPoint.x; + point.y = newPoint.y; + } + + // translate + point.x += getSecondaryDrawableFace().getTranslation().x; + point.y += getSecondaryDrawableFace().getTranslation().y; + point.z += getSecondaryDrawableFace().getTranslation().z; + + // scale + point.x *= 1 + getSecondaryDrawableFace().getScale().x; + point.y *= 1 + getSecondaryDrawableFace().getScale().y; + point.z *= 1 + getSecondaryDrawableFace().getScale().z; + } + +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.form b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form similarity index 57% rename from GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.form rename to GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form index 88614d21dea949ee64eae4749194dcd8fb53792d..cbc5b362d528945d89615b0bd906ec75a544127c 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.form +++ b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form @@ -11,7 +11,7 @@ </NonVisualComponents> <Properties> <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[415, 700]"/> + <Dimension value="[600, 600]"/> </Property> <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[415, 700]"/> @@ -32,27 +32,70 @@ <Layout> <DimensionLayout dim="0"> <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jSeparator11" alignment="0" pref="415" max="32767" attributes="0"/> - <Group type="102" alignment="0" attributes="0"> + <Component id="visualizationPanel" pref="1057" max="32767" attributes="0"/> + <Group type="102" attributes="0"> + <Component id="transformationPanel" min="-2" pref="599" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> + <Component id="jSeparator2" max="32767" attributes="0"/> + <EmptySpace min="-2" pref="450" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> <Component id="registrationAdjustmentLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="0" pref="0" max="32767" attributes="0"/> </Group> - <Component id="transformationPanel" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="visualizationPanel" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="29" max="-2" attributes="0"/> + <Component id="jButton1" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jCheckBox1" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jFormattedTextField1" min="-2" pref="49" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="4" max="-2" attributes="0"/> + <Component id="jLabel5" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="9" max="-2" attributes="0"/> + <Component id="jFormattedTextField2" min="-2" pref="53" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="1" max="-2" attributes="0"/> + <Component id="jLabel6" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jComboBox1" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + <Component id="jSeparator11" alignment="0" max="32767" attributes="0"/> </Group> </DimensionLayout> <DimensionLayout dim="1"> <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jLabel1" alignment="3" min="-2" pref="57" max="-2" attributes="0"/> + <Component id="jCheckBox1" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jFormattedTextField1" alignment="3" min="-2" pref="22" max="-2" attributes="0"/> + <Component id="jLabel5" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jFormattedTextField2" alignment="3" min="-2" pref="20" max="-2" attributes="0"/> + <Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jComboBox1" alignment="3" min="-2" pref="20" max="-2" attributes="0"/> + </Group> <EmptySpace max="-2" attributes="0"/> - <Component id="registrationAdjustmentLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> + <Component id="jButton1" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> <Component id="jSeparator11" min="-2" pref="10" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> - <Component id="visualizationPanel" min="-2" pref="244" max="-2" attributes="0"/> + <Component id="registrationAdjustmentLabel" min="-2" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> - <Component id="transformationPanel" min="-2" pref="333" max="-2" attributes="0"/> - <EmptySpace pref="67" max="32767" attributes="0"/> + <Component id="visualizationPanel" min="-2" pref="206" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="22" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="transformationPanel" min="-2" pref="333" max="-2" attributes="0"/> + <Component id="jSeparator2" min="-2" pref="10" max="-2" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="0"/> </Group> </Group> </DimensionLayout> @@ -64,7 +107,7 @@ <Font name="Tahoma" size="14" 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="PostRegistrationCP.registrationAdjustmentLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.registrationAdjustmentLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -84,548 +127,61 @@ <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"> - <Component id="jSeparator1" max="32767" attributes="0"/> - <Component id="jSeparator4" alignment="0" max="32767" attributes="0"/> - <Component id="jSeparator8" alignment="0" max="32767" attributes="0"/> - <Component id="visualizationLabel" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="modelPanel" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="featurePointsPanel" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="viewPanel" alignment="0" max="32767" attributes="0"/> - </Group> - <EmptySpace pref="12" max="32767" attributes="0"/> - </Group> - <Component id="jSeparator3" alignment="0" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <Component id="visualizationLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - <Component id="jSeparator4" min="-2" pref="10" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="modelPanel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jSeparator8" min="-2" pref="10" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="viewPanel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="featurePointsPanel" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="34" max="-2" attributes="0"/> - <Component id="jSeparator3" min="-2" pref="10" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="19" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JSeparator" name="jSeparator8"> - </Component> - <Component class="javax.swing.JSeparator" name="jSeparator4"> - </Component> - <Component class="javax.swing.JLabel" name="visualizationLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="12" 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="PostRegistrationCP.visualizationLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JSeparator" name="jSeparator1"> - </Component> - <Container class="javax.swing.JPanel" name="modelPanel"> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="primaryLabel" alignment="0" min="-2" pref="58" max="-2" attributes="0"/> - <Component id="modelLabel" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="secondaryLabel" alignment="0" max="32767" attributes="0"/> - </Group> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Component id="colorButton" min="-2" pref="50" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="highlightsLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Component id="renderModeLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Component id="transparencyButton" pref="67" max="32767" attributes="0"/> - </Group> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <Component id="primaryColorPanel" min="-2" pref="50" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="primaryHighlightsCB" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="28" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <Component id="primaryFillRB" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="primaryLinesRB" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="primaryPointsRB" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Component id="secondaryFillRB" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="secondaryLinesRB" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="secondaryPointsRB" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Component id="fillLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="linesLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="pointsLabel" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Component id="secondaryColorPanel" min="-2" pref="50" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="secondaryHighlightsCB" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="transparencySlider" min="-2" max="-2" attributes="0"/> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> - </Group> - </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"> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="highlightsLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="renderModeLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="transparencyButton" alignment="3" max="-2" attributes="0"/> - <Component id="colorButton" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace min="4" pref="4" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="fillLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="pointsLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="linesLabel" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Component id="primaryPointsRB" min="-2" max="-2" attributes="0"/> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> - </Group> - <Component id="transparencySlider" pref="0" max="32767" attributes="0"/> - </Group> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Group type="103" groupAlignment="1" attributes="0"> - <Component id="secondaryColorPanel" min="-2" max="-2" attributes="0"/> - <Group type="102" attributes="0"> - <Component id="modelLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="29" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="primaryHighlightsCB" min="-2" max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Component id="primaryColorPanel" min="-2" max="-2" attributes="0"/> - <Component id="primaryLabel" min="-2" max="-2" attributes="0"/> - </Group> - <Component id="primaryFillRB" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="primaryLinesRB" alignment="0" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace min="-2" pref="14" max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="secondaryLabel" min="-2" max="-2" attributes="0"/> - <Component id="secondaryHighlightsCB" alignment="1" min="-2" max="-2" attributes="0"/> - </Group> - <Component id="secondaryFillRB" min="-2" max="-2" attributes="0"/> - <Component id="secondaryLinesRB" min="-2" max="-2" attributes="0"/> - <Component id="secondaryPointsRB" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - </Group> - <EmptySpace max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="modelLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" style="3"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.modelLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="pointsLabel"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.pointsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JButton" name="transparencyButton"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" 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="PostRegistrationCP.transparencyButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.transparencyButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <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> - <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo"> - <EtchetBorder/> - </Border> - </TitledBorder> - </Border> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Default Cursor"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[100, 19]"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="transparencyButtonActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="linesLabel"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.linesLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JButton" name="colorButton"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" 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="PostRegistrationCP.colorButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.colorButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <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> - <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo"> - <EtchetBorder/> - </Border> - </TitledBorder> - </Border> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Default Cursor"/> - </Property> - <Property name="horizontalTextPosition" type="int" value="0"/> - <Property name="iconTextGap" type="int" value="0"/> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="colorButtonActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="fillLabel"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.fillLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="renderModeLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" 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="PostRegistrationCP.renderModeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JCheckBox" name="secondaryHighlightsCB"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryHighlightsCB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="secondaryHighlightsCBActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JCheckBox" name="primaryHighlightsCB"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryHighlightsCB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="primaryHighlightsCBActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="highlightsLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" 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="PostRegistrationCP.highlightsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="primaryLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" 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="PostRegistrationCP.primaryLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="secondaryLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" 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="PostRegistrationCP.secondaryLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryLabel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JSlider" name="transparencySlider"> - <Properties> - <Property name="majorTickSpacing" type="int" value="5"/> - <Property name="maximum" type="int" value="20"/> - <Property name="minorTickSpacing" type="int" value="5"/> - <Property name="orientation" type="int" value="1"/> - <Property name="paintTicks" type="boolean" value="true"/> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.transparencySlider.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="value" type="int" value="10"/> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - </Properties> - <Events> - <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="transparencySliderStateChanged"/> - </Events> - </Component> - <Container class="javax.swing.JPanel" name="secondaryColorPanel"> - <Properties> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryColorPanel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[70, 14]"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="secondaryColorPanelMouseClicked"/> - </Events> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="48" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="12" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - </Container> - <Container class="javax.swing.JPanel" name="primaryColorPanel"> - <Properties> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryColorPanel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> - <Color id="Hand Cursor"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[72, 14]"/> - </Property> - </Properties> - <Events> - <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="primaryColorPanelMouseClicked"/> - </Events> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="48" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="12" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - </Container> - <Component class="javax.swing.JRadioButton" name="primaryLinesRB"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="primaryRenderModeGroup"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryLinesRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="primaryLinesRBActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JRadioButton" name="secondaryFillRB"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="secondaryRenerModeGroup"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryFillRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="secondaryFillRBActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JRadioButton" name="primaryPointsRB"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="primaryRenderModeGroup"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryPointsRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="primaryPointsRBActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JRadioButton" name="secondaryPointsRB"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="secondaryRenerModeGroup"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryPointsRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="secondaryPointsRBActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JRadioButton" name="secondaryLinesRB"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="secondaryRenerModeGroup"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryLinesRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="secondaryLinesRBActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JRadioButton" name="primaryFillRB"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="primaryRenderModeGroup"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryFillRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo"> - <LineBorder/> - </Border> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="primaryFillRBActionPerformed"/> - </Events> - </Component> - </SubComponents> - </Container> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" alignment="0" groupAlignment="0" max="-2" attributes="0"> + <Component id="featurePointsPanel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="viewPanel" alignment="0" max="32767" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="visualizationLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="transparencySlider" min="-2" pref="281" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="transparencyButton" min="-2" pref="78" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="transparencySlider" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="27" max="-2" attributes="0"/> + <Component id="visualizationLabel" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="24" max="-2" attributes="0"/> + <Component id="transparencyButton" min="-2" pref="30" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace min="-2" pref="34" max="-2" attributes="0"/> + <Component id="viewPanel" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="22" max="-2" attributes="0"/> + <Component id="featurePointsPanel" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="25" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="visualizationLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="14" 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.visualizationLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> <Container class="javax.swing.JPanel" name="viewPanel"> <Layout> @@ -633,13 +189,11 @@ <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" alignment="0" attributes="0"> <Component id="viewLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> <Component id="frontButton" min="-2" pref="50" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> <Component id="profileButton" min="-2" pref="50" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="backfaceButton" max="32767" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> + <EmptySpace min="-2" pref="216" max="-2" attributes="0"/> </Group> </Group> </DimensionLayout> @@ -649,7 +203,6 @@ <Component id="viewLabel" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="frontButton" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="profileButton" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="backfaceButton" alignment="3" min="-2" max="-2" attributes="0"/> </Group> </Group> </DimensionLayout> @@ -658,10 +211,10 @@ <Component class="javax.swing.JButton" name="profileButton"> <Properties> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.profileButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.profileButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.profileButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.profileButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -676,17 +229,14 @@ <Color id="Default Cursor"/> </Property> </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="profileButtonActionPerformed"/> - </Events> </Component> <Component class="javax.swing.JButton" name="frontButton"> <Properties> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.frontButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.frontButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.frontButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.frontButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -701,38 +251,16 @@ <Color id="Default Cursor"/> </Property> </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="frontButtonActionPerformed"/> - </Events> </Component> <Component class="javax.swing.JLabel" name="viewLabel"> <Properties> <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" style="3"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.viewLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <Font name="Tahoma" size="14" style="3"/> </Property> - </Properties> - </Component> - <Component class="javax.swing.JToggleButton" name="backfaceButton"> - <Properties> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.backfaceButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <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> - <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo"> - <EtchetBorder/> - </Border> - </TitledBorder> - </Border> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.viewLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="backfaceButtonActionPerformed"/> - </Events> </Component> </SubComponents> </Container> @@ -744,54 +272,39 @@ <Group type="102" alignment="0" attributes="0"> <Component id="featurePointsLabel" min="-2" max="-2" attributes="0"/> <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="featurePointsButton" pref="43" max="32767" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="thersholdButton" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> <Component id="thersholdFTF" min="-2" pref="70" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> <Component id="thersholdUpButton" min="-2" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> <Component id="thresholdDownButton" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="192" max="32767" attributes="0"/> </Group> </Group> </DimensionLayout> <DimensionLayout dim="1"> <Group type="103" groupAlignment="0" attributes="0"> - <Group type="103" alignment="0" groupAlignment="3" attributes="0"> - <Component id="featurePointsLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="featurePointsButton" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="thersholdButton" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="thersholdFTF" alignment="3" min="-2" max="-2" attributes="0"/> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="featurePointsLabel" min="-2" max="-2" attributes="0"/> + <Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0"> + <Component id="thersholdFTF" alignment="0" pref="0" max="32767" attributes="0"/> + <Component id="thersholdUpButton" alignment="0" max="32767" attributes="0"/> + <Component id="thresholdDownButton" alignment="0" max="32767" attributes="0"/> + </Group> + </Group> + <EmptySpace min="0" pref="10" max="32767" attributes="0"/> </Group> - <Component id="thersholdUpButton" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="thresholdDownButton" min="-2" max="-2" attributes="0"/> </Group> </DimensionLayout> </Layout> <SubComponents> - <Component class="javax.swing.JToggleButton" name="featurePointsButton"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.featurePointsButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <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/> - </Border> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="featurePointsButtonActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JButton" name="thresholdDownButton"> + <Component class="javax.swing.JButton" name="thersholdUpButton"> <Properties> <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/subtract-line.png"/> + <Image iconType="3" name="/add-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.thresholdDownButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.thersholdUpButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -801,7 +314,6 @@ <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> <Color id="Default Cursor"/> </Property> - <Property name="enabled" type="boolean" value="false"/> <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[24, 24]"/> </Property> @@ -813,16 +325,33 @@ </Property> </Properties> <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thresholdDownButtonActionPerformed"/> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thersholdUpButtonActionPerformed"/> </Events> </Component> - <Component class="javax.swing.JButton" name="thersholdUpButton"> + <Component class="javax.swing.JFormattedTextField" name="thersholdFTF"> + <Properties> + <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor"> + <Format subtype="0" type="0"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="featurePointsLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="14" style="3"/> + </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.featurePointsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="thresholdDownButton"> <Properties> <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/add-line.png"/> + <Image iconType="3" name="/subtract-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.thersholdUpButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.thresholdDownButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -832,7 +361,6 @@ <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> <Color id="Default Cursor"/> </Property> - <Property name="enabled" type="boolean" value="false"/> <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[24, 24]"/> </Property> @@ -844,52 +372,59 @@ </Property> </Properties> <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thersholdUpButtonActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JButton" name="thersholdButton"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" 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="PostRegistrationCP.thersholdButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <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/> - </Border> - </Property> - <Property name="enabled" type="boolean" value="false"/> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thersholdButtonActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JFormattedTextField" name="thersholdFTF"> - <Properties> - <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor"> - <Format subtype="0" type="0"/> - </Property> - <Property name="enabled" type="boolean" value="false"/> - </Properties> - <Events> - <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="thersholdFTFPropertyChange"/> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thresholdDownButtonActionPerformed"/> </Events> </Component> - <Component class="javax.swing.JLabel" name="featurePointsLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" style="3"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.featurePointsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> </SubComponents> </Container> - <Component class="javax.swing.JSeparator" name="jSeparator3"> + <Component class="javax.swing.JSlider" name="transparencySlider"> + <Properties> + <Property name="majorTickSpacing" type="int" value="5"/> + <Property name="maximum" type="int" value="20"/> + <Property name="minorTickSpacing" type="int" value="5"/> + <Property name="paintTicks" type="boolean" value="true"/> + <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.transparencySlider.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="value" type="int" value="10"/> + <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> + <Color id="Hand Cursor"/> + </Property> + </Properties> + <Events> + <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="transparencySliderStateChanged"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="transparencyButton"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="11" 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.transparencyButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.transparencyButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <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> + <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo"> + <EtchetBorder/> + </Border> + </TitledBorder> + </Border> + </Property> + <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> + <Color id="Default Cursor"/> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[100, 19]"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="transparencyButtonActionPerformed"/> + </Events> </Component> </SubComponents> </Container> @@ -903,74 +438,89 @@ <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" attributes="0"> - <Component id="rotationPanel" alignment="0" max="32767" attributes="0"/> + <Component id="jSeparator5" alignment="1" max="32767" attributes="0"/> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="translationPanel" max="32767" attributes="0"/> <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> - <Group type="103" alignment="0" groupAlignment="0" max="-2" attributes="0"> - <Component id="transformationLabel" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jSeparator6" alignment="0" pref="371" max="32767" attributes="0"/> - <Component id="jSeparator2" alignment="0" max="32767" attributes="0"/> - </Group> - <Component id="translationPanel" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jSeparator7" alignment="0" min="-2" pref="371" max="-2" attributes="0"/> - <Group type="102" alignment="0" attributes="0"> + <Component id="rotationPanel" alignment="0" max="32767" attributes="0"/> + <Group type="102" attributes="0"> <Component id="scalePanel" min="-2" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> <Component id="jSeparator9" min="-2" pref="10" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="shiftPanel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jSeparator10" min="-2" pref="15" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> - <Component id="resetAllButton" max="32767" attributes="0"/> - <Component id="applyButton" max="32767" attributes="0"/> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="shiftPanel" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace min="-2" pref="24" max="-2" attributes="0"/> + <Component id="shiftLabel" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="lowShiftRB" min="-2" max="-2" attributes="0"/> + <Component id="highShiftRB" min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="jSeparator10" min="-2" pref="15" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="resetAllButton" min="-2" pref="128" max="-2" attributes="0"/> + <Component id="applyButton" min="-2" pref="128" max="-2" attributes="0"/> </Group> + <EmptySpace min="0" pref="93" max="32767" attributes="0"/> </Group> </Group> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> </Group> </Group> <EmptySpace max="-2" attributes="0"/> </Group> - <Component id="jSeparator5" alignment="1" max="32767" attributes="0"/> </Group> </DimensionLayout> <DimensionLayout dim="1"> <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" attributes="0"> - <Component id="transformationLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="13" max="-2" attributes="0"/> - <Component id="jSeparator2" min="-2" pref="10" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="1" max="-2" attributes="0"/> <Component id="translationPanel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jSeparator6" min="-2" pref="10" max="-2" attributes="0"/> <EmptySpace max="32767" attributes="0"/> <Component id="rotationPanel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jSeparator7" min="-2" pref="10" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> + <EmptySpace min="-2" pref="22" max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <Group type="103" groupAlignment="1" attributes="0"> - <Component id="applyButton" min="-2" pref="27" max="-2" attributes="0"/> - <Component id="jSeparator10" min="-2" pref="62" max="-2" attributes="0"/> - </Group> + <Group type="102" attributes="0"> + <Component id="scalePanel" max="32767" attributes="0"/> <EmptySpace max="32767" attributes="0"/> </Group> <Group type="102" attributes="0"> <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Component id="scalePanel" max="32767" attributes="0"/> - <EmptySpace min="-2" pref="7" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="resetAllButton" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="applyButton" min="-2" pref="27" max="-2" attributes="0"/> </Group> <Component id="jSeparator9" min="-2" pref="62" max="-2" attributes="0"/> - <Component id="shiftPanel" min="-2" max="-2" attributes="0"/> - <Component id="resetAllButton" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <Component id="shiftLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="lowShiftRB" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="3" max="-2" attributes="0"/> + <Component id="highShiftRB" min="-2" max="-2" attributes="0"/> + </Group> + <Component id="jSeparator10" min="-2" pref="62" max="-2" attributes="0"/> + </Group> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="shiftPanel" min="-2" max="-2" attributes="0"/> + </Group> </Group> <EmptySpace max="32767" attributes="0"/> </Group> @@ -981,110 +531,93 @@ </DimensionLayout> </Layout> <SubComponents> - <Component class="javax.swing.JLabel" name="transformationLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="12" 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="PostRegistrationCP.transformationLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JSeparator" name="jSeparator2"> - </Component> - <Component class="javax.swing.JSeparator" name="jSeparator6"> - </Component> <Container class="javax.swing.JPanel" name="translationPanel"> <Layout> <DimensionLayout dim="0"> <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" alignment="0" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" alignment="1" attributes="0"> <Component id="jLabel2" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="28" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="51" max="-2" attributes="0"/> + <Component id="translXLabel" min="-2" max="-2" attributes="0"/> </Group> <Group type="102" alignment="1" attributes="0"> <Component id="translationButton" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - </Group> - </Group> - <Group type="103" groupAlignment="0" max="-2" attributes="0"> - <Component id="translXLabel" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="translationXFTF" alignment="0" max="32767" attributes="0"/> - <Group type="102" alignment="0" attributes="0"> - <Component id="leftTranslationXButton" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="rightTranslationXButton" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="translationXFTF" alignment="0" min="-2" pref="54" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="leftTranslationXButton" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="rightTranslationXButton" min="-2" max="-2" attributes="0"/> + </Group> + </Group> </Group> </Group> <EmptySpace type="separate" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" max="-2" attributes="0"> - <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="translYLabel" min="-2" max="-2" attributes="0"/> + <Group type="102" attributes="0"> <Component id="leftTranslationYButton" min="-2" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> <Component id="rightTranslationYButton" min="-2" max="-2" attributes="0"/> </Group> - <Component id="translYLabel" min="-2" max="-2" attributes="0"/> - <Component id="translationYFTF" alignment="0" min="-2" pref="54" max="-2" attributes="0"/> + <Component id="translationYFTF" min="-2" pref="54" max="-2" attributes="0"/> </Group> <EmptySpace type="separate" max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> + <Component id="translZLabel" min="-2" max="-2" attributes="0"/> <Group type="102" alignment="0" attributes="0"> <Component id="leftTranslationZButton" min="-2" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> <Component id="rightTranslationZButton" min="-2" max="-2" attributes="0"/> </Group> - <Component id="translationZFTF" alignment="0" min="-2" pref="54" max="-2" attributes="0"/> - <Component id="translZLabel" min="-2" max="-2" attributes="0"/> + <Component id="translationZFTF" min="-2" pref="54" max="-2" attributes="0"/> </Group> - <EmptySpace pref="14" max="32767" 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"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="translXLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="translYLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="translZLabel" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Component id="rightTranslationZButton" min="-2" max="-2" attributes="0"/> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> - </Group> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="leftTranslationYButton" min="-2" max="-2" attributes="0"/> - <Component id="rightTranslationYButton" min="-2" max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="rightTranslationXButton" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="leftTranslationXButton" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="translationXFTF" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="translationYFTF" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="translationZFTF" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="translXLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="translYLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="translZLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="8" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Group type="103" groupAlignment="1" attributes="0"> + <Group type="102" attributes="0"> + <Component id="rightTranslationZButton" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="6" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="leftTranslationZButton" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="rightTranslationYButton" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="leftTranslationYButton" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="rightTranslationXButton" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="leftTranslationXButton" alignment="0" min="-2" max="-2" attributes="0"/> </Group> - <Component id="translationButton" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> </Group> - <Component id="leftTranslationZButton" min="-2" max="-2" attributes="0"/> </Group> - <EmptySpace max="32767" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="translationXFTF" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="translationYFTF" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="translationZFTF" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> </Group> + <Component id="translationButton" min="-2" max="-2" attributes="0"/> </Group> + <EmptySpace max="32767" attributes="0"/> </Group> </Group> </DimensionLayout> @@ -1096,10 +629,10 @@ <Image iconType="3" name="/restart-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.translationButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translationButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.translationButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translationButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1114,16 +647,16 @@ </Property> </Properties> <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="translationButtonActionPerformed"/> + <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="translationButtonMousePressed"/> </Events> </Component> <Component class="javax.swing.JLabel" name="jLabel2"> <Properties> <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" style="3"/> + <Font name="Tahoma" size="14" style="3"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -1133,7 +666,7 @@ <Image iconType="3" name="/arrow-right-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightTranslationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightTranslationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1167,15 +700,12 @@ <Format subtype="0" type="0"/> </Property> <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.translationXFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translationXFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor"> <Color id="Text Cursor"/> </Property> </Properties> - <Events> - <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="translationXFTFPropertyChange"/> - </Events> </Component> <Component class="javax.swing.JButton" name="leftTranslationYButton"> <Properties> @@ -1183,7 +713,7 @@ <Image iconType="3" name="/arrow-left-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftTranslationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftTranslationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1211,9 +741,6 @@ <Format subtype="0" type="0"/> </Property> </Properties> - <Events> - <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="translationYFTFPropertyChange"/> - </Events> </Component> <Component class="javax.swing.JButton" name="rightTranslationYButton"> <Properties> @@ -1221,7 +748,7 @@ <Image iconType="3" name="/arrow-right-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightTranslationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightTranslationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1249,7 +776,7 @@ <Font name="Tahoma" size="11" 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="PostRegistrationCP.translXLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translXLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -1259,9 +786,6 @@ <Format subtype="0" type="0"/> </Property> </Properties> - <Events> - <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="translationZFTFPropertyChange"/> - </Events> </Component> <Component class="javax.swing.JLabel" name="translZLabel"> <Properties> @@ -1269,7 +793,7 @@ <Font name="Tahoma" size="11" 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="PostRegistrationCP.translZLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translZLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -1279,7 +803,7 @@ <Font name="Tahoma" size="11" 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="PostRegistrationCP.translYLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translYLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -1289,7 +813,7 @@ <Image iconType="3" name="/arrow-right-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightTranslationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightTranslationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1317,7 +841,7 @@ <Image iconType="3" name="/arrow-left-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftTranslationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftTranslationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1351,7 +875,7 @@ <Image iconType="3" name="/arrow-left-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftTranslationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftTranslationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1381,55 +905,49 @@ <DimensionLayout dim="0"> <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace min="-2" pref="48" max="-2" attributes="0"/> - <Component id="rotationButton" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" max="-2" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <Component id="jLabel3" min="-2" max="-2" attributes="0"/> + <EmptySpace min="-2" pref="142" max="-2" attributes="0"/> </Group> - <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="18" max="-2" attributes="0"/> + <Group type="102" alignment="1" attributes="0"> + <Component id="rotationButton" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> - <Component id="rotatXLabel" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="rotationXFTF" alignment="0" min="-2" pref="60" max="-2" attributes="0"/> <Group type="102" alignment="0" attributes="0"> - <Component id="leftRotationXButton" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="rotatXLabel" min="-2" max="-2" attributes="0"/> + <Component id="leftRotationXButton" min="-2" max="-2" attributes="0"/> + </Group> <EmptySpace max="-2" attributes="0"/> <Component id="rightRotationXButton" min="-2" max="-2" attributes="0"/> </Group> </Group> </Group> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="rotationXFTF" min="-2" pref="54" max="-2" attributes="0"/> - </Group> </Group> - <EmptySpace min="-2" pref="21" max="-2" attributes="0"/> + <EmptySpace min="12" pref="12" max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> + <Component id="rotationYFTF" alignment="0" min="-2" pref="60" max="-2" attributes="0"/> <Group type="102" alignment="0" attributes="0"> - <Component id="leftRotationYButton" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="rotatYLabel" min="-2" max="-2" attributes="0"/> + <Component id="leftRotationYButton" min="-2" max="-2" attributes="0"/> + </Group> <EmptySpace max="-2" attributes="0"/> <Component id="rightRotationYButton" min="-2" max="-2" attributes="0"/> </Group> - <Component id="rotationYFTF" min="-2" pref="54" max="-2" attributes="0"/> - <Component id="rotatYLabel" alignment="0" min="-2" max="-2" attributes="0"/> </Group> + <EmptySpace min="-2" pref="12" max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> + <Component id="rotationZFTF" min="-2" pref="60" max="-2" attributes="0"/> <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="22" max="-2" attributes="0"/> - <Component id="rotatZLabel" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="rotationZFTF" 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"/> - <Component id="rightRotationZButton" min="-2" max="-2" attributes="0"/> - </Group> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="rotatZLabel" min="-2" max="-2" attributes="0"/> + <Component id="leftRotationZButton" min="-2" max="-2" attributes="0"/> </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="rightRotationZButton" min="-2" max="-2" attributes="0"/> </Group> </Group> <EmptySpace max="32767" attributes="0"/> @@ -1440,14 +958,10 @@ <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" alignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0"> - <Group type="103" alignment="0" groupAlignment="3" attributes="0"> - <Component id="rotatXLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="103" alignment="1" groupAlignment="3" attributes="0"> - <Component id="rotatYLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="rotatZLabel" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> + <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/> + <Component id="rotatZLabel" alignment="1" min="-2" max="-2" attributes="0"/> + <Component id="rotatYLabel" alignment="1" min="-2" max="-2" attributes="0"/> + <Component id="rotatXLabel" alignment="1" min="-2" max="-2" attributes="0"/> </Group> <EmptySpace min="-2" pref="6" max="-2" attributes="0"/> <Group type="103" groupAlignment="1" attributes="0"> @@ -1463,8 +977,8 @@ </Group> <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="3" attributes="0"> - <Component id="rotationYFTF" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="rotationXFTF" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="rotationYFTF" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="rotationZFTF" alignment="3" min="-2" max="-2" attributes="0"/> </Group> </Group> @@ -1481,7 +995,7 @@ <Image iconType="3" name="/arrow-left-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftRotationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftRotationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1515,7 +1029,7 @@ <Image iconType="3" name="/arrow-left-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftRotationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftRotationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1543,7 +1057,7 @@ <Font name="Tahoma" size="11" 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="PostRegistrationCP.rotatZLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotatZLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -1553,7 +1067,7 @@ <Font name="Tahoma" size="11" 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="PostRegistrationCP.rotatYLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotatYLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -1563,7 +1077,7 @@ <Font name="Tahoma" size="11" 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="PostRegistrationCP.rotatXLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotatXLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -1573,10 +1087,10 @@ <Image iconType="3" name="/restart-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rotationButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotationButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rotationButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotationButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1591,7 +1105,7 @@ </Property> </Properties> <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="rotationButtonActionPerformed"/> + <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="rotationButtonMousePressed"/> </Events> </Component> <Component class="javax.swing.JFormattedTextField" name="rotationZFTF"> @@ -1600,9 +1114,6 @@ <Format subtype="0" type="0"/> </Property> </Properties> - <Events> - <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="rotationZFTFPropertyChange"/> - </Events> </Component> <Component class="javax.swing.JFormattedTextField" name="rotationYFTF"> <Properties> @@ -1610,9 +1121,6 @@ <Format subtype="0" type="0"/> </Property> </Properties> - <Events> - <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="rotationYFTFPropertyChange"/> - </Events> </Component> <Component class="javax.swing.JButton" name="rightRotationZButton"> <Properties> @@ -1620,7 +1128,7 @@ <Image iconType="3" name="/arrow-right-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightRotationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightRotationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1654,7 +1162,7 @@ <Image iconType="3" name="/arrow-right-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightRotationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightRotationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1688,7 +1196,7 @@ <Image iconType="3" name="/arrow-left-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftRotationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftRotationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1722,7 +1230,7 @@ <Image iconType="3" name="/arrow-right-s-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightRotationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightRotationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1756,20 +1264,17 @@ <Format subtype="0" type="0"/> </Property> <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rotationXFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotationXFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> - <Events> - <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="rotationXFTFPropertyChange"/> - </Events> </Component> <Component class="javax.swing.JLabel" name="jLabel3"> <Properties> <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" style="3"/> + <Font name="Tahoma" size="14" style="3"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.jLabel3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -1784,21 +1289,24 @@ <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" attributes="0"> <Component id="jLabel4" min="-2" max="-2" attributes="0"/> - <EmptySpace min="0" pref="42" max="32767" attributes="0"/> + <EmptySpace min="0" pref="93" max="32767" attributes="0"/> </Group> <Group type="102" alignment="1" attributes="0"> <EmptySpace min="0" pref="0" max="32767" attributes="0"/> <Component id="scaleButton" min="-2" max="-2" attributes="0"/> </Group> </Group> - <EmptySpace type="separate" max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="18" max="-2" attributes="0"/> <Component id="scalePlusButton" min="-2" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> <Component id="scaleMinusButton" min="-2" max="-2" attributes="0"/> </Group> - <Component id="scaleFTF" alignment="1" min="-2" pref="54" max="-2" attributes="0"/> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="scaleFTF" min="-2" pref="54" max="-2" attributes="0"/> + </Group> </Group> <EmptySpace max="-2" attributes="0"/> </Group> @@ -1807,19 +1315,24 @@ <DimensionLayout dim="1"> <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" attributes="0"> - <EmptySpace min="-2" pref="1" max="-2" attributes="0"/> - <Component id="jLabel4" min="-2" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - <Component id="scaleButton" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Component id="scaleMinusButton" min="-2" max="-2" attributes="0"/> - <Component id="scalePlusButton" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace min="-2" pref="1" max="-2" attributes="0"/> + <Component id="jLabel4" min="-2" max="-2" attributes="0"/> + </Group> + <Group type="103" alignment="0" groupAlignment="1" attributes="0"> + <Component id="scaleButton" min="-2" max="-2" attributes="0"/> + <Group type="102" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="scalePlusButton" min="-2" max="-2" attributes="0"/> + <Component id="scaleMinusButton" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Component id="scaleFTF" min="-2" max="-2" attributes="0"/> + </Group> + </Group> </Group> - <EmptySpace max="32767" attributes="0"/> - <Component id="scaleFTF" min="-2" max="-2" attributes="0"/> + <EmptySpace min="0" pref="0" max="32767" attributes="0"/> </Group> </Group> </DimensionLayout> @@ -1828,10 +1341,10 @@ <Component class="javax.swing.JLabel" name="jLabel4"> <Properties> <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" style="3"/> + <Font name="Tahoma" size="14" style="3"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.jLabel4.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel4.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> </Component> @@ -1841,7 +1354,7 @@ <Image iconType="3" name="/add-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scalePlusButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scalePlusButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1869,13 +1382,26 @@ <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scalePlusButtonMouseReleased"/> </Events> </Component> - <Component class="javax.swing.JButton" name="scaleMinusButton"> + <Component class="javax.swing.JFormattedTextField" name="scaleFTF"> + <Properties> + <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor"> + <Format subtype="0" type="0"/> + </Property> + <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scaleFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="scaleButton"> <Properties> <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/subtract-line.png"/> + <Image iconType="3" name="/restart-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scaleMinusButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scaleButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scaleButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1888,44 +1414,18 @@ <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor"> <Insets value="[2, 2, 2, 2]"/> </Property> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[24, 24]"/> - </Property> - <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[24, 24]"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[24, 24]"/> - </Property> - </Properties> - <Events> - <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleMinusButtonMousePressed"/> - <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleMinusButtonMouseReleased"/> - </Events> - </Component> - <Component class="javax.swing.JFormattedTextField" name="scaleFTF"> - <Properties> - <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor"> - <Format subtype="0" type="0"/> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scaleFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> </Properties> <Events> - <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="scaleFTFPropertyChange"/> + <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleButtonMousePressed"/> </Events> </Component> - <Component class="javax.swing.JButton" name="scaleButton"> + <Component class="javax.swing.JButton" name="scaleMinusButton"> <Properties> <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/restart-line.png"/> + <Image iconType="3" name="/subtract-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scaleButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scaleButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scaleMinusButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1938,9 +1438,19 @@ <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor"> <Insets value="[2, 2, 2, 2]"/> </Property> + <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[24, 24]"/> + </Property> + <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[24, 24]"/> + </Property> + <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> + <Dimension value="[24, 24]"/> + </Property> </Properties> <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="scaleButtonActionPerformed"/> + <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleMinusButtonMousePressed"/> + <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleMinusButtonMouseReleased"/> </Events> </Component> </SubComponents> @@ -1951,10 +1461,10 @@ <Image iconType="3" name="/refresh-line.png"/> </Property> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.resetAllButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.resetAllButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.resetAllButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.resetAllButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -1963,11 +1473,9 @@ </Property> </Properties> <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="resetAllButtonActionPerformed"/> + <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="resetAllButtonMousePressed"/> </Events> </Component> - <Component class="javax.swing.JSeparator" name="jSeparator7"> - </Component> <Component class="javax.swing.JSeparator" name="jSeparator9"> <Properties> <Property name="orientation" type="int" value="1"/> @@ -1978,80 +1486,15 @@ <Layout> <DimensionLayout dim="0"> <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="lowShiftRB" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="highShiftRB" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace min="0" pref="8" max="32767" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="shiftLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - </Group> + <EmptySpace min="0" pref="21" max="32767" attributes="0"/> </Group> </DimensionLayout> <DimensionLayout dim="1"> <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <Component id="shiftLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="lowShiftRB" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="highShiftRB" min="-2" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - </Group> + <EmptySpace min="0" pref="84" max="32767" attributes="0"/> </Group> </DimensionLayout> </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="shiftLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="11" 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="PostRegistrationCP.shiftLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.shiftLabel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JRadioButton" name="lowShiftRB"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="precisionGroup"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.lowShiftRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.lowShiftRB.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="lowShiftRBActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JRadioButton" name="highShiftRB"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="precisionGroup"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.highShiftRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.highShiftRB.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="highShiftRBActionPerformed"/> - </Events> - </Component> - </SubComponents> </Container> <Component class="javax.swing.JSeparator" name="jSeparator10"> <Properties> @@ -2061,10 +1504,10 @@ <Component class="javax.swing.JButton" name="applyButton"> <Properties> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.applyButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.applyButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.applyButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.applyButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> @@ -2076,12 +1519,137 @@ </Property> </Properties> <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="applyButtonActionPerformed"/> + <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="applyButtonMousePressed"/> </Events> </Component> <Component class="javax.swing.JSeparator" name="jSeparator5"> </Component> + <Component class="javax.swing.JLabel" name="shiftLabel"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="11" 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.shiftLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.shiftLabel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JRadioButton" name="lowShiftRB"> + <Properties> + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> + <ComponentRef name="precisionGroup"/> + </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.lowShiftRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.lowShiftRB.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="lowShiftRBActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JRadioButton" name="highShiftRB"> + <Properties> + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> + <ComponentRef name="precisionGroup"/> + </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.highShiftRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.highShiftRB.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="highShiftRBActionPerformed"/> + </Events> + </Component> </SubComponents> </Container> + <Component class="javax.swing.JButton" name="jButton1"> + <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.jButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JSeparator" name="jSeparator2"> + </Component> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Ubuntu" size="14" 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.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JCheckBox" name="jCheckBox1"> + <Properties> + <Property name="selected" type="boolean" value="true"/> + <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> + <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jCheckBox1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox1ActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JFormattedTextField" name="jFormattedTextField1"> + <Properties> + <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor"> + <Format subtype="0" type="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.jFormattedTextField1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel5"> + <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.jLabel5.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JFormattedTextField" name="jFormattedTextField2"> + <Properties> + <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor"> + <Format subtype="1" type="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.jFormattedTextField2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabel6"> + <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.jLabel6.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JComboBox" name="jComboBox1"> + <Properties> + <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor"> + <StringArray count="2"> + <StringItem index="0" value="None"/> + <StringItem index="1" value="Random 200"/> + </StringArray> + </Property> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<String>"/> + </AuxValues> + </Component> </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 new file mode 100644 index 0000000000000000000000000000000000000000..217e073af1e8932479dc47b50e8547f2433e7bc5 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.java @@ -0,0 +1,1416 @@ +package cz.fidentis.analyst.registration; + +import cz.fidentis.analyst.canvas.Direction; +import cz.fidentis.analyst.core.ControlPanel; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.AbstractAction; +import javax.swing.ImageIcon; +import javax.swing.JFormattedTextField; + +/** + * Panel used to interactively visualize two face and adjust their registration. + * + * @author Richard Pajersky + */ +public class RegistrationPanel extends ControlPanel { + + /* + * Mandatory design elements + */ + public static final String ICON = "registration28x28.png"; + public static final String NAME = "Registration"; + + public static final double TRANSFORMATION_FINESS = 1.0; + + /** + * Transformation shift is higher + */ + public static final double HIGH_SHIFT_QUOTIENT = 1.0; + + /** + * Transformation shift is lower + */ + public static final double LOW_SHIFT_QUOTIENT = 0.1; + + + /** + * Listener which translates executed actions + * into {@link cz.fidentis.analyst.gui.scene.DrawableMesh} + */ + private RegistrationAction listener; + + /** + * Animator which animates transformations + */ + private final ModelRotationAnimator animator = new ModelRotationAnimator(); + + private double moveModifier = LOW_SHIFT_QUOTIENT; + + /** + * Constructor. + * @param action Action listener + */ + public RegistrationPanel(RegistrationAction action) { + this.setName(NAME); + this.listener = action; + initComponents(); + setDefaults(); + + // connect GUI element with RegistrationAction listener: + jButton1.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_APPLY_ICP)); + translationXFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SHIFT_X)); + translationYFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SHIFT_Y)); + translationZFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SHIFT_Z)); + rotationXFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ROTATE_X)); + rotationYFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ROTATE_Y)); + rotationZFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ROTATE_Z)); + scaleFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SCALE)); + frontButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_FRONT_VIEW)); + profileButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SIDE_VIEW)); + translationButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_RESET_TRANSLATION)); + rotationButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_RESET_ROTATION)); + scaleButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_RESET_SCALE)); + resetAllButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_RESET_TRANSLATION)); + applyButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_APPLY_TRANSFORMATIONS)); + thersholdFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_FP_CLOSENESS_THRESHOLD)); + jCheckBox1.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ICP_SCALE)); + jFormattedTextField1.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ICP_ERROR)); + jFormattedTextField2.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ICP_MAX_ITERATIONS)); + jComboBox1.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ICP_UNDERSAMPLING)); + } + + private ActionListener createListener(RegistrationAction action, String command) { + return new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + action.actionPerformed(new ActionEvent( + e.getSource(), + ActionEvent.ACTION_PERFORMED, + command) + ); + } + }; + } + + /** + * Additional initialization of panel + */ + private void setDefaults() { + lowShiftRB.setSelected(true); + thersholdFTF.setValue(5.0); + //resetAllButtonActionPerformed(null); + + rotationXFTF.setValue(0.0); + rotationYFTF.setValue(0.0); + rotationZFTF.setValue(0.0); + translationXFTF.setValue(0.0); + translationYFTF.setValue(0.0); + translationZFTF.setValue(0.0); + scaleFTF.setValue(0.0); + } + + /** + * Alters transformation based on move amount specified in listener + * by updating specific formatted field + * + * @param dir Transformation direction + * @throws UnsupportedOperationException if {@code dir} is invalid + */ + public void transform(Direction dir) { + switch (dir) { + case TRANSLATE_LEFT: + decreaseInputField(translationXFTF); + break; + case TRANSLATE_RIGHT: + increaseInputField(translationXFTF); + break; + case TRANSLATE_UP: + decreaseInputField(translationYFTF); + break; + case TRANSLATE_DOWN: + increaseInputField(translationYFTF); + break; + case TRANSLATE_IN: + decreaseInputField(translationZFTF); + break; + case TRANSLATE_OUT: + increaseInputField(translationZFTF); + break; + case ROTATE_LEFT: + decreaseInputField(rotationXFTF); + break; + case ROTATE_RIGHT: + increaseInputField(rotationXFTF); + break; + case ROTATE_UP: + increaseInputField(rotationYFTF); + break; + case ROTATE_DOWN: + decreaseInputField(rotationYFTF); + break; + case ROTATE_IN: + decreaseInputField(rotationZFTF); + break; + case ROTATE_OUT: + decreaseInputField(rotationZFTF); + break; + case ZOOM_OUT: + increaseInputField(scaleFTF); + break; + case ZOOM_IN: + increaseInputField(scaleFTF); + break; + default: + throw new UnsupportedOperationException(); + } + } + + private void increaseInputField(JFormattedTextField textField) { + double newValue = ((Number)textField.getValue()).doubleValue() + moveModifier; + newValue *= TRANSFORMATION_FINESS; + textField.setValue(newValue); + textField.postActionEvent(); + } + + private void decreaseInputField(JFormattedTextField textField) { + double newValue = ((Number)textField.getValue()).doubleValue() - moveModifier; + newValue *= TRANSFORMATION_FINESS; + textField.setValue(newValue); + textField.postActionEvent(); + } + + @Override + public ImageIcon getIcon() { + return getStaticIcon(); + } + + /** + * Static implementation of the {@link #getIcon()} method. + * + * @return Control panel icon + */ + public static ImageIcon getStaticIcon() { + return new ImageIcon(RegistrationPanel.class.getClassLoader().getResource("/" + ICON)); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + primaryRenderModeGroup = new javax.swing.ButtonGroup(); + secondaryRenerModeGroup = new javax.swing.ButtonGroup(); + precisionGroup = new javax.swing.ButtonGroup(); + registrationAdjustmentLabel = new javax.swing.JLabel(); + jSeparator11 = new javax.swing.JSeparator(); + visualizationPanel = new javax.swing.JPanel(); + visualizationLabel = new javax.swing.JLabel(); + viewPanel = new javax.swing.JPanel(); + profileButton = new javax.swing.JButton(); + frontButton = new javax.swing.JButton(); + viewLabel = new javax.swing.JLabel(); + featurePointsPanel = new javax.swing.JPanel(); + thersholdUpButton = new javax.swing.JButton(); + thersholdFTF = new javax.swing.JFormattedTextField(); + featurePointsLabel = new javax.swing.JLabel(); + thresholdDownButton = new javax.swing.JButton(); + transparencySlider = new javax.swing.JSlider(); + transparencyButton = new javax.swing.JButton(); + transformationPanel = new javax.swing.JPanel(); + translationPanel = new javax.swing.JPanel(); + translationButton = new javax.swing.JButton(); + jLabel2 = new javax.swing.JLabel(); + rightTranslationXButton = new javax.swing.JButton(); + translationXFTF = new javax.swing.JFormattedTextField(); + leftTranslationYButton = new javax.swing.JButton(); + translationYFTF = new javax.swing.JFormattedTextField(); + rightTranslationYButton = new javax.swing.JButton(); + translXLabel = new javax.swing.JLabel(); + translationZFTF = new javax.swing.JFormattedTextField(); + translZLabel = new javax.swing.JLabel(); + translYLabel = new javax.swing.JLabel(); + rightTranslationZButton = new javax.swing.JButton(); + leftTranslationXButton = new javax.swing.JButton(); + leftTranslationZButton = new javax.swing.JButton(); + rotationPanel = new javax.swing.JPanel(); + leftRotationYButton = new javax.swing.JButton(); + leftRotationXButton = new javax.swing.JButton(); + rotatZLabel = new javax.swing.JLabel(); + rotatYLabel = new javax.swing.JLabel(); + rotatXLabel = new javax.swing.JLabel(); + rotationButton = new javax.swing.JButton(); + rotationZFTF = new javax.swing.JFormattedTextField(); + rotationYFTF = new javax.swing.JFormattedTextField(); + rightRotationZButton = new javax.swing.JButton(); + rightRotationYButton = new javax.swing.JButton(); + leftRotationZButton = new javax.swing.JButton(); + rightRotationXButton = new javax.swing.JButton(); + rotationXFTF = new javax.swing.JFormattedTextField(); + jLabel3 = new javax.swing.JLabel(); + scalePanel = new javax.swing.JPanel(); + jLabel4 = new javax.swing.JLabel(); + scalePlusButton = new javax.swing.JButton(); + scaleFTF = new javax.swing.JFormattedTextField(); + scaleButton = new javax.swing.JButton(); + scaleMinusButton = new javax.swing.JButton(); + resetAllButton = new javax.swing.JButton(); + jSeparator9 = new javax.swing.JSeparator(); + shiftPanel = new javax.swing.JPanel(); + jSeparator10 = new javax.swing.JSeparator(); + applyButton = new javax.swing.JButton(); + jSeparator5 = new javax.swing.JSeparator(); + shiftLabel = new javax.swing.JLabel(); + lowShiftRB = new javax.swing.JRadioButton(); + highShiftRB = new javax.swing.JRadioButton(); + jButton1 = new javax.swing.JButton(); + jSeparator2 = new javax.swing.JSeparator(); + jLabel1 = new javax.swing.JLabel(); + jCheckBox1 = new javax.swing.JCheckBox(); + jFormattedTextField1 = new javax.swing.JFormattedTextField(); + jLabel5 = new javax.swing.JLabel(); + jFormattedTextField2 = new javax.swing.JFormattedTextField(); + jLabel6 = new javax.swing.JLabel(); + jComboBox1 = new javax.swing.JComboBox<>(); + + setMinimumSize(new java.awt.Dimension(600, 600)); + setPreferredSize(new java.awt.Dimension(415, 700)); + + registrationAdjustmentLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(registrationAdjustmentLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.registrationAdjustmentLabel.text")); // NOI18N + + visualizationPanel.setMinimumSize(new java.awt.Dimension(400, 0)); + visualizationPanel.setPreferredSize(new java.awt.Dimension(400, 265)); + + visualizationLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(visualizationLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.visualizationLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(profileButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.profileButton.text")); // NOI18N + profileButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.profileButton.toolTipText")); // NOI18N + profileButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder())); + profileButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + + org.openide.awt.Mnemonics.setLocalizedText(frontButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.frontButton.text")); // NOI18N + frontButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.frontButton.toolTipText")); // NOI18N + frontButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder())); + frontButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + + viewLabel.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(viewLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.viewLabel.text")); // NOI18N + + javax.swing.GroupLayout viewPanelLayout = new javax.swing.GroupLayout(viewPanel); + viewPanel.setLayout(viewPanelLayout); + viewPanelLayout.setHorizontalGroup( + viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(viewPanelLayout.createSequentialGroup() + .addComponent(viewLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(frontButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(profileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(216, 216, 216)) + ); + viewPanelLayout.setVerticalGroup( + viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(viewLabel) + .addComponent(frontButton) + .addComponent(profileButton)) + ); + + thersholdUpButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(thersholdUpButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.thersholdUpButton.text")); // NOI18N + thersholdUpButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + thersholdUpButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + thersholdUpButton.setMaximumSize(new java.awt.Dimension(24, 24)); + thersholdUpButton.setMinimumSize(new java.awt.Dimension(24, 24)); + thersholdUpButton.setPreferredSize(new java.awt.Dimension(24, 24)); + thersholdUpButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + thersholdUpButtonActionPerformed(evt); + } + }); + + thersholdFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); + + featurePointsLabel.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(featurePointsLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.featurePointsLabel.text")); // NOI18N + + thresholdDownButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/subtract-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(thresholdDownButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.thresholdDownButton.text")); // NOI18N + thresholdDownButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + thresholdDownButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + thresholdDownButton.setMaximumSize(new java.awt.Dimension(24, 24)); + thresholdDownButton.setMinimumSize(new java.awt.Dimension(24, 24)); + thresholdDownButton.setPreferredSize(new java.awt.Dimension(24, 24)); + thresholdDownButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + thresholdDownButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout featurePointsPanelLayout = new javax.swing.GroupLayout(featurePointsPanel); + featurePointsPanel.setLayout(featurePointsPanelLayout); + featurePointsPanelLayout.setHorizontalGroup( + featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(featurePointsPanelLayout.createSequentialGroup() + .addComponent(featurePointsLabel) + .addGap(18, 18, 18) + .addComponent(thersholdFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(thersholdUpButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(thresholdDownButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(192, Short.MAX_VALUE)) + ); + featurePointsPanelLayout.setVerticalGroup( + featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(featurePointsPanelLayout.createSequentialGroup() + .addGroup(featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(featurePointsLabel) + .addGroup(featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(thersholdFTF, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addComponent(thersholdUpButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(thresholdDownButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addGap(0, 10, Short.MAX_VALUE)) + ); + + transparencySlider.setMajorTickSpacing(5); + transparencySlider.setMaximum(20); + transparencySlider.setMinorTickSpacing(5); + transparencySlider.setPaintTicks(true); + transparencySlider.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.transparencySlider.toolTipText")); // NOI18N + transparencySlider.setValue(10); + transparencySlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); + transparencySlider.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + transparencySliderStateChanged(evt); + } + }); + + transparencyButton.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(transparencyButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.transparencyButton.text")); // NOI18N + transparencyButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.transparencyButton.toolTipText")); // NOI18N + transparencyButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder())); + transparencyButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + transparencyButton.setPreferredSize(new java.awt.Dimension(100, 19)); + transparencyButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + transparencyButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout visualizationPanelLayout = new javax.swing.GroupLayout(visualizationPanel); + visualizationPanel.setLayout(visualizationPanelLayout); + visualizationPanelLayout.setHorizontalGroup( + visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(visualizationPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(featurePointsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(viewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(visualizationPanelLayout.createSequentialGroup() + .addComponent(visualizationLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(transparencySlider, javax.swing.GroupLayout.PREFERRED_SIZE, 281, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(transparencyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + visualizationPanelLayout.setVerticalGroup( + visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, visualizationPanelLayout.createSequentialGroup() + .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(visualizationPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(transparencySlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, visualizationPanelLayout.createSequentialGroup() + .addGap(27, 27, 27) + .addComponent(visualizationLabel)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, visualizationPanelLayout.createSequentialGroup() + .addGap(24, 24, 24) + .addComponent(transparencyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(34, 34, 34) + .addComponent(viewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(22, 22, 22) + .addComponent(featurePointsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(25, Short.MAX_VALUE)) + ); + + transformationPanel.setPreferredSize(new java.awt.Dimension(400, 400)); + + translationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(translationButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translationButton.text")); // NOI18N + translationButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translationButton.toolTipText")); // NOI18N + translationButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + translationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + translationButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + translationButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + translationButtonMousePressed(evt); + } + }); + + jLabel2.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel2.text")); // NOI18N + + rightTranslationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rightTranslationXButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightTranslationXButton.text")); // NOI18N + rightTranslationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + rightTranslationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + rightTranslationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + rightTranslationXButton.setMaximumSize(new java.awt.Dimension(24, 24)); + rightTranslationXButton.setMinimumSize(new java.awt.Dimension(24, 24)); + rightTranslationXButton.setPreferredSize(new java.awt.Dimension(24, 24)); + rightTranslationXButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + rightTranslationXButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + rightTranslationXButtonMouseReleased(evt); + } + }); + + translationXFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); + translationXFTF.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translationXFTF.toolTipText")); // NOI18N + translationXFTF.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR)); + + leftTranslationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(leftTranslationYButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftTranslationYButton.text")); // NOI18N + leftTranslationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + leftTranslationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + leftTranslationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + leftTranslationYButton.setPreferredSize(new java.awt.Dimension(24, 24)); + leftTranslationYButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + leftTranslationYButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + leftTranslationYButtonMouseReleased(evt); + } + }); + + translationYFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); + + rightTranslationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rightTranslationYButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightTranslationYButton.text")); // NOI18N + rightTranslationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + rightTranslationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + rightTranslationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + rightTranslationYButton.setPreferredSize(new java.awt.Dimension(24, 24)); + rightTranslationYButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + rightTranslationYButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + rightTranslationYButtonMouseReleased(evt); + } + }); + + translXLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(translXLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translXLabel.text")); // NOI18N + + translationZFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); + + translZLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(translZLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translZLabel.text")); // NOI18N + + translYLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(translYLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translYLabel.text")); // NOI18N + + rightTranslationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rightTranslationZButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightTranslationZButton.text")); // NOI18N + rightTranslationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + rightTranslationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + rightTranslationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + rightTranslationZButton.setPreferredSize(new java.awt.Dimension(24, 24)); + rightTranslationZButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + rightTranslationZButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + rightTranslationZButtonMouseReleased(evt); + } + }); + + leftTranslationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(leftTranslationXButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftTranslationXButton.text")); // NOI18N + leftTranslationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + leftTranslationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + leftTranslationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + leftTranslationXButton.setMaximumSize(new java.awt.Dimension(24, 24)); + leftTranslationXButton.setMinimumSize(new java.awt.Dimension(24, 24)); + leftTranslationXButton.setPreferredSize(new java.awt.Dimension(24, 24)); + leftTranslationXButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + leftTranslationXButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + leftTranslationXButtonMouseReleased(evt); + } + }); + + leftTranslationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(leftTranslationZButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftTranslationZButton.text")); // NOI18N + leftTranslationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + leftTranslationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + leftTranslationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + leftTranslationZButton.setPreferredSize(new java.awt.Dimension(24, 24)); + leftTranslationZButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + leftTranslationZButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + leftTranslationZButtonMouseReleased(evt); + } + }); + + javax.swing.GroupLayout translationPanelLayout = new javax.swing.GroupLayout(translationPanel); + translationPanel.setLayout(translationPanelLayout); + translationPanelLayout.setHorizontalGroup( + translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(translationPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(translationPanelLayout.createSequentialGroup() + .addComponent(jLabel2) + .addGap(51, 51, 51) + .addComponent(translXLabel)) + .addGroup(translationPanelLayout.createSequentialGroup() + .addComponent(translationButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(translationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(translationPanelLayout.createSequentialGroup() + .addComponent(leftTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rightTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))) + .addGap(18, 18, 18) + .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(translYLabel) + .addGroup(translationPanelLayout.createSequentialGroup() + .addComponent(leftTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rightTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(translationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(translZLabel) + .addGroup(translationPanelLayout.createSequentialGroup() + .addComponent(leftTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rightTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(translationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + translationPanelLayout.setVerticalGroup( + translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(translationPanelLayout.createSequentialGroup() + .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(translXLabel) + .addComponent(translYLabel) + .addComponent(translZLabel) + .addComponent(jLabel2)) + .addGap(8, 8, 8) + .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(translationPanelLayout.createSequentialGroup() + .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(translationPanelLayout.createSequentialGroup() + .addComponent(rightTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(6, 6, 6)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, translationPanelLayout.createSequentialGroup() + .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(leftTranslationZButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(rightTranslationYButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(leftTranslationYButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(rightTranslationXButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(leftTranslationXButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) + .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(translationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(translationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(translationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(translationButton)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + leftRotationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(leftRotationYButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftRotationYButton.text")); // NOI18N + leftRotationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + leftRotationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + leftRotationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + leftRotationYButton.setMaximumSize(new java.awt.Dimension(24, 24)); + leftRotationYButton.setMinimumSize(new java.awt.Dimension(24, 24)); + leftRotationYButton.setPreferredSize(new java.awt.Dimension(24, 24)); + leftRotationYButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + leftRotationYButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + leftRotationYButtonMouseReleased(evt); + } + }); + + leftRotationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(leftRotationXButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftRotationXButton.text")); // NOI18N + leftRotationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + leftRotationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + leftRotationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + leftRotationXButton.setPreferredSize(new java.awt.Dimension(24, 24)); + leftRotationXButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + leftRotationXButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + leftRotationXButtonMouseReleased(evt); + } + }); + + rotatZLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rotatZLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotatZLabel.text")); // NOI18N + + rotatYLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rotatYLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotatYLabel.text")); // NOI18N + + rotatXLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rotatXLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotatXLabel.text")); // NOI18N + + rotationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rotationButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotationButton.text")); // NOI18N + rotationButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotationButton.toolTipText")); // NOI18N + rotationButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + rotationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + rotationButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + rotationButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + rotationButtonMousePressed(evt); + } + }); + + rotationZFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); + + rotationYFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); + + rightRotationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rightRotationZButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightRotationZButton.text")); // NOI18N + rightRotationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + rightRotationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + rightRotationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + rightRotationZButton.setMaximumSize(new java.awt.Dimension(24, 24)); + rightRotationZButton.setMinimumSize(new java.awt.Dimension(24, 24)); + rightRotationZButton.setPreferredSize(new java.awt.Dimension(24, 24)); + rightRotationZButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + rightRotationZButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + rightRotationZButtonMouseReleased(evt); + } + }); + + rightRotationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rightRotationYButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightRotationYButton.text")); // NOI18N + rightRotationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + rightRotationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + rightRotationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + rightRotationYButton.setMaximumSize(new java.awt.Dimension(24, 24)); + rightRotationYButton.setMinimumSize(new java.awt.Dimension(24, 24)); + rightRotationYButton.setPreferredSize(new java.awt.Dimension(24, 24)); + rightRotationYButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + rightRotationYButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + rightRotationYButtonMouseReleased(evt); + } + }); + + leftRotationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(leftRotationZButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftRotationZButton.text")); // NOI18N + leftRotationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + leftRotationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + leftRotationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + leftRotationZButton.setMaximumSize(new java.awt.Dimension(24, 24)); + leftRotationZButton.setMinimumSize(new java.awt.Dimension(24, 24)); + leftRotationZButton.setPreferredSize(new java.awt.Dimension(24, 24)); + leftRotationZButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + leftRotationZButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + leftRotationZButtonMouseReleased(evt); + } + }); + + rightRotationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(rightRotationXButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightRotationXButton.text")); // NOI18N + rightRotationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + rightRotationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + rightRotationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + rightRotationXButton.setMaximumSize(new java.awt.Dimension(24, 24)); + rightRotationXButton.setMinimumSize(new java.awt.Dimension(24, 24)); + rightRotationXButton.setPreferredSize(new java.awt.Dimension(24, 24)); + rightRotationXButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + rightRotationXButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + rightRotationXButtonMouseReleased(evt); + } + }); + + rotationXFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); + rotationXFTF.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotationXFTF.toolTipText")); // NOI18N + + jLabel3.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel3.text")); // NOI18N + + javax.swing.GroupLayout rotationPanelLayout = new javax.swing.GroupLayout(rotationPanel); + rotationPanel.setLayout(rotationPanelLayout); + rotationPanelLayout.setHorizontalGroup( + rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(rotationPanelLayout.createSequentialGroup() + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(rotationPanelLayout.createSequentialGroup() + .addComponent(jLabel3) + .addGap(142, 142, 142)) + .addGroup(rotationPanelLayout.createSequentialGroup() + .addComponent(rotationButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rotationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(rotationPanelLayout.createSequentialGroup() + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(rotatXLabel) + .addComponent(leftRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rightRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))) + .addGap(12, 12, 12) + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rotationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(rotationPanelLayout.createSequentialGroup() + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(rotatYLabel) + .addComponent(leftRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rightRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(12, 12, 12) + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rotationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(rotationPanelLayout.createSequentialGroup() + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(rotatZLabel) + .addComponent(leftRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rightRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + rotationPanelLayout.setVerticalGroup( + rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(rotationPanelLayout.createSequentialGroup() + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel3) + .addComponent(rotatZLabel, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(rotatYLabel, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(rotatXLabel, javax.swing.GroupLayout.Alignment.TRAILING)) + .addGap(6, 6, 6) + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(rotationButton) + .addGroup(rotationPanelLayout.createSequentialGroup() + .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rightRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(leftRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .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) + .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(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) + .addComponent(rotationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jLabel4.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel4.text")); // NOI18N + + scalePlusButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(scalePlusButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scalePlusButton.text")); // NOI18N + scalePlusButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + scalePlusButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + scalePlusButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + scalePlusButton.setMaximumSize(new java.awt.Dimension(24, 24)); + scalePlusButton.setMinimumSize(new java.awt.Dimension(24, 24)); + scalePlusButton.setPreferredSize(new java.awt.Dimension(24, 24)); + scalePlusButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + scalePlusButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + scalePlusButtonMouseReleased(evt); + } + }); + + scaleFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); + scaleFTF.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scaleFTF.toolTipText")); // NOI18N + + scaleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(scaleButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scaleButton.text")); // NOI18N + scaleButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scaleButton.toolTipText")); // NOI18N + scaleButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + scaleButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + scaleButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + scaleButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + scaleButtonMousePressed(evt); + } + }); + + scaleMinusButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/subtract-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(scaleMinusButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scaleMinusButton.text")); // NOI18N + scaleMinusButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + scaleMinusButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + scaleMinusButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + scaleMinusButton.setMaximumSize(new java.awt.Dimension(24, 24)); + scaleMinusButton.setMinimumSize(new java.awt.Dimension(24, 24)); + scaleMinusButton.setPreferredSize(new java.awt.Dimension(24, 24)); + scaleMinusButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + scaleMinusButtonMousePressed(evt); + } + public void mouseReleased(java.awt.event.MouseEvent evt) { + scaleMinusButtonMouseReleased(evt); + } + }); + + javax.swing.GroupLayout scalePanelLayout = new javax.swing.GroupLayout(scalePanel); + scalePanel.setLayout(scalePanelLayout); + scalePanelLayout.setHorizontalGroup( + scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup() + .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(scalePanelLayout.createSequentialGroup() + .addComponent(jLabel4) + .addGap(0, 93, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(scaleButton))) + .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(scalePanelLayout.createSequentialGroup() + .addGap(18, 18, 18) + .addComponent(scalePlusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scaleMinusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(scaleFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()) + ); + scalePanelLayout.setVerticalGroup( + scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(scalePanelLayout.createSequentialGroup() + .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(scalePanelLayout.createSequentialGroup() + .addGap(1, 1, 1) + .addComponent(jLabel4)) + .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(scaleButton) + .addGroup(scalePanelLayout.createSequentialGroup() + .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scalePlusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(scaleMinusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scaleFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addGap(0, 0, Short.MAX_VALUE)) + ); + + resetAllButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/refresh-line.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(resetAllButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.resetAllButton.text")); // NOI18N + resetAllButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.resetAllButton.toolTipText")); // NOI18N + resetAllButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + resetAllButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + resetAllButtonMousePressed(evt); + } + }); + + jSeparator9.setOrientation(javax.swing.SwingConstants.VERTICAL); + + javax.swing.GroupLayout shiftPanelLayout = new javax.swing.GroupLayout(shiftPanel); + shiftPanel.setLayout(shiftPanelLayout); + shiftPanelLayout.setHorizontalGroup( + shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 21, Short.MAX_VALUE) + ); + shiftPanelLayout.setVerticalGroup( + shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 84, Short.MAX_VALUE) + ); + + jSeparator10.setOrientation(javax.swing.SwingConstants.VERTICAL); + + org.openide.awt.Mnemonics.setLocalizedText(applyButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.applyButton.text")); // NOI18N + applyButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.applyButton.toolTipText")); // NOI18N + applyButton.setBorder(javax.swing.BorderFactory.createTitledBorder("")); + applyButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); + applyButton.addMouseListener(new java.awt.event.MouseAdapter() { + public void mousePressed(java.awt.event.MouseEvent evt) { + applyButtonMousePressed(evt); + } + }); + + shiftLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(shiftLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.shiftLabel.text")); // NOI18N + shiftLabel.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.shiftLabel.toolTipText")); // NOI18N + + precisionGroup.add(lowShiftRB); + org.openide.awt.Mnemonics.setLocalizedText(lowShiftRB, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.lowShiftRB.text")); // NOI18N + lowShiftRB.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.lowShiftRB.toolTipText")); // NOI18N + lowShiftRB.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + lowShiftRBActionPerformed(evt); + } + }); + + precisionGroup.add(highShiftRB); + org.openide.awt.Mnemonics.setLocalizedText(highShiftRB, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.highShiftRB.text")); // NOI18N + highShiftRB.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.highShiftRB.toolTipText")); // NOI18N + highShiftRB.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + highShiftRBActionPerformed(evt); + } + }); + + javax.swing.GroupLayout transformationPanelLayout = new javax.swing.GroupLayout(transformationPanel); + transformationPanel.setLayout(transformationPanelLayout); + transformationPanelLayout.setHorizontalGroup( + transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSeparator5, javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, transformationPanelLayout.createSequentialGroup() + .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(translationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rotationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addComponent(scalePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jSeparator9, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(shiftPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addGap(24, 24, 24) + .addComponent(shiftLabel)) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(lowShiftRB) + .addComponent(highShiftRB)))) + .addGap(18, 18, 18) + .addComponent(jSeparator10, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(resetAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(applyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 93, Short.MAX_VALUE))))) + .addContainerGap()) + ); + transformationPanelLayout.setVerticalGroup( + transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addComponent(translationPanel, 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(rotationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(22, 22, 22) + .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addComponent(scalePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addComponent(resetAllButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(applyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jSeparator9, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(transformationPanelLayout.createSequentialGroup() + .addComponent(shiftLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(lowShiftRB) + .addGap(3, 3, 3) + .addComponent(highShiftRB)) + .addComponent(jSeparator10, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(shiftPanel, 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(jSeparator5, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)) + ); + + org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jButton1.text")); // NOI18N + jButton1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton1ActionPerformed(evt); + } + }); + + jLabel1.setFont(new java.awt.Font("Ubuntu", 1, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel1.text")); // NOI18N + + jCheckBox1.setSelected(true); + org.openide.awt.Mnemonics.setLocalizedText(jCheckBox1, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jCheckBox1.text")); // NOI18N + jCheckBox1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jCheckBox1ActionPerformed(evt); + } + }); + + jFormattedTextField1.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter())); + jFormattedTextField1.setText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jFormattedTextField1.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel5.text")); // NOI18N + + jFormattedTextField2.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(java.text.NumberFormat.getIntegerInstance()))); + jFormattedTextField2.setText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jFormattedTextField2.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel6.text")); // NOI18N + + jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "None", "Random 200" })); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(visualizationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 1057, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 599, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jSeparator2) + .addGap(450, 450, 450)) + .addGroup(layout.createSequentialGroup() + .addComponent(registrationAdjustmentLabel) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel1) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(29, 29, 29) + .addComponent(jButton1)) + .addGroup(layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jCheckBox1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(4, 4, 4) + .addComponent(jLabel5) + .addGap(9, 9, 9) + .addComponent(jFormattedTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(1, 1, 1) + .addComponent(jLabel6) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(jSeparator11) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jCheckBox1) + .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel5) + .addComponent(jFormattedTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel6) + .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButton1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jSeparator11, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(registrationAdjustmentLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(visualizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 206, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(22, 22, 22) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 333, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// </editor-fold>//GEN-END:initComponents + + + /** + * Resets transparency slider to default position + * @param evt + */ + private void transparencyButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_transparencyButtonActionPerformed + transparencySlider.setValue(RegistrationAction.TRANSPARENCY_RANGE); + transparencySlider.repaint(); + //listener.setTransparency(PostRegistrationListener.TRANSPARENCY_RANGE); + }//GEN-LAST:event_transparencyButtonActionPerformed + + private void transparencySliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_transparencySliderStateChanged + listener.actionPerformed( + new ActionEvent( + evt.getSource(), + ActionEvent.ACTION_PERFORMED, + RegistrationAction.ACTION_COMMAND_TRANSPARENCY) + ); + }//GEN-LAST:event_transparencySliderStateChanged + + private void leftTranslationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationXButtonMousePressed + animator.startModelAnimation(Direction.TRANSLATE_LEFT, this); + }//GEN-LAST:event_leftTranslationXButtonMousePressed + + private void leftTranslationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationXButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_leftTranslationXButtonMouseReleased + + private void rightTranslationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationXButtonMousePressed + animator.startModelAnimation(Direction.TRANSLATE_RIGHT, this); + }//GEN-LAST:event_rightTranslationXButtonMousePressed + + private void rightTranslationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationXButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_rightTranslationXButtonMouseReleased + + private void leftTranslationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationYButtonMousePressed + animator.startModelAnimation(Direction.TRANSLATE_UP, this); + }//GEN-LAST:event_leftTranslationYButtonMousePressed + + private void leftTranslationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationYButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_leftTranslationYButtonMouseReleased + + private void rightTranslationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationYButtonMousePressed + animator.startModelAnimation(Direction.TRANSLATE_DOWN, this); + }//GEN-LAST:event_rightTranslationYButtonMousePressed + + private void rightTranslationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationYButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_rightTranslationYButtonMouseReleased + + private void leftTranslationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationZButtonMousePressed + animator.startModelAnimation(Direction.TRANSLATE_IN, this); + }//GEN-LAST:event_leftTranslationZButtonMousePressed + + private void leftTranslationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationZButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_leftTranslationZButtonMouseReleased + + private void rightTranslationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationZButtonMousePressed + animator.startModelAnimation(Direction.TRANSLATE_OUT, this); + }//GEN-LAST:event_rightTranslationZButtonMousePressed + + private void rightTranslationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationZButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_rightTranslationZButtonMouseReleased + + private void leftRotationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationXButtonMousePressed + animator.startModelAnimation(Direction.ROTATE_LEFT, this); + }//GEN-LAST:event_leftRotationXButtonMousePressed + + private void leftRotationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationXButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_leftRotationXButtonMouseReleased + + private void rightRotationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationXButtonMousePressed + animator.startModelAnimation(Direction.ROTATE_RIGHT, this); + }//GEN-LAST:event_rightRotationXButtonMousePressed + + private void rightRotationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationXButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_rightRotationXButtonMouseReleased + + private void leftRotationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationYButtonMousePressed + animator.startModelAnimation(Direction.ROTATE_UP, this); + }//GEN-LAST:event_leftRotationYButtonMousePressed + + private void leftRotationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationYButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_leftRotationYButtonMouseReleased + + private void rightRotationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationYButtonMousePressed + animator.startModelAnimation(Direction.ROTATE_DOWN, this); + }//GEN-LAST:event_rightRotationYButtonMousePressed + + private void rightRotationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationYButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_rightRotationYButtonMouseReleased + + private void leftRotationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationZButtonMousePressed + animator.startModelAnimation(Direction.ROTATE_IN, this); + }//GEN-LAST:event_leftRotationZButtonMousePressed + + private void leftRotationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationZButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_leftRotationZButtonMouseReleased + + private void rightRotationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationZButtonMousePressed + animator.startModelAnimation(Direction.ROTATE_OUT, this); + }//GEN-LAST:event_rightRotationZButtonMousePressed + + private void rightRotationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationZButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_rightRotationZButtonMouseReleased + + private void scaleMinusButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleMinusButtonMousePressed + animator.startModelAnimation(Direction.ZOOM_OUT, this); + }//GEN-LAST:event_scaleMinusButtonMousePressed + + private void scaleMinusButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleMinusButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_scaleMinusButtonMouseReleased + + private void scalePlusButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scalePlusButtonMousePressed + animator.startModelAnimation(Direction.ZOOM_IN, this); + }//GEN-LAST:event_scalePlusButtonMousePressed + + private void scalePlusButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scalePlusButtonMouseReleased + animator.stopModelAnimation(this); + }//GEN-LAST:event_scalePlusButtonMouseReleased + + private void thresholdDownButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thresholdDownButtonActionPerformed + double newValue = ((Number)thersholdFTF.getValue()).doubleValue() - 0.1; + thersholdFTF.setValue(newValue); + thersholdFTF.postActionEvent(); + }//GEN-LAST:event_thresholdDownButtonActionPerformed + + private void thersholdUpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thersholdUpButtonActionPerformed + double newValue = ((Number)thersholdFTF.getValue()).doubleValue() + 0.1; + thersholdFTF.setValue(newValue); + thersholdFTF.postActionEvent(); + }//GEN-LAST:event_thersholdUpButtonActionPerformed + + private void lowShiftRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lowShiftRBActionPerformed + this.moveModifier = LOW_SHIFT_QUOTIENT; + }//GEN-LAST:event_lowShiftRBActionPerformed + + private void highShiftRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_highShiftRBActionPerformed + this.moveModifier = HIGH_SHIFT_QUOTIENT; + }//GEN-LAST:event_highShiftRBActionPerformed + + private void translationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_translationButtonMousePressed + translationXFTF.setValue(0.0); + translationYFTF.setValue(0.0); + translationZFTF.setValue(0.0); + }//GEN-LAST:event_translationButtonMousePressed + + private void rotationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rotationButtonMousePressed + rotationXFTF.setValue(0.0); + rotationYFTF.setValue(0.0); + rotationZFTF.setValue(0.0); + }//GEN-LAST:event_rotationButtonMousePressed + + private void scaleButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleButtonMousePressed + scaleFTF.setValue(0.0); + }//GEN-LAST:event_scaleButtonMousePressed + + private void resetAllButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetAllButtonMousePressed + translationButtonMousePressed(evt); + rotationButtonMousePressed(evt); + scaleButtonMousePressed(evt); + }//GEN-LAST:event_resetAllButtonMousePressed + + private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed + resetAllButtonMousePressed(null); + }//GEN-LAST:event_jButton1ActionPerformed + + private void applyButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_applyButtonMousePressed + resetAllButtonMousePressed(evt); + }//GEN-LAST:event_applyButtonMousePressed + + private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox1ActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_jCheckBox1ActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton applyButton; + private javax.swing.JLabel featurePointsLabel; + private javax.swing.JPanel featurePointsPanel; + private javax.swing.JButton frontButton; + private javax.swing.JRadioButton highShiftRB; + private javax.swing.JButton jButton1; + private javax.swing.JCheckBox jCheckBox1; + private javax.swing.JComboBox<String> jComboBox1; + private javax.swing.JFormattedTextField jFormattedTextField1; + private javax.swing.JFormattedTextField jFormattedTextField2; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; + private javax.swing.JLabel jLabel6; + private javax.swing.JSeparator jSeparator10; + private javax.swing.JSeparator jSeparator11; + private javax.swing.JSeparator jSeparator2; + private javax.swing.JSeparator jSeparator5; + private javax.swing.JSeparator jSeparator9; + private javax.swing.JButton leftRotationXButton; + private javax.swing.JButton leftRotationYButton; + private javax.swing.JButton leftRotationZButton; + private javax.swing.JButton leftTranslationXButton; + private javax.swing.JButton leftTranslationYButton; + private javax.swing.JButton leftTranslationZButton; + private javax.swing.JRadioButton lowShiftRB; + private javax.swing.ButtonGroup precisionGroup; + private javax.swing.ButtonGroup primaryRenderModeGroup; + private javax.swing.JButton profileButton; + private javax.swing.JLabel registrationAdjustmentLabel; + private javax.swing.JButton resetAllButton; + private javax.swing.JButton rightRotationXButton; + private javax.swing.JButton rightRotationYButton; + private javax.swing.JButton rightRotationZButton; + private javax.swing.JButton rightTranslationXButton; + private javax.swing.JButton rightTranslationYButton; + private javax.swing.JButton rightTranslationZButton; + private javax.swing.JLabel rotatXLabel; + private javax.swing.JLabel rotatYLabel; + private javax.swing.JLabel rotatZLabel; + private javax.swing.JButton rotationButton; + private javax.swing.JPanel rotationPanel; + private javax.swing.JFormattedTextField rotationXFTF; + private javax.swing.JFormattedTextField rotationYFTF; + private javax.swing.JFormattedTextField rotationZFTF; + private javax.swing.JButton scaleButton; + private javax.swing.JFormattedTextField scaleFTF; + private javax.swing.JButton scaleMinusButton; + private javax.swing.JPanel scalePanel; + private javax.swing.JButton scalePlusButton; + private javax.swing.ButtonGroup secondaryRenerModeGroup; + private javax.swing.JLabel shiftLabel; + private javax.swing.JPanel shiftPanel; + private javax.swing.JFormattedTextField thersholdFTF; + private javax.swing.JButton thersholdUpButton; + private javax.swing.JButton thresholdDownButton; + private javax.swing.JPanel transformationPanel; + private javax.swing.JLabel translXLabel; + private javax.swing.JLabel translYLabel; + private javax.swing.JLabel translZLabel; + private javax.swing.JButton translationButton; + private javax.swing.JPanel translationPanel; + private javax.swing.JFormattedTextField translationXFTF; + private javax.swing.JFormattedTextField translationYFTF; + private javax.swing.JFormattedTextField translationZFTF; + private javax.swing.JButton transparencyButton; + private javax.swing.JSlider transparencySlider; + private javax.swing.JLabel viewLabel; + private javax.swing.JPanel viewPanel; + private javax.swing.JLabel visualizationLabel; + private javax.swing.JPanel visualizationPanel; + // End of variables declaration//GEN-END:variables +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Camera.java b/GUI/src/main/java/cz/fidentis/analyst/scene/Camera.java similarity index 99% rename from GUI/src/main/java/cz/fidentis/analyst/gui/scene/Camera.java rename to GUI/src/main/java/cz/fidentis/analyst/scene/Camera.java index 782da9040d3fd8a0fb276aaf4cee0e4f00d917fe..b89b9c1e53c09a011d194af69220e072afe23ebf 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Camera.java +++ b/GUI/src/main/java/cz/fidentis/analyst/scene/Camera.java @@ -1,4 +1,4 @@ -package cz.fidentis.analyst.gui.scene; +package cz.fidentis.analyst.scene; import javax.vecmath.Vector3d; diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/Drawable.java b/GUI/src/main/java/cz/fidentis/analyst/scene/Drawable.java new file mode 100644 index 0000000000000000000000000000000000000000..d011aa7b305d3848e8c1539f6ae6d19cbc5eb784 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/scene/Drawable.java @@ -0,0 +1,209 @@ +package cz.fidentis.analyst.scene; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL2; +import java.awt.Color; +import javax.vecmath.Vector3d; + +/** + * A drawable object, i.e., an object with drawing state and capable to + * render itself into an OpenGL context. + * + * @author Radek Oslejsek + * @author Richard Pajersky + */ +public abstract class Drawable { + + private boolean display = true; + + /* material info */ + private Color color = Color.LIGHT_GRAY; + private float transparency = 1; // 0 = off, 1 = max + private Color highlights = new Color(0, 0, 0, 1); + + /* transformation */ + private Vector3d translation = new Vector3d(0, 0, 0); + private Vector3d rotation = new Vector3d(0, 0, 0); + private Vector3d scale = new Vector3d(0, 0, 0); + + /* rendering mode */ + /** + * Render mode to use, one from {@code GL_FILL}, {@code GL_LINE}, {@code GL_POINT} + */ + private int renderMode = GL2.GL_FILL; // GL_FILL, GL_LINE, or GL_POINT + + /** + * Renders the scene. + * @param gl OpenGL context + */ + public void render(GL2 gl) { + initRendering(gl); + + gl.glPushMatrix(); + + // rotate + gl.glRotated(getRotation().x, 1, 0, 0); + gl.glRotated(getRotation().y, 0, 1, 0); + gl.glRotated(getRotation().z, 0, 0, 1); + // move + gl.glTranslated(getTranslation().x, getTranslation().y, getTranslation().z); + // scale + gl.glScaled(1 + getScale().x, 1 + getScale().y, 1 + getScale().z); + + renderObject(gl); + + gl.glPopMatrix(); + + finishRendering(gl); + } + + protected void initRendering(GL2 gl) { + gl.glShadeModel(GL2.GL_SMOOTH); + gl.glPolygonMode(GL.GL_FRONT_AND_BACK, getRenderMode()); + + // set color + float[] rgba = {color.getRed() / 255f, color.getGreen() / 255f, + color.getBlue() / 255f , getTransparency()}; + gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0); + + } + + protected abstract void renderObject(GL2 gl); + + protected void finishRendering(GL2 gl) { + } + + /** + * This drawable mesh is included in the rendered scene. + */ + public void show() { + display = true; + } + + /** + * This drawable mesh is excluded from the rendered scene (skipped). + */ + public void hide() { + display = false; + } + + /** + * + * @return {@code true} if the object is included (rendered) in the scene. + */ + public boolean isShown() { + return display; + } + + /** + * Sets color + * @param color Color + */ + public void setColor(Color color) { + this.color = color; + } + + /** + * @return {@link Color} + */ + public Color getColor() { + return color; + } + + /** + * @return Current value of transparency + */ + public float getTransparency() { + return transparency; + } + + /** + * Sets transparency + * @param transparency Transparency + */ + public void setTransparency(float transparency) { + this.transparency = transparency; + } + + /** + * @return {@link Color} of highlights + */ + public Color getHighlights() { + return highlights; + } + + /** + * Sets {@link Color} of highlights + * @param highlights + */ + public void setHighlights(Color highlights) { + this.highlights = highlights; + } + + /** + * @return Current translation + */ + public Vector3d getTranslation() { + return translation; + } + + /** + * Sets tranlation + * @param translation Translation + */ + public void setTranslation(Vector3d translation) { + this.translation = translation; + } + + /** + * @return Current rotation + */ + public Vector3d getRotation() { + return rotation; + } + + /** + * Sets rotation + * @param rotation + */ + public void setRotation(Vector3d rotation) { + this.rotation = rotation; + } + + /** + * @return Current scale + */ + public Vector3d getScale() { + return scale; + } + + /** + * Sets scale + * @param scale Scale + */ + public void setScale(Vector3d scale) { + this.scale = scale; + } + + /** + * @return Value of {@link #renderMode} + */ + public int getRenderMode() { + return renderMode; + } + + /** + * Sets render mode + * @param renderMode Render mode + * @throws IllegalArgumentException if renderMode isn't {@code GL_FILL}, {@code GL_LINE} or {@coed GL_POINT} + */ + public void setRenderMode(int renderMode) { + if (renderMode != GL2.GL_FILL && + renderMode != GL2.GL_LINE && + renderMode != GL2.GL_POINT) { + throw new IllegalArgumentException("invalid mode"); + } + this.renderMode = renderMode; + } + +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFace.java b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFace.java new file mode 100644 index 0000000000000000000000000000000000000000..9b7d6f1198e8aa0ab9e9f486856b76ab1e6bb46f --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFace.java @@ -0,0 +1,82 @@ +package cz.fidentis.analyst.scene; + +import com.jogamp.opengl.GL2; +import cz.fidentis.analyst.mesh.core.MeshFacet; +import cz.fidentis.analyst.mesh.core.MeshModel; +import java.awt.Color; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Drawable human face. + * + * @author Radek Oslejsek + */ +public class DrawableFace extends DrawableMesh { + + public static final Color SKIN_COLOR_PRIMARY = new Color(224, 172, 105); + public static final Color SKIN_COLOR_SECONDARY = new Color(236, 188, 180); + + /* feature points */ + //private List<FeaturePoint> featurePoints = new ArrayList<>(); + //private List<Color> featurePointsColor = new ArrayList<>(); + //private boolean renderFeaturePoints = false; + private boolean renderHeatMap = false; + + /** + * Values at mesh vertices that are to be transferred to colors. + */ + private Map<MeshFacet, List<Double>> heatmap = new HashMap<>(); + + /** + * Constructor. + * + * @param model Drawable mesh model of the face + * @throws IllegalArgumentException if the model is {@code null} + */ + public DrawableFace(MeshModel model) { + super(model); + setColor(SKIN_COLOR_PRIMARY); + } + + /** + * Sets new heatmap. + * + * @param heatmap New heatmap + */ + public void setHeatMap(Map<MeshFacet, List<Double>> heatmap) { + this.heatmap = heatmap; + } + + public Map<MeshFacet, List<Double>> getHeatMap() { + return Collections.unmodifiableMap(heatmap); + } + + /** + * Sets if the heatmap should be rendered or not. + * @param render The switch + */ + public void setRenderHeatmap(boolean render) { + this.renderHeatMap = render; + } + + /** + * Determines whether the heatmap is set to be rendered. + * @return id the heatmap will be rendered + */ + public boolean isHeatmapRendered() { + return this.renderHeatMap; + } + + @Override + protected void renderObject(GL2 gl) { + if (isHeatmapRendered()) { + new HeatmapRenderer().drawMeshModel(gl, getModel(), heatmap); + } else { + super.renderObject(gl); + } + } + +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFeaturePoints.java b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFeaturePoints.java new file mode 100644 index 0000000000000000000000000000000000000000..9b110b99405a6347c94f479fc2a523347143be82 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFeaturePoints.java @@ -0,0 +1,132 @@ +package cz.fidentis.analyst.scene; + +import com.jogamp.opengl.GL2; +import com.jogamp.opengl.glu.GLU; +import com.jogamp.opengl.glu.GLUquadric; +import cz.fidentis.analyst.feature.FeaturePoint; +import java.awt.Color; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Drawable feature points. + * + * @author Radek Oslejsek + */ +public class DrawableFeaturePoints extends Drawable { + + public static final Color DEFAULT_COLOR = Color.GREEN; + + private static final GLU GLU_CONTEXT = new GLU(); + + /* feature points */ + private final List<FeaturePoint> featurePoints; + + /** + * feature points with color different from the default color + */ + private Map<Integer, Color> specialColors = new HashMap<>(); + + /** + * Constructor. + * @param featurePoints Feature points + */ + public DrawableFeaturePoints(List<FeaturePoint> featurePoints) { + this.featurePoints = new ArrayList<>(featurePoints); + setColor(DEFAULT_COLOR); + } + + /** + * Returns color of given feature point + * @param index Index of the feature point + * @return the color or {@code null} + */ + public Color getColor(int index) { + if (index < 0 || index >= featurePoints.size()) { + return null; + } + if (specialColors.containsKey(index)) { + return specialColors.get(index); + } else { + return DEFAULT_COLOR; + } + } + + /** + * Sets color of the feature point. + * @param index Index of the feature point + * @param color Color + */ + public void setColor(int index, Color color) { + if (index < 0 || index >= featurePoints.size() || color == null) { + return; + } + if (color.equals(DEFAULT_COLOR)) { + specialColors.remove(index); + } else { + specialColors.put(index, color); + } + } + + @Override + protected void renderObject(GL2 gl) { + float[] rgba = { + getColor().getRed() / 255f, + getColor().getGreen() / 255f, + getColor().getBlue() / 255f, + getTransparency() + }; + gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0); // set default color + + for (int i = 0; i < featurePoints.size(); i++) { + FeaturePoint fp = featurePoints.get(i); + Color specialColor = specialColors.get(i); + if (specialColor != null) { + float[] tmpRGB = {specialColor.getRed() / 255f, specialColor.getGreen() / 255f, specialColor.getBlue() / 255f, getTransparency()}; + gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, tmpRGB, 0); + } + + gl.glPushMatrix(); + gl.glTranslated(fp.getX(), fp.getY(), fp.getZ()); + GLUquadric center = GLU_CONTEXT.gluNewQuadric(); + GLU_CONTEXT.gluQuadricDrawStyle(center, GLU.GLU_FILL); + GLU_CONTEXT.gluQuadricNormals(center, GLU.GLU_FLAT); + GLU_CONTEXT.gluQuadricOrientation(center, GLU.GLU_OUTSIDE); + GLU_CONTEXT.gluSphere(center, 3f, 16, 16); + GLU_CONTEXT.gluDeleteQuadric(center); + gl.glPopMatrix(); + + if (specialColor != null) { + gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0); // set default color + } + } + } + + + + /** + * @return {@link List} of {@link FeaturePoint} + */ + public List<FeaturePoint> getFeaturePoints() { + return Collections.unmodifiableList(featurePoints); + } + + /** + * Sets feature points + * @param featurePoints Feature points + */ + /* + public void setFeaturePoints(List<FeaturePoint> featurePoints) { + this.featurePoints = featurePoints; + List<Color> colors = new ArrayList<>(); + featurePoints.forEach((_item) -> { + colors.add(getColor()); + }); + this.setFeaturePointsColor(colors); + } + */ + +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java new file mode 100644 index 0000000000000000000000000000000000000000..ae19a418ae4061685480fca7802081415fef8a3f --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java @@ -0,0 +1,107 @@ +package cz.fidentis.analyst.scene; + +import com.jogamp.opengl.GL2; +import cz.fidentis.analyst.mesh.core.MeshFacet; +import cz.fidentis.analyst.mesh.core.MeshModel; +import java.awt.Color; +import java.util.List; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3d; + +/** + * A drawable triangular mesh, i.e., a mesh model with drawing information like + * material, transparency, color, relative transformations in the scene etc. + * This class encapsulates rendering state and parameters, + * + * @author Radek Oslejsek + * @author Richard Pajersky + */ +public class DrawableMesh extends Drawable { + + private final MeshModel model; + + /** + * Constructor. + * + * @param model Drawable mesh model + * @throws IllegalArgumentException if the model is {@code null} + */ + public DrawableMesh(MeshModel model) { + if (model == null) { + throw new IllegalArgumentException("model is null"); + } + this.model = model; + } + + /** + * Constructor. + * + * @param facet Mesh facet + * @throws IllegalArgumentException if the model is {@code null} + */ + public DrawableMesh(MeshFacet facet) { + if (facet == null) { + throw new IllegalArgumentException("facet is null"); + } + this.model = new MeshModel(); + this.model.addFacet(facet); + } + + @Override + protected void initRendering(GL2 gl) { + super.initRendering(gl); + + // showBackface + //float[] pos = {0f, 0f, -1f, 0f}; + //gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_POSITION, pos, 0); + //if (isShowBackface()) { + // gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.white.getComponents(null), 0); + //} else { + // gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.black.getComponents(null), 0); + //} + + // set color of highlights + Color col = getHighlights(); + float[] highlights = {col.getRed(), col.getGreen(), col.getBlue(), 1}; + gl.glMaterialf(GL2.GL_FRONT_AND_BACK, GL2.GL_SHININESS, 50); + gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_SPECULAR, highlights, 0); + } + + @Override + protected void renderObject(GL2 gl) { + for (MeshFacet facet: getFacets()) { + gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles + + // get the normal and tex coords indicies for face i + for (int v = 0; v < facet.getCornerTable().getSize(); v++) { + // render the normals + Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal(); + if(norm != null) { + gl.glNormal3d(norm.x, norm.y, norm.z); + } + // render the vertices + Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition(); + gl.glVertex3d(vert.x, vert.y, vert.z); + } + + gl.glEnd(); + } + } + + /** + * Returns list of individual facets. + * + * @return list of individual facets. + */ + public List<MeshFacet> getFacets() { + return model.getFacets(); + } + + /** + * @return {@link MeshModel} + */ + public MeshModel getModel() { + return this.model; + } + +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawablePlane.java b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawablePlane.java new file mode 100644 index 0000000000000000000000000000000000000000..795bddc0c7d9bec925588f81aca244f363ade894 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawablePlane.java @@ -0,0 +1,41 @@ +package cz.fidentis.analyst.scene; + +import cz.fidentis.analyst.mesh.core.MeshFacet; +import cz.fidentis.analyst.mesh.core.MeshModel; +import cz.fidentis.analyst.symmetry.Plane; + +/** + * A cutting plane. + * + * @author Radek Oslejsek + */ +public class DrawablePlane extends DrawableMesh { + + private final Plane plane; + + /** + * Constructor. + * @param model Mesh model of the plane + * @param plane The plane + */ + public DrawablePlane(MeshModel model, Plane plane) { + super(model); + if (plane == null) { + throw new IllegalArgumentException("plane"); + } + this.plane = plane; + } + + /** + * Constructor. + * @param facet Mesh facet of the plane + * @param plane The plane + */ + public DrawablePlane(MeshFacet facet, Plane plane) { + super(facet); + if (plane == null) { + throw new IllegalArgumentException("plane"); + } + this.plane = plane; + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/HeatmapRenderer.java b/GUI/src/main/java/cz/fidentis/analyst/scene/HeatmapRenderer.java new file mode 100644 index 0000000000000000000000000000000000000000..1a2802259edaaf062fc29620ce04b75ed64c22ae --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/scene/HeatmapRenderer.java @@ -0,0 +1,130 @@ +package cz.fidentis.analyst.scene; + +import com.jogamp.opengl.GL2; +import cz.fidentis.analyst.mesh.core.MeshFacet; +import cz.fidentis.analyst.mesh.core.MeshModel; +import java.awt.Color; +import java.util.List; +import java.util.Map; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3d; + +/** + * Heatmap rendering. + * + * @author Daniel Sokol + */ +public class HeatmapRenderer { + + private Color minColor = Color.RED; + private Color maxColor = Color.BLUE; + + public void setMinColor(Color color) { + minColor = color; + } + + public void setMaxColor(Color color) { + maxColor = color; + } + + /** + * Maps distances of mesh model vertices to colors and renders the taken heatmap. + * @param gl OpenGL context + * @param model Mesh model to be rendered + * @param distances Distances in mesh model vertices + */ + public void drawMeshModel(GL2 gl, MeshModel model, Map<MeshFacet, List<Double>> distances) { + Double minDistance = Double.POSITIVE_INFINITY; + Double maxDistance = Double.NEGATIVE_INFINITY; + + for (MeshFacet f: model.getFacets()) { + List<Double> distanceList = distances.get(f); + if (distanceList != null) { + minDistance = Math.min(minDistance, distanceList.parallelStream().mapToDouble(Double::doubleValue).min().getAsDouble()); + maxDistance = Math.max(maxDistance, distanceList.parallelStream().mapToDouble(Double::doubleValue).max().getAsDouble()); + } + } + + for (MeshFacet f: model.getFacets()) { + if (distances.containsKey(f)) { + renderMeshFacet(gl, f, distances.get(f), minDistance, maxDistance); + } + } + } + + /** + * Maps distances of mesh facet to colors and renders the taken heatmap. + * @param gl OpenGL context + * @param facet Mesh facet + * @param distancesList Distances in the mesh facet vertices + * @param minDistance Minimal distance threshold (smaller distances are cut-off) + * @param maxDistance Maxim distance threshold (bigger distances are cut-off) + */ + public void renderMeshFacet(GL2 gl, MeshFacet facet, List<Double> distancesList, Double minDistance, Double maxDistance) { + gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles + + // get the normal and tex coords indicies for face i + for (int v = 0; v < facet.getCornerTable().getSize(); v++) { + // render the normals + Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal(); + if (norm != null) { + gl.glNormal3d(norm.x, norm.y, norm.z); + } + // render the vertices + Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition(); + //get color of vertex + Color c = getColor(distancesList.get(facet.getCornerTable().getRow(v).getVertexIndex()), minDistance, maxDistance); + gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, c.getComponents(null), 0); + + gl.glVertex3d(vert.x, vert.y, vert.z); + } + gl.glEnd(); + gl.glPopAttrib(); + } + + private Color getColor(Double currentDistance, Double minDistance, Double maxDistance) { + double currentParameter = ((currentDistance - minDistance) / (maxDistance - minDistance)); + + float[] hsb1 = Color.RGBtoHSB(minColor.getRed(), minColor.getGreen(), minColor.getBlue(), null); + float h1 = hsb1[0]; + float s1 = hsb1[1]; + float b1 = hsb1[2]; + + float[] hsb2 = Color.RGBtoHSB(maxColor.getRed(), maxColor.getGreen(), maxColor.getBlue(), null); + float h2 = hsb2[0]; + float s2 = hsb2[1]; + float b2 = hsb2[2]; + + // determine clockwise and counter-clockwise distance between hues + float distCCW; + float distCW; + + if (h1 >= h2) { + distCCW = h1 - h2; + distCW = 1 + h2 - h1; + } else { + distCCW = 1 + h1 - h2; + distCW = h2 - h1; + } + + float hue; + + if (distCW >= distCCW) { + hue = (float) (h1 + (distCW * currentParameter)); + } else { + hue = (float) (h1 - (distCCW * currentParameter)); + } + + if (hue < 0) { + hue = 1 + hue; + } + if (hue > 1) { + hue = hue - 1; + } + + float saturation = (float) ((1 - currentParameter) * s1 + currentParameter * s2); + float brightness = (float) ((1 - currentParameter) * b1 + currentParameter * b2); + + return Color.getHSBColor(hue, saturation, brightness); + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/Scene.java b/GUI/src/main/java/cz/fidentis/analyst/scene/Scene.java new file mode 100644 index 0000000000000000000000000000000000000000..98174da8ef3f693d5a22f4dd20fa345e6d3d6d53 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/scene/Scene.java @@ -0,0 +1,141 @@ +package cz.fidentis.analyst.scene; + +import cz.fidentis.analyst.face.HumanFace; +import java.util.ArrayList; +import java.util.List; + +/** + * Abstract class for ... + * + * @author Radek Oslejsek + */ +public class Scene { + + private final List<HumanFace> faces = new ArrayList<>(); + private final List<DrawableFace> drawableFaces = new ArrayList<>(); + private final List<DrawableFeaturePoints> drawableFeaturePoints = new ArrayList<>(); + private final List<DrawablePlane> drawableSymmetryPlanes = new ArrayList<>(); + + /** + * Constructor for single face analysis. + * + * @param face Human face to be analyzed + * @throws IllegalArgumentException if the {@code face} is {@code null} + */ + public Scene(HumanFace face) { + if (face == null) { + throw new IllegalArgumentException("face"); + } + + faces.add(face); + drawableFaces.add(new DrawableFace(face.getMeshModel())); + if (face.getFeaturePoints() != null) { + drawableFeaturePoints.add(new DrawableFeaturePoints(face.getFeaturePoints())); + } else { + drawableFeaturePoints.add(null); + } + drawableSymmetryPlanes.add(null); + } + + /** + * Constructor for one-to-one analysis. + * + * @param primary Primary face to be analyzed + * @param primary Secondary face to be analyzed + * @throws IllegalArgumentException if some face is {@code null} + */ + public Scene(HumanFace primary, HumanFace secondary) { + if (primary == null) { + throw new IllegalArgumentException("primary"); + } + if (secondary == null) { + throw new IllegalArgumentException("secondary"); + } + + faces.add(primary); + faces.add(secondary); + + drawableFaces.add(new DrawableFace(primary.getMeshModel())); + drawableFaces.add(new DrawableFace(secondary.getMeshModel())); + + if (primary.getFeaturePoints() != null) { + drawableFeaturePoints.add(new DrawableFeaturePoints(primary.getFeaturePoints())); + } else { + drawableFeaturePoints.add(null); + } + if (secondary.getFeaturePoints() != null) { + drawableFeaturePoints.add(new DrawableFeaturePoints(secondary.getFeaturePoints())); + } else { + drawableFeaturePoints.add(null); + } + + drawableSymmetryPlanes.add(null); + drawableSymmetryPlanes.add(null); + + drawableFaces.get(1).setColor(DrawableFace.SKIN_COLOR_SECONDARY); + } + + /** + * Returns number of faces in the scene. + * @return number of faces in the scene + */ + public int getNumFaces() { + return faces.size(); + } + + /** + * Returns drawable face. + * + * @param index Index of the face + * @return drawable face or {@code null} + */ + public DrawableFace getDrawableFace(int index) { + return (index >= 0 && index < getNumFaces()) ? drawableFaces.get(index) : null; + } + + /** + * Returns drawable feature points. + * + * @param index Index of the face + * @return drawable face or {@code null} + */ + public DrawableFeaturePoints getDrawableFeaturePoints(int index) { + return (index >= 0 && index < getNumFaces()) ? drawableFeaturePoints.get(index) : null; + } + + /** + * Returns drawable symmetry plane. + * + * @param index Index of the face + * @return drawable face or {@code null} + */ + public DrawablePlane getDrawableSymmetryPlane(int index) { + return (index >= 0 && index < getNumFaces()) ? drawableSymmetryPlanes.get(index) : null; + } + + /** + * Sets the drawable symmetry plane. + * + * @param index Index of the face + * @param sPlane New symmetry plane + */ + public void setDrawableSymmetryPlane(int index, DrawablePlane sPlane) { + if (index >= 0 && index < getNumFaces() && sPlane != null) { + this.drawableSymmetryPlanes.set(index, sPlane); + } + } + + /** + * Returns all drawable objects. + * + * @return all drawable objects. + */ + public List<Drawable> getAllDrawables() { + List<Drawable> ret = new ArrayList<>(); + ret.addAll(this.drawableFaces); + ret.addAll(this.drawableFeaturePoints); + ret.addAll(this.drawableSymmetryPlanes); + while (ret.remove(null)) {} + return ret; + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java b/GUI/src/main/java/cz/fidentis/analyst/scene/SceneRenderer.java similarity index 68% rename from GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java rename to GUI/src/main/java/cz/fidentis/analyst/scene/SceneRenderer.java index e334a1dbc8fdc0b3e5d75b039dba21ffdac4ae7b..bb3f0b10ae80531042537fdef2e62c147295ffe9 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java +++ b/GUI/src/main/java/cz/fidentis/analyst/scene/SceneRenderer.java @@ -1,15 +1,14 @@ -package cz.fidentis.analyst.gui.scene; +package cz.fidentis.analyst.scene; import com.jogamp.opengl.GL; import com.jogamp.opengl.GL2; import com.jogamp.opengl.glu.GLU; -import com.jogamp.opengl.glu.GLUquadric; -import cz.fidentis.analyst.feature.FeaturePoint; import cz.fidentis.analyst.mesh.core.MeshFacet; import java.awt.Color; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.List; import javax.vecmath.Point3d; import javax.vecmath.Point4f; import javax.vecmath.Vector3d; @@ -109,45 +108,32 @@ public class SceneRenderer { /** * Renders drawable objects. */ - public void renderScene(Camera camera, Collection<DrawableMesh> drawables) { + public void renderScene(Camera camera, Collection<Drawable> drawables) { clearScene(); - showBackface((DrawableMesh)drawables.toArray()[0]); - setPosition(camera); - setMeshOrder(drawables); - gl.glShadeModel(GL2.GL_SMOOTH); + // light backface + gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_POSITION, new float[] {0f, 0f, -1f, 0f}, 0); + gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.white.getComponents(null), 0); + + setPosition(camera); + List<DrawableFace> faces = getOrderedFaces(drawables); - for (DrawableMesh obj: drawables) { - gl.glPolygonMode(GL.GL_FRONT_AND_BACK, obj.getRenderMode()); - setMaterial(obj); - gl.glPushMatrix(); - setTransformation(obj); - for (MeshFacet facet: obj.getFacets()) { - renderFacet(facet); + for (Drawable obj: drawables) { + if (!(obj instanceof DrawableFace) && obj.isShown()) { + obj.render(gl); } - if (obj.isRenderFeaturePoints()) { - renderFeaturePoints(obj); + } + + for (DrawableFace obj: faces) { + if (obj.isShown()) { + //showBackface(obj); + obj.render(gl); } - gl.glPopMatrix(); } + gl.glFlush(); } - /** - * Adds backlight to show/hide backface based on info from DrawableMesh - * - * @param face Face - */ - private void showBackface(DrawableMesh face) { - float[] pos = {0f, 0f, -1f, 0f}; - gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_POSITION, pos, 0); - if (face.isShowBackface()) { - gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.white.getComponents(null), 0); - } else { - gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.black.getComponents(null), 0); - } - } - /** * Sets model to proper position * @@ -168,44 +154,17 @@ public class SceneRenderer { * * @param drawables List of meshes */ - private void setMeshOrder(Collection<DrawableMesh> drawables) { - if (((DrawableMesh)drawables.toArray()[0]).getTransparency() != 1) { - Collections.reverse((ArrayList)drawables); + private List<DrawableFace> getOrderedFaces(Collection<Drawable> drawables) { + List<DrawableFace> faces = new ArrayList<>(); + for (Drawable obj: drawables) { + if (obj instanceof DrawableFace) { + faces.add((DrawableFace) obj); + } } - } - - /** - * Sets up material - * - * @param obj Model used to get material info - */ - private void setMaterial(DrawableMesh obj) { - // set color - Color color = obj.getColor(); - float[] rgba = {color.getRed() / 255f, color.getGreen() / 255f, - color.getBlue() / 255f , obj.getTransparency()}; - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0); - // set color of highlights - color = obj.getHighlights(); - float[] highlights = {color.getRed(), color.getGreen(), color.getBlue(), 1}; - gl.glMaterialf(GL2.GL_FRONT_AND_BACK, GL2.GL_SHININESS, 50); - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_SPECULAR, highlights, 0); - } - - /** - * Sets up object transformation - * - * @param obj Model used to get transformation info - */ - private void setTransformation(DrawableMesh obj) { - // rotate - gl.glRotated(obj.getRotation().x, 1, 0, 0); - gl.glRotated(obj.getRotation().y, 0, 1, 0); - gl.glRotated(obj.getRotation().z, 0, 0, 1); - // move - gl.glTranslated(obj.getTranslation().x, obj.getTranslation().y, obj.getTranslation().z); - // scale - gl.glScaled(1 + obj.getScale().x, 1 + obj.getScale().y, 1 + obj.getScale().z); + if (faces.get(0).getTransparency() != 1) { + Collections.reverse(faces); + } + return faces; } /** @@ -213,7 +172,8 @@ public class SceneRenderer { * * @param obj Model used to get his feature points */ - private void renderFeaturePoints(DrawableMesh obj) { + /* + private void renderFeaturePoints(DrawableFace obj) { for (int i = 0; i < obj.getFeaturePoints().size(); i++) { Color color = obj.getFeaturePointsColor().get(i); FeaturePoint point = obj.getFeaturePoints().get(i); @@ -231,6 +191,7 @@ public class SceneRenderer { gl.glPopMatrix(); } } + */ /** * Clears the scene and prepares it for the re-drawing. diff --git a/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryAction.java b/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryAction.java new file mode 100644 index 0000000000000000000000000000000000000000..9bbcecc89fc9a1a4a09b92af9d7f42fc68540b11 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryAction.java @@ -0,0 +1,72 @@ +package cz.fidentis.analyst.symmetry; + +import cz.fidentis.analyst.canvas.Canvas; +import cz.fidentis.analyst.core.ControlPanelAction; +import cz.fidentis.analyst.scene.DrawablePlane; +import java.awt.event.ActionEvent; +import javax.swing.JTabbedPane; +import javax.swing.JToggleButton; + +/** + * Action listener for the manipulation with the symmetry plane. + * + * @author Radek Oslejsek + */ +public class SymmetryAction extends ControlPanelAction { + + /* + * Handled actions + */ + public static final String ACTION_COMMAND_SHOW_HIDE_PLANE = "show-hide symmetry plane"; + public static final String ACTION_COMMAND_RECOMPUTE = "recompute"; + + private final SymmetryPanel controlPanel; + + /** + * Constructor. + * + * @param canvas OpenGL canvas + * @param topControlPanel Top component for placing control panels + */ + public SymmetryAction(Canvas canvas, JTabbedPane topControlPanel) { + super(canvas, topControlPanel); + this.controlPanel = new SymmetryPanel(this); + } + + @Override + public void actionPerformed(ActionEvent ae) { + String action = ae.getActionCommand(); + DrawablePlane plane; + + switch (action) { + case ACTION_COMMAND_SHOW_HIDE_PANEL: + hideShowPanelActionPerformed(ae, this.controlPanel); + break; + case ACTION_COMMAND_SHOW_HIDE_PLANE: + plane = getCanvas().getScene().getDrawableSymmetryPlane(0); + if (plane == null) { // no plane compute so far + break; + } + if (((JToggleButton) ae.getSource()).isSelected()) { + plane.show(); + } else { + plane.hide(); + } + break; + case ACTION_COMMAND_RECOMPUTE: + recomputeSymmetryPlane(); + break; + default: + throw new UnsupportedOperationException(action); + } + renderScene(); + } + + private void recomputeSymmetryPlane() { + SymmetryEstimator se = new SymmetryEstimator(controlPanel.getSymmetryConfig()); + getPrimaryDrawableFace().getModel().compute(se); + DrawablePlane plane = new DrawablePlane(se.getSymmetryPlaneMesh(), se.getSymmetryPlane()); + getCanvas().getScene().setDrawableSymmetryPlane(0, plane); + } + +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryPanel.java b/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryPanel.java new file mode 100644 index 0000000000000000000000000000000000000000..0c4331a1da8dc57f8956e0e95a5f1d1c2b116417 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryPanel.java @@ -0,0 +1,290 @@ +package cz.fidentis.analyst.symmetry; + +import cz.fidentis.analyst.core.ControlPanel; +import cz.fidentis.analyst.core.ControlPanelBuilder; +import java.awt.event.ActionEvent; +import java.util.List; +import javax.swing.ImageIcon; +import javax.swing.JCheckBox; +import javax.swing.JOptionPane; +import javax.swing.JTextField; +import javax.swing.JToggleButton; +import org.openide.windows.WindowManager; + +/** + * Control panel for symmetry plane. + * + * @author Natalia Bebjakova + * @author Radek Oslejsek + */ +public final class SymmetryPanel extends ControlPanel { + + /* + * Mandatory design elements + */ + public static final String ICON = "symmetry28x28.png"; + public static final String NAME = "Symmetry"; + + /* + * Configuration of panel-specific GUI elements + */ + public static final int MAX_SIGNIFICANT_POINTS = 500; + + /* + * Computational state + */ + private final SymmetryConfig config = new SymmetryConfig(); + private final SymmetryConfig tempConfig = new SymmetryConfig(); + + /* + * GUI primitives holding the configuration state: + */ + private JTextField signPointsTF = null; + private JTextField minCurvatureTF = null; + private JTextField minAngleCosTF = null; + private JTextField minNormAngleCosTF = null; + private JTextField maxRelDistTF = null; + private final JCheckBox averaging; + private final JCheckBox showSymmetryPlane; + + /** + * Constructor. + * + * @param action Action listener + */ + public SymmetryPanel(SymmetryAction action) { + this.setName(NAME); + + ControlPanelBuilder builder = new ControlPanelBuilder(this); + + builder.addCaptionLine("Computation options:"); + builder.addLine(); + + signPointsTF = builder.addSliderOptionLine( + (ActionEvent e) -> { + showSignPointsHelp(); + }, + "Significant points", + MAX_SIGNIFICANT_POINTS, + (ActionEvent e) -> { + tempConfig.setSignificantPointCount(ControlPanelBuilder.parseLocaleInt(signPointsTF)); + } + ); + builder.addLine(); + + minCurvatureTF = builder.addSliderOptionLine( + (ActionEvent e) -> { + showMinCurvHelp(); + }, + "Min. curvature ratio", + -1, + (ActionEvent e) -> { + tempConfig.setMinCurvRatio(ControlPanelBuilder.parseLocaleDouble(minCurvatureTF)); + }); + builder.addLine(); + + minAngleCosTF = builder.addSliderOptionLine( + (ActionEvent e) -> { + showMinAngleCosHelp(); + }, + "Min. angle cosine", + -1, + (ActionEvent e) -> { + tempConfig.setMinAngleCos(ControlPanelBuilder.parseLocaleDouble(minAngleCosTF)); + }); + builder.addLine(); + + minNormAngleCosTF = builder.addSliderOptionLine( + (ActionEvent e) -> { + showNormalAngleHelp(); + }, + "Normal angle", + -1, + (ActionEvent e) -> { + tempConfig.setMinNormAngleCos(ControlPanelBuilder.parseLocaleDouble(minNormAngleCosTF)); + }); + builder.addLine(); + + maxRelDistTF = builder.addSliderOptionLine( + (ActionEvent e) -> { + showRelDistHelp(); + }, + "Relative distance", + -1, + (ActionEvent e) -> { + tempConfig.setMaxRelDistance(ControlPanelBuilder.parseLocaleDouble(maxRelDistTF)); + }); + builder.addLine(); + + averaging = builder.addCheckBoxOptionLine( + (ActionEvent e) -> { + showAveragingHelp(); + }, + "Averaging", + config.isAveraging(), + (ActionEvent e) -> { + tempConfig.setAveraging(((JToggleButton) e.getSource()).isSelected()); + }); + builder.addLine(); + + builder.addCaptionLine("Visualization options:"); + builder.addLine(); + + showSymmetryPlane = builder.addCheckBoxOptionLine(null, "Show symmetry plane", true, + (ActionEvent e) -> { + action.actionPerformed(new ActionEvent( + e.getSource(), + ActionEvent.ACTION_PERFORMED, + SymmetryAction.ACTION_COMMAND_SHOW_HIDE_PLANE) + ); + }); + builder.addLine(); + + builder.addButtons( + List.of("Reset changes", + "Reset to defaults", + "(Re)compute"), + List.of( + (ActionEvent e) -> { + setTempConfig(config); + }, + (ActionEvent e) -> { + setTempConfig(new SymmetryConfig()); + }, + (ActionEvent e) -> { + config.copy(tempConfig); // confirm changes + action.actionPerformed(new ActionEvent( // recompute + e.getSource(), + ActionEvent.ACTION_PERFORMED, + SymmetryAction.ACTION_COMMAND_RECOMPUTE) + ); + action.actionPerformed(new ActionEvent( // and show or keep hidden + showSymmetryPlane, + ActionEvent.ACTION_PERFORMED, + SymmetryAction.ACTION_COMMAND_SHOW_HIDE_PLANE) + ); + } + ) + ); + + setTempConfig(new SymmetryConfig()); // intialize values; + } + + /** + * Returns symmetry plane configuration + * @return symmetry plane configuration + */ + public SymmetryConfig getSymmetryConfig() { + return this.config; + } + + @Override + public ImageIcon getIcon() { + return getStaticIcon(); + } + + /** + * Static implementation of the {@link #getIcon()} method. + * + * @return Control panel icon + */ + public static ImageIcon getStaticIcon() { + return new ImageIcon(SymmetryPanel.class.getClassLoader().getResource("/" + ICON)); + } + + private void setTempConfig(SymmetryConfig config) { + // update input fields + this.signPointsTF.setText(ControlPanelBuilder.intToStringLocale(config.getSignificantPointCount())); + this.minCurvatureTF.setText(ControlPanelBuilder.doubleToStringLocale(config.getMinCurvRatio())); + this.minAngleCosTF.setText(ControlPanelBuilder.doubleToStringLocale(config.getMinAngleCos())); + this.minNormAngleCosTF.setText(ControlPanelBuilder.doubleToStringLocale(config.getMinNormAngleCos())); + this.maxRelDistTF.setText(ControlPanelBuilder.doubleToStringLocale(config.getMaxRelDistance())); + this.averaging.setSelected(config.isAveraging()); + + // fire changes (update sliders) + this.signPointsTF.postActionEvent(); + this.minCurvatureTF.postActionEvent(); + this.minAngleCosTF.postActionEvent(); + this.minNormAngleCosTF.postActionEvent(); + this.maxRelDistTF.postActionEvent(); + + // update config + tempConfig.copy(config); + } + + private void showSignPointsHelp() { + JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"), + "Entered number represents amount of points of the mesh that are taken into account" + System.lineSeparator() + + "while counting the plane of approximate symmetry." + System.lineSeparator() + + System.lineSeparator() + + "Higher number → longer calculation, possibly more accurate result." + System.lineSeparator() + + "Lower number → shorter calculation, possibly less accurate result.", + "Significant points", + 0, + new ImageIcon(getClass().getResource("/points.png")) + ); + + } + + private void showMinAngleCosHelp() { + JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"), + "Entered number represents how large the angle between normal vector of candidate plane and the vector" + System.lineSeparator() + + "of two vertices can be to take into account these vertices while counting the approximate symmetry." + System.lineSeparator() + + System.lineSeparator() + + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result." + System.lineSeparator() + + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.", + "Minimum angle", + 0, + new ImageIcon(getClass().getResource("/angle.png")) + ); + } + + private void showNormalAngleHelp() { + JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"), + "Entered number represents how large the angle between normal vector of candidate plane and vector" + System.lineSeparator() + + "from subtraction of normal vectors of two vertices can be to take into account these vertices while counting the approximate symmetry." + System.lineSeparator() + + System.lineSeparator() + + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result." + System.lineSeparator() + + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.", + "Minimum normal angle", + 0, + new ImageIcon(getClass().getResource("/angle.png")) + ); + } + + private void showMinCurvHelp() { + JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"), + "Entered number represents how similar the curvature in two vertices must be" + System.lineSeparator() + + "to take into account these vertices while counting the plane of approximate symmetry." + System.lineSeparator() + + "The higher the number is the more similar they must be." + System.lineSeparator() + + System.lineSeparator() + + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result." + System.lineSeparator() + + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.", + "Minimum curvature ratio", + 0, + new ImageIcon(getClass().getResource("/curvature.png")) + ); + } + + private void showRelDistHelp() { + JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"), + "Entered number represents how far middle point of two vertices can be from candidate plane of symmetry" + System.lineSeparator() + + "to give this plane vote. Plane with highest number of votes is plane of approximate symmetry." + System.lineSeparator() + + System.lineSeparator() + + "Higher number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result." + System.lineSeparator() + + "Lower number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.", + "Maximum relative distance from plane", + 0, + new ImageIcon(getClass().getResource("/distance.png")) + ); + } + + private void showAveragingHelp() { + JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"), + "TO DO", + "TO DO", + 0, + new ImageIcon(getClass().getResource("/distance.png")) + ); + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/tests/BatchTests.java b/GUI/src/main/java/cz/fidentis/analyst/tests/BatchTests.java index a8d4651ba229ce5127759e78e24efdc8d095e47c..f3d8f05dbcab2b02ca5a76ea90f5a8b95f7837dc 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/tests/BatchTests.java +++ b/GUI/src/main/java/cz/fidentis/analyst/tests/BatchTests.java @@ -3,6 +3,7 @@ package cz.fidentis.analyst.tests; import cz.fidentis.analyst.BatchProcessor; import cz.fidentis.analyst.face.HumanFace; import cz.fidentis.analyst.face.HumanFaceFactory; +import cz.fidentis.analyst.icp.NoUndersampling; import cz.fidentis.analyst.icp.RandomStrategy; import cz.fidentis.analyst.icp.UndersamplingStrategy; import cz.fidentis.analyst.kdtree.KdTree; @@ -23,6 +24,7 @@ public class BatchTests { private static final String primaryFacePath = dataDir + "/average-boy-17-20/average_boy_17-20.obj"; //private static final String primaryFacePath = dataDir + "/average-girl-17-20/average_girl_17-20.obj"; //private static final String primaryFacePath = "../../analyst-data/basic-models/02.obj"; + //private static final String primaryFacePath = dataDir + "/07/00007_01_ECA.obj"; private static final String templateFacePath = dataDir + "template.obj"; /** @@ -59,8 +61,8 @@ public class BatchTests { printTimes(startTime, endTime, faceIDs.size()); ////////////////////////////////////////////// - //UndersamplingStrategy strategy = new NoUndersampling(); - UndersamplingStrategy strategy = new RandomStrategy(0.5); + UndersamplingStrategy strategy = new NoUndersampling(); + //UndersamplingStrategy strategy = new RandomStrategy(0.5); System.out.println(); System.out.println("ICP registration with " + strategy + ":"); startTime = System.currentTimeMillis(); diff --git a/GUI/src/main/java/cz/fidentis/analyst/tests/EfficiencyTests.java b/GUI/src/main/java/cz/fidentis/analyst/tests/EfficiencyTests.java index e1c4e1a5c48fed5ab54f91b31f9291cbd7423e5b..a82edc684ce82a235f6d65c6bc444f66ca3addc1 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/tests/EfficiencyTests.java +++ b/GUI/src/main/java/cz/fidentis/analyst/tests/EfficiencyTests.java @@ -3,6 +3,7 @@ package cz.fidentis.analyst.tests; import cz.fidentis.analyst.face.HumanFace; import cz.fidentis.analyst.kdtree.KdTree; import cz.fidentis.analyst.mesh.core.MeshFacet; +import cz.fidentis.analyst.symmetry.CurvatureAlg; import cz.fidentis.analyst.symmetry.SymmetryConfig; import cz.fidentis.analyst.symmetry.Plane; import cz.fidentis.analyst.symmetry.SignificantPoints; @@ -53,10 +54,10 @@ public class EfficiencyTests { //face1.getMeshModel().compute(new GaussianCurvature()); // initialize everything, then measure System.out.println("Symmetry plane calculation:"); - printSymmetryPlane(face1, true, SignificantPoints.CurvatureAlg.MEAN); - printSymmetryPlane(face1, true, SignificantPoints.CurvatureAlg.GAUSSIAN); - printSymmetryPlane(face1, false, SignificantPoints.CurvatureAlg.MEAN); - printSymmetryPlane(face1, false, SignificantPoints.CurvatureAlg.GAUSSIAN); + //printSymmetryPlane(face1, true, CurvatureAlg.MEAN); + //printSymmetryPlane(face1, true, CurvatureAlg.GAUSSIAN); + //printSymmetryPlane(face1, false, CurvatureAlg.MEAN); + //printSymmetryPlane(face1, false, CurvatureAlg.GAUSSIAN); System.out.println(); System.out.println(measureKdTreeCreation(face1) + "\tmsec:\tKd-tree creation of first face"); @@ -103,9 +104,9 @@ public class EfficiencyTests { return System.currentTimeMillis() - startTime; } - private static void printSymmetryPlane(HumanFace face, boolean concurrently, SignificantPoints.CurvatureAlg curvatureAlg) { + private static void printSymmetryPlane(HumanFace face, boolean concurrently) { long startTime = System.currentTimeMillis(); - SymmetryEstimator est = new SymmetryEstimator(new SymmetryConfig(), curvatureAlg); + SymmetryEstimator est = new SymmetryEstimator(new SymmetryConfig()); face.getMeshModel().compute(est, false); Plane plane = est.getSymmetryPlane(concurrently); long endTime = System.currentTimeMillis(); @@ -114,7 +115,7 @@ public class EfficiencyTests { (endTime-startTime) + "\tmsec: " + "\t" + (concurrently ? "concurrently" : "sequentially") + - "\t" + curvatureAlg + " curvature " + +// "\t" + curvatureAlg + " curvature " + "\t" + plane.getNormal() + ", " + plane.getDistance() ); } diff --git a/GUI/src/main/java/cz/fidentis/analyst/tests/HeatMapsTestApp.java b/GUI/src/main/java/cz/fidentis/analyst/tests/HeatMapsTestApp.java deleted file mode 100644 index f185a9102ebaa4c6ed83439f0b6c71b3aa71449b..0000000000000000000000000000000000000000 --- a/GUI/src/main/java/cz/fidentis/analyst/tests/HeatMapsTestApp.java +++ /dev/null @@ -1,386 +0,0 @@ -package cz.fidentis.analyst.tests; - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2; -import com.jogamp.opengl.GLAutoDrawable; -import cz.fidentis.analyst.face.HumanFace; -import cz.fidentis.analyst.gui.Canvas; -import cz.fidentis.analyst.gui.GeneralGLEventListener; -import cz.fidentis.analyst.gui.HistogramComponent; -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.Curvature; -import cz.fidentis.analyst.visitors.mesh.HausdorffDistance; -import cz.fidentis.analyst.visitors.mesh.HausdorffDistance.Strategy; -import org.openide.util.Exceptions; - -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.vecmath.Point3d; -import javax.vecmath.Vector3d; -import java.awt.Color; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.io.File; -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static com.jogamp.opengl.GL.GL_FRONT_AND_BACK; -import static com.jogamp.opengl.GL.GL_VIEWPORT; -import static com.jogamp.opengl.GL2GL3.GL_FILL; -import static com.jogamp.opengl.GL2GL3.GL_LINE; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_MODELVIEW_MATRIX; -import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_PROJECTION_MATRIX; - -/** - * Testing application displaying different heat maps in 3D. - * - * @author Daniel Sokol - * @author Radek Oslejsek - */ -public class HeatMapsTestApp extends GeneralGLEventListener { - - private static final JFrame TEST_FRAME = new JFrame(); - public final HistogramComponent histogram = new HistogramComponent(); - - private Map<MeshFacet, List<Double>> values; - private final Color minColor = Color.BLUE; - private final Color maxColor = Color.RED; - - - /** - * Constructor. - * @param canvas Canvas - */ - public HeatMapsTestApp(Canvas canvas) { - super(canvas); - } - - /** - * Main method - * @param args Input arguments - * @throws IOException on IO error - */ - public static void main(String[] args) { - //Declaration - JButton gaussButton = new JButton("Show Gaussian curvature"); - JButton meanButton = new JButton("Show mean curvature"); - JButton maxButton = new JButton("Show maximum principal curvature"); - JButton minButton = new JButton("Show minimum principal curvature"); - JButton hdButton1 = new JButton("Show Hausdorff distance to average boy - p2p abosult"); - JButton hdButton2 = new JButton("Show Hausdorff distance to average boy - p2p relative"); - - Canvas testCanvas = new Canvas(); - HeatMapsTestApp colorListener = new HeatMapsTestApp(testCanvas); - testCanvas.setListener(colorListener); - - gaussButton.addActionListener(e -> colorListener.computeGaussian()); - meanButton.addActionListener(e -> colorListener.computeMean()); - maxButton.addActionListener(e -> colorListener.computeMaxPrincipal()); - minButton.addActionListener(e -> colorListener.computeMinPrincipal()); - hdButton1.addActionListener(e -> colorListener.computeHausdorffDistanceP2pAbs()); - hdButton2.addActionListener(e -> colorListener.computeHausdorffDistanceP2pRel()); - - TEST_FRAME.setLayout(new GridBagLayout()); - TEST_FRAME.setVisible(true); - //TEST_FRAME.setSize(1920, 1080); - TEST_FRAME.setExtendedState(JFrame.MAXIMIZED_BOTH); - - // Adding - GridBagConstraints c = new GridBagConstraints(); - c.fill = GridBagConstraints.BOTH; - c.gridx = 0; - c.gridy = 0; - c.weighty = 1; - c.weightx = 1; - - c.gridheight = 8; - c.gridwidth = 4; - c.weightx = 4; - TEST_FRAME.add(testCanvas, c); - c.gridheight = 1; - c.gridwidth = 2; - c.gridx = 4; - c.weightx = 2; - c.gridy = 1; - TEST_FRAME.add(colorListener.histogram,c); - c.weightx = 1; - c.gridwidth = 1; - c.gridy++; - TEST_FRAME.add(gaussButton, c); - c.gridx++; - TEST_FRAME.add(meanButton, c); - c.gridy++; - c.gridx--; - TEST_FRAME.add(maxButton, c); - c.gridx++; - TEST_FRAME.add(minButton, c); - c.gridy++; - c.gridx--; - TEST_FRAME.add(hdButton1, c); - c.gridx++; - TEST_FRAME.add(hdButton2, c); - - } - - @Override - public void setModel(MeshModel model) { - super.setModel(model); - - System.err.println(); - System.err.println("MODEL: " + getModel()); - - Set<Point3d> unique = new HashSet<>(); - for (MeshPoint p: getModel().getFacets().get(0).getVertices()) { - unique.add(p.getPosition()); - } - System.out.println("UNIQUE VERTICES: " + unique.size()); - /* - for (Vector3d v: unique2) { - for (MeshPoint p: uniqueVerts) { - if (v.equals(p.getPosition())) { - System.out.println(p); - } - } - System.out.println("----------------"); - } - */ - } - - /** - * Computes curvature - */ - public void computeGaussian() { - if (this.getModel() == null) { - return; - } - - long startTime = System.currentTimeMillis(); - Curvature vis = new Curvature(); - this.getModel().compute(vis); - values = vis.getGaussianCurvatures(); - long duration = System.currentTimeMillis() - startTime; - System.err.println(duration + "\tmsec: Gaussian curvature"); - - histogram.setValues(values); - } - - /** - * Computes curvature - */ - public void computeMean() { - if (this.getModel() == null) { - return; - } - - long startTime = System.currentTimeMillis(); - Curvature vis = new Curvature(); - this.getModel().compute(vis); - values = vis.getMeanCurvatures(); - long duration = System.currentTimeMillis() - startTime; - System.err.println(duration + "\tmsec: Mean curvature"); - - histogram.setValues(values); - } - - /** - * Computes curvature - */ - public void computeMinPrincipal() { - if (this.getModel() == null) { - return; - } - - long startTime = System.currentTimeMillis(); - Curvature vis = new Curvature(); - this.getModel().compute(vis); - values = vis.getMinPrincipalCurvatures(); - long duration = System.currentTimeMillis() - startTime; - System.err.println(duration + "\tmsec: Minimum principal curvature"); - - histogram.setValues(values); - } - - /** - * Computes curvature - */ - public void computeMaxPrincipal() { - if (this.getModel() == null) { - return; - } - - long startTime = System.currentTimeMillis(); - Curvature vis = new Curvature(); - this.getModel().compute(vis); - values = vis.getMaxPrincipalCurvatures(); - long duration = System.currentTimeMillis() - startTime; - System.err.println(duration + "\tmsec: Maximum principal curvature"); - histogram.setValues(values); - } - - /** - * Computes absolute HD - */ - public void computeHausdorffDistanceP2pAbs() { - if (this.getModel() == null) { - return; - } - try { - HumanFace boy = new HumanFace(new File("src/test/resources/cz/fidentis/analyst/average_boy_17-20.obj")); - long startTime = System.currentTimeMillis(); - HausdorffDistance vis = new HausdorffDistance(boy.getMeshModel(), Strategy.POINT_TO_POINT, false, true); - this.getModel().compute(vis); - values = vis.getDistances(); - long duration = System.currentTimeMillis() - startTime; - System.err.println(duration + "\tmsec: Hausdorff distance " + vis.getStrategy() + " " + (vis.relativeDistance() ? "RELATIVE" : "ABSOLUTE")); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - histogram.setValues(values); - } - - /** - * Computes relative HD - */ - public void computeHausdorffDistanceP2pRel() { - if (this.getModel() == null) { - return; - } - try { - HumanFace boy = new HumanFace(new File("src/test/resources/cz/fidentis/analyst/average_boy_17-20.obj")); - long startTime = System.currentTimeMillis(); - HausdorffDistance vis = new HausdorffDistance(boy.getMeshModel(), Strategy.POINT_TO_POINT, true, true); - this.getModel().compute(vis); - values = vis.getDistances(); - long duration = System.currentTimeMillis() - startTime; - System.err.println(duration + "\tmsec: Hausdorff distance " + vis.getStrategy() + " " + (vis.relativeDistance() ? "RELATIVE" : "ABSOLUTE")); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - List<Double> distanceList = values.get(getModel().getFacets().get(0)); - histogram.setValues(values); - } - - @Override - public void display(GLAutoDrawable glad) { - wireModel = glCanvas.getDrawWired(); // is wire-frame or not - - if (whiteBackround) { - gl.glClearColor(0.9f, 0.9f, 0.9f, 0); - } else { - gl.glClearColor(0.25f, 0.25f, 0.25f, 0); - } - // background for GLCanvas - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - gl.glLoadIdentity(); - - // sets model to proper position - glu.gluLookAt(xCameraPosition, yCameraPosition, zCameraPosition, xCenter, yCenter, zCenter, xUpPosition, yUpPosition, zUpPosition); - - gl.glShadeModel(GL2.GL_SMOOTH); - gl.glGetIntegerv(GL_VIEWPORT, viewport, 0); - gl.glGetFloatv(GL_MODELVIEW_MATRIX, modelViewMatrix, 0); - gl.glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix, 0); - - //if there is any model, draw - if (values != null) { - drawHeatmap(this.getModel()); - } else if (getModel() != null) { - if (wireModel) { - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //drawn as wire-frame - } else { - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // drawn as full traingles - } - - drawWithoutTextures(getModel()); - } - - gl.glFlush(); - } - - protected void drawHeatmap(MeshModel model) { - for (int i = 0; i < model.getFacets().size(); i++) { - renderFaceWithHeatmap(model.getFacets().get(i), histogram.getValues().get(model.getFacets().get(i)), histogram.getMinValue(), histogram.getMaxValue()); - } - } - - protected void renderFaceWithHeatmap(MeshFacet facet, List<Double> distancesList, Double minDistance, Double maxDistance) { - gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles - - // get the normal and tex coords indicies for face i - for (int v = 0; v < facet.getCornerTable().getSize(); v++) { - // render the normals - Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal(); - if (norm != null) { - gl.glNormal3d(norm.x, norm.y, norm.z); - } - // render the vertices - Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition(); - //get color of vertex - Color c = getColor(distancesList.get(facet.getCornerTable().getRow(v).getVertexIndex()), minDistance, maxDistance); - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, c.getComponents(null), 0); - - gl.glVertex3d(vert.x, vert.y, vert.z); - } - gl.glEnd(); - gl.glPopAttrib(); - } - - protected Color getColor(Double currentDistance, Double minDistance, Double maxDistance) { - double currentParameter = ((currentDistance - minDistance) / (maxDistance - minDistance)); - - if (currentDistance > maxDistance) { - currentParameter = 1.0; - } else if (currentDistance < minDistance || (maxDistance - minDistance) == 0) { - currentParameter = 0.0; - } - - float[] hsb1 = Color.RGBtoHSB(minColor.getRed(), minColor.getGreen(), minColor.getBlue(), null); - double h1 = hsb1[0]; - double s1 = hsb1[1]; - double b1 = hsb1[2]; - - float[] hsb2 = Color.RGBtoHSB(maxColor.getRed(), maxColor.getGreen(), maxColor.getBlue(), null); - double h2 = hsb2[0]; - double s2 = hsb2[1]; - double b2 = hsb2[2]; - - // determine clockwise and counter-clockwise distance between hues - double distCCW; - double distCW; - - if (h1 >= h2) { - distCCW = h1 - h2; - distCW = 1 + h2 - h1; - } else { - distCCW = 1 + h1 - h2; - distCW = h2 - h1; - } - - double hue; - - if (distCW >= distCCW) { - hue = h1 + (distCW * currentParameter); - } else { - hue = h1 - (distCCW * currentParameter); - } - - if (hue < 0) { - hue = 1 + hue; - } - if (hue > 1) { - hue = hue - 1; - } - - double saturation = (1 - currentParameter) * s1 + currentParameter * s2; - double brightness = (1 - currentParameter) * b1 + currentParameter * b2; - - //System.out.println("AAA " + hue); - - return Color.getHSBColor((float)hue, (float)saturation, (float)brightness); - } -} diff --git a/GUI/src/main/java/cz/fidentis/analyst/tests/ICPTest.java b/GUI/src/main/java/cz/fidentis/analyst/tests/ICPTest.java new file mode 100644 index 0000000000000000000000000000000000000000..794fee3c67a4369aa090c9d7e0b7cc30fc323edc --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/tests/ICPTest.java @@ -0,0 +1,76 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package cz.fidentis.analyst.tests; + +import cz.fidentis.analyst.face.HumanFace; +import cz.fidentis.analyst.icp.IcpTransformer; +import cz.fidentis.analyst.icp.NoUndersampling; +import cz.fidentis.analyst.kdtree.KdTree; +import cz.fidentis.analyst.mesh.core.MeshFacet; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author oslejsek + */ +public class ICPTest { + + private static final String dataDir = "../../analyst-data/multi-scan-models-anonymized-fixed/"; + + private static String[] faceFiles = new String[] { + dataDir + "02/00002_01_ECA.obj", + dataDir + "04/00004_01_ECA.obj", + dataDir + "06/00006_01_ECA.obj", + dataDir + "07/00007_01_ECA.obj", + dataDir + "10/00010_01_ECA.obj" + }; + + private static int tests = 0; + private static int iters = 0; + + public static void main(String[] args) throws IOException { + long time = 0; + for (int i = 0; i < faceFiles.length; i++) { + time += test(i); + } + System.out.println("tests: " + tests); + System.out.println("iters: " + iters); + System.out.println("time: " + time + " ms"); + System.out.println("AVG iters: " + ((double)iters/tests)); + System.out.println("AVG time: " + ((double)time/tests) + " ms"); + } + + public static long test(int index) throws IOException { + List<HumanFace> faces = new ArrayList<>(); + for (int i = 0; i < faceFiles.length; i++) { + faces.add(new HumanFace(new File(faceFiles[i]))); + } + HumanFace prim = faces.remove(index); + KdTree primKdTree = prim.computeKdTree(true); + + + System.out.println(); + System.out.println(prim.getId()); + long startTime = System.currentTimeMillis(); + for (HumanFace sec: faces) { + tests++; + IcpTransformer icpTransformer = new IcpTransformer(primKdTree, 10, false, 0.05, new NoUndersampling()); + System.out.println(sec.getId()); + sec.getMeshModel().compute(icpTransformer); + + for (MeshFacet f: icpTransformer.getTransformations().keySet()) { + //System.out.println("AAA"+icpTransformer.getTransformations().get(f).size()); + iters += icpTransformer.getTransformations().get(f).size(); + } + } + long endTime = System.currentTimeMillis(); + + return endTime - startTime; + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java b/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java new file mode 100644 index 0000000000000000000000000000000000000000..bb743d5d00cc4651c24915c4091256b350a7c0f9 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java @@ -0,0 +1,51 @@ +package cz.fidentis.analyst.toolbar; + +import cz.fidentis.analyst.canvas.Canvas; +import cz.fidentis.analyst.distance.DistanceAction; +import cz.fidentis.analyst.distance.DistancePanel; +import cz.fidentis.analyst.registration.RegistrationAction; +import cz.fidentis.analyst.registration.RegistrationPanel; +import javax.swing.JTabbedPane; +import javax.swing.JToggleButton; +import org.openide.util.NbBundle; + +/** + * A toolbar extension for the analysis of two faces. + * + * @author Radek Oslejsek + */ +public class FaceToFaceToolBar extends RenderingToolBar { + + /** + * Constructor. + * + * @param canvas Rendering canvas + * @param controlPanel The top component control panels + */ + public FaceToFaceToolBar(Canvas canvas, JTabbedPane controlPanel) { + super(canvas); + addPrimaryFaceButton(); + addSecondaryFaceButton(); + addSeparator(); + addDistanceButton(controlPanel); + addRegistrationButton(controlPanel); + } + + private void addDistanceButton(JTabbedPane controlPanel) { + JToggleButton button = new JToggleButton(); + button.addActionListener(new DistanceAction(getCanvas(), controlPanel)); + button.setActionCommand(DistanceAction.ACTION_COMMAND_SHOW_HIDE_PANEL); + button.setIcon(DistancePanel.getStaticIcon()); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "FaceToFaceToolBar.distance.text")); + add(button); + } + + private void addRegistrationButton(JTabbedPane controlPanel) { + JToggleButton button = new JToggleButton(); + button.addActionListener(new RegistrationAction(getCanvas(), controlPanel)); + button.setActionCommand(RegistrationAction.ACTION_COMMAND_SHOW_HIDE_PANEL); + button.setIcon(RegistrationPanel.getStaticIcon()); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "FaceToFaceToolBar.registration.text")); + add(button); + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingModeAction.java b/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingModeAction.java new file mode 100644 index 0000000000000000000000000000000000000000..755636f4f9ce7829de421164809cc96e767dec01 --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingModeAction.java @@ -0,0 +1,116 @@ +package cz.fidentis.analyst.toolbar; + +import com.jogamp.opengl.GL2; +import cz.fidentis.analyst.canvas.Canvas; +import static cz.fidentis.analyst.toolbar.RenderingToolBar.REFLECTIONS_COLOR; +import cz.fidentis.analyst.scene.Drawable; +import cz.fidentis.analyst.scene.DrawableFeaturePoints; +import java.awt.Color; +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import javax.swing.JToggleButton; + +/** + * Action listener for changing OpenGL canvas rendering modes. + * + * @author Radek Oslejsek + */ +public class RenderingModeAction extends AbstractAction { + + public static final String ACTION_COMMAND_SMOOTH_MODE = "smooth"; + public static final String ACTION_COMMAND_WIREFRAME_MODE = "wireframe"; + public static final String ACTION_COMMAND_POINT_CLOUD_MODE = "point cloud"; + public static final String ACTION_COMMAND_BACKGROUND_CHANGE = "background"; + public static final String ACTION_COMMAND_REFLECTIONS_ON_OFF = "reflections"; + public static final String ACTION_COMMAND_SHOW_HIDE_PRIMARY_FACE = "primary face"; + public static final String ACTION_COMMAND_SHOW_HIDE_SECONDARY_FACES = "secondary faces"; + public static final String ACTION_COMMAND_SHOW_HIDE_FEATURE_POINTS = "feature points"; + + + private final Canvas canvas; + private boolean showFPs = true; + + /** + * Constructor. + * @param canvas OpenGL canvas + */ + public RenderingModeAction(Canvas canvas) { + this.canvas = canvas; + } + + @Override + public void actionPerformed(ActionEvent ae) { + String action = ae.getActionCommand(); + switch (action) { + case ACTION_COMMAND_SMOOTH_MODE: + for (int i = 0; i < canvas.getScene().getNumFaces(); i++){ + canvas.getScene().getDrawableFace(i).setRenderMode(GL2.GL_FILL); + } + break; + case ACTION_COMMAND_WIREFRAME_MODE: + for (int i = 0; i < canvas.getScene().getNumFaces(); i++){ + canvas.getScene().getDrawableFace(i).setRenderMode(GL2.GL_LINE); + } + break; + case ACTION_COMMAND_POINT_CLOUD_MODE: + for (int i = 0; i < canvas.getScene().getNumFaces(); i++){ + canvas.getScene().getDrawableFace(i).setRenderMode(GL2.GL_POINT); + } + break; + case ACTION_COMMAND_BACKGROUND_CHANGE: + if (((JToggleButton) ae.getSource()).isSelected()) { + canvas.getSceneRenderer().setBrightBackground(); + } else { + canvas.getSceneRenderer().setDarkBackground(); + } + break; + case ACTION_COMMAND_REFLECTIONS_ON_OFF: + for (Drawable dm: canvas.getScene().getAllDrawables()) { + if (((JToggleButton) ae.getSource()).isSelected()) { + dm.setHighlights(REFLECTIONS_COLOR); + } else { + dm.setHighlights(Color.BLACK); + } + } + break; + case ACTION_COMMAND_SHOW_HIDE_PRIMARY_FACE: + showHideFace(0, ((JToggleButton) ae.getSource()).isSelected()); + break; + case ACTION_COMMAND_SHOW_HIDE_SECONDARY_FACES: + for (int i = 1; i < canvas.getScene().getNumFaces(); i++) { + showHideFace(i, ((JToggleButton) ae.getSource()).isSelected()); + } + break; + case ACTION_COMMAND_SHOW_HIDE_FEATURE_POINTS: + for (int i = 0; i < canvas.getScene().getNumFaces(); i++) { + DrawableFeaturePoints fp = canvas.getScene().getDrawableFeaturePoints(i); + if (((JToggleButton) ae.getSource()).isSelected()) { // show + if (canvas.getScene().getDrawableFace(i).isShown() && fp != null) { + fp.show(); + } + } else if (fp != null) { // hide + fp.hide(); + } + } + break; + default: + throw new UnsupportedOperationException(action); + } + canvas.renderScene(); + } + + private void showHideFace(int i, boolean show) { + DrawableFeaturePoints fp = canvas.getScene().getDrawableFeaturePoints(i); + if (show) { + canvas.getScene().getDrawableFace(i).show(); + if (showFPs) { + fp.show(); + } + } else { //hide + canvas.getScene().getDrawableFace(i).hide(); + if (fp != null) { + fp.hide(); + } + } + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingToolBar.java b/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingToolBar.java new file mode 100644 index 0000000000000000000000000000000000000000..3d8464133ce5bc2d9472f960efecf3462fca2d9a --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingToolBar.java @@ -0,0 +1,159 @@ +package cz.fidentis.analyst.toolbar; + +import cz.fidentis.analyst.canvas.Canvas; +import java.awt.Color; +import java.awt.GridLayout; +import java.awt.image.BufferedImage; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.JToggleButton; +import javax.swing.JToolBar; +import org.openide.awt.DropDownButtonFactory; +import org.openide.util.NbBundle; + +/** + * Generic rendering toolbar with common tools. + * + * @author Radek Oslejsek + */ +public class RenderingToolBar extends JToolBar { + + public static final int WIDTH = 58; + public static final Color REFLECTIONS_COLOR = Color.DARK_GRAY; + + public static final String RENDERING_MODE_BUTTON_ICON = "wireframe28x28.png"; + public static final String BACKGROUND_BUTTON_ICON = "background28x28.png"; + public static final String REFLECTIONS_BUTTON_ICON = "reflections28x28.png"; + public static final String SMOOT_BUTTON_ICON = "smooth-tri28x28.png"; + public static final String WIREFRAME_BUTTON_ICON = "wireframe-tri28x28.png"; + public static final String POINTS_BUTTON_ICON = "points-tri28x28.png"; + public static final String PRIMARY_FACE_BUTTON_ICON = "primaryFace28x28.png"; + public static final String SECONDARY_FACE_BUTTON_ICON = "secondaryFace28x28.png"; + public static final String FEATURE_POINTS_BUTTON_ICON = "fps28x28.png"; + + private final Canvas canvas; + + /** + * Constructor. + * @param canvas Rendering canvas + */ + public RenderingToolBar(Canvas canvas) { + this.canvas = canvas; + initToolBar(); + addRenderingModeButton(); + addBackgroundButton(); + addReflectionsButton(); + addFeaturePointsButton(); + } + + protected Canvas getCanvas() { + return canvas; + } + + private void initToolBar() { + setOrientation(javax.swing.SwingConstants.VERTICAL); + setRollover(true); + setFloatable(false); + } + + private void addRenderingModeButton() { + JPopupMenu popup = new JPopupMenu(); + + JMenuItem menuItem1 = new JMenuItem(new RenderingModeAction(canvas)); + JMenuItem menuItem2 = new JMenuItem(new RenderingModeAction(canvas)); + JMenuItem menuItem3 = new JMenuItem(new RenderingModeAction(canvas)); + + menuItem1.setActionCommand(RenderingModeAction.ACTION_COMMAND_SMOOTH_MODE); + menuItem2.setActionCommand(RenderingModeAction.ACTION_COMMAND_WIREFRAME_MODE); + menuItem3.setActionCommand(RenderingModeAction.ACTION_COMMAND_POINT_CLOUD_MODE); + + menuItem1.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.SMOOT_BUTTON_ICON))); + menuItem2.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.WIREFRAME_BUTTON_ICON))); + menuItem3.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.POINTS_BUTTON_ICON))); + + menuItem1.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.smooth.text")); + menuItem2.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.wireframe.text")); + menuItem3.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.pointcloud.text")); + + popup.add(menuItem1); + popup.add(menuItem2); + popup.add(menuItem3); + + popup.setLayout(new GridLayout(1,0)); + + // The button that will display the default action and the + // dropdown arrow + JButton button = DropDownButtonFactory.createDropDownButton( + new ImageIcon(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB)), + popup); + + button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.RENDERING_MODE_BUTTON_ICON))); + + //Mnemonics.setLocalizedText(button, NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.renderingmode.text")); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.renderingmode.text")); + button.setFocusable(false); + //button.setText(null); + add(button); + } + + private void addBackgroundButton() { + JToggleButton button = new JToggleButton(); + button.addActionListener(new RenderingModeAction(canvas)); + button.setActionCommand(RenderingModeAction.ACTION_COMMAND_BACKGROUND_CHANGE); + //button.setAction(new BackgroundAction(canvas)); + button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.BACKGROUND_BUTTON_ICON))); + //Mnemonics.setLocalizedText(button, NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.background.text")); + button.setFocusable(false); + // button.setText(null); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.background.text")); + add(button); + } + + private void addReflectionsButton() { + JToggleButton button = new JToggleButton(); + button.addActionListener(new RenderingModeAction(canvas)); + button.setActionCommand(RenderingModeAction.ACTION_COMMAND_REFLECTIONS_ON_OFF); + button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.REFLECTIONS_BUTTON_ICON))); + button.setFocusable(false); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.reflections.text")); + add(button); + } + + protected void addPrimaryFaceButton() { + JToggleButton button = new JToggleButton(); + button.addActionListener(new RenderingModeAction(canvas)); + button.setActionCommand(RenderingModeAction.ACTION_COMMAND_SHOW_HIDE_PRIMARY_FACE); + button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.PRIMARY_FACE_BUTTON_ICON))); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.primaryface.text")); + //button.setText("P"); + button.setSelected(true); + button.setFocusable(false); + add(button); + } + + protected void addSecondaryFaceButton() { + JToggleButton button = new JToggleButton(); + button.addActionListener(new RenderingModeAction(canvas)); + button.setActionCommand(RenderingModeAction.ACTION_COMMAND_SHOW_HIDE_SECONDARY_FACES); + button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.SECONDARY_FACE_BUTTON_ICON))); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.secondaryfaces.text")); + //button.setText("S"); + button.setSelected(true); + button.setFocusable(false); + add(button); + } + + protected void addFeaturePointsButton() { + JToggleButton button = new JToggleButton(); + button.addActionListener(new RenderingModeAction(canvas)); + button.setActionCommand(RenderingModeAction.ACTION_COMMAND_SHOW_HIDE_FEATURE_POINTS); + button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.FEATURE_POINTS_BUTTON_ICON))); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.featurepoints.text")); + //button.setText("FPs"); + button.setSelected(true); + button.setFocusable(false); + add(button); + } +} diff --git a/GUI/src/main/java/cz/fidentis/analyst/toolbar/SingleFaceToolBar.java b/GUI/src/main/java/cz/fidentis/analyst/toolbar/SingleFaceToolBar.java new file mode 100644 index 0000000000000000000000000000000000000000..aaa3436a1cf2fc21749c3f97a00314dd5c396d3a --- /dev/null +++ b/GUI/src/main/java/cz/fidentis/analyst/toolbar/SingleFaceToolBar.java @@ -0,0 +1,50 @@ +package cz.fidentis.analyst.toolbar; + +import cz.fidentis.analyst.symmetry.SymmetryAction; +import cz.fidentis.analyst.canvas.Canvas; +import cz.fidentis.analyst.curvature.CurvatureAction; +import cz.fidentis.analyst.curvature.CurvaturePanel; +import cz.fidentis.analyst.symmetry.SymmetryPanel; +import javax.swing.JTabbedPane; +import javax.swing.JToggleButton; +import org.openide.util.NbBundle; + +/** + * A toolbar extension for a single face analysis. + * + * @author Radek Oslejsek + */ +public class SingleFaceToolBar extends RenderingToolBar { + + /** + * Constructor. + * + * @param canvas Rendering canvas + * @param controlPanel The top component control panels + */ + public SingleFaceToolBar(Canvas canvas, JTabbedPane controlPanel) { + super(canvas); + addPrimaryFaceButton(); + addSeparator(); + addSymmetryPlaneButton(controlPanel); + addCurvatureButton(controlPanel); + } + + private void addSymmetryPlaneButton(JTabbedPane controlPanel) { + JToggleButton button = new JToggleButton(); + button.addActionListener(new SymmetryAction(getCanvas(), controlPanel)); + button.setActionCommand(SymmetryAction.ACTION_COMMAND_SHOW_HIDE_PANEL); + button.setIcon(SymmetryPanel.getStaticIcon()); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "SingleFaceToolBar.symmetry.text")); + add(button); + } + + private void addCurvatureButton(JTabbedPane topControlPanel) { + JToggleButton button = new JToggleButton(); + button.addActionListener(new CurvatureAction(getCanvas(), topControlPanel)); + button.setActionCommand(CurvatureAction.ACTION_COMMAND_SHOW_HIDE_PANEL); + button.setIcon(CurvaturePanel.getStaticIcon()); + button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "SingleFaceToolBar.curvature.text")); + add(button); + } +} diff --git a/GUI/src/main/nbm/manifest.mf b/GUI/src/main/nbm/manifest.mf index 1ecced8c8ac2d3294d5d12c1f6e499b26ff49456..cc2b72af9a038822de616d30687f90023e9bf397 100644 --- a/GUI/src/main/nbm/manifest.mf +++ b/GUI/src/main/nbm/manifest.mf @@ -1,6 +1,6 @@ -Manifest-Version: 1.0 -OpenIDE-Module: cz.fidentis.analyst.gui -OpenIDE-Module-Install: cz/fidentis/analyst/gui/Installer.class -OpenIDE-Module-Localizing-Bundle: cz/fidentis/analyst/gui/Bundle.properties -OpenIDE-Module-Requires: org.openide.windows.WindowManager -OpenIDE-Module-Specification-Version: 1.0 +Manifest-Version: 1.0 +OpenIDE-Module: cz.fidentis.analyst.gui +OpenIDE-Module-Install: cz/fidentis/analyst/gui/Installer.class +OpenIDE-Module-Localizing-Bundle: cz/fidentis/analyst/gui/Bundle.properties +OpenIDE-Module-Requires: org.openide.windows.WindowManager +OpenIDE-Module-Specification-Version: 1.0 diff --git a/GUI/src/main/resources/background.png b/GUI/src/main/resources/background.png new file mode 100644 index 0000000000000000000000000000000000000000..121165c953d3ad25ecd87f9da64fa47aa5f45fe2 Binary files /dev/null and b/GUI/src/main/resources/background.png differ diff --git a/GUI/src/main/resources/background28x28.png b/GUI/src/main/resources/background28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..abbb76b9c4dcc8f1470e8bf733d8230add78f4e9 Binary files /dev/null and b/GUI/src/main/resources/background28x28.png differ diff --git a/GUI/src/main/resources/curvature2.png b/GUI/src/main/resources/curvature2.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd071f0abf5f9c7d47f17c6f27d26dd8aa0ad5e Binary files /dev/null and b/GUI/src/main/resources/curvature2.png differ diff --git a/GUI/src/main/resources/curvature28x28.png b/GUI/src/main/resources/curvature28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..235784d198b3b5a302749cdf00f21d1ebee55a0e Binary files /dev/null and b/GUI/src/main/resources/curvature28x28.png differ diff --git a/GUI/src/main/resources/cz/fidentis/analyst/gui/tab/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/core/Bundle.properties similarity index 52% rename from GUI/src/main/resources/cz/fidentis/analyst/gui/tab/Bundle.properties rename to GUI/src/main/resources/cz/fidentis/analyst/core/Bundle.properties index 44efbbfa1ef21cbbfc0cd1690473136b9fe322f0..248ceb1c62ac4882bb2057412537d7c71dc542d3 100644 --- a/GUI/src/main/resources/cz/fidentis/analyst/gui/tab/Bundle.properties +++ b/GUI/src/main/resources/cz/fidentis/analyst/core/Bundle.properties @@ -8,3 +8,11 @@ PostRegistrationCP.scaleFTF.text=0 PostRegistrationCP.rotationZFTF.text=0 PostRegistrationCP.rotationYFTF.text=0 PostRegistrationCP.jFormattedTextField1.text=jFormattedTextField1 +SingleFaceTab.jButton2.text=jButton2 +ProjectTopComp.addButton1.text=Add +ProjectTopComp.analyzeButton1.text=Open 1:1 +ProjectTopComp.inflateButton1.text=Inflate +ProjectTopComp.collapseButton1.text=Collapse +ProjectTopComp.deselectAllButton1.text=Deselect all +ProjectTopComp.selectAllButton1.text=Select all +ProjectTopComp.removeButton1.text=Remove diff --git a/GUI/src/main/resources/cz/fidentis/analyst/gui/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/gui/Bundle.properties index 83937dcb7d98ca1199fc1bdb667b280b3fc81369..b10fefa922d775960e6d52bece6245fc074dfbe8 100644 --- a/GUI/src/main/resources/cz/fidentis/analyst/gui/Bundle.properties +++ b/GUI/src/main/resources/cz/fidentis/analyst/gui/Bundle.properties @@ -9,15 +9,91 @@ AligmentTopComponent.jLabel1.text=Registration AligmentTopComponent.jButton1.text=Register AligmentTopComponent.jLabel2.text=Primary color AligmentTopComponent.jLabel3.text=Secondary color -ProjectTopComp.deselectAllButton1.text=Deselect all -ProjectTopComp.selectAllButton1.text=Select all -ProjectTopComp.removeButton1.text=Remove -ProjectTopComp.addButton1.text=Add -ProjectTopComp.analyzeButton1.text=Open 1:1 -ProjectTopComp.inflateButton1.text=Inflate -ProjectTopComp.collapseButton1.text=Collapse PreRegistrationPanel.titleLabel.text=Registration setup PreRegistrationPanel.methodLabel.text=Method: PreRegistrationPanel.jLabel1.text=jLabel1 PreRegistrationPanel.jLabel2.text=jLabel2 PreRegistrationPanel.registerButton.text=Register +PostRegistrationCP.shiftLabel.text=shift +PostRegistrationCP.visualizationLabel.text=Visualization +PostRegistrationCP.registrationAdjustmentLabel.text=Registration adjustment +PostRegistrationCP.transformationLabel.text=Transformation +PostRegistrationCP.featurePointsLabel.text=Feature points: +PostRegistrationCP.resetAllButton.toolTipText=reset all transformations +PostRegistrationCP.resetAllButton.text=reset all +PostRegistrationCP.thersholdButton.text=thershold +PostRegistrationCP.scaleButton.toolTipText=reset scale +PostRegistrationCP.scaleButton.text= +PostRegistrationCP.thersholdUpButton.text= +PostRegistrationCP.scaleFTF.toolTipText= +PostRegistrationCP.thresholdDownButton.text= +PostRegistrationCP.scaleMinusButton.text= +PostRegistrationCP.scalePlusButton.text= +PostRegistrationCP.jLabel4.text=Scale: +PostRegistrationCP.featurePointsButton.text=show +PostRegistrationCP.backfaceButton.text=hide backface +PostRegistrationCP.viewLabel.text=View: +PostRegistrationCP.jLabel3.text=Rotation: +PostRegistrationCP.frontButton.toolTipText=model front view +PostRegistrationCP.frontButton.text=front +PostRegistrationCP.rotationXFTF.toolTipText= +PostRegistrationCP.profileButton.toolTipText=model profile view +PostRegistrationCP.profileButton.text=side +# To change this license header, choose License Headers in Project Properties. +# To change this template file, choose Tools | Templates +# and open the template in the editor. +PostRegistrationCP.rightRotationXButton.text= +PostRegistrationCP.leftRotationZButton.text= +PostRegistrationCP.primaryFillRB.text= +PostRegistrationCP.rightRotationYButton.text= +PostRegistrationCP.secondaryLinesRB.text= +PostRegistrationCP.rightRotationZButton.text= +PostRegistrationCP.secondaryPointsRB.text= +PostRegistrationCP.rotationButton.toolTipText=reset rotation +PostRegistrationCP.rotationButton.text= +PostRegistrationCP.rotatXLabel.text=X +PostRegistrationCP.primaryPointsRB.text= +PostRegistrationCP.secondaryFillRB.text= +PostRegistrationCP.primaryLinesRB.text= +PostRegistrationCP.primaryColorPanel.toolTipText=sets color of primary model +PostRegistrationCP.rotatYLabel.text=Y +PostRegistrationCP.secondaryColorPanel.toolTipText=sets color of secondary model +PostRegistrationCP.rotatZLabel.text=Z +PostRegistrationCP.transparencySlider.toolTipText=sets model transparency +PostRegistrationCP.leftRotationXButton.text= +PostRegistrationCP.secondaryLabel.toolTipText= +PostRegistrationCP.secondaryLabel.text=secondary +PostRegistrationCP.leftRotationYButton.text= +PostRegistrationCP.primaryLabel.text=primary +PostRegistrationCP.highlightsLabel.text=highlights +PostRegistrationCP.leftTranslationZButton.text= +PostRegistrationCP.primaryHighlightsCB.text= +PostRegistrationCP.leftTranslationXButton.text= +PostRegistrationCP.rightTranslationZButton.text= +PostRegistrationCP.translYLabel.text=vertical +PostRegistrationCP.translZLabel.text=front-back +PostRegistrationCP.secondaryHighlightsCB.text= +PostRegistrationCP.renderModeLabel.text=render mode +PostRegistrationCP.fillLabel.text=fill +PostRegistrationCP.colorButton.toolTipText=reset colors +PostRegistrationCP.colorButton.text=color +PostRegistrationCP.linesLabel.text=lines +PostRegistrationCP.translXLabel.text=horizontal +PostRegistrationCP.transparencyButton.toolTipText=reset transparency +PostRegistrationCP.transparencyButton.text=opacity +PostRegistrationCP.rightTranslationYButton.text= +PostRegistrationCP.pointsLabel.text=points +PostRegistrationCP.modelLabel.text=Model: +PostRegistrationCP.leftTranslationYButton.text= +PostRegistrationCP.translationXFTF.toolTipText= +PostRegistrationCP.rightTranslationXButton.text= +PostRegistrationCP.jLabel2.text=Translation: +PostRegistrationCP.translationButton.toolTipText=reset translation +PostRegistrationCP.translationButton.text= +PostRegistrationCP.applyButton.toolTipText=apply transformations +PostRegistrationCP.applyButton.text=Apply changes +PostRegistrationCP.highShiftRB.toolTipText=set high shifting amount +PostRegistrationCP.highShiftRB.text=high +PostRegistrationCP.lowShiftRB.toolTipText=set low shifting amount +PostRegistrationCP.lowShiftRB.text=low +PostRegistrationCP.shiftLabel.toolTipText=transformation amount diff --git a/GUI/src/main/resources/cz/fidentis/analyst/newgui/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/newgui/Bundle.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/GUI/src/main/resources/cz/fidentis/analyst/newgui/swing/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/newgui/swing/Bundle.properties deleted file mode 100644 index 3b4ce9f121b8633cb7cf8321818cc146ce77b8ad..0000000000000000000000000000000000000000 --- a/GUI/src/main/resources/cz/fidentis/analyst/newgui/swing/Bundle.properties +++ /dev/null @@ -1,2 +0,0 @@ - -SingleFaceTab.jButton1.text= diff --git a/GUI/src/main/resources/cz/fidentis/analyst/gui/options/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/options/Bundle.properties similarity index 100% rename from GUI/src/main/resources/cz/fidentis/analyst/gui/options/Bundle.properties rename to GUI/src/main/resources/cz/fidentis/analyst/options/Bundle.properties 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 6953b62b7fb16e67a398aad8372a4fb03f3960d4..eb1ca6c1ed30107b3dc2e011fc3299728f840e0f 100644 --- a/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties +++ b/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties @@ -1,84 +1,65 @@ +RegistrationPanel.rightRotationZButton.text= +RegistrationPanel.rotationButton.toolTipText=reset rotation +RegistrationPanel.rotationButton.text= +RegistrationPanel.rotatXLabel.text=X +RegistrationPanel.rotatYLabel.text=Y +RegistrationPanel.rotatZLabel.text=Z +RegistrationPanel.transparencySlider.toolTipText=sets model transparency +RegistrationPanel.leftRotationXButton.text= +RegistrationPanel.leftRotationYButton.text= +RegistrationPanel.leftTranslationZButton.text= +RegistrationPanel.leftTranslationXButton.text= +RegistrationPanel.rightTranslationZButton.text= +RegistrationPanel.translYLabel.text=vertical +RegistrationPanel.translZLabel.text=front-back +RegistrationPanel.translXLabel.text=horizontal +RegistrationPanel.transparencyButton.toolTipText=reset transparency +RegistrationPanel.transparencyButton.text=clear +RegistrationPanel.rightTranslationYButton.text= +RegistrationPanel.leftTranslationYButton.text= +RegistrationPanel.translationXFTF.toolTipText= +RegistrationPanel.applyButton.toolTipText=apply transformations +RegistrationPanel.applyButton.text=Apply changes +RegistrationPanel.rightTranslationXButton.text= +RegistrationPanel.visualizationLabel.text=Transparency: +RegistrationPanel.jLabel2.text=Translation: +RegistrationPanel.translationButton.toolTipText=reset translation +RegistrationPanel.translationButton.text= +RegistrationPanel.highShiftRB.toolTipText=set high shifting amount +RegistrationPanel.highShiftRB.text=high +RegistrationPanel.registrationAdjustmentLabel.text=Registration adjustment +RegistrationPanel.lowShiftRB.toolTipText=set low shifting amount +RegistrationPanel.lowShiftRB.text=low +RegistrationPanel.shiftLabel.toolTipText=transformation amount +RegistrationPanel.shiftLabel.text=shift +RegistrationPanel.featurePointsLabel.text=FP closeness treshold: +RegistrationPanel.resetAllButton.toolTipText=reset all transformations +RegistrationPanel.resetAllButton.text=reset all +RegistrationPanel.scaleButton.toolTipText=reset scale +RegistrationPanel.scaleButton.text= +RegistrationPanel.scaleFTF.toolTipText= +RegistrationPanel.thersholdUpButton.text= +RegistrationPanel.thresholdDownButton.text= +RegistrationPanel.scaleMinusButton.text= +RegistrationPanel.scalePlusButton.text= +RegistrationPanel.jLabel4.text=Scale: +RegistrationPanel.viewLabel.text=View: +RegistrationPanel.jLabel3.text=Rotation: +RegistrationPanel.frontButton.toolTipText=model front view +RegistrationPanel.frontButton.text=front +RegistrationPanel.rotationXFTF.toolTipText= +RegistrationPanel.profileButton.toolTipText=model profile view +RegistrationPanel.profileButton.text=side # To change this license header, choose License Headers in Project Properties. # To change this template file, choose Tools | Templates # and open the template in the editor. - -PostRegistrationCP.rightRotationXButton.text= -PostRegistrationCP.viewLabel.text=View: -PostRegistrationCP.frontButton.toolTipText=model front view -PostRegistrationCP.frontButton.text=front -PostRegistrationCP.profileButton.toolTipText=model profile view -PostRegistrationCP.profileButton.text=side -PostRegistrationCP.leftRotationZButton.text= -PostRegistrationCP.primaryFillRB.text= -PostRegistrationCP.rightRotationYButton.text= -PostRegistrationCP.secondaryLinesRB.text= -PostRegistrationCP.rightRotationZButton.text= -PostRegistrationCP.secondaryPointsRB.text= -PostRegistrationCP.primaryPointsRB.text= -PostRegistrationCP.secondaryFillRB.text= -PostRegistrationCP.rotationButton.toolTipText=reset rotation -PostRegistrationCP.rotationButton.text= -PostRegistrationCP.primaryLinesRB.text= -PostRegistrationCP.rotatXLabel.text=X -PostRegistrationCP.rotatYLabel.text=Y -PostRegistrationCP.rotatZLabel.text=Z -PostRegistrationCP.leftRotationXButton.text= -PostRegistrationCP.primaryColorPanel.toolTipText=sets color of primary model -PostRegistrationCP.secondaryColorPanel.toolTipText=sets color of secondary model -PostRegistrationCP.transparencySlider.toolTipText=sets model transparency -PostRegistrationCP.secondaryLabel.toolTipText= -PostRegistrationCP.secondaryLabel.text=secondary -PostRegistrationCP.leftRotationYButton.text= -PostRegistrationCP.primaryLabel.text=primary -PostRegistrationCP.highlightsLabel.text=highlights -PostRegistrationCP.leftTranslationZButton.text= -PostRegistrationCP.primaryHighlightsCB.text= -PostRegistrationCP.leftTranslationXButton.text= -PostRegistrationCP.secondaryHighlightsCB.text= -PostRegistrationCP.rightTranslationZButton.text= -PostRegistrationCP.renderModeLabel.text=render mode -PostRegistrationCP.translYLabel.text=vertical -PostRegistrationCP.fillLabel.text=fill -PostRegistrationCP.translZLabel.text=front-back -PostRegistrationCP.translXLabel.text=horizontal -PostRegistrationCP.rightTranslationYButton.text= -PostRegistrationCP.applyButton.toolTipText=apply transformations -PostRegistrationCP.applyButton.text=Apply changes -PostRegistrationCP.colorButton.toolTipText=reset colors -PostRegistrationCP.colorButton.text=color -PostRegistrationCP.highShiftRB.toolTipText=set high shifting amount -PostRegistrationCP.highShiftRB.text=high -PostRegistrationCP.linesLabel.text=lines -PostRegistrationCP.lowShiftRB.toolTipText=set low shifting amount -PostRegistrationCP.lowShiftRB.text=low -PostRegistrationCP.transparencyButton.toolTipText=reset transparency -PostRegistrationCP.transparencyButton.text=opacity -PostRegistrationCP.shiftLabel.toolTipText=transformation amount -PostRegistrationCP.shiftLabel.text=shift -PostRegistrationCP.pointsLabel.text=points -PostRegistrationCP.modelLabel.text=Model: -PostRegistrationCP.leftTranslationYButton.text= -PostRegistrationCP.translationXFTF.toolTipText= -PostRegistrationCP.rightTranslationXButton.text= -PostRegistrationCP.visualizationLabel.text=Visualization -PostRegistrationCP.jLabel2.text=Translation: -PostRegistrationCP.translationButton.toolTipText=reset translation -PostRegistrationCP.translationButton.text= -PostRegistrationCP.transformationLabel.text=Transformation -PostRegistrationCP.registrationAdjustmentLabel.text=Registration adjustment -PostRegistrationCP.featurePointsLabel.text=Feature points: -PostRegistrationCP.resetAllButton.toolTipText=reset all transformations -PostRegistrationCP.resetAllButton.text=reset all -PostRegistrationCP.thersholdButton.text=thershold -PostRegistrationCP.scaleButton.toolTipText=reset scale -PostRegistrationCP.scaleButton.text= -PostRegistrationCP.thersholdUpButton.text= -PostRegistrationCP.scaleFTF.toolTipText= -PostRegistrationCP.thresholdDownButton.text= -PostRegistrationCP.scaleMinusButton.text= -PostRegistrationCP.featurePointsButton.text=show -PostRegistrationCP.scalePlusButton.text= -PostRegistrationCP.jLabel4.text=Scale: -PostRegistrationCP.backfaceButton.text=hide backface -PostRegistrationCP.jLabel3.text=Rotation: -PostRegistrationCP.rotationXFTF.toolTipText= +RegistrationPanel.rightRotationXButton.text= +RegistrationPanel.leftRotationZButton.text= +RegistrationPanel.rightRotationYButton.text= +RegistrationPanel.jButton1.text=(Re)compute +RegistrationPanel.jLabel1.text=ICP: +RegistrationPanel.jCheckBox1.text=scale +RegistrationPanel.jFormattedTextField1.text=0,3 +RegistrationPanel.jLabel5.text=error +RegistrationPanel.jFormattedTextField2.text=10 +RegistrationPanel.jLabel6.text=max iters diff --git a/GUI/src/main/resources/cz/fidentis/analyst/toolbar/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/toolbar/Bundle.properties new file mode 100644 index 0000000000000000000000000000000000000000..41b6952bd0b6c1c0879cd4965227aa92e97ba4ef --- /dev/null +++ b/GUI/src/main/resources/cz/fidentis/analyst/toolbar/Bundle.properties @@ -0,0 +1,14 @@ +RenderingToolBar.smooth.text=smooth rendering +RenderingToolBar.wireframe.text=wireframe rendering +RenderingToolBar.pointcloud.text=point cloud rendering +RenderingToolBar.background.text=background +RenderingToolBar.reflections.text=reflections +RenderingToolBar.renderingmode.text=rendering mode +SingleFaceToolBar.symmetry.text=symmetry plane +SingleFaceToolBar.curvature.text=curvature +FaceToFaceToolBar.distance.text=distance +FaceToFaceToolBar.registration.text=registration +RenderingToolBar.primaryface.text=show/hide the primary face +RenderingToolBar.secondaryfaces.text=show/hide secondary faces +RenderingToolBar.featurepoints.text=feature points + diff --git a/GUI/src/main/resources/distance-icon.png b/GUI/src/main/resources/distance-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc71045c12faeb681107500bcc3cd555eb04ec6 Binary files /dev/null and b/GUI/src/main/resources/distance-icon.png differ diff --git a/GUI/src/main/resources/distance28x28.png b/GUI/src/main/resources/distance28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..042373ad24be72aae7b881d22a0f686fb16af7dc Binary files /dev/null and b/GUI/src/main/resources/distance28x28.png differ diff --git a/GUI/src/main/resources/fps.png b/GUI/src/main/resources/fps.png new file mode 100644 index 0000000000000000000000000000000000000000..eb7be7593d038a4c88b2eed57cfc15b92198815c Binary files /dev/null and b/GUI/src/main/resources/fps.png differ diff --git a/GUI/src/main/resources/fps28x28.png b/GUI/src/main/resources/fps28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..a75503f5c8dda6a0f70067ff6c01ae4bb5eec0c1 Binary files /dev/null and b/GUI/src/main/resources/fps28x28.png differ diff --git a/GUI/src/main/resources/headPlack.png b/GUI/src/main/resources/headPlack.png new file mode 100644 index 0000000000000000000000000000000000000000..d06dea15922db88624842e3b365707bedcd928eb Binary files /dev/null and b/GUI/src/main/resources/headPlack.png differ diff --git a/GUI/src/main/resources/points-tri28x28.png b/GUI/src/main/resources/points-tri28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..864d9be5c1f96e0161c5f8d6d729be11cf1c32bb Binary files /dev/null and b/GUI/src/main/resources/points-tri28x28.png differ diff --git a/GUI/src/main/resources/primaryFace.png b/GUI/src/main/resources/primaryFace.png new file mode 100644 index 0000000000000000000000000000000000000000..64224bedec17457f52992e3a395ef15dac50c267 Binary files /dev/null and b/GUI/src/main/resources/primaryFace.png differ diff --git a/GUI/src/main/resources/primaryFace28x28.png b/GUI/src/main/resources/primaryFace28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..f94e94b341ac3e910eb16040e5ed2c4de289a6ec Binary files /dev/null and b/GUI/src/main/resources/primaryFace28x28.png differ diff --git a/GUI/src/main/resources/reflections28x28.png b/GUI/src/main/resources/reflections28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9df1dbe596c358b6573df564ac39e164fefc28 Binary files /dev/null and b/GUI/src/main/resources/reflections28x28.png differ diff --git a/GUI/src/main/resources/reflections64x64.png b/GUI/src/main/resources/reflections64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..12911616ab35713fabe816897e54f4d89c9b241c Binary files /dev/null and b/GUI/src/main/resources/reflections64x64.png differ diff --git a/GUI/src/main/resources/registration.png b/GUI/src/main/resources/registration.png new file mode 100644 index 0000000000000000000000000000000000000000..61649fe0169af68ddba3862c00b3ccfc143af908 Binary files /dev/null and b/GUI/src/main/resources/registration.png differ diff --git a/GUI/src/main/resources/registration28x28.png b/GUI/src/main/resources/registration28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8ac9b98f06318849ef45a598ad3fcf71f0f01e Binary files /dev/null and b/GUI/src/main/resources/registration28x28.png differ diff --git a/GUI/src/main/resources/secondaryFace.png b/GUI/src/main/resources/secondaryFace.png new file mode 100644 index 0000000000000000000000000000000000000000..1708d775fc9c4feaf85e12635f6406919fa3a58e Binary files /dev/null and b/GUI/src/main/resources/secondaryFace.png differ diff --git a/GUI/src/main/resources/secondaryFace28x28.png b/GUI/src/main/resources/secondaryFace28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..f55e763aa20b61ce58714e7d0f0eba16c640a691 Binary files /dev/null and b/GUI/src/main/resources/secondaryFace28x28.png differ diff --git a/GUI/src/main/resources/smooth-tri28x28.png b/GUI/src/main/resources/smooth-tri28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..e6629fb424ebecbfd4cf6125a3e3e75a065e90f6 Binary files /dev/null and b/GUI/src/main/resources/smooth-tri28x28.png differ diff --git a/GUI/src/main/resources/symmetry28x28.png b/GUI/src/main/resources/symmetry28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..cb96688e587ede5fb396295721af966f88b82b27 Binary files /dev/null and b/GUI/src/main/resources/symmetry28x28.png differ diff --git a/GUI/src/main/resources/wireframe-tri28x28.png b/GUI/src/main/resources/wireframe-tri28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..2340dc47e70bb9a7999416c32853ca02fca89dc2 Binary files /dev/null and b/GUI/src/main/resources/wireframe-tri28x28.png differ diff --git a/GUI/src/main/resources/wireframe28x28.png b/GUI/src/main/resources/wireframe28x28.png new file mode 100644 index 0000000000000000000000000000000000000000..de9bca364cf46fcd25e7fdee88579bfda5973ddd Binary files /dev/null and b/GUI/src/main/resources/wireframe28x28.png differ diff --git a/GUI/src/main/resources/wireframe32x32.png b/GUI/src/main/resources/wireframe32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..de8952563fcea42ad69e55be37ac3343115311bc Binary files /dev/null and b/GUI/src/main/resources/wireframe32x32.png differ diff --git a/GUI/src/main/resources/wireframe36x36.png b/GUI/src/main/resources/wireframe36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..b459423fa3131a18f2e044397cfee107e4b5833a Binary files /dev/null and b/GUI/src/main/resources/wireframe36x36.png differ diff --git a/GUI/src/main/resources/wireframe46x46.png b/GUI/src/main/resources/wireframe46x46.png new file mode 100644 index 0000000000000000000000000000000000000000..86f9343d4d157b984dde3a4b586680d67512b7a7 Binary files /dev/null and b/GUI/src/main/resources/wireframe46x46.png differ