テキストベースのBlender操作にかかわらず、
  • モディファイア適用前
  • UV展開前
などに頻繁に行う必要がある全適用の処理について、1行呼び出すことで必要な処理を全て行えるように処理をまとめておく。


動作確認環境 : Blender 4.2


bpyによる全トランスフォーム処理


全適用の処理はコード中に頻繁に差し込む機会があるので、関数化してまとめておくことで記述量を少しでも減らす工夫をしておく。

▼適用処理参考
Apply — Blender Manual


Python :
def initialize_transform_apply(
        object_name_list=[]
):
    # リスト変換
    if not isinstance(object_name_list, list):
        object_name_list = [object_name_list]
    # 現在のモード保存
    current_mode = bpy.context.object.mode
    # Mode切り替え
    bpy.ops.object.mode_set(mode='OBJECT')
    # アクティブオブジェクト
    active_element_select(
        object_name_list=object_name_list
    )
    # All Transforms(全トランスフォーム)(適用)
    bpy.ops.object.transform_apply(
        location=True   # 位置適用、現在の位置が新しい基準点(原点)
    ,   rotation=True   # 回転適用、現在の回転が新しい基準角度(0度)
    ,   scale=True      # スケール適用、現在のスケールが新しい基準点(1.0)
    )
    # 0度ローテーション -> オブジェクトの原点を中心に移動
    object_rotate_func(
        object_list=object_name_list
    ,   radians_num=0
    )
    # 元のモードに戻す
    bpy.ops.object.mode_set(mode=current_mode)


12行目 :
▼active_element_select


16行目 :
全適用/全トランスフォーム

22行目 :
▼object_rotate_func



全トランスフォーム処理の使用例


モディファイア追加前

Python :
def Base_create():
    # Mode 切り替え
    bpy.ops.object.mode_set(mode='OBJECT')

    # 立方体生成
    bpy.ops.mesh.primitive_cube_add(
        size=1              # 1ペンの長さ
    ,   location=(0, 0, 0)  # 配置場所
    ,   scale=(1,1,1)       # x, y, y サイズ x軸方向に1倍, y軸方向に1倍, z軸方向に1倍
    )
    bpy.context.object.name = "MyCube_001"

    # 全適用 (オブジェクト位置, サイズ, 回転, 中心点初期化)
    initialize_transform_apply(
        object_name_list=["MyCube_001"]
    )

    # モディファイアー追加
    bpy.ops.object.modifier_add(type='BEVEL')
    bpy.context.object.modifiers["Bevel"].name = "BEVEL_00"
    bpy.context.object.modifiers["BEVEL_00"].affect = 'EDGES'
    bpy.context.object.modifiers["BEVEL_00"].segments = 4
    bpy.context.object.modifiers["BEVEL_00"].width = 0.05

Base_create()

UV展開前

Python :
def Base_create():
    # Mode 切り替え
    bpy.ops.object.mode_set(mode='OBJECT')

    # 立方体生成
    bpy.ops.mesh.primitive_cube_add(
        size=1              # 1ペンの長さ
    ,   location=(0, 0, 0)  # 配置場所
    ,   scale=(1,1,1)       # x, y, y サイズ x軸方向に1倍, y軸方向に1倍, z軸方向に1倍
    )
    bpy.context.object.name = "MyCube_001"

    # 全適用 (オブジェクト位置, サイズ, 回転, 中心点初期化)
    initialize_transform_apply(
        object_name_list=["MyCube_001"]
    )

    # Mode切り替え
    bpy.ops.object.mode_set(mode='OBJECT')
    bpy.ops.object.mode_set(mode='EDIT')
    bpy.ops.mesh.select_mode(type='FACE')

    # 要素選択
    element_select(
        element_list=["all"]
    ,   select_mode="FACE"
    ,   object_name_list=["MyCube_001"]
    )

    # 簡易UV 展開
    bpy.ops.uv.smart_project(angle_limit=math.radians(89))

Base_create()


以上

このエントリーをはてなブックマークに追加
コメントを閉じる

コメント

コメントフォーム
記事の評価
  • リセット
  • リセット