Commit 853e25ab authored by Luna Riegel's avatar Luna Riegel
Browse files

Feat: Add support for LinearRing proxies

parent 5d77ba78
package de.hft.stuttgart.citydoctor2.database;
import de.hft.stuttgart.citydoctor2.datastructure.GmlId;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import org.apache.commons.lang3.NotImplementedException;
public class ProxyLoader {
private final CityObjectCache cache;
ProxyLoader(CityObjectCache cache) {
this.cache = cache;
}
public LinearRing load(GmlId id){
// return cache.get(id);
throw new NotImplementedException();
}
}
package de.hft.stuttgart.citydoctor2.datastructure;
import de.hft.stuttgart.citydoctor2.math.Ray;
import de.hft.stuttgart.citydoctor2.math.UnitVector3d;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import java.util.List;
public abstract class AbstractLinearRing extends GmlElement{
//TODO: Proxy this
public enum LinearRingType {
EXTERIOR, INTERIOR
}
/**
* Checks whether a point is inside this ring. A point on the edge does count as
* inside.
*
* @param v the point.
* @return true if the point is inside or on an edge, false if it is outside.
*/
public abstract boolean isPointInside(Vector3d v);
/**
* Calculates the normal vector of the ring. Method by Newell. If the Newell
* method would return a (0, 0, 0) vector a cross product is formed from the
* first 3 vertices. If there are no 3 vertices available (1, 0, 0) is returned.
*
* @return the normal as a normalized vector
*/
public abstract UnitVector3d calculateNormalNormalized();
/**
* Calculates the normal vector of the ring. Method by Newell. If the Newell
* method would return a (0, 0, 0) vector a cross product is formed from the
* first 3 vertices. If there are no 3 vertices available (1, 0, 0) is returned.
*
* @return the normal vector
*/
public abstract Vector3d calculateNormal();
public abstract double getArea();
public abstract void setParent(Polygon polygon);
public abstract Polygon getParent();
public abstract LinearRingType getType();
public abstract List<Vertex> getVertices();
public abstract void addVertex(Vertex v);
public abstract void addVertex(int i, Vertex v);
public abstract void setVertex(int i, Vertex v);
public abstract boolean isRingConnectedViaPoint(LinearRing other);
public abstract List<Ray> getEdgeRays();
public abstract boolean hasPointAsCorner(Vertex v);
public abstract void setType(LinearRing.LinearRingType type);
public abstract void addAllVertices(List<Vertex> extRing);
public abstract void prepareLowMemoryUsageMode();
}
......@@ -30,7 +30,7 @@ import java.util.List;
*
* @author Matthias Betz
*/
public class LinearRing extends GmlElement {
public class LinearRing extends AbstractLinearRing {
@Serial
private static final long serialVersionUID = -2488180830514940722L;
......@@ -40,9 +40,6 @@ public class LinearRing extends GmlElement {
private final List<Vertex> vertices = new ArrayList<>();
public enum LinearRingType {
EXTERIOR, INTERIOR
}
public LinearRing(LinearRingType type) {
this.type = type;
......
package de.hft.stuttgart.citydoctor2.datastructure;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.database.ProxyLoader;
import de.hft.stuttgart.citydoctor2.math.Ray;
import de.hft.stuttgart.citydoctor2.math.UnitVector3d;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import java.util.List;
import java.util.Map;
public class LinearRingProxy extends AbstractLinearRing {
private final ProxyLoader loader;
private GmlId referenceId;
LinearRingProxy(LinearRing ring, ProxyLoader loader){
referenceId = ring.getGmlId();
this.loader = loader;
}
@Override
public void setGmlId(GmlId id) {
loader.load(referenceId).setGmlId(id);
this.referenceId = id;
}
@Override
public void setValidated(boolean validated) {
super.setValidated(validated);
loader.load(referenceId).setValidated(validated);
}
@Override
public void accept(CheckableVisitor c) {
loader.load(referenceId).accept(c);
}
@Override
public void prepareForChecking() {
loader.load(referenceId).prepareForChecking();
}
@Override
public void clearMetaInformation() {
loader.load(referenceId).clearMetaInformation();
}
@Override
public boolean containsError(CheckId checkIdentifier) {
return loader.load(referenceId).containsError(checkIdentifier);
}
@Override
public boolean hasError(CheckId checkIdentifier) {
return loader.load(referenceId).hasError(checkIdentifier);
}
@Override
public CheckResult getCheckResult(CheckId id) {
return loader.load(referenceId).getCheckResult(id);
}
@Override
public CheckResult getCheckResult(Check c) {
return loader.load(referenceId).getCheckResult(c);
}
@Override
public Map<CheckId, CheckResult> getAllCheckResults() {
return loader.load(referenceId).getAllCheckResults();
}
@Override
public boolean hasDependencyNotMetError(CheckId id) {
return loader.load(referenceId).hasDependencyNotMetError(id);
}
@Override
public boolean hasAnyErrorWithoutDependencies() {
return loader.load(referenceId).hasAnyErrorWithoutDependencies();
}
@Override
public boolean hasCheckResults() {
return loader.load(referenceId).hasCheckResults();
}
@Override
public void addCheckResult(CheckResult cr) {
loader.load(referenceId).addCheckResult(cr);
}
@Override
public void clearCheckResults() {
loader.load(referenceId).clearCheckResults();
}
@Override
public boolean hasAnyError() {
return loader.load(referenceId).hasAnyError();
}
@Override
public void collectContainedErrors(List<CheckError> errors) {
loader.load(referenceId).collectContainedErrors(errors);
}
@Override
public void collectErrors(List<CheckError> errors) {
loader.load(referenceId).collectErrors(errors);
}
@Override
public Class<? extends Checkable> getCheckClass() {
return loader.load(referenceId).getCheckClass();
}
@Override
public boolean isPointInside(Vector3d v) {
return loader.load(referenceId).isPointInside(v);
}
@Override
public UnitVector3d calculateNormalNormalized() {
return loader.load(referenceId).calculateNormalNormalized();
}
@Override
public Vector3d calculateNormal() {
return loader.load(referenceId).calculateNormal();
}
@Override
public double getArea() {
return loader.load(referenceId).getArea();
}
@Override
public void setParent(Polygon polygon) {
loader.load(referenceId).setParent(polygon);
}
@Override
public Polygon getParent() {
return loader.load(referenceId).getParent();
}
@Override
public LinearRingType getType() {
return loader.load(referenceId).getType();
}
@Override
public List<Vertex> getVertices() {
return loader.load(referenceId).getVertices();
}
@Override
public void addVertex(Vertex v) {
loader.load(referenceId).addVertex(v);
}
@Override
public void addVertex(int i, Vertex v) {
loader.load(referenceId).addVertex(i, v);
}
@Override
public void setVertex(int i, Vertex v) {
loader.load(referenceId).setVertex(i, v);
}
@Override
public boolean isRingConnectedViaPoint(LinearRing other) {
return loader.load(referenceId).isRingConnectedViaPoint(other);
}
@Override
public List<Ray> getEdgeRays() {
return loader.load(referenceId).getEdgeRays();
}
@Override
public boolean hasPointAsCorner(Vertex v) {
return loader.load(referenceId).hasPointAsCorner(v);
}
@Override
public void setType(LinearRingType type) {
loader.load(referenceId).setType(type);
}
@Override
public void addAllVertices(List<Vertex> extRing) {
loader.load(referenceId).addAllVertices(extRing);
}
@Override
public void prepareLowMemoryUsageMode() {
loader.load(referenceId).prepareLowMemoryUsageMode();
}
}
......@@ -20,7 +20,7 @@ package de.hft.stuttgart.citydoctor2.mapper.citygml3;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.*;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractLinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.Localization;
import org.apache.logging.log4j.LogManager;
......
......@@ -44,7 +44,7 @@ import de.hft.stuttgart.citydoctor2.check.GeometrySelfIntersection;
import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractLinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.edge.EdgePolygon;
......
......@@ -42,7 +42,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.datastructure.Edge;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractLinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
......
......@@ -13,7 +13,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractLinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.math.Triangle3d;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.utils.CollisionRecord;
......
......@@ -44,7 +44,7 @@ import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Edge;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractLinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment