Search in sources :

Example 41 with Edge

use of org.gephi.graph.api.Edge 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 42 with Edge

use of org.gephi.graph.api.Edge in project gephi by gephi.

the class EdgeLabelRenderer method render.

@Override
public void render(Item item, RenderTarget target, PreviewProperties properties) {
    Edge edge = (Edge) item.getSource();
    // Label
    Color edgeColor = item.getData(EDGE_COLOR);
    Color color = item.getData(EdgeLabelItem.COLOR);
    DependantOriginalColor propColor = properties.getValue(PreviewProperty.EDGE_LABEL_COLOR);
    color = propColor.getColor(edgeColor, color);
    String label = item.getData(EdgeLabelItem.LABEL);
    Float x = item.getData(LABEL_X);
    Float y = item.getData(LABEL_Y);
    // Skip if empty
    if (label == null || label.trim().isEmpty()) {
        return;
    }
    // Outline
    DependantColor outlineDependantColor = properties.getValue(PreviewProperty.EDGE_LABEL_OUTLINE_COLOR);
    Float outlineSize = properties.getFloatValue(PreviewProperty.EDGE_LABEL_OUTLINE_SIZE);
    outlineSize = outlineSize * (font.getSize() / 32f);
    int outlineAlpha = (int) ((properties.getFloatValue(PreviewProperty.EDGE_LABEL_OUTLINE_OPACITY) / 100f) * 255f);
    if (outlineAlpha < 0) {
        outlineAlpha = 0;
    }
    if (outlineAlpha > 255) {
        outlineAlpha = 255;
    }
    Color outlineColor = outlineDependantColor.getColor(edgeColor);
    outlineColor = new Color(outlineColor.getRed(), outlineColor.getGreen(), outlineColor.getBlue(), outlineAlpha);
    if (target instanceof G2DTarget) {
        renderG2D((G2DTarget) target, label, x, y, color, outlineSize, outlineColor);
    } else if (target instanceof SVGTarget) {
        renderSVG((SVGTarget) target, edge, label, x, y, color, outlineSize, outlineColor);
    } else if (target instanceof PDFTarget) {
        renderPDF(((PDFTarget) target), label, x, y, color, outlineSize, outlineColor);
    }
}
Also used : DependantColor(org.gephi.preview.types.DependantColor) Color(java.awt.Color) EdgeColor(org.gephi.preview.types.EdgeColor) DependantColor(org.gephi.preview.types.DependantColor) DependantOriginalColor(org.gephi.preview.types.DependantOriginalColor) DependantOriginalColor(org.gephi.preview.types.DependantOriginalColor) Edge(org.gephi.graph.api.Edge)

Example 43 with Edge

use of org.gephi.graph.api.Edge in project gephi by gephi.

the class ImportNGTest method processMergeWeightsTestGraph.

private Graph processMergeWeightsTestGraph(boolean multipleContainers) {
    if (multipleContainers) {
        importController.process(new Container[] { container, container2, container3 }, mergeProcessor, workspace);
        showReport(container.getReport());
        showReport(container2.getReport());
        showReport(container3.getReport());
        showReport(mergeProcessor.getReport());
        Assert.assertTrue(mergeProcessor.getReport().isEmpty());
    } else {
        importController.process(container, defaultProcessor, workspace);
        showReport(container.getReport());
        showReport(defaultProcessor.getReport());
        Assert.assertTrue(defaultProcessor.getReport().isEmpty());
    }
    Graph graph = graphController.getGraphModel(workspace).getGraph();
    Edge edge21 = graph.getEdge(graph.getNode("2"), graph.getNode("1"));
    Assert.assertNotNull(edge21);
    Assert.assertEquals(edge21.getWeight(), 1.0);
    Edge edge22 = graph.getEdge(graph.getNode("2"), graph.getNode("2"));
    Assert.assertNotNull(edge22);
    Assert.assertEquals(edge22.getWeight(), 1.5);
    return graph;
}
Also used : Graph(org.gephi.graph.api.Graph) Edge(org.gephi.graph.api.Edge)

Example 44 with Edge

use of org.gephi.graph.api.Edge in project gephi by gephi.

the class ImportNGTest method checkWeightsAveraged.

private void checkWeightsAveraged(boolean multipleContainers) {
    Graph graph = processMergeWeightsTestGraph(multipleContainers);
    Assert.assertEquals(graph.getNodeCount(), 2);
    Assert.assertEquals(graph.getEdgeCount(), 3);
    Edge edge12 = graph.getEdge(graph.getNode("1"), graph.getNode("2"));
    Assert.assertNotNull(edge12);
    Assert.assertEquals(edge12.getWeight(), 2.0666, EPS);
}
Also used : Graph(org.gephi.graph.api.Graph) Edge(org.gephi.graph.api.Edge)

Example 45 with Edge

use of org.gephi.graph.api.Edge in project gephi by gephi.

the class ImportNGTest method checkWeightsMaxKept.

private void checkWeightsMaxKept(boolean multipleContainers) {
    Graph graph = processMergeWeightsTestGraph(multipleContainers);
    Assert.assertEquals(graph.getNodeCount(), 2);
    Assert.assertEquals(graph.getEdgeCount(), 3);
    Edge edge12 = graph.getEdge(graph.getNode("1"), graph.getNode("2"));
    Assert.assertNotNull(edge12);
    Assert.assertEquals(edge12.getWeight(), 4.2);
}
Also used : Graph(org.gephi.graph.api.Graph) Edge(org.gephi.graph.api.Edge)

Aggregations

Edge (org.gephi.graph.api.Edge)151 Node (org.gephi.graph.api.Node)122 GraphModel (org.gephi.graph.api.GraphModel)84 GraphController (org.gephi.graph.api.GraphController)79 Test (org.testng.annotations.Test)67 UndirectedGraph (org.gephi.graph.api.UndirectedGraph)46 DirectedGraph (org.gephi.graph.api.DirectedGraph)44 Graph (org.gephi.graph.api.Graph)31 HashMap (java.util.HashMap)26 EdgeIterable (org.gephi.graph.api.EdgeIterable)18 LinkedList (java.util.LinkedList)13 Column (org.gephi.graph.api.Column)11 NodeIterable (org.gephi.graph.api.NodeIterable)9 ArrayList (java.util.ArrayList)8 Table (org.gephi.graph.api.Table)6 GraphView (org.gephi.graph.api.GraphView)5 HashSet (java.util.HashSet)4 Interval (org.gephi.graph.api.Interval)4 TimeFormat (org.gephi.graph.api.TimeFormat)4 DateTimeZone (org.joda.time.DateTimeZone)4