Skip to content

Instantly share code, notes, and snippets.

@hsgw
Last active April 4, 2024 18:04
Show Gist options
  • Save hsgw/d472d48bb137b55cd417b425dccdb404 to your computer and use it in GitHub Desktop.
Save hsgw/d472d48bb137b55cd417b425dccdb404 to your computer and use it in GitHub Desktop.
Voxel Heat Diffuse Skinningを繰り返し試すときに便利なblender用アドオン
# Voxel Heat Diffuse Skinning helper
#
# (c) 2023, hsgw(twitter:@hsgw)
# This software is released under the MIT license.
# see https://opensource.org/license/mit/
# Voxel Heat Diffuse Skinningを繰り返し使うときにarmatureとmeshを選択しなくても覚えていてくれるblender用アドオンです
# ObjectとArmatureを指定してください
# Remove vertex group~は、Armatureのboneでdeformのついていない物を探して、Meshのvertex groupから同名のものを削除します。
# Voxel Heat Diffuse Skinningを実行しないboneがある場合は、boneからdeformを解除してください。
# その場合、問答無用でそのboneと同名のvertex groupは削除されます。
import bpy
from bpy.props import (
StringProperty,
BoolProperty,
)
bl_info = {
"name": "hsgw utills - Voxel Heat Diffuse Skinning helper",
"author": "hsgw",
"version": (1, 0),
"blender": (2, 80, 0),
"location": "3DView > UI",
"description": "Voxel Heat Diffuse Skinning helper",
"warning": "",
"support": "TESTING",
"doc_url": "",
"tracker_url": "",
"category": "Tool"
}
class HSGW_OT_ExecuteVoxelSkinning(bpy.types.Operator):
bl_idname = "hsgw.executevoxelskinning"
bl_label = "Execute"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
try:
target_object = bpy.data.objects[context.scene.target_object]
except:
raise KeyError("set target object")
try:
target_armature = bpy.data.objects[context.scene.target_armature]
except:
raise KeyError("set target armature")
if target_object.type != "MESH":
raise TypeError("target object is not Mesh")
if target_armature.type != "ARMATURE":
raise TypeError("target armature is not Armature")
if context.scene.remove_weight:
for bone in target_armature.data.bones:
if bone.use_deform == False:
vertex_group = target_object.vertex_groups.get(bone.name)
if vertex_group != None:
target_object.vertex_groups.remove(vertex_group)
print("removed vertex group: %s" % bone.name)
bpy.ops.object.select_all(action="DESELECT")
target_object.select_set(True)
target_armature.select_set(True)
bpy.ops.wm.voxel_heat_diffuse()
return {"FINISHED"}
class HSGW_PT_ExecuteVoxelSkinning(bpy.types.Panel):
bl_label = "Execute Voxel Skinning"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "hsgw"
bl_context = "objectmode"
def draw_header(self, context):
layout = self.layout
def draw(self, context):
layout = self.layout
scene = context.scene
row = layout.row()
row.prop_search(scene, "target_object", scene, "objects", text="Object")
row = layout.row()
row.prop_search(scene, "target_armature", scene, "objects", text="Armature")
row = layout.row()
row.prop(scene, "remove_weight", text="Remove vertex group by none-deform bone name")
row = layout.row()
op_props = row.operator("hsgw.executevoxelskinning")
classes = [
HSGW_OT_ExecuteVoxelSkinning,
HSGW_PT_ExecuteVoxelSkinning
]
def register():
for c in classes:
bpy.utils.register_class(c)
bpy.types.Scene.target_object = StringProperty(default="")
bpy.types.Scene.target_armature = StringProperty(default="")
bpy.types.Scene.remove_weight = BoolProperty(default=False)
def unregister():
# clear_props()
for c in classes:
bpy.utils.unregister_class(c)
del bpy.types.Scene.target_object
del bpy.types.Scene.target_armature
if __name__ == "__main__":
register()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment