VTK学习笔记:数据集和单元集合介绍
2014-04-24 23:58
477 查看
数据集和单元集合:
1.数据可视化的特点
对数据可视化是VTK的主要功能,可视化模型的主要任务是对各种被可视化的数据进行组织和管理,形成具有一定结构形态的数据,然后映射到图形系统进行可视化处理,数据在可视化管线中流动的时候,每经过一次处理,数据都会从一种形态转变成另外一种形态,在VTK中,数据可视化具有如下的特点:
1、离散性
VTK可视化的数据都是离散的数据,这些离散的数据都是从一个无限的空间进行采样而得到的,用有限的离散数据近似的表达一个无限的空间,如对于二次方程y=x2,分别计算xi(i=1,2,...n)n个点的y值,形成n个离散点(x1,y1,....xn,yn),然后把这些点用连续的线段连接起来,构成要绘制的方程,用有限的离散点表现连续的空间,常用插值、二次、三次曲面、样条函数等算法对离散点进行处理。
2、数据的结构是规则(结构化)的或是不规则(非结构化)的
构成结构化数据的离散点之间具有一定的层次关系,如格网数据结构就是结构化的数据,离散数据点之间具有很强的逻辑关系,非结构化数据的离散点之间没有逻辑关系,常用于表现性质差异变化比较大的数据,如不均匀物体的密度等信息。
3、数据具有一定的空间尺度
VTK可视化的数据具有一定的空间尺度,如点表现为0维,一维的线、二维的面和三维的体等,对于不同维度的数据,VTK提供了不同的可视化方法。
二、数据集介绍
要完成如此丰富的可视化,那么就需要一个管理部门去管理这些数据,这就是数据集的强大的地方。
在VTK可视化管线中的数据对象,称为数据集,数据集主要由组织结构和数据属性两部分组成,如下图所示:
组织结构主要有几何数据和数据之间的拓扑关系组成,拓普关系描述了数据之间的一种固定的构成关系,在VTK中,这种构成关系被称为单元,几何数据用空间位置坐标表示,描述了数据在空间的位置,也描述了数据拓扑空间关系,如TIN数据由多个三角形构成,三角形被称为单元,描述这些单元所在空间的数据点就是几何数据。属性数据主要描述几何数据或单元数据的相关属性信息,如在地质应用中,常用属性数据表示某一个空间位置点的地层。
在VTK应用中,数据集的构成是很重要的内容,只有了解了这些,才能更好的构建自己需要可视化的数据。即使你不需要构建自己的数据,从文件里面加载进来,也要了解你的数据的格式吧。
三. 单元集合
如果你想要构建自己的数据,了解单元集合很有必要。
VTK的数据集对象主要由多个单元构成,如对于如下的多边形网格,其由多个四边形单元构成。
图中的各个顶点(1、2、3...25)定义了网格图形的几何形状,构成了数据集的几何数据,各个顶点依照构建的单元类型,按一定顺序排列,相互连通,构成了单元的拓扑结构,如在上图中,构建的单元类型为四边形单元,则第一个单元由1、6、7、2四个顶点按1、6、7、2顺序排列,构成一个四边形单元。
下面再给出一个6面体类型单元的例子,如下图所示:
图中的6面体单元由7、21、22、5、8、10、1、6共8个顶点构成,共有6个面、12条边,顶点8和10构成了一条边,顶点8、10、21、22构成了一个面,顶点坐标存储在顶点列表数组中,如图中左侧的Point list用于存储顶点坐标。
在VTK中提供了许多单元类型,下面只选择几个简单的单元进行介绍。
1、顶点单元
基本的0维度单元,用单一的点来定义,如下图所示:
2、多顶点单元
基本的0维度单元,用多个点来定义,如下图所示:
3、线单元
基本的1维单元,由两个顶点定义,线的方向从第一个顶点指向第二个顶点,如下图所示:
说了这么久,知道了数据集是什么,自己手动如何构建数据集呢?
#include<vtkPoints.h>
#include<vtkSmartPointer.h>
#include<vtkCellArray.h>
#include<vtkPolyData.h>
#include<vtkPolyDataMapper.h>
#include<vtkRotationalExtrusionFilter.h>
#include<vtkActor.h>
#include<vtkProperty.h>
#include<vtkRenderer.h>
#include<vtkRenderWindow.h>
#include<vtkRenderWindowInteractor.h>
intmain()
{
//定义瓶子轮廓线的点坐标,这里是点,你也可
vtkSmartPointer<vtkPoints>pPoints=vtkPoints::New();
pPoints->InsertPoint(0,0.01,0.0,0.0);
pPoints->InsertPoint(1,1.5,0.0,0.0);
pPoints->InsertPoint(2,1.5,0.0,3.5);
pPoints->InsertPoint(3,1.25,0.0,3.75);
pPoints->InsertPoint(4,0.75,0.0,4.00);
pPoints->InsertPoint(5,0.6,0.0,4.35);
pPoints->InsertPoint(6,0.7,0.0,4.65);
pPoints->InsertPoint(7,1.0,0.0,4.75);
pPoints->InsertPoint(8,1.0,0.0,5.0);
pPoints->InsertPoint(9,0.2,0.0,5.0);
//构建线单元,绘制轮廓线
vtkSmartPointer<vtkCellArray>pLineCell=vtkCellArray::New();
//构建一个单元,由10个点构成
pLineCell->InsertNextCell(10);
//构成单元点集的索引号
pLineCell->InsertCellPoint(0);
pLineCell->InsertCellPoint(1);
pLineCell->InsertCellPoint(2);
pLineCell->InsertCellPoint(3);
pLineCell->InsertCellPoint(4);
pLineCell->InsertCellPoint(5);
pLineCell->InsertCellPoint(6);
pLineCell->InsertCellPoint(7);
pLineCell->InsertCellPoint(8);
pLineCell->InsertCellPoint(9);
//定义多边形数据集
vtkSmartPointer<vtkPolyData>pPolyData=vtkPolyData::New();
//设置构成多边形的几何数据
pPolyData->SetPoints(pPoints);
//设置单元类型,线单元
pPolyData->SetLines(pLineCell);
//压制轮廓线,形成瓶子实体
vtkSmartPointer<vtkRotationalExtrusionFilter>pExtruFilter=vtkRotationalExtrusionFilter::New();
pExtruFilter->SetInput(pPolyData);
//设置生成瓶子表面的光滑度参数,瓶子的表面由多少个面构成
pExtruFilter->SetResolution(10);
//将数据映射到图形系统进行绘制
vtkSmartPointer<vtkPolyDataMapper>pMap=vtkPolyDataMapper::New();
pMap->SetInput(pExtruFilter->GetOutput());
vtkSmartPointer<vtkActor>pActor=vtkActor::New();
pActor->SetMapper(pMap);
pActor->GetProperty()->SetColor(0.3800,0.7000,0.1600);
//绘制
vtkSmartPointer<vtkRenderer>pRen=vtkRenderer::New();
pRen->AddActor(pActor);
//创建绘制窗体
vtkSmartPointer<vtkRenderWindow>pRenWin=vtkRenderWindow::New();
pRenWin->AddRenderer(pRen);
//创建交互器
vtkSmartPointer<vtkRenderWindowInteractor>pIren=vtkRenderWindowInteractor::New();
pIren->SetRenderWindow(pRenWin);
//设置背景颜色
pRen->SetBackground(1,1,1);
//设置窗口尺寸
pRenWin->SetSize(300,300);
pRenWin->Render();
pRen->ResetCamera();
//开始绘制
pIren->Initialize();
pIren->Start();
return 0;
}
[b]记住一点:数据集包含2部分:组织结构(单元 + 描述这些单元所在空间的数据点的几何数据)+属性[/b]
1.数据可视化的特点
对数据可视化是VTK的主要功能,可视化模型的主要任务是对各种被可视化的数据进行组织和管理,形成具有一定结构形态的数据,然后映射到图形系统进行可视化处理,数据在可视化管线中流动的时候,每经过一次处理,数据都会从一种形态转变成另外一种形态,在VTK中,数据可视化具有如下的特点:
1、离散性
VTK可视化的数据都是离散的数据,这些离散的数据都是从一个无限的空间进行采样而得到的,用有限的离散数据近似的表达一个无限的空间,如对于二次方程y=x2,分别计算xi(i=1,2,...n)n个点的y值,形成n个离散点(x1,y1,....xn,yn),然后把这些点用连续的线段连接起来,构成要绘制的方程,用有限的离散点表现连续的空间,常用插值、二次、三次曲面、样条函数等算法对离散点进行处理。
2、数据的结构是规则(结构化)的或是不规则(非结构化)的
构成结构化数据的离散点之间具有一定的层次关系,如格网数据结构就是结构化的数据,离散数据点之间具有很强的逻辑关系,非结构化数据的离散点之间没有逻辑关系,常用于表现性质差异变化比较大的数据,如不均匀物体的密度等信息。
3、数据具有一定的空间尺度
VTK可视化的数据具有一定的空间尺度,如点表现为0维,一维的线、二维的面和三维的体等,对于不同维度的数据,VTK提供了不同的可视化方法。
二、数据集介绍
要完成如此丰富的可视化,那么就需要一个管理部门去管理这些数据,这就是数据集的强大的地方。
在VTK可视化管线中的数据对象,称为数据集,数据集主要由组织结构和数据属性两部分组成,如下图所示:
组织结构主要有几何数据和数据之间的拓扑关系组成,拓普关系描述了数据之间的一种固定的构成关系,在VTK中,这种构成关系被称为单元,几何数据用空间位置坐标表示,描述了数据在空间的位置,也描述了数据拓扑空间关系,如TIN数据由多个三角形构成,三角形被称为单元,描述这些单元所在空间的数据点就是几何数据。属性数据主要描述几何数据或单元数据的相关属性信息,如在地质应用中,常用属性数据表示某一个空间位置点的地层。
在VTK应用中,数据集的构成是很重要的内容,只有了解了这些,才能更好的构建自己需要可视化的数据。即使你不需要构建自己的数据,从文件里面加载进来,也要了解你的数据的格式吧。
三. 单元集合
如果你想要构建自己的数据,了解单元集合很有必要。
VTK的数据集对象主要由多个单元构成,如对于如下的多边形网格,其由多个四边形单元构成。
图中的各个顶点(1、2、3...25)定义了网格图形的几何形状,构成了数据集的几何数据,各个顶点依照构建的单元类型,按一定顺序排列,相互连通,构成了单元的拓扑结构,如在上图中,构建的单元类型为四边形单元,则第一个单元由1、6、7、2四个顶点按1、6、7、2顺序排列,构成一个四边形单元。
下面再给出一个6面体类型单元的例子,如下图所示:
图中的6面体单元由7、21、22、5、8、10、1、6共8个顶点构成,共有6个面、12条边,顶点8和10构成了一条边,顶点8、10、21、22构成了一个面,顶点坐标存储在顶点列表数组中,如图中左侧的Point list用于存储顶点坐标。
在VTK中提供了许多单元类型,下面只选择几个简单的单元进行介绍。
1、顶点单元
基本的0维度单元,用单一的点来定义,如下图所示:
2、多顶点单元
基本的0维度单元,用多个点来定义,如下图所示:
3、线单元
基本的1维单元,由两个顶点定义,线的方向从第一个顶点指向第二个顶点,如下图所示:
说了这么久,知道了数据集是什么,自己手动如何构建数据集呢?
#include<vtkPoints.h>
#include<vtkSmartPointer.h>
#include<vtkCellArray.h>
#include<vtkPolyData.h>
#include<vtkPolyDataMapper.h>
#include<vtkRotationalExtrusionFilter.h>
#include<vtkActor.h>
#include<vtkProperty.h>
#include<vtkRenderer.h>
#include<vtkRenderWindow.h>
#include<vtkRenderWindowInteractor.h>
intmain()
{
//定义瓶子轮廓线的点坐标,这里是点,你也可
vtkSmartPointer<vtkPoints>pPoints=vtkPoints::New();
pPoints->InsertPoint(0,0.01,0.0,0.0);
pPoints->InsertPoint(1,1.5,0.0,0.0);
pPoints->InsertPoint(2,1.5,0.0,3.5);
pPoints->InsertPoint(3,1.25,0.0,3.75);
pPoints->InsertPoint(4,0.75,0.0,4.00);
pPoints->InsertPoint(5,0.6,0.0,4.35);
pPoints->InsertPoint(6,0.7,0.0,4.65);
pPoints->InsertPoint(7,1.0,0.0,4.75);
pPoints->InsertPoint(8,1.0,0.0,5.0);
pPoints->InsertPoint(9,0.2,0.0,5.0);
//构建线单元,绘制轮廓线
vtkSmartPointer<vtkCellArray>pLineCell=vtkCellArray::New();
//构建一个单元,由10个点构成
pLineCell->InsertNextCell(10);
//构成单元点集的索引号
pLineCell->InsertCellPoint(0);
pLineCell->InsertCellPoint(1);
pLineCell->InsertCellPoint(2);
pLineCell->InsertCellPoint(3);
pLineCell->InsertCellPoint(4);
pLineCell->InsertCellPoint(5);
pLineCell->InsertCellPoint(6);
pLineCell->InsertCellPoint(7);
pLineCell->InsertCellPoint(8);
pLineCell->InsertCellPoint(9);
//定义多边形数据集
vtkSmartPointer<vtkPolyData>pPolyData=vtkPolyData::New();
//设置构成多边形的几何数据
pPolyData->SetPoints(pPoints);
//设置单元类型,线单元
pPolyData->SetLines(pLineCell);
//压制轮廓线,形成瓶子实体
vtkSmartPointer<vtkRotationalExtrusionFilter>pExtruFilter=vtkRotationalExtrusionFilter::New();
pExtruFilter->SetInput(pPolyData);
//设置生成瓶子表面的光滑度参数,瓶子的表面由多少个面构成
pExtruFilter->SetResolution(10);
//将数据映射到图形系统进行绘制
vtkSmartPointer<vtkPolyDataMapper>pMap=vtkPolyDataMapper::New();
pMap->SetInput(pExtruFilter->GetOutput());
vtkSmartPointer<vtkActor>pActor=vtkActor::New();
pActor->SetMapper(pMap);
pActor->GetProperty()->SetColor(0.3800,0.7000,0.1600);
//绘制
vtkSmartPointer<vtkRenderer>pRen=vtkRenderer::New();
pRen->AddActor(pActor);
//创建绘制窗体
vtkSmartPointer<vtkRenderWindow>pRenWin=vtkRenderWindow::New();
pRenWin->AddRenderer(pRen);
//创建交互器
vtkSmartPointer<vtkRenderWindowInteractor>pIren=vtkRenderWindowInteractor::New();
pIren->SetRenderWindow(pRenWin);
//设置背景颜色
pRen->SetBackground(1,1,1);
//设置窗口尺寸
pRenWin->SetSize(300,300);
pRenWin->Render();
pRen->ResetCamera();
//开始绘制
pIren->Initialize();
pIren->Start();
return 0;
}
[b]记住一点:数据集包含2部分:组织结构(单元 + 描述这些单元所在空间的数据点的几何数据)+属性[/b]
相关文章推荐
- VTK学习笔记:数据集之非结构化网格集
- Java学习笔记31(集合框架五:set接口、哈希表的介绍)
- VTK学习笔记:数据集之多边形数据集
- [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存
- Java学习笔记 13 Java 集合 Collection 基本介绍
- VTK学习笔记:数据集之结构化点集
- C#学习笔记 常用的集合
- AngularJs学习笔记1——总体介绍
- 7、linux学习笔记--Linux 各目录及每个目录的详细介绍
- Java学习笔记之集合(八):HashMap的存储原理
- java 集合学习笔记
- Mysql学习笔记1-基本介绍及基本增删改查操作
- Java学习笔记(一) java介绍
- (一)机器学习 介绍(个人学习笔记)
- 学习笔记-基础知识8-集合框架(1)上
- 我的Cocos2d-x学习笔记(二)AppDelegate补充介绍
- android开发学习笔记(2)android的基本介绍
- 深度学习数据集MNIST ImageNet COCO PASCAL VOC介绍
- JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(2)
- 5.3.vue入门基础学习笔记-基础指令介绍(属性绑定v-bind)