bpy/rna api class feature
[blender-staging.git] / release / scripts / op / mesh.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 import bpy
20
21 def main(context):
22     ob = context.active_object
23     bpy.ops.mesh.selection_type(type='FACE')
24     is_editmode = (ob.mode=='EDIT')
25     if is_editmode:
26         bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
27
28     mesh = ob.data
29     
30     face_list = [face for face in mesh.faces]
31     face_edge_keys = [face.edge_keys for face in face_list]
32
33     edge_face_count = mesh.edge_face_count_dict
34     
35     def test_interior(index):
36         for key in face_edge_keys[index]:
37             if edge_face_count[key] < 3:
38                 return False
39         return True
40
41     for index, face in enumerate(face_list):
42         if(test_interior(index)):
43             face.selected = True
44         else:
45             face.selected = False
46
47     if is_editmode:
48         bpy.ops.object.mode_set(mode='EDIT', toggle=False)
49
50 class MeshSelectInteriorFaces(bpy.types.Operator):
51     '''Select faces where all edges have more then 2 face users.'''
52
53     bl_idname = "mesh.faces_select_interior"
54     bl_label = "Select Interior Faces"
55     bl_register = True
56     bl_undo = True
57
58     def poll(self, context):
59         ob = context.active_object
60         return (ob and ob.type == 'MESH')
61
62     def execute(self, context):
63         main(context)
64         return ('FINISHED',)
65
66
67 # Register the operator
68 bpy.ops.add(MeshSelectInteriorFaces)
69
70 if __name__ == "__main__":
71     bpy.ops.mesh.faces_select_interior()