VTK 数据类型:规则网格

2024-05-11 06:52
文章标签 数据类型 规则 网格 vtk

本文主要是介绍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()
{}

运行结果:

在这里插入图片描述

这篇关于VTK 数据类型:规则网格的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978814

相关文章

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Nginx路由匹配规则及优先级详解

《Nginx路由匹配规则及优先级详解》Nginx作为一个高性能的Web服务器和反向代理服务器,广泛用于负载均衡、请求转发等场景,在配置Nginx时,路由匹配规则是非常重要的概念,本文将详细介绍Ngin... 目录引言一、 Nginx的路由匹配规则概述二、 Nginx的路由匹配规则类型2.1 精确匹配(=)2

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

Redis中的常用的五种数据类型详解

《Redis中的常用的五种数据类型详解》:本文主要介绍Redis中的常用的五种数据类型详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis常用的五种数据类型一、字符串(String)简介常用命令应用场景二、哈希(Hash)简介常用命令应用场景三、列表(L