1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenFOAMの結果をblenderで可視化してみる#05 Blenderでの読み込み

Posted at

はじめに

今回は,Paraviewで生成したopenFOAMの結果のx3dファイルをBlenderで読み込む

Blender での読み込み

Blenderでx3dファイルを読み込む
image.png

読み込むと,以下のオブジェクトが生成される。

  • DirectLight.xxx
  • Shape_IndexedFaceSet
  • Viewpoint

このうち,流体の箇所を表すのは,Shape_IndexedFaceSetであり,ほかのものはいらない。
ちなみに,Viewpointは,x3dを出力した際のParaviewでの視点となっている.
image.png

Blender Scriptによる複数データの読み込み

GUIからx3dファイルを読み込む場合は,複数ファイルを読み込むことができないため,pythonでデータを読み込むこととする。
以下のスクリプトでは,ファイルを読み込み,読み込まれたもののうち,オブジェクトのタイプがMESH以外のもの(上記で説明した視点やライトのオブジェクト)を削除している.

import glob
import bpy
from pathlib import Path
TARGET_DIRECTORY=r"C:\GithubData\OpenFOAM_Vis_Blender\cal_data\PV_x3d"

#TARGET_DIRECTORYに保存されているx3dファイルを読み込む
lists = Path(TARGET_DIRECTORY).glob("*.x3d")
for fullPath in list(lists):
    bpy.ops.import_scene.x3d(filepath=str(fullPath))

#MESH以外を削除
for i in bpy.data.objects:
    print(i.type)
    if i.type != "MESH":
        print("del")
        bpy.data.objects.remove(i, do_unlink=True)

これで読み込むと以下のように,各ステップのメッシュが表示されるはず.
image.png

キーを打つ

Blenderでアニメーションを生成できるように,各オブジェクトにキーフレームを設定する。
ここでは,5フレーム(dt)ごとに表示させるobjectを切り替えている。

import bpy

def on_of_setanimation(ob, t):
    bpy.context.scene.frame_set(0)
    ob.hide_viewport  = True
    ob.hide_render = True
    ob.keyframe_insert(data_path="hide_viewport")
    ob.keyframe_insert(data_path="hide_render")

    bpy.context.scene.frame_set(t[0])
    ob.hide_viewport  = False
    ob.hide_render = False
    ob.keyframe_insert(data_path="hide_viewport")
    ob.keyframe_insert(data_path="hide_render")

    bpy.context.scene.frame_set(t[1])
    ob.hide_viewport  = True
    ob.hide_render = True
    ob.keyframe_insert(data_path="hide_viewport")
    ob.keyframe_insert(data_path="hide_render")
    
    
obs = bpy.data.objects
t0 = 0
dt = 5
for i, ob in enumerate(obs):
    if ob.type == "MESH":
        t = [dt*i, dt*(i+1)]
        on_of_setanimation(ob, t)

blenderで表示した例
Loop-animation.gif

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?