一:用IVTK根據觀察管線
(一)引入該工具
from tvtk.tools import ivtk
可能需要安裝pygments
pip3 install pygments
(二)使用ivtk顯示立方體
from tvtk.api import tvtk from tvtk.tools import ivtk from pyface.api import GUI #可視化管線部分 s = tvtk.CubeSource(x_length=1.0,y_length=2.0,z_length=3.0) m = tvtk.PolyDataMapper(input_connection=s.output_port) #圖形管線部分 a = tvtk.Actor(mapper=m) #創建一個實體 #創建一個帶有Crust(Python Shell)的窗口 gui = GUI() win = ivtk.IVTKWithCrustAndBrowser() win.open() win.scene.add_actor(a) #開啟界面消息循環 gui.start_event_loop()
由於GUI存在一個Bug,使得子窗口脫離主窗口
修正錯誤
from tvtk.api import tvtk from tvtk.tools import ivtk from pyface.api import GUI #可視化管線部分 s = tvtk.CubeSource(x_length=1.0,y_length=2.0,z_length=3.0) m = tvtk.PolyDataMapper(input_connection=s.output_port) #圖形管線部分 a = tvtk.Actor(mapper=m) #創建一個實體 #創建一個帶有Crust(Python Shell)的窗口 gui = GUI() win = ivtk.IVTKWithCrustAndBrowser() win.open() win.scene.add_actor(a) #修正錯誤 dialog = win.control.centralWidget().widget(0).widget(0) from pyface.qt import QtCore dialog.setWindowFlags(QtCore.Qt.WindowFlags(0x00000000)) dialog.show() #開啟界面消息循環 gui.start_event_loop()
(三)為了提高程序的可讀性,以及未來復用的方便,我們將上述代碼封裝函數
我們將創建IVTK窗口的功能和事件循環的功能封裝在兩個函數中
from tvtk.api import tvtk def ivtk_scene(actors): from tvtk.tools import ivtk # 創建一個帶有Crust(Python Shell)的窗口 win = ivtk.IVTKWithCrustAndBrowser() win.open() win.scene.add_actor(actors) # 修正錯誤 dialog = win.control.centralWidget().widget(0).widget(0) from pyface.qt import QtCore dialog.setWindowFlags(QtCore.Qt.WindowFlags(0x00000000)) dialog.show() return win def event_loop(): from pyface.api import GUI gui = GUI() # 開啟界面消息循環 gui.start_event_loop() # 可視化管線部分 s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0) m = tvtk.PolyDataMapper(input_connection=s.output_port) # 圖形管線部分 a = tvtk.Actor(mapper=m) # 創建一個實體 win = ivtk_scene(a) win.scene.isometric_view() event_loop()
(四)進一步將函數轉換為模塊,方便復用
(五)界面操作
(1)交互界面獲取信息
print(scene.renderer.actors[0].mapper.input.points.to_array()) #輸出當前場景下渲染器中實體的映射器圖形的輸入點
(2)查看照相機節點
(3)查看實體Actor
注意:在方向方面都是采用右手法則,上面照相機也是一樣
(4)查看整個場景編輯器
添加或刪除光源和修改屬性