From 60e0cbbce738cd7c2b95c3339dd55b2153c4b9ab Mon Sep 17 00:00:00 2001 From: Richard Pajersky <xpajersk@fi.muni.cz> Date: Wed, 5 May 2021 10:14:38 +0200 Subject: [PATCH] Added translation, rotation and scale rendering --- .../gui/RegistrationCPEventListener.java | 12 +++ .../analyst/gui/scene/DrawableMesh.java | 76 +++++++++++++++++++ .../analyst/gui/scene/SceneRenderer.java | 10 +++ .../analyst/gui/tab/PostRegistrationCP.form | 9 +++ .../analyst/gui/tab/PostRegistrationCP.java | 27 +++++++ 5 files changed, 134 insertions(+) diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationCPEventListener.java b/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationCPEventListener.java index c23d6018..ca700584 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationCPEventListener.java +++ b/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationCPEventListener.java @@ -107,4 +107,16 @@ public class RegistrationCPEventListener { public Color getDefaultSecondaryColor() { return defaultSecondaryColor; } + + public void resetTranslation() { + secondaryFace.resetTranslation(); + } + + public void resetRotation() { + secondaryFace.resetRotation(); + } + + public void resetScale() { + secondaryFace.resetScale(); + } } 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 index 4b289560..9faa2a24 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/DrawableMesh.java +++ b/GUI/src/main/java/cz/fidentis/analyst/gui/scene/DrawableMesh.java @@ -4,6 +4,7 @@ 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.Vector3f; /** * A drawable triangular mesh, i.e., a mesh model with drawing information like @@ -21,6 +22,9 @@ public class DrawableMesh { // TO DO - R. Pajersky: add transformation attributes and methods private Color color = new Color(255, 255, 255); private float transparency = 1f; + private Vector3f translation = new Vector3f(0, 0, 0); + private Vector3f rotation = new Vector3f(0, 0, 0); + private Vector3f scale = new Vector3f(0, 0, 0); /** * Constructor. @@ -81,4 +85,76 @@ public class DrawableMesh { public void setTransparency(float transparency) { this.transparency = transparency; } + + public Vector3f getTranslation() { + return translation; + } + + public void setTranslation(Vector3f translation) { + this.translation = translation; + } + + public Vector3f getRotation() { + return rotation; + } + + public void setRotation(Vector3f rotation) { + this.rotation = rotation; + } + + public Vector3f getScale() { + return scale; + } + + public void setScale(Vector3f scale) { + this.scale = scale; + } + + /*public void increaseXTranslation(float value) { + this.translation.x = this.translation.x + value; + } + + public void increaseYTranslation(float value) { + this.translation.y = this.translation.y + value; + } + + public void increaseZTranslation(float value) { + this.translation.z = this.translation.z + value; + } + + public void increaseXRotation(float value) { + this.rotation.x = this.rotation.x + value; + } + + public void increaseYRotation(float value) { + this.rotation.y = this.rotation.y + value; + } + + public void increaseZRotation(float value) { + this.rotation.z = this.rotation.z + value; + } + + public void increaseXScale(float value) { + this.scale.x = this.scale.x + value; + } + + public void increaseYScale(float value) { + this.scale.y = this.scale.y + value; + } + + public void increaseZScale(float value) { + this.scale.z = this.scale.z + value; + }*/ + + public void resetTranslation() { + this.translation = new Vector3f(0, 0, 0); + } + + public void resetRotation() { + this.rotation = new Vector3f(0, 0, 0); + } + + public void resetScale() { + this.scale = new Vector3f(0, 0, 0); + } } diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java b/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java index 93bdb55e..3e048886 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java +++ b/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java @@ -142,7 +142,17 @@ public class SceneRenderer { for (MeshFacet facet: obj.getFacets()) { // TO DO - R. Pajersky: add transformation (glPushMatrix, glRotate, ...) + // rotate + gl.glPushMatrix(); + gl.glRotatef(obj.getRotation().x, 1f, 0f, 0f); + gl.glRotatef(obj.getRotation().y, 0f, 1f, 0f); + gl.glRotatef(obj.getRotation().z, 0f, 0f, 1f); + // move + gl.glTranslatef(obj.getTranslation().x, obj.getTranslation().y, obj.getTranslation().z); + // scale + gl.glScalef(obj.getScale().x, obj.getScale().y, obj.getScale().z); renderFacet(facet); + gl.glPopMatrix(); } } gl.glFlush(); diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/PostRegistrationCP.form b/GUI/src/main/java/cz/fidentis/analyst/gui/tab/PostRegistrationCP.form index 954b7ab4..c6230ec4 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/PostRegistrationCP.form +++ b/GUI/src/main/java/cz/fidentis/analyst/gui/tab/PostRegistrationCP.form @@ -518,6 +518,9 @@ </Property> <Property name="opaque" type="boolean" value="false"/> </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="translationButtonActionPerformed"/> + </Events> </Component> <Component class="javax.swing.JButton" name="translationXButton"> <Properties> @@ -654,6 +657,9 @@ </Property> <Property name="opaque" type="boolean" value="false"/> </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="rotationButtonActionPerformed"/> + </Events> </Component> <Component class="javax.swing.JButton" name="scaleButton"> <Properties> @@ -672,6 +678,9 @@ </Property> <Property name="opaque" type="boolean" value="false"/> </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="scaleButtonActionPerformed"/> + </Events> </Component> <Component class="javax.swing.JButton" name="applyButton"> <Properties> diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/PostRegistrationCP.java b/GUI/src/main/java/cz/fidentis/analyst/gui/tab/PostRegistrationCP.java index 172509e7..5c45276b 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/PostRegistrationCP.java +++ b/GUI/src/main/java/cz/fidentis/analyst/gui/tab/PostRegistrationCP.java @@ -210,6 +210,11 @@ public class PostRegistrationCP extends javax.swing.JPanel { translationButton.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); translationButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); translationButton.setOpaque(false); + translationButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + translationButtonActionPerformed(evt); + } + }); org.openide.awt.Mnemonics.setLocalizedText(translationXButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translationXButton.text")); // NOI18N translationXButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translationXButton.toolTipText")); // NOI18N @@ -273,6 +278,11 @@ public class PostRegistrationCP extends javax.swing.JPanel { rotationButton.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); rotationButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); rotationButton.setOpaque(false); + rotationButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + rotationButtonActionPerformed(evt); + } + }); 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 @@ -280,6 +290,11 @@ public class PostRegistrationCP extends javax.swing.JPanel { scaleButton.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); scaleButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); scaleButton.setOpaque(false); + scaleButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + scaleButtonActionPerformed(evt); + } + }); org.openide.awt.Mnemonics.setLocalizedText(applyButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.applyButton.text")); // NOI18N applyButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); @@ -704,6 +719,18 @@ public class PostRegistrationCP extends javax.swing.JPanel { listener.setSideFacing(); }//GEN-LAST:event_profileButtonActionPerformed + private void translationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_translationButtonActionPerformed + listener.resetTranslation(); + }//GEN-LAST:event_translationButtonActionPerformed + + private void rotationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rotationButtonActionPerformed + listener.resetRotation(); + }//GEN-LAST:event_rotationButtonActionPerformed + + private void scaleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scaleButtonActionPerformed + listener.resetScale(); + }//GEN-LAST:event_scaleButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton applyButton; -- GitLab