2013-10-14 89 views
2

我正在使用強制佈局。通過點擊div元素內部創建新的d3節點。該節點是在點擊時創建的。節點是大小爲50像素×50像素的矩形。在創建節點後立即將其固定屬性設置爲true,以便它不會自行移動。我不打電話給force.drag。按住Ctrl鍵並拖動節點,即可移動節點。可以通過從一個節點向另一個節點拖動鼠標(不需要按住Ctrl鍵)來創建邊。D3強制佈局:如何保持節點間給定的最小距離?

現在,我想添加以下功能。 任何兩個節點之間的最近距離應該大於某個最小值。您可以爲最小距離假設任何正值。讓我們假設100個像素。當任何新節點的創建距離現有節點太近時,節點應該移動,以便任何兩個節點之間的距離變得超過100個像素。類似地,當一個節點移動並且與另一個節點過近時,節點也應移動以保持最小100個像素的距離。

沒有條件要在哪個方向上移動節點。一種方法是檢查座標和距離,然後計算哪些節點要向哪個方向移動多少,並相應地執行代碼。但是,d3中有一種更簡單的方法嗎?

+0

有沒有簡單的方法。強制佈局不支持指定最小距離。 –

回答

2

考慮只使用force.linkDistance()force.linkStrength()來實現此目的。 linkDistance表示您的最小距離約束,並且linkStrength(在[0,1]範圍內)確定鏈接距離是多麼「剛性」,或者模擬可以覆蓋多少linkDistance。

force.linkDistance

force.linkStrength

+0

如果我使用linkDistance和linkStrength,是否必須使用force.drag?我能否繼續讓固定資產保持真實,還是必須將其設定爲假? – Avinash

+0

您不需要使用force.drag,但不幸的是,固定節點不會響應linkDistance,因爲它依賴於仿真,並且固定節點免於仿真。 –

相關問題