Download presentation
Presentation is loading. Please wait.
1
上一节课内容回顾 第十一讲 科学计算可视化系统和工具 可视化系统分类 专用可视化工具 通用可视化系统
2
11.1 可视化系统分类 可视化系统是指一个集成环境,在其支持下,人们可通过直观的手段对复杂数据进行有效的研究.可视化工具则一般只支持某一方面的可视化技术. 可视化软件发展至今,经历了由简单到复杂的演进过程,可以按照这一过程将可视化软件分为三大类:可视化子程序、专用可视化工具和通用可视化系统. 这一划分并不是严格的.前两类可视化软件历史较长,因而技术比较成熟,现有大多数可视化应用都是基于这两类来开发的.通用可视化系统则是发展的方向.
3
11.2 专用可视化工具 NASA Ames FAST IVM VOXEL View/Voxel Lab Data Visulizer SunVision PV-WAVE (1)PLOT3D PLOT3D是为计算流体动力学(CFD)的网格和流体可视化而设计的一个计算机图形程序.PLOT3D提供了85个函数,并提供多个版本适用于各种系统.PLOT3D能处理带有许多网格点的多重网格,而且能生成多种模型,如线框模型和面模型,PLOT3D的输出还可用于动画程序.
4
PV-WAVE 支持用户对数据用VDA方式进行分析。VDA是工程师、科学家和研究人员在理解和使用数据时普遍采用的技术,最常见的是当处理大型数据集和要求快速生成图形时,人们往往借助于数学、统计学、信号处理和图像处理等技术来对数据进行直观分析.VDA技术对于科学发现和工程分析具有不可估量的价值,给人们带来了十分明显的好处,从而促进了生产率的提高,为合作者之间提供了直观交流信息的手段。
5
11.3 通用可视化系统 是一种用于可视化应用构造与运行的支撑环境,故又称应用构造器,它们大多基于数据流机制,拥有一个模块库和一个高层可视编程界面,用户通过该界面从模块库中选取一些适当的算法模块,直观交互地将各模块用数据通道连接起来,构成一个可视化应用的数据流图,然后用户就可以对此流图加以运行和控制,实现其可视化需求. 系统的模块库是可以扩充的,用户可将自己开发的模块转换成系统可接受的形式,并可替换或扩充原有模块库,这样,用户可以采用这些新模块来构造可视化应用程序,故系统可以扩充到各个应用领域,所以我们称之为通用可视化系统,并称之为开放式的.
6
数据流和可视编程界面 数据流:将一个可视化应用划分成许多相互独立的模块。每个模块带有若干数据输入口和若干数据输出口。模块的功能是将输入口的数据加以处理,并从输出口输出。各模块之间依靠数据的传送保持联系,整个可视化应用就可以用模块之间的数据依赖关系图(数据流图)来表示。
7
EVS--在AVS基础上开发成的面向环境的可视化系统
8
11.4 可视化系统开发 一个可视化系统,一般包括: (1)数据组织管理与常用处理功能; (2)丰富的可视化方法; (3)可视化交互技术; (4)易于使用的图形软件界面; (5)二次开发。
9
输入结点(Input): 与GIS连接结点 数据读入结点 … 变换结点(Model): 环境模型结点 Filter结点 Mapper结点 输出结点(Output): 可视化输出结点 文件输出结点 数据流图构造与运行控制模块 脚本语言模块
10
MAYAVI的剖析 DATA Filters Module Render
11
class BaseObject: class VizObject (BaseObject): class Source (VizObject): class DataSource (Source): class VtkDataReader (DataSource) class PLOT3DReader (DataSource) … class Filter (Source): class PolyDataNormals (Filter) class WarpVector (PolyDataNormals) class Module (VizObject): class CutPlaneModule (Module): class SurfaceMap (Module) class Streamlines (Module) class ModuleManager: class DataVizManager: class MayaVi class MayaViTkGUI
12
本节课内容: 第十二讲 环境信息可视化系统 环境信息可视化系统 EVS 环境计算 流场可视化示例 考查作业
13
12.1 EVS可视化步骤 在EVS下环境数据的可视化包括下述六个步骤: 1). 读取、预处理环境数据,剪裁出感兴趣的数据; 2). 用Krige法插值数据生成两维或三维的数据场; 3). 用过滤器处理数据获得研究区域的数据子集, 然后把过滤后的 数据转换成颜色数据; 4). 使用映射和颜色技术把数据显示成:切片、边线、面、等值线、 表面 、台体、 镶嵌体、流线、流带 等; 5). 在三维空间中使用动态旋转、平移、缩放等察看可视化结果; 6). 把视口的图像保存为图像文件.
14
数据预处理 快速的数据预处理功能.
15
Kriging 数据插值
16
Data Filtering 数据过滤形成新的子集
17
Three-Dimensional Viewing
旋转、缩放、平移等
18
Output & Image Production
输出成多种图像格式
19
12.2 EVS 模块库 EVS 按照8个库组织所有的模块: 数据文件相关库: 创建或输入数据 数据集提取库:提取轮廓线等 数据处理算法库:处理数据生成新的数据子集 图像库 动画库 工具库 显示库:流线、Legend、视口等 Cell库:处理由结点构成的拓扑单元数据
20
12.3 直接数据可视化 不通过内插或外推直接绘制--利用镶嵌(装配)技术 2D镶嵌 3D镶嵌
21
镶嵌技术表示矢量场
22
12.4 格网 (1)拓扑单元
23
(2)规则格网
24
(3)正交格网
25
(4)自适应格网
26
(5)三角网
27
12.5 插值方法 Inverse Distance Weighted (IDW) Splining Geostatistical Methods (Kriging)
28
12.6 绘制方法 (1)点/线绘制 (2)面绘制 (3)体绘制 (4)切割和切片 (5)流线
32
环境计算可视化 环境科学与工程+计算+可视化 科学计算+可视化
33
从环境计算可视化的角度,除了可视化的基本技术外,要获得较好的可视化效果,主要依赖于环境模型。需要研究以水、气、沙等为运动载体的各种物质的模型及其可视化方法。如MIKE11是典型的以水为载体的物质运动的模型软件,在可视化上取得了非常好的效果。 水流作用下水面悬浮物的运动
34
水流作用下水面悬浮物的运动 溃坝
35
风场 水流作用下沙的运动
36
水沙组合
37
流场可视化示例
42
总结 第1讲 可视化技术概况 第2讲 PYTHON语言 第3讲 VTK可视化系统 第4讲 数据类型和数据操作 第5讲 二维标量场可视化 第6讲 三维断层标量场数据可视化 第7讲 三维标量场等值面可视化 第8讲 三维标量场体可视化 第9讲 矢量场可视化 第10讲 三维交互技术 第11讲 科学计算可视化系统和工具 第12讲 环境信息可视化系统
43
粒子系统
44
可视化数据的准备
45
VTK中的数据对象 VTK一般把数据表示成场数据,数据集是带有拓扑和几何结构的数据对象。除了结构,数据集还附带有属性数据。属性数据包括:标量,矢量,张量,法向,纹理坐标,以及场数据。
47
VTK中的数组类 vtkDataArray vtkBitArray vtkCharArray vtkDoubleArray vtkFloatArray vtkIdTypeArray vtkIntArray vtkLongArray vtkShortArray vtkUnsignedCharArray vtkUnsignedIntArray vtkUnsignedLongArray vtkUnsignedShortArray vtkVoidArray
48
VTK中的列表类 vtkCollection vtkAssemblyPath vtkAssemblyPaths vtkCullerCollection vtkDataArrayCollection vtkDataObjectCollection vtkDataSetCollection vtkIdListCollection vtkImageReader2Collection vtkImplicitFunctionCollection vtkLightCollection vtkMapperCollection vtkObjectFactoryCollection vtkOverrideInformationCollection vtkPlaneCollection vtkPolyDataCollection vtkPropCollection vtkActor2DCollection vtkActorCollection vtkProp3DCollection vtkVolumeCollection vtkRendererCollection vtkRenderWindowCollection vtkStructuredPointsCollection vtkTransformCollection
49
VTK中的拓扑单元类 vtkCell vtkCell3D vtkConvexPointSet vtkHexahedron vtkPyramid vtkTetra vtkVoxel vtkWedge vtkEmptyCell vtkGenericCell vtkLine vtkPixel vtkPolygon vtkPolyLine vtkPolyVertex vtkQuad vtkTriangle vtkTriangleStrip vtkVertex vtkNonLinearCell vtkExplicitCell vtkQuadraticEdge vtkQuadraticHexahedron vtkQuadraticQuad vtkQuadraticTetra vtkQuadraticTriangle
50
VTK中的数据对象类 vtkDataObject vtkPiecewiseFunction vtkDataSet vtkImageData
vtkStructuredPoints vtkImageCanvasSource2D vtkPointSet vtkPolyData vtkStructuredGrid vtkUnstructuredGrid vtkRectilinearGrid vtkUniformGrid vtkCompositeDataSet vtkHierarchicalDataSet vtkHierarchicalBoxDataSet vtkMultiBlockDataSet vtkFieldData vtkDataSetAttributes vtkPointData vtkCellData
51
VTK中的数据对象关系图
52
环境科学与工程中数据的表示 (1)离散点数据 如采样点数据(2d,3d) (2)结构格网数据 如流体计算网格 (3)规则格网数据 如DEM数据 (4)多边形数据 如地形图数据,硫化床的结构数据
53
#构造坐标数组 #构造几何点集合 #构造拓扑单元数组 (0,1,0) (1,1,0) (0,0,0) (1,0,0)
在VTK中的创建多边形数据对象示例 #构造坐标数组 pcoords = vtkFloatArray() pcoords.SetNumberOfComponents(3) pcoords.SetNumberOfTuples(4) pcoords.SetTuple3(0, 0.0, 0.0, 0.0) pcoords.SetTuple3(1, 1.0, 0.0, 0.0) pcoords.SetTuple3(2, 0.0, 1.0, 0.0) pcoords.SetTuple3(3, 1.0, 1.0, 0.0) #构造几何点集合 points = vtkPoints() points.SetData(pcoords) #构造拓扑单元数组 strips = vtkCellArray() strips.InsertNextCell(4) strips.InsertCellPoint(0) strips.InsertCellPoint(1) strips.InsertCellPoint(2) strips.InsertCellPoint(3) (0,1,0) (1,1,0) (0,0,0) (1,0,0)
54
polydata.GetPointData().SetScalars(temperature)
#构造标量场数据-温度 temperature = vtkIntArray() temperature.SetName(“温度") temperature.InsertNextValue(10) temperature.InsertNextValue(20) temperature.InsertNextValue(30) temperature.InsertNextValue(40) #构造标量场数据-浓度 concentration= vtkDoubleArray() concentration.SetName(“浓度") concentration.InsertNextValue(2.7) concentration.InsertNextValue(4.1) concentration.InsertNextValue(5.3) concentration.InsertNextValue(3.4) #构造多边形数据 polydata = vtkPolyData() polydata.SetPoints(points) polydata.SetStrips(strips) #设置几何点上的标量 polydata.GetPointData().SetScalars(temperature) polydata.GetPointData(). SetScalars(concentration) #保存 writer = vtkPolyDataWriter() writer.SetInput(polydata) writer.SetFileName("poly.vtk") writer.Write()
55
从文件读取离散点 from vtk import * import string file=open(“data.dat”,“r”) #打开数据文件 aLines = file.readlines() #读入数据 aCount = len(aLines) #获取数据行数 file.close() aData=[] #将数据转成浮点数组 for i in range(aCount): aStr = aLines[i] aStr = string.strip(aStr) strCoord = string.split(aStr) for j in range(len(strCoord)): aData.append(float(strCoord[j]))
56
从文件读取离散点2 pcoords = vtkFloatArray() pcoords.SetNumberOfComponents(3) pcoords.SetNumberOfTuples(4) for i in range(len(aData)/4): pcoords.SetTuple3(i, aData[i*4], aData[i*4+1], aData[i*4+2]) points = vtkPoints() points.SetData(pcoords) temperature = vtkDoubleArray() temperature.SetName("temperature") temperature.InsertNextValue(aData[i*4+3]) print aData[i*4+3]
57
从离散点生成三角网 del =vtkDelaunay2D() del.SetInput( polyData) mapMesh =vtkPolyDataMapper() mapMesh.SetInput(del.GetOutput()) meshActor=vtkActor() meshActor.SetMapper( mapMesh )
58
从文件生成DEM数据 from vtk import * import string file=open("dem.dat","r") aLines = file.readlines() aCount = len(aLines) file.close() aData=[] for i in range(aCount): aStr = aLines[i] aStr = string.strip(aStr) strCoord = string.split(aStr) for j in range(len(strCoord)): aData.append(float(strCoord[j]))
59
从文件生成DEM数据2 temperature = vtkDoubleArray() temperature.SetName("temperature") for i in range(len(aData)): temperature.InsertNextValue(aData[i]) sp=vtkStructuredPoints() sp.SetDimensions(3,3,1) sp.SetOrigin(0.0,0.0,0.0) sp.SetSpacing(1.0,1.0,1.0) sp.SetScalarTypeToDouble() sp.SetNumberOfScalarComponents(1) sp.GetPointData(). SetScalars(temperature) writer = vtkStructuredPointsWriter() writer.SetInput(sp) writer.SetFileName("dem.vtk") writer.Write()
60
VTK的文件格式 VTK文件以vtk为扩展名,由五个基本部分组成: (1)文件版本和标识部分,占一行 # vtk DataFile Version x.x 如: # vtk DataFile Version 2.0 (2)文件标题部分,一行,简要介绍文件内容 如:This is a dem file for test (3)文件格式部分,一行,必须是ASCII 或 BINARY 如:ASCII ( 4)数据的几何部分,必须是DATASET开头,后跟数据类型描述关键词 如: DATASET POLYDATA ( 5)数据的属性部分,必须是POINT_DATA或CELL_DATA 开头,后跟点或单元的数目。 如: POINT_DATA 10
62
注意点: 在vtk文件中,数据类型只能是如下几种: bit, unsigned_char, char, unsigned_short, short, unsigned_int, int, unsigned_long, long, float, or double 数组下标是从0开始的 如果在文件中同时有几何部分和属性部分,则几何部分必须出现在属性部分前面。 在属性部分的点或单元的数目必须和几何部分定义的数目一样多
63
vtk文件支持五种几何类型:structured points, structured grid, rectilinear grid, unstructured grid, and polygonal data。 (1) structured points 支持1D, 2D, 和 3D的结构点类型,坐标隐含表示 DATASET STRUCTURED_POINTS DIMENSIONS nx ny nz >= 1 ORIGIN x y z SPACING sx sy sz >0
64
(2) structured grid 支持1D, 2D, 和 3D的结构格网类型,坐标显式表示在POINTS段中: DATASET STRUCTURED_GRID DIMENSIONS nx ny nz >= 1 POINTS n dataType 定义构成结构格网的坐标点 p0x p0y p0z p1x p1y p1z ... p(n-1)x p(n-1)y p(n-1)z
65
(3) Rectilinear Grid 支持1D, 2D, 和 3D的正交格网类型,坐标轴显式表示在COORDINATES段中: DATASET RECTILINEAR_GRID DIMENSIONS nx ny nz >= 1 X_COORDINATES nx dataType x0 x1 ... x(nx-1) Y_COORDINATES ny dataType y0 y1 ... y(ny-1) Z_COORDINATES nz dataType z0 z1 ... z(nz-1)
66
(4) Polygonal Data 支持1D, 2D, 和 3D的多边形类型,一般由POINTS ,VERTICES, LINES, POLYGONS, TRIANGLE_STRIPS几个部分组成。 POINTS段定义多边形的坐标。 VERTICES, LINES, POLYGONS, TRIANGLE_STRIPS是可选段,定义拓扑单元。 DATASET POLYDATA POINTS n dataType p0x p0y p0z p1x p1y p1z ... p(n-1)x p(n-1)y p(n-1)z VERTICES n size numPoints0, i0, j0, k0, ... numPoints1, i1, j1, k1, ... numPointsn-1, in-1, jn-1, kn-1, ...
67
LINES n size numPoints0, i0, j0, k0, ... numPoints1, i1, j1, k1, ... ... numPointsn-1, in-1, jn-1, kn-1, ... POLYGONS n size TRIANGLE_STRIPS n size
68
CELL_TYPES n type0 type1 type2 ... typen-1 (5) Unstructured Grid 表示任意的数据类型: DATASET UNSTRUCTURED_GRID POINTS n dataType p0x p0y p0z p1x p1y p1z ... p(n-1)x p(n-1)y p(n-1)z CELLS n size numPoints0, i, j, k, l, ... numPoints1, i, j, k, l, ... numPoints2, i, j, k, l, ... numPointsn-1, i, j, k, l, ...
69
vtk文件中属性数据的表示: 类型:标量,矢量, 法向量, 纹理坐标, 张量, 和场数据 类别:点属性和拓扑单元属性 (1)标量
SCALARS dataName dataType numComp #(1,1-4) LOOKUP_TABLE tableName #(“default”) s0 s1 ... sn-1
70
(2)Lookup Table LOOKUP_TABLE tableName size r0 g0 b0 a0 r1 g1 b1 a1 ... rsize-1 gsize-1 bsize-1 asize-1 (3)VECTOR VECTORS dataName dataType v0x v0y v0z v1x v1y v1z v(n-1)x v(n-1)y v(n-1)z
71
(4) NORMALS NORMALS dataName dataType n0x n0y n0z n1x n1y n1z ... n(n-1)x n(n-1)y n(n-1)z (5)Texture Coordinates TEXTURE_COORDINATES dataName dim dataType t00 t t0(dim-1) t10 t t1(dim-1) t(n-1)0 t(n-1)1 ... t(n-1)(dim-1)
72
(6) Tensors TENSORS dataName dataType
73
(7) FIELD FIELD dataName numArrays
arrayName0 numComponents numTuples dataType f00 f f0(numComponents-1) f10 f f1(numComponents-1) ... f(numTuples-1)0 f(numTuples-1)1 ... f(numTuples-1)(numComponents-1) arrayName1 numComponents numTuples dataType arrayName(numArrays-1) numComponents numTuples dataType
74
实例1: # vtk DataFile Version 2.0 Cube example ASCII DATASET POLYDATA POINTS 8 float POLYGONS 6 30 CELL_DATA 6 SCALARS cell_scalars int 1 LOOKUP_TABLE default 1 2 3 4 5 NORMALS cell_normals float 0 0 -1 0 0 1 0 -1 0 0 1 0 -1 0 0 1 0 0 FIELD FieldData 2 cellIds 1 6 int faceAttributes 2 6 float POINT_DATA 8 SCALARS sample_scalars float 1 LOOKUP_TABLE my_table 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 LOOKUP_TABLE my_table 8
75
DATASET STRUCTURED_POINTS DIMENSIONS 3 4 6 ASPECT_RATIO 1 1 1
实例2: # vtk DataFile Version 2.0 Volume example ASCII DATASET STRUCTURED_POINTS DIMENSIONS 3 4 6 ASPECT_RATIO 1 1 1 ORIGIN 0 0 0 POINT_DATA 72 SCALARS volume_scalars char 1 LOOKUP_TABLE default
76
实例3: # vtk DataFile Version 2.0 Unstructured Grid Example ASCII DATASET UNSTRUCTURED_GRID POINTS 27 float CELLS 11 60 1 24 CELL_TYPES 11 12 10 7 6 9 5 3 1 POINT_DATA 27 SCALARS scalars float 1 LOOKUP_TABLE default VECTORS vectors float
78
class VtkData(pyvtk.common.Common)
| ======= | | Represents VTK file that has four relevant parts: | header - string up to length 256 | format - string: ascii | binary | DataSet - StructuredPoints | StructuredGrid | UnstructuredGrid | | RectilinearGrid | PolyData | Data PointData | CellData | Usage: | | v = VtkData(<DataSet instance> [,<header string>,<Data instances>,..]) | v.tofile(filename, format = 'ascii') - save VTK data to file. | DataSet | StructuredPoints(<3-sequence of dimensions> | [,<3-sequence of origin> [, <3-sequence of spacing>]]) | StructuredGrid(<3-sequence of dimensions>, | <sequence of 3-sequences of points>)
79
| UnstructuredGrid(<sequence of 3-sequences of points>
| [,<cell> = <sequence of (sequences of) integers>]) | cell - vertex | poly_vertex | line | poly_line | triangle | | triangle_strip | polygon | pixel | quad | tetra | | voxel | hexahedron | wedge | pyramid | RectilinearGrid([x = <sequence of x-coordinates>], | [y = <sequence of y-coordinates>], | [z = <sequence of z-coordinates>]) | PolyData(<sequence of 3-sequences of points>, | [vertices = <sequence of (sequences of) integers>], | [lines = <sequence of (sequences of) integers>], | [polygons = <sequence of (sequences of) integers>], | [triangle_strips = <sequence of (sequences of) integers>]) | | Data | ==== | PointData | CellData ([<DataSetAttr instances>]) - construct Data instanc | DataSetAttr | =========== | DataSetAttr - Scalars | ColorScalars | LookupTable | Vectors | | Normals | TextureCoordinates | Tensors | Field | Scalars(<sequence of scalars> [,name[, lookup_table]])
80
| ColorScalars(<sequence of scalar sequences> [,name])
| LookupTable(<sequence of 4-sequences> [,name]) | Vectors(<sequence of 3-sequences> [,name]) | Normals(<sequence of 3-sequences> [,name]) | TextureCoordinates(<sequence of (1,2, or 3)-sequences> [,name]) | Tensors(<sequence of (3x3)-sequences> [,name]) | Field([name,] [arrayname_1 = sequence of n_1-sequences, ... | arrayname_m = sequence of n_m-sequences,]) | where len(array_1) == .. == len(array_m) must hold. | | Methods defined here: | __init__(self, structure, *args) | tofile(self, filename, format='ascii') |
81
celldata = CellData(\ Scalars([0,1,2,3,4,5], name='cell_scalars'), Normals([[0,0,-1],[0,0,1],[0,-1,0], [0,1,0],[-1,0,0],[1,0,0]], name='cell_normals'), Field('FieldData', cellIds=[[0],[1],[2],[3],[4],[5]], faceAttributes=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6]])) vtk = VtkData(structure,pointdata,celldata) vtk.tofile('example1','ascii') vtk.tofile('example1b','binary') #!/usr/bin/env python import sys sys.path = ['..']+sys.path if sys.version[:3]=='1.5': from lib152 import * else: from lib import * #from pyvtk import * structure = PolyData(points=[[0,0,0],[1,0,0],[1,1,0],[0,1,0], [0,0,1],[1,0,1],[1,1,1],[0,1,1]], polygons=[[0,1,2,3],[4,5,6,7],[0,1,5,4], [2,3,7,6],[0,4,7,3],[1,2,6,5]]) pointdata = PointData(\ Scalars([0,1,2,3,4,5,6,7], name='sample_scalars', lookup_table='my_table'), LookupTable([[0,0,0,1],[1,0,0,1],[0,1,0,1],[1,1,0,1], [0,0,1,1],[1,0,1,1],[0,1,1,1],[1,1,1,1]], name='my_table'))
82
#!/usr/bin/env python import sys sys.path = ['..']+sys.path if sys.version[:3]=='1.5': from lib152 import * else: from lib import * #from pyvtk import * vtk = VtkData(StructuredPoints([3,4,6]), PointData(Scalars([0,0,0,0,0,0,0,0,0,0,0,0, 0,5,10,15,20,25,25,20,15,10,5,0, 0,10,20,30,40,50,50,40,30,20,10,0, 0,0,0,0,0,0,0,0,0,0,0,0 ]))) vtk.tofile('example2') vtk.tofile('example2b','binary')
83
#!/usr/bin/env python import sys sys.path = ['..']+sys.path if sys.version[:3]=='1.5': from lib152 import * else: from lib import * #from pyvtk import * points = [[0,0,0],[1,0,0],[2,0,0],[0,1,0],[1,1,0],[2,1,0], [0,0,1],[1,0,1],[2,0,1],[0,1,1],[1,1,1],[2,1,1], [0,1,2],[1,1,2],[2,1,2],[0,1,3],[1,1,3],[2,1,3], [0,1,4],[1,1,4],[2,1,4],[0,1,5],[1,1,5],[2,1,5], [0,1,6],[1,1,6],[2,1,6] ] vectors = [[1,0,0],[1,1,0],[0,2,0],[1,0,0],[1,1,0],[0,2,0], [1,0,0],[1,1,0],[0,2,0],[1,0,0],[1,1,0],[0,2,0], [0,0,1],[0,0,1],[0,0,1],[0,0,1],[0,0,1],[0,0,1], [0,0,1],[0,0,1],[0,0,1] vtk = VtkData(\ UnstructuredGrid(points, hexahedron=[[0,1,4,3,6,7,10,9], [1,2,5,4,7,8,11,10]], tetra=[[6,10,9,12], [5,11,10,14]], polygon=[15,16,17,14,13,12], triangle_strip=[18,15,19,16,20,17], quad=[22,23,20,19], triangle=[[21,22,18], [22,19,18]], line=[26,25], vertex=[24] ), PointData(Vectors(vectors),Scalars(range(27))), 'Unstructured Grid Example' ) vtk.tofile('example3') vtk.tofile('example3b','binary')
84
考查作业: 1 编写两个程序a,b a: 打开立体显示, StereoRenderOn ()
设置成红蓝立体 SetStereoTypeToRedBlue () 参考第10讲例子:stereo1_2.py b: 关闭立体显示, StereoRenderOff () 2 a 使用缺省交互模式 b 使用vtkInteractorStyleTerrain替换缺省交互模式 参考第10讲例子:TestInteractorStyleTerrain_2.py 3 a中: 读入提供的三维标量场数据RectGrid.vtk, 生成等值面的可视化 要求:等值面的标量值为任3个 参考第10讲例子: iso-plane2.py
85
(1)读入文件Plot3D文件combxyz.bin/ combq.bin
pl3d = vtkPLOT3DReader() pl3d.SetXYZFileName("./combxyz.bin") pl3d.SetQFileName(“./combq.bin”) (2)创建2个绘制器renb1, renb2 renb1: 使用vtkPlaneWidget三维交互对象和vtkProbeFilter 生成三维标量场的探测器面,在探测器面上用 vtkContourFilter生成等值线,等值值的个数自定。 参考第10讲例子:ProbingWithPlaneWidget_2.py 第5讲例子: 5-1-iso2.py renb2: 使用vtkLineWidget三维交互对象生成动态交互的直线段,并用它作为vtkStreamLine的流线生成的种子点的来源生 成流线。 参考第10讲例子: StreamlinesWithLineWidget_2.py 第9讲例子: streamline.py
86
谢谢
Similar presentations