+ other=e.other_face(cur)
+ if other and not other.smooth_group:
+ other.smooth_group=sg
+ sg.faces.append(other)
+ queue.append(other)
+
+ def create_strip(self, face, reverse):
+ edge=None
+ for e in face.edges:
+ other=e.other_face(face)
+ if other and other.smooth_group.index==face.smooth_group.index and not other.flag:
+ edge=e
+ break
+
+ if not edge:
+ return None
+
+ if self.strip_debug:
+ print "Starting strip from %s, edge %s, reverse=%s"%([v.index for v in face.verts], (edge.v1.index, edge.v2.index), reverse)
+
+ verts=face.get_vertices_from(reverse, edge.v1, edge.v2)
+ if len(verts)==3:
+ result=[verts[-1], verts[0]]
+ else:
+ result=[verts[-2], verts[-1]]
+
+ while 1:
+ verts=face.get_vertices_from(reverse, *result[-2:])
+ k=len(result)%2
+ if self.strip_debug:
+ print " Adding %s"%[v.index for v in verts]
+
+ face.flag=True
+ if len(verts)==4 and not k:
+ result.append(verts[3])
+ result.append(verts[2])
+ if len(verts)==4 and k:
+ result.append(verts[3])
+
+ edge=face.get_edge(*result[-2:])
+
+ if self.strip_debug:
+ print " Next edge is %s"%((edge.v1.index, edge.v2.index), )
+
+ next=edge.other_face(face)
+ if not next or next.smooth_group.index!=face.smooth_group.index or next.flag:
+ break
+ face=next
+
+ if self.strip_debug:
+ print " %s"%[v.index for v in result]
+
+ return result
+
+ def get_locality(self, strip):
+ total=0
+ for i in range(1, len(strip)):
+ if strip[i].index!=strip[i-1].index:
+ total+=1.0/(abs(strip[i].index-strip[i-1].index))
+ return total/len(strip)
+
+ def get_followers(self, strip):
+ result={}
+ for i in range(len(strip)-1):
+ v=strip[i]
+ n=strip[i+1]
+ if v.index!=n.index:
+ if v.index not in result:
+ result[v.index]={}
+ if n.index not in result[v.index]:
+ result[v.index][n.index]=1
+ else:
+ result[v.index][n.index]+=1
+ return result