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