Search in sources :

Example 6 with Node

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

the class PolygonizeGraph method addEdge.

/**
 * Add a {@link LineString} forming an edge of the polygon graph.
 * @param line the line to add
 */
public void addEdge(final LineString line) {
    final LineString cleanLine = line.removeDuplicatePoints();
    if (cleanLine.isEmpty()) {
        return;
    }
    if (cleanLine.getVertexCount() < 2) {
        return;
    }
    final Point startPt = cleanLine.getVertex(0).newPoint2D();
    final Point endPt = cleanLine.getToVertex(0).newPoint2D();
    final Node nStart = getNode(startPt);
    final Node nEnd = getNode(endPt);
    final DirectedEdge de0 = new PolygonizeDirectedEdge(nStart, nEnd, cleanLine.getVertex(1).newPoint2D(), true);
    final DirectedEdge de1 = new PolygonizeDirectedEdge(nEnd, nStart, cleanLine.getVertex(-2).newPoint2D(), false);
    final Edge edge = new PolygonizeEdge(line);
    edge.setDirectedEdges(de0, de1);
    add(edge);
}
Also used : DirectedEdge(com.revolsys.geometry.planargraph.DirectedEdge) LineString(com.revolsys.geometry.model.LineString) Node(com.revolsys.geometry.planargraph.Node) Point(com.revolsys.geometry.model.Point) Edge(com.revolsys.geometry.planargraph.Edge) DirectedEdge(com.revolsys.geometry.planargraph.DirectedEdge)

Example 7 with Node

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

the class PolygonizeGraph method getNode.

private Node getNode(final Point point) {
    Node node = findNode(point);
    if (node == null) {
        final double x = point.getX();
        final double y = point.getY();
        node = new Node(x, y);
        // ensure node is only added once to graph
        add(node);
    }
    return node;
}
Also used : Node(com.revolsys.geometry.planargraph.Node)

Example 8 with Node

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

the class LineMergeGraph method getNode.

private Node getNode(final Point point) {
    Node node = findNode(point);
    if (node == null) {
        final double x = point.getX();
        final double y = point.getY();
        node = new Node(x, y);
        add(node);
    }
    return node;
}
Also used : Node(com.revolsys.geometry.planargraph.Node)

Example 9 with Node

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

the class LineMergeGraph method removeEdge.

public void removeEdge(final LineString line) {
    final Point point = line.getFromPoint();
    final Node node = findNode(point);
    if (node != null) {
        for (final DirectedEdge outEdge : Lists.toArray(node.getOutEdges())) {
            final LineMergeEdge edge = (LineMergeEdge) outEdge.getEdge();
            if (line.equals(edge.getLine())) {
                remove(edge);
            }
        }
    }
}
Also used : DirectedEdge(com.revolsys.geometry.planargraph.DirectedEdge) Node(com.revolsys.geometry.planargraph.Node) Point(com.revolsys.geometry.model.Point)

Example 10 with Node

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

the class LineSequencer method findSequence.

private List findSequence(final Subgraph graph) {
    GraphComponent.setVisited(graph.edgeIterator(), false);
    final Node startNode = findLowestDegreeNode(graph);
    final DirectedEdge startDE = startNode.getOutEdges().iterator().next();
    final DirectedEdge startDESym = startDE.getSym();
    final List seq = new LinkedList();
    final ListIterator lit = seq.listIterator();
    addReverseSubpath(startDESym, lit, false);
    while (lit.hasPrevious()) {
        final DirectedEdge prev = (DirectedEdge) lit.previous();
        final DirectedEdge unvisitedOutDE = findUnvisitedBestOrientedDE(prev.getFromNode());
        if (unvisitedOutDE != null) {
            addReverseSubpath(unvisitedOutDE.getSym(), lit, true);
        }
    }
    /**
     * At this point, we have a valid sequence of graph DirectedEdges, but it
     * is not necessarily appropriately oriented relative to the underlying
     * geometry.
     */
    final List orientedSeq = orient(seq);
    return orientedSeq;
}
Also used : DirectedEdge(com.revolsys.geometry.planargraph.DirectedEdge) Node(com.revolsys.geometry.planargraph.Node) ArrayList(java.util.ArrayList) List(java.util.List) LinkedList(java.util.LinkedList) ListIterator(java.util.ListIterator) LinkedList(java.util.LinkedList)

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