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

相关文章

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

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上