private void removeNodeAndBelongingEdges(String nodeId, VehicleRoute fromRoute) { Node node = graph.getNode(nodeId); markRemoved(node); Edge entering = getEnteringEdge(nodeId); removeEdge(entering.getId()); if (node.getLeavingEdgeSet().isEmpty()) { if (fromRoute.getVehicle().isReturnToDepot()) throw new IllegalStateException("leaving edge is missing"); return; } Edge leaving = getLeavingEdge(nodeId); removeEdge((leaving.getId())); Node from = entering.getNode0(); Node to = leaving.getNode1(); if (!fromRoute.getActivities().isEmpty()) { addEdge(makeEdgeId(from, to), from.getId(), to.getId()); } }
removeEdge(leavingToNode.getId()); Node from = enteringFromNode.getNode0(); Node to = leavingToNode.getNode1(); if (!fromRoute.getActivities().isEmpty()) { addEdge(makeEdgeId(from, to), from.getId(), to.getId());
Iterator<Edge> eIt = edges.iterator(); while(eIt.hasNext()){ Edge e = eIt.next(); mainGraph.addEdge(e, e.getNode1(), e.getNode2()); // actually, you can change // addEdge to require just // the Edge, since it already // contains the Nodes }
public <T extends Node> T getNode1() { T n; sg.elementLock.lock(); n = sg.getNode(wrappedElement.getNode1().getIndex()); sg.elementLock.unlock(); return n; }
public <T extends Node> T getNode1() { T n; sg.elementLock.lock(); n = sg.getNode(wrappedElement.getNode1().getIndex()); sg.elementLock.unlock(); return n; }
/** * Like {@link #edgeLength(Graph,String)} but use an existing edge as * argument. * * @param edge * @return The edge length or -1 if the nodes of the edge have no positions. */ public static double edgeLength(Edge edge) { double xyz0[] = nodePosition(edge.getNode0()); double xyz1[] = nodePosition(edge.getNode1()); if (xyz0 == null || xyz1 == null) return -1; xyz0[0] = xyz1[0] - xyz0[0]; xyz0[1] = xyz1[1] - xyz0[1]; xyz0[2] = xyz1[2] - xyz0[2]; return Math.sqrt(xyz0[0] * xyz0[0] + xyz0[1] * xyz0[1] + xyz0[2] * xyz0[2]); } }
@SuppressWarnings("unchecked") public boolean isAvailable(T e) { if (e instanceof Node) return true; return f.isAvailable((U) ((Edge) e).getNode0()) && f.isAvailable((U) ((Edge) e).getNode1()); } }
@SuppressWarnings("unchecked") public boolean isAvailable(T e) { if (e instanceof Node) return true; return f.isAvailable((U) ((Edge) e).getNode0()) && f.isAvailable((U) ((Edge) e).getNode1()); } }
@Override public void edgeAttributeAdded(String graphId, long timeId, String edgeId, String attribute, Object value) { if (cutAttribute != null && attribute.equals(cutAttribute)) { if (!started && graph != null) compute(); Edge edge = graph.getEdge(edgeId); // The attribute is added. Do as if the edge was removed. if (edge != null) { Node n0 = edge.getNode0(); Node n1 = edge.getNode1(); ConnectedComponent cc0 = componentsMap.get(n0); ConnectedComponent cc1 = componentsMap.get(n1); if (cc0 == cc1) { ConnectedComponent ccN = new ConnectedComponent(); computeConnectedComponent(ccN, n1, edge); components.add(ccN); } } } }
/** * Like {@link #edgeLength(Graph,String)} but use an existing edge as * argument. * * @param edge * @return The edge length or -1 if the nodes of the edge have no positions. */ public static double edgeLength(Edge edge) { double xyz0[] = nodePosition(edge.getNode0()); double xyz1[] = nodePosition(edge.getNode1()); if (xyz0 == null || xyz1 == null) return -1; xyz0[0] = xyz1[0] - xyz0[0]; xyz0[1] = xyz1[1] - xyz0[1]; xyz0[2] = xyz1[2] - xyz0[2]; return Math.sqrt(xyz0[0] * xyz0[0] + xyz0[1] * xyz0[1] + xyz0[2] * xyz0[2]); } }
@Override public void edgeRemoved(String graphId, long timeId, String edgeId) { checkStarted(); if (started) { Edge edge = graph.getEdge(edgeId); if (edge != null) { Node n0 = edge.getNode0(); Node n1 = edge.getNode1(); ConnectedComponent cc0 = componentsMap.get(n0); ConnectedComponent cc1 = componentsMap.get(n1); if (cc0 == cc1) { ConnectedComponent ccN = new ConnectedComponent(); computeConnectedComponent(ccN, n1, edge); components.add(ccN); } } } }
public boolean isAvailable(Edge e) { return f.isAvailable(e.getNode0()) && f.isAvailable(e.getNode1()); } }
@Override public boolean isAvailable(Edge e) { return nodeFilter.isAvailable(e.getNode0()) && nodeFilter.isAvailable(e.getNode1()) && !isCutEdge(e); }
/** * Dijkstra's algorithm produces a shortest path tree rooted in the source * node. This method returns the total length of the tree. * * @return the length of the shortest path tree * @complexity O(<em>n</em>) where <em>n</em> is the number of nodes is the * graph. */ public double getTreeLength() { double length = getSourceLength(); for (Edge edge : getTreeEdges()) { Node node = edge.getNode0(); if (getEdgeFromParent(node) != edge) node = edge.getNode1(); length += getLength(edge, node); } return length; }
/** * Step of the DorogovtsevMendes generator. Add a new node <i>n</i>, then an * edge is chosen randomly and its extremities are connected to the new node * <i>n</i>. * * @see org.graphstream.algorithm.generator.Generator#nextEvents() */ public boolean nextEvents() { String name = Integer.toString(nodeNames++); Edge edge = Toolkit.randomEdge(internalGraph, random); String n0 = edge.getNode0().getId(); String n1 = edge.getNode1().getId(); addNode(name); addEdge(n0 + "-" + name, n0, name); addEdge(n1 + "-" + name, n1, name); return true; }
/** * Dijkstra's algorithm produces a shortest path tree rooted in the source * node. This method returns the total length of the tree. * * @return the length of the shortest path tree * @complexity O(<em>n</em>) where <em>n</em> is the number of nodes is the * graph. */ public double getTreeLength() { double length = getSourceLength(); for (Edge edge : getTreeEdges()) { Node node = edge.getNode0(); if (getEdgeFromParent(node) != edge) node = edge.getNode1(); length += getLength(edge, node); } return length; }
/** * Step of the DorogovtsevMendes generator. Add a new node <i>n</i>, then an * edge is chosen randomly and its extremities are connected to the new node * <i>n</i>. * * @see org.graphstream.algorithm.generator.Generator#nextEvents() */ public boolean nextEvents() { String name = Integer.toString(nodeNames++); Edge edge = Toolkit.randomEdge(internalGraph, random); String n0 = edge.getNode0().getId(); String n1 = edge.getNode1().getId(); addNode(name); addEdge(n0 + "-" + name, n0, name); addEdge(n1 + "-" + name, n1, name); return true; }
protected void modifyCost(String edgeId, double cval) { Edge e = env.getEdge(edgeId); if (e.isDirected()) modifyCost(getState(e.getSourceNode()), getState(e.getTargetNode()), cval); else { modifyCost(getState(e.getNode0()), getState(e.getNode1()), cval); modifyCost(getState(e.getNode1()), getState(e.getNode0()), cval); } }
protected void modifyCost(String edgeId, double cval) { Edge e = env.getEdge(edgeId); if (e.isDirected()) modifyCost(getState(e.getSourceNode()), getState(e.getTargetNode()), cval); else { modifyCost(getState(e.getNode0()), getState(e.getNode1()), cval); modifyCost(getState(e.getNode1()), getState(e.getNode0()), cval); } }
private void removeNodeAndBelongingEdges(String nodeId, VehicleRoute fromRoute) { Node node = graph.getNode(nodeId); markRemoved(node); Edge entering = getEnteringEdge(nodeId); removeEdge(entering.getId()); if (node.getLeavingEdgeSet().isEmpty()) { if (fromRoute.getVehicle().isReturnToDepot()) throw new IllegalStateException("leaving edge is missing"); return; } Edge leaving = getLeavingEdge(nodeId); removeEdge((leaving.getId())); Node from = entering.getNode0(); Node to = leaving.getNode1(); if (!fromRoute.getActivities().isEmpty()) { addEdge(makeEdgeId(from, to), from.getId(), to.getId()); } }