[Durian-svn] [3784] operator to smooth vertex groups along selected edge loops
campbell
institute at blender.org
Mon May 24 15:15:50 CEST 2010
Revision: 3784
https://blenderinstitute.dyndns.org/durian-svn/?do=log&project=durian&path=/&rev=3784
Author: campbell
Date: 2010-05-24 15:15:50 +0200 (Mon, 24 May 2010)
Log Message:
-----------
operator to smooth vertex groups along selected edge loops
Added Paths:
-----------
pro/scripts/op/
pro/scripts/op/mesh_weight_smooth.py
Added: pro/scripts/op/mesh_weight_smooth.py
===================================================================
--- pro/scripts/op/mesh_weight_smooth.py (rev 0)
+++ pro/scripts/op/mesh_weight_smooth.py 2010-05-24 13:15:50 UTC (rev 3784)
@@ -0,0 +1,72 @@
+import bpy
+
+def main(context):
+ obj = context.object
+ is_editmode = obj.mode == 'EDIT'
+
+ if is_editmode:
+ bpy.ops.object.mode_set(mode='EDIT', toggle=True)
+
+ vertex_group = context.object.active_vertex_group
+
+ if vertex_group is None:
+ return
+
+ group_act = context.object.active_vertex_group.index
+
+ def weight_get(vert, act):
+ for ge in vert.groups:
+ if ge.group == act:
+ return ge
+
+ me = context.object.data
+ me_verts = me.verts
+
+ for loop in me.edge_loops_from_edges(edges=[ed for ed in me.edges if ed.selected]):
+ tot = len(loop)
+ if tot == 2:
+ continue
+
+ weight_first = getattr(weight_get(me_verts[loop[0]], group_act), "weight", 0.0)
+ weight_last = getattr(weight_get(me_verts[loop[-1]], group_act), "weight", 0.0)
+
+ tot_fac = tot - 1
+ for i in range(1, tot_fac):
+ vi = loop[i]
+ ge = weight_get(me_verts[loop[i]], group_act)
+ if ge:
+ fac = i / tot_fac
+ ge.weight = weight_first * (1.0 - fac) + weight_last * fac
+
+ if is_editmode:
+ bpy.ops.object.mode_set(mode='EDIT', toggle=True)
+
+
+class VertexLoopBlend(bpy.types.Operator):
+ ''''''
+ bl_idname = "object.vertex_loop_blend"
+ bl_label = "Vertex Loop Blend"
+
+ def poll(self, context):
+ return context.active_object != None
+
+ def execute(self, context):
+ main(context)
+ return {'FINISHED'}
+
+menu_func = lambda self, context: self.layout.operator(VertexLoopBlend.bl_idname)
+
+def register():
+ bpy.types.register(VertexLoopBlend)
+ bpy.types.VIEW3D_PT_tools_weightpaint.append(menu_func)
+ bpy.types.VIEW3D_PT_tools_meshedit.append(menu_func)
+
+def unregister():
+ bpy.types.unregister(VertexLoopBlend)
+ bpy.types.VIEW3D_PT_tools_weightpaint.remove(menu_func)
+ bpy.types.VIEW3D_PT_tools_meshedit.remove(menu_func)
+
+if __name__ == "__main__":
+ register()
+
+ bpy.ops.object.vertex_loop_blend()
More information about the Durian-svn
mailing list