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;
}
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);
}
}
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;
}
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);
}
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);
}
Aggregations