Last active
April 4, 2024 18:04
-
-
Save hsgw/d472d48bb137b55cd417b425dccdb404 to your computer and use it in GitHub Desktop.
Voxel Heat Diffuse Skinningを繰り返し試すときに便利なblender用アドオン
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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