From efe141b74d98662b3395fb563a3ef23f00196387 Mon Sep 17 00:00:00 2001 From: Matej Lukes <456316@mail.muni.cz> Date: Tue, 8 Oct 2019 21:58:17 +0200 Subject: [PATCH] Mesh core implemented --- MeshModel/MeshModel.iml | 16 +++++++ MeshModel/pom.xml | 5 +++ .../analyst/mesh/core/MeshComponent.java | 24 ++++++++++ .../analyst/mesh/core/MeshComposite.java | 23 ++++++++++ .../fidentis/analyst/mesh/core/MeshEdge.java | 25 +++++++++++ .../fidentis/analyst/mesh/core/MeshFace.java | 11 +++++ .../fidentis/analyst/mesh/core/MeshFacet.java | 35 +++++++++++++++ .../fidentis/analyst/mesh/core/MeshLeaf.java | 16 +++++++ .../fidentis/analyst/mesh/core/MeshModel.java | 23 ++++++++++ .../fidentis/analyst/mesh/core/MeshPoint.java | 44 +++++++++++++++++++ 10 files changed, 222 insertions(+) create mode 100644 MeshModel/MeshModel.iml create mode 100644 MeshModel/src/cz/fidentis/analyst/mesh/core/MeshComponent.java create mode 100644 MeshModel/src/cz/fidentis/analyst/mesh/core/MeshComposite.java create mode 100644 MeshModel/src/cz/fidentis/analyst/mesh/core/MeshEdge.java create mode 100644 MeshModel/src/cz/fidentis/analyst/mesh/core/MeshFace.java create mode 100644 MeshModel/src/cz/fidentis/analyst/mesh/core/MeshFacet.java create mode 100644 MeshModel/src/cz/fidentis/analyst/mesh/core/MeshLeaf.java create mode 100644 MeshModel/src/cz/fidentis/analyst/mesh/core/MeshModel.java create mode 100644 MeshModel/src/cz/fidentis/analyst/mesh/core/MeshPoint.java diff --git a/MeshModel/MeshModel.iml b/MeshModel/MeshModel.iml new file mode 100644 index 00000000..48fef1a2 --- /dev/null +++ b/MeshModel/MeshModel.iml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <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> +</module> \ No newline at end of file diff --git a/MeshModel/pom.xml b/MeshModel/pom.xml index d33c523b..3b8f6136 100644 --- a/MeshModel/pom.xml +++ b/MeshModel/pom.xml @@ -33,6 +33,11 @@ <artifactId>org-netbeans-api-annotations-common</artifactId> <version>${netbeans.version}</version> </dependency> + <dependency> + <groupId>javax.vecmath</groupId> + <artifactId>vecmath</artifactId> + <version>1.5.2</version> + </dependency> </dependencies> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> diff --git a/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshComponent.java b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshComponent.java new file mode 100644 index 00000000..4085b5d3 --- /dev/null +++ b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshComponent.java @@ -0,0 +1,24 @@ +package cz.fidentis.analyst.mesh.core; + +import java.util.List; + +public abstract class MeshComponent { + private List<MeshComponent> parents; + + + public List<MeshComponent> getParents(){ + return parents; + } + + public abstract List<MeshComponent> getChildren(); + + public boolean addParent(MeshComponent newParent){ + if (parents.contains(newParent)) + return false; + parents.add(newParent); + return true; + } + + public abstract boolean addChild(MeshComponent newChild); + +} diff --git a/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshComposite.java b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshComposite.java new file mode 100644 index 00000000..45905516 --- /dev/null +++ b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshComposite.java @@ -0,0 +1,23 @@ +package cz.fidentis.analyst.mesh.core; + +import java.util.List; + +public class MeshComposite extends MeshComponent { + private List<MeshComponent> children; + + + @Override + public List<MeshComponent> getChildren() { + return children; + } + + @Override + public boolean addChild(MeshComponent newChild) { + if (children.contains(newChild)) + return false; + + children.add(newChild); + newChild.addParent(this); + return true; + } +} diff --git a/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshEdge.java b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshEdge.java new file mode 100644 index 00000000..ca33096e --- /dev/null +++ b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshEdge.java @@ -0,0 +1,25 @@ +package cz.fidentis.analyst.mesh.core; + +public class MeshEdge extends MeshComposite { + @Override + public boolean addChild(MeshComponent newChild) { + if (!(newChild instanceof MeshPoint)) + return false; + + return super.addChild(newChild); + } + + @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; + } +} diff --git a/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshFace.java b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshFace.java new file mode 100644 index 00000000..fbe10474 --- /dev/null +++ b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshFace.java @@ -0,0 +1,11 @@ +package cz.fidentis.analyst.mesh.core; + +public class MeshFace extends MeshComposite { + @Override + public boolean addChild(MeshComponent newChild) { + if (!(newChild instanceof MeshEdge)) + return false; + + return super.addChild(newChild); + } +} diff --git a/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshFacet.java b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshFacet.java new file mode 100644 index 00000000..4cd6c238 --- /dev/null +++ b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshFacet.java @@ -0,0 +1,35 @@ +package cz.fidentis.analyst.mesh.core; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class MeshFacet extends MeshComposite { + + Map<MeshPoint, MeshPoint> pointPool = new HashMap<>(); + Map<MeshEdge, MeshEdge> edgePool = new HashMap<>(); + + public MeshPoint getPoint(MeshPoint point) { + MeshPoint result = pointPool.get(point); + if (result == null) { + pointPool.put(point, point); + } + return result; + } + + public MeshEdge getEdge(MeshEdge edge) { + MeshEdge result = edgePool.get(edge); + if (result == null) { + edgePool.put(edge, edge); + } + return result; + } + + @Override + public boolean addChild(MeshComponent newChild) { + if (!(newChild instanceof MeshFace)) + return false; + + return super.addChild(newChild); + } +} diff --git a/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshLeaf.java b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshLeaf.java new file mode 100644 index 00000000..d080acb9 --- /dev/null +++ b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshLeaf.java @@ -0,0 +1,16 @@ +package cz.fidentis.analyst.mesh.core; + +import java.util.ArrayList; +import java.util.List; + +public class MeshLeaf extends MeshComponent { + @Override + public List<MeshComponent> getChildren() { + return null; + } + + @Override + public boolean addChild(MeshComponent newChild) { + return false; + } +} diff --git a/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshModel.java b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshModel.java new file mode 100644 index 00000000..4dcb9dbd --- /dev/null +++ b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshModel.java @@ -0,0 +1,23 @@ +package cz.fidentis.analyst.mesh.core; + +import java.util.List; + +public class MeshModel extends MeshComposite { + @Override + public List<MeshComponent> getParents() { + return null; + } + + @Override + public boolean addParent(MeshComponent newParent) { + return false; + } + + @Override + public boolean addChild(MeshComponent newChild) { + if (!(newChild instanceof MeshFacet)) + return false; + + return super.addChild(newChild); + } +} diff --git a/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshPoint.java b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshPoint.java new file mode 100644 index 00000000..41d62ea3 --- /dev/null +++ b/MeshModel/src/cz/fidentis/analyst/mesh/core/MeshPoint.java @@ -0,0 +1,44 @@ +package cz.fidentis.analyst.mesh.core; + +import javax.vecmath.Vector3d; +import java.util.List; + +public class MeshPoint extends MeshLeaf { + private Vector3d position, normal, texCoord; + + public Vector3d getNormal() { + return normal; + } + + public Vector3d getPosition() { + return position; + } + + public Vector3d getTexCoord() { + return texCoord; + } + + public void setNormal(Vector3d normal) { + this.normal = normal; + } + + public void setPosition(Vector3d position) { + this.position = position; + position.normalize(); + } + + public void setTexCoord(Vector3d texCoord) { + this.texCoord = texCoord; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof MeshPoint)) + return false; + + MeshPoint meshPointObj = (MeshPoint) obj; + return this.position == meshPointObj.position + && this.normal == meshPointObj.normal + && this.texCoord == meshPointObj.texCoord; + } +} -- GitLab