VTK 数据类型:vtkUnstructuredGrid

VTK 数据类型:vtkUnstructuredGrid

  • VTK 数据类型:vtkUnstructuredGrid
    • VTK 中数据类型的继承关系
    • 常用的几何类型
    • 实例:vtkHexahedron 和 vtkTetra

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

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

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据可视化01】matplotlib实例介绍2

目录 一、引言二、实例介绍1.箱线图2.热力图3.3D图 一、引言 接着上一文章【数据可视化01】matplotlib实例介绍1继续介绍matplotlib的实例。 二、实例介绍 在matplotlib中&#xff0c;常用的图形类型包括&#xff1a; 箱线图&#xff08;Box plot&#xff09;&#xff1a;用…

算法day05

第一题 1004. 最大连续1的个数 III 题目如下所示&#xff1a; 如上题所示&#xff1a; 题目本意是在一个数组中只有1和0&#xff0c;给定一个k值&#xff0c;将小于k个0翻转成1&#xff0c;然后返回最终得到最长的1的个数&#xff1b; 我们将这到题的意思转化为另外一种意思&…

单元测试之TestNG知识点总结及代码示例

TestNG 是一个测试框架&#xff0c;用于自动化测试 Java 和 Scala 应用程序&#xff0c;它是 JUnit 和 NUnit 的一个强大替代品。TestNG 支持数据驱动测试、参数化测试、测试套件、依赖管理、多线程测试等特性。TestNG官网&#xff1a;TestNG Documentation 目录 1.TestNG 基…

PCB笔记(二十六):PCB检查

前言 首先检查元器件是否100&#xff05; 放置 文章目录 1、打开DRC2、database check3、检查DRC4、检查多余的线5、其他需要注意的点a.检查差分线、等长线是否已调好b.注意检查晶振、电感等元件上/下方是否其他线经过&#xff08;一般不允许线经过&#xff09;c.打开place_bo…

【管理咨询宝藏101】普华永道并购尽调内部培训

【管理咨询宝藏101】普华永道并购尽调内部培训 【格式】PDF版本 【关键词】普华永道、兼并收购、尽职调查 【核心观点】 - 尽职调查的目的&#xff0c;发现潜在的致命缺陷&#xff0c;判断是否继续交易进程&#xff1b;发现潜在的问题&#xff0c;制定交易前后相应的应对措施。…

C语言 | Leetcode C语言题解之第88题合并两个有序数组

题目&#xff1a; 题解&#xff1a; void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int p1 m - 1, p2 n - 1;int tail m n - 1;int cur;while (p1 > 0 || p2 > 0) {if (p1 -1) {cur nums2[p2--];} else if (p2 -1) {cur nu…

Kali Linux菜单中各工具功能大全

网络安全学习路线 &#xff08;2024最新整理&#xff09; 如图片过大被平台压缩导致看不清的话&#xff0c;评论区点赞和评论区留言扣1或者关注我我后台会主动发给你&#xff01; 第一阶段&#xff1a;安全基础 网络安全行业与法规 Linux操作系统 计算机网络 HTML PHP Mysql P…

【董晓算法】竞赛常用知识之字符串2

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列&#xff08;还没学完&#xff09; 【董晓算法】动态规划之线性DP问题-CSDN博客 【董晓算法】动态规划之背包DP问题&#xff…

用Rust打印杨辉三角

一、杨辉三角是什么&#xff1f; 杨辉三角是一个著名的数学图形&#xff0c;它展示了二项式系数的排列方式。 杨辉三角是一种将二项式系数以三角形阵列排列的数学图形&#xff0c;具有丰富的历史和数学意义。 杨辉三角的历史起源可以追溯到中国南宋时期&#xff0c;由数学家杨辉…

极端天气对气膜建筑有什么影响吗—轻空间

气膜建筑在近年来的发展迅速&#xff0c;逐渐替代了一部分传统建筑&#xff0c;展现了良好的市场前景。然而&#xff0c;面对自然环境中的极端天气&#xff0c;如暴风、暴雨和暴雪&#xff0c;气膜建筑是否能够经受住考验是大家关注的焦点。轻空间带您探讨一下这些极端天气对气…

探究NVMe SSD HMB应用场景与影响-<续>

如果需要采用HMB功能&#xff0c;需要SSD支持NVME协议且NVMe 1.2及以上版本。NVME协议中对HMB对应有2个关键参数&#xff1a; HMB建议值&#xff08;HMPRE&#xff09;&#xff1a;设定实际分配给HMB使用的主机内存容量&#xff0c;为设备提供最优性能的内存分配量。 HMB最小值…

双星号(**)和单星号(*)在Python参数传递中的妙用

在Python中&#xff0c;参数传递是一个非常重要的概念&#xff0c;它允许函数接收任意数量的参数。而双星号(**)和单星号(*)在参数传递中扮演着关键角色。本文将详细讲解这两个符号的用法&#xff0c;并通过示例代码帮助初学者理解它们的工作原理。 单星号(*) 单星号(*)用于函…

EPS软件标注点坐标值

1、如下&#xff0c;点击右侧&#xff08;尺寸标注&#xff09;按钮&#xff1a; 2、弹出一个对话框&#xff0c;如下&#xff1a; 3、在上图对话框中设置好箭头样式和小数位数&#xff0c;然后点击图上一点&#xff0c;右击结束再鼠标指定位置&#xff0c;如下&#xff1a; 如…

CV每日论文--2024.5.10

1、Attention-Driven Training-Free Efficiency Enhancement of Diffusion Models 中文标题&#xff1a;扩散模型的注意力驱动的训练免费效率增强 简介&#xff1a;扩散模型在生成高质量和多样化图像方面取得了出色的表现,但其卓越性能是以昂贵的架构设计为代价的,特别是广泛使…

数据库——SQL SERVER(先学删库跑路)

目录 一&#xff1a;什么是数据库 二&#xff1a;为什么需要数据库 三&#xff1a;数据库的安装 四&#xff1a;学前必备知识 1. 数据库原理 2. 数据库与编程语言 3. 数据库与数据结构的区别 4. 连接 5. 有了编程语言为啥还要数据库 6. 初学者学习数据库的三个方面 …

高校推免报名|基于SSM+vue的高校推免报名系统的设计与实现(源码+数据库+文档)

高校推免报名 目录 基于SSM&#xff0b;vue的高校推免报名的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台登录模块 5.2.1管理员功能模块 5.2.2考生功能模版 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

【学习笔记】人群归因分数 PAF 以及combined PAF(更新)

在此推荐2篇发表在lancet以及jama子刊上的paf文章&#xff0c;这两篇文章套路是一样的&#xff0c;只是在不同国家进行。 在计算combined PAF或者说weighted PAF的时候&#xff0c;先建立了相关矩阵&#xff0c;再做主成分分析&#xff0c;得到communality。详细信息大家可翻阅…

el-calendar自定义日程,显示文字内容,el-date-picker和el-calendar互动互联

Vue实现 el-calendar自定义日程,显示文字内容,el-date-picker和el-calendar互动互联 效果展示 首先el-calendar需要自定义日程内容的话,其格式一般必须满足如下结构 dataList = [{date: 2024-05-08, content: "数学模拟试卷(3)"},{date: 2024-05-08, content: …

【STM32 |程序实例】按键控制、光敏传感器控制蜂鸣器

目录 前言 按键控制LED 光敏传感器控制蜂鸣器 前言 上拉输入&#xff1a;若GPIO引脚配置为上拉输入模式&#xff0c;在默认情况下&#xff08;GPIO引脚无输入&#xff09;&#xff0c;读取的GPIO引脚数据为1&#xff0c;即高电平。 下拉输入&#xff1a;若GPIO引脚配置为下…

C语言(指针)6

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…