为了账号安全,请及时绑定邮箱和手机立即绑定

Paraview - 使用 python 脚本以 x3d 格式导出数据

Paraview - 使用 python 脚本以 x3d 格式导出数据

拉莫斯之舞 2021-12-29 19:42:39
我正在尝试使用 paraview-python 脚本以 x3d 格式导出 OpenFOAM 结果。当我通过 paraview 图形界面进行操作时,它可以工作并且结果可以在 Blender 中可视化,请参见下图但是,当我尝试使用以下脚本执行相同的操作时from paraview.simple import *import fnmatchimport osimport shutil#create alist of all vtk filesvtkFiles = []for root, dirnames, filenames in os.walk('.'):    for filename in fnmatch.filter(filenames, '*.vtk'):        vtkFiles.append(os.path.join(root, filename))vtkFilesGroups=[    'U',]def ResetSession():    pxm = servermanager.ProxyManager()    pxm.UnRegisterProxies()    del pxm    Disconnect()    Connect()def x3dExport(output,r):    #export in x3d format    exporters = servermanager.createModule("exporters")    Show(r)    view = GetActiveView()    render = Render()    x3dExporter = exporters.X3DExporter(FileName=output)    x3dExporter.SetView(view)    x3dExporter.Write()    ResetSession()# group VTK files by gruop (fields in openfoam "vtkFilesGroups")# then loop over all and save it into different formatsgroupedVtkFiles=[]for group in vtkFilesGroups:    vtkDir = os.path.join('.', group, 'vtk')    if not os.path.exists(vtkDir):        os.makedirs(vtkDir)    vtuDir = os.path.join('.', group, 'vtu')    if not os.path.exists(vtuDir):        os.makedirs(vtuDir)    x3dDir = os.path.join('.', group, 'x3d')    if not os.path.exists(x3dDir):        os.makedirs(x3dDir)    for stepFile in vtkFiles:        tmp = stepFile.split(os.sep)        oldFileName = tmp[-1].split('.')[0]        time = tmp[-2]        fileNameVtk = '{}_{}.vtk'.format(oldFileName, time)        fileNameVtp = '{}_{}.vtp'.format(oldFileName, time)        fileNameX3d = '{}_{}.x3d'.format(oldFileName, time)        r = LegacyVTKReader(FileNames=[stepFile])        w = XMLUnstructuredGridWriter()        w.FileName = os.path.join(vtuDir, fileNameVtp)        w.UpdatePipeline()        x3dExport(os.path.join(x3dDir, fileNameX3d), r)正如您从这张图片中看到的那样,未导出字段值(速度 U)!有人可以告诉我我做错了什么吗?谢谢!
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您的问题是.foam文件它不是科学的可视化文件,因为 VTK,.foam文件仅用于 ParaView(通过其扩展名,而不是通过其内容)来识别阅读器OpenFOAMReader,然后将其用于后期处理。


我有两个解决方案给你:


阅读阅读器文档以找到执行此操作的方法。

使用FoamToVTK将结果转换为 VTK 文件,然后循环遍历结果。

编辑


我很久以前就用这段代码来转换做那件事:


from paraview.simple import *

import fnmatch

import os

import shutil


#create alist of all vtk files

vtkFiles = []

for root, dirnames, filenames in os.walk('.'):

    for filename in fnmatch.filter(filenames, '*.vtk'):

        vtkFiles.append(os.path.join(root, filename))



vtkFilesGroups=('p', 'U')



def ResetSession():

    pxm = servermanager.ProxyManager()

    pxm.UnRegisterProxies()

    del pxm

    Disconnect()

    Connect()



def x3dExport(output,r):

    #export in x3d format


    exporters = servermanager.createModule("exporters")

    Show(r)

    view = GetActiveView()

    render = Render()

    x3dExporter = exporters.X3DExporter(FileName=output)

    x3dExporter.SetView(view)

    x3dExporter.Write()

    ResetSession()


# group VTK files by gruop (fields in openfoam "vtkFilesGroups")

# then loop over all and save it into different formats

for group in vtkFilesGroups:

    x3dDir = os.path.join('.', group, 'x3d')

    if not os.path.exists(x3dDir):

        os.makedirs(x3dDir)


    for stepFile in (f for f in vtkFiles if group in f):

        tmp = stepFile.split(os.sep)

        oldFileName = tmp[-1].split('.')[0]

        time = tmp[-2]

        fileNameX3d = '{}_{}.x3d'.format(oldFileName, time)


        x3dExport(os.path.join(x3dDir, fileNameX3d), r)


查看完整回答
反对 回复 2021-12-29
?
狐的传说

TA贡献1804条经验 获得超3个赞

您需要在脚本中为数据着色,例如:

ColorBy(yourRep, ('POINTS', ('YourScalar', 'YourComp'))


查看完整回答
反对 回复 2021-12-29
  • 2 回答
  • 0 关注
  • 390 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信