[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3845] contrib/py/scripts/addons/ mesh_extra_tools: update mextrude for bmesh & update panel

Brendon Murphy meta.androcto1 at gmail.com
Fri Oct 12 08:26:29 CEST 2012


Revision: 3845
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3845
Author:   meta-androcto
Date:     2012-10-12 06:26:28 +0000 (Fri, 12 Oct 2012)
Log Message:
-----------
update mextrude for bmesh & update panel
help hints in mesh bump_help

Modified Paths:
--------------
    contrib/py/scripts/addons/mesh_extra_tools/__init__.py
    contrib/py/scripts/addons/mesh_extra_tools/mesh_bump.py
    contrib/py/scripts/addons/mesh_extra_tools/mesh_mextrude_plus.py

Modified: contrib/py/scripts/addons/mesh_extra_tools/__init__.py
===================================================================
--- contrib/py/scripts/addons/mesh_extra_tools/__init__.py	2012-10-12 00:45:19 UTC (rev 3844)
+++ contrib/py/scripts/addons/mesh_extra_tools/__init__.py	2012-10-12 06:26:28 UTC (rev 3845)
@@ -138,16 +138,16 @@
 
     def draw(self, context):
         layout = self.layout
-        prop = layout.operator("wm.context_set_value", text="Face Select",
-            icon='FACESEL')
-        prop.value = "(False, False, True)"
-        prop.data_path = "tool_settings.mesh_select_mode"
-        layout.operator('object.mextrude')
-        layout.operator('mesh.bump')
+        row = layout.split(0.80)
+        row.operator('object.mextrude', text = 'Multi Face Extrude')
+        row.operator('help.mextrude', text = '?')
+        row = layout.split(0.80)
+        row.operator('mesh.bump', text = 'Inset Bump')
+        row.operator('help.bump', text = '?')
         layout.operator('object.mesh2bones')
 # Define "Extras" menu
 def menu_func(self, context):
-    self.layout.menu("VIEW3D_MT_edit_mesh_extras", icon="PLUGIN")
+    self.layout.menu('VIEW3D_MT_edit_mesh_extras', icon='PLUGIN')
 
 
 def register():

Modified: contrib/py/scripts/addons/mesh_extra_tools/mesh_bump.py
===================================================================
--- contrib/py/scripts/addons/mesh_extra_tools/mesh_bump.py	2012-10-12 00:45:19 UTC (rev 3844)
+++ contrib/py/scripts/addons/mesh_extra_tools/mesh_bump.py	2012-10-12 06:26:28 UTC (rev 3845)
@@ -190,12 +190,13 @@
 		layout.label('To Help:')
 		layout.label('Keep extrusions small to prevent overlapping')
 		layout.label('Do not select all faces')
+		layout.label('if using with create armature, enter object mode first')
 	
 	def execute(self, context):
 		return {'FINISHED'}
 
 	def invoke(self, context, event):
-		return context.window_manager.invoke_popup(self, width = 300)		
+		return context.window_manager.invoke_popup(self, width = 350)		
 '''
 def menu_func(self, context):
 	self.layout.operator(Bump_init.bl_idname, text="Bump")

Modified: contrib/py/scripts/addons/mesh_extra_tools/mesh_mextrude_plus.py
===================================================================
--- contrib/py/scripts/addons/mesh_extra_tools/mesh_mextrude_plus.py	2012-10-12 00:45:19 UTC (rev 3844)
+++ contrib/py/scripts/addons/mesh_extra_tools/mesh_mextrude_plus.py	2012-10-12 06:26:28 UTC (rev 3845)
@@ -45,14 +45,15 @@
     return self.off * (1 + random.gauss(0, self.var1 / 3))
 
 def vrot(self,r):
-    random.seed(self.ran+r)
+    random.seed(self.ran + r)
     return Euler((radians(self.rotx) + random.gauss(0, self.var2 / 3), \
         radians(self.roty) + random.gauss(0, self.var2 / 3), \
         radians(self.rotz) + random.gauss(0,self.var2 / 3)), 'XYZ')
 
 def vsca(self, r):
     random.seed(self.ran + r)
-    return [self.sca * (1 + random.gauss(0, self.var3 / 3))] * 3
+    return self.sca * (1 + random.gauss(0, self.var3 / 3))
+
 # centroide de una seleccion de vertices
 def centro(ver):
     vvv = [v for v in ver if v.select]
@@ -98,7 +99,8 @@
 
     @classmethod
     def poll(cls, context):
-        return (context.object and context.object.type == 'MESH')
+        obj = context.object
+        return (obj and obj.type == 'MESH')
 
     def draw(self, context):
         layout = self.layout
@@ -120,65 +122,53 @@
 
     def execute(self, context):
         obj = bpy.context.object
-        data, om, msv =  obj.data, obj.mode, []
-        msm = bpy.context.tool_settings.mesh_select_mode
+        data, om =  obj.data, obj.mode
         bpy.context.tool_settings.mesh_select_mode = [False, False, True]
 
-        # disable modifiers
-        for i in range(len(obj.modifiers)):
-            msv.append(obj.modifiers[i].show_viewport)
-            obj.modifiers[i].show_viewport = False
-
-        # isolate selection
+        # bmesh operations
         bpy.ops.object.mode_set()
-        bpy.ops.object.mode_set(mode='EDIT')
-        total = data.total_face_sel
-        try: bpy.ops.mesh.select_inverse()
-        except: bpy.ops.mesh.select_all(action='INVERT')
-        bpy.ops.object.vertex_group_assign(new=True)
-        bpy.ops.mesh.hide()
+        bm = bmesh.new()
+        bm.from_mesh(obj.data)
+        sel = [f for f in bm.faces if f.select]
 
         # faces loop
-        for i in range(total):
-            bpy.ops.object.editmode_toggle()
-            # is bmesh..?
-            try:
-                faces = data.polygons
-            except:
-                faces = data.faces
-            for f in faces:
-                if not f.hide:
-                    f.select = True
-                    break
-            norm = f.normal.copy()
-            rot, loc = vrot(self, i), vloc(self, i)
-            norm.rotate(obj.matrix_world.to_quaternion())
-            bpy.ops.object.editmode_toggle()
+        for i, of in enumerate(sel):
+            rot = vrot(self, i)
+            off = vloc(self, i)
+            of.normal_update()
 
-            # extrude loop
-            for a in range(self.num):
-                norm.rotate(rot)
-                r2q = rot.to_quaternion()
-                bpy.ops.mesh.extrude_faces_move()
-                bpy.ops.transform.translate(value = norm * loc)
-                bpy.ops.transform.rotate(value = r2q.angle, axis = r2q.axis)
-                bpy.ops.transform.resize(value = vsca(self, i + a))
-            bpy.ops.object.vertex_group_remove_from()
-            bpy.ops.mesh.hide()
+            # extrusion loop
+            for r in range(self.num):
+                nf = of.copy()
+                nf.normal_update()
+                no = nf.normal.copy()
+                ce = nf.calc_center_bounds()
+                s = vsca(self, i + r)
 
-        # keep just last faces selected
-        bpy.ops.mesh.reveal()
-        bpy.ops.object.vertex_group_deselect()
-        bpy.ops.object.vertex_group_remove()
-        bpy.ops.object.mode_set()
+                for v in nf.verts:
+                    v.co -= ce
+                    v.co.rotate(rot)
+                    v.co += ce + no * off
+                    v.co = v.co.lerp(ce, 1 - s)
 
+                # extrude code from TrumanBlending
+                for a, b in zip(of.loops, nf.loops):
+                    sf = bm.faces.new((a.vert, a.link_loop_next.vert, \
+                        b.link_loop_next.vert, b.vert))
+                    sf.normal_update()
 
+                bm.faces.remove(of)
+                of = nf
+
+        for v in bm.verts: v.select = False
+        for e in bm.edges: e.select = False
+        bm.to_mesh(obj.data)
+        obj.data.update()
+
         # restore user settings
-        for i in range(len(obj.modifiers)): 
-            obj.modifiers[i].show_viewport = msv[i]
-        bpy.context.tool_settings.mesh_select_mode = msm
         bpy.ops.object.mode_set(mode=om)
-        if not total:
+
+        if not len(sel):
             self.report({'INFO'}, 'Select one or more faces...')
         return{'FINISHED'}
 



More information about the Bf-extensions-cvs mailing list