我有一组数据存储在一个VTK文件中,它表示一个域的一个切入点,数组中有标量点数据。我试图产生一个等高线图所说的标量,使它看起来有点像附加的图片使用ParaView。我宁愿使用vtk库而不是使用Matplotlib之类的东西,因为我认为它们可以产生更好的可视化效果。在
我在网上看了几个例子,但没有一个对我有用(不会抛出错误,我最后得到的只是一个只有背景的空渲染),我所能做的只是一个数据的表面图(例如:here)。在
以下是我当前版本的代码(与成功生成曲面图的代码非常相似):
# import data
reader = vtk.vtkdatasetReader()
reader.SetFileName('inputDataFiles/k_zCut.vtk')
reader.ReadAllVectorsOn()
reader.ReadAllScalarsOn()
reader.Update()
# access data
data = reader.GetOutput()
d = data.GetPointData()
array=d.GetArray('k')
# create the filter
contours = vtk.vtkContourFilter()
contours.SetInput(reader.GetOutput())
contours.GenerateValues(5,1.,5.)
# create the mapper
mapper = vtk.vtkPolyDataMapper()
mapper.SetInput(contours.GetOutput())
mapper.ScalarVisibilityOff()
mapper.SetScalarRange(1., 5.)
# create the actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)
# create a rendering window and renderer
ren = vtk.vtkRenderer()
ren.SetBackground( 0.329412, 0.34902, 0.427451 ) #Paraview blue
# Assign actor to the renderer
ren.AddActor(actor)
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.SetSize(750, 750)
# create a renderwindowinteractor
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# render
renWin.Render()
# screenshot
w2if = vtk.vtkWindowToImageFilter()
w2if.SetInput(renWin)
w2if.Update()
w2if.SetMagnification(5.)
writer = vtk.vtkPNGWriter()
writer.SetFileName("screenshot.png")
writer.SetInput(w2if.GetOutput())
writer.Write()
# Enable user interface interactor
iren.Initialize()
iren.Start()
下面你可以看到我输入文件的一个简短部分。任何帮助都将不胜感激。在
^{pr2}$
如果您想使用一个更“pythonic”的VTK接口,consider using ^{}/^{}/^{} 。(不管怎样,VTK都是一个很好的选择!)在
tvtk
是一个稍微有点python的、低级的python绑定到VTK,它有一些非常好的特性(例如numpy数组的透明使用)。在Mayavi和mlab为VTK提供了一个更高级的接口。在
您显示的数据文件片段按原样无效,但如果我们使用类似的片段:
在曲面上渲染轮廓可以很简单:
^{pr2}$或者我们可以更花哨一点:
相关问题 更多 >
编程相关推荐