TVTK管線與數(shù)據(jù)加載

TVTk的管線

管線技術(shù)(Pipeline,流水線)

可視化管線(Visualization Pipeline):將原始數(shù)據(jù)加工成圖形數(shù)據(jù)的過程来惧。

TVTK對(duì)象 說明
CubeSource 通過程序內(nèi)部計(jì)算輸出一組描述長(zhǎng)方體的數(shù)據(jù)(PolyData)
PolyDataMapper PolyData通過該映射器將數(shù)據(jù)映射為圖形數(shù)據(jù)(mapper)

圖形管線(Graphics Pipeline):圖形數(shù)據(jù)加工為我們所看到的圖像的過程供搀。

TVTK對(duì)象 說明
Actor 場(chǎng)景中的一個(gè)實(shí)體葛虐。它包括一個(gè)圖形數(shù)據(jù)(mapper)屿脐,具有描述該實(shí)體的位置宪卿、方向万栅、大小的屬性。
Renderer 渲染的場(chǎng)景休溶。它包括多個(gè)需要渲染的Actor撒遣。
RenderWindow 渲染用的圖形窗口义黎,它包括一個(gè)或者多個(gè)Render。
RenderWindowInteractor 給圖形窗口提供一些用戶交互功能泻云,例如平移狐蜕、旋轉(zhuǎn)层释、放大縮小。這些交互式操作并不改變Actor或者圖形數(shù)據(jù)的屬性廉白,只是調(diào)整場(chǎng)景中的照相機(jī)(Camera)的一些設(shè)置乖寒。

用IVTK工具觀察管線

使用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)
 
#創(chuàng)建一個(gè)帶Crust(Python Shell)的窗口
gui = GUI()
win = ivtk.IVTKWithCrustAndBrowser()
win.open()
win.scene.add_actor(a)
     
#窗口左側(cè)欄楣嘁,可將下面四行代碼去掉查看變化,你發(fā)現(xiàn)你會(huì)加上這四行代碼的聋溜。
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()

代碼優(yōu)化結(jié)構(gòu)痊班,將之封裝成函數(shù):

from tvtk.api import tvtk
 
def ivtk_scene(actors):
    from tvtk.tools import ivtk
    #創(chuàng)建一個(gè)帶Crust(Python Shell)的窗口
    win = ivtk.IVTKWithCrustAndBrowser()
    win.open()
    win.scene.add_actor(actors)
    #窗口左側(cè)欄涤伐,可將下面四行代碼去掉查看變化缨称,你發(fā)現(xiàn)你會(huì)加上這四行代碼的祝迂。
    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()

由于這兩個(gè)函數(shù)可復(fù)用性和使用頻率較高型雳,可將這兩個(gè)函數(shù)保存在tvtkfunc.py文件中,以后使用的話就用:

from tvtkfunc import ivtk_scene, event_loop

可以在上述界面調(diào)整照相機(jī)沿量、實(shí)體Actor朴则、光源钓简、場(chǎng)景,下面是照相機(jī)的屬性:

屬性 說明
clipping_plane 它有兩個(gè)元素撤蚊,分別表示照相機(jī)到近侦啸、遠(yuǎn)兩個(gè)裁剪平面的距離丧枪。在這兩個(gè)平面范圍之外將不會(huì)顯示
position 照相機(jī)在三維空間中的坐標(biāo)
focal_point 照相機(jī)所聚焦的焦點(diǎn)坐標(biāo)
view_up 照相機(jī)的上方向矢量

數(shù)據(jù)集

數(shù)據(jù)集(Dataset)豪诲。

  • 點(diǎn)(Point)和數(shù)據(jù)(Data)
  • 點(diǎn)之間:連接vs非連接
  • 多個(gè)相關(guān)的點(diǎn)組成單元(Cell)
  • 點(diǎn)的連接:顯式vs隱式
  • 數(shù)據(jù):標(biāo)量(Scalar)vs矢量(Vector)

數(shù)據(jù)集-Imagedata

ImageData表示二維或三維圖像的數(shù)據(jù)結(jié)構(gòu)屎篱。

from tvtk.api import tvtk
img = tvtk.ImageData(spacing=(1, 1, 1), origin=(1, 2, 3), dimension=(3, 4, 5))
參數(shù) 說明
origin 三維網(wǎng)格數(shù)據(jù)的起點(diǎn)坐標(biāo)
spacing 三維網(wǎng)格數(shù)據(jù)在X葵蒂、Y践付、Z軸上的間距
dimensions 為在X、Y隧土、Z軸上的網(wǎng)格數(shù)

數(shù)據(jù)集-RectilinearGrid

RectilinearGrid:間距不均勻的網(wǎng)格,所有點(diǎn)都在正交的網(wǎng)格上辐脖。

from tvtk.api import tvtk
import numpy as np

x = np.array([0, 3, 9, 15])
y = np.array([0, 1, 5])
z = np.array([0, 2, 3])
r = tvtk.RectilinearGrid()
r.x_coordinates = x
r.y_coordinates = y
r.z_coordinates = z
r.dimensions = len(x), len(y), len(z)

數(shù)據(jù)集-StructuredGrid

StructuredGrid:創(chuàng)建任意形狀的網(wǎng)格皆愉,需要指定點(diǎn)的坐標(biāo)幕庐。

points、dimensions瑟由、point_data.scalars等屬性進(jìn)行初始化

數(shù)據(jù)集-Polydata
PolyData:由一系列的點(diǎn)届吁、點(diǎn)之間的聯(lián)系以及由點(diǎn)構(gòu)成的多邊形組成。

TVTK數(shù)據(jù)加載

TVTK模型讀取

s = tvtk.STLReader(file_name = 'stl文件名')

from tvtk.api import tvtk
from tvtkfunc import ivtk_scene,event_loop#詳細(xì)見上
 
s = tvtk.STLReader(file_name = "python.stl")
m = tvtk.PolyDataMapper(input_connection = s.output_port)
a = tvtk.Actor(mapper = m)
 
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

python.stl文件百度云鏈接

運(yùn)行效果截圖:

TVTK MultiBlock數(shù)據(jù)讀取

Plot3D

  • 網(wǎng)格(XYZ 文件)
  • 空氣動(dòng)力學(xué)結(jié)果(Q 文件)
  • 通用結(jié)果
from tvtk.api import tvtk
 
def read_data():# 讀入數(shù)據(jù)
    plot3d = tvtk.MultiBlockPLOT3DReader(
            xyz_file_name="combxyz.bin",#網(wǎng)格文件
            q_file_name="combq.bin",#空氣動(dòng)力學(xué)結(jié)果文件
            scalar_function_number=100,#設(shè)置標(biāo)量數(shù)據(jù)數(shù)量
            vector_function_number=200#設(shè)置矢量數(shù)據(jù)數(shù)量
            )
    plot3d.update()
    return plot3d
 
plot3d = read_data()
grid = plot3d.output.get_block(0)

combxyz.bin和combq.bin文件百度云鏈接

Reference :
中國(guó)大學(xué)MOOC北京理工大學(xué)Python科學(xué)計(jì)算三維可視化黃天羽亮蛔、嵩天老師課件
課程主頁(yè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蒿叠,隨后出現(xiàn)的幾起案子神得,更是在濱河造成了極大的恐慌偷仿,老刑警劉巖酝静,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異宗苍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)让歼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門是越,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碌上,“玉大人,你說我怎么就攤上這事天梧∠忌ィ” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵后豫,是天一觀的道長(zhǎng)挫酿。 經(jīng)常有香客問我愕难,道長(zhǎng),這世上最難降的妖魔是什么葱弟? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任芝加,我火速辦了婚禮射窒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己抬旺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布误褪。 她就那樣靜靜地躺著碾褂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘀略。 梳的紋絲不亂的頭發(fā)上乓诽,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天鸠天,我揣著相機(jī)與錄音,去河邊找鬼稠集。 笑死剥纷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筷畦。 我是一名探鬼主播鳖宾,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鼎文,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了拇惋?” 一聲冷哼從身側(cè)響起撑帖,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛉艾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拓瞪,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祭埂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年蛆橡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矢空。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粥血,死狀恐怖酿箭,靈堂內(nèi)的尸體忽然破棺而出缭嫡,到底是詐尸還是另有隱情,我是刑警寧澤妇蛀,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布评架,位于F島的核電站,受9級(jí)特大地震影響上祈,放射性物質(zhì)發(fā)生泄漏浙芙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望南窗。 院中可真熱鬧,春花似錦女轿、人聲如沸壕翩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽珍策。三九已至宅倒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹭劈,已是汗流浹背线召。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工缓淹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人料仗。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓鹏溯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親肺孵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颜阐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容