本日は Blender の技術調査枠です。
Blenderで利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com
モディファイアの適用
指定のオブジェクトのミラーまたは細分割曲面モディファイアを適用します。
modifier_apply.py
# bpyインポート import bpy # 以下のモディファイアを適用する # - ミラーモディファイア # - 細分割曲面モディファイア # 対象モディファイアを保持しない場合は無視する # 引数 arg_target_meshs:操作対象オブジェクト名リスト # 戻り値 def apply_modifier_targetlist(arg_target_meshs=[]): # リストのメッシュを全て走査する for mesh in arg_target_meshs: # 指定オブジェクトを取得する selectob = bpy.data.objects[mesh] # 変更オブジェクトをアクティブに変更する bpy.context.scene.objects.active = selectob # オブジェクトの全てモディファイアを走査する # モディファイアのタイプ一覧 # (https://docs.blender.org/api/blender_python_api_2_71_release/bpy.types.Modifier.html) for modifier in selectob.modifiers: # ミラーモディファイアを適用する if modifier.type == 'MIRROR': bpy.ops.object.modifier_apply(apply_as='DATA',modifier=modifier.name) # 細分割曲面モディファイアを適用する if modifier.type == 'SUBSURF': bpy.ops.object.modifier_apply(apply_as='DATA',modifier=modifier.name) return # 関数の実行例 apply_modifier_targetlist(['Cube'])
モディファイアの並べ替え
指定のオブジェクトのミラーモディファイアをリスト上位に並べ替えます。
modifier_apply.py
# bpyインポート import bpy # ミラーモディファイアをリストの先頭に移動する # 対象モディファイアを保持しない場合は無視する # 引数 arg_target_meshs:操作対象オブジェクト名リスト # 戻り値 def moveup_mirror_modifier(arg_target_meshs=[]): # リストのメッシュを全て走査する for mesh in arg_target_meshs: # 指定オブジェクトを取得する selectob = bpy.data.objects[mesh] # 変更オブジェクトをアクティブに変更する bpy.context.scene.objects.active = selectob # オブジェクトに設定中のモディファイア数を取得する modifier_num = len(selectob.modifiers) # 走査中のモディファイア位置を記録する(先頭から開始) check_num = 0 # 全てのモディファイアを走査する while modifier_num > check_num: # ミラーモディファイアかチェックする if selectob.modifiers[check_num].type == 'MIRROR': # 操作中インデックスを保存する loop_num = check_num # 対象モディファイアなら先頭インデックスに移動する while check_num > 0: # ループ回避のため、上位モディファイアが同じモディファイアでないことを確認する if selectob.modifiers[check_num - 1].type != 'MIRROR': # モディファイア名を取得する name = selectob.modifiers[check_num].name # モディファイアを上位に移動する bpy.ops.object.modifier_move_up(modifier=name) # アクティブモディファイアを合わせて上位に移動する check_num = check_num - 1 else: # 上位モディファイアが同じモディファイアなら処理を終了する break # 走査位置を移動する check_num = check_num + 1 return # 関数の実行例 moveup_mirror_modifier(['Cube'])