From 0a7d629938a3e0332e415f30b8fa6500a15bd602 Mon Sep 17 00:00:00 2001 From: Matthias Betz <matthias.betz@hft-stuttgart.de> Date: Thu, 26 Nov 2020 16:01:07 +0100 Subject: [PATCH] clearing adjacency list if unneeded, improving memory management --- .../stuttgart/citydoctor2/datastructure/Geometry.java | 9 ++++++--- .../hft/stuttgart/citydoctor2/datastructure/Vertex.java | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) 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 0fb634c..c9847ba 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 43a0d17..b1730d4 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); + } } -- GitLab