VTK 数据类型:数据的属性

VTK 数据类型:数据的属性

VTK 中数据类型的继承关系

在这里插入图片描述

数据的结构和属性

数据结构:

  1. 几何结构:由 points 定义
  2. 拓扑结构:由 cells 定义

数据属性:主要有标量、矢量、法向量、张量、纹理坐标等。

在这里插入图片描述

五种可视化方法都做了什么?

  1. 颜色映射:展示标量(scalars)属性,根据标量的值设置颜色。
  2. 等值面:根据标量(scalars)属性提取结构。
  3. Glyph:展示法向量(normals)属性。
  4. 流线、流管、流面、流带:根据矢量(vectors)属性提取结构。
  5. 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);

运行结果:

在这里插入图片描述

切换成线框模式:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值