Paraview 脚本导出 CSV 文件中的位置
Paraview script to export position in a CSV file
我有 vtk
个数值模拟文件,我通常使用 ParaView
进行可视化。我想在 LaTeX
文档中绘制一些结果。为此,我喜欢使用 CSV
文件。好处是 Paraview
可以将数据导出到 CSV
文件中。因此,我能够将可变密度的完整时间序列导出到一系列 CSV
个文件中。
但是,我想将该职位包含在这些 CSV
文件中。
这是我现在可以做的事情:
#### import the simple module from the paraview
from paraview.simple import *
import os
#### disable automatic camera reset on 'Show'
paraview.simple._DisableFirstRenderCameraReset()
### MY VARIABLES
Folder_output='E:\My Documents\VTKfiles'
FileNames_list=[os.path.join(Folder_output, f) for f in os.listdir(Folder_output) if os.path.isfile(os.path.join(Folder_output, f))]
nb_tStep=len(FileNames_list)
Arrays_out_list=[ 'Structured Coordinates:0', 'Structured Coordinates:1' ,' Structured Coordinates:2', 'density',]
CSV_File_Names='E:/My Documents/Results'
for t in range(0,nb_tStep):
output_LBM_ = LegacyVTKReader(FileNames=FileNames_list[t] )
####
PassArrays1 = PassArrays()
PassArrays1.PointDataArrays = Arrays_out_list
source = PassArrays1
writer = CreateWriter(CSV_File_Names+"{}.csv".format(t), source)
writer.FieldAssociation = "Points" # or "Cells"
writer.UpdatePipeline()
del writer
有(至少)三个选项可以使用 Paraview or/and VTK APIs.
从 VTK 遗留文件中检索您的点和变量
使用 Paraview API
from paraview.simple import *
cylindervtk = LegacyVTKReader(FileNames=['./cylinder.vtk'])
SaveData('./output.csv', proxy=cylindervtk)
和运行它使用pvpython
:
pvpython vtk_output_csv.py
您将获得一个类似于此的 CSV 文件:
"density","Points:0","Points:1","Points:2"
1.2,0.5,0.5,0
1.2,0.5,-0.5,0
1.2,0.40451,0.5,-0.29389
1.2,0.40451,-0.5,-0.29389
1.2,0.15451,0.5,-0.47553
1.2,0.15451,-0.5,-0.47553
1.2,-0.15451,0.5,-0.47553
1.2,-0.15451,-0.5,-0.47553
1.2,-0.40451,0.5,-0.29389
1.2,-0.40451,-0.5,-0.29389
1.2,-0.5,0.5,-6.1232e-17
...
稍后您可以在脚本(Python 或其他任何东西)上使用它来执行一些 post 处理或绘图操作。
使用 Paraview 和 VTK APIs
虽然第一个选项很简洁,但是你必须把你的数据写到你的硬盘上,而且你可能需要稍后重新加载它们。如果您只想在一个 python 脚本中执行 post 处理或绘图操作,那么您就是在白白地在硬盘驱动器上写入临时数据。
以下代码利用了 numpy integration with VTK。它使您能够将坐标和点数据加载到 numpy 数组中,并在最后将它们导出到 CSV 文件(或其他任何文件)中:
from paraview.simple import *
from vtk.numpy_interface import dataset_adapter as dsa
import numpy as np
#Paraview reader
pv_reader = LegacyVTKReader(FileNames=['./cylinder.vtk'])
#Fetch the reader data and store them locally into a VTK object
vtk_data = servermanager.Fetch(pv_reader)
#Wrap the vtk_data VTK object to get the coordinates and PointData as numpy arrays
vtk_dataset_adapter = dsa.WrapDataObject(vtk_data)
coords = vtk_dataset_adapter.GetPoints()
density = vtk_dataset_adapter.PointData['density']
data_export = np.column_stack((coords,density))
header = "X Y Z density"
np.savetxt("output2.csv", data_export, header = header)
仅使用 VTK API
最后一个与第二个非常相似,但它只使用 VTK API:
import vtk
from vtk.numpy_interface import dataset_adapter as dsa
import numpy as np
#PolyDataReader must be modified depending on the type of the Legacy VTK input type
reader = vtk.vtkPolyDataReader()
reader.SetFileName("cylinder.vtk")
reader.ReadAllFieldsOn()
reader.Update()
vtk_data = reader.GetOutput()
vtk_dataset_adapter = dsa.WrapDataObject(vtk_data)
coords = vtk_dataset_adapter.GetPoints()
density = vtk_dataset_adapter.PointData['density']
data_export = np.column_stack((coords,density))
header = "X Y Z density"
np.savetxt("output3.csv", data_export, header = header)
这个解决方案可能很有趣,因为它只有 VTK 作为依赖项,但也可以与 Paraview 附带的 pvpython
一起使用,因为 VTK 是 Paraview 的依赖项。
我有 vtk
个数值模拟文件,我通常使用 ParaView
进行可视化。我想在 LaTeX
文档中绘制一些结果。为此,我喜欢使用 CSV
文件。好处是 Paraview
可以将数据导出到 CSV
文件中。因此,我能够将可变密度的完整时间序列导出到一系列 CSV
个文件中。
但是,我想将该职位包含在这些 CSV
文件中。
这是我现在可以做的事情:
#### import the simple module from the paraview
from paraview.simple import *
import os
#### disable automatic camera reset on 'Show'
paraview.simple._DisableFirstRenderCameraReset()
### MY VARIABLES
Folder_output='E:\My Documents\VTKfiles'
FileNames_list=[os.path.join(Folder_output, f) for f in os.listdir(Folder_output) if os.path.isfile(os.path.join(Folder_output, f))]
nb_tStep=len(FileNames_list)
Arrays_out_list=[ 'Structured Coordinates:0', 'Structured Coordinates:1' ,' Structured Coordinates:2', 'density',]
CSV_File_Names='E:/My Documents/Results'
for t in range(0,nb_tStep):
output_LBM_ = LegacyVTKReader(FileNames=FileNames_list[t] )
####
PassArrays1 = PassArrays()
PassArrays1.PointDataArrays = Arrays_out_list
source = PassArrays1
writer = CreateWriter(CSV_File_Names+"{}.csv".format(t), source)
writer.FieldAssociation = "Points" # or "Cells"
writer.UpdatePipeline()
del writer
有(至少)三个选项可以使用 Paraview or/and VTK APIs.
从 VTK 遗留文件中检索您的点和变量使用 Paraview API
from paraview.simple import *
cylindervtk = LegacyVTKReader(FileNames=['./cylinder.vtk'])
SaveData('./output.csv', proxy=cylindervtk)
和运行它使用pvpython
:
pvpython vtk_output_csv.py
您将获得一个类似于此的 CSV 文件:
"density","Points:0","Points:1","Points:2"
1.2,0.5,0.5,0
1.2,0.5,-0.5,0
1.2,0.40451,0.5,-0.29389
1.2,0.40451,-0.5,-0.29389
1.2,0.15451,0.5,-0.47553
1.2,0.15451,-0.5,-0.47553
1.2,-0.15451,0.5,-0.47553
1.2,-0.15451,-0.5,-0.47553
1.2,-0.40451,0.5,-0.29389
1.2,-0.40451,-0.5,-0.29389
1.2,-0.5,0.5,-6.1232e-17
...
稍后您可以在脚本(Python 或其他任何东西)上使用它来执行一些 post 处理或绘图操作。
使用 Paraview 和 VTK APIs
虽然第一个选项很简洁,但是你必须把你的数据写到你的硬盘上,而且你可能需要稍后重新加载它们。如果您只想在一个 python 脚本中执行 post 处理或绘图操作,那么您就是在白白地在硬盘驱动器上写入临时数据。
以下代码利用了 numpy integration with VTK。它使您能够将坐标和点数据加载到 numpy 数组中,并在最后将它们导出到 CSV 文件(或其他任何文件)中:
from paraview.simple import *
from vtk.numpy_interface import dataset_adapter as dsa
import numpy as np
#Paraview reader
pv_reader = LegacyVTKReader(FileNames=['./cylinder.vtk'])
#Fetch the reader data and store them locally into a VTK object
vtk_data = servermanager.Fetch(pv_reader)
#Wrap the vtk_data VTK object to get the coordinates and PointData as numpy arrays
vtk_dataset_adapter = dsa.WrapDataObject(vtk_data)
coords = vtk_dataset_adapter.GetPoints()
density = vtk_dataset_adapter.PointData['density']
data_export = np.column_stack((coords,density))
header = "X Y Z density"
np.savetxt("output2.csv", data_export, header = header)
仅使用 VTK API
最后一个与第二个非常相似,但它只使用 VTK API:
import vtk
from vtk.numpy_interface import dataset_adapter as dsa
import numpy as np
#PolyDataReader must be modified depending on the type of the Legacy VTK input type
reader = vtk.vtkPolyDataReader()
reader.SetFileName("cylinder.vtk")
reader.ReadAllFieldsOn()
reader.Update()
vtk_data = reader.GetOutput()
vtk_dataset_adapter = dsa.WrapDataObject(vtk_data)
coords = vtk_dataset_adapter.GetPoints()
density = vtk_dataset_adapter.PointData['density']
data_export = np.column_stack((coords,density))
header = "X Y Z density"
np.savetxt("output3.csv", data_export, header = header)
这个解决方案可能很有趣,因为它只有 VTK 作为依赖项,但也可以与 Paraview 附带的 pvpython
一起使用,因为 VTK 是 Paraview 的依赖项。