改变荣格边缘的形状和位置

时间:2011-02-27 21:32:10

标签: graph visualization jung

我需要以特定方式安排节点。我试过静态布局。我可以更改节点的位置,但无法将边缘放在特定位置。静态布局有一个setLocation方法,我用它来改变节点的位置但是对于边缘,我不知道如何将它们放在特定的位置,以便新定位的节点与边连接。

另一个问题:如何通过覆盖变换方法来更改Jung中边的形状。

2 个答案:

答案 0 :(得分:1)

目前,JUNG没有为边缘安置提供良好的支持。 EdgeShape,特别是EdgeShape.Orthogonal,会向您显示内置支持的存在。

答案 1 :(得分:1)

我知道这个帖子有点旧,但我认为需要恢复 - 希望这个问题还没有得到解答。原因是奥马达因斯先生的回答无法帮助我。 (也许是因为我的不足和理解文件的意愿) 在完成JUNG技术的一些工作后,我很高兴现在得到一些合格的评论。

在静态布局中有两种(似乎是)简单的方法来转换边缘。

第一种方法是覆盖直接影响边缘形状的Transformer的“transform”方法:

Transformer<Graph<Context<String, String>, String>, Shape> edgeTransformer = new Transformer<Graph<Context<String,String>,String>,Shape>(){
        @Override
        public Shape transform(Graph<Context<String, String>, String> graphStringContext)
        {
            return (new Line2D.Double());
        }
    };

(如果使用“图表”图表)

关于感测边缘确实有 - 这是连接 - 一个简单的例子是将一个单独的Line2D(它将由受影响的顶点所具有的中心点组成)返回到渲染器。 方法调用显然是:

vv.getRenderContext().setEdgeShapeTransformer(edgeTransform);

但是:这不起作用。 (也许是因为我做错了;缺乏教程的借口) 无论人们试图使“变换”方法返回,渲染器都将获得空值。

第二种可能性是将顶点变换分成两个变换器。第一个变换器将使用:

仅设置基本顶点位置
Transformer<String, Point2D> vertexPositionTransformer = new Transformer<String,Point2D>() {
            @Override
            public Point2D transform(String st) {
                return new Point2D.Double();
            };

第二个是可选的。它可用于更改顶点大小或任何想要形状的外观。将需要位置变换顶点的位置,因为此变换器将覆盖位置集。

Transformer<String, Shape> vertexShapeTransformer = new Transformer<String, Shape>() {
            @Override
            public Shape transform(String st) {
                return new Ellipse2D.Double();
            };

现在布局可以实现。它不会以Graph为单个参数的默认方式构造,而是另外一个:vertexPositionTransformer。这看起来像是:

StaticLayout<String, String> layout = new StaticLayout<String, String>(graph, vertexPositionTransformer);

在布局构造上变换边缘将自动将边缘端点设置为每个包含顶点的中心。

在代码示例中,我放弃了“转换”方法的内容,这些方法当然会因目的而异。在将顶点和边缘添加到应受其影响的图形之后,必须使用“变换器”类/对象。而已。 请纠正不良风格和此类问题。 我很高兴得到反馈。

问候

Lukas Koschine