2017-01-30 6 views
0

저는 springy와 lraphael을 사용하여 자바 스크립트 애플리케이션을 수행하려고합니다. 은 사실 나는 (공식 탄력 코드에서 사용 가능) 데모 raphael.html https://github.com/dhotson/springy/blob/master/demo-raphael.html 난 할 노력하고있어 2 주 노드 A와 B 및 10 개 다른 노드를 가지고있다springy.js 및 lraphael에서 가장자리를 완전히 제거하는 방법은 무엇입니까?

(C, D, E를 포크 ...). 이 10 개의 노드를 A 또는 B에 연결할 수 있습니다 (단, 동시에는 아님). 일부 확인란을 선택하면 일부 노드가 연결을 변경하고 다른 주 노드로 이동할 수 있습니다.

그래서 나는 그녀가 예를 들어 A와 C 사이의 줄이 제거되지 않는다는 것 외에는 작동하는 것으로 보입니다. 체크 박스가 업데이트되면 다음을 실행합니다.

A가 C에 연결되어 있고 연결을 끊고 B를 C에 연결한다고 가정합시다. EC를이 경계라고 부릅니다. 그래서 나는

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가 노드와 가장자리를 생성하지만이 가장자리와 연결된 경로를 만들 수도 있습니다. 그래서이 경로는 가장자리를

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

주를 파괴하기 전에 제거해야합니다 : A와 B 사이의 최대 거리 퍼팅에 대한 두 번째 질문 :이 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); 
};