VTK学习之三(VTK基本数据结构、一个设置数据的几何结构、拓扑结构、属性的例子)

VTK基础教程(1)- vtkPolyData 介绍 目录 VTK的编译与环境搭建 VTK一般渲染流程 VTK数据类型-vtkPolyData 使用vtk自带的多边形数据 使用自己创建的数据 添加顶点颜色 添加面颜色 VTK的编译与环境搭建 这部分目前已经有了大佬做了成熟的傻瓜式配置,大家可以参考这篇文章:VTK+VS2019(或其他版本均可) 傻瓜式一站式 配置_Nancy_fairy的博客-CSDN博客_vs2019 vtk VTK一般渲染流程 这部分的介绍也很多,大家可以参考这篇文章:VTK笔记-了解VTK_黑山老妖的博客. 阅读详情

前言

数据结构对于可视化领域是非常重要的一个部分,我们需要将自己的数据读取,转换成VTK能够识别的数据这样才能实现数据的可视化,同时了解了这些数据结构对我们开发出高效、有针对性的的可视化应用程序非常重要。

可视化数据的基本特点

1、数据离散性

世界是连续的、无限的,但是能被计算机处理的数据都是离散的,数据基本上是以离散点的形式在计算机种进行存储,这就需要对现实世界的物体进行采样,数据获取设备基本上是每隔一定的间距获取一个点,这个过程就是一个离散的过程,所以数据具有离散性。

2、数据规则性

数据还可以分为规则的和不规则的。对于规则数据,存储时只需要存储起点、终点、每个点之间的间隔以及点的总数即可,如DEM数据。不规则数据就是点全部是散乱的,每个地方的密度也基本不一样,需要存储每个点的位置(X,Y,Z),虽然存储上没有规则数据那么高效,但是它表达的细节更加丰富、细致。

3、数据维度

数据有零维、一维、二维、三维、等任意维度,零维数据可以表示为点、一维数据可以表示为线、二维数据表示为一条面、三维数据表示为一个体。

vtkDataObject和vtkDataSet

vtkDataObject

vtk种数据一般以数据对象vtkDataObject为表现形式,数据对象是数据的集合,数据对象表现的数据是可以被可视化管线处理的数据,只有数据对象被组织成一种结构(Structure),才能被vtk提供的可视化算法处理。下面是vtkDataObject类的继承图,vtk种所有的数据结构形式都是从这个类种继承来的,在实际的vtk程序种没有直接使用vtkDataObject来实例化对象,而是由具体的子类实例化的。

vtkDataSet

在vtk必须要实例化vtkDataSet种一个子类才能进行可视化,vtk数据集是带有拓扑和几何结构的数据对象,除此之外还包括属性数据,属性数据包括标量、矢量、张量、法向量、纹理坐标、场数据。可以用下图表示

其中几何结构就是点集,拓扑结构cells可以分为线性的和非线性的,如下图所示

                             

属性数据是和数据集结构相关联的信息,在大多数情况下属性数据都是和点或者cells相关联

数据存储与表达

vtk中内存分配采用连续内存,用vtkDataArray类实现,vtk中给vtkDataArray定义了许多子类如vtkDoubleArray、vtkFloatArray、vtkIntArray等。他们都是大同小异,只是类型不同。

以vtkFloatArray为例,如下图所示;

Array是指向浮点型数组的指针;

Size设定数组的长度,数组长度是动态增长的,当存储的数据长度超过指定的长度就会触发Resize()调整数组的长度,使长度变为原来的两倍,和vector一样;

MaxId是一个整型的偏移量,用来定义最后一个被插入的数据的索引,如果没有数据插入,其值为-1;

NumberOfComponents表示数组中元组的组分个数,如果储存的是rgb信息那么这个值就应该是3,如下图所示,该值设定后每个元组都由三部分组成

例子

这个例子展示了如何设置数据的几何结构、拓扑结构、属性。其中几何结构和拓扑结构是必不可少的,不然无法显示!

//***********************************
//说明:数据类型,设置数据的几何结构、拓扑结构、属性
//时间:2020.08.13
//作者:BOO
//********************************
#include<vtkSmartPointer.h>
#include<vtkPolyData.h>
#include<vtkCellArray.h>
#include<vtkPointData.h>
#include<vtkFloatArray.h>

#include<vtkPolyDataMapper.h>
#include<vtkActor.h>
#include<vtkRenderer.h>
#include<vtkRenderWindow.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkInteractorStyleTrackballCamera.h>
#include<vtkCamera.h>

#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType)

int main()
{
	//定义立方体八个顶点,6个面的顶点
	int i;
	static float x[8][3] = { {0,0,0},{1,0,0},{1,1,0},{0,1,0},
							 {0,0,1},{1,0,1},{1,1,1},{0,1,1} };
	static vtkIdType pts[6][4] = { {0,1,2,3},{4,5,6,7} ,{0,1,5,4}, {1,2,6,5},{2,3,7,6},{3,0,4,7} };

	vtkSmartPointer<vtkPolyData>cube = vtkSmartPointer<vtkPolyData>::New();//数据
	vtkSmartPointer<vtkPoints>points = vtkSmartPointer<vtkPoints>::New();//几何结构
	vtkSmartPointer<vtkCellArray>cells= vtkSmartPointer<vtkCellArray>::New();//拓扑结构
	vtkSmartPointer<vtkFloatArray>scalars = vtkSmartPointer<vtkFloatArray>::New();//属性数据

	//写入数据
	for (int i = 0; i < 8; i++) points->InsertPoint(i,x[i]);
	for (int i = 0; i < 6; i++) cells->InsertNextCell(4, pts[i]);
	for (int i = 0; i < 8; i++) scalars->InsertTuple1(i, i);

	cube->SetPoints(points);
	cube->SetPolys(cells);
	cube->GetPointData()->SetScalars(scalars);
	

	//映射器
	vtkSmartPointer<vtkPolyDataMapper> cubeMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	cubeMapper->SetInputData(cube);
	cubeMapper->SetScalarRange(0, 7);

	//对象
	vtkSmartPointer<vtkActor> cubeActor = vtkSmartPointer<vtkActor>::New();
	cubeActor->SetMapper(cubeMapper);

	//渲染场景
	vtkSmartPointer<vtkRenderer>renderer = vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(cubeActor);
	renderer->SetBackground(0.0, 1.0, 1.0);
	//相机
	renderer->GetActiveCamera()->SetPosition(1, 1, 1);
	renderer->GetActiveCamera()->SetFocalPoint(0, 0, 0);
	renderer->ResetCamera();

	//渲染窗口
	vtkSmartPointer<vtkRenderWindow>renWin = vtkSmartPointer<vtkRenderWindow>::New();
	renWin->AddRenderer(renderer);
	renWin->SetSize(600, 400);

	//交互
	vtkSmartPointer<vtkRenderWindowInteractor>renderInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	renderInteractor->SetRenderWindow(renWin);

	//交互风格
	vtkSmartPointer<vtkInteractorStyleTrackballCamera>style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
	renderInteractor->SetInteractorStyle(style);

	renderInteractor->Initialize();
	renderInteractor->Start();

	return 0;

}

结果显示:

参考

《VTK图形图像开发进阶》

study VTK Together 一起学习VTK教程--水灵

《VTKTextBook》

VTK使用指南:介绍 本章讨论了开发大型和/或复杂软件系统的一些问题,并描述了面向对象设计如何解决其中的许多问题。本章定义了面向对象建模和设计中使用的关键术语,并通过一个真实世界的例子进行了工作。本章最后简要介绍了一些面向对象的语言以及与面向对象可视化相关的一些问题。 阅读详情

相关推荐

VTK教程系列:VTK基础及应用开发教程

由于OpenCV不能使用,只能使用VTK库的图像处理库,暂时还没有找到其他可以全面替代的库; CSDN东灵工作室:http://blog.csdn.net/www_doling_net/article/details/8763686 复制其第一篇: 注:以后将陆续分享一些对经典图像、图形算法的介绍, 新浪微博:@...

alppkk4545的博客 3167

VTK 基础入门 ( 一 ) 基本实例超详解释

【代码】VTK 基本实例,备注说明。

小道士写程序 2132

VTK学习-VTK基本数据结构

写在前面:这一篇博客我将根据自己的理解,把书本上的内容进行一个知识轮廓的提取,以便能明白繁杂的各种数据结构之间的关系。以便自己后面实际用到时能够提纲挈领,快速明白要找到的问题在哪里。 当然也可以参考专业的作者DolingStudio博客的解释说明: 06-VTK基本数据结构(1) 06-VTK基本数据结构(2) 06-VTK基本数据结构(3) 06-VTK基本数据结构(4) 06-VTK

zy2317878的博客 3047

VTK模块学习(一)

VTK模块学习(一)

qq_48034474的博客 6474

vtk基本数据结构与模型构建实例讲解

vtk基本数据结构与模型构建实例讲解

pizibing880909的专栏 3116

VTK基本数据结构

比如,图3-8 是类型为六面体 (Hexahedron)的单元,顶点列表 (由点的索引号表示即8-10-1-6-21-22-5-7,每个点通过索引号可在顶点列表中检索到该点的实际坐标值)定义了六面体单元的拓扑结构,从图3-8 中可以看出,索引为8和10的点连接就构成了六面体十条边中的一条,而 8-10-1-6 这四个点连接就构成了六面体的一个面。对于不规则结构的数据,虽然不可以像规则结构的数据那样存储,但它也有自身的优势,即在数据变化频繁的区域可以密集表示,而数据变化不频繁的区域则稀疏表示。

小道士写程序 427

VTK 初步 (2) ----- 基本数据结构

VTK 初步 (2) ----- 基本数据结构 前言: 解决是什么样的数据应用到 VTK 可以显示出模型的问题;夹杂大量的个人理解,可能有偏差。 参考资料: 《An Object-Oriented Approach to 3D Graphics》 《The VTK User’s Guide》 文章目录VTK 初步 (2) ----- 基本数据结构1. 概述1.1 简单问题1.2 vtk 的解决方案1.3 简单例子2. 数据结构2.1 几何结构2.2 拓扑结构2.3 属性数据3.4 数据集写在后面 1.

deepsprings的博客 2566

06-VTK基本数据结构(3)

6.4 属性数据 属性数据(AttributeData)是与数据集的组织结构相关联的信息。由前面的内容可知,组织结构包括几何结构及拓扑结构,几何结构由点数据定义,拓扑结构由单元数据定义。因此,属性数据通常是与数据集的点数据或者单元数据相关联,但有时属性数据也可能与组成单元的某些成分相关联,如,单元数据的某条边或者某个面等。此外也可以给整个数据集指定某个属性数据,或者数据集里的某一组单元数据或点数

东灵工作室 1万+

VTK修炼之道12:基本数据结构_如何把几何结构&拓扑结构加入到数据集

1. 无拓扑结构 只有几何结构,没有拓扑结构的vtkDataSet #include VTK_MODULE_INIT(vtkRenderingOpenGL); #include #include #include #include int main() { //创建几何数据,没有拓扑数据 vtkSmartPointer points = vtkSmartPo

沈春旭的博客 4365

VTK编程指南<七>:VTK基本数据结构:数据对象和数据集

VTK编程指南<七>:VTK基本数据结构:数据对象和数据集

欧特GO 1227

VTK----VTK数据结构详解1(几何篇)

在讲VTK的数据结构之前,我们先了解可视化数据的两个特征:离散性、有规则或无规则。下面我们就来看看,这些特征是如何塑造VTK的可视化数据模型的。

charce_you的专栏 1494

06-VTK基本数据结构(1)

6、VTK基本数据结构 我们已经学习了VTK的一个重要概念——可视化管线,了解了VTK数据的流动过程。好比我们做一道菜,在做每一道菜之前,首先要掌握这道菜的做法,什么时候放盐什么时候放酱油等调料,除了需要弄清楚做每一道菜的流程,还需要了解所做的每一道菜的原料,比如有些原料是要蒸出来才比较好吃,有些则可能会用炖的方法才比较可口,只有掌握做菜的流程以及了解菜的原料的特点,最后做出来的菜才可口美味。如

东灵工作室 1万+

maya中的几个热盒(空格、shift、w键)

maya中许多功能打包放进了不同的热盒中,让我们使用起来更加的便捷,熟练掌握后可以大大提升了建模速度。按下不同按键后鼠标不需要精确点到某个图标,往某个方向滑滑滑就打开了相应功能,非常的炫酷和迅猛。

m0_71983242的博客 1747

VTK随笔四:VTK基本数据结构

VTK随笔四:VTK基本数据结构

u012959478的博客 2142

STM32F103内部晶振配置实战:从代码修改到频率验证(附工程模板)

本文详细介绍了STM32F103内部晶振(HSI)的配置实战,从代码修改到频率验证的全流程,并附赠可直接使用的工程模板。通过对比HSI与外部晶振的优缺点,帮助开发者在成本敏感和空间受限的应用中实现稳定时钟配置,同时提供频率校准和常见问题排查方法。

weixin_29171087的博客 314

物联网技术(AIR780E cat1-4G模块+小程序+腾讯云MQTT)驱动的智能井盖系统设计(连载01)

终端设备采用AIR780E模块作为主控器,电子模块有三轴加速度传感器、可燃气体传感器,AIR780E模块(4G模块)通过MQTT通信协议进行数据打包上传至EMQX服务器,在EMQX服务器中,用户可以自行订阅主题和发布主题,小程序通过MQTT通信协议订阅EMQX服务器的主题,服务器通过接收到硬件发布的数据,转发到微信小程序。

leida_3669的博客 2209

【QT+VTK 学习笔记】04:VTK基本数据结构

前言 “VTK图形图像开发进阶_张晓东_罗火灵”的学习笔记。 学习资料 VTK官网学习地址:https://vtk.org/doc/nightly/html/ 学习笔记 可视化数据的基本特点 (1) 离散性 为了让计算机能够获取、处理和分析数据,必须对无限、连续的空间体进行采样,生成 有限的釆样数据点,这些数据以离散点的形式存储,釆样的过程是一个离散化的过程。 (2)数据具有规则或不规则的结构(结构化与非结构化) 对于规则结构的数据,存储时不必存储所有数据点,只需存储起始点、相邻点之间的间隔以及点的总数就可

qq_37373742的博客 2288

Clipper库中文帮助文档

引言: 第一次接触Clipper,主要是想用来处理DXF中的图形,网上也有博友翻译过,但是可惜打不开,好像那个网站https://love2.io凉凉了,但是CSDN上也有博友分享了CHM,看着只剩3个下载币的我好无奈,一怒之下花费两天的时间将英文CHM也翻译了一遍,主要还是想在翻译的同时好好的理解Clipper,为使用打下坚实的基础。当然我也会无私的奉献出来。 简单的认识一下Clipper:...

zefllj的博客 3417

VTK学习之一(基本介绍、一个简单的VTK例子)

这篇主要讲一个VTK的简单例子,加深自己对VTK的理解。 前记 学习vtk就是觉得pcl中封装的PCLVisualizer功能有限。学习vtk主要是看《VTK图形图像开发进阶》张晓东、罗火灵编著这本书,还有就是水灵的视频。水灵的视频更加老一点,不是很影响对vtk的基本理解,我是看了一遍书之后再看水灵的视频,还是看视频理解来的更加深刻。 水灵用的版本是vtk5.6版本,东灵用的是vtk6.0版本,我用的版本是vtk8.0。 VTK介绍 VTK全称Visualization...

qq_42570058的博客 1万+

httprunner V4.3.5 安装与使用--快速上手(超详细-超长篇)

HttpRunner是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求测试用例与代码分离,采用YAML/JSON的形式描述测试场景,保障测试用例具备可维护性测试用例支持分层机制,充分实现测试用例的复用测试用例支持参数化和数据驱动机制使用 skip 机制实现对测试用例的分组执行控制。

Dreams°的博客 3883

基于STM32L4XX 、HAL库的ATD5984步进电机驱动器驱动程序应用设计

一、简介: ATD5984是一款内部集成了译码器的微特步进电机 驱动器,能使双极步进电机以全、半、1/4、/1/8、1/16 和1/32步进模式工作。步进模式由逻辑输入管脚MSx选 择。其输出驱动能力达到28V±1.6A。 译码器是ATD5984易于使用的关键,通过STEP管脚 输入一个脉冲就可以使电机完成一次步进,省去了相序 表,高频控制线及复杂的编程接口,使其更适于没有复 杂的微处理器或微处理器负担过重的场合。 在步进操作期间,ATD5984的内部电路可以自动

PP_Cottage的博客 394

vtk基本数据结构

2020-06-10 数据对象被组织成一种结构并且被赋予相应的属性值时就形成数据集(Dataset)。VTK里数据集对应的类是 vtkDataSet,该类从vtkDataObject直接派生。vtkDataSet由两个部分组成,即组织结构(Organizing Structure)以及与组织结构相关联的属性数据(Attribute Data)。 vtkDataSet的组织结构由拓扑结构(Topology)和几何结构(Geometry)两部分组成。拓扑结构描述了物体 的构成形式,几何结构描述了物体的空间位置

qq_34600424的博客 1051

(八)DDR_PHY架构及功能——(PUB组成、初始化及Training流程、Clock关系)

文章目录一、DDR_PHY结构组成1.1、DDR Memory子系统1.2、DDR_PHY架构组成1.3、PUB模块功能实现流程1.3.1、DDR系统初始化流程1.3.2、PLL初始化流程 一、DDR_PHY结构组成 1.1、DDR Memory子系统   Memory子系统主要由DDR Controller和DDR_PHY(含DDR_IO)两个部分组成。DDR Controller主要承担其它子系统(如CPU)与Memory子系统进行数据交互时的传输效率及调度,DDR_PHY主要负责数据交互过程中的传输速

Mr.翟的博客 1万+

【VTK】vtkPolyData数据组成及属性修改

参考:https://blog.csdn.net/kateyabc/article/details/84430985 https://blog.csdn.net/shenziheng1/article/details/54836856

weixin_42338058的博客 4648

lammps 案例:高熵合金FeNiCrCoCu建模及拉伸模拟

高熵合金力学性能模拟包括拉伸、剪切、摩擦等模拟,本文以高熵合金FeNiCrCoCu为例介绍高熵合金建模及拉伸过程模拟。 FeNiCrCoCu原子数量比为1:1:1:1:1 高熵合金的拉伸与单晶拉伸过程类似,主要包含以下步骤: 1.建模 高熵合金含有原子类型较多,建模时,一般以含量最多的原子为主建立初始模型。 使用set type/ratio或者set type/fraction的方式按一定比例替换为其它合金原子。 如随机选择20%的原子1,将其转换为原子2: set type 1 type/ratio 2

lammps_jiayou的博客 6063

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VTK基本数据结构之数据对象和数据集

针对可视化领域的特点,VTK定义了种类丰富的数据结构。我们必须了解基本数据结构。 1、数据对象和数据集  在VTK中,数据一般以数据对象(Data Object, 类vtkDataObject)的形式表现,这是VTK里可视化数据最常用的表达形式。数据对象是数据的集合,数据对象表现的数据是可以被可视化管线处理的数据,只有当数据对象被组织成一种结构后,才能被VTK提供的可视化算法所处理。VTK

阿兵-AI医疗的专栏 4163

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: VTK学习之二(灯光、相机、颜色)
下一篇: QT之TableWidget使用记录(标题设置、自适应高度、颜色设置、添加控件等)
BOO2018
博客等级 码龄8年 867粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值