private static int getDegreeNonDeleted(Node node) { List edges = node.getOutEdges().getEdges(); int degree = 0; for (Iterator i = edges.iterator(); i.hasNext(); ) { PolygonizeDirectedEdge de = (PolygonizeDirectedEdge) i.next(); if (! de.isMarked()) degree++; } return degree; }
private static int getDegree(Node node, long label) { List edges = node.getOutEdges().getEdges(); int degree = 0; for (Iterator i = edges.iterator(); i.hasNext(); ) { PolygonizeDirectedEdge de = (PolygonizeDirectedEdge) i.next(); if (de.getLabel() == label) degree++; } return degree; }
/** * Returns all Edges that connect the two nodes (which are assumed to be different). */ public static Collection getEdgesBetween(Node node0, Node node1) { List edges0 = DirectedEdge.toEdges(node0.getOutEdges().getEdges()); Set commonEdges = new HashSet(edges0); List edges1 = DirectedEdge.toEdges(node1.getOutEdges().getEdges()); commonEdges.retainAll(edges1); return commonEdges; }
private void buildEdgeStringsStartingAt(Node node) { for (Iterator i = node.getOutEdges().iterator(); i.hasNext(); ) { LineMergeDirectedEdge directedEdge = (LineMergeDirectedEdge) i.next(); if (directedEdge.getEdge().isMarked()) { continue; } edgeStrings.add(buildEdgeStringStartingWith(directedEdge)); } }
/** * Deletes all edges at a node */ public static void deleteAllEdges(Node node) { List edges = node.getOutEdges().getEdges(); for (Iterator i = edges.iterator(); i.hasNext(); ) { PolygonizeDirectedEdge de = (PolygonizeDirectedEdge) i.next(); de.setMarked(true); PolygonizeDirectedEdge sym = (PolygonizeDirectedEdge) de.getSym(); if (sym != null) sym.setMarked(true); } }
/** * Returns the directed edge that starts at this directed edge's end point, or null * if there are zero or multiple directed edges starting there. * @return the directed edge */ public LineMergeDirectedEdge getNext() { if (getToNode().getDegree() != 2) { return null; } if (getToNode().getOutEdges().getEdges().get(0) == getSym()) { return (LineMergeDirectedEdge) getToNode().getOutEdges().getEdges().get(1); } Assert.isTrue(getToNode().getOutEdges().getEdges().get(1) == getSym()); return (LineMergeDirectedEdge) getToNode().getOutEdges().getEdges().get(0); } }
/** * Finds an {@link DirectedEdge} for an unvisited edge (if any), * choosing the dirEdge which preserves orientation, if possible. * * @param node the node to examine * @return the dirEdge found, or <code>null</code> if none were unvisited */ private static DirectedEdge findUnvisitedBestOrientedDE(Node node) { DirectedEdge wellOrientedDE = null; DirectedEdge unvisitedDE = null; for (Iterator i = node.getOutEdges().iterator(); i.hasNext(); ) { DirectedEdge de = (DirectedEdge) i.next(); if (! de.getEdge().isVisited()) { unvisitedDE = de; if (de.getEdgeDirection()) wellOrientedDE = de; } } if (wellOrientedDE != null) return wellOrientedDE; return unvisitedDE; }
/** * Adds the argument node and all its out edges to the subgraph. * @param node the node to add * @param nodeStack the current set of nodes being traversed */ private void addEdges(Node node, Stack nodeStack, Subgraph subgraph) { node.setVisited(true); for (Iterator i = ((DirectedEdgeStar) node.getOutEdges()).iterator(); i.hasNext(); ) { DirectedEdge de = (DirectedEdge) i.next(); subgraph.add(de.getEdge()); Node toNode = de.getToNode(); if (! toNode.isVisited()) nodeStack.push(toNode); } }
/** * Removes a node from the graph, along with any associated DirectedEdges and * Edges. */ public void remove(Node node) { // unhook all directed edges List outEdges = node.getOutEdges().getEdges(); for (Iterator i = outEdges.iterator(); i.hasNext(); ) { DirectedEdge de = (DirectedEdge) i.next(); DirectedEdge sym = de.getSym(); // remove the diredge that points to this node if (sym != null) remove(sym); // remove this diredge from the graph collection dirEdges.remove(de); Edge edge = de.getEdge(); if (edge != null) { edges.remove(edge); } } // remove the node from the graph nodeMap.remove(node.getCoordinate()); node.remove(); }
List nodeOutEdges = node.getOutEdges().getEdges(); for (Iterator i = nodeOutEdges.iterator(); i.hasNext(); ) { PolygonizeDirectedEdge de = (PolygonizeDirectedEdge) i.next();
private static void computeNextCWEdges(Node node) { DirectedEdgeStar deStar = node.getOutEdges(); PolygonizeDirectedEdge startDE = null; PolygonizeDirectedEdge prevDE = null; // the edges are stored in CCW order around the star for (Iterator i = deStar.getEdges().iterator(); i.hasNext(); ) { PolygonizeDirectedEdge outDE = (PolygonizeDirectedEdge) i.next(); if (outDE.isMarked()) continue; if (startDE == null) startDE = outDE; if (prevDE != null) { PolygonizeDirectedEdge sym = (PolygonizeDirectedEdge) prevDE.getSym(); sym.setNext(outDE); } prevDE = outDE; } if (prevDE != null) { PolygonizeDirectedEdge sym = (PolygonizeDirectedEdge) prevDE.getSym(); sym.setNext(startDE); } } /**
private List findSequence(Subgraph graph) { GraphComponent.setVisited(graph.edgeIterator(), false); Node startNode = findLowestDegreeNode(graph); DirectedEdge startDE = (DirectedEdge) startNode.getOutEdges().iterator().next(); DirectedEdge startDESym = startDE.getSym(); List seq = new LinkedList(); ListIterator lit = seq.listIterator(); addReverseSubpath(startDESym, lit, false); while (lit.hasPrevious()) { DirectedEdge prev = (DirectedEdge) lit.previous(); 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. */ List orientedSeq = orient(seq); return orientedSeq; }
DirectedEdgeStar deStar = node.getOutEdges();
private static int getDegreeNonDeleted(Node node) { List edges = node.getOutEdges().getEdges(); int degree = 0; for (Iterator i = edges.iterator(); i.hasNext(); ) { PolygonizeDirectedEdge de = (PolygonizeDirectedEdge) i.next(); if (! de.isMarked()) degree++; } return degree; }
private static int getDegree(Node node, long label) { List edges = node.getOutEdges().getEdges(); int degree = 0; for (Iterator i = edges.iterator(); i.hasNext(); ) { PolygonizeDirectedEdge de = (PolygonizeDirectedEdge) i.next(); if (de.getLabel() == label) degree++; } return degree; }
/** * Returns all Edges that connect the two nodes (which are assumed to be different). */ public static Collection getEdgesBetween(Node node0, Node node1) { List edges0 = DirectedEdge.toEdges(node0.getOutEdges().getEdges()); Set commonEdges = new HashSet(edges0); List edges1 = DirectedEdge.toEdges(node1.getOutEdges().getEdges()); commonEdges.retainAll(edges1); return commonEdges; }
private void buildEdgeStringsStartingAt(Node node) { for (Iterator i = node.getOutEdges().iterator(); i.hasNext(); ) { LineMergeDirectedEdge directedEdge = (LineMergeDirectedEdge) i.next(); if (directedEdge.getEdge().isMarked()) { continue; } edgeStrings.add(buildEdgeStringStartingWith(directedEdge)); } }
/** * Deletes all edges at a node */ public static void deleteAllEdges(Node node) { List edges = node.getOutEdges().getEdges(); for (Iterator i = edges.iterator(); i.hasNext(); ) { PolygonizeDirectedEdge de = (PolygonizeDirectedEdge) i.next(); de.setMarked(true); PolygonizeDirectedEdge sym = (PolygonizeDirectedEdge) de.getSym(); if (sym != null) sym.setMarked(true); } }
/** * Returns the directed edge that starts at this directed edge's end point, or null * if there are zero or multiple directed edges starting there. * @return the directed edge */ public LineMergeDirectedEdge getNext() { if (getToNode().getDegree() != 2) { return null; } if (getToNode().getOutEdges().getEdges().get(0) == getSym()) { return (LineMergeDirectedEdge) getToNode().getOutEdges().getEdges().get(1); } Assert.isTrue(getToNode().getOutEdges().getEdges().get(1) == getSym()); return (LineMergeDirectedEdge) getToNode().getOutEdges().getEdges().get(0); } }
/** * Adds the argument node and all its out edges to the subgraph. * @param node the node to add * @param nodeStack the current set of nodes being traversed */ private void addEdges(Node node, Stack nodeStack, Subgraph subgraph) { node.setVisited(true); for (Iterator i = ((DirectedEdgeStar) node.getOutEdges()).iterator(); i.hasNext(); ) { DirectedEdge de = (DirectedEdge) i.next(); subgraph.add(de.getEdge()); Node toNode = de.getToNode(); if (! toNode.isVisited()) nodeStack.push(toNode); } }