From 7346bcf0a9693b6cbc311d49bf7e0298fcf007a9 Mon Sep 17 00:00:00 2001 From: Matthias Betz Date: Fri, 6 Mar 2026 12:58:03 +0100 Subject: [PATCH 1/5] fix roof unfragmented check --- .../stuttgart/citydoctor2/check/AbstractErrorVisitor.java | 4 ++-- .../de/hft/stuttgart/citydoctor2/check/ErrorVisitor.java | 4 ++-- .../de/hft/stuttgart/citydoctor2/check/HealingMethod.java | 4 ++-- .../stuttgart/citydoctor2/check/QualityAdeErrorVisitor.java | 4 ++-- .../java/de/hft/stuttgart/citydoctor2/check/Requirement.java | 3 ++- ...aceUnfragmentedError.java => SurfaceFragmentedError.java} | 4 ++-- .../checks/semantics/RoofSurfaceUnfragmentedCheck.java | 5 +++++ .../stuttgart/citydoctor2/checks/util/UnfragmentedCheck.java | 4 ++-- .../de/hft/stuttgart/citydoctor2/gui/GlobalErrorVisitor.java | 4 ++-- .../de/hft/stuttgart/citydoctor2/gui/ListErrorVisitor.java | 4 ++-- .../hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java | 4 ++-- 11 files changed, 25 insertions(+), 19 deletions(-) rename CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/{SurfaceUnfragmentedError.java => SurfaceFragmentedError.java} (94%) diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractErrorVisitor.java index 5ad1d34b..731a8cb7 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractErrorVisitor.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/AbstractErrorVisitor.java @@ -37,7 +37,7 @@ 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.SurfaceFragmentedError; import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError; import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError; import de.hft.stuttgart.citydoctor2.check.error.XMLValidationError; @@ -181,7 +181,7 @@ public abstract class AbstractErrorVisitor implements ErrorVisitor { } @Override - public void visit(SurfaceUnfragmentedError err) { + public void visit(SurfaceFragmentedError err) { } @Override diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/ErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/ErrorVisitor.java index 82c9a5f8..8dc960cd 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/ErrorVisitor.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/ErrorVisitor.java @@ -55,7 +55,7 @@ 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.SurfaceFragmentedError; import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError; import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError; import de.hft.stuttgart.citydoctor2.check.error.XMLValidationError; @@ -135,7 +135,7 @@ public interface ErrorVisitor { public void visit(SchematronError err); - public void visit(SurfaceUnfragmentedError err); + public void visit(SurfaceFragmentedError err); public void visit(DegeneratedRingError err); diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/HealingMethod.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/HealingMethod.java index 0fe22b7d..8354c058 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/HealingMethod.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/HealingMethod.java @@ -48,7 +48,7 @@ import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError; import de.hft.stuttgart.citydoctor2.check.error.SchematronError; 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.SurfaceFragmentedError; import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError; import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError; import de.hft.stuttgart.citydoctor2.check.error.XMLValidationError; @@ -189,7 +189,7 @@ public interface HealingMethod { return false; } - default boolean visit(SurfaceUnfragmentedError err, ModificationListener l) { + default boolean visit(SurfaceFragmentedError err, ModificationListener l) { return false; } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/QualityAdeErrorVisitor.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/QualityAdeErrorVisitor.java index 75e79035..fc6e8265 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/QualityAdeErrorVisitor.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/QualityAdeErrorVisitor.java @@ -55,7 +55,7 @@ import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError; import de.hft.stuttgart.citydoctor2.check.error.SchematronError; 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.SurfaceFragmentedError; import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError; import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError; import de.hft.stuttgart.citydoctor2.check.error.XMLValidationError; @@ -367,7 +367,7 @@ public class QualityAdeErrorVisitor extends AbstractErrorVisitor { } @Override - public void visit(SurfaceUnfragmentedError err) { + public void visit(SurfaceFragmentedError err) { // not translated } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Requirement.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Requirement.java index d9e4ff53..8fda9ebc 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Requirement.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Requirement.java @@ -63,7 +63,7 @@ public class Requirement implements Serializable { public static final Requirement R_GE_R_NULL_AREA = new Requirement("R_GE_R_NULL_AREA", RequirementType.GEOMETRY); public static final Requirement R_SE_BS_GROUND_UNFRAGMENTED = new Requirement("R_SE_BS_GROUND_UNFRAGMENTED", RequirementType.SEMANTIC); - public static final Requirement R_SE_BS_ROOF_UNFRAGMENTED = new Requirement("R_SE_BS_GROUND_UNFRAGMENTED", RequirementType.SEMANTIC); + public static final Requirement R_SE_BS_ROOF_UNFRAGMENTED = new Requirement("R_SE_BS_ROOF_UNFRAGMENTED", RequirementType.SEMANTIC); public static final Requirement R_SE_BS_IS_CEILING = new Requirement("R_SE_BS_IS_CEILING", RequirementType.SEMANTIC); public static final Requirement R_SE_BS_IS_FLOOR = new Requirement("R_SE_BS_IS_FLOOR", RequirementType.SEMANTIC); public static final Requirement R_SE_BS_IS_WALL = new Requirement("R_SE_BS_IS_WALL", RequirementType.SEMANTIC); @@ -83,6 +83,7 @@ public class Requirement implements Serializable { defaultParameters.add(new DefaultParameter(UPPER_ANGLE_NAME, "135", Unit.DEGREE)); R_SE_BS_IS_WALL.parameters = Collections.unmodifiableList(defaultParameters); + defaultParameters = new ArrayList<>(); defaultParameters.add(new DefaultParameter(MAX_ANGLE_DEVIATION, "1", Unit.DEGREE)); R_SE_BS_ROOF_UNFRAGMENTED.parameters = Collections.unmodifiableList(defaultParameters); diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SurfaceUnfragmentedError.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SurfaceFragmentedError.java similarity index 94% rename from CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SurfaceUnfragmentedError.java rename to CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SurfaceFragmentedError.java index 9236bf0d..8baa20db 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SurfaceUnfragmentedError.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/error/SurfaceFragmentedError.java @@ -36,7 +36,7 @@ import java.io.Serial; * @author Matthias Betz * */ -public class SurfaceUnfragmentedError implements CheckError { +public class SurfaceFragmentedError implements CheckError { @Serial private static final long serialVersionUID = 3146243879393474196L; @@ -44,7 +44,7 @@ public class SurfaceUnfragmentedError implements CheckError { private final BoundarySurface bs; private final double angleDeviation; - public SurfaceUnfragmentedError(BoundarySurface bs, double angleDerivation) { + public SurfaceFragmentedError(BoundarySurface bs, double angleDerivation) { this.bs = bs; this.angleDeviation = angleDerivation; } diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/semantics/RoofSurfaceUnfragmentedCheck.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/semantics/RoofSurfaceUnfragmentedCheck.java index 2de941fa..e5104001 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/semantics/RoofSurfaceUnfragmentedCheck.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/semantics/RoofSurfaceUnfragmentedCheck.java @@ -29,6 +29,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.Requirement; import de.hft.stuttgart.citydoctor2.check.RequirementType; +import de.hft.stuttgart.citydoctor2.check.ResultStatus; import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils; import de.hft.stuttgart.citydoctor2.checks.util.UnfragmentedCheck; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface; @@ -80,6 +81,10 @@ public class RoofSurfaceUnfragmentedCheck extends Check { } // only use lod1 and lod2 polygons CheckResult cr = UnfragmentedCheck.checkForFragmentedBoundarySurfaces(this, bs, maxAngleDeviation); + if (cr.getResultStatus() == ResultStatus.OK) { + // check if neighboring roof surfaces have the same average normal + // they should be merged + } bs.addCheckResult(cr); } diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/UnfragmentedCheck.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/UnfragmentedCheck.java index 81a92021..1901645d 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/UnfragmentedCheck.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/UnfragmentedCheck.java @@ -24,7 +24,7 @@ import java.util.List; import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.ResultStatus; -import de.hft.stuttgart.citydoctor2.check.error.SurfaceUnfragmentedError; +import de.hft.stuttgart.citydoctor2.check.error.SurfaceFragmentedError; import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface; import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Polygon; @@ -75,7 +75,7 @@ public class UnfragmentedCheck { double dot = averageNormal.dot(n); double acos = Math.acos(dot); if (acos > delta) { - SurfaceUnfragmentedError err = new SurfaceUnfragmentedError(bs, acos); + SurfaceFragmentedError err = new SurfaceFragmentedError(bs, acos); return new CheckResult(c, ResultStatus.ERROR, err); } } diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/GlobalErrorVisitor.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/GlobalErrorVisitor.java index 0bfb5d97..939a84fc 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/GlobalErrorVisitor.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/GlobalErrorVisitor.java @@ -39,7 +39,7 @@ 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.SurfaceFragmentedError; import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError; import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError; import de.hft.stuttgart.citydoctor2.check.error.XMLValidationError; @@ -186,7 +186,7 @@ public class GlobalErrorVisitor implements ErrorVisitor { } @Override - public void visit(SurfaceUnfragmentedError err) { + public void visit(SurfaceFragmentedError err) { } @Override diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ListErrorVisitor.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ListErrorVisitor.java index b86814a3..8412762c 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ListErrorVisitor.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/ListErrorVisitor.java @@ -41,7 +41,7 @@ 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.SurfaceFragmentedError; import de.hft.stuttgart.citydoctor2.check.error.DegeneratedRingError; import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError; import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError; @@ -243,7 +243,7 @@ public class ListErrorVisitor implements ErrorVisitor { } @Override - public void visit(SurfaceUnfragmentedError err) { + public void visit(SurfaceFragmentedError err) { // nothing to display } diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java index 1f23d576..c79b0ec5 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java @@ -36,7 +36,7 @@ import de.hft.stuttgart.citydoctor2.check.error.RingTooFewPointsError; import de.hft.stuttgart.citydoctor2.check.error.SchematronError; 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.SurfaceFragmentedError; import de.hft.stuttgart.citydoctor2.check.error.TooFewPolygonsError; import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError; import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon; @@ -396,7 +396,7 @@ public class ErrorItemVisitor extends AbstractErrorVisitor { } @Override - public void visit(SurfaceUnfragmentedError err) { + public void visit(SurfaceFragmentedError err) { TextNode textNode = new TextNode( Localization.getText("ErrorItemVisitor.deviation") + ": " + err.getAngleDeviation()); TreeItem textItem = new TreeItem<>(textNode); -- GitLab From c232931016f75a2c9b73f77db5bf0a17876d867c Mon Sep 17 00:00:00 2001 From: Matthias Betz Date: Mon, 9 Mar 2026 11:44:43 +0100 Subject: [PATCH 2/5] fixed a bug where a degenerate triangle causing the all polygons wrong orientation check to report false positives --- .../geometry/AllPolygonsWrongOrientationCheck.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/geometry/AllPolygonsWrongOrientationCheck.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/geometry/AllPolygonsWrongOrientationCheck.java index 277026e8..4e7c705c 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/geometry/AllPolygonsWrongOrientationCheck.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/geometry/AllPolygonsWrongOrientationCheck.java @@ -118,13 +118,15 @@ public class AllPolygonsWrongOrientationCheck extends Check { // find the centroid of a triangle Vector3d centroid = t.getCentroid(); // create a point outside of the geometry - Vector3d outsidePoint = bbox[0].minus(Vector3d.X, 5).minus(Vector3d.Y, 5).minus(Vector3d.Z, 5); + Vector3d outsideDif1 = new Vector3d(5, 5, 5); + Vector3d outsidePoint = bbox[0].minus(outsideDif1); // create a second point outside of the geometry // the check can fail if the building is exactly oriented so that the ray is // parallel to a side of the building // in order to avoid this we check two rays, if one of those says it is oriented // correctly it is oriented correctly - Vector3d secondOutsidePoint = bbox[0].minus(Vector3d.X, 5).minus(Vector3d.Y, 10).minus(Vector3d.Z, 5); + Vector3d outsideDif2 = new Vector3d(7, 10, 5); + Vector3d secondOutsidePoint = bbox[0].minus(outsideDif2); return checkIfGeometryIsWrongOriented(tessPolygons, centroid, outsidePoint) || checkIfGeometryIsWrongOriented(tessPolygons, centroid, secondOutsidePoint); } @@ -164,8 +166,8 @@ public class AllPolygonsWrongOrientationCheck extends Check { } private Triangle3d findSuitableTriangle(TesselatedPolygon p1) { - Triangle3d t = p1.getTriangles().get(0); - double maxArea = t.getArea(); + Triangle3d t = null; + double maxArea = Double.NEGATIVE_INFINITY; for (Triangle3d tri : p1.getTriangles()) { double area = tri.getArea(); if (area > maxArea) { @@ -173,6 +175,9 @@ public class AllPolygonsWrongOrientationCheck extends Check { t = tri; } } + if (t == null) { + throw new IllegalStateException("No suitable triangle found"); + } return t; } -- GitLab From 44ea66b001c8a357ad63bccfb4f84863180be242 Mon Sep 17 00:00:00 2001 From: Luna Riegel Date: Thu, 16 Apr 2026 14:51:20 +0200 Subject: [PATCH 3/5] Fix: Add db args parsing to GUI CLI command --- .../de/hft/stuttgart/citydoctor2/CityDoctorValidation.java | 4 ++-- .../java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java index c96294b6..d02613c5 100644 --- a/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java +++ b/CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java @@ -96,7 +96,7 @@ public class CityDoctorValidation { return outputFile; } - private static void lookForDbConfigFileParameter(ArgumentParser argParser) { + public static void lookForDbConfigFileParameter(ArgumentParser argParser) { if (!argParser.containsOption("db_config")) { return; } @@ -108,7 +108,7 @@ public class CityDoctorValidation { } } - private static void lookForDbLocationParameter(ArgumentParser argParser) { + public static void lookForDbLocationParameter(ArgumentParser argParser) { if (!argParser.containsOption("db_location")) { return; } diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java index 736cdafd..5370677b 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java @@ -278,6 +278,8 @@ public class MainWindow extends Application { System.exit(4); } } + CityDoctorValidation.lookForDbConfigFileParameter(argParser); + CityDoctorValidation.lookForDbLocationParameter(argParser); Application.launch(args); } -- GitLab From 9f98a16317c660f3229693c1fd949add85a13436 Mon Sep 17 00:00:00 2001 From: Luna Riegel Date: Thu, 16 Apr 2026 15:48:27 +0200 Subject: [PATCH 4/5] Build: Update version number --- CityDoctorParent/CityDoctorCheckResult/pom.xml | 2 +- CityDoctorParent/CityDoctorEdge/pom.xml | 2 +- CityDoctorParent/CityDoctorModel/pom.xml | 2 +- CityDoctorParent/CityDoctorValidation/pom.xml | 2 +- CityDoctorParent/Extensions/CityDoctorGUI/pom.xml | 2 +- CityDoctorParent/Extensions/CityDoctorHealer/pom.xml | 2 +- CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml | 2 +- CityDoctorParent/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CityDoctorParent/CityDoctorCheckResult/pom.xml b/CityDoctorParent/CityDoctorCheckResult/pom.xml index b9cc0519..a7be6eb3 100644 --- a/CityDoctorParent/CityDoctorCheckResult/pom.xml +++ b/CityDoctorParent/CityDoctorCheckResult/pom.xml @@ -6,7 +6,7 @@ de.hft.stuttgart CityDoctorParent - 3.18.2 + 3.18.3 CityDoctorCheckResult diff --git a/CityDoctorParent/CityDoctorEdge/pom.xml b/CityDoctorParent/CityDoctorEdge/pom.xml index 284ce845..bbc36d10 100644 --- a/CityDoctorParent/CityDoctorEdge/pom.xml +++ b/CityDoctorParent/CityDoctorEdge/pom.xml @@ -6,7 +6,7 @@ de.hft.stuttgart CityDoctorParent - 3.18.2 + 3.18.3 CityDoctorEdge diff --git a/CityDoctorParent/CityDoctorModel/pom.xml b/CityDoctorParent/CityDoctorModel/pom.xml index e107b5be..5ec8a92a 100644 --- a/CityDoctorParent/CityDoctorModel/pom.xml +++ b/CityDoctorParent/CityDoctorModel/pom.xml @@ -6,7 +6,7 @@ de.hft.stuttgart CityDoctorParent - 3.18.2 + 3.18.3 ${project.version}-${git.commit.id.abbrev} diff --git a/CityDoctorParent/CityDoctorValidation/pom.xml b/CityDoctorParent/CityDoctorValidation/pom.xml index f52a83cb..4ef17f97 100644 --- a/CityDoctorParent/CityDoctorValidation/pom.xml +++ b/CityDoctorParent/CityDoctorValidation/pom.xml @@ -4,7 +4,7 @@ de.hft.stuttgart CityDoctorParent - 3.18.2 + 3.18.3 CityDoctorValidation CityDoctorValidation diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/pom.xml b/CityDoctorParent/Extensions/CityDoctorGUI/pom.xml index 233c7834..c7bfddab 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/pom.xml +++ b/CityDoctorParent/Extensions/CityDoctorGUI/pom.xml @@ -6,7 +6,7 @@ de.hft.stuttgart CityDoctorParent - 3.18.2 + 3.18.3 ../../pom.xml CityDoctorGUI diff --git a/CityDoctorParent/Extensions/CityDoctorHealer/pom.xml b/CityDoctorParent/Extensions/CityDoctorHealer/pom.xml index ee969799..7d154593 100644 --- a/CityDoctorParent/Extensions/CityDoctorHealer/pom.xml +++ b/CityDoctorParent/Extensions/CityDoctorHealer/pom.xml @@ -6,7 +6,7 @@ de.hft.stuttgart CityDoctorParent - 3.18.2 + 3.18.3 ../../pom.xml CityDoctorHealer diff --git a/CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml b/CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml index 04a0807e..eb01d734 100644 --- a/CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml +++ b/CityDoctorParent/Extensions/CityDoctorHealerGUI/pom.xml @@ -7,7 +7,7 @@ de.hft.stuttgart CityDoctorParent - 3.18.2 + 3.18.3 ../../pom.xml CityDoctorHealerGUI diff --git a/CityDoctorParent/pom.xml b/CityDoctorParent/pom.xml index 2b4bd20c..24549983 100644 --- a/CityDoctorParent/pom.xml +++ b/CityDoctorParent/pom.xml @@ -5,7 +5,7 @@ 4.0.0 de.hft.stuttgart CityDoctorParent - 3.18.2 + 3.18.3 pom CityDoctorParent -- GitLab From 8e446fe17ca32bd2b7fe3bfe148cf7cb835e1d7c Mon Sep 17 00:00:00 2001 From: Luna Riegel Date: Thu, 16 Apr 2026 16:03:51 +0200 Subject: [PATCH 5/5] Docs: Update changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a0c8e9d..b8cbc073 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ 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.18.3] (2026-04-16) + +### Fixes + +- Fixed FragmentedSurface errors reporting roof BoundarySurfaces as ground BoundarySurfaces +- Fixed degenerated triangles causing false-positive detection of AllPolygonsWrongOrientation errors +- Fixed -db_location and -db_settings arguments not being parsed when starting the GUI from the CLI + ## [3.18.2] (2026-02-24) ### Added -- GitLab