2020年8月2日日曜日

Blender でアドオンを作ってみた その1

以前作った Blender 2.7 2.8 両対応スクリプト。
流石に毎回使うたびにソースをコピペするのが面倒なので、アドオン化してみたのですが…

roll_zero.py

import bpy

bl_info = {
    "name" : "Set Bone Roll Zero",
    "author" : "100H",
    "version" : (0,1),
    "blender" : (2, 79, 0),
    "location" : "armature > Bone Roll 0",
    "description" : "Set Bone Roll 0",
    "warning" : "",
    "wiki_url" : "",
    "tracker_url" : "",
    "category" : "Rigging"
}

class CSBRZ(bpy.types.Operator):

    bl_idname = "armature.sbrz"
    bl_label = "Set Bone Roll Zero"
    bl_description = "Set Bone Roll 0"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        for obj in bpy.context.selected_objects:
            if obj.type == 'ARMATURE':
                print(obj.name)
                for bone in obj.data.edit_bones:
                    print(bone.name)
                    bone.roll = 0
        return {'FINISHED'}

def menu_func(self, context):
    self.layout.operator("armature.sbrz")

def register():
    bpy.utils.register_module(__name__)
    bpy.types.VIEW3D_MT_armature_specials.append(menu_func)

def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.VIEW3D_MT_armature_specials.remove(menu_func)

if __name__ == "__main__":
    register()

ボーンロール0化
カテゴリー:リギング
出し方:アーマチュア編集画面で、スペシャルメニュー(ショートカットW)


pair_vg_maker.py

import bpy

bl_info = {
    "name" : "Pair Vertexgroup Maker",
    "author" : "100H",
    "version" : (0,1),
    "blender" : (2, 79, 0),
    "location" : "object > pair vg create",
    "description" : "Pair VG Create",
    "warning" : "",
    "wiki_url" : "",
    "tracker_url" : "",
    "category" : "Rigging"
}

class CPVGM(bpy.types.Operator):

    bl_idname = "armature.pvgm"
    bl_label = "Pair VG Maker"
    bl_description = "Pair VG Create"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):

        for obj in bpy.context.selected_objects:
            print(obj.name)

            if obj.type == 'MESH':
                list_add = []
                for vg in obj.vertex_groups:
                    pair_name = ''
                    length = len(vg.name)
                    if vg.name[length-2:] == '.L':
                        pair_name = vg.name[:length-1]+'R'
                    if vg.name[length-2:] == '.R':
                        pair_name = vg.name[:length-1]+'L'
                    if pair_name != '':
                        if not obj.vertex_groups.get(pair_name):
                            list_add.append(pair_name)

                for name_add in list_add:
                    print(name_add)
                    obj.vertex_groups.new(name = name_add)
        return {'FINISHED'}

def menu_func(self, context):
    self.layout.operator("armature.pvgm")

def register():
    bpy.utils.register_module(__name__)
    bpy.types.VIEW3D_MT_object_specials.append(menu_func)

def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.VIEW3D_MT_object_specials.remove(menu_func)

if __name__ == "__main__":
    register()

左右対面頂点グループ作成
カテゴリー:リギング
出し方:オブジェクト編集画面で、スペシャルメニュー(ショートカットW)



使い方は前述のページの通りなんですが…
2.7専用
なんで互換性が無いんですかね。実行部分に互換性があるのにUIで引っかかって動かないなんて…
今後は2.7系は作らない気がしますがげんなりです。

0 件のコメント:

コメントを投稿