Commits (5)
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>de.hft.stuttgart</groupId> <groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId> <artifactId>CityDoctorParent</artifactId>
<version>3.13.1</version> <version>3.14.0</version>
</parent> </parent>
<artifactId>CityDoctorCheckResult</artifactId> <artifactId>CityDoctorCheckResult</artifactId>
<dependencies> <dependencies>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>de.hft.stuttgart</groupId> <groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId> <artifactId>CityDoctorParent</artifactId>
<version>3.13.1</version> <version>3.14.0</version>
</parent> </parent>
<artifactId>CityDoctorEdge</artifactId> <artifactId>CityDoctorEdge</artifactId>
<dependencies> <dependencies>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>de.hft.stuttgart</groupId> <groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId> <artifactId>CityDoctorParent</artifactId>
<version>3.13.1</version> <version>3.14.0</version>
</parent> </parent>
<properties> <properties>
<versionString>${project.version}-${git.commit.id.abbrev}</versionString> <versionString>${project.version}-${git.commit.id.abbrev}</versionString>
......
...@@ -53,6 +53,7 @@ public class CheckId implements Serializable { ...@@ -53,6 +53,7 @@ public class CheckId implements Serializable {
public static final CheckId C_SE_BS_ROOF_UNFRAGMENTED = new CheckId("C_SE_BS_ROOF_UNFRAGMENTED"); public static final CheckId C_SE_BS_ROOF_UNFRAGMENTED = new CheckId("C_SE_BS_ROOF_UNFRAGMENTED");
public static final CheckId C_GE_S_NOT_CLOSED = new CheckId("C_GE_S_NOT_CLOSED"); public static final CheckId C_GE_S_NOT_CLOSED = new CheckId("C_GE_S_NOT_CLOSED");
public static final CheckId C_GE_P_ORIENTATION_RINGS_SAME = new CheckId("C_GE_P_ORIENTATION_RINGS_SAME"); public static final CheckId C_GE_P_ORIENTATION_RINGS_SAME = new CheckId("C_GE_P_ORIENTATION_RINGS_SAME");
public static final CheckId C_SE_POLYGON_WITHOUT_SURFACE = new CheckId("C_SE_POLYGON_WITHOUT_SURFACE");
private String name; private String name;
......
...@@ -63,6 +63,7 @@ public class ErrorId implements Serializable { ...@@ -63,6 +63,7 @@ public class ErrorId implements Serializable {
public static final ErrorId SE_SCHEMATRON_ERROR = new ErrorId("SE_SCHEMATRON_ERROR"); public static final ErrorId SE_SCHEMATRON_ERROR = new ErrorId("SE_SCHEMATRON_ERROR");
public static final ErrorId SE_BS_UNFRAGMENTED = new ErrorId("SE_BS_UNFRAGMENTED"); public static final ErrorId SE_BS_UNFRAGMENTED = new ErrorId("SE_BS_UNFRAGMENTED");
public static final ErrorId GE_P_DEGENERATED_RING = new ErrorId("GE_P_DEGENERATED_POLYGON"); public static final ErrorId GE_P_DEGENERATED_RING = new ErrorId("GE_P_DEGENERATED_POLYGON");
public static final ErrorId SE_POLYGON_WITHOUT_SURFACE = new ErrorId("SE_POLYGON_WITHOUT_SURFACE");
private String name; private String name;
......
...@@ -40,6 +40,7 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError; ...@@ -40,6 +40,7 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError; import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError; import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonSameOrientationError; 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.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError; import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError; import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
...@@ -130,6 +131,8 @@ public interface ErrorVisitor { ...@@ -130,6 +131,8 @@ public interface ErrorVisitor {
public void visit(AttributeValueWrongError err); public void visit(AttributeValueWrongError err);
public void visit(AttributeInvalidError cdErr); public void visit(AttributeInvalidError err);
public void visit(PolygonWithoutSurfaceError err);
} }
...@@ -36,6 +36,7 @@ public class HealingID { ...@@ -36,6 +36,7 @@ public class HealingID {
public static final HealingID S_NOT_CLOSED = new HealingID("S_NOT_CLOSED"); public static final HealingID S_NOT_CLOSED = new HealingID("S_NOT_CLOSED");
public static final HealingID P_NON_PLANAR_POLYGON_CPP = new HealingID("P_NON_PLANAR_POLYGON_CPP"); public static final HealingID P_NON_PLANAR_POLYGON_CPP = new HealingID("P_NON_PLANAR_POLYGON_CPP");
public static final HealingID S_NOT_CLOSED_CPP = new HealingID("S_NOT_CLOSED_CPP"); public static final HealingID S_NOT_CLOSED_CPP = new HealingID("S_NOT_CLOSED_CPP");
public static final HealingID SE_POLYGON_WITHOUT_SURFACE = new HealingID("SE_POLYGON_WITHOUT_SURFACE");
private String idString; private String idString;
......
...@@ -39,6 +39,7 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError; ...@@ -39,6 +39,7 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError; import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError; import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonSameOrientationError; 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.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError; import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError; import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
...@@ -195,6 +196,10 @@ public interface HealingMethod { ...@@ -195,6 +196,10 @@ public interface HealingMethod {
default boolean visit(AttributeMissingError err, ModificationListener l) { default boolean visit(AttributeMissingError err, ModificationListener l) {
return false; return false;
} }
default boolean visit(PolygonWithoutSurfaceError err, ModificationListener l) {
return false;
}
public HealingMethod createNew(); public HealingMethod createNew();
......
...@@ -46,6 +46,7 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError; ...@@ -46,6 +46,7 @@ import de.hft.stuttgart.citydoctor2.check.error.PolygonHoleOutsideError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError; import de.hft.stuttgart.citydoctor2.check.error.PolygonInteriorDisconnectedError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError; import de.hft.stuttgart.citydoctor2.check.error.PolygonIntersectingRingsError;
import de.hft.stuttgart.citydoctor2.check.error.PolygonSameOrientationError; 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.PolygonWrongOrientationError;
import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError; import de.hft.stuttgart.citydoctor2.check.error.RingDuplicatePointError;
import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError; import de.hft.stuttgart.citydoctor2.check.error.RingEdgeIntersectionError;
...@@ -398,4 +399,9 @@ public class QualityAdeErrorVisitor implements ErrorVisitor { ...@@ -398,4 +399,9 @@ public class QualityAdeErrorVisitor implements ErrorVisitor {
res.getErrors().add(new AbstractErrorProperty(err)); res.getErrors().add(new AbstractErrorProperty(err));
} }
@Override
public void visit(PolygonWithoutSurfaceError err) {
// not translated
}
} }
...@@ -66,7 +66,8 @@ public class Requirement implements Serializable { ...@@ -66,7 +66,8 @@ public class Requirement implements Serializable {
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_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); public static final Requirement R_SE_BS_IS_WALL = new Requirement("R_SE_BS_IS_WALL", RequirementType.SEMANTIC);
public static final Requirement R_SE_BS_IS_GROUND = new Requirement("R_SE_BS_IS_GROUND", RequirementType.SEMANTIC); public static final Requirement R_SE_BS_IS_GROUND = new Requirement("R_SE_BS_IS_GROUND", RequirementType.SEMANTIC);
public static final Requirement R_SE_POLYGON_WITHOUT_SURFACE = new Requirement("R_SE_POLYGON_WITHOUT_SURFACE", RequirementType.SEMANTIC);
static { static {
// fill requirements with default parameters // fill requirements with default parameters
ArrayList<DefaultParameter> defaultParameters = new ArrayList<>(); ArrayList<DefaultParameter> defaultParameters = new ArrayList<>();
......
package de.hft.stuttgart.citydoctor2.check.error;
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;
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.GmlElement;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
public class PolygonWithoutSurfaceError implements CheckError {
private static final long serialVersionUID = 2676579487514583105L;
private Polygon p;
public PolygonWithoutSurfaceError(Polygon polygon) {
p = polygon;
}
@Override
public ErrorType getType() {
return ErrorType.ERROR;
}
@Override
public ErrorId getErrorId() {
return ErrorId.SE_POLYGON_WITHOUT_SURFACE;
}
public Polygon getPolygon() {
return p;
}
@Override
public GmlElement getFeature() {
return p;
}
@Override
public void accept(ErrorVisitor errorVisitor) {
errorVisitor.visit(this);
}
@Override
public boolean accept(HealingMethod method, ModificationListener l) {
return method.visit(this, l);
}
@Override
public void report(ErrorReport report) {
report.add(p);
}
}
...@@ -91,6 +91,16 @@ public abstract class CityObject extends GmlElement { ...@@ -91,6 +91,16 @@ public abstract class CityObject extends GmlElement {
} }
} }
} }
public void removeGeometry(Lod lod, GeometryType type) {
Iterator<Geometry> it = geometryList.iterator();
while (it.hasNext()) {
Geometry next = it.next();
if (next.getLod() == lod && next.getType() == type) {
it.remove();
}
}
}
public Geometry getHighestLodGeometry() { public Geometry getHighestLodGeometry() {
Geometry highestLodGeometry = null; Geometry highestLodGeometry = null;
......
...@@ -98,6 +98,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LandObject; ...@@ -98,6 +98,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LandObject;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinkedPolygon; import de.hft.stuttgart.citydoctor2.datastructure.LinkedPolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Opening;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject; import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject.TransportationType; import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject.TransportationType;
...@@ -606,11 +607,17 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -606,11 +607,17 @@ public class Citygml3FeatureMapper extends ObjectWalker {
updateEdgesAndVertices(cdBuilding); updateEdgesAndVertices(cdBuilding);
for (BoundarySurface bs : surfaceMapper.getSurfaces()) { for (BoundarySurface bs : surfaceMapper.getSurfaces()) {
updateEdgesAndVertices(bs); updateEdgesAndVertices(bs);
for (Opening o : bs.getOpenings()) {
updateEdgesAndVertices(o);
}
} }
for (Installation bi : cdBuilding.getBuildingInstallations()) { for (Installation bi : cdBuilding.getBuildingInstallations()) {
updateEdgesAndVertices(bi); updateEdgesAndVertices(bi);
for (BoundarySurface bs : bi.getBoundarySurfaces()) { for (BoundarySurface bs : bi.getBoundarySurfaces()) {
updateEdgesAndVertices(bs); updateEdgesAndVertices(bs);
for (Opening o : bs.getOpenings()) {
updateEdgesAndVertices(o);
}
} }
} }
} }
......
...@@ -147,7 +147,7 @@ public class Citygml3GeometryMapper extends GeometryWalker { ...@@ -147,7 +147,7 @@ public class Citygml3GeometryMapper extends GeometryWalker {
trans.transform(p1, p2); trans.transform(p1, p2);
x = p2.x; x = p2.x;
y = p2.y; y = p2.y;
z = z / config.getFromMetres(); z = z / config.getFromMeters();
} }
x = round(x, config.getNumberOfRoundingPlaces()); x = round(x, config.getNumberOfRoundingPlaces());
y = round(y, config.getNumberOfRoundingPlaces()); y = round(y, config.getNumberOfRoundingPlaces());
......
...@@ -451,9 +451,9 @@ public class CityGmlParser { ...@@ -451,9 +451,9 @@ public class CityGmlParser {
double fromMetres = projection.getFromMetres(); double fromMetres = projection.getFromMetres();
if (fromMetres > 0) { if (fromMetres > 0) {
// also transform height information // also transform height information
config.setFromMetres(fromMetres); config.setFromMeters(fromMetres);
} else { } else {
config.setFromMetres(1.0); config.setFromMeters(1.0);
} }
} }
......
...@@ -48,7 +48,7 @@ public class ParserConfiguration implements Serializable { ...@@ -48,7 +48,7 @@ public class ParserConfiguration implements Serializable {
private boolean hasTransformation = false; private boolean hasTransformation = false;
private boolean useLowMemoryConsumption = false; private boolean useLowMemoryConsumption = false;
private transient double fromMetres = 1.0; private transient double fromMeters = 1.0;
public ParserConfiguration(int numberOfRoundingPlaces, boolean validate) { public ParserConfiguration(int numberOfRoundingPlaces, boolean validate) {
this(numberOfRoundingPlaces, validate, false); this(numberOfRoundingPlaces, validate, false);
...@@ -106,12 +106,12 @@ public class ParserConfiguration implements Serializable { ...@@ -106,12 +106,12 @@ public class ParserConfiguration implements Serializable {
return originalTransform; return originalTransform;
} }
public void setFromMetres(double d) { public void setFromMeters(double d) {
fromMetres = d; fromMeters = d;
} }
public double getFromMetres() { public double getFromMeters() {
return fromMetres; return fromMeters;
} }
public boolean useLowMemoryConsumption() { public boolean useLowMemoryConsumption() {
......
...@@ -59,12 +59,22 @@ public final class CityGmlUtils { ...@@ -59,12 +59,22 @@ public final class CityGmlUtils {
org.xmlobjects.gml.model.geometry.primitives.Polygon gmlPoly = new org.xmlobjects.gml.model.geometry.primitives.Polygon(); org.xmlobjects.gml.model.geometry.primitives.Polygon gmlPoly = new org.xmlobjects.gml.model.geometry.primitives.Polygon();
// exterior ring // exterior ring
LinearRing extLr = cdPoly.getExteriorRing(); LinearRing extLr = cdPoly.getExteriorRing();
if (extLr.getVertices().size() < 3) {
// this ring does not have enough points in it
// this leads to errors when exporting therefore ignore it
return null;
}
org.xmlobjects.gml.model.geometry.primitives.LinearRing gmlLr = createGmlRing(factory, config, extLr); org.xmlobjects.gml.model.geometry.primitives.LinearRing gmlLr = createGmlRing(factory, config, extLr);
gmlPoly.setExterior(new AbstractRingProperty(gmlLr)); gmlPoly.setExterior(new AbstractRingProperty(gmlLr));
// interior rings // interior rings
for (LinearRing lr : cdPoly.getInnerRings()) { for (LinearRing lr : cdPoly.getInnerRings()) {
gmlLr = createGmlRing(factory, config, lr); gmlLr = createGmlRing(factory, config, lr);
if (lr.getVertices().size() < 3) {
// this ring does not have enough points in it
// this leads to errors when exporting therefore ignore it
return null;
}
gmlPoly.getInterior().add(new AbstractRingProperty(gmlLr)); gmlPoly.getInterior().add(new AbstractRingProperty(gmlLr));
} }
gmlPoly.setId(cdPoly.getGmlId().getGmlString()); gmlPoly.setId(cdPoly.getGmlId().getGmlString());
...@@ -73,6 +83,7 @@ public final class CityGmlUtils { ...@@ -73,6 +83,7 @@ public final class CityGmlUtils {
public static org.xmlobjects.gml.model.geometry.primitives.LinearRing createGmlRing(GeometryFactory factory, public static org.xmlobjects.gml.model.geometry.primitives.LinearRing createGmlRing(GeometryFactory factory,
ParserConfiguration config, LinearRing lr) { ParserConfiguration config, LinearRing lr) {
ProjCoordinate p1 = new ProjCoordinate(); ProjCoordinate p1 = new ProjCoordinate();
ProjCoordinate p2 = new ProjCoordinate(); ProjCoordinate p2 = new ProjCoordinate();
List<Double> ringValues = new ArrayList<>(); List<Double> ringValues = new ArrayList<>();
...@@ -87,12 +98,13 @@ public final class CityGmlUtils { ...@@ -87,12 +98,13 @@ public final class CityGmlUtils {
trans.transform(p1, p2); trans.transform(p1, p2);
x = p2.x; x = p2.x;
y = p2.y; y = p2.y;
z = z * config.getFromMetres(); z = z * config.getFromMeters();
} }
ringValues.add(x); ringValues.add(x);
ringValues.add(y); ringValues.add(y);
ringValues.add(z); ringValues.add(z);
} }
org.xmlobjects.gml.model.geometry.primitives.LinearRing gmlLr = factory.createLinearRing(ringValues, 3); org.xmlobjects.gml.model.geometry.primitives.LinearRing gmlLr = factory.createLinearRing(ringValues, 3);
gmlLr.setId(lr.getGmlId().getGmlString()); gmlLr.setId(lr.getGmlId().getGmlString());
return gmlLr; return gmlLr;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>de.hft.stuttgart</groupId> <groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId> <artifactId>CityDoctorParent</artifactId>
<version>3.13.1</version> <version>3.14.0</version>
</parent> </parent>
<artifactId>CityDoctorValidation</artifactId> <artifactId>CityDoctorValidation</artifactId>
<name>CityDoctorValidation</name> <name>CityDoctorValidation</name>
......
...@@ -52,6 +52,7 @@ import de.hft.stuttgart.citydoctor2.checks.semantics.IsCeilingCheck; ...@@ -52,6 +52,7 @@ import de.hft.stuttgart.citydoctor2.checks.semantics.IsCeilingCheck;
import de.hft.stuttgart.citydoctor2.checks.semantics.IsFloorCheck; import de.hft.stuttgart.citydoctor2.checks.semantics.IsFloorCheck;
import de.hft.stuttgart.citydoctor2.checks.semantics.IsGroundCheck; import de.hft.stuttgart.citydoctor2.checks.semantics.IsGroundCheck;
import de.hft.stuttgart.citydoctor2.checks.semantics.IsWallCheck; import de.hft.stuttgart.citydoctor2.checks.semantics.IsWallCheck;
import de.hft.stuttgart.citydoctor2.checks.semantics.PolygonWithoutSurfaceCheck;
import de.hft.stuttgart.citydoctor2.checks.semantics.RoofSurfaceUnfragmentedCheck; import de.hft.stuttgart.citydoctor2.checks.semantics.RoofSurfaceUnfragmentedCheck;
import de.hft.stuttgart.citydoctor2.utils.Localization; import de.hft.stuttgart.citydoctor2.utils.Localization;
...@@ -110,6 +111,7 @@ public class Checks { ...@@ -110,6 +111,7 @@ public class Checks {
publish(new IsCeilingCheck()); publish(new IsCeilingCheck());
publish(new IsGroundCheck()); publish(new IsGroundCheck());
publish(new RoofSurfaceUnfragmentedCheck()); publish(new RoofSurfaceUnfragmentedCheck());
publish(new PolygonWithoutSurfaceCheck());
// load checks from service loader // load checks from service loader
ServiceLoader<Check> checkLoader = ServiceLoader.load(Check.class); ServiceLoader<Check> checkLoader = ServiceLoader.load(Check.class);
......
package de.hft.stuttgart.citydoctor2.checks.semantics;
import java.util.Collections;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.check.Check;
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.check.error.PolygonWithoutSurfaceError;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
public class PolygonWithoutSurfaceCheck extends Check {
@Override
public void check(Polygon poly) {
Lod lod = poly.getParent().getLod();
if (lod == Lod.LOD2 || lod == Lod.LOD3 || lod == Lod.LOD4) {
// only check LOD2-4
CheckResult cr;
if (poly.getPartOfSurface() == null) {
PolygonWithoutSurfaceError err = new PolygonWithoutSurfaceError(poly);
cr = new CheckResult(this, ResultStatus.ERROR, err);
} else {
cr = new CheckResult(this, ResultStatus.OK, null);
}
poly.addCheckResult(cr);
}
}
@Override
public Set<Requirement> appliesToRequirements() {
return Collections.singleton(Requirement.R_SE_POLYGON_WITHOUT_SURFACE);
}
@Override
public CheckId getCheckId() {
return CheckId.C_SE_POLYGON_WITHOUT_SURFACE;
}
@Override
public RequirementType getType() {
return RequirementType.SEMANTIC;
}
@Override
public Check createNewInstance() {
return new PolygonWithoutSurfaceCheck();
}
}