diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java index 9824513ce88235ed9a502862d2f63775fcbf8be6..28341a4c7a6a45baad8b54c38dc34d1b211371ff 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TrafficAreaObject.java @@ -8,7 +8,6 @@ import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; -import java.util.List; public class TrafficAreaObject extends TransportationObject { @@ -74,6 +73,12 @@ public class TrafficAreaObject extends TransportationObject { private void setMultiSurfaceAccordingToLod(TrafficArea ta, MultiSurface ms, Lod lod) { switch (lod) { + case LOD0: + ta.setLod0MultiSurface(new MultiSurfaceProperty(ms)); + break; + case LOD1: + ta.setLod1MultiSurface(new MultiSurfaceProperty(ms)); + break; case LOD2: ta.setLod2MultiSurface(new MultiSurfaceProperty(ms)); break; diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpace.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpace.java index db66a3898e157b9b18e0dc56c06d0d2b6d7ac7a2..c2c73715c8eea13f3a1c274e5016cd33c9c03e21 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpace.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TransportationSpace.java @@ -8,6 +8,7 @@ import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.Copyable; import org.citygml4j.core.model.core.AbstractSpace; +import org.citygml4j.core.model.transportation.AbstractTransportationSpace; import org.citygml4j.core.util.geometry.GeometryFactory; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; @@ -48,8 +49,12 @@ public abstract class TransportationSpace extends TransportationObject { } if (geom.getType() == GeometryType.MULTI_SURFACE) { MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); - AbstractSpace ats = (AbstractSpace) super.getGmlObject(); - setMultiSurfaceAccordingToLod(ats, ms, geom.getLod()); + if (super.getGmlObject() instanceof AbstractTransportationSpace ats) { + setMultiSurfaceAccordingToLod(ats, ms, geom.getLod()); + } else { + AbstractSpace as = (AbstractSpace) super.getGmlObject(); + setMultiSurfaceAccordingToLod(as, ms, geom.getLod()); + } } else { throw new IllegalStateException("Geometry in TransportationObject cannot be of type " + geom.getType() + ". Only MultiSurface allowed"); @@ -63,16 +68,28 @@ public abstract class TransportationSpace extends TransportationObject { } } - private void setMultiSurfaceAccordingToLod(AbstractSpace ats, MultiSurface ms, Lod lod) { + private void setMultiSurfaceAccordingToLod(AbstractTransportationSpace ats, MultiSurface ms, Lod lod) { + switch (lod) { + case LOD0 -> ats.setLod0MultiSurface(new MultiSurfaceProperty(ms)); + case LOD1 -> ats.getDeprecatedProperties().setLod1MultiSurface(new MultiSurfaceProperty(ms)); + case LOD2 -> ats.setLod2MultiSurface(new MultiSurfaceProperty(ms)); + case LOD3 -> ats.setLod3MultiSurface(new MultiSurfaceProperty(ms)); + case LOD4 -> ats.getDeprecatedProperties().setLod4MultiSurface(new MultiSurfaceProperty(ms)); + default -> + throw new IllegalStateException("cannot set geometry with LOD for AuxiliaryTrafficSpace: " + lod); + } + } + + private void setMultiSurfaceAccordingToLod(AbstractSpace as, MultiSurface ms, Lod lod) { switch (lod) { case LOD0: - ats.setLod0MultiSurface(new MultiSurfaceProperty(ms)); + as.setLod0MultiSurface(new MultiSurfaceProperty(ms)); break; case LOD2: - ats.setLod2MultiSurface(new MultiSurfaceProperty(ms)); + as.setLod2MultiSurface(new MultiSurfaceProperty(ms)); break; case LOD3: - ats.setLod3MultiSurface(new MultiSurfaceProperty(ms)); + as.setLod3MultiSurface(new MultiSurfaceProperty(ms)); break; default: throw new IllegalStateException("cannot set geometry with LOD for AuxiliaryTrafficSpace: " + lod);