首頁>技術>

導讀:前面我們使用了pyvista來進行VTK程式設計。這個話題是直接從VTK本身出發。

第一講,講VTK的基本操作流程。

1、一個故事

2、我們需要一個演員

3、為演員準備情節

4、為演員準備形象

5、成為一個演員

6、為演員化妝

7、搭建一個舞臺

8、為舞臺建一個劇場

9、為劇場增加設施

10、將演員放進去

11、準備劇場裝置

12、調整相機

13、演員就位

14、開始演出

VTK的世界,正如我們的人生,每一個數據都是一個演員。

最近我讀了一本書,名字叫《故事力》,書中說明了一個故事產生的力有多大。我們使用VTK這個視覺化工具,本質上也是在為故事增加色彩。

試想一下,一個啞劇,或者我們聽評書,從表現力來說,是不是缺少了什麼。

我們完全可以用資料來展示給我們要展示的人,告訴他們你的牙齒的骨質減少了多少。但是這可能不能給我們直接的感受。

在資料裡,視覺化,可以說是我們的眼睛,為我們帶來了色彩,更重要的,為我們打通了我們幾百萬年的因為視覺給我們的大腦的處理能力。

1、一個故事

我喜歡爬山,在出發之前,我都會看一下地圖,不是交通圖,而是地形圖。

我想知道那些河流為什麼如此蜿蜒?

我想知道那些高山為什麼如此挺拔?

我想知道地殼背後的故事。

我想知道歐亞板塊為什麼可以擠壓出 喜馬拉雅?

這些都是我想在地形圖中看到的故事。

比如,我想知道一個地圖,哪些地方高,哪些地方低,是不是隻有資料就可以了?

顯然是不夠的,因為,知道高低不是目的,目的是為了一次旅行,或者,為了尋找水源。

所以,資料化處理的目的,就是給使用者一個舞臺,一個展現他故事想象力的舞臺和舞臺中的配角。

而VTK就是打造這個舞臺的工具,使用VTK可以打造這個舞臺,豐富這個舞臺上的配角。

使用者是這個舞臺的主角。

而,我們,是這個舞臺的建造者。

2、我們需要一個演員

一個演員,是一個劇情所需要的角色的扮演者。他具有這個角色所需要的各方面的元素。對於資料視覺化來說,一個數據演員,就是那個資料的扮演者。這個演員需要內涵,也就是資料。也需要形象,就是圖形的形象,更需要一些動作。

在VTK中所有的Source都是資料。資料的形象是Mapper,而actor是演員。

最終在一個舞臺上呈現,舞臺,是render。

這樣就構成了一個基本要素。

我們得先為render這個舞臺準備演員也就是actor,然後把actor放置在render這個舞臺上。

3、為演員準備情節(Source)

我們這個資料是一堆數字,記錄了一個圓柱體的幾何資訊。

    cylinder = vtk.vtkCylinderSource()

4、為演員準備形象(Mapper)

我們把資料對映成一個圖形,或者對映成一個可以直接被舞臺轉化為圖形的東西。這個就是Mapper。我們需要建立這個Mapper和資料之間的連線。

cylinderMapper = vtk.vtkPolyDataMapper()cylinderMapper.SetInputConnection(cylinder.GetOutputPort())

5、成為一個演員

有了資料,有了資料形成的影象,我們就可以建立一個演員了。

    cylinderActor = vtk.vtkActor()    cylinderActor.SetMapper(cylinderMapper)

同樣,我們需要建立,這個演員和形象也就是Mapper之間的連線。

6、為演員化妝

只有資料,並且對映成圖形,這可能還不夠,我們還需要為這個演員化妝。做形象設計。這就是顏色的作用。

cylinderActor.GetProperty().SetColor(colors.GetColor3d("Tomato"))

7、搭建一個舞臺

建立render,並給這個舞臺一個背景

ren = vtk.vtkRenderer()    colors = vtk.vtkNamedColors()    # Set the background color.    bkg = map(lambda x: x / 255.0, [26, 51, 102, 255])    colors.SetColor("BkgColor", *bkg)ren.SetBackground(colors.GetColor3d("BkgColor"))

8、為舞臺建一個劇場

劇場大小,劇場的名字

renWin = vtk.vtkRenderWindow()renWin.AddRenderer(ren)renWin.SetSize(300, 300)renWin.SetWindowName('VTK大劇場')

9、為劇場增加設施(互動)

    iren = vtk.vtkRenderWindowInteractor()    iren.SetRenderWindow(renWin)

10、將演員放進去

ren.AddActor(cylinderActor)

11、準備劇場裝置

iren.Initialize()

12、調整相機

ren.ResetCamera()ren.GetActiveCamera().Zoom(1.5)renWin.Render()# Start the event loop.iren.Start()

13、演員就位

renWin.Render()

14、開始演出

# Start the event loop.iren.Start()

15、結束

所以,每一個VTK的視覺化處理,都是一個故事的開始。我們得親自為每一場演出,完成每一個角色,每一個場景,每一個劇場。

12
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Go 程式開發目錄結構推薦