程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python/tvtk

編輯:Python

Python/tvtk/test

  • 前言
  • 4.28題目:
    • 1.請用tvtk繪制一個圓錐,圓錐的數據源對象為ConeSource(),圓錐高度為6.0,圓錐半徑為2.0。
    • 2.請自行從網絡上下載一個.stl模型文件,使用tvtk讀取該文件並顯示出來。
    • 3.改寫課程中標量等值面繪制的實例,通過get_value()和set_value()設定第1個等值面的值為原來的2倍。

前言

就中國慕課mooc/科學計算三維可視化課中對遇到的題目進行記錄,是鄙人自己所使用的代碼。記錄本人的學習日志,若有纰漏之處,希望各位看官加以斧正。

4.28題目:

1.請用tvtk繪制一個圓錐,圓錐的數據源對象為ConeSource(),圓錐高度為6.0,圓錐半徑為2.0。

給出代碼:

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()

2.請自行從網絡上下載一個.stl模型文件,使用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()
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()

3.改寫課程中標量等值面繪制的實例,通過get_value()和set_value()設定第1個等值面的值為原來的2倍。

給出代碼:

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()

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved