Commit 87dba3fa authored by Riegel's avatar Riegel
Browse files

Merge branch 'dev' into 'master'

CityDoctor Version 3.17.3

See merge request !34
parents 0d2e9fd5 aa9c2a95
Pipeline #11660 passed with stage
in 1 minute and 26 seconds
......@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -38,48 +37,44 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
* @author Matthias Betz
*
*/
public class NonManifoldEdgeError implements CheckError {
public class NonManifoldEdgeError extends SolidError {
@Serial
private static final long serialVersionUID = -6742948557014332402L;
private final List<Edge> edges;
private final Geometry geom;
public NonManifoldEdgeError(Geometry geom, List<Edge> edges) {
super(geom);
this.edges = edges;
this.geom = geom;
}
public List<Edge> getEdges() {
return edges;
}
public Geometry getGeometry() {
return geom;
}
@Override
public void report(ErrorReport report) {
report.add(geom);
super.report(report);
for (Edge e : edges) {
report.add(e);
}
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "ManifoldEdgeError [edges=" + edges + ", geom=" + geom + "]";
return "ManifoldEdgeError [edges=" + edges + ", geom=" + getGeometry() + "]";
}
@Override
......
......@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -40,17 +39,16 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
* @author Matthias Betz
*
*/
public class NonManifoldVertexError implements CheckError {
public class NonManifoldVertexError extends SolidError {
@Serial
private static final long serialVersionUID = -3915669943428175777L;
private final List<List<Polygon>> components;
private final Geometry geom;
private final Vertex v;
public NonManifoldVertexError(Geometry geom, List<List<Polygon>> components, Vertex v) {
this.geom = geom;
super(geom);
this.components = components;
this.v = v;
}
......@@ -59,17 +57,13 @@ public class NonManifoldVertexError implements CheckError {
return components;
}
public Geometry getGeometry() {
return geom;
}
public Vertex getVertex() {
return v;
}
@Override
public void report(ErrorReport report) {
report.add(geom);
super.report(report);
report.add(v);
for (int i = 0; i < components.size(); i++) {
List<Polygon> polygons = components.get(i);
......@@ -83,17 +77,18 @@ public class NonManifoldVertexError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "NonManifoldVertexError [components=" + components + ", geom=" + geom + ", v=" + v + "]";
return "NonManifoldVertexError [components=" + components + ", geom=" + getGeometry() + ", v=" + v + "]";
}
@Override
......
......@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -31,8 +32,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.math.Plane;
import de.hft.stuttgart.citydoctor2.utils.Localization;
import java.io.Serial;
/**
* Error object for planarity errors containing the polygon, the regression
* plane and the distance to the plane.
......@@ -40,18 +39,17 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
public class NonPlanarPolygonDistancePlaneError implements CheckError {
public class NonPlanarPolygonDistancePlaneError extends PlanarityError {
@Serial
private static final long serialVersionUID = -3504364055236383519L;
private final Polygon p;
private final double distance;
private final Vertex v;
private final Plane plane;
public NonPlanarPolygonDistancePlaneError(Polygon p, double distance, Vertex v, Plane plane) {
this.p = p;
super(p);
this.distance = distance;
this.v = v;
this.plane = plane;
......@@ -61,10 +59,6 @@ public class NonPlanarPolygonDistancePlaneError implements CheckError {
return plane;
}
public Polygon getPolygon() {
return p;
}
public double getDistance() {
return distance;
}
......@@ -75,24 +69,25 @@ public class NonPlanarPolygonDistancePlaneError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public void report(ErrorReport report) {
report.add(p);
super.report(report);
report.add(v);
report.add(Localization.getText("DistanceError.distanceFromPlane"), distance);
}
@Override
public String toString() {
return "NonPlanarPolygonDistancePlaneError [p=" + p + ", distance=" + distance + ", v=" + v + ", plane=" + plane + "]";
return "NonPlanarPolygonDistancePlaneError [p=" + getPolygon() + ", distance=" + distance + ", v=" + v + ", plane=" + plane + "]";
}
@Override
......
......@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -28,8 +29,6 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import java.io.Serial;
/**
* When the normal of the triangles created from the triangulation of the
* polygon have a too large angle between them, this error is created.
......@@ -37,46 +36,42 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
public class NonPlanarPolygonNormalsDeviation implements CheckError {
public class NonPlanarPolygonNormalsDeviation extends PlanarityError {
@Serial
private static final long serialVersionUID = 69073161885265794L;
private final Polygon p;
private final double deviation;
public NonPlanarPolygonNormalsDeviation(Polygon p, double deviation) {
this.p = p;
super(p);
this.deviation = deviation;
}
public Polygon getPolygon() {
return p;
}
public double getDeviation() {
return deviation;
}
@Override
public void report(ErrorReport report) {
report.add(p);
super.report(report);
report.add("normal deviation (in rad)", deviation);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "NormalDeviationError [p=" + p + ", deviation=" + deviation + "]";
return "NormalDeviationError [p=" + getPolygon() + ", deviation=" + deviation + "]";
}
@Override
......
......@@ -18,9 +18,9 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
......@@ -28,47 +28,35 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import java.io.Serial;
/**
* When a linear ring has a near zero area this error is created.
*
* @author Matthias Betz
*
*/
public class NullAreaError implements CheckError {
public class NullAreaError extends RingError {
@Serial
private static final long serialVersionUID = 1358910429039553687L;
private final LinearRing lr;
public NullAreaError(LinearRing lr) {
this.lr = lr;
}
public LinearRing getRing() {
return lr;
}
@Override
public void report(ErrorReport report) {
report.add(lr);
super(lr);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "NullAreaError [lr=" + lr + "]";
return "NullAreaError [lr=" + getRing() + "]";
}
@Override
......
package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
public abstract class PlanarityError extends PolygonError {
@Serial
private static final long serialVersionUID = 4229597996236974570L;
public PlanarityError(Polygon poly) {
super(poly);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return super.accept(method, l) || method.visit(this, l);
}
}
......@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import java.io.Serial;
/**
* If a point of a linear ring touches an edge of the same ring it is considered
* self intersecting and this error object is created.
......@@ -39,25 +38,20 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
public class PointTouchesEdgeError implements CheckError {
public class PointTouchesEdgeError extends RingSelfIntersectionError {
@Serial
private static final long serialVersionUID = 3277456707271748954L;
private final LinearRing lr;
private final Edge e;
private final Vertex v;
public PointTouchesEdgeError(LinearRing lr, Edge e, Vertex v) {
this.lr = lr;
super(lr);
this.e = e;
this.v = v;
}
public LinearRing getRing() {
return lr;
}
public Edge getEdge() {
return e;
}
......@@ -69,24 +63,25 @@ public class PointTouchesEdgeError implements CheckError {
@Override
public void report(ErrorReport report) {
report.add("type", "point touches edge");
report.add(lr);
super.report(report);
report.add(v);
report.add(e);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "PointTouchesEdgeError [lr=" + lr + ", e=" + e + ", v=" + v + "]";
return "PointTouchesEdgeError [lr=" + getRing() + ", e=" + e + ", v=" + v + "]";
}
@Override
......
package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.Objects;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
public abstract class PolygonError implements CheckError {
@Serial
private static final long serialVersionUID = 7277982425092189736L;
private final Polygon poly;
public PolygonError(Polygon poly) {
Objects.requireNonNull(poly);
this.poly = poly;
}
public Polygon getPolygon() {
return poly;
}
@Override
public void report(ErrorReport report) {
report.add(poly);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
}
}
......@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -39,40 +38,36 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz
*
*/
public class PolygonHoleOutsideError implements CheckError {
public class PolygonHoleOutsideError extends PolygonError {
@Serial
private static final long serialVersionUID = -4522153084655775231L;
private final List<LinearRing> holesOutside;
private final Polygon p;
public PolygonHoleOutsideError(Polygon p, List<LinearRing> holesOutside) {
this.p = p;
super(p);
this.holesOutside = holesOutside;
}
public Polygon getPolygon() {
return p;
}
public List<LinearRing> getHolesOutside() {
return holesOutside;
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public void report(ErrorReport report) {
report.add(p);
super.report(report);
for (LinearRing lr : holesOutside) {
report.add(lr);
}
......@@ -80,7 +75,7 @@ public class PolygonHoleOutsideError implements CheckError {
@Override
public String toString() {
return "HoleOutsideError [holesOutside=" + holesOutside + ", p=" + p + "]";
return "HoleOutsideError [holesOutside=" + holesOutside + ", p=" + getPolygon() + "]";
}
@Override
......
......@@ -21,7 +21,6 @@ package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.List;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -39,30 +38,25 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz
*
*/
public class PolygonInteriorDisconnectedError implements CheckError {
public class PolygonInteriorDisconnectedError extends PolygonError {
@Serial
private static final long serialVersionUID = 511849016699842395L;
private final Polygon p;
private final List<LinearRing> connectedRings;
public PolygonInteriorDisconnectedError(Polygon p, List<LinearRing> connectedRings) {
this.p = p;
super(p);
this.connectedRings = connectedRings;
}
public Polygon getPolygon() {
return p;
}
public List<LinearRing> getConnectedRings() {
return connectedRings;
}
@Override
public void report(ErrorReport report) {
report.add(p);
super.report(report);
report.add("connected rings", "");
for (LinearRing lr : connectedRings) {
report.add(lr);
......@@ -71,17 +65,18 @@ public class PolygonInteriorDisconnectedError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "InteriorDisconnectedError [p=" + p + ", connectedRings=" + connectedRings + "]";
return "InteriorDisconnectedError [polygon=" + getPolygon() + ", connectedRings=" + connectedRings + "]";
}
@Override
......
......@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.utils.SerializablePair;
import java.io.Serial;
/**
* If the exterior ring and interior rings are intersecting each other, it
* results in a polygon self intersection and this error is created.
......@@ -39,47 +38,43 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
public class PolygonIntersectingRingsError implements CheckError {
public class PolygonIntersectingRingsError extends PolygonError {
@Serial
private static final long serialVersionUID = -7043521697085991901L;
private final Polygon p;
private final SerializablePair<LinearRing, LinearRing> intersectingRings;
public PolygonIntersectingRingsError(Polygon p, SerializablePair<LinearRing, LinearRing> intersectingRings) {
this.p = p;
super(p);
this.intersectingRings = intersectingRings;
}
public Polygon getPolygon() {
return p;
}
public SerializablePair<LinearRing, LinearRing> getIntersectingRings() {
return intersectingRings;
}
@Override
public void report(ErrorReport report) {
report.add(p);
super.report(report);
report.add(intersectingRings.getValue0());
report.add(intersectingRings.getValue1());
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "PolygonSelfIntError [p=" + p + ", intersectingRings=" + intersectingRings + "]";
return "PolygonSelfIntError [polygon=" + getPolygon() + ", intersectingRings=" + intersectingRings + "]";
}
@Override
......
......@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -29,8 +30,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import java.io.Serial;
/**
* If the interior rings have the same orientation as the exterior ring, this
* error is created.
......@@ -38,46 +37,42 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
public class PolygonSameOrientationError implements CheckError {
public class PolygonSameOrientationError extends PolygonError {
@Serial
private static final long serialVersionUID = -6192337889977667459L;
private final Polygon p;
private final LinearRing innerRing;
public PolygonSameOrientationError(Polygon p, LinearRing inner) {
this.p = p;
super(p);
this.innerRing = inner;
}
public Polygon getPolygon() {
return p;
}
public LinearRing getInnerRing() {
return innerRing;
}
@Override
public void report(ErrorReport report) {
report.add(p);
super.report(report);
report.add(innerRing);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "SameOrientationError [p=" + p + ", innerRing=" + innerRing + "]";
return "SameOrientationError [polygon=" + getPolygon() + ", innerRing=" + innerRing + "]";
}
@Override
......
......@@ -23,7 +23,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -43,30 +42,25 @@ import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
* @author Matthias Betz
*
*/
public class PolygonWrongOrientationError implements CheckError {
public class PolygonWrongOrientationError extends SolidError {
@Serial
private static final long serialVersionUID = -3006643655816847097L;
private final List<Edge> edges;
private final Geometry g;
public PolygonWrongOrientationError(Geometry g, List<Edge> edges) {
super(g);
this.edges = edges;
this.g = g;
}
public List<Edge> getEdges() {
return edges;
}
public Geometry getGeometry() {
return g;
}
@Override
public void report(ErrorReport report) {
report.add(g);
super.report(report);
Set<Polygon> possiblePolygons = new HashSet<>();
for (Edge e : edges) {
possiblePolygons.addAll(e.getAdjacentPolygons());
......@@ -76,17 +70,18 @@ public class PolygonWrongOrientationError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "PolygonWrongOrientationError [edges=" + edges + ", g=" + g + "]";
return "PolygonWrongOrientationError [edges=" + edges + ", g=" + getGeometry() + "]";
}
@Override
......
......@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -29,8 +30,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import java.io.Serial;
/**
* When a point is repeated in a linear ring, but is not consecutive. This
* results in a self intersection of the ring and this error object is created.
......@@ -38,30 +37,20 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
public class RingDuplicatePointError implements CheckError {
public class RingDuplicatePointError extends RingSelfIntersectionError {
@Serial
private static final long serialVersionUID = 7208982075173209953L;
private final LinearRing r;
private final Vertex v1;
private final Vertex v2;
public RingDuplicatePointError(LinearRing r, Vertex v1, Vertex v2) {
this.r = r;
super(r);
this.v1 = v1;
this.v2 = v2;
}
@Override
public void accept(ErrorVisitor errorVisitor) {
errorVisitor.visit(this);
}
public LinearRing getRing() {
return r;
}
public Vertex getVertex1() {
return v1;
}
......@@ -70,21 +59,27 @@ public class RingDuplicatePointError implements CheckError {
return v2;
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public void report(ErrorReport report) {
report.add(r);
super.report(report);
report.add("duplicate point 1", v1);
report.add("duplicate point 2", v2);
}
@Override
public String toString() {
return "DuplicatePointError [r=" + r + ", v1=" + v1 + ", v2=" + v2 + "]";
return "DuplicatePointError [r=" + getRing() + ", v1=" + v1 + ", v2=" + v2 + "]";
}
@Override
......
......@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -30,8 +31,6 @@ import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import java.io.Serial;
/**
* When two edges of the same linear ring are intersecting with each other this
* error object is created.
......@@ -39,7 +38,7 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
public class RingEdgeIntersectionError implements CheckError {
public class RingEdgeIntersectionError extends RingSelfIntersectionError {
@Serial
private static final long serialVersionUID = 4923311259469198172L;
......@@ -47,20 +46,15 @@ public class RingEdgeIntersectionError implements CheckError {
private final Edge e1;
private final Edge e2;
private final Vector3d intersection;
private final LinearRing lr;
public RingEdgeIntersectionError(LinearRing lr, Edge e1, Edge e2, Vector3d intersection) {
if (e1 == null || e2 == null || lr == null || intersection == null) {
super(lr);
if (e1 == null || e2 == null || intersection == null) {
throw new IllegalArgumentException("Parameters may not be null");
}
this.e1 = e1;
this.e2 = e2;
this.intersection = intersection;
this.lr = lr;
}
public LinearRing getRing() {
return lr;
}
public Edge getEdge1() {
......@@ -78,7 +72,7 @@ public class RingEdgeIntersectionError implements CheckError {
@Override
public void report(ErrorReport report) {
report.add("type", "edge intersection");
report.add(lr);
super.report(report);
report.add(e1);
report.add(e2);
report.add("intersection point", intersection);
......@@ -86,17 +80,18 @@ public class RingEdgeIntersectionError implements CheckError {
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "EdgeIntersectionError [e1=" + e1 + ", e2=" + e2 + ", intersection=" + intersection + ", lr=" + lr + "]";
return "EdgeIntersectionError [e1=" + e1 + ", e2=" + e2 + ", intersection=" + intersection + ", lr=" + getRing() + "]";
}
@Override
......
package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import java.util.Objects;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
public abstract class RingError implements CheckError {
@Serial
private static final long serialVersionUID = -1579410065481104979L;
private final LinearRing ring;
public RingError(LinearRing ring) {
Objects.requireNonNull(ring);
this.ring = ring;
}
public LinearRing getRing() {
return ring;
}
@Override
public void report(ErrorReport report) {
report.add(ring);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
}
}
......@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -28,8 +29,6 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import java.io.Serial;
/**
* If the first and last point of a linear ring are not the same, this error is
* created.
......@@ -37,39 +36,34 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
public class RingNotClosedError implements CheckError {
@Serial
private static final long serialVersionUID = 2554099996830579201L;
private final LinearRing ring;
public class RingNotClosedError extends RingError {
public RingNotClosedError(LinearRing ring) {
this.ring = ring;
}
public LinearRing getRing() {
return ring;
super(ring);
}
@Serial
private static final long serialVersionUID = 2554099996830579201L;
@Override
public void report(ErrorReport report) {
report.add(ring);
super.report(report);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "RingNotClosedError [ring=" + ring + "]";
return "RingNotClosedError [ring=" + getRing() + "]";
}
@Override
......
package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
public abstract class RingSelfIntersectionError extends RingError {
@Serial
private static final long serialVersionUID = -4528714710581552235L;
public RingSelfIntersectionError(LinearRing ring) {
super(ring);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return super.accept(method, l) || method.visit(this, l);
}
}
......@@ -18,7 +18,8 @@
*/
package de.hft.stuttgart.citydoctor2.check.error;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorType;
......@@ -28,47 +29,40 @@ import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import java.io.Serial;
/**
* If a linear ring has less than 4 distinct points, it is has too few points.
*
* @author Matthias Betz
*
*/
public class RingTooFewPointsError implements CheckError {
public class RingTooFewPointsError extends RingError {
@Serial
private static final long serialVersionUID = 7207518573842743261L;
private final LinearRing lr;
public RingTooFewPointsError(LinearRing lr) {
this.lr = lr;
}
public LinearRing getRing() {
return lr;
super(lr);
}
@Override
public void report(ErrorReport report) {
report.add(lr);
super.report(report);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
super.accept(errorVisitor);
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
return super.accept(method, l) || method.visit(this, l);
}
@Override
public String toString() {
return "TooFewPointsError [lr=" + lr + "]";
return "TooFewPointsError [ring=" + getRing() + "]";
}
@Override
......
package de.hft.stuttgart.citydoctor2.check.error;
import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.ErrorReport;
import de.hft.stuttgart.citydoctor2.check.ErrorVisitor;
import de.hft.stuttgart.citydoctor2.check.HealingMethod;
import de.hft.stuttgart.citydoctor2.check.ModificationListener;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
public abstract class SolidError implements CheckError {
@Serial
private static final long serialVersionUID = 4251342593056430783L;
private Geometry geom;
public SolidError(Geometry geom) {
this.geom = geom;
}
public Geometry getGeometry() {
return geom;
}
@Override
public void report(ErrorReport report) {
report.add(geom);
}
@Override
public void accept(ErrorVisitor errorVisitor) {
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
}
}
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