VTK 数据类型:数据的属性
VTK 数据类型:数据的属性
VTK 中数据类型的继承关系
数据的结构和属性
数据结构:
- 几何结构:由 points 定义
- 拓扑结构:由 cells 定义
数据属性:主要有标量、矢量、法向量、张量、纹理坐标等。
五种可视化方法都做了什么?
- 颜色映射:展示标量(scalars)属性,根据标量的值设置颜色。
- 等值面:根据标量(scalars)属性提取结构。
- Glyph:展示法向量(normals)属性。
- 流线、流管、流面、流带:根据矢量(vectors)属性提取结构。
- Cutting&Probing:结构变换,用一个结构把属性从另一个结构中提取出来。
实例 1:打印一个平面的结构信息
构建一个横轴采样点为5,纵轴采样点3的平面,获取其多边形数据,打印其结构信息。
#include "VTKDataAttributes.h"
#include <vtkPlaneSource.h>
#include <vtkPolyData.h>
#include <vtkNamedColors.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
VTKDataAttributes::VTKDataAttributes(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
_pVTKWidget = new QVTKOpenGLNativeWidget();
this->setCentralWidget(_pVTKWidget);
vtkNew<vtkRenderer> renderer;
this->_pVTKWidget->renderWindow()->AddRenderer(renderer);
this->_pVTKWidget->renderWindow()->Render();
vtkNew<vtkNamedColors> colors;
vtkNew<vtkPlaneSource> plane;
int resolutionX = 5, resolutionY = 3;
plane->SetXResolution(resolutionX);
plane->SetYResolution(resolutionY);
plane->Update();
vtkPolyData* poly = plane->GetOutput();
poly->Print(std::cout);
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputData(poly);
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
renderer->AddActor(actor);
}
VTKDataAttributes::~VTKDataAttributes()
{}
运行结果,已经切换到了线框模式:
poly->Print(std::cout);
打印的多边形信息如下所示:
vtkPolyData (00000277CCEAD310)
Debug: Off
Modified Time: 1221
Reference Count: 3
Registered Events: (none)
Information: 00000277CF319C80
Data Released: False
Global Release Data: Off
UpdateTime: 1222
Field Data:
Debug: Off
Modified Time: 1178
Reference Count: 1
Registered Events: (none)
Number Of Arrays: 0
Number Of Components: 0
Number Of Tuples: 0
Number Of Points: 24
Number Of Cells: 15
Cell Data:
Debug: Off
Modified Time: 1186
Reference Count: 1
Registered Events:
Registered Observers:
vtkObserver (00000277CF346030)
Event: 33
EventName: ModifiedEvent
Command: 00000277CF2C1D50
Priority: 0
Tag: 1
Number Of Arrays: 0
Number Of Components: 0
Number Of Tuples: 0
Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 1 1 1 1 )
Interpolate Flags: ( 1 1 1 1 1 0 0 1 1 1 1 0 )
Pass Through Flags: ( 1 1 1 1 1 1 1 1 1 1 1 1 )
Scalars: (none)
Vectors: (none)
Normals: (none)
TCoords: (none)
Tensors: (none)
GlobalIds: (none)
PedigreeIds: (none)
EdgeFlag: (none)
Tangents: (none)
RationalWeights: (none)
HigherOrderDegrees: (none)
ProcessIds: (none)
Point Data:
Debug: Off
Modified Time: 1220
Reference Count: 1
Registered Events:
Registered Observers:
vtkObserver (00000277CF346930)
Event: 33
EventName: ModifiedEvent
Command: 00000277CF2C1D50
Priority: 0
Tag: 1
Number Of Arrays: 2
Array 0 name = Normals
Array 1 name = TextureCoordinates
Number Of Components: 5
Number Of Tuples: 24
Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 1 1 1 1 )
Interpolate Flags: ( 1 1 1 1 1 0 0 1 1 1 1 0 )
Pass Through Flags: ( 1 1 1 1 1 1 1 1 1 1 1 1 )
Scalars: (none)
Vectors: (none)
Normals:
Debug: Off
Modified Time: 1213
Reference Count: 1
Registered Events: (none)
Name: Normals
Data type: float
Size: 72
MaxId: 71
NumberOfComponents: 3
Information: 0000000000000000
Name: Normals
Number Of Components: 3
Number Of Tuples: 24
Size: 72
MaxId: 71
LookupTable: (none)
TCoords:
Debug: Off
Modified Time: 1217
Reference Count: 1
Registered Events: (none)
Name: TextureCoordinates
Data type: float
Size: 48
MaxId: 47
NumberOfComponents: 2
Information: 0000000000000000
Name: TextureCoordinates
Number Of Components: 2
Number Of Tuples: 24
Size: 48
MaxId: 47
LookupTable: (none)
Tensors: (none)
GlobalIds: (none)
PedigreeIds: (none)
EdgeFlag: (none)
Tangents: (none)
RationalWeights: (none)
HigherOrderDegrees: (none)
ProcessIds: (none)
Bounds:
Xmin,Xmax: (-0.5, 0.5)
Ymin,Ymax: (-0.5, 0.5)
Zmin,Zmax: (0, 0)
Compute Time: 1358
Editable: false
Number Of Points: 24
Point Coordinates: 00000277CF3060B0
PointLocator: 0000000000000000
CellLocator: 0000000000000000
Number Of Vertices: 0
Number Of Lines: 0
Number Of Polygons: 15
Number Of Triangle Strips: 0
Number Of Pieces: 1
Piece: 0
Ghost Level: 0
CellsBounds:
Xmin,Xmax: (-0.5, 0.5)
Ymin,Ymax: (-0.5, 0.5)
Zmin,Zmax: (0, 0)
CellsBounds Time: 1359
可以看出只有几何结构信息和拓扑结构信息,没有属性信息。
实例 2:添加颜色属性到单元(Cell)和顶点(Point)上
添加颜色属性到单元(Cell)上:
vtkNew<vtkUnsignedCharArray> cellData;
cellData->SetNumberOfComponents(3);
cellData->SetNumberOfTuples(poly->GetNumberOfCells());
double rgb[][3] = { {255, 0, 0}, {0, 255, 0}, {0, 0, 255} }; // 红、绿、蓝
for (size_t i = 0; i < poly->GetNumberOfCells(); i++)
cellData->InsertTuple(i, rgb[i % 3]);
poly->GetCellData()->SetScalars(cellData);
从左下角开始,逐行给每一个网格依次设置红、绿、蓝的颜色。
添加颜色属性到顶点(Point)上:
vtkNew<vtkPolyData> pointPoly;
pointPoly->DeepCopy(cellPoly);
vtkNew<vtkUnsignedCharArray> pointData;
pointData->SetNumberOfComponents(3);
pointData->SetNumberOfTuples(pointPoly->GetNumberOfPoints());
for (size_t i = 0; i < pointPoly->GetNumberOfPoints(); i++)
pointData->InsertTuple(i, rgb[i % 3]);
pointPoly->GetPointData()->SetScalars(pointData);
运行结果:
切换成线框模式: