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

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

1、数据对象和数据集

  在VTK中,数据一般以数据对象(Data Object, 类vtkDataObject)的形式表现,这是VTK里可视化数据最常用的表达形式。数据对象是数据的集合,数据对象表现的数据是可以被可视化管线处理的数据,只有当数据对象被组织成一种结构后,才能被VTK提供的可视化算法所处理。VTK里所有的数据结构形式都是从vtkDataObject派生出来的。继承图如下所示。
  
这里写图片描述

  将数据对象组织成一种结构并且赋予相应的属性值,就形成了数据集(DataSet)。vtkDataSet由两个部分组成,即组织结构(Organizing Structure)以及与组织结构相关联的属性数据(Attribute Data)。详细构成如下图所示。
  
这里写图片描述

  vtkDataSet的组织结构由拓扑结构(Topology)和几何结构(Geometry)两部分组成。拓扑结构描述了对象的构成形式,几何结构描述了对象的空间位置关系。换言之,点数据所定义的一系列坐标点构成了vtkDataSet数据集的几何结构;点数据的连接形成了单元数据(Cell Data),由单元数据形成了数据集的拓扑结构。拓扑结构具有几何变换不变性。
属性数据是对拓扑结构和几何结构信息的补充,属性数据可以是某个空间点的温度值。

示例说明

CMakeLists.txt文件代码如下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(VTKDataExample)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
ADD_EXECUTABLE(VTKDataExample    VTKDataExample.cpp)
TARGET_LINK_LIBRARIES(VTKDataExample ${VTK_LIBRARIES})

VTKDataExample .cpp文件代码如下:

#include "vtkActor.h"
#include "vtkCellArray.h"
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h" 
#include "vtkProperty.h"
#include "vtkLine.h"
#include "vtkCellArray.h"
#include "vtkPolyData.h"


int main()
{
    //创建点数据
    vtkSmartPointer<vtkPoints>points = vtkSmartPointer<vtkPoints>::New();
    points->InsertNextPoint(1.0, 0.0, 0.0);
    points->InsertNextPoint(0.0, 0.0, 1.0);
    points->InsertNextPoint(0.0, 0.0, 0.0);

    //每两个坐标点之间分别创建一条线
    //SetId()的第一个参数是线段的端点ID,第二参数是连接的的点的ID
    vtkSmartPointer<vtkLine>line0 = vtkSmartPointer<vtkLine>::New();
    line0->GetPointIds()->SetId(0, 0);
    line0->GetPointIds()->SetId(1, 1);

    vtkSmartPointer<vtkLine>line1 = vtkSmartPointer<vtkLine>::New();
    line1->GetPointIds()->SetId(0, 1);
    line1->GetPointIds()->SetId(1, 2);

    vtkSmartPointer<vtkLine>line2 = vtkSmartPointer<vtkLine>::New();
    line2->GetPointIds()->SetId(0, 2);
    line2->GetPointIds()->SetId(1, 0);

    //创建单元数组,用于存储以上创建的线段
    vtkSmartPointer<vtkCellArray>lines = vtkSmartPointer<vtkCellArray>::New();
    lines->InsertNextCell(line0);
    lines->InsertNextCell(line1);
    lines->InsertNextCell(line2);

    //将点和线加入数据集中,前者定义数据集的几何结构,后者定义拓扑结构
    //创建vtkPolyData类型的数据,是一种数据集
    vtkSmartPointer<vtkPolyData>polydata = vtkSmartPointer<vtkPolyData>::New();

    //将创建的点数据加入vtkPolyData数据里
    polydata->SetPoints(points);  //点数据定义了polydata数据集的几何结构。
    polydata->SetLines(lines);  //定义拓扑结构

    //显示数据
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputData(polydata);
    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);
    actor->GetProperty()->SetColor(1.0, 0.0, 0.0);
    vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
    ren->AddActor(actor);
    ren->SetBackground(1, 1, 1);
    vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
    renWin->AddRenderer(ren);
    vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    iren->SetRenderWindow(renWin);
    renWin->SetSize(500, 500);
    renWin->Render();
    iren->Start();
    return EXIT_SUCCESS;
}

运行结果:
这里写图片描述

代码分析:

  • vtkPoints :用来描绘和操作 3D点排列(Array)。可以调用SetPoint或InsertPoint来设置点的vtkIdType(类似id的值)和三维坐标,2个函数的功能相同,区别在于InsertPoint先要完成点的范围检查和内存分配工作,所以速度较慢。
  • vtkCellArray:用来操作cell 单元。调用InsertNextCell函数逐步添加新的cell,例如函数vtkCellArray::InsertNextCell (vtkIdType npts, const vtkIdType pts ),第一个参数值表示cell中点的个数,第二个参数指向那些点的坐标数据。(说明:vtkIdType pts 存储的是所包括点在points中的顺序信息,其个数当然应该和前面的npts一致。),2点可以连成一条线,三点可以得到一个面。也就是说:vtk中关于点、线、面的那些信息都是存放在cellarray中,应用时也是直接对cellarray指针进行处理,数据的写入和读取在vtkCellArray类完成。
  • vtkPolyData: 一种数据集。

2、单元类型

   数据集由一个或多个单元组成。一系列有序的点按指定类型连接所定义的结构就是单元(Cell),是VTK可视化系统的基础。这些顺序连接的点定义了单元的拓扑结构,而点的坐标定义了单元的几何结构。单元是由单元的类型和构成单元的顶点列表两部分构成的。
  单元类型的线性与非线性的划分主要是以插值函数为依据的。对于线性单元,采用的是线性或者常量插值函数。VTK里单元类型定义在vtkCellType.h文件里。下图是定义线性和非线性的Cell类型。
这里写图片描述

这里写图片描述
注意定义点的顺序。

  线性的cells绘制时先转换为线性基元,再直接被图形库所处理。而非线性的cells是不能直接被图形库所支持的,通常对于非线性cells的绘制是先把它们分解为线性的cells,再进行绘制。非线性类型的cell有:Quadratic Edge; Quadratic Triangle; Quadratic Quadrilateral; Quadratic Tetrahedron; Quadratic Hexahedron
分解的示意图:
这里写图片描述

属性数据

  属性数据(Attribute Data)主要用于描述数据集的属性特征,对数据集的可视化实质上就是对属性数据的可视化。根据数据的性质,属性数据可分为标量数据、矢量数据、张量数据等几大类。如下图所示:
这里写图片描述

06-VTK基本数据结构(5) 6.6 数据集的存储与表达 可视化数据自身的特点决定了数据对象内存的分配与管理必须谨慎处理才有可能创建出高效的可视化系统。VTK中对绝大多数的数据对象的内存分配采用连续内存,连续内存的结构可被快速地创建、删除和遍历,称为Data Array (数据数组),用类vtkDataArray实现。 6.6.1 vtkDataArray 数据数组的访问是基于索引的,从零开始计数。我们以vtkFloat 阅读详情

相关推荐

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

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

pizibing880909的专栏 3117

Hive案例项目实战

目录一、案例项目实施方案二、 RegexSerDe处理数据三、数据拆分四、UDF数据转换五、数据分析六、 一、案例项目实施方案 拿到源数据access.log之后,准备工作如下: 1.数据进行预处理,加载hive表之前 >>MR程序处理 >>正则表达式(企业推荐) >>python脚本 2.表拆分,源数据不变,创建对应业务需求的字表 3.基于子表的基础之上: 3-1.数据文件存储格式:orc/parquet 3-2.数据文件压缩:snappy 3-3.m

蔡政洁的博客 4305

VTK基本数据结构

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

小道士写程序 427

【VTK学习笔记-04】VTK基本数据结构

学习教程:《VTK图形图像开发进阶》张晓东,罗火灵 特别感谢:东灵工作室(1)离散性。(2)数据具有规则或不规则的结构(结构化与非结构化)(3)数据具有维度在VTK中,数据一般以数据对象Data Object,类vtkDataObject的形式表现,这是VTK中可视化数据最常用的表达形式。数据对象是数据的集合,只有当数据对象被组织成一种结构后,才能被VTK提供的可视化算法所处理。在实际应用中,根据具体的可视化数据选择具体的子类来实现可视化。将数据对象组织成一种结构并赋予相应的属性值,就形成了数据集。vtkD

m0_51141265的博客 719

VTK-不同类型的数据集

主要讲解vtk中不同类型的数据集以及它们之间的关系,如何进行转换等

qq_40041064的博客 1423

ActiViz中的数据对象vtkDataSet

在ActiViz中,vtkDataSet是表示VTK数据集的基类之一,它提供了一种统一的数据模型,用于表示各种类型的数据集。vtkDataSet是VTK数据处理流程的核心组件之一,它定义了数据的基本属性和操作方法,为数据的存储、操作和可视化提供了基础支持。

仰望星空的博客 386

VTK知识学习(13)- 基本数据结构(一)

前面介绍了VTK的一个重要概念--可视化管线,讲解了VTK数据的流动过程。针对可视化领域的特点,VTK定义了种类丰富的数据结构,下面将绍VTK的基本数据结构,了解这些数据结构,有助于写出更有针对性的、更高效的可视化应用程序。

weixin_45114627的博客 744

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

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

欧特GO 1229

6、VTK基本数据结构

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

yu132563的专栏 1940

Jetson-nano 编译实时内核并烧录

前言 之前一篇文章介绍了正常的烧录过程,使用的是默认内核,实际工作中需要对内核打补丁升级为实时内核,并对其重编译。 一、准备内容 官网大法好 官方内核下载链接 官方交叉编译器下载链接 官方文档 ubuntu主机一台 根据官网选择下载对应的文件, 1、L4TDriver Package (BSP) source jetson内核文件。 2、官方交叉编译器 因为我们不是在jetson上直接编译,而jetson是arm平台,所以要进行交叉编译。 二、使用步骤 1.解压 内核 tar -xjf public_s

ldl371122的博客 3288

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1952

VTK-抄书笔记(3)

本章主要介绍了VTK中的基本数据结构和相关概念。首先阐述了可视化数据的特点:离散性、结构化/非结构化特点以及维度特性。然后详细讲解了VTK的核心数据结构体系,包括vtkDataObject和vtkDataSet的基本结构,重点分析了数据集的组织结构(几何结构和拓扑结构)和属性数据(标量、矢量、张量等)。此外,还介绍了VTK支持的多种单元类型(线性和非线性)以及不同类型的数据集(如图像数据、多边形数据等)。最后讨论了数据存储方式,包括vtkDataArray的实现机制和vtkFieldData的表达方式。本章

qq_51627050的博客 2182

Codex Skill:AI编程助手的专项能力扩展与实战指南

在AI编程助手领域,Skill(技能)是一种标准化的能力扩展机制,它通过封装特定任务所需的指令、资源和脚本,解决AI模型在专项任务上的能力局限。其核心原理是将专业知识和工作流程模块化,让通用AI助手能够像领域专家一样执行复杂任务。从技术价值看,Skill不仅提升了代码生成的准确性,更重要的是实现了业务流程的自动化集成,如代码规范检查、API文档生成等具体场景。这种机制特别适用于需要结合内部工具链和特定业务逻辑的企业环境,能够显著提升开发效率和质量。通过安装PPT生成、SpringBoot项目创建等专项Ski

weixin_33672109的博客 414

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

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

u012959478的博客 2144

从零开始:EAS2+Elmo+Maxon电机调试全流程(含电流环优化技巧)

本文详细解析了从零开始搭建基于EAS2软件、Elmo驱动器和Maxon电机的运动控制系统的全流程。内容涵盖硬件连接规范、EAS2基础配置、核心的电流环模型辨识与手动优化技巧,以及速度环、位置环的搭建与调试策略,旨在帮助工程师构建稳定、高性能的伺服控制核心。

i0j1k2l3m的博客 503

[QMT量化交易小白入门]-三十五、如何将聚宽策略信号转为QMT实盘交易

Flask是一个轻量级的Web应用框架,它提供了简单而灵活的方式来构建Web应用程序。在本案例中,将使用Flask来搭建一个本地服务,用于监听来自jq2qmt.py脚本的交易信号,并根据信号执行相应的下单操作。

木头大左的博客 2696

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

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

qq_37373742的博客 2291

远程声控系统(MATLAB代码见优快云资源)

远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,完成不同的控制动作。 二、问题分解与解决思路 2.1 系统设计 实验中以汉语数字语音1~9作为指令,数字语音“1”代表一号指令,数字语音“2”代表二号指令,依次类推。发送端发出语音“1”,发送端对应的数字语音文件为“1b.wav”,通过信源编码对语音进行压缩编码,然后进行信道编码并进行基

业精于勤,荒于嬉 5735

VTK图形图像开发进阶-学习笔记 03 VTK的基本数据结构

3.1可视化数据的基本特点 (1)离散性 (2)数据具有规则或者不规则的结构(结构化与非结构化) (3)数据具有维度 3.2 数据对象和数据集 3.2.1 vtkDataObject VTK中,数据一般以数据对象(Data Object,类vtkDataObjiect)的形式表现,这是VTK里可视化数据最常用的表达形式。数据对象是数据的集合,数据对象表现的数据是可以被可视化管线处理的数据,只有当数据对象被组织成一种结构后,才能被VTK提供的可视化算法所处理。 3.2.2 vtkDa

wangxingxing321的博客 1954

数据资产可视化分析:PowerBI在大数据管理中的实战

目的:帮你搞懂“为什么数据资产需要可视化?”“PowerBI能帮企业解决什么问题?”,并掌握用PowerBI做大数据可视化的实战技巧。范围:覆盖数据资产定义、可视化分析原理、PowerBI核心功能(数据连接、建模、可视化)、零售企业实战案例,以及未来趋势与挑战。背景:为什么企业的数据像乱堆的玩具?核心概念:数据资产、可视化分析、PowerBI分别是什么?它们怎么配合?实战步骤:用PowerBI帮零售企业整理“销售玩具箱”,做出能指导决策的仪表盘;应用场景:不同部门怎么用这个“整理好的玩具箱”?

2501_92132293的博客 907

KEPServerEX作为MQTT客户端

打开软件: 测试没有连接上MQTT代理。

低码开发 1681

VTK_Learning_基本数据结构_数据对象&数据集

1. VTK中的数据对象(vtkDataObject) 在VTK中,数据一般以数据对象的形式表现,是VTK里可视化数据最一般的表达形式。数据对象是数据的集合,数据对象表现的数据是可以被可视化管线处理的数据,只有数据对象被组织成一种结构(Structure)后,才能被VTK提供的可视化算法处理。 下图是vtkDataObject类的继承图,VTK里所有的数据结构形式都是从这个类派生出来的,实...

weixin_38293453的博客 473

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

东灵工作室 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VTK学习(九)VTK基本数据结构

/*编程环境VS2013+VTK7.1,By yyy 2017.11.13*/ #include VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); #include #include #include #include #include #include int ma

yuyangyg的博客 1340

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

前言 数据结构对于可视化领域是非常重要的一个部分,我们需要将自己的数据读取,转换成VTK能够识别的数据这样才能实现数据的可视化,同时了解了这些数据结构对我们开发出高效、有针对性的的可视化应用程序非常重要。 可视化数据的基本特点 1、数据离散性 世界是连续的、无限的,但是能被计算机处理的数据都是离散的,数据基本上是以离散点的形式在计算机种进行存储,这就需要对现实世界的物体进行采样,数据获取设备基本上是每隔一定的间距获取一个点,这个过程就是一个离散的过程,所以数据具有离散性。 2、数据规则性 数据还

qq_42570058的博客 3329

VTK修炼之道11:基本数据结构_数据对象&数据集

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

沈春旭的博客 3253
上一篇: wxPython之GraphicsContext
下一篇: VTK基本数据结构之数据的存储和表达
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值