Package org.osm2world.core.map_elevation.data

Examples of org.osm2world.core.map_elevation.data.EleConnector


      for (MapOverlap<?, ?> overlap : area.getOverlaps()) {
      for (WorldObject otherWO : overlap.getOther(area).getRepresentations()) {
       
        for (EleConnector eleConnector : otherWO.getEleConnectors()) {
         
          EleConnector ownConnector = getEleConnectors().getConnector(eleConnector.pos);
         
          if (ownConnector == null) continue;
                   
          if (eleConnector.groundState == ABOVE) {
           
View Full Code Here


   
    Iterator<EleConnector> csIterator = cs.iterator();
   
    if (csIterator.hasNext()) {
   
      EleConnector c = csIterator.next();
   
      while (csIterator.hasNext()) {
        requireSameEle(c, csIterator.next());
      }
     
View Full Code Here

     
      treeConnectors = new ArrayList<EleConnector>(treePositions.size());
     
      for (VectorXZ treePosition : treePositions) {
        treeConnectors.add(
            new EleConnector(treePosition, null, getGroundState()));
      }
     
    }
View Full Code Here

      /* create a terrain connector for each tree */
     
      treeConnectors = new ArrayList<EleConnector>(treePositions.size());
     
      for (VectorXZ treePosition : treePositions) {
        treeConnectors.add(new EleConnector(
            treePosition, null, getGroundState()));
      }
     
    }
View Full Code Here

 
  public NoOutlineWaySegmentWorldObject(MapWaySegment segment) {
   
    this.segment = segment;
   
    startConnector = new EleConnector(getStartPosition(),
        segment.getStartNode(), getGroundState());
    endConnector = new EleConnector(getEndPosition(),
        segment.getEndNode(), getGroundState());
   
  }
View Full Code Here

 
  private final EleConnector connector;
 
  public NoOutlineNodeWorldObject(MapNode node) {
    this.node = node;
    this.connector = new EleConnector(node.getPos(), node,
        getGroundState());
  }
View Full Code Here

      final VectorXZ start = getStartWithOffset();
      final VectorXZ end = getEndWithOffset();
     
      centerlineXZ.add(start);
     
      connectors.add(new EleConnector(start,
          segment.getStartNode(), getGroundState(segment.getStartNode())));
     
      // add intersections along the centerline
     
      for (MapOverlap<?,?> overlap : segment.getOverlaps()) {
       
        if (overlap.getOther(segment).getPrimaryRepresentation() == null)
          continue;
       
        if (overlap instanceof MapIntersectionWW) {
         
          MapIntersectionWW intersection = (MapIntersectionWW) overlap;
         
          if (GeometryUtil.isBetween(intersection.pos, start, end)) {
           
            centerlineXZ.add(intersection.pos);
           
            connectors.add(new EleConnector(intersection.pos,
                null, getGroundState()));
           
          }
         
        } else if (overlap instanceof MapOverlapWA
            && overlap.type == MapOverlapType.INTERSECT) {
         
          if (!(overlap.getOther(segment).getPrimaryRepresentation()
              instanceof AbstractAreaWorldObject)) continue;
         
          MapOverlapWA overlapWA = (MapOverlapWA) overlap;
         
          for (int i = 0; i < overlapWA.getIntersectionPositions().size(); i++) {
         
            VectorXZ pos = overlapWA.getIntersectionPositions().get(i);
           
            if (GeometryUtil.isBetween(pos, start, end)) {
             
              centerlineXZ.add(pos);
             
              connectors.add(new EleConnector(pos,
                  null, getGroundState()));
             
            }
         
          }
         
        }
       
       
      }
     
      // finish the centerline
     
      centerlineXZ.add(end);

      connectors.add(new EleConnector(end,
          segment.getEndNode(), getGroundState(segment.getEndNode())));
     
      if (centerlineXZ.size() > 3) {
       
        // sort by distance from start
        Collections.sort(centerlineXZ, new Comparator<VectorXZ>() {
          @Override
          public int compare(VectorXZ v1, VectorXZ v2) {
            return Double.compare(
                distanceSquared(v1, start),
                distanceSquared(v2, start));
          }
        });
       
      }
     
    }
   
    { /* calculate left and right outlines */
     
      leftOutlineXZ = new ArrayList<VectorXZ>(centerlineXZ.size());
      rightOutlineXZ = new ArrayList<VectorXZ>(centerlineXZ.size());
     
      assert centerlineXZ.size() >= 2;
     
      double halfWidth = getWidth() * 0.5f;
     
      VectorXZ centerStart = centerlineXZ.get(0);
      leftOutlineXZ.add(centerStart.add(startCutVector.mult(-halfWidth)));
      rightOutlineXZ.add(centerStart.add(startCutVector.mult(halfWidth)));
     
      connectors.add(new EleConnector(leftOutlineXZ.get(0),
          segment.getStartNode(), getGroundState(segment.getStartNode())));
      connectors.add(new EleConnector(rightOutlineXZ.get(0),
          segment.getStartNode(), getGroundState(segment.getStartNode())));
     
      for (int i = 1; i < centerlineXZ.size() - 1; i++) {
       
        leftOutlineXZ.add(centerlineXZ.get(i).add(segment.getRightNormal().mult(-halfWidth)));
        rightOutlineXZ.add(centerlineXZ.get(i).add(segment.getRightNormal().mult(halfWidth)));
       
        connectors.add(new EleConnector(leftOutlineXZ.get(i),
            null, getGroundState()));
        connectors.add(new EleConnector(rightOutlineXZ.get(i),
            null, getGroundState()));
       
      }
     
      VectorXZ centerEnd = centerlineXZ.get(centerlineXZ.size() - 1);
      leftOutlineXZ.add(centerEnd.add(endCutVector.mult(-halfWidth)));
      rightOutlineXZ.add(centerEnd.add(endCutVector.mult(halfWidth)));
     
      connectors.add(new EleConnector(leftOutlineXZ.get(leftOutlineXZ.size() - 1),
          segment.getEndNode(), getGroundState(segment.getEndNode())));
      connectors.add(new EleConnector(rightOutlineXZ.get(rightOutlineXZ.size() - 1),
          segment.getEndNode(), getGroundState(segment.getEndNode())));
     
    }
   
    { /* calculate the outline loop */
 
View Full Code Here

    private final EleConnector connector;
   
    public BuildingEntrance(BuildingPart buildingPart, MapNode node) {
      this.buildingPart = buildingPart;
      this.node = node;
      this.connector = new EleConnector(node.getPos(), node, getGroundState());
    }
View Full Code Here

     
      calculateOutlineIfNecessary();
     
      if (connectors == null) {
        connectors = new EleConnectorGroup();
        connectors.add(new EleConnector(lowerLeft, node, ON));
        connectors.add(new EleConnector(lowerCenter, node, ON));
        connectors.add(new EleConnector(lowerRight, node, ON));
        connectors.add(new EleConnector(upperLeft, null, ON));
        connectors.add(new EleConnector(upperCenter, null, ON));
        connectors.add(new EleConnector(upperRight, null, ON));
      }
     
      return connectors;
     
    }
View Full Code Here

        if (otherWO instanceof AbstractNetworkWaySegmentWorldObject) {
         
          AbstractNetworkWaySegmentWorldObject otherANWSWO =
              ((AbstractNetworkWaySegmentWorldObject)otherWO);
         
          EleConnector thisConn = primaryRep.getEleConnectors()
              .getConnector(intersection.pos);
          EleConnector otherConn = otherANWSWO.getEleConnectors()
              .getConnector(intersection.pos);
         
          if (thisIsUpper) {
            enforcer.requireVerticalDistance(
                MIN, distance, thisConn, otherConn);
          } else {
            enforcer.requireVerticalDistance(
                MIN, distance, otherConn, thisConn);
          }
         
        }
       
      } else if (overlap instanceof MapOverlapWA) {
       
        /*
         * require minimum distance at intersection points
         * (these have been inserted into this segment,
         * but not into the area)
         */
       
        MapOverlapWA overlapWA = (MapOverlapWA) overlap;
       
        if (overlap.type == MapOverlapType.INTERSECT
            && otherWO instanceof AbstractAreaWorldObject) {
         
          AbstractAreaWorldObject otherAAWO =
              ((AbstractAreaWorldObject)otherWO);
         
          for (int i = 0; i < overlapWA.getIntersectionPositions().size(); i++) {
           
            VectorXZ pos =
                overlapWA.getIntersectionPositions().get(i);
            MapAreaSegment areaSegment =
                overlapWA.getIntersectingAreaSegments().get(i);
           
            EleConnector thisConn = primaryRep.getEleConnectors()
                .getConnector(pos);
           
            EleConnector base1 = otherAAWO.getEleConnectors()
                .getConnector(areaSegment.getStartNode().getPos());
            EleConnector base2 = otherAAWO.getEleConnectors()
                .getConnector(areaSegment.getEndNode().getPos());
                       
            if (thisConn != null && base1 != null && base2 != null) {
             
              if (thisIsUpper) {
                enforcer.requireVerticalDistance(MIN, distance,
                    thisConn, base1, base2);
              } else {
                enforcer.requireVerticalDistance(MAX, -distance,
                    thisConn, base1, base2);
              }
             
            }
           
          }
         
        }
       
        /*
         * require minimum distance to the area's elevation connectors.
         * There is usually no direct counterpart for these in this segment.
         * Examples include trees on terrain above tunnels.
         */
       
        if (!(otherWO instanceof Forest)) continue; //TODO enable and debug for other WO classes
       
        eleConnectors:
        for (EleConnector c : otherWO.getEleConnectors()) {
         
          if (outlinePolygonXZ == null ||
              !outlinePolygonXZ.contains(c.pos))
            continue eleConnectors;
         
          for (List<VectorXZ> line : lines) {
            for (int i = 0; i+1 < line.size(); i++) {
             
              VectorXZ v1 = line.get(i);
              VectorXZ v2 = line.get(i+1);
             
              if (isBetween(c.pos, v1, v2)) {
               
                EleConnector base1 = primaryRep.getEleConnectors().getConnector(v1);
                EleConnector base2 = primaryRep.getEleConnectors().getConnector(v2);
               
                if (base1 != null && base2 != null) {
                 
                  if (thisIsUpper) {
                    enforcer.requireVerticalDistance(
View Full Code Here

TOP

Related Classes of org.osm2world.core.map_elevation.data.EleConnector

Copyright © 2018 www.massapicom. 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.