[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24347] trunk/blender/release/scripts: Select interior faces, access from the mesh select menu
Campbell Barton
ideasman42 at gmail.com
Thu Nov 5 13:37:49 CET 2009
Revision: 24347
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24347
Author: campbellbarton
Date: 2009-11-05 13:37:49 +0100 (Thu, 05 Nov 2009)
Log Message:
-----------
Select interior faces, access from the mesh select menu
new mesh functions, remove duplicates in uvproject and mesh_skin
- face.edge_keys()
- edge.key()
- mesh.edge_face_count()
- mesh.edge_face_count_dict()
Modified Paths:
--------------
trunk/blender/release/scripts/modules/bpy_ext/__init__.py
trunk/blender/release/scripts/op/mesh_skin.py
trunk/blender/release/scripts/op/uvcalc_smart_project.py
trunk/blender/release/scripts/ui/space_view3d.py
Added Paths:
-----------
trunk/blender/release/scripts/modules/bpy_ext/Mesh.py
Added: trunk/blender/release/scripts/modules/bpy_ext/Mesh.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_ext/Mesh.py (rev 0)
+++ trunk/blender/release/scripts/modules/bpy_ext/Mesh.py 2009-11-05 12:37:49 UTC (rev 24347)
@@ -0,0 +1,72 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+def ord_ind(i1,i2):
+ if i1<i2: return i1,i2
+ return i2,i1
+
+def edge_key(ed):
+ v1, v2 = tuple(ed.verts)
+ return ord_ind(v1, v2)
+
+def face_edge_keys(face):
+ verts = tuple(face.verts)
+ if len(verts)==3:
+ return ord_ind(verts[0], verts[1]), ord_ind(verts[1], verts[2]), ord_ind(verts[2], verts[0])
+
+ return ord_ind(verts[0], verts[1]), ord_ind(verts[1], verts[2]), ord_ind(verts[2], verts[3]), ord_ind(verts[3], verts[0])
+
+def mesh_edge_keys(mesh):
+ return [edge_key for face in mesh.faces for edge_key in face.edge_keys()]
+
+def mesh_edge_face_count_dict(mesh, face_edge_keys=None):
+
+ # Optional speedup
+ if face_edge_keys==None:
+ face_edge_keys = [face.edge_keys() for face in face_list]
+
+ face_edge_count = {}
+ for face_keys in face_edge_keys:
+ for key in face_keys:
+ try:
+ face_edge_count[key] += 1
+ except:
+ face_edge_count[key] = 1
+
+
+ return face_edge_count
+
+def mesh_edge_face_count(mesh, face_edge_keys=None):
+ edge_face_count_dict = mesh.edge_face_count_dict(face_edge_keys)
+ return [edge_face_count_dict.get(ed.key(), 0) for ed in mesh.edges]
+
+import bpy
+
+# * Edge *
+class_obj = bpy.types.MeshEdge
+class_obj.key = edge_key
+
+# * Face *
+class_obj = bpy.types.MeshFace
+class_obj.edge_keys = face_edge_keys
+
+# * Mesh *
+class_obj = bpy.types.Mesh
+class_obj.edge_keys = mesh_edge_keys
+class_obj.edge_face_count = mesh_edge_face_count
+class_obj.edge_face_count_dict = mesh_edge_face_count_dict
Modified: trunk/blender/release/scripts/modules/bpy_ext/__init__.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_ext/__init__.py 2009-11-05 11:17:09 UTC (rev 24346)
+++ trunk/blender/release/scripts/modules/bpy_ext/__init__.py 2009-11-05 12:37:49 UTC (rev 24347)
@@ -17,3 +17,4 @@
# ##### END GPL LICENSE BLOCK #####
import bpy_ext.Object
+import bpy_ext.Mesh
Modified: trunk/blender/release/scripts/op/mesh_skin.py
===================================================================
--- trunk/blender/release/scripts/op/mesh_skin.py 2009-11-05 11:17:09 UTC (rev 24346)
+++ trunk/blender/release/scripts/op/mesh_skin.py 2009-11-05 12:37:49 UTC (rev 24347)
@@ -222,23 +222,7 @@
# Returns face edges.
# face must have edge data.
-
-# Utility funcs for 2.5, make into a module??
-def ord_ind(i1,i2):
- if i1<i2: return i1,i2
- return i2,i1
-def edge_key(ed):
- v1,v2 = tuple(ed.verts)
- return ord_ind(v1, v2)
-
-def face_edge_keys(f):
- verts = tuple(f.verts)
- if len(verts)==3:
- return ord_ind(verts[0], verts[1]), ord_ind(verts[1], verts[2]), ord_ind(verts[2], verts[0])
-
- return ord_ind(verts[0], verts[1]), ord_ind(verts[1], verts[2]), ord_ind(verts[2], verts[3]), ord_ind(verts[3], verts[0])
-
def mesh_faces_extend(me, faces, mat_idx = 0):
orig_facetot = len(me.faces)
new_facetot = len(faces)
@@ -272,15 +256,15 @@
if MESH_MODE == 'FACE':
context.scene.tool_settings.mesh_selection_mode = 'EDGE'
# value is [edge, face_sel_user_in]
- edge_dict= dict((edge_key(ed), [ed, 0]) for ed in me.edges)
+ edge_dict= dict((ed.key(), [ed, 0]) for ed in me.edges)
for f in me.faces:
- if f.sel:
- for edkey in face_edge_keys(f):
+ if f.selected:
+ for edkey in f.edge_keys():
edge_dict[edkey][1] += 1
context.scene.tool_settings.mesh_selection_mode = MESH_MODE
- return [ ed_data[0] for ed_data in edge_dict.itervalues() if ed_data[1] == 1 ]
+ return [ ed_data[0] for ed_data in edge_dict.values() if ed_data[1] == 1 ]
@@ -296,7 +280,7 @@
vert_used = [False] * tot
for ed in selEdges:
- i1, i2 = edge_key(ed)
+ i1, i2 = ed.key()
vert_siblings[i1].append(i2)
vert_siblings[i2].append(i1)
Modified: trunk/blender/release/scripts/op/uvcalc_smart_project.py
===================================================================
--- trunk/blender/release/scripts/op/uvcalc_smart_project.py 2009-11-05 11:17:09 UTC (rev 24346)
+++ trunk/blender/release/scripts/op/uvcalc_smart_project.py 2009-11-05 12:37:49 UTC (rev 24347)
@@ -789,23 +789,6 @@
return Matrix([a1[0], a1[1], a1[2]], [a2[0], a2[1], a2[2]], [a3[0], a3[1], a3[2]])
-# Utility funcs for 2.5, make into a module??
-def ord_ind(i1,i2):
- if i1<i2: return i1,i2
- return i2,i1
-
-def edge_key(ed):
- v1,v2 = tuple(ed.verts)
- return ord_ind(v1, v2)
-
-def face_edge_keys(f):
- verts = tuple(f.verts)
- if len(verts)==3:
- return ord_ind(verts[0], verts[1]), ord_ind(verts[1], verts[2]), ord_ind(verts[2], verts[0])
-
- return ord_ind(verts[0], verts[1]), ord_ind(verts[1], verts[2]), ord_ind(verts[2], verts[3]), ord_ind(verts[3], verts[0])
-
-
class thickface(object):
__slost__= 'v', 'uv', 'no', 'area', 'edge_keys'
def __init__(self, face, uvface, mesh_verts):
@@ -817,7 +800,7 @@
self.no = face.normal
self.area = face.area
- self.edge_keys = face_edge_keys(face)
+ self.edge_keys = face.edge_keys()
global ob
ob = None
Modified: trunk/blender/release/scripts/ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d.py 2009-11-05 11:17:09 UTC (rev 24346)
+++ trunk/blender/release/scripts/ui/space_view3d.py 2009-11-05 12:37:49 UTC (rev 24347)
@@ -302,6 +302,7 @@
layout.itemO("mesh.select_random", text="Random...")
layout.itemO("mesh.edges_select_sharp", text="Sharp Edges")
layout.itemO("mesh.faces_select_linked_flat", text="Linked Flat Faces")
+ layout.itemO("mesh.faces_select_interior", text="Interior Faces")
layout.itemS()
More information about the Bf-blender-cvs
mailing list