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

时间:2017-08-13 21:35:45

标签: python csv numpy vtk paraview

我有一个带有压力数据和几何的CSV文件,我从ANSYS Mechanical导出,我希望在Paraview中可视化。每个节点都有一堆与之相关的压力数据。我在Paraview中管理点作为点云,但我也想重新创建ANSYS网格。我认为Paraview中的“可编程源”可能是一种替代方式,并且通过一些googleing我可能想出如何将数据读入numpy数组但基本问题是,我如何在Paraview中从可编程源创建网格和细胞/面孔? 我的CSV文件如下所示:

public static void main(String [] args){
    Scanner sca = new Scanner(System.in);
    System.out.println("Please type some words, then press enter: ");
    String sentences= sca.nextLine();
    String []count_words= sentences.split(" ");
    for(String count : count_words){
    System.out.println("number of word is "+count.length());}
}

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

1 个答案:

答案 0 :(得分:1)

以下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)上使用可编程过滤器。这样我就不确定如何将节点和面数据输入到单独的对象中。