![環(huán)境信息可視化-vtk課件_第1頁(yè)](http://file4.renrendoc.com/view/62a69d0e66a5314432c09305cf6a1771/62a69d0e66a5314432c09305cf6a17711.gif)
![環(huán)境信息可視化-vtk課件_第2頁(yè)](http://file4.renrendoc.com/view/62a69d0e66a5314432c09305cf6a1771/62a69d0e66a5314432c09305cf6a17712.gif)
![環(huán)境信息可視化-vtk課件_第3頁(yè)](http://file4.renrendoc.com/view/62a69d0e66a5314432c09305cf6a1771/62a69d0e66a5314432c09305cf6a17713.gif)
![環(huán)境信息可視化-vtk課件_第4頁(yè)](http://file4.renrendoc.com/view/62a69d0e66a5314432c09305cf6a1771/62a69d0e66a5314432c09305cf6a17714.gif)
![環(huán)境信息可視化-vtk課件_第5頁(yè)](http://file4.renrendoc.com/view/62a69d0e66a5314432c09305cf6a1771/62a69d0e66a5314432c09305cf6a17715.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本節(jié)課內(nèi)容VTK:ATutorial,介紹VTK的基本內(nèi)容1WhatisVTK?2VTK圖形模型3VTK可視化模型本節(jié)課內(nèi)容VTK:ATutorial,介紹VTK的基本13.0VTK安裝在,有vtk5.0版已編譯好的安裝文件:VTK.ZIP
把VTK.ZIP解壓到目錄python25\下。(2)VTK的主站點(diǎn)在
可在該站點(diǎn)上下載最新版的源代碼、特定平臺(tái)的二進(jìn)制代碼、例子、數(shù)據(jù)和文檔等。
3.0VTK安裝在,2VTK是幾個(gè)較為廣泛使用的可視化系統(tǒng)之一。AVS是商用系統(tǒng),IBM’sDataExplorer(DX)原先為商用系統(tǒng),目前已轉(zhuǎn)為開(kāi)放源代碼系統(tǒng)并改名為OpenDX.其它還有NAGExplorer4andTemplateGraphicsAmira.VTK是一個(gè)通用可視化系統(tǒng),已被許多大學(xué)和研究機(jī)構(gòu)采用,作為教學(xué)和研究工具。許多公司也在其基礎(chǔ)上開(kāi)發(fā)了各種可視化系統(tǒng),包括醫(yī)學(xué)可視化,體可視化,石油勘探,聲學(xué)系統(tǒng),流體系統(tǒng),有限元分析,表面重構(gòu)等。VTK是幾個(gè)較為廣泛使用的可視化系統(tǒng)之一。AVS是商用33.1WhatisVTK?
開(kāi)放源代碼、可移植(WinTel/Unix)、面向?qū)ο蟮?D計(jì)算機(jī)圖形,可視化,和圖像處理系統(tǒng);以C++語(yǔ)言實(shí)現(xiàn),支持Tcl、Python和Java語(yǔ)言;支持復(fù)雜應(yīng)用程序開(kāi)發(fā),應(yīng)用程序快速原型開(kāi)發(fā);支持多種GUI開(kāi)發(fā)環(huán)境,如Tk、X/Motif、MFC、wxWidgets
。提供數(shù)據(jù)表達(dá)類型,包括無(wú)結(jié)構(gòu)點(diǎn)集,多邊形數(shù)據(jù),圖像,體元,結(jié)構(gòu)格網(wǎng),正交格網(wǎng),以及無(wú)結(jié)構(gòu)格網(wǎng)等.
通過(guò)readers/import以及writers/export和其它程序交換數(shù)據(jù)。提供數(shù)百個(gè)數(shù)據(jù)處理器處理各種數(shù)據(jù),從圖像變換到三角網(wǎng)構(gòu)建.VTK繪制模式支持2D、多邊形、體元和紋理繪制,以及它們的各種組合。3.1WhatisVTK?43.2VTK結(jié)構(gòu)3.2.1VTK在API訪問(wèn)接口上包括兩個(gè)主要部分:C++實(shí)現(xiàn)的核心層自動(dòng)生成的接口層,包括Tcl、Java和Python.3.2VTK結(jié)構(gòu)5C++實(shí)現(xiàn)的核心層:數(shù)據(jù)結(jié)構(gòu)、算法和對(duì)計(jì)算時(shí)間要求高的系統(tǒng)函數(shù)在C++核心層中實(shí)現(xiàn)。核心層中采用對(duì)象工廠和虛擬函數(shù)等提高系統(tǒng)可移植性以及可擴(kuò)展性。VTK在核心層獨(dú)立于任何GUI,不依賴于某一特定的窗口系統(tǒng)。應(yīng)用程序開(kāi)發(fā)者能很方便地把VTK插入到自己開(kāi)發(fā)的系統(tǒng)中。VTK通過(guò)抽象的圖像模型實(shí)現(xiàn)圖形的可移植性。C++實(shí)現(xiàn)的核心層:6
自動(dòng)生成的接口層:核心層提供速度和效率,接口層提供的是靈活和可擴(kuò)展能力。例如使用GUI原型開(kāi)發(fā)工具如Tcl/Tk,Python/Tk,Python/wxPython,或JavaAWT可進(jìn)行專業(yè)應(yīng)用程序的快速開(kāi)發(fā)。自動(dòng)生成的接口層:73.2.2VTK內(nèi)部組成VTK內(nèi)部包括兩個(gè)主要的子系統(tǒng)—圖形模型子系統(tǒng)和可視化管道子系統(tǒng)。(1)圖形模型子系統(tǒng)圖形模型是建立在圖形語(yǔ)言(如OPENGL)基礎(chǔ)上的抽象層,提供跨平臺(tái)的可移植性。在1993年,不同的計(jì)算機(jī)平臺(tái)有各自的圖形語(yǔ)言:
XGLforSun,StarbaseforHewltt-Packard,glforSiliconGraphics.為了實(shí)現(xiàn)圖形的平臺(tái)與設(shè)備無(wú)關(guān),提出了圖形模型.圖形模型中的對(duì)象采用電影工業(yè)中的名稱命名。燈光、相機(jī)、演員和道具是用戶創(chuàng)建場(chǎng)景所使用的類。通過(guò)抽象圖形模型,3D多邊形繪制(lights,cameras,actors)和體繪制以及其它繪制方式就有了一致的訪問(wèn)接口。3.2.2VTK內(nèi)部組成8環(huán)境信息可視化-vtk課件9
繪制窗口和繪制器:可視化具體的數(shù)據(jù)前,必須在計(jì)算機(jī)屏幕上打開(kāi)一個(gè)繪制窗口。vtkRenderWindow是一個(gè)或多個(gè)繪制器在其上進(jìn)行繪制的窗口的抽象基類。直接調(diào)用vtkRenderWindow可以自動(dòng)生成所在平臺(tái)上與設(shè)備相關(guān)的窗口子類。vtkRenderWindow是vtkRenderer對(duì)象的容器對(duì)象。多個(gè)vtkRenderer對(duì)象可以平鋪在一個(gè)vtkRenderWindow中,從而創(chuàng)建復(fù)合的可視化系統(tǒng)。繪制窗口和繪制器:10下面例子把兩個(gè)繪制器放在一個(gè)繪制窗口中。每一個(gè)有不同的背景顏色:fromvtkimport*renWin=vtkRenderWindow()renWin.SetSize(600,300)ren1=vtkRenderer()ren1.SetViewport(0.0,0.0,0.5,1.0)ren1.SetBackground(0.8,0.4,0.2)renWin.AddRenderer(ren1)ren2=vtkRenderer()ren2.SetViewport(0.5,0.0,1.0,1.0)ren2.SetBackground(0.1,0.2,0.4)renWin.AddRenderer(ren2)renWin.Render()運(yùn)行下面例子把兩個(gè)繪制器放在一個(gè)繪制窗口中。每一個(gè)有不同的背景顏11
交互器:一般,我們使用鼠標(biāo)控制場(chǎng)景中的相機(jī)位置和方向,以及其它道具。vtkRenderWindowInteractor提供交互功能。iren=vtkRenderWindowInteractor()iren.SetRenderWindow(renWin)iren.Initialize()iren.Start()交互器:12
道具,映射器,和特性道具是被加到繪制器中創(chuàng)建場(chǎng)景的對(duì)象。vtkProp是所有2D和3D道具的抽象基類,包含可見(jiàn)性、方向、大小和位置信息。道具與映射器及特性對(duì)象關(guān)聯(lián).映射器引用輸入數(shù)據(jù)對(duì)象并知道如何繪制該輸入對(duì)象.特性對(duì)象包含繪制參數(shù),如顏色和材質(zhì)等.
道具,映射器,和特性13
繪制3D幾何數(shù)據(jù)vtkActor是在場(chǎng)景中繪制3D幾何數(shù)據(jù)的vtkProp道具類的子類。演員類對(duì)象自動(dòng)創(chuàng)建缺省的vtkProperty對(duì)象,但要求用戶自己創(chuàng)建vtkMapper子類。根據(jù)幾何特性的不同,從vtkDataSetMapper或vtkPolyDataMapper中選擇一個(gè).如果數(shù)據(jù)是用vtkPolyData表示的,包含點(diǎn),線,和多邊形,則使用vtkPolyDataMapper,否則使用vtkDataSetMapper。繪制3D幾何數(shù)據(jù)14下例創(chuàng)建一個(gè)立方體:cubeData=vtkCubeSource()cubeMapper=vtkPolyDataMapper()cubeMapper.SetInput(cubeData.GetOutput())cubeActor=vtkActor()cubeActor.SetMapper(cubeMapper)Ren1.AddProp(cubeActor)Ren1.ResetCamera()renWin.Render()運(yùn)行由于vtkCubeSource對(duì)象是多邊形數(shù)據(jù),使用vtkPolyDataMapper繪制數(shù)據(jù),ResetCamera()把相機(jī)對(duì)準(zhǔn)數(shù)據(jù)下例創(chuàng)建一個(gè)立方體:15
旋轉(zhuǎn)與改變顏色:cubeActor.RotateX(30.0)cubeActor.RotateY(20.0)cubeActor.GetProperty().SetColor(1.0,0.7,0.7)renWinRender使用演員的GetProperty()訪問(wèn)自動(dòng)創(chuàng)建的特性對(duì)象。
運(yùn)行ch3\cubecolor.py旋轉(zhuǎn)與改變顏色:163D體數(shù)據(jù)繪制vtkImageData是vtkDataSet的子類,可表示1D、2D和3D圖像數(shù)據(jù)。作為vtkDataSet的子類,vtkImageData可用vtkActor表示,并可用vtkDataSetMapper進(jìn)行繪制。在3D下,vtkImageData數(shù)據(jù)被看作體元,相應(yīng)的,它就可用vtkVolume表示,并用vtkVolumeMapper的子類繪制.VTK目前支持三種類型的體繪制—光線跟蹤,2D紋理映射,以及VolumePro圖形卡.3D體數(shù)據(jù)繪制17下例中,首先讀入一個(gè)3D結(jié)構(gòu)數(shù)據(jù),然后使用vtkVolumeTextureMapper2D繪制:negReader=vtkSLCReader()negReader.Set(“neghip.slc”)negMapper=vtkVolumeTextureMapper2D()negMapper.SetInput(negReader.GetOutput())體繪制最困難的是定義轉(zhuǎn)換函數(shù),把標(biāo)量值轉(zhuǎn)成顏色和透明度。negOpacity=vtkPiecewiseFunction()negOpacity.AddPoint(0,0.0)negOpacity.AddPoint(255,0.2)negColor=vtkColorTransferFunction()negColor.AddRGBPoint(64,1.0,0.0,0.0)negColor.AddRGBPoint(128,0.0,0.0,1.0)negColor.AddRGBPoint(196,0.0,1.0,0.0)下例中,首先讀入一個(gè)3D結(jié)構(gòu)數(shù)據(jù),然后使用vtkVolume18
創(chuàng)建體元特性和體元道具:negProperty=vtkVolumeProperty()negProperty.SetColor(negColor)negProperty.SetScalarOpacity(negOpacity)negVolume=vtkVolume()negVolume.SetMapper(negMapper)negVolume.SetProperty(negProperty)ren2.AddProp(negVolume)ren2.ResetCamera()renWin.Render()
運(yùn)行創(chuàng)建體元特性和體元道具:19
幾何與體元的混合:VTK在一個(gè)場(chǎng)景中可以混合多個(gè)演員和體元進(jìn)行繪制。下例,多邊形和體元混合在一起。posReader=vtkPolyDataReader()posReader.Set(“poshipsurface.vtk”)posMapper=vtkPolyDataMapper()posMapper.SetInput(posReader.GetOutput())posActor=vtkActor()posActor.SetMapper(posMapper)ren2.AddProp(posActor)renWin.Render()運(yùn)行幾何與體元的混合:202D數(shù)據(jù)繪制除了3D幾何和體元數(shù)據(jù),VTK能夠可視化2D數(shù)據(jù),如幾何,圖像,和文本。演員,映射器,和特性同樣適用于2D數(shù)據(jù)。下例把2D數(shù)據(jù)和3D數(shù)據(jù)混合繪制。vtkActor2D表示場(chǎng)景中的標(biāo)題,vtkTextMapper繪制文本數(shù)據(jù),vtkActor2D自動(dòng)創(chuàng)建vtkProperty2D對(duì)象。titleMapper=vtkTextMapper()titleMapper.SetInput(“ThisisaPinkCube”)titleMapper.GetTextProperty().SetJustificationToCentered()titleActor=vtkActor2D()titleActor.SetMapper(titleMapper)titleActor.GetProperty().SetColor(1,1,0)pc=titleActor.GetPositionCoordinate()pc.SetCoordinateSystemToNormalizedViewport()Pc.SetValue(0.5,0.92)ren1.AddProp(titleActor)renWin.Render() 運(yùn)行2D數(shù)據(jù)繪制212D數(shù)據(jù)常用于注記,VTK提供了一些對(duì)象,能夠把多個(gè)2D演員和映射器組合成一個(gè)2D演員。例如,vtkScalarBarActor把文本和2D多邊形組合成圖例:scalarBar=vtkScalarBarActor()scalarBar.SetLookupTable(negColor)scalarBar.SetTitle(“Density”)sPC=scalarBar.GetPositionCoordinate()sPC.SetCoordinateSystemToNormalizedViewport()sPC.SetValue(0.8,0.1)ren2.AddProp(scalarBar)renWin.Render()運(yùn)行2D數(shù)據(jù)常用于注記,VTK提供了一些對(duì)象,能夠把多個(gè)2D演22
燈光,相機(jī)VTK應(yīng)用程序不需要顯式創(chuàng)建vtkLight或vtkCamera。如果沒(méi)有創(chuàng)建,系統(tǒng)會(huì)自動(dòng)創(chuàng)建。從繪制器可以修改位置、焦點(diǎn)以及視場(chǎng)等。相機(jī)包含一些方法,通過(guò)它們可調(diào)整位置,旋轉(zhuǎn)等,如Azimuth(),Elevation(),Roll(),Pitch(),andYaw()。cam=ren2.GetActiveCamera()cam.Azimuth(20.0)cam.Elevation(10.0)renWin.Render()運(yùn)行燈光,相機(jī)23燈光缺省是白光,位置和焦點(diǎn)缺省情況下和相機(jī)一致。下例加入第二個(gè)光源,綠色。light=vtkLight()light.SetFocalPoint(0.0,0.0,0.0)light.SetPosition(1.0,0.0,0.0)light.SetColor(0.0,1.0,0.0)light.SetIntensity(0.5)ren2.AddLight(light)renWin.Render()運(yùn)行燈光缺省是白光,位置和焦點(diǎn)缺省情況下和相機(jī)一致。下例加入第二24(2)VTK可視化管道VTK數(shù)據(jù)處理管道把數(shù)據(jù)變換成可由圖形子系統(tǒng)繪制的形式,或變換成其它形式,以待管道的后續(xù)處理。例如,讀入離散點(diǎn),通過(guò)三角化創(chuàng)建多邊形,使用面繪制顯示mesh面等構(gòu)成一個(gè)數(shù)據(jù)處理管道。管道,也叫做可視化網(wǎng)絡(luò),通過(guò)連接處理對(duì)象和數(shù)據(jù)對(duì)象構(gòu)成。數(shù)據(jù)對(duì)象提供對(duì)數(shù)據(jù)的訪問(wèn),處理對(duì)象操作數(shù)據(jù)對(duì)象。在實(shí)現(xiàn)上,連接通過(guò)
SetInput()/GetOutput()方法實(shí)施:aFilter.SetInput(bFilter.GetOutput())Filters創(chuàng)建與它的輸出類型一致的內(nèi)部數(shù)據(jù)對(duì)象。只有輸出與輸入類型匹配的連接能夠成立。上例中,bFilter的輸出類型和aFilter的輸入類型必須一致。類型檢查可在編譯時(shí)或運(yùn)行時(shí)進(jìn)行。(2)VTK可視化管道25環(huán)境信息可視化-vtk課件26環(huán)境信息可視化-vtk課件27環(huán)境信息可視化-vtk課件28一旦管道構(gòu)建起來(lái),F(xiàn)ilters則只有在內(nèi)部狀態(tài)改變了或它的輸入數(shù)據(jù)改變了才能重新執(zhí)行。VTK采用分布式隱含更新方法控制管道的運(yùn)行。每個(gè)對(duì)西那個(gè)管理一個(gè)內(nèi)部時(shí)間標(biāo)記,只有過(guò)時(shí)的對(duì)象才能重新運(yùn)算。一旦管道構(gòu)建起來(lái),F(xiàn)ilters則只有在內(nèi)部狀態(tài)改變了或它的29
數(shù)據(jù)對(duì)象:VTK一般把數(shù)據(jù)表示成場(chǎng)數(shù)據(jù),數(shù)據(jù)集是帶有拓?fù)浜蛶缀谓Y(jié)構(gòu)的數(shù)據(jù)對(duì)象。除了結(jié)構(gòu),數(shù)據(jù)集還附帶有屬性數(shù)據(jù)。屬性數(shù)據(jù)包括:標(biāo)量,矢量,張量,法向,紋理坐標(biāo),以及場(chǎng)數(shù)據(jù)。數(shù)據(jù)對(duì)象:30環(huán)境信息可視化-vtk課件31
處理對(duì)象:VTK提供了數(shù)百個(gè)處理對(duì)象。其中多數(shù)只處理一種數(shù)據(jù)類型(如圖像處理對(duì)象)。一些處理對(duì)象如vtkContourFilter接受一種類型的數(shù)據(jù)輸入,輸出另一種類型的數(shù)據(jù)。處理對(duì)象一般被稱為Filters。VTK把處理對(duì)象分為三類:源處理對(duì)象,過(guò)濾器,和映射器。源處理對(duì)象沒(méi)有VTK數(shù)據(jù)輸入,但產(chǎn)生一到多個(gè)輸出,如讀入器。過(guò)濾器接受一到多個(gè)輸入,產(chǎn)生一到多個(gè)輸出。映射器是管道的終點(diǎn),它或者和圖形系統(tǒng)耦合在一起,或者把數(shù)據(jù)寫到磁盤或另一管道。處理對(duì)象:32例子:讀取數(shù)字化的多邊形數(shù)據(jù),
然后簡(jiǎn)化,用Laplacian光滑減少面噪聲,生成面法線,修飾表面:讀多邊形數(shù)據(jù):Reader=vtkBYUReader()Reader.SetGeometry(“fran.g”)創(chuàng)建管道,由decimator,smoother,和normalgenerator組成。Deci=vtkDecimatePro()Deci.SetInput(reader.GetOutput())Deci.SetTargetReduction(0.9)Deci.PreserveTopologyOn()Smoother=vtkSmoothPolyDataFilter()Smoother.SetInput(deci.GetOutput())例子:33Normals=vtkPolyDataNormals()Normals.SetInput(smoother.GetOutput())Normals.SetFeatureAngle(60)mapper=vtkPolyDataMapper()Mapper.SetInput(normals.GetOutput())fran=vtkActor()Fran.SetMapper(mapper)Fran.GetProperty().SetColor(1,0.49,0.25)ptMask=vtkMaskPoints()ptMask.SetInput(normals.GetOutput())ptMask.SetOnRatio(10)ptMask.RandomModeOn()cone=vtkConeSource()Cone.SetResolution(6)Normals=vtkPolyDataNormals()34Transform=vtkTransform()Transform.Translate(0.5,0.0,0.0)transformF=vtkTransformPolyDataFilter()transformF.SetInput(cone.GetOutput())transformF.SetTransform(transform)Glyph.vtkGlyph3D()Glyph.SetInput(ptMask.GetOutput())Glyph.SetSource(transformF.GetOutput())Glyph.SetVectorModeToUseNormal()Glyph.SetScaleModeToScaleByVector()Glyph.SetScaleFactor(0.004)spikeMapper=vtkPolyDataMapper()spikeMapper.SetInput(glyph.GetOutput())spikeActor=vtkActor()spikeActor.SetMapper(spikeMapper)spikeActor.GetProperty().SetColor(0,.79,.34)Transform=vtkTransform()35ren3=vtkRenderer()renWin2=vtkRenderWindow()renWin2.AddRenderer(ren3)Iren2=vtkRenderWindowInteractor()Iren2.SetRenderWindow(renWin2)Ren3.AddActor(fran)Ren3.AddActor(spikeActor)renWin2.Render()運(yùn)行
ren3=vtkRenderer()36環(huán)境信息可視化-vtk課件37環(huán)境信息可視化-vtk課件38環(huán)境信息可視化-vtk課件39環(huán)境信息可視化-vtk課件40第一套作業(yè)要求:一創(chuàng)建交互器和交互窗口
a創(chuàng)建1個(gè)交互器vtkRenderWindowInteractor;
b創(chuàng)建1個(gè)繪制窗口vtkRenderWindow;
c在上述繪制窗口中,創(chuàng)建3個(gè)繪制器vtkRenderer。二繪制內(nèi)容
1在第一個(gè)繪制器中:繪制一個(gè)立方體cube和一個(gè)標(biāo)題如“Thisisacube”;
2在第二個(gè)繪制器中:在1的基礎(chǔ)上,改變?nèi)笔艄獾念伾珵榫G色,并改變?nèi)笔∠鄼C(jī)的方位角;
3在第三個(gè)繪制器中: 繪制一個(gè)圖例,顏色由黃色變到藍(lán)色,范圍從100到200;三提交方式:
通過(guò)email發(fā)到第一套作業(yè)要求:一創(chuàng)建交互器和交互窗口
41下一節(jié)課內(nèi)容:4.1可視化數(shù)據(jù)類型
4.2科學(xué)數(shù)據(jù)管理4.3科學(xué)數(shù)據(jù)格式4.4圖形圖像數(shù)據(jù)格式4.5VTK中的數(shù)據(jù)對(duì)象下一節(jié)課內(nèi)容:4.1可視化數(shù)據(jù)類型42網(wǎng)格數(shù)據(jù):笛卡兒網(wǎng)格規(guī)整網(wǎng)格矩形網(wǎng)格結(jié)構(gòu)網(wǎng)格非結(jié)構(gòu)網(wǎng)格曲線網(wǎng)格塊結(jié)構(gòu)網(wǎng)格混合結(jié)構(gòu)網(wǎng)格散亂點(diǎn)網(wǎng)格數(shù)據(jù):43科學(xué)數(shù)據(jù)格式:HDF格式CDF和NetCDF科學(xué)數(shù)據(jù)格式:44VTK中的數(shù)據(jù)對(duì)象:vtkDataObject
vtkPiecewiseFunction
vtkDataSet
vtkImageData
vtkStructuredPoints
vtkImageCanvasSource2D
vtkPointSet
vtkPolyData
vtkStructuredGrid
vtkUnstructuredGrid
vtkRectilinearGridvtkDataSetAttributes
vtkPointData
vtkCellDatavtkFieldDatavtkAttributeData
VTK中的數(shù)據(jù)對(duì)象:45vtkCell
vtkHexahedron
vtkLine
vtkPixel
vtkPolyLine
vtkPolyVertex
vtkPolygon
vtkQuad
vtkTetra
vtkTriangle
vtkTriangleStrip
vtkVertex
vtkVoxel
vtkWedge
vtkPyramid
vtkCell469、要學(xué)生做的事,教職員躬親共做;要學(xué)生學(xué)的知識(shí),教職員躬親共學(xué);要學(xué)生守的規(guī)則,教職員躬親共守。2022/12/22022/12/2Friday,December2,202210、閱讀一切好書(shū)如同和過(guò)去最杰出的人談話。2022/12/22022/12/22022/12/212/2/20222:31:31AM11、一個(gè)好的教師,是一個(gè)懂得心理學(xué)和教育學(xué)的人。2022/12/22022/12/22022/12/2Dec-2202-Dec-2212、要記住,你不僅是教課的教師,也是學(xué)生的教育者,生活的導(dǎo)師和道德的引路人。2022/12/22022/12/22022/12/2Friday,December2,202213、Hewhoseizetherightmoment,istherightman.誰(shuí)把握機(jī)遇,誰(shuí)就心想事成。2022/12/22022/12/22022/12/22022/12/212/2/202214、誰(shuí)要是自己還沒(méi)有發(fā)展培養(yǎng)和教育好,他就不能發(fā)展培養(yǎng)和教育別人。02十二月20222022/12/22022/12/22022/12/215、一年之計(jì),莫如樹(shù)谷;十年之計(jì),莫如樹(shù)木;終身之計(jì),莫如樹(shù)人。十二月222022/12/22022/12/22022/12/212/2/202216、提出一個(gè)問(wèn)題往往比解決一個(gè)更重要。因?yàn)榻鉀Q問(wèn)題也許僅是一個(gè)數(shù)學(xué)上或?qū)嶒?yàn)上的技能而已,而提出新的問(wèn)題,卻需要有創(chuàng)造性的想像力,而且標(biāo)志著科學(xué)的真正進(jìn)步。2022/12/22022/12/202December202217、兒童是中心,教育的措施便圍繞他們而組織起來(lái)。2022/12/22022/12/22022/12/22022/12/2謝謝觀賞
Youmademyday!我們,還在路上……9、要學(xué)生做的事,教職員躬親共做;要學(xué)生學(xué)的知識(shí),教職員躬親47本節(jié)課內(nèi)容VTK:ATutorial,介紹VTK的基本內(nèi)容1WhatisVTK?2VTK圖形模型3VTK可視化模型本節(jié)課內(nèi)容VTK:ATutorial,介紹VTK的基本483.0VTK安裝在,有vtk5.0版已編譯好的安裝文件:VTK.ZIP
把VTK.ZIP解壓到目錄python25\下。(2)VTK的主站點(diǎn)在
可在該站點(diǎn)上下載最新版的源代碼、特定平臺(tái)的二進(jìn)制代碼、例子、數(shù)據(jù)和文檔等。
3.0VTK安裝在,49VTK是幾個(gè)較為廣泛使用的可視化系統(tǒng)之一。AVS是商用系統(tǒng),IBM’sDataExplorer(DX)原先為商用系統(tǒng),目前已轉(zhuǎn)為開(kāi)放源代碼系統(tǒng)并改名為OpenDX.其它還有NAGExplorer4andTemplateGraphicsAmira.VTK是一個(gè)通用可視化系統(tǒng),已被許多大學(xué)和研究機(jī)構(gòu)采用,作為教學(xué)和研究工具。許多公司也在其基礎(chǔ)上開(kāi)發(fā)了各種可視化系統(tǒng),包括醫(yī)學(xué)可視化,體可視化,石油勘探,聲學(xué)系統(tǒng),流體系統(tǒng),有限元分析,表面重構(gòu)等。VTK是幾個(gè)較為廣泛使用的可視化系統(tǒng)之一。AVS是商用503.1WhatisVTK?
開(kāi)放源代碼、可移植(WinTel/Unix)、面向?qū)ο蟮?D計(jì)算機(jī)圖形,可視化,和圖像處理系統(tǒng);以C++語(yǔ)言實(shí)現(xiàn),支持Tcl、Python和Java語(yǔ)言;支持復(fù)雜應(yīng)用程序開(kāi)發(fā),應(yīng)用程序快速原型開(kāi)發(fā);支持多種GUI開(kāi)發(fā)環(huán)境,如Tk、X/Motif、MFC、wxWidgets
。提供數(shù)據(jù)表達(dá)類型,包括無(wú)結(jié)構(gòu)點(diǎn)集,多邊形數(shù)據(jù),圖像,體元,結(jié)構(gòu)格網(wǎng),正交格網(wǎng),以及無(wú)結(jié)構(gòu)格網(wǎng)等.
通過(guò)readers/import以及writers/export和其它程序交換數(shù)據(jù)。提供數(shù)百個(gè)數(shù)據(jù)處理器處理各種數(shù)據(jù),從圖像變換到三角網(wǎng)構(gòu)建.VTK繪制模式支持2D、多邊形、體元和紋理繪制,以及它們的各種組合。3.1WhatisVTK?513.2VTK結(jié)構(gòu)3.2.1VTK在API訪問(wèn)接口上包括兩個(gè)主要部分:C++實(shí)現(xiàn)的核心層自動(dòng)生成的接口層,包括Tcl、Java和Python.3.2VTK結(jié)構(gòu)52C++實(shí)現(xiàn)的核心層:數(shù)據(jù)結(jié)構(gòu)、算法和對(duì)計(jì)算時(shí)間要求高的系統(tǒng)函數(shù)在C++核心層中實(shí)現(xiàn)。核心層中采用對(duì)象工廠和虛擬函數(shù)等提高系統(tǒng)可移植性以及可擴(kuò)展性。VTK在核心層獨(dú)立于任何GUI,不依賴于某一特定的窗口系統(tǒng)。應(yīng)用程序開(kāi)發(fā)者能很方便地把VTK插入到自己開(kāi)發(fā)的系統(tǒng)中。VTK通過(guò)抽象的圖像模型實(shí)現(xiàn)圖形的可移植性。C++實(shí)現(xiàn)的核心層:53
自動(dòng)生成的接口層:核心層提供速度和效率,接口層提供的是靈活和可擴(kuò)展能力。例如使用GUI原型開(kāi)發(fā)工具如Tcl/Tk,Python/Tk,Python/wxPython,或JavaAWT可進(jìn)行專業(yè)應(yīng)用程序的快速開(kāi)發(fā)。自動(dòng)生成的接口層:543.2.2VTK內(nèi)部組成VTK內(nèi)部包括兩個(gè)主要的子系統(tǒng)—圖形模型子系統(tǒng)和可視化管道子系統(tǒng)。(1)圖形模型子系統(tǒng)圖形模型是建立在圖形語(yǔ)言(如OPENGL)基礎(chǔ)上的抽象層,提供跨平臺(tái)的可移植性。在1993年,不同的計(jì)算機(jī)平臺(tái)有各自的圖形語(yǔ)言:
XGLforSun,StarbaseforHewltt-Packard,glforSiliconGraphics.為了實(shí)現(xiàn)圖形的平臺(tái)與設(shè)備無(wú)關(guān),提出了圖形模型.圖形模型中的對(duì)象采用電影工業(yè)中的名稱命名。燈光、相機(jī)、演員和道具是用戶創(chuàng)建場(chǎng)景所使用的類。通過(guò)抽象圖形模型,3D多邊形繪制(lights,cameras,actors)和體繪制以及其它繪制方式就有了一致的訪問(wèn)接口。3.2.2VTK內(nèi)部組成55環(huán)境信息可視化-vtk課件56
繪制窗口和繪制器:可視化具體的數(shù)據(jù)前,必須在計(jì)算機(jī)屏幕上打開(kāi)一個(gè)繪制窗口。vtkRenderWindow是一個(gè)或多個(gè)繪制器在其上進(jìn)行繪制的窗口的抽象基類。直接調(diào)用vtkRenderWindow可以自動(dòng)生成所在平臺(tái)上與設(shè)備相關(guān)的窗口子類。vtkRenderWindow是vtkRenderer對(duì)象的容器對(duì)象。多個(gè)vtkRenderer對(duì)象可以平鋪在一個(gè)vtkRenderWindow中,從而創(chuàng)建復(fù)合的可視化系統(tǒng)。繪制窗口和繪制器:57下面例子把兩個(gè)繪制器放在一個(gè)繪制窗口中。每一個(gè)有不同的背景顏色:fromvtkimport*renWin=vtkRenderWindow()renWin.SetSize(600,300)ren1=vtkRenderer()ren1.SetViewport(0.0,0.0,0.5,1.0)ren1.SetBackground(0.8,0.4,0.2)renWin.AddRenderer(ren1)ren2=vtkRenderer()ren2.SetViewport(0.5,0.0,1.0,1.0)ren2.SetBackground(0.1,0.2,0.4)renWin.AddRenderer(ren2)renWin.Render()運(yùn)行下面例子把兩個(gè)繪制器放在一個(gè)繪制窗口中。每一個(gè)有不同的背景顏58
交互器:一般,我們使用鼠標(biāo)控制場(chǎng)景中的相機(jī)位置和方向,以及其它道具。vtkRenderWindowInteractor提供交互功能。iren=vtkRenderWindowInteractor()iren.SetRenderWindow(renWin)iren.Initialize()iren.Start()交互器:59
道具,映射器,和特性道具是被加到繪制器中創(chuàng)建場(chǎng)景的對(duì)象。vtkProp是所有2D和3D道具的抽象基類,包含可見(jiàn)性、方向、大小和位置信息。道具與映射器及特性對(duì)象關(guān)聯(lián).映射器引用輸入數(shù)據(jù)對(duì)象并知道如何繪制該輸入對(duì)象.特性對(duì)象包含繪制參數(shù),如顏色和材質(zhì)等.
道具,映射器,和特性60
繪制3D幾何數(shù)據(jù)vtkActor是在場(chǎng)景中繪制3D幾何數(shù)據(jù)的vtkProp道具類的子類。演員類對(duì)象自動(dòng)創(chuàng)建缺省的vtkProperty對(duì)象,但要求用戶自己創(chuàng)建vtkMapper子類。根據(jù)幾何特性的不同,從vtkDataSetMapper或vtkPolyDataMapper中選擇一個(gè).如果數(shù)據(jù)是用vtkPolyData表示的,包含點(diǎn),線,和多邊形,則使用vtkPolyDataMapper,否則使用vtkDataSetMapper。繪制3D幾何數(shù)據(jù)61下例創(chuàng)建一個(gè)立方體:cubeData=vtkCubeSource()cubeMapper=vtkPolyDataMapper()cubeMapper.SetInput(cubeData.GetOutput())cubeActor=vtkActor()cubeActor.SetMapper(cubeMapper)Ren1.AddProp(cubeActor)Ren1.ResetCamera()renWin.Render()運(yùn)行由于vtkCubeSource對(duì)象是多邊形數(shù)據(jù),使用vtkPolyDataMapper繪制數(shù)據(jù),ResetCamera()把相機(jī)對(duì)準(zhǔn)數(shù)據(jù)下例創(chuàng)建一個(gè)立方體:62
旋轉(zhuǎn)與改變顏色:cubeActor.RotateX(30.0)cubeActor.RotateY(20.0)cubeActor.GetProperty().SetColor(1.0,0.7,0.7)renWinRender使用演員的GetProperty()訪問(wèn)自動(dòng)創(chuàng)建的特性對(duì)象。
運(yùn)行ch3\cubecolor.py旋轉(zhuǎn)與改變顏色:633D體數(shù)據(jù)繪制vtkImageData是vtkDataSet的子類,可表示1D、2D和3D圖像數(shù)據(jù)。作為vtkDataSet的子類,vtkImageData可用vtkActor表示,并可用vtkDataSetMapper進(jìn)行繪制。在3D下,vtkImageData數(shù)據(jù)被看作體元,相應(yīng)的,它就可用vtkVolume表示,并用vtkVolumeMapper的子類繪制.VTK目前支持三種類型的體繪制—光線跟蹤,2D紋理映射,以及VolumePro圖形卡.3D體數(shù)據(jù)繪制64下例中,首先讀入一個(gè)3D結(jié)構(gòu)數(shù)據(jù),然后使用vtkVolumeTextureMapper2D繪制:negReader=vtkSLCReader()negReader.Set(“neghip.slc”)negMapper=vtkVolumeTextureMapper2D()negMapper.SetInput(negReader.GetOutput())體繪制最困難的是定義轉(zhuǎn)換函數(shù),把標(biāo)量值轉(zhuǎn)成顏色和透明度。negOpacity=vtkPiecewiseFunction()negOpacity.AddPoint(0,0.0)negOpacity.AddPoint(255,0.2)negColor=vtkColorTransferFunction()negColor.AddRGBPoint(64,1.0,0.0,0.0)negColor.AddRGBPoint(128,0.0,0.0,1.0)negColor.AddRGBPoint(196,0.0,1.0,0.0)下例中,首先讀入一個(gè)3D結(jié)構(gòu)數(shù)據(jù),然后使用vtkVolume65
創(chuàng)建體元特性和體元道具:negProperty=vtkVolumeProperty()negProperty.SetColor(negColor)negProperty.SetScalarOpacity(negOpacity)negVolume=vtkVolume()negVolume.SetMapper(negMapper)negVolume.SetProperty(negProperty)ren2.AddProp(negVolume)ren2.ResetCamera()renWin.Render()
運(yùn)行創(chuàng)建體元特性和體元道具:66
幾何與體元的混合:VTK在一個(gè)場(chǎng)景中可以混合多個(gè)演員和體元進(jìn)行繪制。下例,多邊形和體元混合在一起。posReader=vtkPolyDataReader()posReader.Set(“poshipsurface.vtk”)posMapper=vtkPolyDataMapper()posMapper.SetInput(posReader.GetOutput())posActor=vtkActor()posActor.SetMapper(posMapper)ren2.AddProp(posActor)renWin.Render()運(yùn)行幾何與體元的混合:672D數(shù)據(jù)繪制除了3D幾何和體元數(shù)據(jù),VTK能夠可視化2D數(shù)據(jù),如幾何,圖像,和文本。演員,映射器,和特性同樣適用于2D數(shù)據(jù)。下例把2D數(shù)據(jù)和3D數(shù)據(jù)混合繪制。vtkActor2D表示場(chǎng)景中的標(biāo)題,vtkTextMapper繪制文本數(shù)據(jù),vtkActor2D自動(dòng)創(chuàng)建vtkProperty2D對(duì)象。titleMapper=vtkTextMapper()titleMapper.SetInput(“ThisisaPinkCube”)titleMapper.GetTextProperty().SetJustificationToCentered()titleActor=vtkActor2D()titleActor.SetMapper(titleMapper)titleActor.GetProperty().SetColor(1,1,0)pc=titleActor.GetPositionCoordinate()pc.SetCoordinateSystemToNormalizedViewport()Pc.SetValue(0.5,0.92)ren1.AddProp(titleActor)renWin.Render() 運(yùn)行2D數(shù)據(jù)繪制682D數(shù)據(jù)常用于注記,VTK提供了一些對(duì)象,能夠把多個(gè)2D演員和映射器組合成一個(gè)2D演員。例如,vtkScalarBarActor把文本和2D多邊形組合成圖例:scalarBar=vtkScalarBarActor()scalarBar.SetLookupTable(negColor)scalarBar.SetTitle(“Density”)sPC=scalarBar.GetPositionCoordinate()sPC.SetCoordinateSystemToNormalizedViewport()sPC.SetValue(0.8,0.1)ren2.AddProp(scalarBar)renWin.Render()運(yùn)行2D數(shù)據(jù)常用于注記,VTK提供了一些對(duì)象,能夠把多個(gè)2D演69
燈光,相機(jī)VTK應(yīng)用程序不需要顯式創(chuàng)建vtkLight或vtkCamera。如果沒(méi)有創(chuàng)建,系統(tǒng)會(huì)自動(dòng)創(chuàng)建。從繪制器可以修改位置、焦點(diǎn)以及視場(chǎng)等。相機(jī)包含一些方法,通過(guò)它們可調(diào)整位置,旋轉(zhuǎn)等,如Azimuth(),Elevation(),Roll(),Pitch(),andYaw()。cam=ren2.GetActiveCamera()cam.Azimuth(20.0)cam.Elevation(10.0)renWin.Render()運(yùn)行燈光,相機(jī)70燈光缺省是白光,位置和焦點(diǎn)缺省情況下和相機(jī)一致。下例加入第二個(gè)光源,綠色。light=vtkLight()light.SetFocalPoint(0.0,0.0,0.0)light.SetPosition(1.0,0.0,0.0)light.SetColor(0.0,1.0,0.0)light.SetIntensity(0.5)ren2.AddLight(light)renWin.Render()運(yùn)行燈光缺省是白光,位置和焦點(diǎn)缺省情況下和相機(jī)一致。下例加入第二71(2)VTK可視化管道VTK數(shù)據(jù)處理管道把數(shù)據(jù)變換成可由圖形子系統(tǒng)繪制的形式,或變換成其它形式,以待管道的后續(xù)處理。例如,讀入離散點(diǎn),通過(guò)三角化創(chuàng)建多邊形,使用面繪制顯示mesh面等構(gòu)成一個(gè)數(shù)據(jù)處理管道。管道,也叫做可視化網(wǎng)絡(luò),通過(guò)連接處理對(duì)象和數(shù)據(jù)對(duì)象構(gòu)成。數(shù)據(jù)對(duì)象提供對(duì)數(shù)據(jù)的訪問(wèn),處理對(duì)象操作數(shù)據(jù)對(duì)象。在實(shí)現(xiàn)上,連接通過(guò)
SetInput()/GetOutput()方法實(shí)施:aFilter.SetInput(bFilter.GetOutput())Filters創(chuàng)建與它的輸出類型一致的內(nèi)部數(shù)據(jù)對(duì)象。只有輸出與輸入類型匹配的連接能夠成立。上例中,bFilter的輸出類型和aFilter的輸入類型必須一致。類型檢查可在編譯時(shí)或運(yùn)行時(shí)進(jìn)行。(2)VTK可視化管道72環(huán)境信息可視化-vtk課件73環(huán)境信息可視化-vtk課件74環(huán)境信息可視化-vtk課件75一旦管道構(gòu)建起來(lái),F(xiàn)ilters則只有在內(nèi)部狀態(tài)改變了或它的輸入數(shù)據(jù)改變了才能重新執(zhí)行。VTK采用分布式隱含更新方法控制管道的運(yùn)行。每個(gè)對(duì)西那個(gè)管理一個(gè)內(nèi)部時(shí)間標(biāo)記,只有過(guò)時(shí)的對(duì)象才能重新運(yùn)算。一旦管道構(gòu)建起來(lái),F(xiàn)ilters則只有在內(nèi)部狀態(tài)改變了或它的76
數(shù)據(jù)對(duì)象:VTK一般把數(shù)據(jù)表示成場(chǎng)數(shù)據(jù),數(shù)據(jù)集是帶有拓?fù)浜蛶缀谓Y(jié)構(gòu)的數(shù)據(jù)對(duì)象。除了結(jié)構(gòu),數(shù)據(jù)集還附帶有屬性數(shù)據(jù)。屬性數(shù)據(jù)包括:標(biāo)量,矢量,張量,法向,紋理坐標(biāo),以及場(chǎng)數(shù)據(jù)。數(shù)據(jù)對(duì)象:77環(huán)境信息可視化-vtk課件78
處理對(duì)象:VTK提供了數(shù)百個(gè)處理對(duì)象。其中多數(shù)只處理一種數(shù)據(jù)類型(如圖像處理對(duì)象)。一些處理對(duì)象如vtkContourFilter接受一種類型的數(shù)據(jù)輸入,輸出另一種類型的數(shù)據(jù)。處理對(duì)象一般被稱為Filters。VTK把處理對(duì)象分為三類:源處理對(duì)象,過(guò)濾器,和映射器。源處理對(duì)象沒(méi)有VTK數(shù)據(jù)輸入,但產(chǎn)生一到多個(gè)輸出,如讀入器。過(guò)濾器接受一到多個(gè)輸入,產(chǎn)生一到多個(gè)輸出。映射器是管道的終點(diǎn),它或者和圖形系統(tǒng)耦合在一起,或者把數(shù)據(jù)寫到磁盤或另一管道。處理對(duì)象:79例子:讀取數(shù)字化的多邊形數(shù)據(jù),
然后簡(jiǎn)化,用Laplacian光滑減少面噪聲,生成面法線,修飾表面:讀多邊形數(shù)據(jù):Reader=vtkBYUReader()Reader.SetGeometry(“fran.g”)創(chuàng)建管道,由decimator,smoother,和normalgenerator組成。Deci=vtkDecimatePro()Deci.SetInput(reader.GetOutput())Deci.SetTargetReduction(0.9)Deci.PreserveTopologyOn()Smoother=vtkSmoothPolyDataFilter()Smoother.SetInput(deci.GetOutput())例子:80Normals=vtkPolyDataNormals()Normals.SetInput(smoother.GetOutput())Normals.SetFeatureAngle(60)mapper=vtkPolyDataMapper()Mapper.SetInput(normals.GetOutput())fran=vtkActor()Fran.SetMapper(mapper)Fran.GetProperty().SetColor(1,0.49,0.25)ptMask=vtkMaskPoints()ptMask.SetInput(normals.GetOutput())ptMask.SetOnRatio(10)ptMask.RandomModeOn()cone=vtkConeSource()Cone.SetResolution(6)Normals=vtkPolyDataNormals()81Transform=vtkTransform()Transform.Translate(0.5,0.0,0.0)transformF=vtkTransformPolyDataFilter()transformF.SetInput(cone.GetOutput())transformF.SetTransform(transform)Glyph.vtkGlyph3D()Glyph.SetInput(ptMask.GetOutput())Glyph.SetSource(transformF.GetOutput())Glyph.SetVectorModeToUseNormal()Glyph.SetScaleModeToScaleByVector()Glyph.SetScaleFactor(0.004)spikeMapper=vtkPolyDataMapper()spikeMapper.SetInput(glyph.GetOutput())spikeActor=vtkActor()spikeActor.SetMapper(spikeMapper)spikeActor.GetProperty().SetColor(0,.79,.34)Transform=vtkTransform()82ren3=vtkRenderer()renWin2=vtkRenderWindow()renWin2.AddRenderer(ren3)Iren2=vtkRenderWindowInteractor()Iren2.SetRenderWindow(renWin2)Ren3.AddActor(fran)Ren3.Add
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 糧油加工廠出租居間合同
- 汽車美容店裝修監(jiān)理合同
- 二零二五年度辦公室勞動(dòng)合同地址確認(rèn)及員工績(jī)效獎(jiǎng)金協(xié)議
- 裝修分期付款合同須知
- 報(bào)關(guān)合同和銷售合同
- 新勞動(dòng)合同法規(guī)定
- 三農(nóng)村電商行業(yè)監(jiān)管與政策支持方案
- 軟件開(kāi)發(fā)流程與項(xiàng)目管理作業(yè)指導(dǎo)書(shū)
- 居間合同物權(quán)方
- 建筑裝飾裝修工程作業(yè)指導(dǎo)書(shū)
- 歷史-遼寧省協(xié)作體2024-2025學(xué)年度高三上學(xué)期期末考試試題試題和答案
- 2025年銀行安保年度工作計(jì)劃
- 臨床藥師進(jìn)修匯報(bào)總結(jié)
- 2025年浙江嘉興桐鄉(xiāng)市水務(wù)集團(tuán)限公司招聘10人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 食品企業(yè)如何做好蟲(chóng)鼠害防控集
- 環(huán)保工程信息化施工方案
- 狂犬病暴露后預(yù)防處置
- 心律失常性心肌病
- 醫(yī)療器械代表年終總結(jié)
- 內(nèi)審和管理評(píng)審培訓(xùn)課件
- 手印鑒定書(shū)模板
評(píng)論
0/150
提交評(píng)論