0

Vivagraph.js でノードの位置を取得するために、次のコードを試しました。未定義を返す理由がわかりません。

console.dir(node) を実行すると、位置が設定されていることがわかりますが、何らかの理由でアクセスできません。

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); 
});
4

1 に答える 1

2

ドキュメントHEREによると、有効なプロパティでnode.positionはなくなりました。layout.getNodePosition(node.id)代わりに使用してください。

ドキュメントを引用するには(リンクが切れた場合):

position 属性は、ノード オブジェクトからレイアウト プロバイダーに移動されます。

なんで?ノード位置を共有すると、2 つの異なるレイアウターによる同じグラフのレンダリングが不可能になります。

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; 
});
于 2014-04-27T04:37:38.817 に答える