Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import bpy
- from mathutils import Vector
- bl_info = {
- "name": "Edge length equalize.",
- "author": "Michal Krupa",
- "version": (0, 1, 0),
- "blender": (2, 70, 0),
- "location": "Editmode > W",
- "warning": "",
- "description": "",
- "wiki_url": "",
- "category": "Mesh",
- }
- class EdgeEqualizeOperator(bpy.types.Operator):
- bl_idname = "mo.edge_equalize"
- bl_label = "Equalize edge length."
- def execute(self, context):
- ob = bpy.context.object
- if ob.type != 'MESH':
- raise TypeError("Active object is not a Mesh")
- if ob:
- self.do_equalize(ob)
- return {'FINISHED'}
- def do_equalize(self, ob):
- ob.update_from_editmode()
- me = ob.data
- if len(me.edges) < 1:
- raise ValueError("Mesh has no edges")
- edges = me.edges
- selected_edges = [i.index for i in bpy.context.active_object.data.edges if i.select == True]
- if not selected_edges:
- self.report({'ERROR'}, "You have to select some edges!")
- return
- current_mode = ob.mode
- bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
- total_length = 0
- for edge in selected_edges:
- vt1 = me.edges[edge].vertices[0]
- vt2 = me.edges[edge].vertices[1]
- a_to_b_vec = me.vertices[vt1].co - me.vertices[vt2].co
- total_length += a_to_b_vec.length
- print(a_to_b_vec.length)
- median_length = total_length / len(selected_edges)
- for edge in selected_edges:
- vt1 = me.edges[edge].vertices[0]
- vt2 = me.edges[edge].vertices[1]
- center = (me.vertices[vt1].co + me.vertices[vt2].co) * .5
- for v in (me.vertices[vt1], me.vertices[vt2]):
- new_co = (v.co - center).normalized() * (median_length / 2.0)
- v.co = new_co + center
- bpy.ops.object.mode_set(mode=current_mode, toggle=False)
- def register():
- bpy.utils.register_class(EdgeEqualizeOperator)
- def unregister():
- bpy.utils.unregister_class(EdgeEqualizeOperator)
- if __name__ == "__main__":
- register()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement