我目前能够在ParaView a .vtp文件中正确显示模拟的每个时间步骤,并为每个步骤打印屏幕截图。我想批量执行此操作,但我希望每个都保持相同的状态(视点,应用过滤器等)。我已经将状态保存到.psvm文件中,我尝试编写一个python脚本,在由pvbatch运行后,将(希望)打印屏幕截图。但是,不幸的是,它无法正常工作。我试图通过处理状态文件并进行搜索和替换来更改状态中的文件名,但仍然无法正常工作。例如,它只是绘制第一个数据输入,即使当前文件不同(尽管GetSources()显示了一个不断增加的源列表)。我在Snow Leopard中使用ParaView 3.14.0。我确信这很容易,但是我对大量关于python和paraview的信息感到不知所措,没有引用这个特殊问题。请,请,任何建议都非常欢迎,如果以前已经回答过,我很抱歉(我查看了google,paraview邮件列表,以及此处)。以下是我的脚本,也可以在http://pastebin.com/4xiLNrS0找到。此外,您可以在http://goo.gl/XjPpE中找到一些示例文件和状态。
#!/bin/python
import glob, string, os, commands
from paraview.simple import *
#help(servermanager)
# vtp files are inside the local subdir DISPLAY
files = (commands.getoutput("ls DISPLAY/data-*.vtp | grep -v contacts")).split()
# process each file
for filename in files:
fullfn = commands.getoutput("ls $PWD/" + filename)
fn = filename.replace('DISPLAY/', '')
#os.system("cp ../dem_git/addons/paraview_state.pvsm tmp.pvsm")
os.system("cp ~/Desktop/state.pvsm tmp.pvsm")
os.system("sed -i.bck 's/DATA.vtp/" + fullfn.replace('/','\/') + "/1' tmp.pvsm") # replace first intance with full path
os.system("sed -i.bck 's/DATA.vtp/" + fullfn.replace('/','\/') + "/1' tmp.pvsm") # replace second intance with full path
os.system("sed -i.bck 's/DATA.vtp/" + fn + "/1' tmp.pvsm") # replace third with just the filename path
servermanager.LoadState("tmp.pvsm")
pm = servermanager.ProxyManager()
reader = pm.GetProxy('sources', fullfn)
reader.FileName = fullfn
reader.FileNameChanged()
reader.UpdatePipeline()
view = servermanager.GetRenderView()
SetActiveView(view)
view.StillRender()
WriteImage(filename.replace(".vtp", ".png"))
os.system("rm -f tmp.pvsm")
os.system("rm -f tmp.pvsm.bck")
Delete(reader)
答案 0 :(得分:0)
我意识到这是一个老问题,但我最近遇到了完全相同的问题,也找不到任何答案。您需要做的就是在Delete(view)
之后添加Delete(reader)
以使您的脚本正常工作。