2017-08-13 491 views
0

我有一个CSV文件,其中包含从ANSYS Mechanical中导出的应力数据和几何图形,我希望在Paraview中将其可视化。每个节点都有一堆与之相关的压力数据。我在Paraview中将点导入为点云,但我也想重新创建ANSYS网格。我认为Paraview中的“可编程源代码”可能是一种替代方法,并且有些googleing可能会弄清楚如何将数据读入numpy数组中,但根本问题是,如何在Paraview中的可编程源代码中创建网格和细胞/面孔? 我的CSV文件看起来是这样的:从Paraview中的单元格和点创建网格

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是一个示例CSV文件(包含连接列),网格的外观Ansys中的链接时,网格如何看起来的Paraview和略修改脚本。

回答

0

下面的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)。这样我不知道如何将节点和面部数据提供给不同的对象。

+0

感谢您的解决方案,它几乎解决了我的问题。我能够生成vtp文件,但模型在Paraview中看起来很奇怪。或者我的csv文件存在一些问题,或者我不明白。在csv数组中还有一个'连通性'列,我认为没有必要创建模型,这可能是问题的一部分吗?我很高兴分享一个真正的例子csv和cgns我怎么想网格会看看你是否有兴趣继续帮助我 – Klabbedi

+0

也许模型看起来很奇怪,因为你的脸(1,2,3)的点是共线的吗?另外,我的印象是连通性是给定的在“Faces”下面,还有哪些连接信息? – mululu

+0

我现在已经更新了问题,并链接了一些示例文件,有什么想法? – Klabbedi