科學計算三維可視化---TVTK管線與數據加載(用IVTK根據觀察管線)

一:用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)查看整個場景編輯器

添加或刪除光源和修改屬性
相關文章
相關標籤/搜索