MRが楽しい

MRやVRについて学習したことを書き残す

Blender2.8で利用可能なpythonスクリプトを作る その12(トランスフォーム適用とクリア)

本日は Blender の技術調査枠です。
Blender2.8で利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com

全オブジェクトのトランスフォームを適用する

シーン中の全オブジェクトのトランスフォーム(位置/回転/拡大縮小)を適用します。
実行時の状態で全てのオブジェクトのトランスフォームが以下の通り初期化されます。

位置 X:0.0, Y:0.0, Z:0.0
回転 X:0°, Y:0°, Z:0°
拡大縮小 X:1.0, Y:1.0, Z:1.0

・transform_apply_all.py

# bpyインポート
import bpy

# 全オブジェクトのトランスフォームを適用する
def transform_apply_all() -> bool:
    """全オブジェクトのトランスフォームを適用する

    Returns:
        bool -- 実行の正否
    """

    # シーン中の全てのオブジェクトを走査する
    for ob in bpy.context.view_layer.objects:
        # 全てのオブジェクトを選択状態に設定する
        ob.select_set(True)

    # 全てのトランスフォームを適用する
    bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)

    return True

# 関数の実行例
transform_apply_all()

f:id:bluebirdofoz:20200106220905j:plain

対象オブジェクトのトランスフォームをクリアする

指定したオブジェクトのトランスフォーム(位置/回転/拡大縮小)をクリアします。
対象のオブジェクトのトランスフォームが以下の通り再設定されます。
トランスフォームの再設定となるため、適用と異なり、オブジェクトが移動します。

位置 X:0.0, Y:0.0, Z:0.0
回転 X:0°, Y:0°, Z:0°
拡大縮小 X:1.0, Y:1.0, Z:1.0

・transform_clear_target.py

# bpyインポート
import bpy

# 対象オブジェクトのトランスフォームをクリアする
def transform_clear_target(arg_objectname="Default") -> bool:
    """対象オブジェクトのトランスフォームをクリアする
    
    Keyword Arguments:
        arg_objectname {str} -- 対象オブジェクト名 (default: {"Default"})

    Returns:
        bool -- 実行の正否
    """

    # 指定オブジェクトを取得する
    # (get関数は対象が存在しない場合 None が返る)
    targetob = bpy.data.objects.get(arg_objectname)

    # 指定オブジェクトが存在するか確認する
    if targetob == None:
        # 指定オブジェクトが存在しない場合は処理しない
        return False

    # 変更オブジェクトをアクティブに変更する
    bpy.context.view_layer.objects.active = targetob

    # 位置、回転、拡大縮小のトランスフォームをクリアする
    bpy.ops.object.location_clear(clear_delta=False)
    bpy.ops.object.rotation_clear(clear_delta=False)
    bpy.ops.object.scale_clear(clear_delta=False)

    return True

# 関数の実行例
transform_clear_target(arg_objectname="Sphere")

f:id:bluebirdofoz:20200107092853j:plain