Hi!
I’m trying to write a Python script that modifies the selected vertices in a mesh. I used the mesh.vertices.select property for this as recommended in this Blender StackExchange post:
bl_info = {
"name": "Resymmetrize Vertices",
"category": "Mesh",
}
import bpy
class Resymmetrize(bpy.types.Operator):
"""Resymmetrize selected vertices""" # blender will use this as a tooltip for menu items and buttons.
bl_idname = "mesh.resymmetrize_selected" # unique identifier for buttons and menu items to reference.
bl_label = "Resymmetrize Vertices" # display name in the interface.
bl_options = {'REGISTER', 'UNDO'} # enable undo for the operator.
def execute(self, context): # execute() is called by blender when running the operator.
mesh = bpy.context.active_object.data
selected_verts = [v for v in mesh.vertices if v.select]
selected_vert_count = len(selected_verts)
# ?! str(selected_vert_count) returns string, report() wants something else, it seems
if selected_vert_count == 0:
self.report({'INFO'}, '0 vertices selected')
return {'FINISHED'}
if selected_vert_count == 1:
self.report({'INFO'}, '1 vertex selected')
return {'FINISHED'}
if selected_vert_count > 2:
self.report({'INFO'}, 'many vertices selected')
return {'FINISHED'}
if len(selected_verts) != 2:
self.report({'INFO'}, 'Select exactly 2 vertices before using this operator')
return {'FINISHED'}
average_x = (abs(selected_verts[0].x) + abs(selected_verts[1].x)) / 2
selected_verts[0].x = average_x * sgn(selected_verts[0].x)
selected_verts[1].x = average_x * sgn(selected_verts[1].x)
average_y = (selected_verts[0].y + selected_verts[1].y) / 2
selected_verts[0].y = average_y
selected_verts[1].y = average_y
average_z = (selected_verts[0].z + selected_verts[1].z) / 2
selected_verts[0].z = average_z
selected_verts[1].z = average_z
return {'FINISHED'} # this lets blender know the operator finished successfully.
def register():
bpy.utils.register_class(Resymmetrize)
def unregister():
bpy.utils.unregister_class(Resymmetrize)
For some reason, I always get the ‘many vertices selected’ message, even if I’m in edit mode and have no vertices selected at all.
What am I doing wrong?