diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ConcretePolygon.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ConcretePolygon.java index a654fd4cce5ea15e2d6f1ab1b1b4f13d26b750b0..d0c3ea97b117ca4bf6ed240278ceb6576534bba5 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ConcretePolygon.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ConcretePolygon.java @@ -50,6 +50,7 @@ public class ConcretePolygon extends Polygon { private BoundarySurface partOfSurface; private Installation partfOfInstallation; private CompositeCollection partOfComposite = null; + private PatchCollection partOfPatch = null; private Geometry parent; private LinkedPolygon linkedFromPolygon; @@ -141,6 +142,18 @@ public class ConcretePolygon extends Polygon { this.partOfComposite = comp; } + protected void setPartOfPatch(PatchCollection pc) { + this.partOfPatch = pc; + } + + public PatchCollection getPartOfPatch(PatchCollection pc) { + return partOfPatch; + } + + public boolean isPatchMember() { + return partOfPatch != null; + } + public CompositeCollection getPartOfComposite() { return partOfComposite; } diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/PatchCollection.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/PatchCollection.java new file mode 100644 index 0000000000000000000000000000000000000000..5416b33eefaa741115665beb89f578f5592cf297 --- /dev/null +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/PatchCollection.java @@ -0,0 +1,33 @@ +package de.hft.stuttgart.citydoctor2.datastructure; + +import java.io.Serial; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + + +public final class PatchCollection implements Serializable { + + @Serial + private static final long serialVersionUID = -1748657379840997228L; + private GmlId gmlId; + + private List<ConcretePolygon> patchMembers = new ArrayList<>(); + + public void addPatchMember(ConcretePolygon patchMember) { + patchMembers.add(patchMember); + patchMember.setPartOfPatch(this); + } + + public List<ConcretePolygon> getPatchMembers() { + return new ArrayList<>(patchMembers); + } + + public void setGmlId(GmlId gmlId) { + this.gmlId = gmlId; + } + + public GmlId getGmlId() { + return gmlId; + } +} diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java index 4b99f27eb6357c2edd04892c8face5abe1073eda..369a82d3e0643e26b0172e026ef946135787baff 100644 --- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java +++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java @@ -65,24 +65,26 @@ public class Citygml3GeometryMapper extends GeometryWalker { @Override public void visit(Surface surface) { - - // TODO: Implement like CompositeSurfaces, just with PolygonPatches if (surface.getPatches() != null && !surface.getPatches().isSetObjects()) { logger.warn("Surface {} has no PolygonPatches.", surface.getId()); return; } - CompositeCollection comp = new CompositeCollection(); - List<PolygonPatch> polygonPatches = (List<PolygonPatch>) surface.getPatches().getObjects(); - Citygml3GeometryMapper recursiveMapper = new Citygml3GeometryMapper(config, vertexMap); + List<PolygonPatch> polygonPatches = new ArrayList<>(); + GeometryWalker patchCollector = new GeometryWalker() { + @Override + public void visit(PolygonPatch pp) { + polygonPatches.add(pp); + } + }; + surface.getPatches().getObjects().forEach(abstractSurfacePatch -> abstractSurfacePatch.accept(patchCollector)); + PatchCollection patchCollection = new PatchCollection(); + Citygml3GeometryMapper patchMapper = new Citygml3GeometryMapper(config, vertexMap); for (PolygonPatch patch : polygonPatches) { - recursiveMapper.parsePolygonPatch(patch.getExterior(), patch.getInterior()); + patchMapper.parsePolygonPatch(patch.getExterior(), patch.getInterior()); } - - List<ConcretePolygon> compPolys = recursiveMapper.getPolygons(); - compPolys.forEach(comp::addCompositeMember); - comp.addAllChildComposites(recursiveMapper.getComposites()); - composites.add(comp); - polygons.addAll(compPolys); + List<ConcretePolygon> patchPolys = patchMapper.getPolygons(); + patchPolys.forEach(patchCollection::addPatchMember); + polygons.addAll(patchPolys); }