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.hqwc.cn/news/697503.html

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

相关文章

【java-数据结构13-双向链表的增删查改1】

在上一篇文章中&#xff0c;我们已将双向链表成功创建&#xff0c;接下来&#xff0c;我们将对链表进行增删查改&#xff0c;敬请期待叭~&#xff08;觉得小编写的还可以的可以可以留个关注~&#xff09; &#xff08;1.遍历链表 思路&#xff1a;定义一个cur&#xff0c;让c…

使用Xshell工具连接ubuntu-方便快捷

使用Xshell连接ubuntu 在命令行输入 “sudo apt-get install openssh-server”安装openssh-server 开启 ssh-server&#xff0c;在命令行输入 “service ssh start”&#xff0c;然后输入密码即可

自动攻丝机进出料激光检测 进料出料失败报警循环手动及关闭报警退出无限循环

/**************进料检测********************/ /***缺料无限次循环 手动退出 超时报警*******/ void check_Pon() // { zstatus0; //报警计数器归零 Signauto1; …

使用ffmpeg将本地摄像头推流至RTSP服务器,支持RTSP和RTMP协议

一、流媒体传输协议&#xff1a;RTSP和RTMP 1、RTSP和RTMP的工作原理 1.1&#xff09;RTSP工作原理 用户设备向视频流平台发送RTSP请求。视频流平台返回可操作的请求列表&#xff0c;如播放、暂停等。用户设备发送具体的请求&#xff0c;如播放。视频流平台解析请求并启动相…

git仓库使用

git仓库是会限制空间大小限制的 git网络库的容量限制_github仓库大小限制-CSDN博客 git是用于管理github的工具 电脑左下角搜索git打开GitBash.exe 进入到要下载到本地的目录 下载到本地的文件不要更改&#xff01; 如果要使用请务必把文件复制到别的空间去再在这个别的空间…

数据库笔记-【视图】

视图 视图通俗是企业想展示给用户看的&#xff0c;数据库存储的数据有很多&#xff0c;但是也有很多是不能对外公开的&#xff0c;做项目的过程就通过视图这个媒介达到这种效果 视图也可以保证数据库表结构字段的隐私安全等 create or replace view stu_v_1 as select id st…

虚拟机有线已连接但无法上网—·可能性之一

背景 VMware虚拟机&#xff0c;搭建了三台Linux服务器&#xff0c;组成Hadoop集群&#xff0c;由于在Hadoop102上有一些经常与Mysql数据库交互的任务&#xff0c;需要经常打开运行&#xff0c;而Hadoop103和104则经常处于关闭状态&#xff0c;一段时间后再次启动集群时候&…

使用Dockerfile配置Springboot应用服务发布Docker镜像-16

创建Docker镜像 springboot-docker模块 这个应用可以随便找一个即可&#xff0c;这里不做详细描述了。 pom.xml 依赖版本可参考 springbootSeries 模块中pom.xml文件中的版本定义 <dependencies><dependency><groupId>com.alibaba.cloud</groupId>…

AI智能体|我把Kimi接入了个人微信

大家好&#xff0c;我是无界生长。 最近加入AI学习交流群的小伙伴越来越多&#xff0c;我打算在微信群接入一个聊天机器人&#xff0c;让它协助管理微信群&#xff0c;同时也帮忙给群友解答一些问题。普通的群聊机器人肯定是不能满足需求的&#xff0c;得上AI大模型&#xff0c…

HFSS学习-day5-边界条件

边界条件 概述边界条件类型1、理想导体边界条件&#xff08;Perfect E&#xff09;2、理想磁边界条件&#xff08;Perfect H&#xff09;3、有限导体边界条件&#xff08;Finite Conductivity&#xff09;4、辐射边界条件&#xff08;Radiation&#xff09;5、对称边界条件&…

Java入门基础学习笔记22——程序流程控制

程序流程控制&#xff1a;控制程序的执行顺序。 程序有哪些执行顺序&#xff1f; 顺序、分支和循环。 分支结构&#xff1a; if、switch 循环&#xff1a; for、while、do-while 顺序结构是程序中最简单最基本的流程控制&#xff0c;没有特定的语法结构&#xff0c;按照代码…

Django开发实战之定制管理后台界面及知识梳理(下)

接上一篇&#xff1a;Django开发实战之定制管理后台界面及知识梳理&#xff08;中&#xff09; 1、前台设置 1、隐藏路由 当你输入一个错误地址时&#xff0c;可以看到这样的报错&#xff1a; 从这样的报错中&#xff0c;我们可以看到&#xff0c;这个报错页面暴漏了路由&a…