2016-09-10 65 views
0

如何防止重疊細胞景觀js圖中的新增節點? 我不希望現有節點改變位置 我想新加入的節點通過這一規則防止現有節點重疊防止節點重疊添加新節點

當我使用添加API添加節點,以圖表將節點相互重疊 我怎樣才能改變做自動定位這種行爲? 是否存在一種解決方案,用於在添加模式下防止節點重疊(新節點不重疊現有節點)?

cy.add([ 
    { data: {label:"aaa" ,id:"bbb" } }, 
    { data: {label:"aaa333" ,id:"rrrr"} }, 
]); 

回答

0

沒有內置的解決方案。我只是使用這段代碼來測試重疊(這是給定一個固定的節點大小,你可以適應它使用邊界框,但這會減慢速度)。

function overlap(pos, size) { 
 
    var overlap = false; 
 
    cy.nodes(':visible').forEach(function (node) { 
 
    var npos = node.position(); 
 
    if ((pos.x - size) < npos.x && (pos.x + size) > npos.x && (pos.y - size) < npos.y && (pos.y + size) > npos.y) { 
 
     overlap = true; 
 
     return false; //break 
 
    } 
 
    }); 
 
    return overlap; 
 
}

我用這個與首選位置作爲第一個參數({X:..,Y:..}),並且當失敗我剛添加10至y,以查看是否它最適合。對於你來說,這是最好的解決方案取決於具體的問題。

0

如果你想要一個自動的方式來做到這一點,你最好的選擇就是強制定向/物理佈局。

運行佈局時鎖定除新節點以外的所有節點。

您必須嘗試使用​​不同的佈局來查看哪一個特別適合您的應用/數據。