diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java index 0fb634c7260c4805e8abb909e6511f545b1b2292..c9847ba897362d823a6129188f67bb3a0913a747 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Geometry.java @@ -329,15 +329,15 @@ public class Geometry extends GmlElement { public void updateVertices() { Set<Vertex> vertexSet = new HashSet<>(); for (Polygon p : getPolygons()) { - updateRing(p, vertexSet, p.getExteriorRing()); + updateRing(vertexSet, p.getExteriorRing()); for (LinearRing inner : p.getInnerRings()) { - updateRing(p, vertexSet, inner); + updateRing(vertexSet, inner); } } vertices = new ArrayList<>(vertexSet); } - private void updateRing(Polygon p, Set<Vertex> vertexSet, LinearRing ring) { + private void updateRing(Set<Vertex> vertexSet, LinearRing ring) { for (Vertex v : ring.getVertices()) { if (vertexSet.add(v)) { // new vertex, clear adjacent rings in case new rings have been added @@ -413,6 +413,9 @@ public class Geometry extends GmlElement { @Override public void clearMetaInformation() { + for (Vertex v : vertices) { + v.clearAdjacentRings(); + } edges = null; vertices = null; edgeMap = null; diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vertex.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vertex.java index 43a0d1723c066fc896e3b827abec0bb1c0a6be14..b1730d404f6a4fb5e11dd07b8831e6b1de28c75d 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vertex.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/Vertex.java @@ -197,4 +197,11 @@ public class Vertex extends Vector3d { } return false; } + + /** + * Remove all adjacent rings from this vertex, ignoring geometry association + */ + void clearAdjacentRings() { + adjacentRings = new ArrayList<>(2); + } }