如何获取或设置节点的x,y位置

时间:2014-04-25 20:06:47

标签: javascript vivagraphjs

我尝试使用以下代码获取Vivagraph.js中节点的位置。不知道为什么它返回undefined。

当我在console.dir(节点)时,我确实看到正在设置一个位置,但由于某种原因我无法访问它。

var layout = Viva.Graph.Layout.forceDirected(graph, {
   springLength : 20,
   springCoeff : 0.0008,
   dragCoeff : 0.1,
   gravity : -10,
   theta : 0.5
});

var graphics = Viva.Graph.View.webglGraphics();
var nodeSize = 10;

graphics.setNodeProgram(Viva.Graph.View.webglImageNodeProgram());

graphics.node(function(node) {
    //url location on your server
    var ui = Viva.Graph.View.webglImage(nodeSize, 'https://lh4.googleusercontent.com/' + node.data);
    console.dir(ui);
    return ui;
}).link(function(link) {
       return Viva.Graph.View.webglLine(colors[(Math.random() * colors.length) << 0]);
   });

graph.forEachNode(function(node) { 
    console.log('pos ' + node.position); 
});

1 个答案:

答案 0 :(得分:2)

根据文档HEREnode.position不再是有效的属性。请改用layout.getNodePosition(node.id)

引用文档(如果链接中断):

  

位置属性从节点对象移出到布局提供程序。

     

为什么呢?拥有共享节点位置使得两个不同的布局无法呈现相同的图形。

v.0.4。*

// each node object has "position" on it:
graph.forEachNode(function (node) {
  var position = node.position;
  position.x += 1; // move by one pixel
});

v.0.5。*

// "position" is now part of layouter:
graph.forEachNode(function (node) {
  // layout here is instance of Viva.Graph.Layout.forceDirected or Viva.Graph.Layout.constant:
  var position = layout.getNodePosition(node.id);
  position.x += 1; 
});