2014-02-24 102 views
1

使用Cytoscape.js v2.1,我注意到可能是一個錯誤(從這個版本或可能是我= P)的東西。Cytoscape cyPosition()vs zoom zoom

當插入一個節點,我使用它來獲取從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 fit設置爲false時,節點位置正確。 (如您在this link中看到的那樣)。

因爲它只在最初的縮放比例合適的時候發生,所以我認爲這是該選項的特定錯誤。

回答

1

請閱讀有關渲染與模型位置的文檔。我認爲你已經混淆了這兩個:http://cytoscape.github.io/cytoscape.js/#notation/position

模型位置必須保持不變,儘管平移和縮放。否則,職位將不一致。

另一方面,呈現的位置來自模型位置,平移和縮放。自然地,當縮放與身份(1)不同或者平移不同於原點(0,0)時,模型位置和渲染位置不同。

它看起來並不像你在屏幕上的位置使用呈現的位置。

編輯:

請勿將渲染位置與模型位置混合匹配。如果您在處理程序中獲取模型位置(e.cyPosition),則繼續使用模型位置添加節點等。如果您獲得渲染位置(e.cyRenderedPosition),則使用渲染位置添加節點等。

混合這兩個不會給予所需的行爲,除非你做一些數學來翻譯它們。