/*- * Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart * * This file is part of CityDoctor2. * * CityDoctor2 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CityDoctor2 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with CityDoctor2. If not, see . */ package de.hft.stuttgart.citydoctor2.datastructure; import org.citygml4j.factory.GMLGeometryFactory; import org.citygml4j.model.citygml.core.AbstractCityObject; import org.citygml4j.model.citygml.waterbody.WaterBody; import org.citygml4j.model.gml.geometry.aggregates.MultiSurface; import org.citygml4j.model.gml.geometry.aggregates.MultiSurfaceProperty; import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; /** * Represents cityGML water body objects. * * @author Matthias Betz * */ public class WaterObject extends CityObject { private static final long serialVersionUID = -3821060595086337424L; private WaterBody gmlWater; @Override public void reCreateGeometries(GMLGeometryFactory factory, ParserConfiguration config) { for (Geometry geom : getGeometries()) { if (geom.getType() == GeometryType.MULTI_SURFACE) { MultiSurface ms = CityGmlUtils.createMultiSurface(geom, factory, config); if (geom.getLod() == Lod.LOD0) { gmlWater.setLod0MultiSurface(new MultiSurfaceProperty(ms)); } else if (geom.getLod() == Lod.LOD1) { gmlWater.setLod1MultiSurface(new MultiSurfaceProperty(ms)); } else { throw new IllegalStateException( "Cannot add MultiSurface geometry with lod to WaterBody:" + geom.getLod()); } } else { throw new IllegalStateException("Cannot add Solid geometry to WaterBody"); } } } @Override public FeatureType getFeatureType() { return FeatureType.WATER; } @Override public void accept(Check c) { super.accept(c); if (c.canExecute(this)) { c.check(this); } } @Override public AbstractCityObject getGmlObject() { return gmlWater; } @Override public void unsetGmlGeometries() { gmlWater.unsetLod0MultiSurface(); gmlWater.unsetLod1MultiSurface(); gmlWater.unsetLod1Solid(); gmlWater.unsetLod2Solid(); gmlWater.unsetLod3Solid(); gmlWater.unsetLod4Solid(); } public void setGmlObject(WaterBody waterBody) { gmlWater = waterBody; } @Override public String toString() { return "WaterObject [id=" + getGmlId() + "]"; } }