Package org.osm2world.core.world.modules

Source Code of org.osm2world.core.world.modules.InvisibleModule$InvisibleEleNode

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;
    }
   
  }
 
 
}
TOP

Related Classes of org.osm2world.core.world.modules.InvisibleModule$InvisibleEleNode

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.