Exemplo n.º 1
0
  /* Needs Testing! */
  public Drivelane[] getLanesLeadingFrom(Drivelane lane, int ruType) throws InfraException {
    Road road = lane.getRoad();
    // Road[] which will contain the Roads of this Node in a sorted fashion:
    // [0] == the drivelanes on this Road will have to turn left to get to 'road', ..
    Road[] srt_rarr = new Road[3];

    if (allRoads[0] == road) {
      srt_rarr[0] = allRoads[1]; // Must turn left
      srt_rarr[1] = allRoads[2]; // Must go straight on
      srt_rarr[2] = allRoads[3]; // Must turn right
    } else if (allRoads[1] == road) {
      srt_rarr[0] = allRoads[2];
      srt_rarr[1] = allRoads[3];
      srt_rarr[2] = allRoads[0];
    } else if (allRoads[2] == road) {
      srt_rarr[0] = allRoads[3];
      srt_rarr[1] = allRoads[0];
      srt_rarr[2] = allRoads[1];
    } else {
      srt_rarr[0] = allRoads[0];
      srt_rarr[1] = allRoads[1];
      srt_rarr[2] = allRoads[2];
    }

    // System.out.println("Junction getLanesLeadingFrom "+nodeId);
    Vector v = new Vector();
    Drivelane[] lanes;
    int num_lanes;
    int cnt_lanes = 0;
    boolean[] targets = lane.getTargets();

    for (int i = 0; i < 3; i++) {
      if (srt_rarr[i] != null && targets[i] == true) {
        // System.out.println("Road at target:"+i+" isnt null, getting Outboundlanes");
        lanes = srt_rarr[i].getOutboundLanes(this);
        num_lanes = lanes.length;
        // System.out.println("Num lanes :"+num_lanes);
        for (int j = 0; j < num_lanes; j++) {
          Drivelane l = lanes[j];
          // System.out.println("Lane"+j+" being checked now. Has type:"+l.getType());
          if (l.mayUse(ruType)) {
            v.addElement(l);
            cnt_lanes++;
          }
        }
      }
    }
    return (Drivelane[]) v.toArray(new Drivelane[cnt_lanes]);
  }
Exemplo n.º 2
0
  public Drivelane[] getLanesLeadingTo(Drivelane lane, int ruType) throws InfraException {
    Road road = lane.getRoad();
    // Road[] which will contain the Roads of this Node in a sorted fashion:
    // [0] == the drivelanes on this Road will have to turn left to get to 'road', ..
    Road[] srt_rarr = new Road[3];

    if (allRoads[0] == road) {
      srt_rarr[0] = allRoads[3]; // Must turn left
      srt_rarr[1] = allRoads[2]; // Must go straight on
      srt_rarr[2] = allRoads[1]; // Must turn right
    } else if (allRoads[1] == road) {
      srt_rarr[0] = allRoads[0];
      srt_rarr[1] = allRoads[3];
      srt_rarr[2] = allRoads[2];
    } else if (allRoads[2] == road) {
      srt_rarr[0] = allRoads[1];
      srt_rarr[1] = allRoads[0];
      srt_rarr[2] = allRoads[3];
    } else {
      srt_rarr[0] = allRoads[2];
      srt_rarr[1] = allRoads[1];
      srt_rarr[2] = allRoads[0];
    }

    Vector v = new Vector();
    Drivelane[] lanes;
    int num_lanes;
    int cnt_lanes = 0;
    boolean[] targets;

    for (int i = 0; i < 3; i++) {
      if (srt_rarr[i] != null) {
        lanes = srt_rarr[i].getInboundLanes(this);
        num_lanes = lanes.length;
        for (int j = 0; j < num_lanes; j++) {
          Drivelane l = lanes[j];
          targets = l.getTargets();
          if (targets[i] == true && l.mayUse(ruType)) {
            v.addElement(l);
            cnt_lanes++;
          }
        }
      }
    }

    return (Drivelane[]) v.toArray(new Drivelane[cnt_lanes]);
  }