VTK 数据类型:vtkUnstructuredGrid

VTK笔记-使用vtkUnstructuredGrid类构建非结构化数据 非结构化数据 示例 #include "vtkUnstructuredGrid.h" #include "vtkDataSetMapper.h" #include "vtkCellType.h" #include "vtkProperty.h" int main() { int i; static float x[27][3] = { {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}, 阅读详情

VTK 数据类型:vtkUnstructuredGrid

非结构化点是在空间中离散随意分布的点,没有拓扑结构,几何机构也是完全没有规则的。非结构化点由顶点和多点的单元组成;非结构化点是一种简单但很重要的数据集类型,在部分可视化工作中会使用它来表示无结构的数据。

非结构化网格数据,是最常见的数据集类型,它的拓扑结构和几何结构都是非结构化的,所有单元类型都可以任意组合,所有单元的拓扑结构从零维延伸至三维。

在VTK中,任一类型的数据集都可用非结构化网格来表达,但其储存需要大量的空间,计算时需要消耗大量的资源,除非迫不得已,一般较少使用此种类型的数据集。

非结构化网格主要用于有限元分析、计算几何和几何建模这类领域。

VTK 中数据类型的继承关系

在这里插入图片描述

常用的几何类型

VTKCellType 是一个 enum,其中列举了常用的几何类型:

类型含义
VTK_EMPTY_CELL空单元
VTK_VERTEX顶点,由一个点定义,是零维度基本类型。
VTK_POLY_VERTEX多顶点,由多个顶点组合而成,是零维度的组合单元。
VTK_LINE直线,由两个点定义,方向是从第一个点指向第二个点。
VTK_POLY_LINE折线,由一个或多个线段组合而成。由n+1个有序的点连接定义的。n表示折线的线段条数,每两个点定义一条线段。
VTK_TRIANGLE三角形,由三个点按逆时针的方向连接定义,点的连接方向和表面法向量按照右手法则。
VTK_TRIANGLE_STRIP三角形条带,由一个或多个三角形组合而成。由n+2个有序的点连接,n表示三角形条带里三角形的个数,定义三角形条带的点不需要共面。
VTK_POLYGON多边形,是由共面的三个或三个以上的点按逆时针方向的顺序连接定义的。多边形表面法向量的方向通过右手法则确定。
VTK_PIXEL是由共面的四个点按一定的顺序连接定义的。与VTK_QUAD的区别在拓扑结构上,VTK_PIXEL 要求相邻的两条边必须垂直,而且相对两条边要与坐标轴平行。定义VTK_PIXEL 四个点的顺序与四边形不同,VTK_PIXEL 顶点的计数先沿着X轴方向,然后是Y轴,最后是Z轴方向。
VTK_QUAD四边形,由共面的四个点按逆时针的方向连接定义的。四边形要求是非自交的凸多边形。利用右手法则可以得到该四边形的表面法向量。
VTK_TETRA四面体,包含六条边和四个面,是由不共面的四个点两两连接定义的。
VTK_VOXEL正方体,与六面体的拓扑一样,几何上要求相邻的两个面必须垂直,VOXEL是VTK_HEXAHEDRON 的特殊形式。
VTK_HEXAHEDRON六面体,包含六个四边形面、12条边和8个顶点,六面体要求是凸多边形。
VTK_WEDGE楔形,三棱柱,由三个四边形面、两个三角形面、9条边和6个顶点构成。要求面和边不能与其他的相交,且楔形必须是凸多边形。
VTK_PYRAMID角椎体,金字塔形状。由一个四边形面、四个三角形面、8条边和五个顶点构成。定义四边形的四个点要求共面,且四个点构成的四边形必须是凸四边形,第五个点不在其他四个点定义的平面上。
VTK_PENTAGONAL_PRISM五棱柱,由五个四边形面、两个五边形面、15条边和10个顶点构成。五棱柱的面和边不能与其他的相交,且五棱柱必须是凸五边形。
VTK_HEXAGONAL_PRISM六角柱,由六个四边形面、两个六边形面、18条边和12个顶点构成。六角柱的面和边不能与其他的相交,且六角柱必须是凸六边形。

实例:vtkHexahedron 和 vtkTetra

非结构化数据的构建只需要 3 步:第一步是设置 vtkPoints 的点数,并插入点;第二步是设置几何类型类,如 vtkTetra,按顺序插入 vtkPoints 类的点。最后在 vtkUnstructuredGrid 类中设置好点和几何类型类即可。

#include "VTKUnstructuredGrid.h"

#include <vtkHexahedron.h>
#include <vtkTetra.h>
#include <vtkUnstructuredGrid.h>
#include <vtkDataSetMapper.h>
#include <vtkProperty.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>

VTKUnstructuredGrid::VTKUnstructuredGrid(QWidget* parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	_pVTKWidget = new QVTKOpenGLNativeWidget();
	this->setCentralWidget(_pVTKWidget);

	vtkNew<vtkRenderer> renderer;
	this->_pVTKWidget->renderWindow()->AddRenderer(renderer);
	this->_pVTKWidget->renderWindow()->Render();

	vtkNew<vtkPoints> hexahedronPoints;
	hexahedronPoints->SetNumberOfPoints(8);
	hexahedronPoints->InsertPoint(0, 0, 0, 0);
	hexahedronPoints->InsertPoint(1, 1, 0, 0);
	hexahedronPoints->InsertPoint(2, 1, 1, 0);
	hexahedronPoints->InsertPoint(3, 0, 1, 0);
	hexahedronPoints->InsertPoint(4, 0, 0, 1);
	hexahedronPoints->InsertPoint(5, 1, 0, 1);
	hexahedronPoints->InsertPoint(6, 1, 1, 1);
	hexahedronPoints->InsertPoint(7, 0, 1, 1);
	vtkNew<vtkHexahedron> hexahedron;
	hexahedron->GetPointIds()->SetId(0, 0);
	hexahedron->GetPointIds()->SetId(1, 1);
	hexahedron->GetPointIds()->SetId(2, 2);
	hexahedron->GetPointIds()->SetId(3, 3);
	hexahedron->GetPointIds()->SetId(4, 4);
	hexahedron->GetPointIds()->SetId(5, 5);
	hexahedron->GetPointIds()->SetId(6, 6);
	hexahedron->GetPointIds()->SetId(7, 7);
	vtkNew<vtkUnstructuredGrid> hexahedronGrid;
	hexahedronGrid->SetPoints(hexahedronPoints);
	hexahedronGrid->InsertNextCell(hexahedron->GetCellType(), hexahedron->GetPointIds());

	vtkNew<vtkPoints> tetraPoints;
	tetraPoints->SetNumberOfPoints(4);
	tetraPoints->InsertPoint(0, 0, 0, 0);
	tetraPoints->InsertPoint(1, 1, 0, 0);
	tetraPoints->InsertPoint(2, 0.5, 1, 0);
	tetraPoints->InsertPoint(3, 0.5, 0.5, 1);
	vtkNew<vtkTetra> tetra;
	tetra->GetPointIds()->SetId(0, 0);
	tetra->GetPointIds()->SetId(1, 1);
	tetra->GetPointIds()->SetId(2, 2);
	tetra->GetPointIds()->SetId(3, 3);
	vtkNew<vtkUnstructuredGrid> tetraGrid;
	tetraGrid->SetPoints(tetraPoints);
	tetraGrid->InsertNextCell(tetra->GetCellType(), tetra->GetPointIds());

	vtkNew<vtkDataSetMapper> hexahedronMapper;
	hexahedronMapper->SetInputData(hexahedronGrid);
	vtkNew<vtkDataSetMapper> tetraMapper;
	tetraMapper->SetInputData(tetraGrid);

	vtkNew<vtkActor> hexahedronActor;
	hexahedronActor->SetMapper(hexahedronMapper);
	vtkNew<vtkActor> tetraActor;
	tetraActor->SetMapper(tetraMapper);
	tetraActor->SetPosition(2, 0, 0);

	renderer->AddActor(hexahedronActor);
	renderer->AddActor(tetraActor);
}

VTKUnstructuredGrid::~VTKUnstructuredGrid()
{}

本程序构建了一个六面体和四面体。

运行结果:

在这里插入图片描述

VTK C++实战:ExodusII文件读取、阈值过滤与数据提取完整指南 在科学计算与工程仿真领域,有限元分析(FEA)和计算流体动力学(CFD)等CAE软件常输出ExodusII格式的结果文件,用于存储网格、节点及单元变量等数据。VTK(Visualization Toolkit)作为强大的可视化与数据处理库,其核心原理在于构建可扩展的数据处理管线(Pipeline),通过读取器(Reader)、过滤器(Filter)和写入器(Writer)的串联实现数据流转。针对ExodusII这类包含多块数据集(vtkMultiBlockDataSet)的复杂结构,技术关键在于正确提取目标 阅读详情

相关推荐

06-VTK基本数据结构(4)

6.5 不同类型的数据集 至此,我们知道,数据集由组织结构和与之关联的属性数据构组成,组织结构包括拓扑结构和几何结构。数据集的类型是由它的组织结构决定,同时数据集的类型决定了点和单元之间的相互关系,图6.11列出了常见的数据集类型,图6.12是对应的类的继承图。 依据数据集的结构特征,可分为规则结构和不规则结构的数据。如果组成数据集的点是规则的,则称该数据集的几何是规则的,如果组成数据集的单元

东灵工作室 1万+

VTK-数据集vtkUnstructuredGrid

主要介绍vtkUnstructuredGrid的特点、结构组成,vtkUnstructuredGrid的创建方法,及其vtkUnstructuredGrid相关的接口及示例。

qq_40041064的博客 3283

VTK实战:如何用vtkUnstructuredGrid处理有限元分析中的非结构化数据?

本文详细介绍了如何使用VTK中的vtkUnstructuredGrid处理有限元分析中的非结构化数据,包括网格生成、性能优化和内存管理等实战技巧。通过具体案例展示其在复杂几何形状处理中的优势,帮助开发者提升工程仿真效率。

weixin_28339967的博客 429

VTK入门:vtkUnstructuredGrid——非结构化网格的“自由组合乐高盒”

本文介绍了VTK中用于处理非结构化网格数据的vtkUnstructuredGrid类。文章首先通过乐高积木的比喻,形象地说明了非结构化网格与结构化网格的区别:非结构化网格可以自由组合各种形状的细胞(如三角形、四面体等),适合表示复杂不规则几何体。 文章重点讲解了vtkUnstructuredGrid的三个核心组成部分: Connectivity数组:记录每个细胞由哪些点组成 Types数组:标记每个细胞的形状类型 Faces数组:专门用于多面体的面信息存储 此外,还介绍了四个新手必备功能: 内存预分配方法

dengbiwei的博客 906

VTK实战:用vtkUnstructuredGrid构建复杂几何体的5个常见问题与解决方案

本文针对VTK开发中利用vtkUnstructuredGrid构建复杂几何体时遇到的典型难题,提供了5个实战解决方案。重点探讨了单元插入顺序混乱导致的渲染异常、大规模数据插入的性能瓶颈、混合单元类型的过滤器兼容性问题、属性数据绑定错位以及内存管理陷阱。文章结合代码示例,深入解析了非结构化数据处理的核心技巧与优化策略,帮助开发者高效、稳定地实现复杂三维模型的可视化与后处理。

weixin_29251337的博客 409

vtkUnstructuredGrid

vtkUnstructuredGrid => 父类 vtkPointSet FindPoint VTK读取UnstructuredGrid.vtk文件数据显示 用vtkUnstructuredGrid的属性对其进行着色

C++ 爱好者 make_it_simple888 1401

第01章 05 vtkPolyData、vtkStructuredGrid和vtkUnstructuredGrid的简单比较

1.vtkPolyData(多边形数据) 特点: 数据结构简单:由点、线、多边形等基本几何单元组成。 适合表面几何:主要用于表示物体的表面,如三角形面片、四边形面片等。 高效渲染:由于结构简单,渲染速度快,适合实时可视化。 2.vtkStructuredGrid(结构化网格) 特点: 规则网格结构:数据点按规则排列(如二维网格或三维网格)。 高效访问:由于网格规则,可以通过索引快速访问任意点的数据。 适合体积数据:能够表示体积内的数据分布。 3.vtkUnstructuredGrid(非结构化网格

捕鲸叉的专栏 857

VTK-API_6:使用 vtkUnstructuredGrid 创建非结构化网格示例

创建一个包含多个单元(如四面体、六面体等)的非结构化网格;读取外部非结构化网格(如 VTK 文件、Gmsh 文件等);了解非结构化网格的灵活性:支持混合类型单元、不规则连接。支持任意单元类型(四面体、金字塔、六面体、棱柱等);演示如何定义点、单元拓扑(如四面体)、并将其可视化;是高级模拟、可视化、有限元等不可缺少的数据结构之一。适用于有限元分析、CFD、结构分析等复杂网格场景;必须手动指定每个单元的点 ID 和类型。用户需显式指定单元类型与连接方式;附加标量或矢量场数据;联合使用进行场可视化;

yumeiguo的博客 204

SetInputData argument 1: method requires a vtkPolyData, a vtkUnstructuredGrid was provided.

可以使用适当的VTK过滤器(例如vtkTriangleFilter用于vtkPolyData,vtkDataSetSurfaceFilter用于vtkImageData)将数据转换为所需的类型。确认你的数据确实是一个多边形数据(vtkPolyData)、一个非结构化网格数据(vtkUnstructuredGrid)或者是复合数据集(vtkCompositeDataSet)。如果数据本应该是多边形数据或非结构化网格数据,但是出现了类型不匹配的问题,检查数据的生成过程,确保没有错误。

计算机辅助工程 292

VTK数据类型

其中vtkUnstructuredGrid是一种综合类型,其内部可以包含所有上述基础的单元类型。

C++ 爱好者 make_it_simple888 1956

VTK----VTK数据结构详解2(计算机篇)

这四个单元列表还将单元分为0维、1维和2维类型。这很有用,因为可视化算法通常会以不同的方式处理不同拓扑顺序的数据。

charce_you的专栏 1184

第07章-体绘制(1)

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

东灵工作室 8271

第二部分:VTK核心类详解(第8章:vtkUnstructuredGrid非结构化网格类)

本文介绍了VTK中vtkUnstructuredGrid的结构及其支持的单元类型。vtkUnstructuredGrid能够处理任意类型的单元,包括四面体、六面体、金字塔和楔形等复杂几何结构。文章通过代码示例展示了如何创建这些单元类型并获取其属性信息,如体积和中心点计算。该数据结构具有灵活拓扑、高效存储和快速查询等特点,适用于非结构化网格的可视化需求。

仰望星空的博客 181

python vtkUnstructuredGrid 转 vtkAlgorithmOutput_

在这个例子中,我们创建了一个vtkUnstructuredGrid对象,并用一些数据进行了初始化。然后,我们使用vtkDataSetSurfaceFilter过滤器,并通过SetInputData方法将vtkUnstructuredGrid对象连接为过滤器的输入。在VTK (Vtk.py)中,vtkUnstructuredGrid对象可以通过多种方式转换为vtkAlgorithmOutput_对象。这种转换通常在管道中使用,以将一个算法的输出传递给另一个算法作为其输入。

计算机辅助工程 969

VTK----VTK数据结构详解3(代码篇)

上篇文章()从计算机数据结构(数组、链表等)的角度对的实现原理进行了说明,下面从代码的层面详细说明它们的使用及相关实现逻辑。

charce_you的专栏 1520

VTK-不同类型的数据集

主要讲解vtk中不同类型的数据集以及它们之间的关系,如何进行转换等

qq_40041064的博客 1423

【VTK+有限元后处理】可视化结果云图

成员函数分别用于读取从ProCAST软件中导出的inp文件(存储有限元的几何拓扑数据)和ntl文件(存储有限元的节点属性数据,如温度、应力等)。类是VTK中的非结构化网格类,可用于有限元分析、计算几何和几何建模这类领域。为了能一次性读取有限元模型整体数据,我们可以将其保存为vtk格式的文件。这个类的作用是,方便我们读取并构建用于在VTK中显示的。为了读取不同格式的有限元计算结果文件,我们先写一个。类来管理有限元的几何拓扑和属性信息。下一次只需读取对应的vtk文件即可。

MSTIFIY的博客 5750

深入解析SGLang框架:从架构设计到核心组件实现

本文深入解析了SGLang框架的架构设计与核心组件实现。SGLang是一个专为大语言模型推理设计的高效框架,其核心优势在于清晰的分层架构、高效的调度策略以及精细的内存管理。文章详细剖析了其客户端接入、服务器端调度、模型执行引擎及Tokenizer/Detokenizer管理器等关键组件,揭示了其实现高性能推理的内部机制。

coffee的博客 576

QT学习VTK序列: Pyramid

学习VTK绘制金字塔 /* * ModuleName: 模块名称 * Description: * 参考代码:https://lorensen.github.io/VTKExamples/site/Cxx/GeometricObjects/Pyramid/ * Author: hsw * Date: 2020-03-15 * */ // QT #include <QMain...

hit1524468的专栏 416

K-means算法代码实现(python)

K-means算法代码实现以及解决质心选择问题 计算距离 距离通常使用欧几里得距离来衡量 def euclDistance(vector1, vector2): return np.sqrt(sum((vector2 - vector1) ** 2)) 初始化质心 def initCentroids(data, k): numSamples, dim = data.shape ...

江南小帅瓜的博客 1万+

飞常准小程序接口逆向分析:如何破解航班查询的签名机制

本文深度解析了飞常准小程序航班查询接口的安全机制,重点剖析了其基于MD5和参数排序的签名算法。通过逆向分析核心代码,详细阐述了签名生成流程,并提供了Python实现的签名生成器与调试技巧,为开发者理解与模拟此类接口调用提供了实战指南。

zz67890的博客 531
上一篇: 设计模式:迭代器模式(Iterator)
下一篇: Leetcode2079. 给植物浇水
UestcXiye
博客等级 码龄8年 9028粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值