use of org.gephi.graph.api.Node in project gephi by gephi.
the class GraphElementsControllerImpl method mergeNodes.
@Override
public Node mergeNodes(Graph graph, Node[] nodes, Node selectedNode, Column[] columns, AttributeRowsMergeStrategy[] mergeStrategies, boolean deleteMergedNodes) {
Table edgesTable = graph.getModel().getEdgeTable();
if (selectedNode == null) {
//Use first node as selected node if null
selectedNode = nodes[0];
}
//Create empty new node:
Node newNode = createNode("", null, graph);
//Set properties (position, size and color) using the selected node properties:
newNode.setX(selectedNode.x());
newNode.setY(selectedNode.y());
newNode.setZ(selectedNode.z());
newNode.setSize(selectedNode.size());
newNode.setR(selectedNode.r());
newNode.setG(selectedNode.g());
newNode.setB(selectedNode.b());
newNode.setAlpha(selectedNode.alpha());
//Merge attributes:
AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class);
ac.mergeRowsValues(columns, mergeStrategies, nodes, selectedNode, newNode);
Set<Node> nodesSet = new HashSet<>();
nodesSet.addAll(Arrays.asList(nodes));
//Assign edges to the new node:
Edge newEdge;
for (Node node : nodes) {
for (Edge edge : getNodeEdges(node)) {
Node newEdgeSource;
Node newEdgeTarget;
if (edge.getSource() == node) {
newEdgeSource = newNode;
if (nodesSet.contains(edge.getTarget())) {
//Self loop because of edge between merged nodes
newEdgeTarget = newNode;
} else {
newEdgeTarget = edge.getTarget();
}
} else {
newEdgeTarget = newNode;
if (nodesSet.contains(edge.getSource())) {
//Self loop because of edge between merged nodes
newEdgeSource = newNode;
} else {
newEdgeSource = edge.getSource();
}
}
if (graph.getEdge(newEdgeSource, newEdgeTarget) != null) {
//This edge already exists
continue;
}
newEdge = createEdge(newEdgeSource, newEdgeTarget, edge.isDirected(), edge.getTypeLabel(), graph);
if (newEdge != null) {
//Copy edge attributes:
for (Column column : edgesTable) {
if (!column.isReadOnly()) {
Object value = edge.getAttribute(column);
if (value == null) {
newEdge.removeAttribute(column);
} else {
newEdge.setAttribute(column, edge.getAttribute(column));
}
}
}
}
}
}
//Finally delete merged nodes:
if (deleteMergedNodes) {
deleteNodes(nodes);
}
return newNode;
}
use of org.gephi.graph.api.Node in project gephi by gephi.
the class ShortestPath method getListeners.
@Override
public ToolEventListener[] getListeners() {
listeners = new ToolEventListener[2];
listeners[0] = new NodeClickEventListener() {
@Override
public void clickNodes(Node[] nodes) {
Node n = nodes[0];
if (sourceNode == null) {
sourceNode = n;
shortestPathPanel.setResult("");
shortestPathPanel.setStatus(NbBundle.getMessage(ShortestPath.class, "ShortestPath.status2"));
} else if (n != sourceNode) {
color = shortestPathPanel.getColor();
Node targetNode = n;
GraphController gc = Lookup.getDefault().lookup(GraphController.class);
GraphModel gm = gc.getGraphModel();
AbstractShortestPathAlgorithm algorithm;
if (gm.isDirected()) {
algorithm = new BellmanFordShortestPathAlgorithm(gm.getDirectedGraphVisible(), sourceNode);
} else {
algorithm = new DijkstraShortestPathAlgorithm(gm.getGraphVisible(), sourceNode);
}
algorithm.compute();
double distance;
if ((distance = algorithm.getDistances().get(targetNode)) != Double.POSITIVE_INFINITY) {
targetNode.setColor(color);
VizController.getInstance().selectNode(targetNode);
Edge predecessorEdge = algorithm.getPredecessorIncoming(targetNode);
Node predecessor = algorithm.getPredecessor(targetNode);
while (predecessorEdge != null && predecessor != sourceNode) {
predecessorEdge.setColor(color);
VizController.getInstance().selectEdge(predecessorEdge);
predecessor.setColor(color);
VizController.getInstance().selectNode(predecessor);
predecessorEdge = algorithm.getPredecessorIncoming(predecessor);
predecessor = algorithm.getPredecessor(predecessor);
}
predecessorEdge.setColor(color);
VizController.getInstance().selectEdge(predecessorEdge);
sourceNode.setColor(color);
VizController.getInstance().selectNode(sourceNode);
shortestPathPanel.setResult(NbBundle.getMessage(ShortestPath.class, "ShortestPath.result", distance));
} else {
//No path
shortestPathPanel.setResult(NbBundle.getMessage(ShortestPath.class, "ShortestPath.noresult"));
}
sourceNode = null;
shortestPathPanel.setStatus(NbBundle.getMessage(ShortestPath.class, "ShortestPath.status1"));
}
}
};
listeners[1] = new MouseClickEventListener() {
@Override
public void mouseClick(int[] positionViewport, float[] position3d) {
if (sourceNode != null) {
//Cancel
shortestPathPanel.setStatus(NbBundle.getMessage(ShortestPath.class, "ShortestPath.status1"));
sourceNode = null;
} else {
VizController.getInstance().resetSelection();
}
}
};
return listeners;
}
use of org.gephi.graph.api.Node in project gephi by gephi.
the class Sizer method getListeners.
@Override
public ToolEventListener[] getListeners() {
listeners = new ToolEventListener[1];
listeners[0] = new NodePressAndDraggingEventListener() {
@Override
public void pressNodes(Node[] nodes) {
Sizer.this.nodes = nodes;
sizes = new float[nodes.length];
for (int i = 0; i < nodes.length; i++) {
Node n = nodes[i];
sizes[i] = n.size();
}
}
@Override
public void released() {
nodes = null;
sizerPanel.setAvgSize(-1);
}
@Override
public void drag(float displacementX, float displacementY) {
if (nodes != null) {
float averageSize = 0f;
for (int i = 0; i < nodes.length; i++) {
Node n = nodes[i];
float size = sizes[i];
size += displacementY * INTENSITY;
if (size < LIMIT) {
size = LIMIT;
}
averageSize += size;
n.setSize(size);
}
averageSize /= nodes.length;
sizerPanel.setAvgSize(averageSize);
}
}
};
return listeners;
}
use of org.gephi.graph.api.Node in project gephi by gephi.
the class EditNodes method prepareNodesProperties.
/**
* Prepare set of editable properties of the node(s): size, position.
*
* @return Set of these properties
*/
private Sheet.Set prepareNodesProperties() {
try {
if (multipleNodes) {
MultipleNodesPropertiesWrapper nodesWrapper = new MultipleNodesPropertiesWrapper(nodes);
Sheet.Set set = new Sheet.Set();
set.setName("properties");
set.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.properties.text.multiple"));
Property p;
//Size:
p = new PropertySupport.Reflection(nodesWrapper, Float.class, "getNodesSize", "setNodesSize");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.size.text"));
p.setName("size");
set.put(p);
//All position coordinates:
set.put(buildMultipleNodesGeneralPositionProperty(nodesWrapper, "x"));
set.put(buildMultipleNodesGeneralPositionProperty(nodesWrapper, "y"));
set.put(buildMultipleNodesGeneralPositionProperty(nodesWrapper, "z"));
//Color:
p = new PropertySupport.Reflection(nodesWrapper, Color.class, "getNodesColor", "setNodesColor");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.color.text"));
p.setName("color");
set.put(p);
//Label color:
p = new PropertySupport.Reflection(nodesWrapper, Color.class, "getLabelsColor", "setLabelsColor");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.color.text"));
p.setName("labelcolor");
set.put(p);
//Label size:
p = new PropertySupport.Reflection(nodesWrapper, Float.class, "getLabelsSize", "setLabelsSize");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.size.text"));
p.setName("labelsize");
set.put(p);
//Label visible:
p = new PropertySupport.Reflection(nodesWrapper, Boolean.class, "getLabelsVisible", "setLabelsVisible");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.visible.text"));
p.setName("labelvisible");
set.put(p);
return set;
} else {
Node node = nodes[0];
Sheet.Set set = new Sheet.Set();
set.setName("properties");
set.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.properties.text", node.getLabel()));
Property p;
//Size:
p = new PropertySupport.Reflection(node, Float.TYPE, "size", "setSize");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.size.text"));
p.setName("size");
set.put(p);
//All position coordinates:
set.put(buildGeneralPositionProperty(node, "x"));
set.put(buildGeneralPositionProperty(node, "y"));
set.put(buildGeneralPositionProperty(node, "z"));
//Color:
SingleNodePropertiesWrapper nodeWrapper = new SingleNodePropertiesWrapper(node);
p = new PropertySupport.Reflection(nodeWrapper, Color.class, "getNodeColor", "setNodeColor");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.color.text"));
p.setName("color");
set.put(p);
TextProperties textProperties = node.getTextProperties();
//Label size:
p = new PropertySupport.Reflection(textProperties, Float.TYPE, "getSize", "setSize");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.size.text"));
p.setName("labelsize");
set.put(p);
//Label color:
p = new PropertySupport.Reflection(nodeWrapper, Color.class, "getLabelColor", "setLabelColor");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.color.text"));
p.setName("labelcolor");
set.put(p);
//Label visible:
p = new PropertySupport.Reflection(textProperties, Boolean.TYPE, "isVisible", "setVisible");
p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.visible.text"));
p.setName("labelvisible");
set.put(p);
return set;
}
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
return null;
}
}
use of org.gephi.graph.api.Node in project gephi by gephi.
the class PageRankNGTest method testUndirectedWeightedGraphPageRank.
@Test
public void testUndirectedWeightedGraphPageRank() {
pc.newProject();
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();
UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph();
Node node1 = graphModel.factory().newNode("0");
Node node2 = graphModel.factory().newNode("1");
Node node3 = graphModel.factory().newNode("2");
Node node4 = graphModel.factory().newNode("3");
Node node5 = graphModel.factory().newNode("4");
Node node6 = graphModel.factory().newNode("5");
undirectedGraph.addNode(node1);
undirectedGraph.addNode(node2);
undirectedGraph.addNode(node3);
undirectedGraph.addNode(node4);
undirectedGraph.addNode(node5);
undirectedGraph.addNode(node6);
Edge edge12 = graphModel.factory().newEdge(node1, node2, false);
Edge edge23 = graphModel.factory().newEdge(node2, node3, 0, 10, false);
Edge edge34 = graphModel.factory().newEdge(node3, node4, false);
Edge edge45 = graphModel.factory().newEdge(node4, node5, false);
Edge edge56 = graphModel.factory().newEdge(node5, node6, false);
Edge edge61 = graphModel.factory().newEdge(node6, node1, false);
undirectedGraph.addEdge(edge12);
undirectedGraph.addEdge(edge23);
undirectedGraph.addEdge(edge34);
undirectedGraph.addEdge(edge45);
undirectedGraph.addEdge(edge56);
undirectedGraph.addEdge(edge61);
UndirectedGraph graph = graphModel.getUndirectedGraph();
PageRank pr = new PageRank();
double[] pageRank;
HashMap<Node, Integer> indicies = pr.createIndiciesMap(graph);
pageRank = pr.calculatePagerank(graph, indicies, false, true, 0.001, 0.85);
int index1 = indicies.get(node1);
int index2 = indicies.get(node2);
int index3 = indicies.get(node3);
int index6 = indicies.get(node6);
double diff = 0.01;
double pr1 = pageRank[index1];
double pr2 = pageRank[index2];
double pr3 = pageRank[index3];
double pr6 = pageRank[index6];
assertTrue(Math.abs(pr2 - pr3) < diff);
assertTrue(pr1 < pr2);
assertTrue(pr1 < pr6);
}
Aggregations