第05章-可视化技术(4)

【译者:这个系列教程是以Kitware公司出版的《VTK User’s Guide -11th edition》一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容。敬请期待^_^。欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!】

【本小节内容对应原书的第112页至第117页】

5.3 规则网格可视化

规则网格在拓扑结构上规则,而几何上是不规则的,如图3-2所示。规则网格常被用来进行数据分析(如流体动力学计算)。规则网格vtkStructuredGrid数据集主要有六面体(vtkHexahedral)单元或者是四边形(vtkQuad)单元组成。

手动创建vtkStructedGrid

创建规则网格需要指定网格的维数(定义拓扑结构)和定义x-y-z坐标的vtkPoints对象(定义几何结构)。下面代码改自VTK/Examples/DataManiulation/Cxx/SGrid.cxx。

vtkPoints points

points InsertPoint 0 0.0 0.0 0.0

…etc…

vtkStructedGrid sgrid

sgrid SetDimensions 13 11 11

sgrid SetPoints points

主要vtkPoints对象中点的个数要与网格i,j和k三个方向的维数乘积保持一致。

提取计算平面

大多数情况下规则网格由接收vtkDataSet类型输入的filter来处理(见89页“可视化技术”)。而直接接收vtkStructuredGrid类型输入的其中一个filter是vtkStructuredGridGeometryFilter。该Filter根据其Extent变量值来提取网格中的局部点、线段或者平面(Extent是一个描述区域的六维向量( , ))。

下例中我们读取了一个规则网格数据,提取其中的三个平面,并利用相关的向量数据对平面进行Warp处理(代码取自VTK/Examples/VisualizationAlgorithms/Tcl/warpComb.tcl)。

vtkPLOT3DReader pl3d

pl3d SetXYZFileName "$VTK_DATA_ROOT/Data/combxyz.bin"

pl3d SetQFileName "$VTK_DATA_ROOT/Data/combq.bin"

pl3d SetScalarFunctionNumber 100

pl3d SetVectorFunctionNumber 202

pl3d Update

vtkStructuredGridGeometryFilter plane

plane SetInputConnection [pl3d GetOutputPort]

plane SetExtent 10 10 1 100 1 100

vtkStructuredGridGeometryFilter plane2

plane2 SetInputConnection [pl3d GetOutputPort]

plane2 SetExtent 30 30 1 100 1 100

vtkStructuredGridGeometryFilter plane3

plane3 SetInputConnection [pl3d GetOutputPort]

plane3 SetExtent 45 45 1 100 1 100

vtkAppendPolyData appendF

appendF AddInputConnection [plane GetOutputPort]

appendF AddInputConnection [plane2 GetOutputPort]

appendF AddInputConnection [plane3 GetOutputPort]

vtkWarpScalar warp

warp SetInputConnection [appendF GetOutputPort]

warp UseNormalOn

warp SetNormal 1.0 0.0 0.0

warp SetScaleFactor 2.5

vtkPolyDataNormals normals

normals SetInputConnection [warp GetOutputPort]

normals SetFeatureAngle 60

vtkPolyDataMapper planeMapper

planeMapper SetInputConnection [normals GetOutputPort]

evalplaneMapper SetScalarRange [[pl3d GetOutput] GetScalarRange]

vtkActor planeActor

planeActor SetMapper planeMapper

规则网格数据降采样

如图像数据一样,规则网格数据也可以进行降采样(见105页“图像数据降采样”)。vtkExtractGrid用来执行数据降采样和提取。

vtkPLOT3DReader pl3d

pl3d SetXYZFileName "$VTK_DATA_ROOT/Data/combxyz.bin"

pl3d SetQFileName "$VTK_DATA_ROOT/Data/combq.bin"

pl3d SetScalarFunctionNumber 100

pl3d SetVectorFunctionNumber 202

pl3d Update

vtkExtractGrid extract

extract SetInputConnection [pl3d GetOutputPort]

extract SetVOI 30 30 -1000 1000 -1000 1000

extract SetSampleRate 1 2 3

extract IncludeBoundaryOn

在该例子中初始规则网格(维数为57X33X25)按照(1,2,3)的采样率进行采样,生成一个维数(1,17,9)的子集。函数IncludeBoundaryOn()保证了在没有选择边界的采样操作下也将边界提取出来。

5.4 线性网格可视化

线性网格在拓扑上规则,但是在几何上半规则(如图3-2(b))。线性网格也常用于数值分析。vtkRectilinearGrid由体素(vtkVoxel)或者像素(vtkPixel)单元组成。

手动创建vtkRectlinearGrid

线性网格创建需要指定网格维数定义网格拓扑,以及三个标量数组定义x-y-z三个方向坐标来定义几何。下面代码改自VTK/Examples/DataManipulation/Cxx/RGrid.cxx。

vtkFloatArray *xCoords = vtkFloatArray::New();

for (i=0;i<47; i++) xCoords->InsertNextValue(x[i]);

vtkFloatArray*yCoords = vtkFloatArray::New();

for (i=0;i<33; i++) yCoords->InsertNextValue(y[i]);

vtkFloatArray *zCoords = vtkFloatArray::New();

for (i=0;i<44; i++) zCoords->InsertNextValue(z[i]);

vtkRectilinearGrid *rgrid =vtkRectilinearGrid::New();

rgrid->SetDimensions(47,33,44);

rgrid->SetXCoordinates(xCoords);

rgrid->SetYCoordinates(yCoords);

rgrid->SetZCoordinates(zCoords);

确保x,y,z三个方向的标量个数要与拓扑i,j,k三个方向维数保持一致。

提取计算平面

大多数情况下线性网格由接收vtkDataSet类型输入的Filter来处理(见89页“可视化技术”)。而直接接收vtkRectilinearGrid类型输入的其中一个Filter是vtkRectilinearGridGeometryFilter。该Filter根据其Extent变量值来提取网格中的局部点、线段或者平面(Extent是一个描述区域的六维向量( , ))。

下面例子还是紧接上面代码VTK/Examples/DataManipulation/Cxx/RGrid.cxx,我们如下提取一个平面:

vtkRectilinearGridGeometryFilter *plane =

vtkRectilinearGridGeometryFilter::New();

plane->SetInput(rgrid);

plane->SetExtent(0,46, 16,16, 0,43);

5.5 不规则网格可视化

不规则网格无论在拓扑上还是几何上都是不规则的(如图3-2(f))。不规则网格常用来进行数值分析(如有限元分析)。任何一中单元类型都可以用来表示不规则网格。

手动创建vtkUnstructuredGrid

不规则网格定义是通过vtkPoints来定义几何,通过插入单元来定义拓扑。(下面代码取自VTK/Examples/DataManipulation/Tcl/BuildUGrid.tcl.)

vtkPoints tetraPoints

tetraPoints SetNumberOfPoints 4

tetraPoints InsertPoint 0 0 0 0

tetraPoints InsertPoint 1 1 0 0

tetraPoints InsertPoint 2 .5 1 0

tetraPoints InsertPoint 3 .5 .5 1

vtkTetra aTetra

[aTetra GetPointIds] SetId 0 0

[aTetra GetPointIds] SetId 1 1

[aTetra GetPointIds] SetId 2 2

[aTetra GetPointIds] SetId 3 3

vtkUnstructuredGrid aTetraGrid

aTetraGrid Allocate 1 1

aTetraGrid InsertNextCell [aTetra GetCellType] [aTetra GetPointIds]

aTetraGrid SetPoints tetraPoints

…insertother cells if any…

在为vtkUnstructuredGrid实例插入单元数据前,必须先执行Allocate()函数来分配空间。该函数的两个参数分别表示初始分配的数据空间大小,和需要额外内存时扩展的内存空间大小。一般情况大比较大的值会有较好的效果(因为需要较少的内存重分配操作)。

提取局部网格

大部分情况下,不规则网格由接收vtkDataSet类型输入的Filter处理(见89页“可视化技术”)。直接接收vtkUnstructuredGrid类型输入的其中一个Filter是vtkExtractUnstructuredGrid。这个filter根据指定的点ids,单元ids和几何边界来提取局部网格(Extent参数定义一个包围盒)。下例代码取自VTK/Examples/VisualizationAlgorithms/Tcl/ExtractUGrid.tcl。

vtkDataSetReader reader

reader SetFileName "$VTK_DATA_ROOT/Data/blow.vtk"

reader SetScalarsName "thickness9"

reader SetVectorsName "displacement9"

vtkCastToConcrete castToUnstructuredGrid

castToUnstructuredGrid SetInputConnection [reader GetOutputPort]

vtkWarpVector warp

warp SetInput [castToUnstructuredGrid GetUnstructuredGridOutput]

vtkConnectivityFilter connect

connect SetInputConnection [warp GetOutputPort]

connect SetExtractionModeToSpecifiedRegions

connect AddSpecifiedRegion 0

connect AddSpecifiedRegion 1

vtkDataSetMapper moldMapper

moldMapper SetInputConnection [reader GetOutputPort]

moldMapper ScalarVisibilityOff

vtkActor moldActor

moldActorSetMapper moldMapper

[moldActor GetProperty] SetColor .2 .2 .2

[moldActor GetProperty] SetRepresentationToWireframe

vtkConnectivityFilter connect2

connect2 SetInputConnection [warp GetOutputPort]

connect2 SetExtractionModeToSpecifiedRegions

connect2 AddSpecifiedRegion 2

vtkExtractUnstructuredGrid extractGrid

extractGrid SetInputConnection [connect2 GetOutputPort]

extractGrid CellClippingOn

extractGrid SetCellMinimum 0

extractGrid SetCellMaximum 23

vtkGeometryFilter parison

parison SetInputConnection [extractGrid GetOutputPort]

vtkPolyDataNormals normals2

normals2 SetInputConnection [parison GetOutputPort]

normals2 SetFeatureAngle 60

vtkLookupTable lut

lut SetHueRange 0.0 0.66667

vtkPolyDataMapper parisonMapper

parisonMapper SetInputConnection [normals2 GetOutputPort]

parisonMapper SetLookupTable lut

parisonMapper SetScalarRange 0.12 1.0

vtkActor parisonActor

parisonActor SetMapper parisonMapper

该例中我们采用单元裁剪(利用单元id号)和一个连通Filter来提取局部网格。vtkConnectivityFilter(以及vtkPolyDataConnectivityFilter)用来提取数据中的连通部分(当单元共享点时,他们是连通的)。SetExtractionModeToSpecifiedRegions()方法设置提取哪个连通区域。连通filter默认提取最大的连通区域。也可以如该例中那样提取一个特定的区域,不过需要一些额外的实验来对应各个区域。

不规则网格等值线提取

vtkContourGrid用来提取不规则网格的等值线。与一般的vtkContourFilter类相比,这个类更加高效。通常你并不需要直接实例化该类,因为当vtkContourFilter识别到输入数据时vtkUnstructuredGrid类型时,vtkContourFilter内部会自动创建一个vtkContourGrid实例。

以上是可视化技术概述。接下来你可能希望学习图像处理和体绘制技术。也可以参考444页“Filter总结”部分了解VTK中的Filter。

【第5章-可视化技术 翻译完毕】

第05章-可视化技术(4)

时间: 2024-10-06 00:41:25

第05章-可视化技术(4)的相关文章

第05章-可视化技术(2)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] [本小节内容对应原书的第95页至第105页] 流线(Streamlines) 流线可以看做无重量

文章05章-可视化技术(2)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容.但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作.同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] [本小节内容对应原书的第95页至第105页] 流线(Streamlines) 流线可以看做无重量

第05章-可视化技术(1)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),因为时间关系,我们不能保证每周都能更新本书内容.但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载.另请转载时注明本文出处,谢谢合作!同一时候,因为译者水平有限.出错之处在所难免,欢迎指出订正.] [本小节内容相应原书的第89页至第95页] 前面的章节中我们已经介绍了一些数据渲染和交互的基

第05章-可视化技术(3)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),因为时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^. 欢迎转载.另请转载时注明本文出处.谢谢合作! 同一时候,因为译者水平有限,出错之处在所难免,欢迎指出订正! ] [本小节内容相应原书的第105页至第112页] 5.2 多边形数据可视化 多边形数据(

第01章 Java 技术概览

/**@前言: Java是Sun公司推出的程序设计语言,拥有面向对象.跨平台.分布式.高性能.可移植等优点和特性,是目前应用最广的编程语言之一.Java语言实现面向对象思想的三大特性:继承.多态.封装.Java语言可以制作网站后台.大型网络游戏.多媒体开发,而且还能够操作各种操作系统(linux.Android等) @第一章 Java 技术概览 Java由两部分组成:Java API + Java VM -- Java编程接口 + Java虚拟机.Java特性:跨平台.面向对象.分布式.多线程.

异步编程系列第05章 Await究竟做了什么?

p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得这件事儿没意义翻译的又差,尽情的踩吧.如果你觉得值得鼓励,感谢留下你的赞,愿爱技术的园友们在今后每一次应该猛烈突破的时候,不选择知难而退.在每一次应该独立思考的时候,不选择随波逐流,应该全力以赴的时候,不选择尽力而

CCF虚拟现实与可视化技术专委会丨面向增强现实的可视计算技术研究进展概述

https://mp.weixin.qq.com/s/I-rNwgXHEtwgdpkWzKtVXw 摘要 新一代增强现实技术需要依赖可视计算理论与方法解决大尺度复杂环境下的场景建模.内容生成.感知交互三个关键科学问题.本文从以上三个方面,介绍了面向增强现实的可视计算技术的主要研究进展.其中,场景建模主要涉及复杂场景定位.重建与建模,包括同时定位与地图构建.场景几何与材质精确重建与数字化.实时高质量动态环境重建等:内容生成主要涉及视觉一致性驱动的高逼真度虚实融合,包括场景渲染参数估计.虚拟物体嵌入

蒋步星:数据可视化技术的误区

所谓数据可视化是指把数据以图形动画以及地图等形式呈现出来,这样即直观又美观,易于理解从而看出数据背后的问题. 要做好数据可视化,需要两方面的能力.一是"艺术"能力,即知道什么样的数据用什么形式去表现最合适,该用柱图时不能用饼图,颜色搭配也要合理,另一个是"技术"能力,设计好的呈现方案还要能真地做出来,并且要把成本控制在可接受范围内.这里我们不深入讨论"艺术"问题,来看看考察和选择可视化技术中的一些常见误区. 误区|考察报表,挑可视化技术最好? 报

第2章 黑盒测试技术

一.概述 二.边界值测试 1.概述 2.健壮性 3.最坏情况 4.案例分析 5.小结 三.等价类测试 1.等价类测试分类 2.划分等价类的规则 3.案例分析 (1)三角形问题 (2)NextDate函数 (3)佣金问题 4.小结 ========================================= 练习: 1.单缺陷非健壮的边界值测试用例数量为(),单缺陷健壮的边界值测试用例数量为(),多缺陷非健壮的边界值测试用例数量为(),多缺陷健壮的边界值测试用例数量为(). 2.已知Next