Commit ad2e1a75 authored by Riegel's avatar Riegel
Browse files

Merge branch 'refs/heads/dev' into dev_embedded_geodb

# Conflicts:
#	CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/GenericAttribute.java
parents aa17c02e 9c97175d
......@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [3.17.3] (2025-07-09)
- Fixed global errors not being cleared upon validation rerun
- Fixed ConstructiveElements of Buildings not being parsed
- Fixed PolygonPatches being added twice to Geometry
- Fixed missing uom and value for valid QualityADE output
- Reduced FOP-logging verbosity
- Added a facing property to Geometry, denoting whether it is facing inwards or outwards
## [3.17.2] (2025-06-05)
- Rework of AbstractCheck, allowing the implementation of Visitors that use the CheckEngine to traverse the internal
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId>
<version>3.17.2</version>
<version>3.17.3</version>
</parent>
<artifactId>CityDoctorCheckResult</artifactId>
<dependencies>
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId>
<version>3.17.2</version>
<version>3.17.3</version>
</parent>
<artifactId>CityDoctorEdge</artifactId>
<dependencies>
......
......@@ -32,12 +32,13 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
public class IntersectionErrorsTest {
@Test
public void testWrongIntersection() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
ConcretePolygon p1 = new ConcretePolygon();
......
......@@ -43,12 +43,13 @@ import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoTrianglesOneSharedEdgeInPlane() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -161,7 +162,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTwoSharedEdges() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -212,7 +213,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedEdgeIntersectionPolygonPlanar() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -276,7 +277,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedEdgeIntersectionPolygonPlanar2() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -339,7 +340,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedEdgeCloseEdgePlanar() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -393,7 +394,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedEdgeNotPlanar() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -447,7 +448,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsOneSharedPointNotPlanar() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -508,7 +509,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingInOnePointNoIntersectionNotPlanar() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -561,7 +562,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingInOnePointNoIntersectionNotPlanar2() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -616,7 +617,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsNotInSamePlaneBelow() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -670,7 +671,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsNotInSamePlaneAbove() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -724,7 +725,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsNotInSamePlaneAboveInverted() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -778,7 +779,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingNoPointsSameNotPlanar() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -834,7 +835,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingEdgeNoPointsSameNotPlanar() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -890,7 +891,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTouchingEdgeInPointNoPointsSameNotPlanar() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -946,7 +947,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsTwoTouchingEdgesNotPlanar() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -1002,7 +1003,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsPlanarInnerRingsContained() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -1067,7 +1068,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsPlanarInnerRingsContainedConnected() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -1128,7 +1129,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsInnerRingsConnected() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......@@ -1191,7 +1192,7 @@ public class MeshSurfaceUtilsTest {
@Test
public void testIntersectionTwoPolygonsInnerRingsThroughHole() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1);
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p1 = new ConcretePolygon();
geom.addPolygon(p1);
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId>
<version>3.17.2</version>
<version>3.17.3</version>
</parent>
<properties>
<versionString>${project.version}-${git.commit.id.abbrev}</versionString>
......
package de.hft.stuttgart.citydoctor2.check;
import de.hft.stuttgart.citydoctor2.check.error.AllPolygonsWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeInvalidError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeMissingError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeValueWrongError;
import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError;
import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError;
import de.hft.stuttgart.citydoctor2.check.error.MultipleConnectedComponentsError;
import de.hft.stuttgart.citydoctor2.check.error.NestedRingError;
import de.hft.stuttgart.citydoctor2.check.error.NonManifoldEdgeError;
import de.hft.stuttgart.citydoctor2.check.error.NonManifoldVertexError;
import de.hft.stuttgart.citydoctor2.check.error.NonPlanarPolygonDistancePlaneError;
import de.hft.stuttgart.citydoctor2.check.error.NonPlanarPolygonNormalsDeviation;
import de.hft.stuttgart.citydoctor2.check.error.NotCeilingError;
import de.hft.stuttgart.citydoctor2.check.error.NotFloorError;
import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.check.error.NullAreaError;
import de.hft.stuttgart.citydoctor2.check.error.PlanarityError;
import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonSameOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWithoutSurfaceError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingError;
import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.RingSelfIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.check.error.SolidError;
import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError;
import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError;
import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
public abstract class AbstractErrorVisitor implements ErrorVisitor {
@Override
public void visit(RingError err) {
}
@Override
public void visit(PolygonError err) {
}
@Override
public void visit(RingSelfIntersectionError err) {
}
@Override
public void visit(PlanarityError err) {
}
@Override
public void visit(PolygonHoleOutsideError err) {
}
@Override
public void visit(NonManifoldEdgeError err) {
}
@Override
public void visit(MultipleConnectedComponentsError err) {
}
@Override
public void visit(NestedRingError err) {
}
@Override
public void visit(NonManifoldVertexError err) {
}
@Override
public void visit(PolygonWrongOrientationError err) {
}
@Override
public void visit(PolygonSameOrientationError err) {
}
@Override
public void visit(SolidNotClosedError err) {
}
@Override
public void visit(DependenciesNotMetError err) {
}
@Override
public void visit(UnknownCheckError err) {
}
@Override
public void visit(RingNotClosedError err) {
}
@Override
public void visit(ConsecutivePointSameError err) {
}
@Override
public void visit(AllPolygonsWrongOrientationError err) {
}
@Override
public void visit(PolygonInteriorDisconnectedError err) {
}
@Override
public void visit(NullAreaError err) {
}
@Override
public void visit(RingTooFewPointsError err) {
}
@Override
public void visit(NonPlanarPolygonNormalsDeviation err) {
}
@Override
public void visit(NonPlanarPolygonDistancePlaneError err) {
}
@Override
public void visit(PolygonIntersectingRingsError err) {
}
@Override
public void visit(SolidSelfIntError err) {
}
@Override
public void visit(TooFewPolygonsError err) {
}
@Override
public void visit(RingDuplicatePointError err) {
}
@Override
public void visit(RingEdgeIntersectionError err) {
}
@Override
public void visit(PointTouchesEdgeError err) {
}
@Override
public void visit(NotCeilingError err) {
}
@Override
public void visit(NotFloorError err) {
}
@Override
public void visit(NotWallError err) {
}
@Override
public void visit(NotGroundError err) {
}
@Override
public void visit(CheckError err) {
}
@Override
public void visit(SchematronError err) {
}
@Override
public void visit(SurfaceUnfragmentedError err) {
}
@Override
public void visit(DegeneratedRingError err) {
}
@Override
public void visit(AttributeMissingError err) {
}
@Override
public void visit(AttributeValueWrongError err) {
}
@Override
public void visit(AttributeInvalidError err) {
}
@Override
public void visit(PolygonWithoutSurfaceError err) {
}
@Override
public void visit(SolidError err) {
}
}
......@@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.error.AttributeInvalidError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeMissingError;
import de.hft.stuttgart.citydoctor2.check.error.AttributeValueWrongError;
import de.hft.stuttgart.citydoctor2.check.error.ConsecutivePointSameError;
import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.DependenciesNotMetError;
import de.hft.stuttgart.citydoctor2.check.error.MultipleConnectedComponentsError;
import de.hft.stuttgart.citydoctor2.check.error.NestedRingError;
......@@ -35,7 +36,9 @@ import de.hft.stuttgart.citydoctor2.check.error.NotFloorError;
import de.hft.stuttgart.citydoctor2.check.error.NotGroundError;
import de.hft.stuttgart.citydoctor2.check.error.NotWallError;
import de.hft.stuttgart.citydoctor2.check.error.NullAreaError;
import de.hft.stuttgart.citydoctor2.check.error.PlanarityError;
import de.hft.stuttgart.citydoctor2.check.error.PointTouchesEdgeError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
......@@ -44,13 +47,15 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonWithoutSurfaceError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingError;
import de.hft.stuttgart.citydoctor2.check.error.RingNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.RingSelfIntersectionError;
import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.check.error.SolidError;
import de.hft.stuttgart.citydoctor2.check.error.SolidNotClosedError;
import de.hft.stuttgart.citydoctor2.check.error.SolidSelfIntError;
import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError;
import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError;
import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError;
import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
......@@ -62,7 +67,15 @@ import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
*
*/
public interface ErrorVisitor {
public void visit(RingError err);
public void visit(PolygonError err);
public void visit(RingSelfIntersectionError err);
public void visit(PlanarityError err);
public void visit(PolygonHoleOutsideError err);
public void visit(NonManifoldEdgeError err);
......@@ -119,8 +132,6 @@ public interface ErrorVisitor {
public void visit(NotGroundError err);
public void visit(CheckError err);
public void visit(SchematronError err);
public void visit(SurfaceUnfragmentedError err);
......@@ -134,5 +145,9 @@ public interface ErrorVisitor {
public void visit(AttributeInvalidError err);
public void visit(PolygonWithoutSurfaceError err);
public void visit(CheckError err);
public void visit(SolidError err);
}
......@@ -89,7 +89,7 @@ import de.hft.stuttgart.quality.model.types.SolidSelfIntersectionError;
import de.hft.stuttgart.quality.model.types.SolidTooFewPolygonsError;
import de.hft.stuttgart.quality.model.types.ValidationResult;
public class QualityAdeErrorVisitor implements ErrorVisitor {
public class QualityAdeErrorVisitor extends AbstractErrorVisitor {
private final ValidationResult res;
......
......@@ -29,7 +29,7 @@ import de.hft.stuttgart.citydoctor2.utils.Localization;
*/
public enum Unit {
KWH("kWh", "kWh"), METER("m", "m"), SQUARE_METER("m²", "m2"), CUBIC_METER("m³", "m3"), RADIAN(Localization.getText("Unit.Radian"), "rad"), NONE("", null), DEGREE(Localization.getText("Unit.Degree"), "deg");
KWH("kWh", "kWh"), METER("m", "m"), SQUARE_METER("m²", "m2"), CUBIC_METER("m³", "m3"), RADIAN(Localization.getText("Unit.Radian"), "rad"), NONE("", ""), DEGREE(Localization.getText("Unit.Degree"), "deg");
private final String representation;
private final String gmlRep;
......
......@@ -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.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GmlElement;
import java.io.Serial;
/**
* Error when all polygons are oriented wrong.
*
* @author Matthias Betz
*
*/
public class AllPolygonsWrongOrientationError implements CheckError {
public class AllPolygonsWrongOrientationError extends SolidError {
@Serial
private static final long serialVersionUID = 2263993313732858840L;
private final Geometry geom;
public AllPolygonsWrongOrientationError(Geometry geom) {
this.geom = geom;
}
public Geometry getGeometry() {
return geom;
super(geom);
}
@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 "AllPolygonsWrongOrientationError [geom=" + geom + "]";
}
@Override
public void report(ErrorReport report) {
report.add(geom);
return "AllPolygonsWrongOrientationError [geom=" + 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 two points are too close to each other and are consecutive in a linear
* ring, this error is created.
......@@ -38,25 +37,20 @@ import java.io.Serial;
* @author Matthias Betz
*
*/
public class ConsecutivePointSameError implements CheckError {
public class ConsecutivePointSameError extends RingError {
@Serial
private static final long serialVersionUID = -6355935751554777494L;
private final LinearRing lr;
private final Vertex p1;
private final Vertex p2;
public ConsecutivePointSameError(LinearRing lr, Vertex p1, Vertex p2) {
this.lr = lr;
super(lr);
this.p1 = p1;
this.p2 = p2;
}
public LinearRing getRing() {
return lr;
}
public Vertex getVertex1() {
return p1;
}
......@@ -67,22 +61,23 @@ public class ConsecutivePointSameError 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 "ConsecutivePointSameError [lr=" + lr + ", p1=" + p1 + ", p2=" + p2 + "]";
return "ConsecutivePointSameError [lr=" + getRing() + ", p1=" + p1 + ", p2=" + p2 + "]";
}
@Override
public void report(ErrorReport report) {
report.add(lr);
super.report(report);
report.add("duplicate point 1", p1);
report.add("duplicate point 2", p2);
}
......
......@@ -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,37 +29,30 @@ 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;
public class DegeneratedRingError implements CheckError {
public class DegeneratedRingError extends RingSelfIntersectionError {
@Serial
private static final long serialVersionUID = 865493182529055651L;
private final LinearRing lr;
public DegeneratedRingError(LinearRing lr) {
this.lr = lr;
super(lr);
}
public LinearRing getRing() {
return 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 void report(ErrorReport report) {
report.add("type", "degenerated ring");
report.add(getRing());
super.report(report);
}
@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 MultipleConnectedComponentsError implements CheckError {
public class MultipleConnectedComponentsError extends SolidError {
@Serial
private static final long serialVersionUID = 2152069835068857036L;
private final Geometry geom;
private final List<List<Polygon>> components;
public MultipleConnectedComponentsError(Geometry geom, List<List<Polygon>> components) {
this.geom = geom;
super(geom);
this.components = components;
}
public Geometry getGeometry() {
return geom;
}
public List<List<Polygon>> getComponents() {
return components;
}
@Override
public void report(ErrorReport report) {
report.add(geom);
super.report(report);
for (int i = 0; i < components.size(); i++) {
List<Polygon> polygons = components.get(i);
report.addPolygons("component nr: " + (i + 1), polygons);
......@@ -71,17 +65,18 @@ public class MultipleConnectedComponentsError 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 "MultipleConnectedComponentsError [geom=" + geom + ", components=" + components + "]";
return "MultipleConnectedComponentsError [geom=" + getGeometry() + ", components=" + components + "]";
}
@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,32 +30,26 @@ 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 an inner ring is with in the boundaries of another, this error is created.
*
* @author Matthias Betz
*
*/
public class NestedRingError implements CheckError {
public class NestedRingError extends PolygonError {
@Serial
private static final long serialVersionUID = -3396113374745830193L;
private final Polygon p;
private final LinearRing innerRing;
private final LinearRing withinRing;
public NestedRingError(Polygon p, LinearRing innerRing, LinearRing withinRing) {
this.p = p;
super(p);
this.innerRing = innerRing;
this.withinRing = withinRing;
}
public Polygon getPolygon() {
return p;
}
public LinearRing getInnerRing() {
return innerRing;
......@@ -66,23 +61,24 @@ public class NestedRingError implements CheckError {
@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 "NestedRingError [p=" + p + ", innerRing=" + innerRing + "]";
return "NestedRingError [p=" + getPolygon() + ", innerRing=" + innerRing + "]";
}
@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;
......@@ -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
......
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