2016-09-10 2 views
0

어떻게 cytoscape js 그래프에 새로 추가 된 노드가 겹치지 않도록합니까? 내가 내가 새로운 노드를 추가 내가 추가 된 노드 내가 방법을 변경할 수 있습니다 다른 사람에게 중복 그래프로 노드를 추가 할 API를 추가 사용하면 노드 중복을새 노드 추가시 노드 겹침을 방지

기존 방지시키는이 규칙에 의해 자동으로 위치를 수행하려는 기존 노드의 위치가 변경을 원하지 않는 이 행동? 추가 모드에서 노드가 겹치는 것을 방지하기위한 해결책이 있습니까? (새 노드는 기존 노드와 겹치지 않습니까?)

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

답변

0

해결책이 없습니다. 이 코드를 사용하여 겹침을 테스트하는 빈 자리를 찾습니다 (고정 노드 크기가 주어 졌으므로 경계 상자를 사용하여 적용 할 수 있지만 상황이 느려집니다). 그리고이 실패했을 때 단지 예 10 추가 있는지

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; 
 
}
제가 첫번째 인수로 선호 위치 ({: ..., Y ..이 X}) 이것을 사용 그것 fitst. Wether는 특정 문제에 따라 최적의 솔루션입니다.

0

자동화 된 방법을 원한다면 최선의 방법은 강제 지정/물리 레이아웃입니다.

레이아웃을 실행할 때 모든 노드를 잠급니다.

앱/데이터에 가장 적합한 것을 다른 레이아웃으로 실험 해보아야합니다.