diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-05-26 11:16:56 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-05-26 11:16:56 +0400 |
commit | 6466673a62083cf13bcb1290f1e3fbcb9231199f (patch) | |
tree | df1ff887eb7fdd7e7b59ed4ad11da5893b3132c5 /release/scripts/modules/bpy_types.py | |
parent | 9af390ab67dff7113fef5bae6bde4133b922e3e1 (diff) |
move less common mesh operations out of bpy_types into bpy_extras.mesh_utils
Diffstat (limited to 'release/scripts/modules/bpy_types.py')
-rw-r--r-- | release/scripts/modules/bpy_types.py | 157 |
1 files changed, 0 insertions, 157 deletions
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index c3352dd33ad..3c1b454e72e 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -356,163 +356,6 @@ class Mesh(bpy_types.ID): def edge_keys(self): return [edge_key for face in self.faces for edge_key in face.edge_keys] - @property - def edge_face_count_dict(self): - face_edge_keys = [face.edge_keys for face in self.faces] - 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 - - @property - def edge_face_count(self): - edge_face_count_dict = self.edge_face_count_dict - return [edge_face_count_dict.get(ed.key, 0) for ed in self.edges] - - def edge_loops_from_faces(self, faces=None, seams=()): - """ - Edge loops defined by faces - - Takes me.faces or a list of faces and returns the edge loops - These edge loops are the edges that sit between quads, so they dont touch - 1 quad, note: not connected will make 2 edge loops, both only containing 2 edges. - - return a list of edge key lists - [ [(0,1), (4, 8), (3,8)], ...] - - return a list of edge vertex index lists - """ - - OTHER_INDEX = 2, 3, 0, 1 # opposite face index - - if faces is None: - faces = self.faces - - edges = {} - - for f in faces: -# if len(f) == 4: - if f.vertices_raw[3] != 0: - edge_keys = f.edge_keys - for i, edkey in enumerate(f.edge_keys): - edges.setdefault(edkey, []).append(edge_keys[OTHER_INDEX[i]]) - - for edkey in seams: - edges[edkey] = [] - - # Collect edge loops here - edge_loops = [] - - for edkey, ed_adj in edges.items(): - if 0 < len(ed_adj) < 3: # 1 or 2 - # Seek the first edge - context_loop = [edkey, ed_adj[0]] - edge_loops.append(context_loop) - if len(ed_adj) == 2: - other_dir = ed_adj[1] - else: - other_dir = None - - ed_adj[:] = [] - - flipped = False - - while 1: - # from knowing the last 2, look for th next. - ed_adj = edges[context_loop[-1]] - if len(ed_adj) != 2: - - if other_dir and flipped == False: # the original edge had 2 other edges - flipped = True # only flip the list once - context_loop.reverse() - ed_adj[:] = [] - context_loop.append(other_dir) # save 1 lookiup - - ed_adj = edges[context_loop[-1]] - if len(ed_adj) != 2: - ed_adj[:] = [] - break - else: - ed_adj[:] = [] - break - - i = ed_adj.index(context_loop[-2]) - context_loop.append(ed_adj[not i]) - - # Dont look at this again - ed_adj[:] = [] - - return edge_loops - - def edge_loops_from_edges(self, edges=None): - """ - Edge loops defined by edges - - Takes me.edges or a list of edges and returns the edge loops - - return a list of vertex indices. - [ [1, 6, 7, 2], ...] - - closed loops have matching start and end values. - """ - line_polys = [] - - # Get edges not used by a face - if edges is None: - edges = self.edges - - if not hasattr(edges, "pop"): - edges = edges[:] - - edge_dict = {ed.key: ed for ed in self.edges if ed.select} - - while edges: - current_edge = edges.pop() - vert_end, vert_start = current_edge.vertices[:] - line_poly = [vert_start, vert_end] - - ok = True - while ok: - ok = False - #for i, ed in enumerate(edges): - i = len(edges) - while i: - i -= 1 - ed = edges[i] - v1, v2 = ed.vertices - if v1 == vert_end: - line_poly.append(v2) - vert_end = line_poly[-1] - ok = 1 - del edges[i] - # break - elif v2 == vert_end: - line_poly.append(v1) - vert_end = line_poly[-1] - ok = 1 - del edges[i] - #break - elif v1 == vert_start: - line_poly.insert(0, v2) - vert_start = line_poly[0] - ok = 1 - del edges[i] - # break - elif v2 == vert_start: - line_poly.insert(0, v1) - vert_start = line_poly[0] - ok = 1 - del edges[i] - #break - line_polys.append(line_poly) - - return line_polys - class MeshEdge(StructRNA): __slots__ = () |