Commit 604fc47d authored by Beuster's avatar Beuster
Browse files

Add TestExampleAABB

Test for model with Error RingSelfInt. Gets Vertices and BoundingBox
parent 3d6aafce
Pipeline #11355 passed with stage
in 1 minute and 35 seconds
/*-
* Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.check;
import java.util.Collections;
import java.util.Set;
/**
*
* This class serves as a Parent for non-validating checks that want to use the CheckEngine's Visitor-pattern for the
* implementation of utility functions like e.g. collecting the sub-CityObjects in a Feature.
*
*
* @author Matthias Betz
*
*/
public abstract class AbstractCheck extends Check {
@Override
public Set<Requirement> appliesToRequirements() {
return Collections.emptySet();
}
@Override
public CheckId getCheckId() {
return null;
}
@Override
public RequirementType getType() {
return null;
}
@Override
public Check createNewInstance() {
return null;
}
@Override
public final boolean isValidator() {
return false;
}
}
package de.hft.stuttgart.citydoctor2.utils.visitors.bht;
import de.hft.stuttgart.citydoctor2.check.AbstractVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import java.util.HashSet;
import java.util.Set;
/**
* This Visitor collects all sub-CityObjects that are in the datastructure of a CityObject (including itself) in a Set.
*/
public class PolygonCollector extends AbstractVisitor {
// private final Set<CityObject> objects = new HashSet<>();
//
// /**
// * Returns the collected CityObjects.
// *
// * @return A set of CityObjects
// */
// public Set<CityObject> getCityObjects() {
// return objects;
// }
//
// @Override
// public void check(CityObject co) {
// objects.add(co);
// }
}
package de.hft.stuttgart.citydoctor2.healer.bht; package de.hft.stuttgart.citydoctor2.healer.bht;
import de.hft.stuttgart.citydoctor2.datastructure.Edge;
import de.hft.stuttgart.citydoctor2.math.Edge2d;
public class SplitCutTriple { public class SplitCutTriple {
// public static void main(String[] args) { // public static void main(String[] args) {
...@@ -7,15 +10,15 @@ public class SplitCutTriple { ...@@ -7,15 +10,15 @@ public class SplitCutTriple {
// //
// } // }
// public Face pFace_left; // public Face Face_left;
// public Edge pEdge_left; public Edge Edge_left;
// public Face pFace_center; // public Face Face_center;
// public Edge pEdge_rigth; public Edge Edge_rigth;
// public Face pFace_rigth; // public Face Face_rigth;
//
// public boolean equalsTo(SplitCutTriple st) // public boolean equalsTo(SplitCutTriple st)
// { // {
// if (st.pFace_center == pFace_center) // if (st.Face_center == Face_center)
// { // {
// return true; // return true;
// } // }
......
...@@ -3,22 +3,28 @@ package de.hft.stuttgart.citydoctor2.healing.bht; ...@@ -3,22 +3,28 @@ package de.hft.stuttgart.citydoctor2.healing.bht;
import java.io.IOException; import java.io.IOException;
//import java.io.InputStream; //new //import java.io.InputStream; //new
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.Scanner; //new import java.util.Scanner; //new
import org.junit.Test; import org.junit.Test;
import de.hft.stuttgart.citydoctor2.check.AbstractVisitor; import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.CheckableVisitor;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration; import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
import de.hft.stuttgart.citydoctor2.datastructure.Building; import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel; import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon; import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.exceptions.CityDoctorWriteException; import de.hft.stuttgart.citydoctor2.exceptions.CityDoctorWriteException;
import de.hft.stuttgart.citydoctor2.healing.TestUtil; import de.hft.stuttgart.citydoctor2.healing.TestUtil;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException; import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
...@@ -34,106 +40,195 @@ public class TestExample { ...@@ -34,106 +40,195 @@ public class TestExample {
System.out.println("Start TestExample... \n"); //new System.out.println("Start TestExample... \n"); //new
// String path = args[0]; // String path = args[0];
// String path = "src/test/resources/SimpleSolid_SrefBS.gml"; //new // String path = "src/test/resources/SimpleSolid_SrefBS.gml"; //new valid LoD2 model
String path = "src/test/resources/TestBuilding1.gml"; //new // String path = "src/test/resources/TestBuilding1.gml"; //new block model
String path = "src/test/resources/bht/SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml"; //new valid model with inner rings
// String path = "src/test/resources/bht/KreishausFeuerwache.gml"; // too big, main gets terminated
// String path = "src/test/resources/bht/TestBuilding_SelfInt.gml";
ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig(); ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig();
CityDoctorModel model = TestUtil.loadCityModel(path, config); CityDoctorModel model = TestUtil.loadCityModel(path, config);
System.out.println("\nModel has been loaded..."); //new System.out.println("\nModel has been loaded..."); //new
// //inside class Geometry
// @Override
// public void accept(Check c) {
// super.accept(c);
// if (c.canExecute(this)) {
// c.check(this);
// }
// for (Polygon p : polygons) {
// p.accept(c);
// }
// }
// visitor // visitor
// filter duplicate polygons out // filter duplicate polygons out
Set<ConcretePolygon> allBuildingPolygons = new HashSet<>(); Set<ConcretePolygon> allBuildingPolygons = new HashSet<>();
for (Building b : model.getBuildings()) { for (Building b : model.getBuildings()) {
b.accept(new AbstractVisitor() { b.accept(new CheckableUtilsVisitor() {
public void check(Polygon poly) { public void check(Polygon poly) {
allBuildingPolygons.add(poly.getOriginal()); allBuildingPolygons.add(poly.getOriginal());
} }
}); });
} }
System.out.println("\nConcretePolygon HashSet elements:" + allBuildingPolygons); //new System.out.println("\nPolygons via visitor:" + allBuildingPolygons); //new
// for loop // // for loop
List<Polygon> allBuildingPolygons2 = new ArrayList<>(); // List<Polygon> allBuildingPolygons2 = new ArrayList<>();
// for (Building b : model.getBuildings()) {
// for (Geometry geom : b.getGeometries()) {
// for (Polygon p : geom.getPolygons()) {
// allBuildingPolygons2.add(p);
//// allBuildingPolygons2.add(p.getOriginal()); //new
// }
// }
// }
// System.out.println("\nPolygon List:" + allBuildingPolygons2); //new
// new: LinearRings
// visitor
// filter duplicate linear rings out
Set<LinearRing> allBuildingLinearRings = new HashSet<>();
for (Building b : model.getBuildings()) { for (Building b : model.getBuildings()) {
for (Geometry geom : b.getGeometries()) { b.accept(new CheckableUtilsVisitor() {
for (Polygon p : geom.getPolygons()) { public void check(LinearRing ring) {
allBuildingPolygons2.add(p); allBuildingLinearRings.add(ring);
}
});
} }
System.out.println("\nLinearRings via visitor:" + allBuildingLinearRings); //new
// new: ExteriorRings
// visitor
// filter duplicate exterior rings out
Set<LinearRing> allBuildingExteriorRings = new HashSet<>();
for (Building b : model.getBuildings()) {
b.accept(new CheckableUtilsVisitor() {
public void check(LinearRing ring) {
allBuildingExteriorRings.add(ring.getParent().getExteriorRing());
} }
});
} }
System.out.println("\nPolygon List:" + allBuildingPolygons2); //new System.out.println("\nExteriorRings via visitor:" + allBuildingExteriorRings); //new
// //inside class ConcretePolygon
// @Override // // new: ExteriorRings (List)
// public void accept(Check c) { // // for loop
// super.accept(c); // List<LinearRing> allBuildingExteriorRings2 = new ArrayList<>();
// if (c.canExecute(this)) { // for (Building b : model.getBuildings()) {
// c.check(this); // for (Geometry geom : b.getGeometries()) {
// } // for (Polygon p : geom.getPolygons()) {
// if (exterior != null) { // allBuildingExteriorRings2.add(p.getOriginal().getExteriorRing());
// exterior.accept(c);
// }
// if (innerRings != null) {
// for (LinearRing lr : innerRings) {
// lr.accept(c);
// } // }
// } // }
// } // }
// System.out.println("\nExteriorRing List:" + allBuildingExteriorRings2); //new
// new: InnerRings
// visitor // visitor
// filter duplicate polygons out // filter duplicate inner rings out
Set<ConcretePolygon> allBuildingInnerRings = new HashSet<>(); Set<LinearRing> allBuildingInnerRings = new HashSet<>();
for (Building b : model.getBuildings()) { for (Building b : model.getBuildings()) {
b.accept(new AbstractVisitor() { b.accept(new CheckableUtilsVisitor() {
public void check(Polygon poly) { public void check(Polygon poly) {
allBuildingInnerRings.add(poly.getOriginal()); allBuildingInnerRings.addAll(poly.getOriginal().getInnerRings());
} }
}); });
} }
System.out.println("\nConcretePolygon HashSet elements:" + allBuildingInnerRings); //new System.out.println("\nInnerRings via visitor:" + allBuildingInnerRings); //new
// new: LinearRing from ConcretePolygon // // new: InnerRings (List)
// for loop // // for loop
List<LinearRing> allBuildingInnerRings2 = new ArrayList<>(); // List<LinearRing> allBuildingInnerRings2 = new ArrayList<>();
for (Building b : model.getBuildings()) { // for (Building b : model.getBuildings()) {
for (Geometry geom : b.getGeometries()) { // for (Geometry geom : b.getGeometries()) {
for (Polygon p : geom.getPolygons()) { // for (Polygon p : geom.getPolygons()) {
for (LinearRing lr : p.getInnerRings()) { // for (LinearRing lr : p.getInnerRings()) {
allBuildingInnerRings2.add(lr); // allBuildingInnerRings2.add(lr);
} // }
//
// }
// }
// }
// System.out.println("\nInnerRing List:" + allBuildingInnerRings2); //new
// for (LinearRing extRing : p.getExteriorRing()) { // // get Vertices for LinearRing, ExteriorRing and InteriorRing
//allBuildingInnerRings.add(extRing);
// for (LinearRing lr : extRing.getLinearRings()) { // // new: LinearRingVertices
// allBuildingInnerRings.add(lr); // // visitor
// // filter duplicate linear rings out
// Set<Vertex> allBuildingLinearRingVertices = new HashSet<>();
// for (Building b : model.getBuildings()) {
// b.accept(new CheckableUtilsVisitor() {
// public void check(LinearRing ring) {
// allBuildingLinearRingVertices.addAll(ring.getVertices());
// } // }
//
// });
// } // }
} // System.out.println("\nLinearRingVertices via visitor:" + allBuildingLinearRingVertices); //new
}
}
System.out.println("\nInnerRing List:" + allBuildingInnerRings2); //new // // new: ExteriorRingVertices
// // visitor
// // filter duplicate exterior rings out
// Set<Vertex> allBuildingExteriorRingVertices = new HashSet<>();
// for (Building b : model.getBuildings()) {
// b.accept(new CheckableUtilsVisitor() {
// public void check(LinearRing ring) {
// allBuildingExteriorRingVertices.addAll(ring.getParent().getOriginal().getExteriorRing().getVertices());
// }
//
// });
// }
// System.out.println("\nExteriorRingVertices via visitor:" + allBuildingExteriorRingVertices); //new
}
// //@Test // // new: ExteriorRingVertices (List)
// public void testMain() throws CityGmlParseException, IOException, InvalidGmlFileException { // // for loop
// TestExample.main(new String[]{}); // List<Vertex> allBuildingExteriorRingVertices2 = new ArrayList<>();
// for (Building b : model.getBuildings()) {
// for (Geometry geom : b.getGeometries()) {
// for (Polygon p : geom.getPolygons()) {
// for (Vertex v : p.getOriginal().getExteriorRing().getVertices()) {
// allBuildingExteriorRingVertices2.add(v);
// } // }
// }
// }
// }
// System.out.println("\nExteriorRingVertices List:" + allBuildingExteriorRingVertices2); //new
// // new: InnerRingVertices
// // visitor
// // filter duplicate linear vertices out
// Set<Vertex> allBuildingInnerRingVertices = new HashSet<>();
// for (Building b : model.getBuildings()) {
// b.accept(new CheckableUtilsVisitor() {
// public void check(Polygon poly) {
// poly.getOriginal().getInnerRings().forEach(ring->allBuildingInnerRingVertices.addAll(ring.getVertices()));
// }
// });
// }
// System.out.println("\nInnerRingVertices via visitor:" + allBuildingInnerRingVertices); //new
// // new: InnerRingVertices (List)
// // for loop
// List<Vertex> allInnerRingVertices2 = new ArrayList<>();
// for (Building b : model.getBuildings()) {
// for (Geometry geom : b.getGeometries()) {
// for (Polygon p : geom.getPolygons()) {
// for (LinearRing lr : p.getInnerRings()) {
// for (Vertex v : lr.getVertices()) {
// allInnerRingVertices2.add(v);
// }
// }
//
// }
// }
// }
// System.out.println("\nInnerRingVertices List:" + allInnerRingVertices2); //new
// // TODO: HashMap to show Ring and gmlId
// Map<LinearRing, Set<Vertex>> test = new HashMap<>();
}
} }
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