上一节课内容回顾 第十一讲 科学计算可视化系统和工具 可视化系统分类 专用可视化工具 通用可视化系统.

Slides:



Advertisements
Similar presentations
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Advertisements

6. 6 Overloading methods and constructors 6
基本概論 Basic concepts.
第 11 章 溫度與理想氣體.
Introduction 基本概念 授課老師:蕭志明
图表题专项训练.
四資二甲 第三週作業 物件導向程式設計.
上一节课内容回顾 三维交互技术 10.1 三维交互工具 头盔式显示器、立体眼镜、数据手套 10.2 三维交互算法
算法设计与分析 Algorithm Design and Analysis
上一节课内容回顾 VTK: A Tutorial, 介绍VTK的基本内容 1 What is VTK? 2 VTK图形模型
上一节课内容回顾 第八讲 三维标量场体可视化 体绘制与面绘制的比较 体光照模型 体光线跟踪法 体单元投影法 三维扫描变换
程序设计思想与方法入门篇 庄天红.
補充: Input from a text file
上一节课内容回顾 2.1 Python概要 2.2 Python 快速入门
程設一.
深圳市威富集团 2010年度院校招聘公告.
第二章 JAVA语言基础.
九十八學年度水土保持學系 碩士在職專班 專題討論(四) 9375
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
CH2 開發環境介紹 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
控制流程 邏輯判斷 迴圈控制.
第二章 C# 基础知识.
Visual Basic 程序设计 第12章文件处理
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
范洪源 臺灣師範大學數學系 MATLAB 基本功能介紹 范洪源 臺灣師範大學數學系.
第六章 运行时存储空间的组织和管理 术语 本章内容 讨论一个活动记录中的数据布局 程序执行过程中,所有活动记录的组织方式 过程的活动
課程名稱:資料庫系統 授課老師:李春雄 博士
第八章 Illumination and Shading
數學與電腦 的初相識 汪群超 個人網址: 變有不可者三,有不可不變者三: 能力未至不可變也、 學識未敷不得變也、 功侯未到不能變也。
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
工业机器人技术基础及应用 主讲人:顾老师
黃聰明 國立臺灣師範大學數學系 MATLAB 基本功能介紹 黃聰明 國立臺灣師範大學數學系
C语言 程序设计基础与试验 刘新国、2012年秋.
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
上一节课内容回顾 4.1 可视化数据类型 4.2 科学数据管理 4.3 科学数据格式 4.4 图形图像数据格式 4.5 VTK中的数据表示.
向量資料結構 (vector data structure)
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
Java lab3.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
PYRAMID WITH THREE POINTS
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
OOP6 結構Struct 黃兆武.
第二章Java基本程序设计.
第1章 绪论 2019/4/16.
3.5 Region Filling Region Filling is a process of “coloring in” a definite image area or region. 2019/4/19.
Java變數 2014/6/24.
MATLAB 程式設計入門篇 初探MATLAB
SAP Query 建立User Group (SQ03) 建立Infoset (SQ02)
今天, AC 你 了吗? 2019/4/21.
保留字與識別字.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
資料結構簡介 綠園.
第二章 类型、对象、运算符和表达式.
第二章 基本数据类型 ——数据的表示.
Review 1~3.
第六章 类属B树索引技术 对基于树的索引方法给出一种通用算法。该算法是建立在类属B树的概念之上开发的。它将类型系统开放,使系统能支持用户自定义的数据类型、函数和某些特殊的查询谓词的集合。并且,将新的数据类型、函数、查询谓词等登记到数据库管理系统中,
本节内容 指针类型.
PYRAMID WITH FOUR POINTS
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
第2章 Java语言基础.
Introduction to Computer Security and Cryptography
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
C++程序语言设计 Chapter 14: Templates.
地理資料 包含兩部分 地理位置 表明這個地理資料的位置在何處。地理資料為空間資料的一種,因此必須對空間中的位置加以標定 屬性
第二章 Java基础语法 北京传智播客教育
C语言程序设计 第13章 文件操作.
第八章 异步电动机.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Presentation transcript:

上一节课内容回顾 第十一讲 科学计算可视化系统和工具 可视化系统分类 专用可视化工具 通用可视化系统

11.1 可视化系统分类 可视化系统是指一个集成环境,在其支持下,人们可通过直观的手段对复杂数据进行有效的研究.可视化工具则一般只支持某一方面的可视化技术. 可视化软件发展至今,经历了由简单到复杂的演进过程,可以按照这一过程将可视化软件分为三大类:可视化子程序、专用可视化工具和通用可视化系统. 这一划分并不是严格的.前两类可视化软件历史较长,因而技术比较成熟,现有大多数可视化应用都是基于这两类来开发的.通用可视化系统则是发展的方向.

11.2 专用可视化工具 NASA Ames FAST IVM VOXEL View/Voxel Lab Data Visulizer SunVision PV-WAVE (1)PLOT3D PLOT3D是为计算流体动力学(CFD)的网格和流体可视化而设计的一个计算机图形程序.PLOT3D提供了85个函数,并提供多个版本适用于各种系统.PLOT3D能处理带有许多网格点的多重网格,而且能生成多种模型,如线框模型和面模型,PLOT3D的输出还可用于动画程序.

11.2.1 PV-WAVE 支持用户对数据用VDA方式进行分析。VDA是工程师、科学家和研究人员在理解和使用数据时普遍采用的技术,最常见的是当处理大型数据集和要求快速生成图形时,人们往往借助于数学、统计学、信号处理和图像处理等技术来对数据进行直观分析.VDA技术对于科学发现和工程分析具有不可估量的价值,给人们带来了十分明显的好处,从而促进了生产率的提高,为合作者之间提供了直观交流信息的手段。

11.3 通用可视化系统 是一种用于可视化应用构造与运行的支撑环境,故又称应用构造器,它们大多基于数据流机制,拥有一个模块库和一个高层可视编程界面,用户通过该界面从模块库中选取一些适当的算法模块,直观交互地将各模块用数据通道连接起来,构成一个可视化应用的数据流图,然后用户就可以对此流图加以运行和控制,实现其可视化需求. 系统的模块库是可以扩充的,用户可将自己开发的模块转换成系统可接受的形式,并可替换或扩充原有模块库,这样,用户可以采用这些新模块来构造可视化应用程序,故系统可以扩充到各个应用领域,所以我们称之为通用可视化系统,并称之为开放式的.

11.3.1 数据流和可视编程界面 数据流:将一个可视化应用划分成许多相互独立的模块。每个模块带有若干数据输入口和若干数据输出口。模块的功能是将输入口的数据加以处理,并从输出口输出。各模块之间依靠数据的传送保持联系,整个可视化应用就可以用模块之间的数据依赖关系图(数据流图)来表示。

EVS--在AVS基础上开发成的面向环境的可视化系统

11.4 可视化系统开发 一个可视化系统,一般包括: (1)数据组织管理与常用处理功能; (2)丰富的可视化方法; (3)可视化交互技术; (4)易于使用的图形软件界面; (5)二次开发。

输入结点(Input): 与GIS连接结点 数据读入结点 … 变换结点(Model): 环境模型结点 Filter结点 Mapper结点 输出结点(Output): 可视化输出结点 文件输出结点 数据流图构造与运行控制模块 脚本语言模块

MAYAVI的剖析 DATA Filters Module Render

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

本节课内容: 第十二讲 环境信息可视化系统 环境信息可视化系统 EVS 环境计算 流场可视化示例 考查作业

12.1 EVS可视化步骤 在EVS下环境数据的可视化包括下述六个步骤: 1). 读取、预处理环境数据,剪裁出感兴趣的数据; 2). 用Krige法插值数据生成两维或三维的数据场; 3). 用过滤器处理数据获得研究区域的数据子集, 然后把过滤后的 数据转换成颜色数据; 4). 使用映射和颜色技术把数据显示成:切片、边线、面、等值线、 表面 、台体、 镶嵌体、流线、流带 等; 5). 在三维空间中使用动态旋转、平移、缩放等察看可视化结果; 6). 把视口的图像保存为图像文件.

数据预处理 快速的数据预处理功能.

Kriging 数据插值

Data Filtering 数据过滤形成新的子集

Three-Dimensional Viewing 旋转、缩放、平移等

Output & Image Production 输出成多种图像格式

12.2 EVS 模块库 EVS 按照8个库组织所有的模块: 数据文件相关库: 创建或输入数据 数据集提取库:提取轮廓线等 数据处理算法库:处理数据生成新的数据子集 图像库 动画库 工具库 显示库:流线、Legend、视口等 Cell库:处理由结点构成的拓扑单元数据

12.3 直接数据可视化 不通过内插或外推直接绘制--利用镶嵌(装配)技术 2D镶嵌 3D镶嵌

镶嵌技术表示矢量场

12.4 格网 (1)拓扑单元

(2)规则格网

(3)正交格网

(4)自适应格网

(5)三角网

12.5 插值方法 Inverse Distance Weighted (IDW) Splining Geostatistical Methods (Kriging)

12.6 绘制方法 (1)点/线绘制 (2)面绘制 (3)体绘制 (4)切割和切片 (5)流线

环境计算可视化 环境科学与工程+计算+可视化 科学计算+可视化

从环境计算可视化的角度,除了可视化的基本技术外,要获得较好的可视化效果,主要依赖于环境模型。需要研究以水、气、沙等为运动载体的各种物质的模型及其可视化方法。如MIKE11是典型的以水为载体的物质运动的模型软件,在可视化上取得了非常好的效果。 水流作用下水面悬浮物的运动

水流作用下水面悬浮物的运动 溃坝

风场 水流作用下沙的运动

水沙组合

流场可视化示例

总结 第1讲 可视化技术概况 第2讲 PYTHON语言 第3讲 VTK可视化系统 第4讲 数据类型和数据操作 第5讲 二维标量场可视化 第6讲 三维断层标量场数据可视化 第7讲 三维标量场等值面可视化 第8讲 三维标量场体可视化 第9讲 矢量场可视化 第10讲 三维交互技术 第11讲 科学计算可视化系统和工具 第12讲 环境信息可视化系统

粒子系统

可视化数据的准备

VTK中的数据对象 VTK一般把数据表示成场数据,数据集是带有拓扑和几何结构的数据对象。除了结构,数据集还附带有属性数据。属性数据包括:标量,矢量,张量,法向,纹理坐标,以及场数据。

VTK中的数组类 vtkDataArray vtkBitArray vtkCharArray vtkDoubleArray vtkFloatArray vtkIdTypeArray vtkIntArray vtkLongArray vtkShortArray vtkUnsignedCharArray vtkUnsignedIntArray vtkUnsignedLongArray vtkUnsignedShortArray vtkVoidArray

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

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

VTK中的数据对象类 vtkDataObject vtkPiecewiseFunction vtkDataSet vtkImageData vtkStructuredPoints vtkImageCanvasSource2D vtkPointSet vtkPolyData vtkStructuredGrid vtkUnstructuredGrid vtkRectilinearGrid vtkUniformGrid vtkCompositeDataSet vtkHierarchicalDataSet vtkHierarchicalBoxDataSet vtkMultiBlockDataSet vtkFieldData vtkDataSetAttributes vtkPointData vtkCellData

VTK中的数据对象关系图

环境科学与工程中数据的表示 (1)离散点数据 如采样点数据(2d,3d) (2)结构格网数据 如流体计算网格 (3)规则格网数据 如DEM数据 (4)多边形数据 如地形图数据,硫化床的结构数据

#构造坐标数组 #构造几何点集合 #构造拓扑单元数组 (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)

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

从文件读取离散点 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]))

从文件读取离散点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]

从离散点生成三角网 del =vtkDelaunay2D() del.SetInput( polyData) mapMesh =vtkPolyDataMapper() mapMesh.SetInput(del.GetOutput()) meshActor=vtkActor() meshActor.SetMapper( mapMesh )

从文件生成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]))

从文件生成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()

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

注意点: 在vtk文件中,数据类型只能是如下几种: bit, unsigned_char, char, unsigned_short, short, unsigned_int, int, unsigned_long, long, float, or double 数组下标是从0开始的 如果在文件中同时有几何部分和属性部分,则几何部分必须出现在属性部分前面。 在属性部分的点或单元的数目必须和几何部分定义的数目一样多

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

(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

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

(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, ...

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

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, ...

vtk文件中属性数据的表示: 类型:标量,矢量, 法向量, 纹理坐标, 张量, 和场数据 类别:点属性和拓扑单元属性 (1)标量 SCALARS dataName dataType numComp #(1,1-4) LOOKUP_TABLE tableName #(“default”) s0 s1 ... sn-1

(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

(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 t01 ... t0(dim-1) t10 t11 ... t1(dim-1) t(n-1)0 t(n-1)1 ... t(n-1)(dim-1)

(6) Tensors TENSORS dataName dataType

(7) FIELD FIELD dataName numArrays arrayName0 numComponents numTuples dataType f00 f01 ... f0(numComponents-1) f10 f11 ... 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

实例1: # vtk DataFile Version 2.0 Cube example ASCII DATASET POLYDATA POINTS 8 float 0.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 POLYGONS 6 30 4 0 1 2 3 4 4 5 6 7 4 0 1 5 4 4 2 3 7 6 4 0 4 7 3 4 1 2 6 5 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 0 1 2 3 4 5 faceAttributes 2 6 float 0.0 1.0 1.0 2.0 2.0 3.0 3.0 4.0 4.0 5.0 5.0 6.0 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 0.0 0.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

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

实例3: # vtk DataFile Version 2.0 Unstructured Grid Example ASCII DATASET UNSTRUCTURED_GRID POINTS 27 float 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 CELLS 11 60 8 0 1 4 3 6 7 10 9 8 1 2 5 4 7 8 11 10 4 6 10 9 12 4 5 11 10 14 6 15 16 17 14 13 12 6 18 15 19 16 20 17 4 22 23 20 19 3 21 22 18 3 22 19 18 2 26 25 1 24 CELL_TYPES 11 12 10 7 6 9 5 3 1 POINT_DATA 27 SCALARS scalars float 1 LOOKUP_TABLE default 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 VECTORS vectors float 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

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

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

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

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

#!/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')

#!/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')

考查作业: 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

(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

谢谢