[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