makeRound.py
Replace selected verts onto a circle in Edit mode.
import bmesh import numpy as np def makeRound(): if bpy.ops.object.mode_set.poll(): bpy.ops.object.mode_set(mode='OBJECT', toggle=False) if bpy.ops.object.mode_set.poll(): bpy.ops.object.mode_set(mode='EDIT', toggle=False) o = bpy.context.scene.objects.active bm = bmesh.from_edit_mesh(o.data) tX = tY = tZ = 0 nVertsSelected = 0 for v in bm.verts: if v.select: nVertsSelected += 1 tX += v.co[0] tY += v.co[1] tZ += v.co[2] # c is the center c = np.array([tX/nVertsSelected, tY/nVertsSelected, tZ/nVertsSelected]) totalLength = 0 for v in bm.verts: if v.select: rv = np.array([v.co[0]-c[0], v.co[1]-c[1], v.co[2]-c[2]]) totalLength += np.linalg.norm(rv) avrgLength = totalLength/nVertsSelected for v in bm.verts: if v.select: rv = np.array([v.co[0]-c[0], v.co[1]-c[1], v.co[2]-c[2]]) v.co = c + (avrgLength*rv/np.linalg.norm(rv)) # Uncomment lines below to go back to Object mode, # though undo will be unabled. # if bpy.ops.object.mode_set.poll(): # bpy.ops.object.mode_set(mode='OBJECT', toggle=False)