Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bl_info = {
- "name": "Remove Unused Vertex Groups",
- "author": "ave, CoDEmanX, あんじっぷ",
- "version": (1, 0),
- #"blender": (2, 70, 0),
- "blender": (2, 80, 0),
- "location": "Properties Editor > Object data > Vertex Groups > Specials menu",
- "description": "Delete Vertex Groups with no assigned weight of active object",
- "warning": "",
- "wiki_url": "",
- "category": "Mesh"}
- # taken from here:
- # https://blenderartists.org/t/batch-delete-vertex-groups-script/449881/5
- import bpy
- from bpy.types import Operator
- class OBJECT_OT_remove_unused_vertex_group(Operator):
- bl_idname = "object.remove_unused_vertex_group"
- bl_label = "Remove unused vertex groups"
- bl_options = {'REGISTER', 'UNDO'}
- @classmethod
- def poll(cls, context):
- return (context.object is not None and
- context.object.type == 'MESH')
- def execute(self, context):
- suffix_map = {".L": ".R", ".l": ".r", "_L": "_R", "_l": "_r",
- "-L": "-R", "-l": "-r",
- ".R": ".L", ".r": ".l", "_R": "_L", "_r": "_l",
- "-R": "-L", "-r": "-l"}
- ob = context.object
- ob.update_from_editmode()
- has_mirror = len([x for x in ob.modifiers if x.type == 'MIRROR']) > 0
- suffix = suffix_map.keys()
- vgroups = ob.vertex_groups
- vgroup_used = {i: False for i, k in enumerate(vgroups)}
- for v in ob.data.vertices:
- for g in v.groups:
- if g.weight > 0.0:
- vgroup_used[g.group] = True
- if has_mirror:
- name = vgroups[g.group].name
- if name[-2:] in suffix:
- i = vgroups.find(name[:-2] + suffix_map[name[-2:]])
- vgroup_used[i] = True
- for i, used in sorted(vgroup_used.items(), reverse=True):
- if not used:
- vgroups.remove(vgroups[i])
- return {'FINISHED'}
- def menu_fn(self, context):
- self.layout.operator(
- OBJECT_OT_remove_unused_vertex_group.bl_idname,
- icon='X'
- )
- def register():
- from bpy.utils import register_class
- register_class(OBJECT_OT_remove_unused_vertex_group)
- bpy.types.MESH_MT_vertex_group_context_menu.prepend(menu_fn)
- def unregister():
- from bpy.utils import unregister_class
- unregister_class(OBJECT_OT_remove_unused_vertex_group)
- bpy.types.MESH_MT_vertex_group_context_menu.remove(menu_fn)
- if __name__ == "__main__":
- register()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement