2014-02-24 4 views
1

Cytoscape.js v2.1을 사용하여 버그 (이 버전 또는 아마도 mine = p의 것)를 발견했습니다.Cytoscape cyPosition() vs zoom fit

노드를 삽입 할 때, 나는 tap 이벤트 e에서 노드 위치를 얻기 위해 이것을 사용하고 있습니다 :

또한
position = { 
    x: e.cyPosition.x, 
    y: e.cyPosition.y 
}; 

, 내 cytoscape 초기화가 설정됩니다 layout fittrue 등 :

$cy.cytoscape({ 
    minZoom: 0.1, 
    maxZoom: 2.0, 
    layout: { 
     fit: true 
    }, 
(...) 

그리고 그래서 문제가 시작됩니다. 이를 사용하여 Windows 7, Chrome 버전 32.0.1700.107 또는 Firefox 27.0.1에서 큰 오프셋으로 노드를 배치하고 있습니다 (here).

반면에 layout fitfalse으로 설정하면 노드의 위치가 올바르게 지정됩니다. (this link에서 볼 수 있듯이).

초기 확대/축소가 true 일 때만 발생하므로이 옵션의 특정 버그가 있습니다.

답변

1

렌더링 된 위치 대 모델 위치에 관한 문서를 읽으십시오. 두 가지를 혼동스럽게 생각합니다. http://cytoscape.github.io/cytoscape.js/#notation/position

팬 및 확대/축소 기능을 사용하더라도 모델 위치는 일정하게 유지되어야합니다. 그렇지 않으면 위치가 일치하지 않습니다.

반면에 렌더링 된 위치는 모델 위치, 팬 및 확대/축소에서 파생됩니다. 당연히 줌이 ID (1)와 다르거 나 팬이 원점 (0, 0)과 다를 때 모델 위치와 렌더링 된 위치가 다릅니다.

화면에 배치 할 때 렌더링 된 위치를 사용하는 것처럼 보이지 않습니다.

편집 :

가 혼합 모델 위치에 렌더링 위치를 일치하지 않습니다. 핸들러 ( e.cyPosition)에서 모델 위치를 얻은 경우 모델 위치를 계속 사용하여 노드를 추가하십시오. 렌더링 된 위치 ( e.cyRenderedPosition)를 얻은 경우 렌더링 된 위치를 사용하여 노드를 추가합니다.

당신이 그들을 번역하는 몇 가지 계산을하지 않는 한 두 사람이 원하는 행동을 제공하지 않습니다 혼합.