就中國慕課mooc/科學計算三維可視化課中對遇到的題目進行記錄,是鄙人自己所使用的代碼。記錄本人的學習日志,若有纰漏之處,希望各位看官加以斧正。
給出代碼:
from tvtk.api import tvtk
#最先開始使用tvtk.ConeSource()創建一個圓錐數據
#再利用tvtk.PolyDataMapper()將圓錐數據轉化為圖形數據
#然後用tvtk.Actor()生成實體
cs = tvtk.ConeSource(height=6.0,radius=2.0,resolution=64)
m=tvtk.PolyDataMapper(input_connection=cs.output_port)
a=tvtk.Actor(mapper=m)
#用tvtk.Renderer()生成渲染器,background後綴跟背景顏色顯示數值
#創建windous繪制窗口,並且添加經Renderer處理信息
ren=tvtk.Renderer(background=(1,1,1))
ren.add_actor(a)
rw=tvtk.RenderWindow(size=(300,300))
rw.add_renderer(ren)
#為w創建窗口交互工具RenderWindowInteractor
rwi=tvtk.RenderWindowInteractor(render_window=rw)
rwi.initialize()
rwi.start()
給出代碼:
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()
from tvtk.api import tvtk
s = tvtk.STLReader(file_name = "文件路徑.stl")
m = tvtk.PolyDataMapper(input_connection = s.output_port)
a = tvtk.Actor(mapper = m)
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()
給出代碼:
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()
#開始頁面循環,即維持頁面更新
plot3d = tvtk.MultiBlockPLOT3DReader(
xyz_file_name="文件1路徑.bin",
q_file_name="文件2路徑.bin",
scalar_function_number=100, vector_function_number=200
)#讀入Plot3D數據
plot3d.update()#讓plot3D計算其輸出數據
grid = plot3d.output.get_block(0)#獲取讀入的數據集對象
con = tvtk.ContourFilter()#創建等值面對象
con.set_input_data(grid)
con.generate_values(10, grid.point_data.scalars.range)#指定輪廓數和數據范圍,10為總共10個等勢面,即為等勢面賦值
#這步操作就是針對題目的要求,用set_value(int-等勢面序號),float-等勢面代替數值);用get_value(int-等勢面序號)獲取等勢面數值
con.set_value(0,2*con.get_value(0))
#設定映射器的變量范圍屬性
m = tvtk.PolyDataMapper(scalar_range = grid.point_data.scalars.range,
input_connection=con.output_port)
a = tvtk.Actor(mapper = m)
a.property.opacity = 0.5#設定透明度為0.5
#窗口繪制
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()