bpy/rna api class feature
[blender-staging.git] / release / scripts / modules / bpy_types.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 StructRNA = bpy.types.Struct.__bases__[0]
22 # StructRNA = bpy.types.Struct
23
24
25 class Object(bpy.types.ID):
26
27     def _get_children(self):
28         return [child for child in bpy.data.objects if child.parent == self]
29
30     children = property(_get_children)
31
32
33 def ord_ind(i1,i2):
34     if i1<i2: return i1,i2
35     return i2,i1
36
37 class Mesh(bpy.types.ID):
38     
39     def _get_edge_keys(self):
40         return [edge_key for face in self.faces for edge_key in face.edge_keys]
41
42     edge_keys = property(_get_edge_keys)
43
44     def _get_edge_face_count_dict(self):
45         face_edge_keys = [face.edge_keys for face in self.faces]
46         face_edge_count = {}
47         for face_keys in face_edge_keys:
48             for key in face_keys:
49                 try:
50                     face_edge_count[key] += 1
51                 except:
52                     face_edge_count[key] = 1
53
54         return face_edge_count
55
56     edge_face_count_dict = property(_get_edge_face_count_dict)
57
58     def _get_edge_face_count(self):
59         edge_face_count_dict = self.edge_face_count_dict
60         return [edge_face_count_dict.get(ed.key, 0) for ed in mesh.edges]
61
62     edge_face_count = property(_get_edge_face_count)
63
64
65 class MeshEdge(StructRNA):
66
67     def _get_key(self):
68         return ord_ind(*tuple(self.verts))
69
70     key = property(_get_key)
71
72
73 class MeshFace(StructRNA):
74
75     def _get_edge_keys(self):
76         verts = tuple(self.verts)
77         if len(verts)==3:
78             return ord_ind(verts[0], verts[1]),  ord_ind(verts[1], verts[2]),  ord_ind(verts[2], verts[0])
79
80         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])
81
82     edge_keys = property(_get_edge_keys)