/*-
* 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 java.util.List;
import java.util.Map;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon;
/**
* A polygon that does not contain the geometry but is only a link to an actual
* polygon. Created when href in CityGML are used.
*
* @author Matthias Betz
*
*/
public class LinkedPolygon extends Polygon {
private static final long serialVersionUID = -4897578390280277931L;
private Geometry parent;
private ConcretePolygon poly;
/**
*
* @param poly polygon this is linked to
* @param parent the parent of the linked polygon
*/
public LinkedPolygon(ConcretePolygon poly, Geometry parent) {
this.parent = parent;
this.poly = poly;
poly.setLinkedTo(this);
for (Vertex v : poly.getExteriorRing().getVertices()) {
v.addAdjacentRing(poly.getExteriorRing(), parent);
}
for (LinearRing lr : poly.getInnerRings()) {
for (Vertex v : lr.getVertices()) {
v.addAdjacentRing(lr, parent);
}
}
}
@Override
public CheckResult getCheckResult(Check c) {
return poly.getCheckResult(c);
}
@Override
public Map getAllCheckResults() {
return poly.getAllCheckResults();
}
@Override
public boolean hasAnyError() {
return poly.hasAnyError();
}
@Override
public boolean hasDependencyNotMetError(CheckId id) {
return poly.hasDependencyNotMetError(id);
}
@Override
public CheckResult getCheckResult(CheckId id) {
return poly.getCheckResult(id);
}
@Override
public boolean hasCheckResults() {
return poly.hasCheckResults();
}
@Override
public void setGmlId(GmlId id) {
poly.setGmlId(id);
}
@Override
public GmlId getGmlId() {
return poly.getGmlId();
}
@Override
public void accept(Check c) {
// linked polygons are not checked
setValidated(true);
}
@Override
public void addCheckResult(CheckResult cr) {
poly.addCheckResult(cr);
}
@Override
public void collectContainedErrors(List errors) {
poly.collectContainedErrors(errors);
}
@Override
public boolean containsAnyError() {
return poly.containsAnyError();
}
@Override
public boolean containsError(CheckId checkIdentifier) {
return poly.containsError(checkIdentifier);
}
@Override
public void clearCheckResults() {
poly.clearCheckResults();
}
@Override
public Vector3d calculateNormalNormalized() {
return poly.calculateNormalNormalized();
}
@Override
public Vector3d calculateNormal() {
return poly.calculateNormal();
}
@Override
public TesselatedPolygon tesselate() {
return poly.tesselate();
}
@Override
public LinearRing getExteriorRing() {
return poly.getExteriorRing();
}
@Override
public List getInnerRings() {
return poly.getInnerRings();
}
@Override
public boolean isPointInsideExteriorRing(Vector3d v) {
return poly.isPointInsideExteriorRing(v);
}
@Override
public Geometry getParent() {
return parent;
}
@Override
public void setParent(Geometry geometry) {
this.parent = geometry;
}
@Override
public void setExteriorRing(LinearRing extRing) {
poly.setExteriorRing(extRing);
}
@Override
public boolean isPolygonConnectedViaPoint(Polygon other) {
return poly.isPolygonConnectedViaPoint(other);
}
@Override
public String toString() {
return "LinkedPolygon [" + poly.getGmlId() + "]";
}
@Override
public void addInteriorRing(LinearRing inter) {
poly.addInteriorRing(inter);
}
@Override
public BoundarySurface getPartOfSurface() {
return poly.getPartOfSurface();
}
@Override
public void setPartOfSurface(BoundarySurface bs) {
poly.setPartOfSurface(bs);
}
@Override
public void removeInnerRing(LinearRing ring) {
poly.removeInnerRing(ring);
}
@Override
public void setPartOfInstallation(BuildingInstallation bi) {
poly.setPartOfInstallation(bi);
}
@Override
public BuildingInstallation getPartOfInstallation() {
return poly.getPartOfInstallation();
}
@Override
public boolean hasPointAsCorner(Vertex v) {
return poly.hasPointAsCorner(v);
}
@Override
public void removeRings() {
poly.removeRings();
}
@Override
public boolean isLink() {
return true;
}
@Override
public LinkedPolygon getLinkedFromPolygon() {
return this;
}
@Override
void anonymize() {
poly.anonymize();
}
@Override
public void clearAllContainedCheckResults() {
poly.clearAllContainedCheckResults();
}
@Override
public ConcretePolygon getOriginal() {
return poly;
}
@Override
public void prepareForChecking() {
poly.prepareForChecking();
}
@Override
public void clearMetaInformation() {
poly.clearMetaInformation();
}
@Override
public boolean isLinkedTo() {
return false;
}
}