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;

	// vtkImageData
	int 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);

	// vtkRectilinearGrid
	vtkNew<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);

	// vtkStructuredGrid
	vtkNew<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()
{}

运行结果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用2G内存求20亿个数字中出现次数最多的N个

又是一个TOP -N的题目 我看了一下CSDN上大多数人的回答和GPT说的差不多&#xff0c;都是说使用哈希之类的&#xff1b; 我今天说一下我的解法&#xff0c;首先说一下不太快的基础解法 20亿数字使用uint32需要80GB&#xff0c; &#xff08;1&#xff09;分为40块读取&#…

云粒智慧实时数仓的架构演进分享:OceanBase + Flink CDC

4月20日&#xff0c;在2024 OceanBase开发者大会上&#xff0c;云粒智慧的高级技术专家付大伟&#xff0c;分享了云粒智慧实时数仓的构建历程。他讲述了如何在传统数仓技术框架下的相关努力后&#xff0c;选择了OceanBase Flink CDC架构的实时数仓演进历程。 业务背景及挑战 …

【C#进阶】简单数据结构类

简单数据结构类 文章目录 1、Arraylist1、ArrayList的本质2、声明3、增删查改4、装箱拆箱思考 背包售卖 2、Stack1、Stack的本质2、声明3、增取查改4、遍历思考 计算一个数的二进制 3、Queue1、Queue的本质2、声明3、增取查改4、遍历思考 每隔一段时间打印一条消息 4、Hashtab…

赣红孵联合卫东街道未保站开展未成年人保护法散落在每个角落活动

为进一步提高家长的法治意识&#xff0c;依法保障未成年人的合法权益&#xff0c;全力构建安全和谐文明家庭&#xff0c;5月8日&#xff0c;赣红孵社会组织培育中心联合卫东街道未成年人保护站在在南师附小红谷滩校区实验小学开展“未成年人保护法散落在每个角落”未成年人普法…

无列名注入

在进行sql注入时&#xff0c;一般都是使用 information_schema 库来获取表名与列名&#xff0c;因此有一种场景是传入参数时会将 information_schema 过滤 在这种情况下&#xff0c;由于 information_schema 无法使用&#xff0c;我们无法获取表名与列名。 表名获取方式 Inn…

如何通过汽车制造供应商协同平台,提高供应链的效率与稳定性?

汽车制造供应商协同是指在汽车制造过程中&#xff0c;整车制造商与其零部件供应商之间建立的一种紧密合作的关系。这种协同关系旨在优化整个供应链的效率&#xff0c;降低成本&#xff0c;提高产品质量&#xff0c;加快创新速度&#xff0c;并最终提升整个汽车产业的竞争力。以…

龙芯LA架构相关的存储管理

&#xff08;LoongArch-P92&#xff09; 目录 1.1 物理地址空间 1.2 虚拟地址空间 1.3 LA64架构下的虚拟地址缩减模式 1.4 存储访问类型 1.5 页表映射存储管理 1.5.1 TLB组织结构 1.5.2 基于TLB的虚实地址转换过程 1.5.3 TLB的软件管理 &#xff08;1&#xff09;…

计算概论学习笔记(1)

感谢北大李戈老师讲解的计算概论。 【道阻且长&#xff0c;行则将至】 很多年没有intensive coding&#xff0c;现在这个系列是coding retake&#xff0c;一点点回忆之前的知识&#xff0c;希望能重回到一线。主要内容包括C,C,Pytorch学术前沿项目学习和实践&#xff0c;预计…

线路和绕组中的波过程(一)

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第一篇笔记。下一篇传送门。 当电路中的设备&#xff08;元件&#xff09;最大实际尺寸l大于人们所感兴趣的谐波波长 λ \lambda λ时&#xff0c;可以作为集中参数处理&#xff0c;否则就要当做分布参数处理。即&…

C语言 [力扣]详解环形链表和环形链表II

各位友友们&#xff0c;好久不见呀&#xff01;又到了我们相遇的时候&#xff0c;每次相遇都是一种缘分。但我更加希望我的文章可以帮助到大家。下面就来具体看看今天所要讲的题目。 文章目录 1.环形链表2.环形链表II 1.环形链表 题目描述:https://leetcode.cn/problems/link…

Babel基础知识及实现埋点插件

目录 前言 AST 遍历 Visitors Paths&#xff08;路径&#xff09; Paths in Visitors&#xff08;存在于访问者中的路径&#xff09; State&#xff08;状态&#xff09; Scopes&#xff08;作用域&#xff09; Bindings&#xff08;绑定&#xff09; API babylo…

「TypeScript」TypeScript入门练手题

前言 TypeScript 越来越火&#xff0c;现在很多前端团队都使用它&#xff0c;因此咱们前端码农要想胜任以后的前端工作&#xff0c;就要更加熟悉它。 入门练手题 interface A {x: number;y: number; }type T Partial<A>;const a: T { x: 0, y: 0 }; const b: T { …

LLM 可以从简单数据中学习吗?

在 10 月份的一次周会结束后&#xff0c;我提到 SFT 训练后的 Loss 曲线呈现阶梯状&#xff0c;至于为什么&#xff0c;并没有人有合理的解释&#xff0c;加上当时的重心是提升次日留存率&#xff0c;Loss 曲线呈现阶梯状与次日留存率的关系还太远&#xff0c;即使有问题&#…

使用单片机的IO引脚直接驱动段码屏

使用单片机的IO引脚直接驱动段码屏,目的是为了降低成本。这种古老的应用,在低功耗产品中比较多见。 如:水表&#xff0c;燃气表等需要电池供电的产品。 下面纯属个人理解&#xff0c;未经测试。 1/3Duty表示LCD共有3个COM引脚,分别占显示周期的1/3 1/2BIAS表示电压0和VCC 1、…

2024年记一次Mingw64-13.2.0编译Qt6.6.3,包含文档编译。

My C Development. 前言&#xff1a;不包含qtwebengine。 一、准备文件 &#xff08;1&#xff09;mingw64-13.2.0 下载链接&#xff1a;&#xff0c;ucrt64_13.2_ucrt_posix_rev6_msys2.7z【蓝奏云】。 &#xff08;2&#xff09;qt6.6.3源码 下载链接&#xff1a;Downlo…

纯血鸿蒙APP实战开发——一镜到底“页面转场”动画

介绍 本方案做的是页面点击卡片跳转到详情预览的转场动画效果 效果图预览 使用说明 点击首页卡片跳转到详情页&#xff0c;再点击进入路由页面按钮&#xff0c;进入新的路由页面 实现思路 首页使用了一种视觉上看起来像是组件的转场动画&#xff0c;这种转场动画通常是通过…

opencv绘制灰度直方图-------c++

灰度直方图 cv::Mat opencvTool::calculateHistogram(const cv::Mat& image) {// 如果输入图像尚未处于灰度级&#xff0c;请将其转换为灰度级cv::Mat grayscale_image;if (image.channels() > 1){cv::cvtColor(image, grayscale_image, cv::COLOR_BGR2GRAY);}else{gra…

求一个B站屏蔽竖屏视频的脚本

求一个B站屏蔽竖屏视频的脚本 现在B站竖屏竖屏越来越多了&#xff0c;手机还好点给我一个按钮&#xff0c;选择不喜欢&#xff0c;但是我一般都用网页版看视屏&#xff0c;网页版不给我选择不喜欢的按钮&#xff0c;目测大概1/4到1/3的视频都是竖屏视频。 目前网页版唯一的进…

使用AudioCraft(MusicGen)生成音乐

AudioCraft 是一个 PyTorch 库,用于音频生成的深度学习研究。AudioCraft 包含 AudioGen 和 MusicGen 两个最先进的人工智能生成模型的推理和训练代码,用于生成高质量的音频。 MusicGen 是一种简单可控的音乐生成模型,它使用Meta 20K 小时的授权音乐来进行训练,能够生成与文…

SM4在线解密工具(支持GCM模式)

SM4在线解密工具(支持GCM模式)