在循环中调用节点子集上的布局不能正确布局节点

时间:2015-10-10 03:47:55

标签: javascript cytoscape.js

我有几组节点,我需要每个组在不同的位置围绕它自己的圈子。

我有一个for循环,它将节点添加到图表中,最后获取这些节点,并尝试将它们圆化。

然而,当我运行程序时,节点以网格格式结束。 如何获得预期的行为?

    for( group in groups ){
        cy.add([
                { group:'nodes', data: { id: 1, customgroup: group}, position:{x: 0,y: 0} },
                { group:'nodes', data: { id: 2, customgroup: group}, position:{x: 0,y: 0} },
                { group:'nodes', data: { id: 3, customgroup: group}, position:{x: 0,y: 0} },
                { group:'nodes', data: { id: 4, customgroup: group}, position:{x: 0,y: 0} },
                { group:'nodes', data: { id: 5, customgroup: group}, position:{x: 0,y: 0} },
                { group:'edges', data: { source: '1',target: '2', weight:1} },
                { group:'edges', data: { source: '2',target: '3', weight:1} },
                { group:'edges', data: { source: '3',target: '4', weight:1} },
                { group:'edges', data: { source: '4',target: '5', weight:1} },
                { group:'edges', data: { source: '5',target: '1', weight:1} }
               ]);
        cy.elements('[customgroup="'+group+'"]').layout({ name: 'circle', radius:1, startAngle: 13*((Math.PI)/8)});
    }

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

经过几个小时没有进展,我走开了,在壁炉里烧了一把火,并且有一个苏格兰威士忌。在那一刻我完全忘记了这个问题的那一刻,解决方案就打击了我。

Cytoscape在初始化时可以选择指定节点的布局。当我实现上述操作时,我从init中删除了布局,以避免两次定位节点。

处理此问题的正确方法是设置:

layout: {
        name: 'preset',
        padding: 10
      },

这使我的自定义代码能够正确处理所需的行为,并且还可以防止节点的双重定位。