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);

运行结果:

在这里插入图片描述

切换成线框模式:

在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
vtk是一种用于科学可视化的文件格式,可以用于可视化计算流体力学、有限元分析、图像处理等领域的数据。生成vtk文件的代码通常使用编程语言,比如C++。 生成vtk文件的代码通常需要包含以下几个步骤: 1. 创建vtk数据集:首先需要创建对应数据类型vtk数据集,比如点云数据集、多边形数据集等。 2. 填充数据:将需要可视化的数据填充到vtk数据集中,可以是从文件中读取,也可以是计算得到的数据。 3. 设置数据属性:设置数据集的属性,比如点的坐标、颜色、标量值等。 4. 写入vtk文件:最后将填充好数据vtk数据集写入vtk文件中。 以下是一个简单的用C++生成vtk文件的示例代码: ```c++ #include <vtkSmartPointer.h> #include <vtkPoints.h> #include <vtkPointData.h> #include <vtkPolyData.h> #include <vtkPolyDataWriter.h> int main() { // 创建点集数据 vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); points->InsertNextPoint(0.0, 0.0, 0.0); points->InsertNextPoint(1.0, 0.0, 0.0); points->InsertNextPoint(0.0, 1.0, 0.0); // 创建多边形数据 vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New(); polydata->SetPoints(points); // 创建vtk数据写入器 vtkSmartPointer<vtkPolyDataWriter> writer = vtkSmartPointer<vtkPolyDataWriter>::New(); writer->SetFileName("output.vtk"); writer->SetInputData(polydata); // 写入vtk文件 writer->Write(); return 0; } ``` 这段代码创建了一个包含三个点的vtk文件,并将其保存为output.vtk。实际上,生成vtk文件的代码会更加复杂,会涉及更多的数据处理和属性设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

UestcXiye

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

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

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

打赏作者

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

抵扣说明:

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

余额充值