Advertisement
Guest User

Edge length equalize for Blender

a guest
Feb 28th, 2016
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.26 KB | None | 0 0
  1. import bpy
  2. from mathutils import Vector
  3.  
  4. bl_info = {
  5.     "name": "Edge length equalize.",
  6.     "author": "Michal Krupa",
  7.     "version": (0, 1, 0),
  8.     "blender": (2, 70, 0),
  9.     "location": "Editmode > W",
  10.     "warning": "",
  11.     "description": "",
  12.     "wiki_url": "",
  13.     "category": "Mesh",
  14. }
  15.  
  16.  
  17. class EdgeEqualizeOperator(bpy.types.Operator):
  18.     bl_idname = "mo.edge_equalize"
  19.     bl_label = "Equalize edge length."
  20.  
  21.     def execute(self, context):
  22.         ob = bpy.context.object
  23.        
  24.         if ob.type != 'MESH':
  25.             raise TypeError("Active object is not a Mesh")
  26.        
  27.         if ob:
  28.             self.do_equalize(ob)
  29.        
  30.         return {'FINISHED'}
  31.    
  32.     def do_equalize(self, ob):
  33.         ob.update_from_editmode()
  34.  
  35.         me = ob.data
  36.  
  37.         if len(me.edges) < 1:
  38.             raise ValueError("Mesh has no edges")
  39.  
  40.         edges = me.edges
  41.  
  42.         selected_edges = [i.index for i in bpy.context.active_object.data.edges if i.select == True]  
  43.  
  44.         if not selected_edges:
  45.             self.report({'ERROR'}, "You have to select some edges!")
  46.             return
  47.        
  48.         current_mode = ob.mode
  49.        
  50.         bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
  51.  
  52.         total_length = 0
  53.  
  54.         for edge in selected_edges:
  55.             vt1 = me.edges[edge].vertices[0]
  56.             vt2 = me.edges[edge].vertices[1]
  57.             a_to_b_vec = me.vertices[vt1].co - me.vertices[vt2].co
  58.             total_length += a_to_b_vec.length
  59.             print(a_to_b_vec.length)
  60.         median_length = total_length / len(selected_edges)
  61.  
  62.         for edge in selected_edges:
  63.             vt1 = me.edges[edge].vertices[0]
  64.             vt2 = me.edges[edge].vertices[1]
  65.             center = (me.vertices[vt1].co + me.vertices[vt2].co) * .5
  66.            
  67.             for v in (me.vertices[vt1], me.vertices[vt2]):
  68.                 new_co = (v.co - center).normalized() * (median_length / 2.0)
  69.                 v.co = new_co + center
  70.                
  71.         bpy.ops.object.mode_set(mode=current_mode, toggle=False)
  72.        
  73.  
  74. def register():
  75.     bpy.utils.register_class(EdgeEqualizeOperator)
  76.  
  77.  
  78. def unregister():
  79.     bpy.utils.unregister_class(EdgeEqualizeOperator)
  80.  
  81.  
  82. if __name__ == "__main__":
  83.     register()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement