MRが楽しい

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

Blender2.8で利用可能なpythonスクリプトを作る その32(全てのメッシュでのブーリアン統合)

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

全てのメッシュオブジェクトをブーリアンモディファイアの統合で結合する

全てのメッシュオブジェクトに対してブーリアンモディファイアの結合を実行します。
結合したメッシュオブジェクトは削除します。
・apply_boolean_union_all.py

# bpyインポート
import bpy

# 全てのメッシュオブジェクトをブーリアンモディファイアの統合で結合する
# 結合したメッシュオブジェクトは削除される
def apply_boolean_union_all(arg_objectname="Default") -> bool:
    """全てのメッシュオブジェクトをブーリアンモディファイアの統合で結合する
    結合したメッシュオブジェクトは削除される

    Keyword Arguments:
        arg_objectname {str} -- 指定オブジェクト名 (default: {"Default"})

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

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

    # 指定オブジェクトが存在するか確認する
    if selectob == None:
        # 指定オブジェクトが存在しない場合は処理しない
        return False
    
    # 指定オブジェクトをアクティブに変更する
    bpy.context.view_layer.objects.active = selectob
    
    # 全てのオブジェクトを走査する
    for obj in bpy.data.objects:
        # メッシュオブジェクトか確認する
        if obj.type == 'MESH':
            # 指定オブジェクト以外のオブジェクトか確認する
            if obj.name != arg_objectname:
                
                # 「ブーリアン」モディファイアを追加する
                # ブーリアンモディファイアのインタフェース
                # (https://docs.blender.org/api/current/bpy.types.BooleanModifier.html)
                bpy.ops.object.modifier_add(type='BOOLEAN')

                # 追加されたモディファイアを取得する
                boolean_modifier = selectob.modifiers[-1]

                # 演算方法に[統合]を指定する
                boolean_modifier.operation = 'UNION'

                # 統合対象にオブジェクトを指定する
                boolean_modifier.object = obj
                
                # 重複の敷居値を指定する
                boolean_modifier.double_threshold = 0.001

                # 「ブーリアン」モディファイアを適用する
                bpy.ops.object.modifier_apply(apply_as='DATA',modifier=boolean_modifier.name)

                # 統合したオブジェクトを削除する
                bpy.data.objects.remove(obj)

    return True

# 関数の実行例
apply_boolean_union_all(arg_objectname="Cube")

f:id:bluebirdofoz:20200523203811j:plain
f:id:bluebirdofoz:20200523203822j:plain