VTK 数据类型:规则网格

VTK 数据类型:规则网格

  • VTK 数据类型:规则网格
    • 分类
    • 三种规则网格需要的设置
    • 实例

VTK 数据类型:规则网格

分类

VTK 有 3 种规则网格:

  1. vtkImageData:几何结构和拓扑结构都是规则的。
  2. vtkRectilinearGrid:几何结构不规则,拓扑结构规则。
  3. vtkStructuredGrid:几何结构是半规则的(坐标轴正交,每个轴上点的间距不固定),拓扑结构规则。

三种规则网格需要的设置

因为 3 种规则网格在拓扑上都是规则的,所以都调用 SetExtent()。

在这里插入图片描述

实例

本程序设置了3个视口(renderer),还设置了每个视口的背景色。左视口展示vtkImageData,中视口展示vtkRectilinearGrid,右视口展示vtkStructuredGrid。

#include "VTKRegularGrid.h"#include <vtkNamedColors.h>
#include <vtkImageData.h>
#include <vtkRectilinearGrid.h>
#include <vtkDoubleArray.h>
#include <vtkStructuredGrid.h>
#include <vtkDataSetMapper.h>
#include <vtkProperty.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>VTKRegularGrid::VTKRegularGrid(QWidget* parent): QMainWindow(parent)
{ui.setupUi(this);_pVTKWidget = new QVTKOpenGLNativeWidget();this->setCentralWidget(_pVTKWidget);vtkNew<vtkNamedColors> colors;// vtkImageDataint gridSize = 5;vtkNew<vtkImageData> imageData;imageData->SetExtent(0, gridSize - 1, 0, gridSize - 1, 0, gridSize - 1);double dbSpace[] = { 1, 2, 3 };imageData->SetSpacing(dbSpace);vtkNew<vtkDataSetMapper> imageDataMapper;imageDataMapper->SetInputData(imageData);vtkNew<vtkActor> imageDataActor;imageDataActor->GetProperty()->SetRepresentationToWireframe(); // 设置为线框模式imageDataActor->SetMapper(imageDataMapper);// vtkRectilinearGridvtkNew<vtkRectilinearGrid> rectilinearGrid;rectilinearGrid->SetExtent(0, gridSize - 1, 0, gridSize - 1, 0, gridSize - 1);vtkNew<vtkDoubleArray> xCoords;xCoords->SetNumberOfComponents(1);vtkNew<vtkDoubleArray> yCoords;yCoords->SetNumberOfComponents(1);vtkNew<vtkDoubleArray> zCoords;zCoords->SetNumberOfComponents(1);for (int i = 0; i < gridSize; i++){if (i == 0){xCoords->InsertNextValue(0);yCoords->InsertNextValue(0);zCoords->InsertNextValue(0);}else{double oldX = xCoords->GetValue(i - 1);xCoords->InsertNextValue(oldX + i * i);double oldY = yCoords->GetValue(i - 1);yCoords->InsertNextValue(oldY + i * i);double oldZ = zCoords->GetValue(i - 1);zCoords->InsertNextValue(oldZ + i * i);}}rectilinearGrid->SetXCoordinates(xCoords);rectilinearGrid->SetYCoordinates(yCoords);rectilinearGrid->SetZCoordinates(zCoords);vtkNew<vtkDataSetMapper> rectilinearGridMapper;rectilinearGridMapper->SetInputData(rectilinearGrid);vtkNew<vtkActor> rectilinearGridActor;rectilinearGridActor->GetProperty()->SetRepresentationToWireframe(); // 设置为线框模式rectilinearGridActor->SetMapper(rectilinearGridMapper);// vtkStructuredGridvtkNew<vtkStructuredGrid> structuredGrid;structuredGrid->SetExtent(0, gridSize - 1, 0, gridSize - 1, 0, gridSize - 1);vtkNew<vtkPoints> points;for (int i = 0; i < gridSize; i++){for (int j = 0; j < gridSize; j++){for (int k = 0; k < gridSize; k++){double p[3] = { i, j + 0.5 * i, k };points->InsertNextPoint(p[0], p[1], p[2]);}}}structuredGrid->SetPoints(points);vtkNew<vtkDataSetMapper> structuredGridMapper;structuredGridMapper->SetInputData(structuredGrid);vtkNew<vtkActor> structuredGridActor;structuredGridActor->GetProperty()->SetRepresentationToWireframe(); // 设置为线框模式structuredGridActor->SetMapper(structuredGridMapper);// 设置 3 个视口vtkNew<vtkRenderer> leftRenderer;double leftViewport[4] = { 0, 0, 0.33, 1 };leftRenderer->SetViewport(leftViewport);leftRenderer->SetBackground(colors->GetColor3d("BurlyWood").GetData());leftRenderer->AddActor(imageDataActor);this->_pVTKWidget->renderWindow()->AddRenderer(leftRenderer);vtkNew<vtkRenderer> midRenderer;double midViewport[4] = { 0.33, 0, 0.67, 1 };midRenderer->SetViewport(midViewport);midRenderer->SetBackground(colors->GetColor3d("CadetBlue").GetData());midRenderer->AddActor(rectilinearGridActor);this->_pVTKWidget->renderWindow()->AddRenderer(midRenderer);vtkNew<vtkRenderer> rightRenderer;double rightViewport[4] = { 0.67, 0, 1, 1 };rightRenderer->SetViewport(rightViewport);rightRenderer->SetBackground(colors->GetColor3d("Plum").GetData());rightRenderer->AddActor(structuredGridActor);this->_pVTKWidget->renderWindow()->AddRenderer(rightRenderer);this->_pVTKWidget->renderWindow()->Render();
}VTKRegularGrid::~VTKRegularGrid()
{}

运行结果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

AI大模型探索之路-训练篇20:大语言模型预训练-常见微调技术对比

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

MATLAB 基于格网的点云最低点采样 (69)

MATLAB 基于格网的点云最低点采样 (69) 一、算法原理二、算法实现1.代码2.效果三、数据链接一、算法原理 最低点格网采样是一种基于点云数据的简化技术。它通过将点云数据划分为网格,并在每个网格单元中保留最低的点来实现简化。以下是该方法的步骤: 1 定义格网尺度: 选…

AI绘画的基本原理是什么?

目录 一、AI绘画的基本原理是什么&#xff1f; 二、Python中有几个库可以用于AI绘画&#xff1f; 三、OpenCV画一个人形 四、AI画的红苹果 一、AI绘画的基本原理是什么&#xff1f; AI绘画的原理基于机器学习和人工智能技术&#xff0c;通过这些技术模型能够理解文本描述并…

【python】将json内解码失败的中文修改为英文(‘utf-8‘ codec can‘t decode,labelme标注时文件名未中文)

出现问题的场景&#xff1a; 语义分割数据集&#xff0c;使用labelme工具进行标注&#xff0c;然后标注图片存在中文名&#xff0c;导致json标签文件写入中文图片名&#xff0c;从而解析失败。 代码解析json文件时&#xff0c;出现报错&#xff1a; python脚本需求&#x…

汽车EDI:安通林Antolin EDI 项目案例

安通林&#xff08;Antolin&#xff09;是一家全球性的汽车零部件制造商&#xff0c;专注于汽车内饰系统和零部件的生产&#xff0c;致力于创新和采用先进的技术。近年来 安通林Antolin 推动其供应商部署EDI系统&#xff0c;使得双方能够通过EDI传输业务单据&#xff0c;极大提…

【oj题】环形链表

目录 一. OJ链接&#xff1a; 环形链表 【思路】 快慢指针 ​编辑【扩展问题】 为什么快指针每次走两步&#xff0c;慢指针走一步可以解决问题&#xff1f; ​编辑【扩展问题】快指针一次走3步&#xff0c;走4步&#xff0c;...n步行吗&#xff1f; 二. OJ链接&#xff1a…

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败了

问题&#xff1a; 我已经成功地使用以下 sed 命令在Linux中搜索/替换文本&#xff1a; sed -i s/old_string/new_string/g /path/to/file然而&#xff0c;当我在Mac OS X上尝试时&#xff0c;我得到&#xff1a; command i expects \ followed by text我以为我的Mac运行的是…

Liunx_DNS域名解析服务

目录 DNS术语 域名分层 顶级域名&#xff08;Top-Level Domain, TLD&#xff09; 二级域名&#xff08;Second-Level Domain, SLD&#xff09; 子域名&#xff08;Subdomain&#xff09; FQDN&#xff08;Fully Qualified Domain Name&#xff09; 域名分层的意义 域名…

【研发日记】Matlab/Simulink避坑指南(十二)——Initialize Function执行Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记&#xff0c;Matlab/Simulink避坑指南(七)——数据溢出钳位Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑指南(八)——else if分支结构Bug》 见《研发日记&#xff0c;Matlab/Simuli…

如何在 Mac 上恢复已删除的文件

点击“删除”后立即后悔&#xff1f;不用担心。我们的教程介绍了如何恢复已删除的 Mac 文件、电子邮件、iTunes 音乐等&#xff0c;即使您没有 Time Machine 备份并且无需支付软件费用。 在 macOS 中丢失文件可能会非常痛苦&#xff0c;如果您是点击删除的人&#xff0c;情况会…

14 华三 Telent

AI 解读 09 华三 SSH-CSDN博客 华三 Telent是华为三号电信工程有限公司的简称&#xff0c;是一家专门从事电信网络工程建设的公司。该公司提供电信网络规划、设计、建设、维护等一系列服务&#xff0c;包括有线和无线网络设备的安装和调试、网络性能优化等。华三 Telent致力于…

word转pdf的java实现(documents4j)

一、多余的话 java实现word转pdf可用的jar包不多&#xff0c;很多都是收费的。最近发现com.documents4j挺好用的&#xff0c;它支持在本机转换&#xff0c;也支持远程服务转换。但它依赖于微软的office。电脑需要安装office才能转换。鉴于没在linux中使用office&#xff0c;本…

浅谈如何自我实现一个消息队列服务器(7)——编写服务器部分

文章目录 一、编写服务器代码1.1、分析一个服务器应具备的功能1.1.1、成员变量1.1.2、对外提供的接口 一、编写服务器代码 再次拿出这张图&#xff0c;前面我们已经将重要概念&#xff1a;VirtualHost、exchange、msgQueue、message、binding 都实现了&#xff0c;此时就可以开…

灯珠CCD或CMOS成像RGB数据 光谱重建

1. 源由 本文主要为了通过摄像头CCD或者CMOS传感器对灯珠成像数据分析、重建灯珠可见光范围光谱数据的研究&#xff0c;从原理和方法上论证可行性。 随着照明技术迅猛发展&#xff0c;LED技术日渐成熟。LED产品由于具备经久耐用、节能且价格低等优势&#xff0c;已成为照明行…

python中的数据可视化:二维直方图 hist2d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python中的数据可视化&#xff1a; 二维直方图 hist2d() 选择题 关于以下代码输出结果的说法中正确的是? import matplotlib.pyplot as plt import numpy as np x np.random.normal(0, 1, …

如何打开远程桌面连接?

远程桌面连接是一项强大的功能&#xff0c;它允许我们远程访问其他计算机&#xff0c;并在远程计算机上进行操作。这对于远程办公、技术支持和远程培训等场景非常有用。本文将介绍如何在不同操作系统中打开远程桌面连接。 Windows系统 在Windows操作系统中&#xff0c;打开远程…

【动态规划】子数组、子串系列II|等差数列划分|最长湍流子数组|单词拆分|环绕字符串中唯一的子字符串

一、等差数列划分 413. 等差数列划分 算法原理 &#x1f4a1;细节&#xff1a; 1.如果当前nums数组中i位置的数和前面两个数可以构成等差数列&#xff0c;那么当前位置所有子数组构成的等差数列个数dp[i]就等于前一个位置有子数组构成的等差数列个数1&#xff08;这个1代表增加…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 多元素控件 | Table Widget的说明及介绍 文章编号&#…

Java面试——MyBatis

优质博文&#xff1a;IT-BLOG-CN 一、MyBatis 与 JDBC 的区别 【1】JDBC 是 Java 提供操作数据库的 API&#xff1b;MyBatis 是一个持久层 ORM 框架&#xff0c;底层是对 JDBC 的封装。 【2】使用 JDBC 需要连接数据库&#xff0c;注册驱动和数据库信息工作量大&#xff0c;每…

【C++】CentOS环境搭建-快速升级G++版本

【C】CentOS环境搭建-快速升级G版本 1. 安装CentOS的软件集仓库&#xff1a;2. 安装你想要的devtoolset版本&#xff0c;例如devtoolset-9&#xff1a;3. 启用新版本的编译器&#xff1a;4. 检查G版本&#xff1a; 在CentOS系统中升级G编译器通常涉及使用devtoolset或者SCL&…