2017-01-30 3 views
0

私はspringyとraphaelを使用してjavascriptアプリケーションを実行しようとしています。 は実際に私が何をしようとしている(公式弾力コードから入手可能) https://github.com/dhotson/springy/blob/master/demo-raphael.htmlspringy.jsとraphaelからエッジを完全に削除する方法は?

をデモraphael.htmlをフォーク、2つのメインノードAとBと10の他のノード(C、D、Eを持つことです...)。 これらのノードをAまたはBに接続することができます(ただし、同時に両方は使用できません)。 一部のノードをチェックすると、接続を変更して他のメインノードに移動することができます。

だから私は、彼女とAとCの間のラインが削除されていないことを除いて、どのように動作しているようです。 チェックボックスが更新されたら、私は実行します:

私はAがCに接続されていると私はそれを切断し、BとCを接続したいと思います。 だから私は

graph_removeEdge(EC); 
delete EC; 
EC = graph.newEdge(C, B, {color: '#00A0B0'}); 

を実行しないコードは、BとCが接続されているため、動作しているようですし、AとCはもうありません。 しかし、私はまだAとCの間の線の古い画像を見ることができます(それ以上動きはありませんが、まだそこにあります)

どうすれば削除できますか?

このECエッジを削除して作成せず、ターゲットノードを変更して更新しようとしましたが、何も起こりません。 コード:

EC.target = B; 

もう一つの問題は、彼らは非常に近づけることができるので、私はAとB 間の最大距離を置くことができる方法です。

ありがとうございます。

答えて

0

いいえ、私は問題があります: springyはノードとエッジを作成していますが、このエッジに関連付けられたraphaelパスも作成します。 だから、このパスは、エッジ

EC.connection.fg.remove(); 
graph_removeEdge(EC); 

注破壊する前に除去されなければならない:AとBの間の最大距離を置くことについての2番目の質問:リンクがないので、それはspringuyライブラリーに変更することなく行うことはできませんがAとBの間には距離がありません。 唯一の解決策は、各ノードにフラグを追加することです。このフラグを持つノードが配布されます。もちろん、これはspringuy.jsの修正によって実装されなければならないでしょう。おそらくこの関数では

Layout.ForceDirected.prototype.tick = function(timestep) { 
    this.attractToCentre(); 
    this.applyHookesLaw(); 
    this.applyCoulombsLaw(); 
    this.applyDistanceToFlaggedNode(); // <--- your new function 
    this.updateVelocity(timestep); 
    this.updatePosition(timestep); 
}; 
関連する問題