From e6145a10e6176ef43e4e9e02743e09a87ead9b4d Mon Sep 17 00:00:00 2001
From: Matej Lukes <456316@mail.muni.cz>
Date: Wed, 4 Dec 2019 20:29:42 +0100
Subject: [PATCH] corner table 0.1 created

---
 MeshModel/MeshModel.iml                       |  3 +
 MeshModel/pom.xml                             |  5 ++
 .../analyst/mesh/core/CornerTable.java        | 40 +++++++++++++
 .../analyst/mesh/core/MeshComponent.java      | 42 -------------
 .../analyst/mesh/core/MeshComposite.java      | 34 -----------
 .../fidentis/analyst/mesh/core/MeshEdge.java  | 56 -----------------
 .../fidentis/analyst/mesh/core/MeshFace.java  | 20 -------
 .../fidentis/analyst/mesh/core/MeshFacet.java | 60 +++----------------
 .../fidentis/analyst/mesh/core/MeshLeaf.java  | 29 ---------
 .../fidentis/analyst/mesh/core/MeshModel.java | 34 +++--------
 .../fidentis/analyst/mesh/core/MeshPoint.java |  2 +-
 11 files changed, 65 insertions(+), 260 deletions(-)
 create mode 100644 MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/CornerTable.java
 delete mode 100644 MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComponent.java
 delete mode 100644 MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComposite.java
 delete mode 100644 MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshEdge.java
 delete mode 100644 MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFace.java
 delete mode 100644 MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshLeaf.java

diff --git a/MeshModel/MeshModel.iml b/MeshModel/MeshModel.iml
index 6476cacf..80247d69 100644
--- a/MeshModel/MeshModel.iml
+++ b/MeshModel/MeshModel.iml
@@ -10,6 +10,9 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: java3d:j3d-core-utils:1.3.1" level="project" />
+    <orderEntry type="library" name="Maven: java3d:vecmath:1.3.1" level="project" />
+    <orderEntry type="library" name="Maven: java3d:j3d-core:1.3.1" level="project" />
     <orderEntry type="library" name="Maven: org.netbeans.api:org-netbeans-api-annotations-common:RELEASE82" level="project" />
     <orderEntry type="library" name="Maven: javax.vecmath:vecmath:1.5.2" level="project" />
   </component>
diff --git a/MeshModel/pom.xml b/MeshModel/pom.xml
index 3b8f6136..b878cf37 100644
--- a/MeshModel/pom.xml
+++ b/MeshModel/pom.xml
@@ -28,6 +28,11 @@
         </plugins>
     </build>
     <dependencies>
+        <dependency>
+            <groupId>java3d</groupId>
+            <artifactId>j3d-core-utils</artifactId>
+            <version>1.3.1</version>
+        </dependency>
         <dependency>
             <groupId>org.netbeans.api</groupId>
             <artifactId>org-netbeans-api-annotations-common</artifactId>
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/CornerTable.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/CornerTable.java
new file mode 100644
index 00000000..16b3fecf
--- /dev/null
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/CornerTable.java
@@ -0,0 +1,40 @@
+package cz.fidentis.analyst.mesh.core;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CornerTable {
+
+    private List<Integer> vertexIndexes = new ArrayList<>();
+    private List<Integer> oppositeVertexIndexes = new ArrayList<>();
+
+    public int getTriangleStartingVertexIndex(int c) {
+        return c / 3;
+    }
+
+    public int getIndexOfOppositeVertex(int c) {
+        return oppositeVertexIndexes.get(c);
+    } // opposite
+
+    public int getIndexOfNextVertexInTriangle(int c) {
+        if ((c % 3) == 2)
+            return c - 1;
+        return c + 1;
+    }// next in t(c)
+
+    public int getIndexOfPreviousVertexInTriangle(int c) {
+        return getIndexOfNextVertexInTriangle(getIndexOfNextVertexInTriangle(c));
+    } // previous corner
+
+    public int getIndexOfTipVertexOnLeft(int c) {
+        return getIndexOfOppositeVertex(getIndexOfPreviousVertexInTriangle(c));
+    }  // tip on left
+
+    public int getIndexOfTipVertexOnRight(int c) {
+        return getIndexOfOppositeVertex(getIndexOfNextVertexInTriangle(c));
+    } // tip on right
+
+    public int s(int c) {
+        return getIndexOfNextVertexInTriangle(getIndexOfTipVertexOnLeft(c));
+    } // next around v(c)
+}
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComponent.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComponent.java
deleted file mode 100644
index 475bb816..00000000
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComponent.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package cz.fidentis.analyst.mesh.core;
-
-import java.util.List;
-
-/**
- * Abstract universal node, implements management of parent elements
- *
- * @author Matej Lukes
- */
-public abstract class MeshComponent {
-    private List<MeshComponent> parents;
-
-    /**
-     * @return List of parent elements
-     */
-    public List<MeshComponent> getParents(){
-        return parents;
-    }
-
-    /**
-     * @return list of child elements
-     */
-    public abstract List<MeshComponent> getChildren();
-
-    /**
-     * @param newParent new parent element
-     * @return true if newParent was successfully added, false otherwise
-     */
-    public boolean addParent(MeshComponent newParent){
-        if (newParent == null || parents.contains(newParent))
-            return false;
-        parents.add(newParent);
-        return true;
-    }
-
-    /**
-     * @param newChild new child element
-     * @return true if child was successfully added, false otherwise
-     */
-    public abstract boolean addChild(MeshComponent newChild);
-
-}
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComposite.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComposite.java
deleted file mode 100644
index 0c36e473..00000000
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComposite.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cz.fidentis.analyst.mesh.core;
-
-import java.util.List;
-
-/**
- * Inner node of the Hierarchy, implements management of child elements
- *
- * @author Matej Lukes
- */
-public class MeshComposite extends MeshComponent {
-    private List<MeshComponent> children;
-
-    /**
-     * @return list of child elements
-     */
-    @Override
-    public List<MeshComponent> getChildren() {
-        return children;
-    }
-
-    /**
-     * @param newChild new child element
-     * @return true if child was successfully added, false otherwise
-     */
-    @Override
-    public boolean addChild(MeshComponent newChild) {
-        if (newChild == null || children.contains(newChild))
-            return false;
-
-        children.add(newChild);
-        newChild.addParent(this);
-        return true;
-    }
-}
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshEdge.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshEdge.java
deleted file mode 100644
index d44572b9..00000000
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshEdge.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package cz.fidentis.analyst.mesh.core;
-
-/**
- * MeshEdge is an edge shared between two MeshFaces.
- *
- * @author Matej Lukes
- */
-public class MeshEdge extends MeshComposite {
-
-    public MeshEdge(MeshPoint point1, MeshPoint point2){
-        super();
-        if (point1 == null || point2 == null)
-            throw new NullPointerException("point1 and point2 cannot be null");
-        super.addChild(point1);
-        super.addChild(point2);
-    }
-
-    /**
-     * MeshEdge is immutable, all child elements are set in constructor
-     *
-     * @param newChild new child element
-     * @return false
-     */
-    @Override
-    public boolean addChild(MeshComponent newChild) {
-        return false;
-    }
-
-    /**
-     * @param obj compared object
-     * @return true if child elements are equal, false otherwise
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (!(obj instanceof MeshEdge))
-            return false;
-
-        for (MeshComponent component:
-                this.getChildren()) {
-            if(!((MeshEdge) obj).getChildren().contains(component))
-                return false;
-        }
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = 0;
-        for (MeshComponent point :
-                getChildren()) {
-            hash += point.hashCode();
-        }
-        return hash;
-    }
-}
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFace.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFace.java
deleted file mode 100644
index dc7a6dff..00000000
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFace.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cz.fidentis.analyst.mesh.core;
-
-/**
- * MeshFace is a surface triangle or planar polygon
- *
- * @author Matej Lukes
- */
-public class MeshFace extends MeshComposite {
-    /**
-     * @param newChild new child element must be MeshEdge
-     * @return true if newChild was successfully added, false otherwise
-     */
-    @Override
-    public boolean addChild(MeshComponent newChild) {
-        if (!(newChild instanceof MeshEdge))
-            return false;
-
-        return super.addChild(newChild);
-    }
-}
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java
index 0578c722..dd21c1fc 100644
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java
@@ -1,61 +1,19 @@
 package cz.fidentis.analyst.mesh.core;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * MashFacet is a group of MeshFaces
  *
  * @author Matej Lukes
  */
-public class MeshFacet extends MeshComposite {
+public class MeshFacet {
+    private List<MeshPoint> vertexes = new ArrayList<>();
+    private CornerTable cornerTable = new CornerTable();
 
-    private Map<MeshPoint, MeshPoint> pointPool = new HashMap<>();
-     private Map<MeshEdge, MeshEdge> edgePool = new HashMap<>();
-
-    /**
-     * adds point to pointPool if pointPool does not contain it
-     * returns point if pointPool contains it
-     * @param point point
-     * @return point from pointPool if it is in pointPool, null otherwise
-     */
-    public MeshPoint getPoint(MeshPoint point) {
-        if (point == null)
-            return null;
-
-        MeshPoint result = pointPool.get(point);
-        if (result == null) {
-            pointPool.put(point, point);
-        }
-        return result;
-    }
-
-    /**
-     * adds edge to edgePool if edgePool does not contain it
-     * returns edge if edgePool contains it
-     * @param edge edge
-     * @return edge from edgePool if it is in edgePool, null otherwise
-     */
-    public MeshEdge getEdge(MeshEdge edge) {
-        if (edge == null)
-            return null;
-
-        MeshEdge result = edgePool.get(edge);
-        if (result == null) {
-            edgePool.put(edge, edge);
-        }
-        return result;
-    }
-
-    /**
-     * @param newChild new child element, must be MeshFace
-     * @return true if newChild was successfully added, false otherwise
-     */
-    @Override
-    public boolean addChild(MeshComponent newChild) {
-        if (!(newChild instanceof MeshFace))
-            return false;
-
-        return super.addChild(newChild);
-    }
+    public MeshPoint GetVertex(int c) {
+        return vertexes.get(c);
+    } // vertex of c
 }
+
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshLeaf.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshLeaf.java
deleted file mode 100644
index 19c6e0a4..00000000
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshLeaf.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package cz.fidentis.analyst.mesh.core;
-
-import java.util.List;
-
-/**
- * MeshLeaf is a  leaf node of the hierarchy
- *
- * @author Matej Lukes
- */
-public class MeshLeaf extends MeshComponent {
-    /**
-     * MeshLeaf does not have child elements
-     * @return null
-     */
-    @Override
-    public List<MeshComponent> getChildren() {
-        return null;
-    }
-
-    /**
-     * MeshLeaf cannot have any child elements
-     * @param newChild new child element
-     * @return false
-     */
-    @Override
-    public boolean addChild(MeshComponent newChild) {
-        return false;
-    }
-}
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java
index dee66dec..d4220ea9 100644
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java
@@ -1,39 +1,19 @@
 package cz.fidentis.analyst.mesh.core;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
  * MeshModel is a root node of the hierarchy
  */
-public class MeshModel extends MeshComposite {
-    /**
-     * MeshModel is root element, it does not have parent elements
-     * @return null
-     */
-    @Override
-    public List<MeshComponent> getParents() {
-        return null;
-    }
+public class MeshModel {
+    private List<MeshFacet> facets = new ArrayList<>();
 
-    /**
-     * MeshModel is root element, it does not have parent elements
-     * @param newParent new parent element
-     * @return false
-     */
-    @Override
-    public boolean addParent(MeshComponent newParent) {
-        return false;
+    public List<MeshFacet> getFacets() {
+        return facets;
     }
 
-    /**
-     * @param newChild new child element, must be MeshFacet
-     * @return true if newChild was successfully added, false otherwise
-     */
-    @Override
-    public boolean addChild(MeshComponent newChild) {
-        if (!(newChild instanceof MeshFacet))
-            return false;
-
-        return super.addChild(newChild);
+    public void addFacet(MeshFacet facet) {
+        facets.add(facet);
     }
 }
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java
index dc87a21b..5b041240 100644
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java
@@ -7,7 +7,7 @@ import javax.vecmath.Vector3d;
  *
  * @author Matej Lukes
  */
-public class MeshPoint extends MeshLeaf {
+public class MeshPoint {
     private final Vector3d position, normal, texCoord;
 
     public MeshPoint(Vector3d position, Vector3d normal , Vector3d texCoord) {
-- 
GitLab