/*- * 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.systemtest; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.junit.Test; import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.Checker; import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ResultStatus; import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel; import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException; import de.hft.stuttgart.citydoctor2.parser.CityGmlParser; import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.quality.model.enums.RequirementId; /** * * @author Matthias Betz * */ public class PlanarTest { @Test public void testPlanarPolygon1() throws CityGmlParseException, IOException, InvalidGmlFileException { ParserConfiguration config = new ParserConfiguration(8, false); CityDoctorModel m = CityGmlParser.parseCityGmlFile("src/test/resources/QA-Ex-C-LR-5.gml", config); Checker c = new Checker(m); c.runChecks(); Polygon p1 = TestUtil.getPolygonById("p_w_1", "Example-C-LR-51", m); CheckResult cr1 = p1.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.ERROR, cr1.getResultStatus()); assertEquals(ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, cr1.getError().getErrorId()); Polygon p2 = TestUtil.getPolygonById("p_w_4", "Example-C-LR-51", m); assertEquals(ResultStatus.OK, p2.getCheckResult(CheckId.C_GE_P_NON_PLANAR).getResultStatus()); Polygon p3 = TestUtil.getPolygonById("p_w_2", "Example-C-LR-52", m); CheckResult cr3 = p3.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.ERROR, cr3.getResultStatus()); assertEquals(ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, cr3.getError().getErrorId()); Polygon p5 = TestUtil.getPolygonById("p_w_4", "Example-C-LR-54", m); CheckResult cr5 = p5.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.ERROR, cr5.getResultStatus()); assertEquals(ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, cr5.getError().getErrorId()); } @Test public void testPlanarPolygon2() throws CityGmlParseException, IOException, InvalidGmlFileException { ParserConfiguration config = new ParserConfiguration(8, false); CityDoctorModel m = CityGmlParser.parseCityGmlFile("src/test/resources/QA-Ex-C-LR-5GK.gml", config); Checker c = new Checker(m); c.runChecks(); Polygon p1 = TestUtil.getPolygonById("p_w_1", m); CheckResult cr1 = p1.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.OK, cr1.getResultStatus()); Polygon p2 = TestUtil.getPolygonById("p_r_1", m); assertEquals(ResultStatus.OK, p2.getCheckResult(CheckId.C_GE_P_NON_PLANAR).getResultStatus()); Polygon p3 = TestUtil.getPolygonById("p_w_2", m); CheckResult cr3 = p3.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.ERROR, cr3.getResultStatus()); assertEquals(ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, cr3.getError().getErrorId()); Polygon p4 = TestUtil.getPolygonById("p_w_3", m); CheckResult cr4 = p4.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.ERROR, cr4.getResultStatus()); assertEquals(ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, cr4.getError().getErrorId()); Polygon p5 = TestUtil.getPolygonById("p_w_4", m); CheckResult cr5 = p5.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.ERROR, cr5.getResultStatus()); assertEquals(ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, cr5.getError().getErrorId()); } @Test public void testPlanarPolygon3() throws CityGmlParseException, IOException, InvalidGmlFileException { CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0001-T0002.gml"); for (Polygon p : c.getBuildings().get(0).getGeometries().get(0).getPolygons()) { CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.OK, cr.getResultStatus()); } } @Test public void testPlanarPolygon4() throws CityGmlParseException, IOException, InvalidGmlFileException { Map> paramMap = new HashMap<>(); Map parameter = new HashMap<>(); parameter.put("distanceTolerance", "0.01"); paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter); CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml", paramMap); Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.2", c); CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.ERROR, cr.getResultStatus()); assertEquals(ErrorId.GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE, cr.getError().getErrorId()); } @Test public void testPlanarPolygon5() throws CityGmlParseException, IOException, InvalidGmlFileException { Map> paramMap = new HashMap<>(); Map parameter = new HashMap<>(); parameter.put("type", "distance"); parameter.put("distanceTolerance", "0.5"); paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter); CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml", paramMap); Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.2", c); CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.OK, cr.getResultStatus()); } @Test public void testPlanarPolygon6() throws CityGmlParseException, IOException, InvalidGmlFileException { Map> paramMap = new HashMap<>(); Map parameter = new HashMap<>(); parameter.put("type", "both"); parameter.put("distanceTolerance", "0.5"); paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter); CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0002.gml", paramMap); Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.1", c); CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR); assertEquals(ResultStatus.ERROR, cr.getResultStatus()); assertEquals(ErrorId.GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION, cr.getError().getErrorId()); } }