テキストベースのBlender操作にかかわらず、
- モディファイア適用前
- UV展開前
動作確認環境 : 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()
以上