private void findRightmostEdgeAtNode() {
   Node node = minDe.getNode();
   DirectedEdgeStar star = (DirectedEdgeStar) node.getEdges();
   minDe = star.getRightmostEdge();
   // the DirectedEdge returned by the previous call is not
   // necessarily in the forward direction. Use the sym edge if it isn't.
   if (!minDe.isForward()) {
     minDe = minDe.getSym();
     minIndex = minDe.getEdge().getCoordinates().length - 1;
   }
 }
 private List createSubgraphs(PlanarGraph graph) {
   List subgraphList = new ArrayList();
   for (Iterator i = graph.getNodes().iterator(); i.hasNext(); ) {
     Node node = (Node) i.next();
     if (!node.isVisited()) {
       BufferSubgraph subgraph = new BufferSubgraph();
       subgraph.create(node);
       subgraphList.add(subgraph);
     }
   }
   /**
    * Sort the subgraphs in descending order of their rightmost coordinate. This ensures that when
    * the Polygons for the subgraphs are built, subgraphs for shells will have been built before
    * the subgraphs for any holes they contain.
    */
   Collections.sort(subgraphList, Collections.reverseOrder());
   return subgraphList;
 }