MRが楽しい

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

Blender2.8で利用可能なpythonスクリプトを作る その35(頂点グループの追加と削除)

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

頂点グループの追加

指定オブジェクトに頂点グループを追加します。
・add_vertexgroup_mesh.py

# bpyインポート
import bpy

# 指定オブジェクトに頂点グループを追加する
def add_vertexgroup_mesh(arg_objectname="Default", arg_vertexgroup="DefaultGroup") -> bool:
    """指定オブジェクトに頂点グループを追加する

    Keyword Arguments:
        arg_objectname {str} -- 指定オブジェクト名 (default: {"Default"})
        arg_vertexgroup {str} -- 指定頂点グループ名 (default: {"DefaultGroup"})

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

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

    # 指定オブジェクトが存在するか確認する
    if selectob == None:
        # 指定オブジェクトが存在しない場合は処理しない
        return False
    
    # オブジェクトがメッシュであるか確認する
    if selectob.type != 'MESH':
        # 指定オブジェクトがメッシュでない場合は処理しない
        return False
    
    # オブジェクトの頂点グループを取得する(get関数は対象が存在しない場合 None が返る)
    vertexgroup = selectob.vertex_groups.get(arg_vertexgroup)
    
    # 対象の頂点グループが存在しない場合は新規作成する
    if vertexgroup == None:
        # オブジェクトに新規頂点グループを追加する
        selectob.vertex_groups.new(name=arg_vertexgroup)

    return True

# 関数の実行例
add_vertexgroup_mesh(arg_objectname="Sphere", arg_vertexgroup="DefaultGroup")

f:id:bluebirdofoz:20200529222710j:plain

頂点グループの削除

指定オブジェクトの指定した頂点グループを削除します。
・delete_vertexgroup_mesh.py

# bpyインポート
import bpy

# 指定オブジェクトの頂点グループを削除する
def delete_vertexgroup_mesh(arg_objectname="Default", arg_vertexgroup="DefaultGroup") -> bool:
    """指定オブジェクトの頂点グループを削除する

    Keyword Arguments:
        arg_objectname {str} -- 指定オブジェクト名 (default: {"Default"})
        arg_vertexgroup {str} -- 指定頂点グループ名 (default: {"DefaultGroup"})

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

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

    # 指定オブジェクトが存在するか確認する
    if selectob == None:
        # 指定オブジェクトが存在しない場合は処理しない
        return False
    
    # オブジェクトがメッシュであるか確認する
    if selectob.type != 'MESH':
        # 指定オブジェクトがメッシュでない場合は処理しない
        return False
    
    # オブジェクトの頂点グループを取得する(get関数は対象が存在しない場合 None が返る)
    vertexgroup = selectob.vertex_groups.get(arg_vertexgroup)
    
    # 対象の頂点グループが存在しない場合は処理しない
    if vertexgroup == None:
        # 実行成功として終了
        return True

    # 指定頂点グループをアクティブにする
    selectob.vertex_groups.active_index=vertexgroup.index
  
    # 指定頂点グループを削除する
    bpy.ops.object.vertex_group_remove(all=False)

    return True

# 関数の実行例
delete_vertexgroup_mesh(arg_objectname="Sphere")

f:id:bluebirdofoz:20200529222658j:plain