2017-08-13 98 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