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