2026.1.6随笔:实习第十二天(学VTK文件结构,写转换函数)

今天上午主要是把昨天说的导入文件函数给重新写了一下(重构),然后解决了点击按钮属性面板消失的bug

下午mentor先让我看一下VTK相关的知识,然后给了我两个将其他文件内容转换为VTK文件的函数,然后估计是要我把之前导入的mesh.txt文件转换为VTK文件

果然,mentor下午在我看得差不多了之后,开了个会给我讲了一下VTK文件,然后就让我先写一个txtvtk文件的接口。

然后本来是应该直接注册到DataManaer里面的成员变量的,现在打算直接从函数返回,现在在搞这个

然后搞完了就一直在看这个渲染不出来的问题:

  • vtk头文件没包含
  • vtk文件格式错误
1
2
3
auto *pGridWidget = new CFDApplicationUnStructGridWidget();
pGridWidget->setUnstructuredGrid(pGrid);
emit ACFEASigsCenter::getInstance() -> sig_addMainWindowRightTabWidget(u8"网格数据", pGridWidget);
  • 中间那一行代码相当于是注册的,缺了渲染不出来

image-20260106174118464

然后这个mesh.txt文件分两个部分,相当于有两个矩阵,第一个矩阵描述空间里面的点,第二个矩阵描述的是点之间的连接关系

image-20260106142848074

vtk文件里面主要就是以下部分,第一个部分就是描述点的三维坐标,第二部分就是表示这些点的连接情况,第三部分表示这几个点连成的形状是啥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# vtk DataFile Version 4.0
Unstructured Grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 4495 float
-0.50000000 0.00000000 3.00000000
-0.49039256 -0.09754560 3.00000000
-0.46193925 -0.19134311 3.00000000
......
-0.35355534 -0.35355217 0.40000000
-0.35355545 -0.35355209 0.30000000
-0.35355557 -0.35355200 0.20000000
-0.35355569 -0.35355191 0.10000000

CELLS 3840 34560
8 15 14 79 81 290 291 292 293
8 290 291 292 293 294 295 296 297
8 294 295 296 297 298 299 300 301
......
8 4085 4056 3560 3559 4086 4057 3562 3561
8 4086 4057 3562 3561 4087 4058 3564 3563
8 4087 4058 3564 3563 4088 4059 3566 3565
8 4088 4059 3566 3565 161 162 229 211

CELL_TYPES 3840
12
12
12
12
12
......

下面是AI生成的对VTK文件的描述:

根据你提供的 mesh.vtk 文件内容和 VTK 官方标准,一个传统的 VTK (Legacy) 文件通常由 5 个核心部分组成。前三个部分是必须的,后两个部分根据数据内容可选。

以下是针对你上传的文件的详细拆解:

1. 文件版本与标识 (File Version and Identifier)

  • 内容# vtk DataFile Version 4.0
  • 作用:这是文件的第一行,指明该文件符合 VTK 4.0 版本的格式规范。

2. 标题/描述行 (Header/Title)

  • 内容Unstructured Grid
  • 作用:这是一个长度限制在 256 字符以内的字符串,用于描述该文件的内容(如模型名称或生成时间)。在你的文件中,它简单地写成了“非结构化网格”。

3. 文件格式 (File Format)

  • 内容ASCII
  • 作用:指定后续数据是以 ASCII(纯文本) 还是 BINARY(二进制) 格式存储。ASCII 格式的好处是可以用记事本直接读取和修改。

4. 数据集结构 (Dataset Structure)

这一部分定义了网格的几何形状和拓扑连接,是 VTK 文件最核心的部分。你的文件包含以下三个子块:

  • ==类型声明:DATASET UNSTRUCTURED_GRID。表明这是一个非结构化网格,可以包含任意形状的单元。==
  • ==几何坐标 (POINTS):POINTS 247 float 后接 247 组三维坐标。定义了空间中所有点的位置。==
  • ==拓扑连接 (CELLS & CELL_TYPES):==
    • ==CELLS 216 1080:定义了 216 个单元(块),每行记录一个单元由哪些点组成。==
    • ==CELL_TYPES 216:定义了这 216 个单元的形状(例如 9 代表四边形)。==

5. 数据属性 (Dataset Attributes) —— 注:你的文件中暂未显示此项

  • 作用:通常以 POINT_DATACELL_DATA 开头,用于存储具体的物理量(如温度、压力、颜色等)。
  • 示例:如果在你的 mesh.vtk 后面加上每个点的温度值,就会出现在这个部分。