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