/*- * 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.edge; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.List; import org.junit.Test; import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon; import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.GeometryType; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; import de.hft.stuttgart.citydoctor2.datastructure.Lod; import de.hft.stuttgart.citydoctor2.datastructure.Vertex; public class IntersectionErrorsTest { @Test public void testWrongIntersection() { Geometry geom = new Geometry(GeometryType.SOLID, Lod.LOD1); ConcretePolygon p1 = new ConcretePolygon(); LinearRing ext1 = new LinearRing(LinearRingType.EXTERIOR); p1.setExteriorRing(ext1); /* Vertex [x=3515051.7, y=5405988.05, z=246.67] Vertex [x=3515047.52, y=5405985.1, z=246.67] Vertex [x=3515049.03, y=5405978.98, z=246.67] Vertex [x=3515054.29, y=5405983.65, z=246.67] Vertex [x=3515051.7, y=5405988.05, z=246.67] */ Vertex v1 = new Vertex(3515047.52, 5405985.1, 246.67); Vertex v2 = new Vertex(3515049.03, 5405978.98, 246.67); Vertex v3 = new Vertex(3515054.29, 5405983.65, 246.67); Vertex v4 = new Vertex(3515051.7, 5405988.05, 246.67); ext1.addVertex(v1); ext1.addVertex(v2); ext1.addVertex(v3); ext1.addVertex(v4); ext1.addVertex(v1); ConcretePolygon p2 = new ConcretePolygon(); LinearRing ext2 = new LinearRing(LinearRingType.EXTERIOR); p2.setExteriorRing(ext2); /* Vertex [x=3515049.03, y=5405978.98, z=237.903218] Vertex [x=3515054.29, y=5405983.65, z=237.903218] Vertex [x=3515054.29, y=5405983.65, z=246.67] Vertex [x=3515049.03, y=5405978.98, z=246.67] Vertex [x=3515049.03, y=5405978.98, z=237.903218] */ Vertex v5 = new Vertex(3515049.03, 5405978.98, 237.903218); Vertex v6 = new Vertex(3515054.29, 5405983.65, 237.903218); Vertex v7 = v3; Vertex v8 = v2; ext2.addVertex(v5); ext2.addVertex(v6); ext2.addVertex(v7); ext2.addVertex(v8); ext2.addVertex(v5); geom.addPolygon(p1); geom.addPolygon(p2); geom.prepareForChecking(); System.out.println(); for (Vertex v : p1.getExteriorRing().getVertices()) { System.out.println(v); } System.out.println(); for (Vertex v : p2.getExteriorRing().getVertices()) { System.out.println(v); } MeshSurface meshSurface = MeshSurface.of(geom); List polygons = meshSurface.getPolygons(); assertEquals(2, polygons.size()); CDPolygonNs edgePoly1 = meshSurface.getPolygons().get(0); CDPolygonNs edgePoly2 = meshSurface.getPolygons().get(1); List intersectPolygons = IntersectPlanarPolygons.intersectPolygons(edgePoly1, edgePoly2, 0.000001, 0.001); assertTrue(intersectPolygons.isEmpty()); } }