本日は Blender の技術調査枠です。
Blenderで利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com
ウェイトの設定
指定オブジェクトに頂点グループを追加して、オブジェクトの全頂点にウェイト1を割り当てます。
・weighting_object.py
# bpyインポート import bpy # 指定オブジェクトにウェイト付けを行う # 1.指定オブジェクトに対象の頂点グループがあるか確認する # 2.対象の頂点グループがない場合、頂点グループを追加する # 3.指定オブジェクトの全頂点にウェイト 1 を割り当てる # 引数 arg_objectname:指定オブジェクト名 # arg_vertexgroup:追加頂点グループ名 # 戻り値 def weighting_object_vertexgroup( arg_objectname='Default', arg_vertexgroup='DefaultGroup'): # 指定オブジェクトを取得する selectob=bpy.context.scene.objects[arg_objectname] # 指定オブジェクトをアクティブにする bpy.context.scene.objects.active=selectob # オブジェクトの頂点グループを取得する(get関数は対象が存在しない場合 None が返る) vertexgroup=selectob.vertex_groups.get(arg_vertexgroup) # 対象の頂点グループが存在しない場合は新規作成する if vertexgroup == None: # オブジェクトに新規頂点グループを追加する selectob.vertex_groups.new(name=arg_vertexgroup) # 対象の頂点グループをアクティブにする selectob.vertex_groups.active_index=selectob.vertex_groups[arg_vertexgroup].index # 編集モードに移行する bpy.ops.object.mode_set(mode='EDIT', toggle=False) # 全頂点を選択状態にする bpy.ops.mesh.select_all(action='SELECT') # 頂点グループの設定ウェイト値を 1 にする bpy.context.scene.tool_settings.vertex_group_weight=1.0 # 頂点グループのウェイト値を選択頂点に割り当てる bpy.ops.object.vertex_group_assign() # オブジェクトモードに戻る bpy.ops.object.mode_set(mode='OBJECT', toggle=False) return # 関数の実行例 weighting_object_vertexgroup(arg_objectname='Cube', arg_vertexgroup='CubeGroup')
ウェイトの削除(クリーン)
指定オブジェクトの頂点グループを対して、オブジェクトの全頂点のウェイト付けを削除します。
一旦、全頂点にウェイト0を割り当て、クリーン操作を実行します。
・weighting_object.py
# bpyインポート import bpy # 指定オブジェクトのウェイト付けを削除する # 1.指定オブジェクトに対象の頂点グループがあるか確認する # 2.対象の頂点グループがない場合、処理しない # 3.指定オブジェクトの全頂点にウェイト 0 を割り当てる # 4.ウェイト 0 の設定を除去するため、クリーン操作を実行する # 引数 arg_objectname:指定オブジェクト名 # arg_vertexgroup:追加頂点グループ名 # 戻り値 def weightclear_object_vertexgroup( arg_objectname='Default', arg_vertexgroup='DefaultGroup'): # 指定オブジェクトを取得する selectob=bpy.context.scene.objects[arg_objectname] # 指定オブジェクトをアクティブにする bpy.context.scene.objects.active=selectob # オブジェクトの頂点グループを取得する(get関数は対象が存在しない場合 None が返る) vertexgroup=selectob.vertex_groups.get(arg_vertexgroup) # 対象の頂点グループが存在しない場合は処理しない if vertexgroup == None: # 処理終了 return # 対象の頂点グループをアクティブにする selectob.vertex_groups.active_index=selectob.vertex_groups[arg_vertexgroup].index # 編集モードに移行する bpy.ops.object.mode_set(mode='EDIT', toggle=False) # 全頂点を選択状態にする bpy.ops.mesh.select_all(action='SELECT') # 頂点グループの設定ウェイト値を 0 にする bpy.context.scene.tool_settings.vertex_group_weight=0.0 # 頂点グループのウェイト値を選択頂点に割り当てる bpy.ops.object.vertex_group_assign() # ウェイト 0 を除去するクリーン操作を実行する bpy.ops.object.vertex_group_clean(group_select_mode='ALL',limit=0.0,keep_single=False) # オブジェクトモードに戻る bpy.ops.object.mode_set(mode='OBJECT', toggle=False) return # 関数の実行例 weightclear_object_vertexgroup(arg_objectname='Cube', arg_vertexgroup='CubeGroup')