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
...@@ -25,6 +25,7 @@ import java.util.Set; ...@@ -25,6 +25,7 @@ import java.util.Set;
import org.junit.Test; import org.junit.Test;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.math.Vector3d;
...@@ -46,7 +47,7 @@ public class VertexTest { ...@@ -46,7 +47,7 @@ public class VertexTest {
@Test @Test
public void testGetAdjacentRings() { public void testGetAdjacentRings() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
...@@ -64,7 +65,7 @@ public class VertexTest { ...@@ -64,7 +65,7 @@ public class VertexTest {
@Test(expected = IllegalStateException.class) @Test(expected = IllegalStateException.class)
public void testGetAdjacentRingsGeometryNotContainingVertex() { public void testGetAdjacentRingsGeometryNotContainingVertex() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
......
package de.hft.stuttgart.citydoctor2.datastructure; package de.hft.stuttgart.citydoctor2.datastructure;
import de.hft.stuttgart.citydoctor2.check.AbstractCheck; import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.CheckResult;
...@@ -33,7 +33,7 @@ public class WaterTest { ...@@ -33,7 +33,7 @@ public class WaterTest {
water.addBoundarySurface(bsMock); water.addBoundarySurface(bsMock);
water.addBoundarySurface(bsMock2); water.addBoundarySurface(bsMock2);
AbstractCheck c = new AbstractCheck() { CheckableUtilsVisitor c = new CheckableUtilsVisitor() {
}; };
water.accept(c); water.accept(c);
......
...@@ -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.17.2</version> <version>3.17.3</version>
</parent> </parent>
<artifactId>CityDoctorValidation</artifactId> <artifactId>CityDoctorValidation</artifactId>
<name>CityDoctorValidation</name> <name>CityDoctorValidation</name>
......
...@@ -264,6 +264,8 @@ public class Checker { ...@@ -264,6 +264,8 @@ public class Checker {
DefaultParameter defaultP = getDefaultParameter(e.getKey(), reqs, param.getKey()); DefaultParameter defaultP = getDefaultParameter(e.getKey(), reqs, param.getKey());
if (defaultP != null) { if (defaultP != null) {
p.setUom(defaultP.getUnitType().getGmlRepresentation()); p.setUom(defaultP.getUnitType().getGmlRepresentation());
} else {
p.setUom("");
} }
p.setName(param.getKey()); p.setName(param.getKey());
p.setValue(param.getValue()); p.setValue(param.getValue());
...@@ -280,22 +282,29 @@ public class Checker { ...@@ -280,22 +282,29 @@ public class Checker {
correct.setEnabled(config.getSchematronFilePath() != null); correct.setEnabled(config.getSchematronFilePath() != null);
plan.getRequirements().add(new RequirementProperty(missing)); plan.getRequirements().add(new RequirementProperty(missing));
plan.getRequirements().add(new RequirementProperty(correct)); plan.getRequirements().add(new RequirementProperty(correct));
de.hft.stuttgart.quality.model.types.GlobalParameters globParams = new de.hft.stuttgart.quality.model.types.GlobalParameters();
plan.setGlobalParameters(new GlobalParametersProperty(globParams));
Parameter numRounding = new Parameter(); Parameter numRounding = new Parameter();
numRounding.setName("numberOfRoundingPlaces"); numRounding.setName("numberOfRoundingPlaces");
numRounding.setUom("amount");
numRounding.setValue("" + config.getNumberOfRoundingPlaces()); numRounding.setValue("" + config.getNumberOfRoundingPlaces());
globParams.getParameters().add(new ParameterProperty(numRounding));
Parameter minVertexDistance = new Parameter(); Parameter minVertexDistance = new Parameter();
minVertexDistance.setName("minVertexDistance"); minVertexDistance.setName("minVertexDistance");
minVertexDistance.setUom("m"); minVertexDistance.setUom("m");
minVertexDistance.setValue("" + config.getMinVertexDistance()); minVertexDistance.setValue("" + config.getMinVertexDistance());
Parameter schematronFile = new Parameter();
schematronFile.setName("schematronFile");
schematronFile.setValue(config.getSchematronFilePath());
de.hft.stuttgart.quality.model.types.GlobalParameters globParams = new de.hft.stuttgart.quality.model.types.GlobalParameters();
plan.setGlobalParameters(new GlobalParametersProperty(globParams));
globParams.getParameters().add(new ParameterProperty(numRounding));
globParams.getParameters().add(new ParameterProperty(minVertexDistance)); globParams.getParameters().add(new ParameterProperty(minVertexDistance));
globParams.getParameters().add(new ParameterProperty(schematronFile));
if (config.getSchematronFilePath() != null) {
Parameter schematronFile = new Parameter();
schematronFile.setName("schematronFile");
schematronFile.setUom("path");
schematronFile.setValue(config.getSchematronFilePath());
globParams.getParameters().add(new ParameterProperty(schematronFile));
}
return plan; return plan;
} }
...@@ -620,6 +629,9 @@ public class Checker { ...@@ -620,6 +629,9 @@ public class Checker {
private void checkCityModel(CityDoctorModel model, ProgressListener l) { private void checkCityModel(CityDoctorModel model, ProgressListener l) {
Stream<CityObject> features = model.createFeatureStream(); Stream<CityObject> features = model.createFeatureStream();
float featureSum = model.getNumberOfFeatures(); float featureSum = model.getNumberOfFeatures();
// clear global errors
model.getGlobalErrors().clear();
// stupid lamda with final variable restrictions // stupid lamda with final variable restrictions
int[] currentFeature = new int[1]; int[] currentFeature = new int[1];
features.forEach(co -> { features.forEach(co -> {
...@@ -887,9 +899,6 @@ public class Checker { ...@@ -887,9 +899,6 @@ public class Checker {
* @param co the city object to be checked * @param co the city object to be checked
*/ */
public void checkFeature(XmlStreamReporter xmlReporter, PdfStreamReporter pdfReporter, CityObject co) { public void checkFeature(XmlStreamReporter xmlReporter, PdfStreamReporter pdfReporter, CityObject co) {
if (logger.isDebugEnabled()) {
logger.debug(Localization.getText("Checker.checkFeature"), co);
}
executeChecksForCityObject(co); executeChecksForCityObject(co);
if (xmlReporter != null) { if (xmlReporter != null) {
xmlReporter.report(co); xmlReporter.report(co);
......
...@@ -29,11 +29,6 @@ import java.util.Set; ...@@ -29,11 +29,6 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractTunnel;
import de.hft.stuttgart.citydoctor2.datastructure.CityFurniture;
import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.citygml4j.core.model.core.AbstractFeatureProperty; import org.citygml4j.core.model.core.AbstractFeatureProperty;
import org.citygml4j.core.model.core.CityModel; import org.citygml4j.core.model.core.CityModel;
import org.citygml4j.core.util.geometry.GeometryFactory; import org.citygml4j.core.util.geometry.GeometryFactory;
...@@ -42,9 +37,12 @@ import org.xmlobjects.gml.model.base.Reference; ...@@ -42,9 +37,12 @@ import org.xmlobjects.gml.model.base.Reference;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError; import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.checks.SvrlContentHandler; import de.hft.stuttgart.citydoctor2.checks.SvrlContentHandler;
import de.hft.stuttgart.citydoctor2.checks.util.FeatureCheckedListener; import de.hft.stuttgart.citydoctor2.checks.util.FeatureCheckedListener;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractTunnel;
import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject; import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject;
import de.hft.stuttgart.citydoctor2.datastructure.Building; import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.CityFurniture;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject; import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject;
import de.hft.stuttgart.citydoctor2.datastructure.LandObject; import de.hft.stuttgart.citydoctor2.datastructure.LandObject;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject; import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation; import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
...@@ -64,8 +62,6 @@ import de.hft.stuttgart.quality.model.types.ValidationPlan; ...@@ -64,8 +62,6 @@ import de.hft.stuttgart.quality.model.types.ValidationPlan;
public class StreamCityGmlConsumer implements CityGmlConsumer { public class StreamCityGmlConsumer implements CityGmlConsumer {
private static final Logger logger = LogManager.getLogger(StreamCityGmlConsumer.class);
private final Checker c; private final Checker c;
private final XmlStreamReporter xmlReporter; private final XmlStreamReporter xmlReporter;
private final PdfStreamReporter pdfReporter; private final PdfStreamReporter pdfReporter;
...@@ -82,7 +78,7 @@ public class StreamCityGmlConsumer implements CityGmlConsumer { ...@@ -82,7 +78,7 @@ public class StreamCityGmlConsumer implements CityGmlConsumer {
private final FeatureStatistics waterStatistics; private final FeatureStatistics waterStatistics;
private final Validation val; private final Validation val;
private final FeatureCheckedListener l; private final FeatureCheckedListener l;
public StreamCityGmlConsumer(Checker c, XmlStreamReporter xmlReporter, PdfStreamReporter pdfReporter, public StreamCityGmlConsumer(Checker c, XmlStreamReporter xmlReporter, PdfStreamReporter pdfReporter,
SvrlContentHandler handler, ValidationConfiguration config, FeatureCheckedListener l) { SvrlContentHandler handler, ValidationConfiguration config, FeatureCheckedListener l) {
this.c = c; this.c = c;
...@@ -116,10 +112,6 @@ public class StreamCityGmlConsumer implements CityGmlConsumer { ...@@ -116,10 +112,6 @@ public class StreamCityGmlConsumer implements CityGmlConsumer {
@Override @Override
public void accept(CityObject co) { public void accept(CityObject co) {
if (logger.isDebugEnabled()) {
logger.debug(Localization.getText("Checker.checkFeature"), co);
}
// check without reporters, nothing will be put into the reports like that // check without reporters, nothing will be put into the reports like that
// this will also clear old check results if any (though in stream mode there // this will also clear old check results if any (though in stream mode there
// won't be any) // won't be any)
......
...@@ -35,6 +35,7 @@ import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils; ...@@ -35,6 +35,7 @@ import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType; import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.math.Ray; import de.hft.stuttgart.citydoctor2.math.Ray;
import de.hft.stuttgart.citydoctor2.math.Triangle3d; import de.hft.stuttgart.citydoctor2.math.Triangle3d;
import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.math.Vector3d;
...@@ -76,6 +77,10 @@ public class AllPolygonsWrongOrientationCheck extends Check { ...@@ -76,6 +77,10 @@ public class AllPolygonsWrongOrientationCheck extends Check {
return; return;
} }
boolean isOutwardOriented = geometryIsOutwardOrientedJava(g); boolean isOutwardOriented = geometryIsOutwardOrientedJava(g);
// invert outward direction for inward facing geometries
if (g.getOrientation() == Orientation.INWARD) {
isOutwardOriented = !isOutwardOriented;
}
CheckResult cr; CheckResult cr;
if (isOutwardOriented) { if (isOutwardOriented) {
cr = new CheckResult(this, ResultStatus.OK, null); cr = new CheckResult(this, ResultStatus.OK, null);
......
...@@ -41,6 +41,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; ...@@ -41,6 +41,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.quality.model.enums.RequirementId; import de.hft.stuttgart.quality.model.enums.RequirementId;
...@@ -48,7 +49,7 @@ public class DegeneratedPolygonCheckTest { ...@@ -48,7 +49,7 @@ public class DegeneratedPolygonCheckTest {
@Test @Test
public void testDegeneratedPolygon() { public void testDegeneratedPolygon() {
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1); Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1, Orientation.OUTWARD);
ConcretePolygon polygon = new ConcretePolygon(); ConcretePolygon polygon = new ConcretePolygon();
geom.getPolygons().add(polygon); geom.getPolygons().add(polygon);
polygon.setParent(geom); polygon.setParent(geom);
......
...@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -90,7 +91,7 @@ public class DuplicatePointsCheckTest { ...@@ -90,7 +91,7 @@ public class DuplicatePointsCheckTest {
@Test @Test
public void testCheckSelfInt() { public void testCheckSelfInt() {
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1); Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = new Vertex(1, 1, 1); Vertex v0 = new Vertex(1, 1, 1);
Vertex v1 = new Vertex(2, 2, 2); Vertex v1 = new Vertex(2, 2, 2);
Vertex v2 = new Vertex(3, 3, 3); Vertex v2 = new Vertex(3, 3, 3);
......
...@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -40,7 +41,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex; ...@@ -40,7 +41,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
public class FaceOutCheckTest { public class FaceOutCheckTest {
private Geometry createBadGeometry() { private Geometry createBadGeometry() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = createVertex(0, 0, 0, geom); Vertex v0 = createVertex(0, 0, 0, geom);
Vertex v1 = createVertex(10, 0, 0, geom); Vertex v1 = createVertex(10, 0, 0, geom);
...@@ -62,7 +63,7 @@ public class FaceOutCheckTest { ...@@ -62,7 +63,7 @@ public class FaceOutCheckTest {
} }
private Geometry createGoodGeometry() { private Geometry createGoodGeometry() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = createVertex(0, 0, 0, geom); Vertex v0 = createVertex(0, 0, 0, geom);
Vertex v1 = createVertex(10, 0, 0, geom); Vertex v1 = createVertex(10, 0, 0, geom);
......
...@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -43,7 +44,7 @@ public class HoleOutsideCheckTest { ...@@ -43,7 +44,7 @@ public class HoleOutsideCheckTest {
@Test @Test
public void testHoleOutside() { public void testHoleOutside() {
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1); Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
...@@ -79,7 +80,7 @@ public class HoleOutsideCheckTest { ...@@ -79,7 +80,7 @@ public class HoleOutsideCheckTest {
@Test @Test
public void testPolygonGood() { public void testPolygonGood() {
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1); Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
......
...@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -44,7 +45,7 @@ public class InteriorDisconnectedCheckTest { ...@@ -44,7 +45,7 @@ public class InteriorDisconnectedCheckTest {
*/ */
@Test @Test
public void testBadPolygon1() { public void testBadPolygon1() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
...@@ -89,7 +90,7 @@ public class InteriorDisconnectedCheckTest { ...@@ -89,7 +90,7 @@ public class InteriorDisconnectedCheckTest {
*/ */
@Test @Test
public void testBadPolygon2() { public void testBadPolygon2() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
...@@ -145,7 +146,7 @@ public class InteriorDisconnectedCheckTest { ...@@ -145,7 +146,7 @@ public class InteriorDisconnectedCheckTest {
*/ */
@Test @Test
public void testBadPolygon3() { public void testBadPolygon3() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
...@@ -213,7 +214,7 @@ public class InteriorDisconnectedCheckTest { ...@@ -213,7 +214,7 @@ public class InteriorDisconnectedCheckTest {
*/ */
@Test @Test
public void testGoodPolygon3() { public void testGoodPolygon3() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
...@@ -274,7 +275,7 @@ public class InteriorDisconnectedCheckTest { ...@@ -274,7 +275,7 @@ public class InteriorDisconnectedCheckTest {
@Test @Test
public void testGoodPolygon2() { public void testGoodPolygon2() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
......
...@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry; ...@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType; import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -41,7 +42,7 @@ public class ManifoldVertexCheckTest { ...@@ -41,7 +42,7 @@ public class ManifoldVertexCheckTest {
@Test @Test
public void testNonManifoldVertex() { public void testNonManifoldVertex() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v12 = createVertex(10, 10, 3, geom); Vertex v12 = createVertex(10, 10, 3, geom);
Vertex v13 = createVertex(10, 10, 0, geom); Vertex v13 = createVertex(10, 10, 0, geom);
......
...@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -43,7 +44,7 @@ public class NestedRingsCheckTest { ...@@ -43,7 +44,7 @@ public class NestedRingsCheckTest {
@Test @Test
public void testNestedRings() { public void testNestedRings() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
...@@ -90,7 +91,7 @@ public class NestedRingsCheckTest { ...@@ -90,7 +91,7 @@ public class NestedRingsCheckTest {
@Test @Test
public void testPolygonGood() { public void testPolygonGood() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
......
...@@ -29,6 +29,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -29,6 +29,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -38,7 +39,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex; ...@@ -38,7 +39,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
public class NullAreaCheckTest { public class NullAreaCheckTest {
private LinearRing setupValidGeometry() { private LinearRing setupValidGeometry() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
...@@ -62,7 +63,7 @@ public class NullAreaCheckTest { ...@@ -62,7 +63,7 @@ public class NullAreaCheckTest {
} }
private LinearRing setupErrorGeometry() { private LinearRing setupErrorGeometry() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
geom.addPolygon(p); geom.addPolygon(p);
......
...@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -31,6 +31,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -41,7 +42,7 @@ public class PlanarCheckTest { ...@@ -41,7 +42,7 @@ public class PlanarCheckTest {
@Test @Test
public void testCheckPolygonOK() { public void testCheckPolygonOK() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = new Vertex(0, 0, 0); Vertex v0 = new Vertex(0, 0, 0);
Vertex v1 = new Vertex(0, 0, 1); Vertex v1 = new Vertex(0, 0, 1);
Vertex v2 = new Vertex(1, 0, 1); Vertex v2 = new Vertex(1, 0, 1);
...@@ -62,7 +63,7 @@ public class PlanarCheckTest { ...@@ -62,7 +63,7 @@ public class PlanarCheckTest {
@Test @Test
public void testCheckPolygonDistanceERROR() { public void testCheckPolygonDistanceERROR() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = new Vertex(0, 0, 0); Vertex v0 = new Vertex(0, 0, 0);
Vertex v1 = new Vertex(0, 0.06, 1); Vertex v1 = new Vertex(0, 0.06, 1);
Vertex v2 = new Vertex(1, 1, 1); Vertex v2 = new Vertex(1, 1, 1);
......
...@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -44,7 +45,7 @@ public class PolygonSameOrientationCheckTest { ...@@ -44,7 +45,7 @@ public class PolygonSameOrientationCheckTest {
@Test @Test
public void testSameOrientation() { public void testSameOrientation() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = GeometryTestUtils.createVertex(0, 0, 0, geom); Vertex v0 = GeometryTestUtils.createVertex(0, 0, 0, geom);
Vertex v1 = GeometryTestUtils.createVertex(6, 0, 0, geom); Vertex v1 = GeometryTestUtils.createVertex(6, 0, 0, geom);
...@@ -76,7 +77,7 @@ public class PolygonSameOrientationCheckTest { ...@@ -76,7 +77,7 @@ public class PolygonSameOrientationCheckTest {
@Test @Test
public void testGoodPoly() { public void testGoodPoly() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Vertex v0 = GeometryTestUtils.createVertex(0, 0, 0, geom); Vertex v0 = GeometryTestUtils.createVertex(0, 0, 0, geom);
Vertex v1 = GeometryTestUtils.createVertex(6, 0, 0, geom); Vertex v1 = GeometryTestUtils.createVertex(6, 0, 0, geom);
......
...@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -33,6 +33,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
/** /**
* *
...@@ -45,7 +46,7 @@ public class PolygonSelfIntCheckTest { ...@@ -45,7 +46,7 @@ public class PolygonSelfIntCheckTest {
@Test @Test
public void testPolygonInteriorIntersectExterior() { public void testPolygonInteriorIntersectExterior() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
...@@ -95,7 +96,7 @@ public class PolygonSelfIntCheckTest { ...@@ -95,7 +96,7 @@ public class PolygonSelfIntCheckTest {
@Test @Test
public void testPolygonGood() { public void testPolygonGood() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
...@@ -143,7 +144,7 @@ public class PolygonSelfIntCheckTest { ...@@ -143,7 +144,7 @@ public class PolygonSelfIntCheckTest {
@Test @Test
public void test2InteriorRingsIntersecting() { public void test2InteriorRingsIntersecting() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
...@@ -211,7 +212,7 @@ public class PolygonSelfIntCheckTest { ...@@ -211,7 +212,7 @@ public class PolygonSelfIntCheckTest {
@Test @Test
public void test2InteriorRingsNotIntersecting() { public void test2InteriorRingsNotIntersecting() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
......
...@@ -38,6 +38,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -38,6 +38,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
/** /**
...@@ -49,7 +50,7 @@ public class RingSelfIntCheckTest { ...@@ -49,7 +50,7 @@ public class RingSelfIntCheckTest {
@Test @Test
public void testIntersect() { public void testIntersect() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
...@@ -88,7 +89,7 @@ public class RingSelfIntCheckTest { ...@@ -88,7 +89,7 @@ public class RingSelfIntCheckTest {
@Test @Test
public void testNonIntersect() { public void testNonIntersect() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
...@@ -121,7 +122,7 @@ public class RingSelfIntCheckTest { ...@@ -121,7 +122,7 @@ public class RingSelfIntCheckTest {
@Test @Test
public void testTouching() { public void testTouching() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
...@@ -159,7 +160,7 @@ public class RingSelfIntCheckTest { ...@@ -159,7 +160,7 @@ public class RingSelfIntCheckTest {
@Test @Test
public void testNotTouching() { public void testNotTouching() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
......
...@@ -38,6 +38,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; ...@@ -38,6 +38,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
/** /**
...@@ -64,7 +65,7 @@ public class IsWallCheckTest { ...@@ -64,7 +65,7 @@ public class IsWallCheckTest {
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
p.setExteriorRing(lr); p.setExteriorRing(lr);
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2); Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geom.addPolygon(p); geom.addPolygon(p);
BoundarySurface bs = new BoundarySurface(null); BoundarySurface bs = new BoundarySurface(null);
...@@ -97,7 +98,7 @@ public class IsWallCheckTest { ...@@ -97,7 +98,7 @@ public class IsWallCheckTest {
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
p.setExteriorRing(lr); p.setExteriorRing(lr);
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2); Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geom.addPolygon(p); geom.addPolygon(p);
BoundarySurface bs = new BoundarySurface(null); BoundarySurface bs = new BoundarySurface(null);
...@@ -129,7 +130,7 @@ public class IsWallCheckTest { ...@@ -129,7 +130,7 @@ public class IsWallCheckTest {
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
p.setExteriorRing(lr); p.setExteriorRing(lr);
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2); Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geom.addPolygon(p); geom.addPolygon(p);
BoundarySurface bs = new BoundarySurface(null); BoundarySurface bs = new BoundarySurface(null);
...@@ -162,7 +163,7 @@ public class IsWallCheckTest { ...@@ -162,7 +163,7 @@ public class IsWallCheckTest {
Polygon p = new ConcretePolygon(); Polygon p = new ConcretePolygon();
p.setExteriorRing(lr); p.setExteriorRing(lr);
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2); Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD2, Orientation.OUTWARD);
geom.addPolygon(p); geom.addPolygon(p);
BoundarySurface bs = new BoundarySurface(null); BoundarySurface bs = new BoundarySurface(null);
......
...@@ -20,12 +20,13 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry; ...@@ -20,12 +20,13 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType; import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry.Orientation;
public class PolygonWithoutSurfaceCheckTest { public class PolygonWithoutSurfaceCheckTest {
@Test @Test
public void testPolygonWithoutSurface() { public void testPolygonWithoutSurface() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
geom.addPolygon(poly); geom.addPolygon(poly);
PolygonWithoutSurfaceCheck check = new PolygonWithoutSurfaceCheck(); PolygonWithoutSurfaceCheck check = new PolygonWithoutSurfaceCheck();
...@@ -44,7 +45,7 @@ public class PolygonWithoutSurfaceCheckTest { ...@@ -44,7 +45,7 @@ public class PolygonWithoutSurfaceCheckTest {
@Test @Test
public void testPolygonWithSurface() { public void testPolygonWithSurface() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD2, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
BoundarySurface bs = new BoundarySurface(null); BoundarySurface bs = new BoundarySurface(null);
bs.addGeometry(geom); bs.addGeometry(geom);
...@@ -61,7 +62,7 @@ public class PolygonWithoutSurfaceCheckTest { ...@@ -61,7 +62,7 @@ public class PolygonWithoutSurfaceCheckTest {
@Test @Test
public void testPolygonWithWrongLod() { public void testPolygonWithWrongLod() {
Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1, Orientation.OUTWARD);
Polygon poly = new ConcretePolygon(); Polygon poly = new ConcretePolygon();
BoundarySurface bs = new BoundarySurface(null); BoundarySurface bs = new BoundarySurface(null);
bs.addGeometry(geom); bs.addGeometry(geom);
......
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