用python读取的vtk文件结构

问题描述 投票:0回答:1

我有一个vtk文件,我需要从中提取一个三维速度矢量。我从来没有使用过,所以我不知道它包含什么,如何从中提取信息。

在堆栈溢出中我发现了这个问题 在Python中保存VTK的数据数组。这帮助了我,我能够提取我的数据。

这是我使用的脚本。

import vtk as v
import numpy as np

Filename = 'filename.vtk'
reader = v.vtkUnstructuredGridReader()
reader.SetFileName(Filename)
reader.ReadAllScalarsOn()
reader.ReadAllVectorsOn()

pa = v.vtkPassArrays()
pa.SetInputConnection(reader.GetOutputPort())
pa.AddArray(0, 'velocity_magnitude' )
print(pa)

writer = v.vtkDataSetWriter()
writer.SetFileName('test.vtk')
writer.SetInputConnection(pa.GetOutputPort())
writer.Update()
writer.Write()

这是我最后得到的文件。 And this is the file I ended up with:

# vtk DataFile Version 4.2
vtk output
ASCII
DATASET UNSTRUCTURED_GRID
FIELD FieldData 6
Nek_SpectralElementData 1 4 int
8 8 8 512 
avtOriginalBounds 1 6 double
0 6.283185482 -1 1 0 3.141592741 
VolumeDependent 1 1 bit
0 
MeshName 1 1 string
mesh

CYCLE 1 1 int
1000 
TIME 1 1 double
20 
POINTS 262144 float
0 -1 1.5708 0.0503675 -1 1.5708 0.160339 -1 1.5708 
0.310507 -1 1.5708 0.474891 -1 1.5708 0.625059 -1 1.5708 
0.735031 -1 1.5708 0.785398 -1 1.5708 0 -0.997435 1.5708 
0.0503675 -0.997435 1.5708 0.160339 -0.997435 1.5708 0.310507 -0.997435 1.5708 

.
.
.
CELLS 175616 1580544
8 0 1 9 8 64 65 73 72 
8 64 65 73 72 128 129 137 136 
8 128 129 137 136 192 193 201 200 
8 192 193 201 200 256 257 265 264 
8 256 257 265 264 320 321 329 328 

.
.
.

CELL_TYPES 175616
12
12
12
12

.
.
.
POINT_DATA 262144
VECTORS velocity float
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0.0113612 1.21843e-05 0.000552347 
0.0115553 1.12597e-05 0.000419801 0.0121388 6.55409e-06 -0.000110149 0.0128729 -5.02466e-06 -0.000602613 

所以,我做了一些研究,我明白了 在第一部分我有点的坐标,但为什么每行有9个点?然后我明白了,这些点是由六面体单元连接的,有175616个单元,每个单元有8个点,接下来我们有它们的角的位置,但我不知道它们是怎么写的.在最后一部分,我终于有了我的速度矢量,但同样,为什么每行有9个分量?这些点又是如何排列的?第一行的速度与哪个点有关?第二条,还是第三条?

如果你知道一些指南,我可以在那里读到如何理解这个文件,你会有很大的帮助。

非常感谢您!我有一个vtk文件,我可以读到如何理解这个文件,你会帮助很多。

python vtk
1个回答
3
投票

在VTK文件格式的数据集属性部分,行的白色空间被忽略。 所以点和向量总是作为3个浮点数的集合,不管行的终点在哪里。

你的POINTS部分有262144个点,所以假设后面的数据中有3*262144个浮点数,对应每个点的X-Y-Z位置。

POINT_DATA也是一样。 你有262144个条目,直接映射到前面的POINTS。 而VECTOR部分假设有3*262144个值对应点。 而同样,行进也被忽略了。

下面是VTK格式的文档。https:/vtk.orgwp-contentuploads201504file-formats.pdf。


1
投票

你可以在这里找到关于CELL和CELL_TYPES的信息。用python读取和绘制VTK文件的数据结构。 和这里。https:/lorensen.github.ioVTKExamplessiteVTKFileFormats#dataset-format。 也是。

在你的3D点的数据录入中,连续有9个条目可能看起来很混乱。但如果你用3元组来计算,不管你一行有多少个条目,你最终应该在POINT部分下有262144个点,例如。而每个点由3个条目的元组(x,y,z)来表示。

© www.soinside.com 2019 - 2024. All rights reserved.