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基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Python之变量命名规则详解

《Python之变量命名规则详解》Python变量命名需遵守语法规范(字母开头、不使用关键字),遵循三要(自解释、明确功能)和三不要(避免缩写、语法错误、滥用下划线)原则,确保代码易读易维护... 目录1. 硬性规则2. “三要” 原则2.1. 要体现变量的 “实际作用”,拒绝 “无意义命名”2.2. 要让

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

深入浅出Java中的Happens-Before核心规则

《深入浅出Java中的Happens-Before核心规则》本文解析Java内存模型中的Happens-Before原则,解释其定义、核心规则及实际应用,帮助理解多线程可见性与有序性问题,掌握并发编程... 目录前言一、Happens-Before是什么?为什么需要它?1.1 从一个问题说起1.2 Haht

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

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

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

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

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