亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 460 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號