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);
}
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;
}
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;
}
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);
}
}
}
}
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;
}
Aggregations