从 Paraview 中的单元格和点创建网格

Create mesh from cells and points in Paraview

我有一个 CSV 文件,其中包含我从 ANSYS Mechanical 导出的应力数据和几何图形,我想在 Paraview 中对其进行可视化。每个节点都有一堆与之相关的压力数据。我设法在 Paraview 中将点作为点云导入,但我也想重新创建 ANSYS 网格。我认为 Paraview 中的 "programable source" 可能是另一种方法,通过一些谷歌搜索,我可能会弄清楚如何将数据读入 numpy 数组,但基本问题是,如何在 Paraview 中的可编程源中创建网格点和 cells/faces? 我的 CSV 文件看起来像这样:

Node, X, Y, Z, Stress_data
1, 1.0, 1.0, 1.0, 123
2, 2.0, 2.0, 2.0, 234
3, 3.0, 3.0, 3.0, 345
...

Faces
1, 2, 3
3, 4, 5
...

更新
Here 是一个 link 示例 csv 文件(包括连接列),网格在 Ansys 中的外观,网格在 Paraview 中的外观以及稍微修改的脚本。

以下 python 脚本从您的 csv 文件创建一个 polydata 对象并将其写入一个文件,该文件可以在 paraview 中读取:

import vtk

f = open('Example-2.csv')

pd = vtk.vtkPolyData()
points = vtk.vtkPoints()
cells = vtk.vtkCellArray()
connectivity = vtk.vtkIntArray()
connectivity.SetName('Connectivity')
stress = vtk.vtkFloatArray()
stress.SetName('Stress')

line = f.readline()
for line in iter(lambda: f.readline(), ""):
    if 'Faces' in line:
        break
    v = line.split(',')
    points.InsertNextPoint(float(v[1]),
                           float(v[2]),
                           float(v[3]))
    stress.InsertNextTuple1(float(v[5]))
    connectivity.InsertNextTuple1(float(v[4]))

for line in iter(lambda: f.readline(), ""):
    v = line.split(',')
    cell = vtk.vtkTriangle()
    Ids = cell.GetPointIds()
    for kId in range(len(v)):
        Ids.SetId(kId,int(v[kId]))
    cells.InsertNextCell(cell)
f.close()

pd.SetPoints(points)
pd.SetPolys(cells)
pd.GetPointData().AddArray(stress)
pd.GetPointData().AddArray(connectivity)

writer = vtk.vtkXMLPolyDataWriter()
writer.SetFileName('Example-2.vtp')
writer.SetInputData(pd)

writer.Write()

或者您可以在 csv 文件上使用可编程过滤器 (see here)。这样我不确定如何将节点和面数据馈送到单独的对象中。