Exemplo n.º 1
0
 // Morteza2011*****************************************************************
 public static SOSArea reMerge(SOSArea blockade1, SOSArea blockade2) {
   java.awt.geom.Area a1 = new Area(blockade1.getShape());
   java.awt.geom.Area a2 = new Area(blockade2.getShape());
   a1.add(a2);
   int[] apexes = AliGeometryTools.getApexes(a1);
   ArrayList<Edge> edges = new ArrayList<Edge>();
   for (int i = 0; i < apexes.length / 2 - 1; i++) {
     edges.add(new Edge(apexes[i * 2], apexes[i * 2 + 1], apexes[i * 2 + 2], apexes[i * 2 + 3]));
   }
   SOSArea finalArea = new SOSArea(edges);
   finalArea.addReachablityBlockades(blockade1.getReachablityBlockades());
   finalArea.addReachablityBlockades(blockade2.getReachablityBlockades());
   return finalArea;
 }
Exemplo n.º 2
0
  // Morteza2011*****************************************************************
  public static SOSArea merge(
      StandardEntity a, SOSArea blockade1, SOSArea blockade2, short mergedNumber) {

    ArrayList<Edge> edgeList1 = new ArrayList<Edge>(blockade1.getEdges());
    ArrayList<Edge> edgeList2 = new ArrayList<Edge>(blockade2.getEdges());
    Pair<ArrayList<Edge>, ArrayList<Edge>> newEdges = splitEdges(edgeList1, edgeList2);
    removeExtraEdges(newEdges.first(), blockade2.getShape());
    removeExtraEdges(newEdges.second(), blockade1.getShape());
    try {
      ArrayList<SOSArea> sortedEdges = sortEdges(a, newEdges.first(), newEdges.second(), false);
      SOSArea finalMergedArea;
      if (sortedEdges.size() > 1) finalMergedArea = removeHoles(sortedEdges);
      else if (sortedEdges.size() == 1) finalMergedArea = sortedEdges.get(0);
      else {
        return reMerge(blockade1, blockade2);
      }
      finalMergedArea.setEdges(verifyEdgesAfterMerge(finalMergedArea.getEdges()));
      finalMergedArea.setReachablityBlockades(blockade1.getReachablityBlockades());
      finalMergedArea.addReachablityBlockades(blockade2.getReachablityBlockades());
      return finalMergedArea;
    } catch (ReachablityException e) {
    }
    return reMerge(blockade1, blockade2);
  }