簡體   English   中英

在 PyVista 中將繪圖儀坐標轉換為世界坐標

[英]Convert from plotter coordinates to world coordinates in PyVista

我是 PyVista 和 vtk 的新手。 我正在實現一個網格編輯工具 (Python=3.10, pyvista=0.37,vtk=9.1 ) 當用戶單擊鼠標光標的世界坐標(例如表面上的投影點)的給定半徑內的所有點時,應該被選中。 我已經通過使用 pyvista 繪圖儀 track_click_position 方法對鼠標點擊的回調實現了這么多。

我的問題是我還希望用戶能夠在單擊之前預覽選擇(突出顯示將被選中的頂點)。 為此,有必要跟蹤鼠標在世界坐標中的位置,並將回調 function 附加到將突出顯示相關節點的鼠標移動。

pyvista 繪圖儀的“track_mouse_position”方法不支持附加回調,但我想出了一個解決方法。 在下面的最小示例中,我設法跟蹤了繪圖儀坐標系中鼠標 cursor 位置(以像素為單位)的變化。 我現在對如何將這些轉換成世界坐標感到困惑。 當鼠標懸停在球體上時,這些“世界坐標”應該是球體上的投影位置。 當鼠標懸停在球體上時,它應該不返回任何內容或 inf 或其他一些無用的值。

import pyvista as pv
def myCallback(src,evt):
    C = src.GetEventPosition() # appears to be in pixels of the viewer
    print(C)
    # how to convert C into world coordinates on the sphere

sp = pv.Sphere()
p = pv.Plotter()
p.add_mesh(sp)
p.iren.add_observer("MouseMoveEvent",myCallback)
p.show()

非常感謝您的幫助。 哈利

我想通了。 他們的關鍵是在調用“track_mouse_position”之后使用“pick_mouse_position”。

 import pyvista as pv def myCallback(src,evt): out = p.pick_mouse_position() print(out) sp = pv.Sphere() p = pv.Plotter() p.add_mesh(sp) p.track_mouse_position() p.iren.add_observer("MouseMoveEvent",myCallback) p.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM