如何保存一个 3D vtk 文件的一个切片

3

早上好, 我想使用pvpython从VTK文件中制作一个三维体积的切片,然后我希望保存这个图像(可能使用以白色为中心的对称颜色调色板)。

具体来说,我想用Python生成以下Paraview图片:

我是pvpython或Python的新手,所以这是我的第一个脚本,但它没有运行:

import matplotlib.pyplot as plt
import matplotlib.cm as cm
from scipy.interpolate import griddata
from paraview import simple as pvs
import numpy as np
import vtk
import matplotlib
from vtk.util.numpy_support import vtk_to_numpy

reader = vtk.vtkDataSetReader()
reader.SetFileName("../deltau-deltau.vtk")
reader.ReadAllScalarsOn()
reader.Update()

plane = vtk.vtkPlane()
plane.SetOrigin(16, 0, 0)
plane.SetNormal(1, 0, 0)

cutter = vtk.vtkCutter()
cutter.SetCutFunction(plane)
cutter.SetInputConnection(reader.GetOutputPort())
cutter.Update()

data = cutter.GetOutput()

# Coordinates of nodes in the mesh
nodes_vtk_array= reader.GetOutput().GetPoints().GetData()

#Get the coordinates of the nodes and their variables
nodes_nummpy_array = vtk_to_numpy(nodes_vtk_array)
x=nodes_nummpy_array[:,0]
y=nodes_nummpy_array[:,1]
z=nodes_nummpy_array[:,2]

variable_numpy_array = vtk_to_numpy(data)
var = variable_numpy_array

# Figure bounds
npts = 100
xmin, xmax = min(x), max(x)
ymin, ymax = min(y), max(y)
zmin, zmax = min(z), max(z)

# Grid
xi = np.linspace(xmin, xmax, npts)
yi = np.linspace(ymin, ymax, npts)
zi = np.linspace(zmin, zmax, npts)

# The mesh is unstructured, so
var_plot = griddata((z, y), var, (zi[None,:], yi[:,None]), method='cubic') 

plt.plot(zi, yi, var_plot)
#plt.colorbar()
plt.savefig("figure.png")
1个回答

2
首先,请注意ParaView脚本和VTK脚本之间的区别。您提供的脚本似乎是纯粹的VTK脚本。ParaView脚本比VTK更高级,更适合Python,如果您可以在ParaView中完成处理,则建议仅使用ParaView脚本工具,而不是VTK脚本(即不要导入vtk,也不要创建任何vtkXXX()对象)。
在ParaView中,您可以跟踪您的操作以生成python脚本,如此处所述。这对于理解特定操作的python对应项非常有用。如果您想编写完整的分析脚本,还可以保存python状态
此文档还提供了从GUI和Python进行处理和分析的示例。
如果您仍然喜欢VTK脚本,请重新说明您的帖子,并解释“不起作用”是什么意思。

谢谢您的回答。当然,我不在乎使用哪种脚本解决方案,所以我一定会查看您提供的链接。 我的疑问是:使用Paraview跟踪,我能否创建一个“matplotlib风格”的图形(例如,带有图形外部的颜色条),还是输出只是Paraview的屏幕截图功能的相同? - Avles Edivad
1
您可以使用Python View创建一个matplot lib可视化。 - Nico Vuaille
如果您向我展示如何从VTK中导入视图,然后使用您的过程保存所获得的图像,我肯定会选择您的答案作为最佳答案! - Avles Edivad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接