add remove zero weight vertex groups to panel
This commit is contained in:
+5
-1
@@ -495,8 +495,9 @@ def fix_zero_length_bones(armature: Object) -> None:
|
|||||||
bone.length = 0.001
|
bone.length = 0.001
|
||||||
bpy.ops.object.mode_set(mode='OBJECT')
|
bpy.ops.object.mode_set(mode='OBJECT')
|
||||||
|
|
||||||
def remove_unused_vertex_groups(mesh: Object) -> None:
|
def remove_unused_vertex_groups(mesh: Object) -> int:
|
||||||
"""Remove vertex groups with no weights"""
|
"""Remove vertex groups with no weights"""
|
||||||
|
removed: int = 0
|
||||||
for vg in mesh.vertex_groups:
|
for vg in mesh.vertex_groups:
|
||||||
has_weights: bool = False
|
has_weights: bool = False
|
||||||
for vert in mesh.data.vertices:
|
for vert in mesh.data.vertices:
|
||||||
@@ -508,6 +509,9 @@ def remove_unused_vertex_groups(mesh: Object) -> None:
|
|||||||
break
|
break
|
||||||
if not has_weights:
|
if not has_weights:
|
||||||
mesh.vertex_groups.remove(vg)
|
mesh.vertex_groups.remove(vg)
|
||||||
|
removed = removed+1
|
||||||
|
|
||||||
|
return removed
|
||||||
|
|
||||||
def calculate_bone_orientation(mesh: Object, vertices: List[Any]) -> Tuple[Vector, float]:
|
def calculate_bone_orientation(mesh: Object, vertices: List[Any]) -> Tuple[Vector, float]:
|
||||||
"""Calculate optimal bone orientation based on mesh geometry"""
|
"""Calculate optimal bone orientation based on mesh geometry"""
|
||||||
|
|||||||
@@ -272,10 +272,11 @@ class AvatarToolKit_OT_RemoveZeroWeightVertexGroups(Operator):
|
|||||||
|
|
||||||
def execute(self, context: Context) -> set[str]:
|
def execute(self, context: Context) -> set[str]:
|
||||||
meshes: list[bpy.types.Object] = get_all_meshes(context)
|
meshes: list[bpy.types.Object] = get_all_meshes(context)
|
||||||
|
removed: int = 0
|
||||||
for mesh_obj in meshes:
|
for mesh_obj in meshes:
|
||||||
remove_unused_vertex_groups(mesh_obj)
|
removed = removed+remove_unused_vertex_groups(mesh_obj)
|
||||||
|
|
||||||
|
self.report({'INFO'}, t("Tools.vertex_groups_removed", count=removed))
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -191,6 +191,8 @@
|
|||||||
"Tools.merge_twist_bones_desc": "When checked, twist bones will be kept, even if there are zero-weight",
|
"Tools.merge_twist_bones_desc": "When checked, twist bones will be kept, even if there are zero-weight",
|
||||||
"Tools.clean_weights": "Remove Zero Weight Bones",
|
"Tools.clean_weights": "Remove Zero Weight Bones",
|
||||||
"Tools.clean_weights_desc": "Remove bones with no vertex weights",
|
"Tools.clean_weights_desc": "Remove bones with no vertex weights",
|
||||||
|
"Tools.clean_vertex_groups": "Remove Unused Vertex Groups",
|
||||||
|
"Tools.clean_vertex_groups_desc": "Remove vertex groups on meshes assigned to no vertices.",
|
||||||
"Tools.preserve_parent_bones": "Preserve Parent Bones",
|
"Tools.preserve_parent_bones": "Preserve Parent Bones",
|
||||||
"Tools.preserve_parent_bones_desc": "Keep bones that have children even if they have no weights",
|
"Tools.preserve_parent_bones_desc": "Keep bones that have children even if they have no weights",
|
||||||
"Tools.target_bone_type": "Target Bone Type",
|
"Tools.target_bone_type": "Target Bone Type",
|
||||||
@@ -204,6 +206,7 @@
|
|||||||
"Tools.remove_selected_bones": "Remove Selected Bones",
|
"Tools.remove_selected_bones": "Remove Selected Bones",
|
||||||
"Tools.remove_selected_bones_desc": "Remove selected zero weight bones from armature",
|
"Tools.remove_selected_bones_desc": "Remove selected zero weight bones from armature",
|
||||||
"Tools.bones_removed": "Removed {count} bones",
|
"Tools.bones_removed": "Removed {count} bones",
|
||||||
|
"Tools.vertex_groups_removed": "Removed {count} vertex groups.",
|
||||||
"Tools.clean_constraints": "Delete Bone Constraints",
|
"Tools.clean_constraints": "Delete Bone Constraints",
|
||||||
"Tools.clean_constraints_desc": "Remove all bone constraints from armature",
|
"Tools.clean_constraints_desc": "Remove all bone constraints from armature",
|
||||||
"Tools.clean_constraints_success": "Removed {count} bone constraints",
|
"Tools.clean_constraints_success": "Removed {count} bone constraints",
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ class AvatarToolKit_PT_ToolsPanel(Panel):
|
|||||||
row = col.row(align=True)
|
row = col.row(align=True)
|
||||||
row.operator(AvatarToolKit_OT_RemoveZeroWeightBones.bl_idname, text=t("Tools.clean_weights"), icon='GROUP_BONE')
|
row.operator(AvatarToolKit_OT_RemoveZeroWeightBones.bl_idname, text=t("Tools.clean_weights"), icon='GROUP_BONE')
|
||||||
row.operator(AvatarToolKit_OT_DeleteBoneConstraints.bl_idname, text=t("Tools.clean_constraints"), icon='CONSTRAINT_BONE')
|
row.operator(AvatarToolKit_OT_DeleteBoneConstraints.bl_idname, text=t("Tools.clean_constraints"), icon='CONSTRAINT_BONE')
|
||||||
|
row = col.row(align=True)
|
||||||
|
row.operator(AvatarToolKit_OT_RemoveZeroWeightVertexGroups.bl_idname, text=t("Tools.clean_vertex_groups"), icon='CONSTRAINT_BONE')
|
||||||
|
|
||||||
# Merge Tools
|
# Merge Tools
|
||||||
merge_box: UILayout = layout.box()
|
merge_box: UILayout = layout.box()
|
||||||
|
|||||||
Reference in New Issue
Block a user