荣格:固定顶点之间的距离

时间:2014-08-17 17:50:43

标签: java jung

我正在使用Jung绘制图表。在我的例子中,一个节点可以同时拥有多个父节点和多个子节点。

因为,一个节点可以有多个父节点,我不能使用树形布局来将我的图形绘制为树。

因此,我正在使用DAGLayout。但是,在DAGLayout中,绘图是自下而上的。

要解决此问题,我已将图形旋转180度以从上到下绘制图形。

以下是代码:

    // generate layout
    Layout<SimpleTaskDomain, Integer> layout = new DAGLayout<SimpleTaskDomain, Integer>(g);

    // fix layout size
    layout.setSize(new Dimension(700, 700));


    VisualizationViewer<SimpleTaskDomain, Integer> vv = new VisualizationViewer<SimpleTaskDomain, Integer>(layout);
    vv.setBackground(Color.white);
    vv.setPreferredSize(new Dimension(800, 800));
    vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<SimpleTaskDomain>());

    Dimension d = layout.getSize();
    Point2D center = new Point2D.Double(d.width / 2, d.height / 2);
    vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).rotate(Math.PI, center);

    vv.setVertexToolTipTransformer(vv.getRenderContext().getVertexLabelTransformer());
    // vv.getRenderContext().setEdgeShapeTransformer(new
    // EdgeShape.Orthogonal<SimpleTaskDomain, Integer>());
    vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line<SimpleTaskDomain, Integer>());

    VertexFontTransformer<SimpleTaskDomain> vff = new VertexFontTransformer<SimpleTaskDomain>();
    vff.setBold(true);
    vv.getRenderContext().setVertexFontTransformer(vff);

    Transformer<SimpleTaskDomain, Paint> vertexPaint = new Transformer<SimpleTaskDomain, Paint>() {
        public Paint transform(final SimpleTaskDomain i) {
            return Color.GREEN;
        }
    };
    vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);

    Transformer<SimpleTaskDomain, Shape> vertexSize = new Transformer<SimpleTaskDomain, Shape>() {
        public Shape transform(final SimpleTaskDomain i) {
            Rectangle2D.Double rectangle = new Rectangle2D.Double(-40, -20, 80, 40);
            return AffineTransform.getScaleInstance(2, 2).createTransformedShape(rectangle);
        }
    };

    vv.getRenderContext().setVertexShapeTransformer(vertexSize);

    vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);

我正在将顶点的形状更改为矩形而不是默认圆。

但是,在输出图中,顶点重叠。

如何控制顶点之间的距离,以避免重叠。

我想要一个树状结构,顶点之间有适当的距离。

感谢阅读!

1 个答案:

答案 0 :(得分:0)

你的问题是&#34; DagLayout&#34;,但你的代码示例说&#34; FRLayout&#34;。

无论如何,DagLayout不允许您指定节点距离。

我建议您遵循MinimumSpanningTreeDemo中的大纲:

(1)从图表中提取适当的生成树。

(2)使用TreeLayout布局生成树(允许您指定间距)。

(3)使用树形布局中的布局位置为原始图形创建一个新的StaticLayout实例,并使用该布局进行可视化。