Commit 02de0a22 authored by Riegel's avatar Riegel
Browse files

Reformat code

parent ad3589e8
Pipeline #10297 passed with stage
in 1 minute and 5 seconds
...@@ -18,19 +18,18 @@ ...@@ -18,19 +18,18 @@
*/ */
package de.hft.stuttgart.citydoctor2.datastructure; package de.hft.stuttgart.citydoctor2.datastructure;
import java.io.Serial;
import java.util.ArrayList;
import java.util.List;
import org.citygml4j.core.model.relief.ReliefFeature;
import org.citygml4j.core.util.geometry.GeometryFactory;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CopyHandler; import de.hft.stuttgart.citydoctor2.utils.CopyHandler;
import de.hft.stuttgart.citydoctor2.utils.Copyable; import de.hft.stuttgart.citydoctor2.utils.Copyable;
import org.citygml4j.core.model.relief.ReliefFeature;
import org.citygml4j.core.util.geometry.GeometryFactory;
import java.io.Serial;
import java.util.ArrayList;
import java.util.List;
public class ReliefObject extends CityObject { public class ReliefObject extends CityObject {
......
...@@ -12,7 +12,7 @@ import java.io.Serial; ...@@ -12,7 +12,7 @@ import java.io.Serial;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class Storey extends AbstractBuildingSubdivision{ public class Storey extends AbstractBuildingSubdivision {
@Serial @Serial
private static final long serialVersionUID = 5162814691642668089L; private static final long serialVersionUID = 5162814691642668089L;
......
...@@ -22,7 +22,6 @@ package de.hft.stuttgart.citydoctor2.datastructure; ...@@ -22,7 +22,6 @@ package de.hft.stuttgart.citydoctor2.datastructure;
* Availabel bridge types in CityGML * Availabel bridge types in CityGML
* *
* @author Matthias Betz * @author Matthias Betz
*
*/ */
public enum SurfaceFeatureType { public enum SurfaceFeatureType {
......
...@@ -18,10 +18,9 @@ ...@@ -18,10 +18,9 @@
*/ */
package de.hft.stuttgart.citydoctor2.datastructure; package de.hft.stuttgart.citydoctor2.datastructure;
import java.io.Serial; import de.hft.stuttgart.citydoctor2.check.Check;
import java.util.ArrayList; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import java.util.List; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.citygml4j.core.model.relief.TINRelief; import org.citygml4j.core.model.relief.TINRelief;
...@@ -31,9 +30,9 @@ import org.xmlobjects.gml.model.geometry.primitives.Triangle; ...@@ -31,9 +30,9 @@ import org.xmlobjects.gml.model.geometry.primitives.Triangle;
import org.xmlobjects.gml.model.geometry.primitives.TriangleArrayProperty; import org.xmlobjects.gml.model.geometry.primitives.TriangleArrayProperty;
import org.xmlobjects.gml.model.geometry.primitives.TriangulatedSurface; import org.xmlobjects.gml.model.geometry.primitives.TriangulatedSurface;
import de.hft.stuttgart.citydoctor2.check.Check; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import java.util.ArrayList;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import java.util.List;
public class TinObject extends CityObject { public class TinObject extends CityObject {
......
...@@ -18,10 +18,13 @@ ...@@ -18,10 +18,13 @@
*/ */
package de.hft.stuttgart.citydoctor2.datastructure; package de.hft.stuttgart.citydoctor2.datastructure;
import java.io.Serial; import de.hft.stuttgart.citydoctor2.check.Check;
import java.util.ArrayList; import de.hft.stuttgart.citydoctor2.check.CheckError;
import java.util.List; import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import de.hft.stuttgart.citydoctor2.utils.CopyHandler;
import de.hft.stuttgart.citydoctor2.utils.Copyable;
import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.core.AbstractCityObject;
import org.citygml4j.core.model.core.AbstractSpace; import org.citygml4j.core.model.core.AbstractSpace;
import org.citygml4j.core.model.transportation.AbstractTransportationSpace; import org.citygml4j.core.model.transportation.AbstractTransportationSpace;
...@@ -31,19 +34,14 @@ import org.citygml4j.core.util.geometry.GeometryFactory; ...@@ -31,19 +34,14 @@ import org.citygml4j.core.util.geometry.GeometryFactory;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
import de.hft.stuttgart.citydoctor2.check.Check; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.check.CheckError; import java.util.ArrayList;
import de.hft.stuttgart.citydoctor2.check.CheckId; import java.util.List;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import de.hft.stuttgart.citydoctor2.utils.CopyHandler;
import de.hft.stuttgart.citydoctor2.utils.Copyable;
/** /**
* Representation of a transportation object. * Representation of a transportation object.
* *
* @author Matthias Betz * @author Matthias Betz
*
*/ */
public class TransportationObject extends CityObject { public class TransportationObject extends CityObject {
...@@ -70,7 +68,7 @@ public class TransportationObject extends CityObject { ...@@ -70,7 +68,7 @@ public class TransportationObject extends CityObject {
@Override @Override
public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) {
for (Geometry geom : getGeometries()) { for (Geometry geom : getGeometries()) {
if (geom instanceof ImplicitGeometryHolder){ if (geom instanceof ImplicitGeometryHolder) {
continue; continue;
} }
if (geom.getType() == GeometryType.MULTI_SURFACE) { if (geom.getType() == GeometryType.MULTI_SURFACE) {
...@@ -239,7 +237,7 @@ public class TransportationObject extends CityObject { ...@@ -239,7 +237,7 @@ public class TransportationObject extends CityObject {
@Override @Override
public void unsetGmlGeometries() { public void unsetGmlGeometries() {
switch (type) { switch (type) {
case ROAD, TRACK, RAILWAY, SQUARE,TRANSPORTATION_COMPLEX: case ROAD, TRACK, RAILWAY, SQUARE, TRANSPORTATION_COMPLEX:
AbstractTransportationSpace tc = (AbstractTransportationSpace) ato; AbstractTransportationSpace tc = (AbstractTransportationSpace) ato;
tc.getDeprecatedProperties().setLod1MultiSurface(null); tc.getDeprecatedProperties().setLod1MultiSurface(null);
tc.setLod2MultiSurface(null); tc.setLod2MultiSurface(null);
......
...@@ -15,7 +15,7 @@ import java.io.Serial; ...@@ -15,7 +15,7 @@ import java.io.Serial;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class Tunnel extends AbstractTunnel{ public class Tunnel extends AbstractTunnel {
@Serial @Serial
private static final long serialVersionUID = 5316281216192555555L; private static final long serialVersionUID = 5316281216192555555L;
......
package de.hft.stuttgart.citydoctor2.datastructure; package de.hft.stuttgart.citydoctor2.datastructure;
import de.hft.stuttgart.citydoctor2.utils.Copyable; import de.hft.stuttgart.citydoctor2.utils.Copyable;
import org.citygml4j.core.model.building.BuildingFurniture;
import java.io.Serial; import java.io.Serial;
...@@ -15,7 +14,7 @@ public class TunnelFurniture extends AbstractFurniture { ...@@ -15,7 +14,7 @@ public class TunnelFurniture extends AbstractFurniture {
} }
@Override @Override
public Copyable createCopyInstance(){ public Copyable createCopyInstance() {
return new BuildingRoomFurniture(); return new BuildingRoomFurniture();
} }
......
...@@ -8,18 +8,18 @@ import java.io.Serial; ...@@ -8,18 +8,18 @@ import java.io.Serial;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class TunnelHollow extends AbstractRoom{ public class TunnelHollow extends AbstractRoom {
@Serial @Serial
private static final long serialVersionUID = -276088332165299253L; private static final long serialVersionUID = -276088332165299253L;
private final List<TunnelFurnitureProperty> furnitureRefs = new ArrayList<>(2); private final List<TunnelFurnitureProperty> furnitureRefs = new ArrayList<>(2);
private CityObject parent; private CityObject parent;
public void setGmlObject(org.citygml4j.core.model.tunnel.HollowSpace gmlHollowSpace){ public void setGmlObject(org.citygml4j.core.model.tunnel.HollowSpace gmlHollowSpace) {
super.cgmlRoom = gmlHollowSpace; super.cgmlRoom = gmlHollowSpace;
} }
public void setParent(CityObject parent){ public void setParent(CityObject parent) {
this.parent = parent; this.parent = parent;
} }
...@@ -36,7 +36,7 @@ public class TunnelHollow extends AbstractRoom{ ...@@ -36,7 +36,7 @@ public class TunnelHollow extends AbstractRoom{
} }
@Override @Override
public void fillValues(Copyable original, CopyHandler handler){ public void fillValues(Copyable original, CopyHandler handler) {
super.fillValues(original, handler); super.fillValues(original, handler);
TunnelHollow oHollow = (TunnelHollow) original; TunnelHollow oHollow = (TunnelHollow) original;
...@@ -44,7 +44,7 @@ public class TunnelHollow extends AbstractRoom{ ...@@ -44,7 +44,7 @@ public class TunnelHollow extends AbstractRoom{
} }
@Override @Override
public void collectInstances(CopyHandler handler){ public void collectInstances(CopyHandler handler) {
super.collectInstances(handler); super.collectInstances(handler);
handler.addInstance(parent); handler.addInstance(parent);
} }
......
...@@ -50,5 +50,6 @@ public class TunnelPart extends AbstractTunnel { ...@@ -50,5 +50,6 @@ public class TunnelPart extends AbstractTunnel {
return new TunnelPart(); return new TunnelPart();
} }
private TunnelPart(){} private TunnelPart() {
}
} }
...@@ -18,9 +18,10 @@ ...@@ -18,9 +18,10 @@
*/ */
package de.hft.stuttgart.citydoctor2.datastructure; package de.hft.stuttgart.citydoctor2.datastructure;
import java.io.Serial; import de.hft.stuttgart.citydoctor2.check.Check;
import java.util.Collections; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import de.hft.stuttgart.citydoctor2.utils.Copyable;
import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.core.AbstractCityObject;
import org.citygml4j.core.model.vegetation.AbstractVegetationObject; import org.citygml4j.core.model.vegetation.AbstractVegetationObject;
import org.citygml4j.core.model.vegetation.PlantCover; import org.citygml4j.core.model.vegetation.PlantCover;
...@@ -33,16 +34,13 @@ import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; ...@@ -33,16 +34,13 @@ import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
import org.xmlobjects.gml.model.geometry.primitives.Solid; import org.xmlobjects.gml.model.geometry.primitives.Solid;
import org.xmlobjects.gml.model.geometry.primitives.SolidProperty; import org.xmlobjects.gml.model.geometry.primitives.SolidProperty;
import de.hft.stuttgart.citydoctor2.check.Check; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import java.util.Collections;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import de.hft.stuttgart.citydoctor2.utils.Copyable;
/** /**
* Representation of CityGML vegetation objects * Representation of CityGML vegetation objects
* *
* @author Matthias Betz * @author Matthias Betz
*
*/ */
public class Vegetation extends CityObject { public class Vegetation extends CityObject {
...@@ -68,7 +66,7 @@ public class Vegetation extends CityObject { ...@@ -68,7 +66,7 @@ public class Vegetation extends CityObject {
@Override @Override
public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) {
for (Geometry geom : getGeometries()) { for (Geometry geom : getGeometries()) {
if (geom instanceof ImplicitGeometryHolder){ if (geom instanceof ImplicitGeometryHolder) {
continue; continue;
} }
if (geom.getType() == GeometryType.MULTI_SURFACE) { if (geom.getType() == GeometryType.MULTI_SURFACE) {
......
...@@ -18,22 +18,21 @@ ...@@ -18,22 +18,21 @@
*/ */
package de.hft.stuttgart.citydoctor2.datastructure; package de.hft.stuttgart.citydoctor2.datastructure;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.utils.CopyHandler;
import de.hft.stuttgart.citydoctor2.utils.Copyable;
import de.hft.stuttgart.citydoctor2.utils.SerializablePair;
import java.io.Serial; import java.io.Serial;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.utils.CopyHandler;
import de.hft.stuttgart.citydoctor2.utils.Copyable;
import de.hft.stuttgart.citydoctor2.utils.SerializablePair;
/** /**
* Contains the vertex information of a point in a linear ring * Contains the vertex information of a point in a linear ring
* *
* @author Matthias Betz * @author Matthias Betz
*
*/ */
public class Vertex extends Vector3d implements Copyable { public class Vertex extends Vector3d implements Copyable {
......
...@@ -18,27 +18,25 @@ ...@@ -18,27 +18,25 @@
*/ */
package de.hft.stuttgart.citydoctor2.datastructure; package de.hft.stuttgart.citydoctor2.datastructure;
import java.io.Serial; import de.hft.stuttgart.citydoctor2.check.Check;
import java.util.ArrayList; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import java.util.List; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import de.hft.stuttgart.citydoctor2.utils.CopyHandler;
import de.hft.stuttgart.citydoctor2.utils.Copyable;
import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.core.AbstractCityObject;
import org.citygml4j.core.model.waterbody.WaterBody; import org.citygml4j.core.model.waterbody.WaterBody;
import org.citygml4j.core.util.geometry.GeometryFactory; import org.citygml4j.core.util.geometry.GeometryFactory;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
import de.hft.stuttgart.citydoctor2.check.Check; import java.io.Serial;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import java.util.ArrayList;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import java.util.List;
import de.hft.stuttgart.citydoctor2.utils.CopyHandler;
import de.hft.stuttgart.citydoctor2.utils.Copyable;
/** /**
* Represents cityGML water body objects. * Represents cityGML water body objects.
* *
* @author Matthias Betz * @author Matthias Betz
*
*/ */
public class WaterObject extends CityObject { public class WaterObject extends CityObject {
......
...@@ -18,51 +18,37 @@ ...@@ -18,51 +18,37 @@
*/ */
package de.hft.stuttgart.citydoctor2.mapper.citygml3; package de.hft.stuttgart.citydoctor2.mapper.citygml3;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.hft.stuttgart.citydoctor2.datastructure.*;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding; import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractTunnel; import de.hft.stuttgart.citydoctor2.datastructure.AbstractTunnel;
import de.hft.stuttgart.citydoctor2.datastructure.BridgeConstructiveElement;
import de.hft.stuttgart.citydoctor2.datastructure.*;
import de.hft.stuttgart.citydoctor2.datastructure.Building; import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.BuildingPart; import de.hft.stuttgart.citydoctor2.datastructure.BuildingPart;
import de.hft.stuttgart.citydoctor2.datastructure.BuildingRoom; import de.hft.stuttgart.citydoctor2.datastructure.BuildingRoom;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject.BridgeType;
import de.hft.stuttgart.citydoctor2.datastructure.TunnelFurniture; import de.hft.stuttgart.citydoctor2.datastructure.TunnelFurniture;
import de.hft.stuttgart.citydoctor2.datastructure.TunnelPart; import de.hft.stuttgart.citydoctor2.datastructure.TunnelPart;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject.TransportationType;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation.VegetationType;
import de.hft.stuttgart.citydoctor2.math.graph.KDTree;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.Localization;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.citygml4j.core.model.CityGMLVersion; import org.citygml4j.core.model.CityGMLVersion;
import org.citygml4j.core.model.bridge.AbstractBridge; import org.citygml4j.core.model.bridge.*;
import org.citygml4j.core.model.bridge.Bridge;
import org.citygml4j.core.model.bridge.BridgeConstructiveElementProperty;
import org.citygml4j.core.model.bridge.BridgeInstallation;
import org.citygml4j.core.model.bridge.BridgeInstallationProperty;
import org.citygml4j.core.model.bridge.BridgePart;
import org.citygml4j.core.model.bridge.BridgePartProperty;
import org.citygml4j.core.model.building.*;
import org.citygml4j.core.model.building.BuildingFurniture;
import org.citygml4j.core.model.building.BuildingUnit; import org.citygml4j.core.model.building.BuildingUnit;
import org.citygml4j.core.model.building.Storey; import org.citygml4j.core.model.building.Storey;
import org.citygml4j.core.model.building.*;
import org.citygml4j.core.model.construction.AbstractConstruction; import org.citygml4j.core.model.construction.AbstractConstruction;
import org.citygml4j.core.model.core.*; import org.citygml4j.core.model.core.*;
import org.citygml4j.core.model.deprecated.transportation.TransportationComplex; import org.citygml4j.core.model.deprecated.transportation.TransportationComplex;
import org.citygml4j.core.model.landuse.LandUse; import org.citygml4j.core.model.landuse.LandUse;
import org.citygml4j.core.model.transportation.AbstractTransportationSpace; import org.citygml4j.core.model.transportation.*;
import org.citygml4j.core.model.transportation.AuxiliaryTrafficArea;
import org.citygml4j.core.model.transportation.AuxiliaryTrafficSpace;
import org.citygml4j.core.model.transportation.AuxiliaryTrafficSpaceProperty;
import org.citygml4j.core.model.transportation.Railway;
import org.citygml4j.core.model.transportation.Road;
import org.citygml4j.core.model.transportation.Square;
import org.citygml4j.core.model.transportation.Track;
import org.citygml4j.core.model.transportation.TrafficArea;
import org.citygml4j.core.model.transportation.TrafficSpace;
import org.citygml4j.core.model.transportation.TrafficSpaceProperty;
import org.citygml4j.core.model.tunnel.*;
import org.citygml4j.core.model.tunnel.Tunnel; import org.citygml4j.core.model.tunnel.Tunnel;
import org.citygml4j.core.model.tunnel.*;
import org.citygml4j.core.model.vegetation.AbstractVegetationObject; import org.citygml4j.core.model.vegetation.AbstractVegetationObject;
import org.citygml4j.core.model.vegetation.PlantCover; import org.citygml4j.core.model.vegetation.PlantCover;
import org.citygml4j.core.model.vegetation.SolitaryVegetationObject; import org.citygml4j.core.model.vegetation.SolitaryVegetationObject;
...@@ -75,33 +61,25 @@ import org.xmlobjects.gml.model.geometry.GeometryProperty; ...@@ -75,33 +61,25 @@ import org.xmlobjects.gml.model.geometry.GeometryProperty;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
import org.xmlobjects.gml.model.geometry.complexes.CompositeSurface; import org.xmlobjects.gml.model.geometry.complexes.CompositeSurface;
import org.xmlobjects.gml.model.geometry.primitives.AbstractSolid; import org.xmlobjects.gml.model.geometry.primitives.*;
import org.xmlobjects.gml.model.geometry.primitives.AbstractSurface;
import org.xmlobjects.gml.model.geometry.primitives.Shell;
import org.xmlobjects.gml.model.geometry.primitives.ShellProperty;
import org.xmlobjects.gml.model.geometry.primitives.Solid;
import org.xmlobjects.gml.model.geometry.primitives.SolidProperty;
import org.xmlobjects.gml.model.geometry.primitives.SurfaceProperty;
import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject.BridgeType; import java.nio.file.Path;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject.TransportationType; import java.util.ArrayList;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation.VegetationType; import java.util.HashMap;
import de.hft.stuttgart.citydoctor2.math.graph.KDTree; import java.util.List;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import java.util.Map;
import de.hft.stuttgart.citydoctor2.utils.Localization;
public class Citygml3FeatureMapper extends ObjectWalker { public class Citygml3FeatureMapper extends ObjectWalker {
private static final Logger logger = LogManager.getLogger(Citygml3FeatureMapper.class); private static final Logger logger = LogManager.getLogger(Citygml3FeatureMapper.class);
private final CityDoctorModel model; private final CityDoctorModel model;
private Map<String, ConcretePolygon> polygonMap = new HashMap<>();
private List<ResolvableReference> references = new ArrayList<>();
private Map<Vertex, Vertex> vertexMap = new HashMap<>();
private final ParserConfiguration config; private final ParserConfiguration config;
private final Path directory; private final Path directory;
private final double neighborDistance; private final double neighborDistance;
private Map<String, ConcretePolygon> polygonMap = new HashMap<>();
private List<ResolvableReference> references = new ArrayList<>();
private Map<Vertex, Vertex> vertexMap = new HashMap<>();
public Citygml3FeatureMapper(ParserConfiguration config, Path path) { public Citygml3FeatureMapper(ParserConfiguration config, Path path) {
this.config = config; this.config = config;
...@@ -110,6 +88,13 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -110,6 +88,13 @@ public class Citygml3FeatureMapper extends ObjectWalker {
neighborDistance = 1.8d / Math.pow(10, config.getNumberOfRoundingPlaces()); neighborDistance = 1.8d / Math.pow(10, config.getNumberOfRoundingPlaces());
} }
public static void parseId(AbstractGML gml, GmlElement gmlElement) {
String id = gml.getId();
if (id != null) {
gmlElement.setGmlId(new GmlId(id));
}
}
@Override @Override
public void visit(AbstractSpace space) { public void visit(AbstractSpace space) {
// if we are here, an AbstractSpace thing was read that is not handled in the // if we are here, an AbstractSpace thing was read that is not handled in the
...@@ -129,7 +114,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -129,7 +114,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
@Override @Override
public void visit(org.citygml4j.core.model.generics.GenericOccupiedSpace gos){ public void visit(org.citygml4j.core.model.generics.GenericOccupiedSpace gos) {
GenericCityObject gco = new GenericCityObject(); GenericCityObject gco = new GenericCityObject();
gco.setGmlObject(gos); gco.setGmlObject(gos);
mapAbstractOccupiedSpace(gos, gco); mapAbstractOccupiedSpace(gos, gco);
...@@ -139,7 +124,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -139,7 +124,6 @@ public class Citygml3FeatureMapper extends ObjectWalker {
model.addGenericCityObject(gco); model.addGenericCityObject(gco);
} }
@Override @Override
public void visit(org.citygml4j.core.model.building.Building gmlBuilding) { public void visit(org.citygml4j.core.model.building.Building gmlBuilding) {
Building cdBuilding = new Building(); Building cdBuilding = new Building();
...@@ -245,8 +229,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -245,8 +229,6 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
@Override @Override
public void visit(Bridge bridge) { public void visit(Bridge bridge) {
BridgeObject bo = new BridgeObject(BridgeType.BRIDGE, bridge); BridgeObject bo = new BridgeObject(BridgeType.BRIDGE, bridge);
...@@ -359,7 +341,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -359,7 +341,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
@Override @Override
public void visit(Tunnel tunnel){ public void visit(Tunnel tunnel) {
de.hft.stuttgart.citydoctor2.datastructure.Tunnel tu = new de.hft.stuttgart.citydoctor2.datastructure.Tunnel(); de.hft.stuttgart.citydoctor2.datastructure.Tunnel tu = new de.hft.stuttgart.citydoctor2.datastructure.Tunnel();
for (TunnelPartProperty tPartProperty : tunnel.getTunnelParts()) { for (TunnelPartProperty tPartProperty : tunnel.getTunnelParts()) {
if (!tPartProperty.isSetObject()) { if (!tPartProperty.isSetObject()) {
...@@ -435,7 +417,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -435,7 +417,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
} }
} }
for (TunnelFurnitureProperty tfProp : gmlTunnel.getTunnelFurniture()){ for (TunnelFurnitureProperty tfProp : gmlTunnel.getTunnelFurniture()) {
var gmlTf = tfProp.getObject(); var gmlTf = tfProp.getObject();
if (gmlTf == null) { if (gmlTf == null) {
continue; continue;
...@@ -445,7 +427,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -445,7 +427,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
} }
private Installation mapTunnelInstallation(TunnelInstallation gmlTi){ private Installation mapTunnelInstallation(TunnelInstallation gmlTi) {
Installation ti = new Installation(); Installation ti = new Installation();
ti.setGmlObject(gmlTi); ti.setGmlObject(gmlTi);
mapAbstractOccupiedSpace(gmlTi, ti); mapAbstractOccupiedSpace(gmlTi, ti);
...@@ -483,10 +465,10 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -483,10 +465,10 @@ public class Citygml3FeatureMapper extends ObjectWalker {
return ti; return ti;
} }
private TunnelHollow mapTunnelHollow(HollowSpace gmlHo){ private TunnelHollow mapTunnelHollow(HollowSpace gmlHo) {
TunnelHollow tHollow = new TunnelHollow(); TunnelHollow tHollow = new TunnelHollow();
tHollow.setGmlObject(gmlHo); tHollow.setGmlObject(gmlHo);
mapAbstractUnoccupiedSpace(gmlHo,tHollow); mapAbstractUnoccupiedSpace(gmlHo, tHollow);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, vertexMap, config); SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlHo.getBoundaries()) { for (AbstractSpaceBoundaryProperty surfaceProp : gmlHo.getBoundaries()) {
...@@ -513,7 +495,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -513,7 +495,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
Installation bi = mapTunnelInstallation(gmlTi); Installation bi = mapTunnelInstallation(gmlTi);
tHollow.addRoomInstallation(bi); tHollow.addRoomInstallation(bi);
} }
for (TunnelFurnitureProperty tfProp : gmlHo.getTunnelFurniture()){ for (TunnelFurnitureProperty tfProp : gmlHo.getTunnelFurniture()) {
var gmlHref = tfProp.getHref(); var gmlHref = tfProp.getHref();
if (gmlHref == null) { if (gmlHref == null) {
continue; continue;
...@@ -523,7 +505,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -523,7 +505,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
return tHollow; return tHollow;
} }
private TunnelFurniture mapTunnelFurniture(org.citygml4j.core.model.tunnel.TunnelFurniture gmlTf){ private TunnelFurniture mapTunnelFurniture(org.citygml4j.core.model.tunnel.TunnelFurniture gmlTf) {
TunnelFurniture tf = new TunnelFurniture(); TunnelFurniture tf = new TunnelFurniture();
tf.setGmlObject(gmlTf); tf.setGmlObject(gmlTf);
mapAbstractOccupiedSpace(gmlTf, tf); mapAbstractOccupiedSpace(gmlTf, tf);
...@@ -739,7 +721,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -739,7 +721,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
} }
private void parseAndAddCompositeSurface(MultiSurfaceProperty ms, Lod lod, CityObject co){ private void parseAndAddCompositeSurface(MultiSurfaceProperty ms, Lod lod, CityObject co) {
if (ms == null || ms.getObject() == null) { if (ms == null || ms.getObject() == null) {
return; return;
} }
...@@ -755,19 +737,20 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -755,19 +737,20 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
private void parseImplicitGeometry(AbstractOccupiedSpace aos, CityObject co){ private void parseImplicitGeometry(AbstractOccupiedSpace aos, CityObject co) {
for (int i = 1; i <= 3; i++){ for (int i = 1; i <= 3; i++) {
if (aos.getImplicitRepresentation(i) == null){ if (aos.getImplicitRepresentation(i) == null) {
continue; continue;
} }
if (aos.getImplicitRepresentation(i).getObject() != null){ if (aos.getImplicitRepresentation(i).getObject() != null) {
ImplicitGeometry impGeom = aos.getImplicitRepresentation(i).getObject(); ImplicitGeometry impGeom = aos.getImplicitRepresentation(i).getObject();
ImplicitGeometryHolder igh = resolveImplicitGeometry(impGeom, i); ImplicitGeometryHolder igh = resolveImplicitGeometry(impGeom, i);
if (igh != null){ if (igh != null) {
co.addGeometry(igh); co.addGeometry(igh);
} }
} else if (aos.getImplicitRepresentation(i).getHref() != null){ } else if (aos.getImplicitRepresentation(i).getHref() != null) {
// TODO: HREF handling of implicit geometries // Hrefs of ImplicitGeometries point to its RelativeGeometry.
// Can be ignored for CD since the Href is only used for repeating the RelativeGeometry at different LODs
} }
...@@ -777,30 +760,30 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -777,30 +760,30 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private ImplicitGeometryHolder resolveImplicitGeometry(ImplicitGeometry ig, int lodInt) { private ImplicitGeometryHolder resolveImplicitGeometry(ImplicitGeometry ig, int lodInt) {
ImplicitGeometryHolder igh = null; ImplicitGeometryHolder igh = null;
if (ig.getLibraryObject() != null){ if (ig.getLibraryObject() != null) {
Path libraryObjectPath = directory.resolve(ig.getLibraryObject()); Path libraryObjectPath = directory.resolve(ig.getLibraryObject());
LibraryObject libObj = LibraryObject.of(libraryObjectPath, config); LibraryObject libObj = LibraryObject.of(libraryObjectPath, config);
if (libObj != null){ if (libObj != null) {
igh = new ImplicitGeometryHolder(ig, libObj); igh = new ImplicitGeometryHolder(ig, libObj);
} }
} else if (ig.getRelativeGeometry() != null){ } else if (ig.getRelativeGeometry() != null) {
AbstractGeometry aGeom = ig.getRelativeGeometry().getObject(); AbstractGeometry aGeom = ig.getRelativeGeometry().getObject();
Geometry geom = null; Geometry geom = null;
Lod lod = Lod.values()[lodInt]; Lod lod = Lod.values()[lodInt];
RelativeGeometry relGeo = null; RelativeGeometry relGeo = null;
if (aGeom instanceof MultiSurface ms){ if (aGeom instanceof MultiSurface ms) {
geom = parseMultiSurface(ms, lod); geom = parseMultiSurface(ms, lod);
} else if (aGeom instanceof Solid s){ } else if (aGeom instanceof Solid s) {
geom = parseSolid(s, lod); geom = parseSolid(s, lod);
} else if (aGeom instanceof CompositeSurface cs){ } else if (aGeom instanceof CompositeSurface cs) {
geom = parseCompositeSurface(cs, lod); geom = parseCompositeSurface(cs, lod);
} }
if (geom != null){ if (geom != null) {
relGeo = RelativeGeometry.of(geom); relGeo = RelativeGeometry.of(geom);
igh = new ImplicitGeometryHolder(ig, relGeo); igh = new ImplicitGeometryHolder(ig, relGeo);
} }
} else{ } else {
logger.error(String.format("Implicit geometry of GML-ID %s has no referenced geometry.", ig.getId())); logger.error(String.format("Implicit geometry of GML-ID %s has no referenced geometry.", ig.getId()));
} }
return igh; return igh;
...@@ -845,8 +828,8 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -845,8 +828,8 @@ public class Citygml3FeatureMapper extends ObjectWalker {
private List<ConcretePolygon> resolveCompositePolygon(CompositePolygon comp) { private List<ConcretePolygon> resolveCompositePolygon(CompositePolygon comp) {
List<ConcretePolygon> polygons = new ArrayList<>(); List<ConcretePolygon> polygons = new ArrayList<>();
for (ConcretePolygon conc: comp.getCompositeMembers()){ for (ConcretePolygon conc : comp.getCompositeMembers()) {
if (conc instanceof CompositePolygon recComp){ if (conc instanceof CompositePolygon recComp) {
polygons.addAll(resolveCompositePolygon(recComp)); polygons.addAll(resolveCompositePolygon(recComp));
} else { } else {
polygons.add(conc); polygons.add(conc);
...@@ -884,7 +867,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -884,7 +867,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
cdBuilding.addBuildingRoom(br); cdBuilding.addBuildingRoom(br);
} }
for(AbstractBuildingSubdivisionProperty abs : gmlAb.getBuildingSubdivisions()) { for (AbstractBuildingSubdivisionProperty abs : gmlAb.getBuildingSubdivisions()) {
var gmlABS = abs.getObject(); var gmlABS = abs.getObject();
if (gmlABS == null) { if (gmlABS == null) {
continue; continue;
...@@ -892,8 +875,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -892,8 +875,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
if (gmlABS instanceof Storey gmlStorey) { if (gmlABS instanceof Storey gmlStorey) {
de.hft.stuttgart.citydoctor2.datastructure.Storey storey = mapBuildingStorey(gmlStorey); de.hft.stuttgart.citydoctor2.datastructure.Storey storey = mapBuildingStorey(gmlStorey);
cdBuilding.addStorey(storey); cdBuilding.addStorey(storey);
} } else if (gmlABS instanceof BuildingUnit gmlBU) {
else if (gmlABS instanceof BuildingUnit gmlBU){
de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit bu = mapBuildingUnit(gmlBU); de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit bu = mapBuildingUnit(gmlBU);
cdBuilding.addBuildingUnit(bu); cdBuilding.addBuildingUnit(bu);
} }
...@@ -928,7 +910,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -928,7 +910,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
} }
} }
for (BuildingFurnitureProperty bfProp : gmlAb.getBuildingFurniture()){ for (BuildingFurnitureProperty bfProp : gmlAb.getBuildingFurniture()) {
var gmlBf = bfProp.getObject(); var gmlBf = bfProp.getObject();
if (gmlBf == null) { if (gmlBf == null) {
continue; continue;
...@@ -942,7 +924,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -942,7 +924,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
BuildingRoom br = new BuildingRoom(); BuildingRoom br = new BuildingRoom();
br.setGmlObject(gmlBr); br.setGmlObject(gmlBr);
mapAbstractUnoccupiedSpace(gmlBr,br); mapAbstractUnoccupiedSpace(gmlBr, br);
SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, vertexMap, config); SurfaceMapper surfaceMapper = new SurfaceMapper(polygonMap, references, vertexMap, config);
for (AbstractSpaceBoundaryProperty surfaceProp : gmlBr.getBoundaries()) { for (AbstractSpaceBoundaryProperty surfaceProp : gmlBr.getBoundaries()) {
...@@ -969,7 +951,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -969,7 +951,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
Installation bi = mapBuildingInstallation(gmlBi); Installation bi = mapBuildingInstallation(gmlBi);
br.addRoomInstallation(bi); br.addRoomInstallation(bi);
} }
for (BuildingFurnitureProperty bfProp : gmlBr.getBuildingFurniture()){ for (BuildingFurnitureProperty bfProp : gmlBr.getBuildingFurniture()) {
var gmlHref = bfProp.getHref(); var gmlHref = bfProp.getHref();
if (gmlHref == null) { if (gmlHref == null) {
continue; continue;
...@@ -981,7 +963,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -981,7 +963,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
return br; return br;
} }
private BuildingRoomFurniture mapBuildingFurniture(BuildingFurniture gmlAF){ private BuildingRoomFurniture mapBuildingFurniture(BuildingFurniture gmlAF) {
BuildingRoomFurniture bf = new BuildingRoomFurniture(); BuildingRoomFurniture bf = new BuildingRoomFurniture();
bf.setGmlObject(gmlAF); bf.setGmlObject(gmlAF);
mapAbstractOccupiedSpace(gmlAF, bf); mapAbstractOccupiedSpace(gmlAF, bf);
...@@ -1006,7 +988,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -1006,7 +988,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
private de.hft.stuttgart.citydoctor2.datastructure.Storey mapBuildingStorey(Storey gmlStorey){ private de.hft.stuttgart.citydoctor2.datastructure.Storey mapBuildingStorey(Storey gmlStorey) {
de.hft.stuttgart.citydoctor2.datastructure.Storey storey = new de.hft.stuttgart.citydoctor2.datastructure.Storey(); de.hft.stuttgart.citydoctor2.datastructure.Storey storey = new de.hft.stuttgart.citydoctor2.datastructure.Storey();
storey.setGmlObject(gmlStorey); storey.setGmlObject(gmlStorey);
mapAbstractSpace(gmlStorey, storey); mapAbstractSpace(gmlStorey, storey);
...@@ -1030,7 +1012,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -1030,7 +1012,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
return storey; return storey;
} }
private de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit mapBuildingUnit(BuildingUnit gmlBU){ private de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit mapBuildingUnit(BuildingUnit gmlBU) {
de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit bu = new de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit(); de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit bu = new de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit();
bu.setGmlObject(gmlBU); bu.setGmlObject(gmlBU);
mapAbstractSpace(gmlBU, bu); mapAbstractSpace(gmlBU, bu);
...@@ -1065,13 +1047,6 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -1065,13 +1047,6 @@ public class Citygml3FeatureMapper extends ObjectWalker {
} }
} }
public static void parseId(AbstractGML gml, GmlElement gmlElement) {
String id = gml.getId();
if (id != null) {
gmlElement.setGmlId(new GmlId(id));
}
}
private Installation mapBuildingInstallation(org.citygml4j.core.model.building.BuildingInstallation gmlBi) { private Installation mapBuildingInstallation(org.citygml4j.core.model.building.BuildingInstallation gmlBi) {
Installation bi = new Installation(); Installation bi = new Installation();
bi.setGmlObject(gmlBi); bi.setGmlObject(gmlBi);
...@@ -1194,7 +1169,7 @@ public class Citygml3FeatureMapper extends ObjectWalker { ...@@ -1194,7 +1169,7 @@ public class Citygml3FeatureMapper extends ObjectWalker {
for (Geometry geom : co.getGeometries()) { for (Geometry geom : co.getGeometries()) {
KDTree tree = new KDTree(); KDTree tree = new KDTree();
for (Polygon poly : geom.getPolygons()) { for (Polygon poly : geom.getPolygons()) {
if (poly instanceof CompositePolygon){ if (poly instanceof CompositePolygon) {
continue; continue;
} }
LinearRing lr = poly.getExteriorRing(); LinearRing lr = poly.getExteriorRing();
......
...@@ -18,26 +18,25 @@ ...@@ -18,26 +18,25 @@
*/ */
package de.hft.stuttgart.citydoctor2.mapper.citygml3; package de.hft.stuttgart.citydoctor2.mapper.citygml3;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import de.hft.stuttgart.citydoctor2.datastructure.*;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.*;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.Localization;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.locationtech.proj4j.BasicCoordinateTransform; import org.locationtech.proj4j.BasicCoordinateTransform;
import org.locationtech.proj4j.ProjCoordinate; import org.locationtech.proj4j.ProjCoordinate;
import org.xmlobjects.gml.model.geometry.complexes.CompositeSurface; import org.xmlobjects.gml.model.geometry.complexes.CompositeSurface;
import org.xmlobjects.gml.model.geometry.primitives.*;
import org.xmlobjects.gml.model.geometry.primitives.Polygon; import org.xmlobjects.gml.model.geometry.primitives.Polygon;
import org.xmlobjects.gml.model.geometry.primitives.*;
import org.xmlobjects.gml.visitor.GeometryWalker; import org.xmlobjects.gml.visitor.GeometryWalker;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType; import java.math.BigDecimal;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import java.math.RoundingMode;
import de.hft.stuttgart.citydoctor2.utils.Localization; import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class Citygml3GeometryMapper extends GeometryWalker { public class Citygml3GeometryMapper extends GeometryWalker {
...@@ -59,7 +58,7 @@ public class Citygml3GeometryMapper extends GeometryWalker { ...@@ -59,7 +58,7 @@ public class Citygml3GeometryMapper extends GeometryWalker {
public void visit(Polygon polygon) { public void visit(Polygon polygon) {
parsePolygon(polygon.getId(), polygon.getExterior(), polygon.getInterior()); parsePolygon(polygon.getId(), polygon.getExterior(), polygon.getInterior());
if (polygon.getExterior() == null) { if (polygon.getExterior() == null) {
logger.warn(String.format("No exterior: %s" ,polygon.getId())); logger.warn(String.format("No exterior: %s", polygon.getId()));
} }
} }
...@@ -93,7 +92,7 @@ public class Citygml3GeometryMapper extends GeometryWalker { ...@@ -93,7 +92,7 @@ public class Citygml3GeometryMapper extends GeometryWalker {
} }
@Override @Override
public void visit(CompositeSurface cs){ public void visit(CompositeSurface cs) {
if (cs.getSurfaceMembers() != null && cs.getSurfaceMembers().isEmpty()) { if (cs.getSurfaceMembers() != null && cs.getSurfaceMembers().isEmpty()) {
logger.warn("CompositeSurface %s is empty", cs.getId()); logger.warn("CompositeSurface %s is empty", cs.getId());
return; return;
...@@ -101,7 +100,7 @@ public class Citygml3GeometryMapper extends GeometryWalker { ...@@ -101,7 +100,7 @@ public class Citygml3GeometryMapper extends GeometryWalker {
List<SurfaceProperty> surfaceMember = cs.getSurfaceMembers(); List<SurfaceProperty> surfaceMember = cs.getSurfaceMembers();
Citygml3GeometryMapper recursiveMapper = new Citygml3GeometryMapper(config, vertexMap); Citygml3GeometryMapper recursiveMapper = new Citygml3GeometryMapper(config, vertexMap);
CompositePolygon comp = new CompositePolygon(); CompositePolygon comp = new CompositePolygon();
if (cs.getId() == null){ if (cs.getId() == null) {
comp.setGmlId(GmlId.generateId()); comp.setGmlId(GmlId.generateId());
} else { } else {
comp.setGmlId(new GmlId(cs.getId())); comp.setGmlId(new GmlId(cs.getId()));
......
...@@ -18,34 +18,20 @@ ...@@ -18,34 +18,20 @@
*/ */
package de.hft.stuttgart.citydoctor2.mapper.citygml3; package de.hft.stuttgart.citydoctor2.mapper.citygml3;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.datastructure.*;
import org.citygml4j.core.model.construction.AbstractConstructionSurface; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import org.citygml4j.core.model.construction.AbstractFillingSurface; import org.citygml4j.core.model.construction.*;
import org.citygml4j.core.model.construction.AbstractFillingSurfaceProperty;
import org.citygml4j.core.model.construction.CeilingSurface;
import org.citygml4j.core.model.construction.DoorSurface;
import org.citygml4j.core.model.construction.FloorSurface;
import org.citygml4j.core.model.construction.GroundSurface;
import org.citygml4j.core.model.construction.InteriorWallSurface;
import org.citygml4j.core.model.construction.OuterCeilingSurface;
import org.citygml4j.core.model.construction.OuterFloorSurface;
import org.citygml4j.core.model.construction.RoofSurface;
import org.citygml4j.core.model.construction.WallSurface;
import org.citygml4j.core.model.construction.WindowSurface;
import org.citygml4j.core.model.core.AbstractThematicSurface; import org.citygml4j.core.model.core.AbstractThematicSurface;
import org.citygml4j.core.model.core.ClosureSurface; import org.citygml4j.core.model.core.ClosureSurface;
import org.citygml4j.core.visitor.ObjectWalker; import org.citygml4j.core.visitor.ObjectWalker;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty;
import org.xmlobjects.gml.model.geometry.complexes.CompositeSurface;
import org.xmlobjects.gml.model.geometry.primitives.AbstractSurface; import org.xmlobjects.gml.model.geometry.primitives.AbstractSurface;
import org.xmlobjects.gml.model.geometry.primitives.SurfaceProperty; import org.xmlobjects.gml.model.geometry.primitives.SurfaceProperty;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class SurfaceMapper extends ObjectWalker { public class SurfaceMapper extends ObjectWalker {
...@@ -86,7 +72,7 @@ public class SurfaceMapper extends ObjectWalker { ...@@ -86,7 +72,7 @@ public class SurfaceMapper extends ObjectWalker {
Opening o; Opening o;
if (afs instanceof DoorSurface ds) { if (afs instanceof DoorSurface ds) {
o = new Opening(OpeningType.DOOR, SurfaceFeatureType.BUILDING, cdSurface, ds); o = new Opening(OpeningType.DOOR, SurfaceFeatureType.BUILDING, cdSurface, ds);
} else if (afs instanceof WindowSurface ws){ } else if (afs instanceof WindowSurface ws) {
o = new Opening(OpeningType.WINDOW, SurfaceFeatureType.BUILDING, cdSurface, ws); o = new Opening(OpeningType.WINDOW, SurfaceFeatureType.BUILDING, cdSurface, ws);
} else { } else {
o = new Opening(OpeningType.UNKNOWN, SurfaceFeatureType.BUILDING, cdSurface, afs); o = new Opening(OpeningType.UNKNOWN, SurfaceFeatureType.BUILDING, cdSurface, afs);
......
...@@ -18,30 +18,26 @@ ...@@ -18,30 +18,26 @@
*/ */
package de.hft.stuttgart.citydoctor2.utils; package de.hft.stuttgart.citydoctor2.utils;
import java.util.ArrayList; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import java.util.HashSet; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.datastructure.*; import de.hft.stuttgart.citydoctor2.datastructure.*;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import org.citygml4j.core.util.geometry.GeometryFactory; import org.citygml4j.core.util.geometry.GeometryFactory;
import org.locationtech.proj4j.BasicCoordinateTransform; import org.locationtech.proj4j.BasicCoordinateTransform;
import org.locationtech.proj4j.ProjCoordinate; import org.locationtech.proj4j.ProjCoordinate;
import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface; import org.xmlobjects.gml.model.geometry.aggregates.MultiSurface;
import org.xmlobjects.gml.model.geometry.complexes.CompositeSurface; import org.xmlobjects.gml.model.geometry.complexes.CompositeSurface;
import org.xmlobjects.gml.model.geometry.primitives.AbstractRingProperty; import org.xmlobjects.gml.model.geometry.primitives.*;
import org.xmlobjects.gml.model.geometry.primitives.Shell;
import org.xmlobjects.gml.model.geometry.primitives.ShellProperty;
import org.xmlobjects.gml.model.geometry.primitives.Solid;
import org.xmlobjects.gml.model.geometry.primitives.SurfaceProperty;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/** /**
* Utility class dedicated to create CityGML4j datastructures. * Utility class dedicated to create CityGML4j datastructures.
* *
* @author Matthias Betz * @author Matthias Betz
*
*/ */
public final class CityGmlUtils { public final class CityGmlUtils {
...@@ -86,14 +82,14 @@ public final class CityGmlUtils { ...@@ -86,14 +82,14 @@ public final class CityGmlUtils {
for (ConcretePolygon cd : cdMembers) { for (ConcretePolygon cd : cdMembers) {
surfaces.add(resolveCompositeMember(factory, cd, config)); surfaces.add(resolveCompositeMember(factory, cd, config));
} }
if (surfaces.isEmpty()){ if (surfaces.isEmpty()) {
return null; return null;
} }
return new CompositeSurface(surfaces); return new CompositeSurface(surfaces);
} }
private static SurfaceProperty resolveCompositeMember(GeometryFactory factory, ConcretePolygon cdPoly, private static SurfaceProperty resolveCompositeMember(GeometryFactory factory, ConcretePolygon cdPoly,
ParserConfiguration config){ ParserConfiguration config) {
if (cdPoly instanceof CompositePolygon comp) { if (cdPoly instanceof CompositePolygon comp) {
return new SurfaceProperty(createGmlComposite(factory, comp, config)); return new SurfaceProperty(createGmlComposite(factory, comp, config));
} else { } else {
...@@ -169,7 +165,7 @@ public final class CityGmlUtils { ...@@ -169,7 +165,7 @@ public final class CityGmlUtils {
for (Polygon cdPoly : geom.getPolygons()) { for (Polygon cdPoly : geom.getPolygons()) {
if (cdPoly instanceof ConcretePolygon conc && conc.isCompositeMember()) { if (cdPoly instanceof ConcretePolygon conc && conc.isCompositeMember()) {
compositePolygons.add(conc.getPartOfComposite()); compositePolygons.add(conc.getPartOfComposite());
}else if (cdPoly instanceof CompositePolygon composite) { } else if (cdPoly instanceof CompositePolygon composite) {
compositePolygons.add(composite); compositePolygons.add(composite);
} else if (!cdPoly.isLink()) { } else if (!cdPoly.isLink()) {
// is not part of a boundary surface // is not part of a boundary surface
......
package de.hft.stuttgart.citydoctor2.gui; package de.hft.stuttgart.citydoctor2.gui;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.StringJoiner;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import de.hft.stuttgart.citydoctor2.datastructure.*;
import de.hft.stuttgart.citydoctor2.gui.tree.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.citygml4j.core.model.core.CityModel;
import org.xml.sax.SAXParseException;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.Checker; import de.hft.stuttgart.citydoctor2.check.Checker;
import de.hft.stuttgart.citydoctor2.check.ErrorId; import de.hft.stuttgart.citydoctor2.check.ErrorId;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration; import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
import de.hft.stuttgart.citydoctor2.check.error.SchematronError; import de.hft.stuttgart.citydoctor2.check.error.SchematronError;
import de.hft.stuttgart.citydoctor2.datastructure.*;
import de.hft.stuttgart.citydoctor2.exceptions.CityDoctorWriteException; import de.hft.stuttgart.citydoctor2.exceptions.CityDoctorWriteException;
import de.hft.stuttgart.citydoctor2.gui.table.ErrorStat; import de.hft.stuttgart.citydoctor2.gui.table.ErrorStat;
import de.hft.stuttgart.citydoctor2.gui.tree.*;
import de.hft.stuttgart.citydoctor2.mapper.citygml3.GMLValidationHandler; import de.hft.stuttgart.citydoctor2.mapper.citygml3.GMLValidationHandler;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException; import de.hft.stuttgart.citydoctor2.parser.*;
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.citydoctor2.parser.ProgressListener;
import de.hft.stuttgart.citydoctor2.utils.Localization; import de.hft.stuttgart.citydoctor2.utils.Localization;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.chart.XYChart.Data; import javafx.scene.chart.XYChart.Data;
...@@ -42,6 +21,15 @@ import javafx.scene.control.TreeItem; ...@@ -42,6 +21,15 @@ import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView; import javafx.scene.control.TreeView;
import javafx.stage.FileChooser; import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter; import javafx.stage.FileChooser.ExtensionFilter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.citygml4j.core.model.core.CityModel;
import org.xml.sax.SAXParseException;
import java.io.File;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
public class CityDoctorController { public class CityDoctorController {
...@@ -150,7 +138,7 @@ public class CityDoctorController { ...@@ -150,7 +138,7 @@ public class CityDoctorController {
} }
} }
private void setupFeatureTabs(){ private void setupFeatureTabs() {
mainWindow.setDisableOfFeatureTab(FeatureType.BUILDING, model.getBuildings().isEmpty()); mainWindow.setDisableOfFeatureTab(FeatureType.BUILDING, model.getBuildings().isEmpty());
mainWindow.setDisableOfFeatureTab(FeatureType.VEGETATION, model.getVegetation().isEmpty()); mainWindow.setDisableOfFeatureTab(FeatureType.VEGETATION, model.getVegetation().isEmpty());
mainWindow.setDisableOfFeatureTab(FeatureType.TRANSPORTATION, model.getTransportation().isEmpty()); mainWindow.setDisableOfFeatureTab(FeatureType.TRANSPORTATION, model.getTransportation().isEmpty());
...@@ -298,7 +286,7 @@ public class CityDoctorController { ...@@ -298,7 +286,7 @@ public class CityDoctorController {
addMoreButtonIfNecessary(trans, transView, transRoot, transportationChunkNr); addMoreButtonIfNecessary(trans, transView, transRoot, transportationChunkNr);
} }
private void buildTunnel(List<Tunnel> tunnels){ private void buildTunnel(List<Tunnel> tunnels) {
if (tunnels.isEmpty()) { if (tunnels.isEmpty()) {
return; return;
} }
...@@ -575,7 +563,7 @@ public class CityDoctorController { ...@@ -575,7 +563,7 @@ public class CityDoctorController {
} }
private void createBuildingStoreyNodes(Building ab, TreeItem<Renderable> root){ private void createBuildingStoreyNodes(Building ab, TreeItem<Renderable> root) {
List<Storey> storeys = ab.getBuildingStoreys(); List<Storey> storeys = ab.getBuildingStoreys();
if (storeys.isEmpty()) { if (storeys.isEmpty()) {
return; return;
...@@ -1087,7 +1075,7 @@ public class CityDoctorController { ...@@ -1087,7 +1075,7 @@ public class CityDoctorController {
transportationChunkNr); transportationChunkNr);
} }
public void fillTreeViewWithErrorTunnel(){ public void fillTreeViewWithErrorTunnel() {
if (model == null) { if (model == null) {
return; return;
} }
...@@ -1264,7 +1252,7 @@ public class CityDoctorController { ...@@ -1264,7 +1252,7 @@ public class CityDoctorController {
return currentConfig; return currentConfig;
} }
public void setOriginBB(BoundingBox origin){ public void setOriginBB(BoundingBox origin) {
this.originBB = origin; this.originBB = origin;
} }
......
package de.hft.stuttgart.citydoctor2.gui; package de.hft.stuttgart.citydoctor2.gui;
import java.io.IOException;
import java.io.InputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.hft.stuttgart.citydoctor2.gui.tree.Renderable; import de.hft.stuttgart.citydoctor2.gui.tree.Renderable;
import de.hft.stuttgart.citydoctor2.utils.Localization; import de.hft.stuttgart.citydoctor2.utils.Localization;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button; import javafx.scene.control.*;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.Tooltip;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.stage.Stage; import javafx.stage.Stage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
public class MainToolBar { public class MainToolBar {
...@@ -320,7 +314,7 @@ public class MainToolBar { ...@@ -320,7 +314,7 @@ public class MainToolBar {
}); });
} }
private void setupResetCameraButton(){ private void setupResetCameraButton() {
resetCameraBtn.setDisable(true); resetCameraBtn.setDisable(true);
resetCameraBtn.setTooltip(new Tooltip(Localization.getText("MainToolBar.resetCamera"))); resetCameraBtn.setTooltip(new Tooltip(Localization.getText("MainToolBar.resetCamera")));
resetCameraBtn.setOnAction(ae -> mainWindow.resetCamera()); resetCameraBtn.setOnAction(ae -> mainWindow.resetCamera());
...@@ -336,7 +330,8 @@ public class MainToolBar { ...@@ -336,7 +330,8 @@ public class MainToolBar {
renderer.hideRoofs(); renderer.hideRoofs();
} else { } else {
renderer.showRoofs(); renderer.showRoofs();
}}); }
});
} }
...@@ -376,7 +371,7 @@ public class MainToolBar { ...@@ -376,7 +371,7 @@ public class MainToolBar {
return lod4Btn; return lod4Btn;
} }
public ToggleButton getHideRoofBtn(){ public ToggleButton getHideRoofBtn() {
return hideRoofBtn; return hideRoofBtn;
} }
...@@ -388,7 +383,7 @@ public class MainToolBar { ...@@ -388,7 +383,7 @@ public class MainToolBar {
return saveBtn; return saveBtn;
} }
public Button getResetCameraBtn(){ public Button getResetCameraBtn() {
return resetCameraBtn; return resetCameraBtn;
} }
......
package de.hft.stuttgart.citydoctor2.gui; package de.hft.stuttgart.citydoctor2.gui;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
import java.util.Timer;
import java.util.TimerTask;
import javax.imageio.ImageIO;
import javafx.scene.chart.NumberAxis;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.hft.stuttgart.citydoctor2.CityDoctorValidation; import de.hft.stuttgart.citydoctor2.CityDoctorValidation;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration; import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
import de.hft.stuttgart.citydoctor2.datastructure.BoundingBox; import de.hft.stuttgart.citydoctor2.datastructure.BoundingBox;
...@@ -35,35 +19,9 @@ import javafx.beans.value.ChangeListener; ...@@ -35,35 +19,9 @@ import javafx.beans.value.ChangeListener;
import javafx.embed.swing.SwingFXUtils; import javafx.embed.swing.SwingFXUtils;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.AmbientLight; import javafx.scene.*;
import javafx.scene.Group; import javafx.scene.control.*;
import javafx.scene.Node;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.SceneAntialiasing;
import javafx.scene.SubScene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.RadioButton;
import javafx.scene.control.SplitPane;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.control.ToolBar;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage; import javafx.scene.image.WritableImage;
...@@ -78,6 +36,15 @@ import javafx.scene.layout.Priority; ...@@ -78,6 +36,15 @@ import javafx.scene.layout.Priority;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.transform.Rotate; import javafx.scene.transform.Rotate;
import javafx.stage.Stage; import javafx.stage.Stage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
public class MainWindow extends Application { public class MainWindow extends Application {
...@@ -673,7 +640,7 @@ public class MainWindow extends Application { ...@@ -673,7 +640,7 @@ public class MainWindow extends Application {
}); });
} }
public void setDisableOfFeatureTab(FeatureType featureType, boolean value){ public void setDisableOfFeatureTab(FeatureType featureType, boolean value) {
switch (featureType) { switch (featureType) {
case BUILDING: case BUILDING:
buildingsTab.setDisable(value); buildingsTab.setDisable(value);
...@@ -708,7 +675,7 @@ public class MainWindow extends Application { ...@@ -708,7 +675,7 @@ public class MainWindow extends Application {
} }
} }
public void activateAllTabs(){ public void activateAllTabs() {
buildingsTab.setDisable(false); buildingsTab.setDisable(false);
vegetationTab.setDisable(false); vegetationTab.setDisable(false);
transportationTab.setDisable(false); transportationTab.setDisable(false);
...@@ -921,7 +888,7 @@ public class MainWindow extends Application { ...@@ -921,7 +888,7 @@ public class MainWindow extends Application {
alignNorthArrow(); alignNorthArrow();
} }
if (me.getButton() == MouseButton.SECONDARY) { if (me.getButton() == MouseButton.SECONDARY) {
double translationSpeed = Math.abs(camera.getTranslateZ())/1000; double translationSpeed = Math.abs(camera.getTranslateZ()) / 1000;
double deltaX = me.getScreenX() - dragX; double deltaX = me.getScreenX() - dragX;
double deltaY = me.getScreenY() - dragY; double deltaY = me.getScreenY() - dragY;
dragX = me.getScreenX(); dragX = me.getScreenX();
...@@ -942,27 +909,27 @@ public class MainWindow extends Application { ...@@ -942,27 +909,27 @@ public class MainWindow extends Application {
cameraXRotation.setAngle(cameraYRot); cameraXRotation.setAngle(cameraYRot);
} }
public void alignNorthArrow(){ public void alignNorthArrow() {
double absRotZ = cameraZRotation.getAngle() - 360 * Math.floor(cameraZRotation.getAngle() / 360); double absRotZ = cameraZRotation.getAngle() - 360 * Math.floor(cameraZRotation.getAngle() / 360);
double absRotX = cameraXRotation.getAngle() - 360 * Math.floor(cameraXRotation.getAngle() / 360); double absRotX = cameraXRotation.getAngle() - 360 * Math.floor(cameraXRotation.getAngle() / 360);
double northRot; double northRot;
if (80 <= absRotX && absRotX <= 260){ if (80 <= absRotX && absRotX <= 260) {
northRot = 360-absRotZ; northRot = 360 - absRotZ;
if (northArrow.getImage() != north){ if (northArrow.getImage() != north) {
northArrow.setImage(north); northArrow.setImage(north);
} }
} else { } else {
//Camera is below horizon line -> flip north arrow horizontally //Camera is below horizon line -> flip north arrow horizontally
northRot = (absRotZ+180)%360; northRot = (absRotZ + 180) % 360;
if (northArrow.getImage() != northFlip){ if (northArrow.getImage() != northFlip) {
northArrow.setImage(northFlip); northArrow.setImage(northFlip);
} }
} }
northArrow.setRotate(northRot); northArrow.setRotate(northRot);
} }
public void resetCamera(){ public void resetCamera() {
cameraXRot = CAMERA_INITIAL_X_ANGLE; cameraXRot = CAMERA_INITIAL_X_ANGLE;
cameraYRot = CAMERA_INITIAL_Y_ANGLE; cameraYRot = CAMERA_INITIAL_Y_ANGLE;
cameraZRotation.setAngle(cameraXRot); cameraZRotation.setAngle(cameraXRot);
...@@ -1092,15 +1059,15 @@ public class MainWindow extends Application { ...@@ -1092,15 +1059,15 @@ public class MainWindow extends Application {
return mainToolBar.getWorldBtn(); return mainToolBar.getWorldBtn();
} }
public Button getResetCameraBtn(){ public Button getResetCameraBtn() {
return mainToolBar.getResetCameraBtn(); return mainToolBar.getResetCameraBtn();
} }
public ToggleButton getHideRoofBtn(){ public ToggleButton getHideRoofBtn() {
return mainToolBar.getHideRoofBtn(); return mainToolBar.getHideRoofBtn();
} }
public ImageView getNorthArrow(){ public ImageView getNorthArrow() {
return northArrow; return northArrow;
} }
......
package de.hft.stuttgart.citydoctor2.gui; package de.hft.stuttgart.citydoctor2.gui;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import de.hft.stuttgart.citydoctor2.datastructure.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.hft.stuttgart.citydoctor2.check.CheckError; import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.Checkable; import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.datastructure.*;
import de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter; import de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter;
import de.hft.stuttgart.citydoctor2.gui.tree.EdgeNode; import de.hft.stuttgart.citydoctor2.gui.tree.*;
import de.hft.stuttgart.citydoctor2.gui.tree.ErrorItemVisitor;
import de.hft.stuttgart.citydoctor2.gui.tree.ErrorNode;
import de.hft.stuttgart.citydoctor2.gui.tree.LinearRingNode;
import de.hft.stuttgart.citydoctor2.gui.tree.PolygonNode;
import de.hft.stuttgart.citydoctor2.gui.tree.Renderable;
import de.hft.stuttgart.citydoctor2.gui.tree.VertexNode;
import de.hft.stuttgart.citydoctor2.math.Triangle3d; import de.hft.stuttgart.citydoctor2.math.Triangle3d;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.TreeItem; import javafx.scene.control.TreeItem;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.shape.CullFace; import javafx.scene.shape.CullFace;
import javafx.scene.shape.DrawMode; import javafx.scene.shape.DrawMode;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException;
import java.util.*;
public class Renderer { public class Renderer {
...@@ -99,8 +88,8 @@ public class Renderer { ...@@ -99,8 +88,8 @@ public class Renderer {
}); });
roofFilter = new ViewFilter() { roofFilter = new ViewFilter() {
@Override @Override
public boolean allowedToUse(CityObject co, Geometry geom){ public boolean allowedToUse(CityObject co, Geometry geom) {
if (!this.isEnabled()){ if (!this.isEnabled()) {
return true; return true;
} }
return this.useGeometry(co, geom); return this.useGeometry(co, geom);
...@@ -108,7 +97,7 @@ public class Renderer { ...@@ -108,7 +97,7 @@ public class Renderer {
@Override @Override
public boolean useGeometry(CityObject co, Geometry geom) { public boolean useGeometry(CityObject co, Geometry geom) {
if (co instanceof BoundarySurface bs){ if (co instanceof BoundarySurface bs) {
return bs.getType() != BoundarySurfaceType.ROOF; return bs.getType() != BoundarySurfaceType.ROOF;
} }
return true; return true;
...@@ -174,14 +163,14 @@ public class Renderer { ...@@ -174,14 +163,14 @@ public class Renderer {
} }
} }
public void hideRoofs(){ public void hideRoofs() {
roofFilter.setEnable(true); roofFilter.setEnable(true);
if (refresher != null) { if (refresher != null) {
refresher.run(); refresher.run();
} }
} }
public void showRoofs(){ public void showRoofs() {
roofFilter.setEnable(false); roofFilter.setEnable(false);
if (refresher != null) { if (refresher != null) {
refresher.run(); refresher.run();
...@@ -221,13 +210,13 @@ public class Renderer { ...@@ -221,13 +210,13 @@ public class Renderer {
} }
for (BuildingRoom br : b.getBuildingRooms()) { for (BuildingRoom br : b.getBuildingRooms()) {
addPolygons(br, polygons); addPolygons(br, polygons);
for (BoundarySurface bs : br.getBoundarySurfaceList()){ for (BoundarySurface bs : br.getBoundarySurfaceList()) {
addPolygons(bs, polygons); addPolygons(bs, polygons);
} }
} }
for (BuildingRoomFurniture brf : b.getBuildingRoomFurnitureList()){ for (BuildingRoomFurniture brf : b.getBuildingRoomFurnitureList()) {
addPolygons(brf, polygons); addPolygons(brf, polygons);
for (BoundarySurface bs : brf.getBoundarySurfaceList()){ for (BoundarySurface bs : brf.getBoundarySurfaceList()) {
addPolygons(bs, polygons); addPolygons(bs, polygons);
} }
} }
...@@ -271,7 +260,7 @@ public class Renderer { ...@@ -271,7 +260,7 @@ public class Renderer {
return polygons; return polygons;
} }
public void render(AbstractRoom room){ public void render(AbstractRoom room) {
refresher = () -> { refresher = () -> {
Set<ConcretePolygon> setupRoomPolygons = setupRoomPolygons(room); Set<ConcretePolygon> setupRoomPolygons = setupRoomPolygons(room);
mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupRoomPolygons)); mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupRoomPolygons));
...@@ -296,7 +285,7 @@ public class Renderer { ...@@ -296,7 +285,7 @@ public class Renderer {
return polygons; return polygons;
} }
public void render(AbstractFurniture furniture){ public void render(AbstractFurniture furniture) {
refresher = () -> { refresher = () -> {
Set<ConcretePolygon> setupFurniturePolygons = setupFurniturePolygons(furniture); Set<ConcretePolygon> setupFurniturePolygons = setupFurniturePolygons(furniture);
mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupFurniturePolygons)); mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupFurniturePolygons));
...@@ -321,7 +310,7 @@ public class Renderer { ...@@ -321,7 +310,7 @@ public class Renderer {
return polygons; return polygons;
} }
public void render(Storey storey){ public void render(Storey storey) {
refresher = () -> { refresher = () -> {
Set<ConcretePolygon> setupStoreyPolygons = setupStoreyPolygons(storey); Set<ConcretePolygon> setupStoreyPolygons = setupStoreyPolygons(storey);
mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupStoreyPolygons)); mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupStoreyPolygons));
...@@ -346,7 +335,7 @@ public class Renderer { ...@@ -346,7 +335,7 @@ public class Renderer {
return polygons; return polygons;
} }
public void render(BuildingUnit buildingUnit){ public void render(BuildingUnit buildingUnit) {
refresher = () -> { refresher = () -> {
Set<ConcretePolygon> setupBuildingUnitPolgons = setupBuildingUnitPolygons(buildingUnit); Set<ConcretePolygon> setupBuildingUnitPolgons = setupBuildingUnitPolygons(buildingUnit);
mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupBuildingUnitPolgons)); mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupBuildingUnitPolgons));
...@@ -371,7 +360,7 @@ public class Renderer { ...@@ -371,7 +360,7 @@ public class Renderer {
return polygons; return polygons;
} }
public void render(Tunnel tunnel){ public void render(Tunnel tunnel) {
refresher = () -> { refresher = () -> {
Set<ConcretePolygon> setupTunnelPolygons = setupTunnelPolygons(tunnel); Set<ConcretePolygon> setupTunnelPolygons = setupTunnelPolygons(tunnel);
mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupTunnelPolygons)); mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupTunnelPolygons));
...@@ -401,13 +390,13 @@ public class Renderer { ...@@ -401,13 +390,13 @@ public class Renderer {
} }
for (TunnelHollow th : tunnel.getTunnelHollows()) { for (TunnelHollow th : tunnel.getTunnelHollows()) {
addPolygons(th, polygons); addPolygons(th, polygons);
for (BoundarySurface bs : th.getBoundarySurfaceList()){ for (BoundarySurface bs : th.getBoundarySurfaceList()) {
addPolygons(bs, polygons); addPolygons(bs, polygons);
} }
} }
for (TunnelFurniture tf : tunnel.getTunnelFurnitureList()){ for (TunnelFurniture tf : tunnel.getTunnelFurnitureList()) {
addPolygons(tf, polygons); addPolygons(tf, polygons);
for (BoundarySurface bs : tf.getBoundarySurfaceList()){ for (BoundarySurface bs : tf.getBoundarySurfaceList()) {
addPolygons(bs, polygons); addPolygons(bs, polygons);
} }
} }
...@@ -551,7 +540,7 @@ public class Renderer { ...@@ -551,7 +540,7 @@ public class Renderer {
return polygons; return polygons;
} }
public void render(GenericCityObject gco){ public void render(GenericCityObject gco) {
refresher = () -> { refresher = () -> {
Set<ConcretePolygon> setupGenericCityObjectPolygons = setupGenericCityObjectPolygons(gco); Set<ConcretePolygon> setupGenericCityObjectPolygons = setupGenericCityObjectPolygons(gco);
mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupGenericCityObjectPolygons)); mainWindow.zoomOutForBoundingBox(BoundingBox.of(setupGenericCityObjectPolygons));
...@@ -669,7 +658,7 @@ public class Renderer { ...@@ -669,7 +658,7 @@ public class Renderer {
private void addGeometryDataToView(Geometry geom) { private void addGeometryDataToView(Geometry geom) {
for (Polygon p : geom.getPolygons()) { for (Polygon p : geom.getPolygons()) {
if (p instanceof CompositePolygon){ if (p instanceof CompositePolygon) {
continue; continue;
} }
addPolygonToView(p); addPolygonToView(p);
...@@ -823,7 +812,7 @@ public class Renderer { ...@@ -823,7 +812,7 @@ public class Renderer {
renderCityObjects(water, Color.LIGHTSKYBLUE); renderCityObjects(water, Color.LIGHTSKYBLUE);
} }
public void renderCityFurniture(List<CityFurniture> cityFurniture){ public void renderCityFurniture(List<CityFurniture> cityFurniture) {
errorUpdater = null; errorUpdater = null;
refresher = () -> { refresher = () -> {
Platform.runLater(() -> { Platform.runLater(() -> {
...@@ -915,7 +904,7 @@ public class Renderer { ...@@ -915,7 +904,7 @@ public class Renderer {
refresher.run(); refresher.run();
} }
public void renderTunnels(List<Tunnel> objects){ public void renderTunnels(List<Tunnel> objects) {
errorUpdater = null; errorUpdater = null;
refresher = () -> { refresher = () -> {
Platform.runLater(() -> { Platform.runLater(() -> {
...@@ -960,7 +949,7 @@ public class Renderer { ...@@ -960,7 +949,7 @@ public class Renderer {
} }
for (BuildingRoom br : ab.getBuildingRooms()) { for (BuildingRoom br : ab.getBuildingRooms()) {
addPolygons(br, polygons); addPolygons(br, polygons);
for (BoundarySurface bs : br.getBoundarySurfaceList()){ for (BoundarySurface bs : br.getBoundarySurfaceList()) {
addPolygons(bs, polygons); addPolygons(bs, polygons);
} }
} }
...@@ -972,7 +961,8 @@ public class Renderer { ...@@ -972,7 +961,8 @@ public class Renderer {
} }
} }
public void collectTunnelPolygons(Set<ConcretePolygon> polygons, AbstractTunnel at) {} public void collectTunnelPolygons(Set<ConcretePolygon> polygons, AbstractTunnel at) {
}
private void collectCityFurniture(Set<ConcretePolygon> polygons, CityFurniture cf) { private void collectCityFurniture(Set<ConcretePolygon> polygons, CityFurniture cf) {
addPolygons(cf, polygons); addPolygons(cf, polygons);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment