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 5beb83fe2cd48e7349a8207a4a2cb3646e449a61..3aaddd5af2721d568528b503a9451bf116e4d191 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) {