Search in sources :

Example 81 with Node

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;
}
Also used : Table(org.gephi.graph.api.Table) Column(org.gephi.graph.api.Column) Node(org.gephi.graph.api.Node) AttributeColumnsController(org.gephi.datalab.api.AttributeColumnsController) Edge(org.gephi.graph.api.Edge) HashSet(java.util.HashSet)

Example 82 with Node

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;
}
Also used : MouseClickEventListener(org.gephi.tools.spi.MouseClickEventListener) Node(org.gephi.graph.api.Node) DijkstraShortestPathAlgorithm(org.gephi.algorithms.shortestpath.DijkstraShortestPathAlgorithm) AbstractShortestPathAlgorithm(org.gephi.algorithms.shortestpath.AbstractShortestPathAlgorithm) BellmanFordShortestPathAlgorithm(org.gephi.algorithms.shortestpath.BellmanFordShortestPathAlgorithm) GraphModel(org.gephi.graph.api.GraphModel) NodeClickEventListener(org.gephi.tools.spi.NodeClickEventListener) Edge(org.gephi.graph.api.Edge) GraphController(org.gephi.graph.api.GraphController)

Example 83 with Node

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;
}
Also used : NodePressAndDraggingEventListener(org.gephi.tools.spi.NodePressAndDraggingEventListener) Node(org.gephi.graph.api.Node)

Example 84 with Node

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;
    }
}
Also used : Color(java.awt.Color) Node(org.gephi.graph.api.Node) AbstractNode(org.openide.nodes.AbstractNode) Sheet(org.openide.nodes.Sheet) PropertySupport(org.openide.nodes.PropertySupport) TextProperties(org.gephi.graph.api.TextProperties)

Example 85 with Node

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);
}
Also used : GraphModel(org.gephi.graph.api.GraphModel) UndirectedGraph(org.gephi.graph.api.UndirectedGraph) Node(org.gephi.graph.api.Node) Edge(org.gephi.graph.api.Edge) GraphController(org.gephi.graph.api.GraphController) Test(org.testng.annotations.Test)

Aggregations

Node (org.gephi.graph.api.Node)301 GraphModel (org.gephi.graph.api.GraphModel)169 Test (org.testng.annotations.Test)152 Edge (org.gephi.graph.api.Edge)116 UndirectedGraph (org.gephi.graph.api.UndirectedGraph)102 DirectedGraph (org.gephi.graph.api.DirectedGraph)84 GraphController (org.gephi.graph.api.GraphController)82 HashMap (java.util.HashMap)62 Graph (org.gephi.graph.api.Graph)50 Column (org.gephi.graph.api.Column)22 LinkedList (java.util.LinkedList)17 NodeIterable (org.gephi.graph.api.NodeIterable)12 EdgeIterable (org.gephi.graph.api.EdgeIterable)10 Table (org.gephi.graph.api.Table)10 ArrayList (java.util.ArrayList)7 HashSet (java.util.HashSet)6 GraphElementsController (org.gephi.datalab.api.GraphElementsController)6 Color (java.awt.Color)5 DataTablesController (org.gephi.datalab.api.datatables.DataTablesController)5 MouseClickEventListener (org.gephi.tools.spi.MouseClickEventListener)4