From 15ef3d5e679ff7302d2572922a47f5ce40abd1fa Mon Sep 17 00:00:00 2001
From: Riegel <alexander.riegel@hft-stuttgart.de>
Date: Thu, 13 Mar 2025 14:13:37 +0100
Subject: [PATCH] Fix: Add new TransportationObject model to calculator

---
 .../utils/BoundingBoxCalculator.java          | 27 ++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/BoundingBoxCalculator.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/BoundingBoxCalculator.java
index 5beb83f..3aaddd5 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/BoundingBoxCalculator.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/BoundingBoxCalculator.java
@@ -26,6 +26,10 @@ import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
 import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
 import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
 import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
+import de.hft.stuttgart.citydoctor2.datastructure.TopLevelTransportFeature;
+import de.hft.stuttgart.citydoctor2.datastructure.TrafficSpaceObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
+import de.hft.stuttgart.citydoctor2.datastructure.TransportationSpace;
 import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
 import de.hft.stuttgart.citydoctor2.math.Vector3d;
 
@@ -98,12 +102,16 @@ public class BoundingBoxCalculator {
 		Vector3d low = new Vector3d(Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE);
 		Vector3d high = new Vector3d(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY);
 
+		//TODO: Rework this using visitors
 		findMinMax(low, high, model.getBuildings());
 		findMinMax(low, high, model.getBridges());
 		findMinMax(low, high, model.getLand());
-		findMinMax(low, high, model.getTransportation());
+		findMinMaxTransport(low, high, model.getTransportation());
 		findMinMax(low, high, model.getWater());
 		findMinMax(low, high, model.getVegetation());
+		findMinMax(low, high, model.getTunnels());
+		findMinMax(low, high, model.getCityFurniture());
+		findMinMax(low, high, model.getGenericCityObjects());
 
 		Vector3d[] result = new Vector3d[2];
 		result[0] = low;
@@ -151,6 +159,23 @@ public class BoundingBoxCalculator {
 		}
 	}
 
+	//TODO: Implement this properly with visitor. Quick and dirty fix for the renderer
+	private static void findMinMaxTransport(Vector3d low, Vector3d high, List<? extends TransportationObject> features) {
+		for (TransportationObject to : features) {
+			findMinMax(low, high, to);
+			if (to instanceof TransportationSpace ts) {
+				findMinMaxTransport(low, high, ts.getTrafficSpaces());
+				findMinMaxTransport(low, high, ts.getAuxTrafficSpaces());
+				if (to instanceof TopLevelTransportFeature top) {
+					findMinMaxTransport(low, high, top.getSections());
+					findMinMaxTransport(low, high, top.getIntersections());
+				}
+			} else if (to instanceof TrafficSpaceObject tso) {
+				findMinMaxTransport(low, high, tso.getTrafficAreas());
+			}
+		}
+	}
+
 	private static void findMinMax(Vector3d low, Vector3d high, CityObject co) {
 		for (Geometry geom : co.getGeometries()) {
 			if (geom.getVertices() == null) {
-- 
GitLab