1

我想在GraphStream中建模一个图并用它的查看器渲染它,但是我的节点需要有不同的输入和输出端口(最好分别在节点框的左侧和右侧)和边缘应该连接那些端口而不是节点中心。

这在GraphStream中是否可行?如果没有,是否有另一个可以使用的 Java 库?我知道GraphViz Dot允许这样做,但我不想通过命令行调用它,因为它引入了一个不属于我的项目的外部依赖项。

编辑:我想要呈现的那种东西的例子(但对于一个非常不同的域):在此处输入图像描述

我非常愿意自己进行渲染,但当然我仍然需要节点和边缘的路由和坐标。

4

2 回答 2

1

GraphStream 中还没有办法在节点上声明锚点、句柄或端口。

但是,由于您希望边缘在节点的左侧和右侧收紧,那么您可能需要尝试“freeplan”CSS 属性。请参见下面的示例,尤其是图表上的“样式表”属性:

Graph graph = new SingleGraph("FreePlane");
System.setProperty("org.graphstream.ui.renderer", "org.graphstream.ui.j2dviewer.J2DGraphRenderer");
graph.display();
graph.setAttribute("stylesheet", "node { "
        + "     shape: rounded-box; "
        + "     padding: 5px; "
        + "     fill-color: white; "
        + "     stroke-mode: plain; "
        + "     size-mode: fit; "
        + "} "
        + "edge { "
        + "     shape: freeplane; "
        + "}");
graph.addAttribute("ui.quality");
graph.addAttribute("ui.antialias");

Node a = graph.addNode("A");
Node b = graph.addNode("B");
graph.addEdge("AB", "A", "B");
Node c = graph.addNode("C");
graph.addEdge("BC", "B", "C"); 

a.addAttribute("ui.label", "node A");
b.addAttribute("ui.label", "node B");
c.addAttribute("ui.label", "node C");

那会给你类似的东西: 此代码生成的窗口的截图

于 2015-03-31T12:38:34.940 回答
0

我无法使用 graphstream 实现这一点,但其他框架支持此类功能,例如:

于 2016-11-18T12:07:48.360 回答