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