package org.osm2world.core.world.modules; import org.osm2world.core.map_data.data.MapArea; import org.osm2world.core.map_data.data.MapAreaSegment; import org.osm2world.core.map_data.data.MapElement; import org.osm2world.core.map_data.data.MapNode; import org.osm2world.core.map_data.data.MapSegment; import org.osm2world.core.map_data.data.MapWaySegment; import org.osm2world.core.map_elevation.data.GroundState; import org.osm2world.core.world.data.AbstractAreaWorldObject; import org.osm2world.core.world.data.NoOutlineNodeWorldObject; import org.osm2world.core.world.data.NoOutlineWaySegmentWorldObject; import org.osm2world.core.world.modules.common.AbstractModule; /** * creates invisible world objects that are not rendered, * but nevertheless contain important information (such as elevation at a point) */ public class InvisibleModule extends AbstractModule { @Override protected void applyToNode(MapNode node) { if (node.getTags().containsKey("ele") && node.getRepresentations().isEmpty()) { boolean isInGroundSegment = false; for (MapSegment segment : node.getConnectedSegments()) { MapElement element; if (segment instanceof MapWaySegment) { element = (MapWaySegment)segment; } else { element = ((MapAreaSegment)segment).getArea(); } if (element.getPrimaryRepresentation() != null && element.getPrimaryRepresentation().getGroundState() == GroundState.ON) { isInGroundSegment = true; break; } } if (node.getConnectedSegments().isEmpty() || isInGroundSegment) { node.addRepresentation(new InvisibleEleNode(node)); } } } @Override protected void applyToWaySegment(MapWaySegment segment) { if (segment.getTags().containsKey("ele") && segment.getRepresentations().isEmpty()) { segment.addRepresentation(new InvisibleEleWaySegment(segment)); } } @Override protected void applyToArea(MapArea area) { if (area.getTags().containsKey("ele") && area.getRepresentations().isEmpty()) { area.addRepresentation(new InvisibleEleArea(area)); } } private static class InvisibleEleNode extends NoOutlineNodeWorldObject { public InvisibleEleNode(MapNode node) { super(node); } @Override public GroundState getGroundState() { return GroundState.ON; } } private static class InvisibleEleWaySegment extends NoOutlineWaySegmentWorldObject { public InvisibleEleWaySegment(MapWaySegment segment) { super(segment); } @Override public GroundState getGroundState() { return GroundState.ON; } } private static class InvisibleEleArea extends AbstractAreaWorldObject { protected InvisibleEleArea(MapArea area) { super(area); } @Override public GroundState getGroundState() { return GroundState.ON; } } }