From 5e6e8128ff67a6b896ac1c1e3add78dc5f877f0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Kov=C3=A1r?= <matko@192.168.1.105> Date: Wed, 14 Apr 2021 16:37:05 +0200 Subject: [PATCH] added methods for loading primary face from file --- .../fidentis/analyst/gui/ProjectTopComp.form | 59 +++++++++- .../fidentis/analyst/gui/ProjectTopComp.java | 104 +++++++++++++++++- 2 files changed, 158 insertions(+), 5 deletions(-) diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form b/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form index e213ebed..3d1f550a 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form +++ b/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form @@ -67,10 +67,10 @@ <DimensionLayout dim="1"> <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" alignment="0" attributes="0"> - <Component id="jPanel4" min="-2" pref="181" max="-2" attributes="0"/> + <Component id="jPanel4" min="-2" pref="180" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/> <Component id="jPanel5" min="-2" max="-2" attributes="0"/> - <EmptySpace pref="579" max="32767" attributes="0"/> + <EmptySpace pref="580" max="32767" attributes="0"/> </Group> </Group> </DimensionLayout> @@ -88,7 +88,57 @@ </Property> </Properties> - <Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/> + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout"> + <Property name="useNullLayout" type="boolean" value="false"/> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="jPanel2"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="57" green="57" 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="30" y="30" width="120" height="120"/> + </Constraint> + </Constraints> + + <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="jLabel1" pref="100" 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="-2" attributes="0"/> + <Component id="jLabel1" pref="98" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="18" style="0"/> + </Property> + <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="cc" green="cc" red="cc" type="rgb"/> + </Property> + <Property name="horizontalAlignment" type="int" value="0"/> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> </Container> <Container class="javax.swing.JPanel" name="jPanel5"> <Properties> @@ -113,6 +163,9 @@ <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.addButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> </Property> </Properties> + <Events> + <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="addButton1MouseClicked"/> + </Events> <Constraints> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription"> <GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="20" ipadY="0" insetsTop="16" insetsLeft="16" insetsBottom="13" insetsRight="4" anchor="13" 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/gui/ProjectTopComp.java index 0d5645ee..2b7073b1 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.java +++ b/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.java @@ -11,6 +11,14 @@ import org.openide.awt.ActionReference; import org.openide.windows.TopComponent; import org.openide.util.NbBundle.Messages; import cz.fidentis.analyst.Project; +import cz.fidentis.analyst.face.HumanFace; +import cz.fidentis.analyst.mesh.io.ModelFileFilter; +import java.awt.Dimension; +import java.io.File; +import java.io.IOException; +import javax.swing.ImageIcon; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; /** * The main panel enabling analysts to select the primary and secondary faces, @@ -65,6 +73,8 @@ public final class ProjectTopComp extends TopComponent { jPanel1 = new javax.swing.JPanel(); jPanel4 = new javax.swing.JPanel(); + jPanel2 = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); jPanel5 = new javax.swing.JPanel(); addButton1 = new javax.swing.JButton(); removeButton1 = new javax.swing.JButton(); @@ -81,6 +91,32 @@ public final class ProjectTopComp extends TopComponent { jPanel4.setBackground(new java.awt.Color(2, 138, 129)); jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + jPanel4.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); + + jPanel2.setBackground(new java.awt.Color(0, 87, 87)); + + jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N + jLabel1.setForeground(new java.awt.Color(204, 204, 204)); + jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE) + .addContainerGap()) + ); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 98, Short.MAX_VALUE) + .addContainerGap()) + ); + + jPanel4.add(jPanel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 30, 120, 120)); jPanel5.setBackground(new java.awt.Color(2, 138, 129)); jPanel5.setBorder(javax.swing.BorderFactory.createEtchedBorder()); @@ -88,6 +124,11 @@ public final class ProjectTopComp extends TopComponent { addButton1.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(addButton1, org.openide.util.NbBundle.getMessage(ProjectTopComp.class, "ProjectTopComp.addButton1.text")); // NOI18N + addButton1.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + addButton1MouseClicked(evt); + } + }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; @@ -163,22 +204,29 @@ public final class ProjectTopComp extends TopComponent { jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, 181, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(579, Short.MAX_VALUE)) + .addContainerGap(580, Short.MAX_VALUE)) ); add(jPanel1, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents + + private void addButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_addButton1MouseClicked + loadModel(); + }//GEN-LAST:event_addButton1MouseClicked + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addButton1; private javax.swing.JButton analyzeButton1; private javax.swing.JButton collapseButton1; private javax.swing.JButton deselectAllButton1; private javax.swing.JButton inflateButton1; + private javax.swing.JLabel jLabel1; private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JButton removeButton1; @@ -205,4 +253,56 @@ public final class ProjectTopComp extends TopComponent { String version = p.getProperty("version"); // TODO read your settings according to their version } + + /** + * Loads model selected in file chooser by user + */ + public void loadModel () { + String[] extensions = new String[2]; + extensions[0] = "obj"; + extensions[1] = "OBJ"; + + //enables to shows just .obj files in file chooser + ModelFileFilter filter = new ModelFileFilter(extensions, "*.obj"); + JFileChooser jFileChooser1 = new JFileChooser(); + jFileChooser1.setPreferredSize(new Dimension (800,500)); + + jFileChooser1.addChoosableFileFilter(filter); + + //file chooser will appear on top of projectTopComp + jFileChooser1.showOpenDialog(this); + jFileChooser1.setDialogTitle("Import obj file"); + + //setPrefferedModelPath(jFileChooser1.getCurrentDirectory().toString()); + + File[] fileArray = new File[1]; + //saves selected file by user as first element in array + fileArray[0] = jFileChooser1.getSelectedFile(); + + if (fileArray.length <= 0) { + System.out.print("No file chosen."); + } else { + this.addModel(fileArray[0]); + } + } + + /** + * Loads the model in .obj format from file and adds this model to project + * as primary face. If file is not correct, shows dialog with message. + * + * @param file File from which model will be read + */ + private void addModel (final File file) { + try { + HumanFace loadedFace; + loadedFace = new HumanFace(new File (file.getPath())); + this.project.setPrimaryFace(loadedFace); + jLabel1.setText("Loaded"); + } catch (IOException 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"); + } + } } -- GitLab