Search in sources :

Example 16 with Node

use of com.revolsys.geometry.planargraph.Node in project com.revolsys.open by revolsys.

the class PolygonizeGraph method convertMaximalToMinimalEdgeRings.

/**
 * Convert the maximal edge rings found by the initial graph traversal
 * into the minimal edge rings required by JTS polygon topology rules.
 *
 * @param ringEdges the list of start edges for the edgeRings to convert.
 */
private void convertMaximalToMinimalEdgeRings(final List ringEdges) {
    for (final Iterator i = ringEdges.iterator(); i.hasNext(); ) {
        final PolygonizeDirectedEdge de = (PolygonizeDirectedEdge) i.next();
        final long label = de.getLabel();
        final List intNodes = findIntersectionNodes(de, label);
        if (intNodes == null) {
            continue;
        }
        // rings
        for (final Iterator iNode = intNodes.iterator(); iNode.hasNext(); ) {
            final Node node = (Node) iNode.next();
            computeNextCCWEdges(node, label);
        }
    }
}
Also used : Node(com.revolsys.geometry.planargraph.Node) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List)

Example 17 with Node

use of com.revolsys.geometry.planargraph.Node in project com.revolsys.open by revolsys.

the class PolygonizeGraph method computeNextCWEdges.

private void computeNextCWEdges() {
    // set the next pointers for the edges around each node
    for (final Iterator iNode = nodeIterator(); iNode.hasNext(); ) {
        final Node node = (Node) iNode.next();
        computeNextCWEdges(node);
    }
}
Also used : Node(com.revolsys.geometry.planargraph.Node) Iterator(java.util.Iterator)

Example 18 with Node

use of com.revolsys.geometry.planargraph.Node in project com.revolsys.open by revolsys.

the class PolygonizeGraph method deleteDangles.

/**
 * Marks all edges from the graph which are "dangles".
 * Dangles are which are incident on a node with degree 1.
 * This process is recursive, since removing a dangling edge
 * may result in another edge becoming a dangle.
 * In order to handle large recursion depths efficiently,
 * an explicit recursion stack is used
 *
 * @return a List containing the {@link LineString}s that formed dangles
 */
public Collection<LineString> deleteDangles() {
    final List nodesToRemove = findNodesOfDegree(1);
    final Set<LineString> dangleLines = new HashSet<>();
    final Stack nodeStack = new Stack();
    for (final Iterator i = nodesToRemove.iterator(); i.hasNext(); ) {
        nodeStack.push(i.next());
    }
    while (!nodeStack.isEmpty()) {
        final Node node = (Node) nodeStack.pop();
        deleteAllEdges(node);
        final List nodeOutEdges = node.getOutEdges().getEdges();
        for (final Iterator i = nodeOutEdges.iterator(); i.hasNext(); ) {
            final PolygonizeDirectedEdge de = (PolygonizeDirectedEdge) i.next();
            // delete this edge and its sym
            de.setMarked(true);
            final PolygonizeDirectedEdge sym = (PolygonizeDirectedEdge) de.getSym();
            if (sym != null) {
                sym.setMarked(true);
            }
            // save the line as a dangle
            final PolygonizeEdge e = (PolygonizeEdge) de.getEdge();
            dangleLines.add(e.getLine());
            final Node toNode = de.getToNode();
            // add the toNode to the list to be processed, if it is now a dangle
            if (getDegreeNonDeleted(toNode) == 1) {
                nodeStack.push(toNode);
            }
        }
    }
    return dangleLines;
}
Also used : LineString(com.revolsys.geometry.model.LineString) Node(com.revolsys.geometry.planargraph.Node) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List) HashSet(java.util.HashSet) Stack(java.util.Stack)

Aggregations

Node (com.revolsys.geometry.planargraph.Node)18 DirectedEdge (com.revolsys.geometry.planargraph.DirectedEdge)10 List (java.util.List)6 ArrayList (java.util.ArrayList)5 Iterator (java.util.Iterator)5 Point (com.revolsys.geometry.model.Point)4 LineString (com.revolsys.geometry.model.LineString)3 Edge (com.revolsys.geometry.planargraph.Edge)3 PointDoubleXY (com.revolsys.geometry.model.impl.PointDoubleXY)2 ListIterator (java.util.ListIterator)2 Stack (java.util.Stack)2 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1