diff options
author | Campbell Barton <ideasman42@gmail.com> | 2006-07-02 00:26:07 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2006-07-02 00:26:07 +0400 |
commit | 577494dc05241df82099e55aa73b9e4390e54a6b (patch) | |
tree | 32ac80cf4a388fe12b751ce5ee84b8e8e145820a /release | |
parent | 51f0717a783f1120884ad6a648ee9ec1d3da04c1 (diff) |
Further tweaking to the scanfill stuff
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/bpymodules/BPyMesh.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/release/scripts/bpymodules/BPyMesh.py b/release/scripts/bpymodules/BPyMesh.py index 545d44b00be..8e93a51916f 100644 --- a/release/scripts/bpymodules/BPyMesh.py +++ b/release/scripts/bpymodules/BPyMesh.py @@ -571,7 +571,107 @@ def getUvPixelLoc(face, pxLoc, img_size = None, uvArea = None): type_tuple= type( (0,) ) type_list= type( [] ) + + +def draw_loops(loops): + + me= Blender.Mesh.New() + for l in loops: + + i= len(me.verts) + me.verts.extend([v[0] for v in l]) + try: + me.verts[0].sel= 1 + except: + pass + me.edges.extend([ (j-1, j) for j in xrange(i+1, len(me.verts)) ]) + # Close the edge? + #me.edges.extend((i, len(me.verts)-1)) + + # Fill + #fill= Blender.Mathutils.PolyFill(loops) + #me.faces.extend(fill) + + + ob= Blender.Object.New('Mesh') + ob.link(me) + scn= Blender.Scene.GetCurrent() + scn.link(ob) + ob.Layers= scn.Layers + ob.sel= 1 + +""" +def ngon(from_data, indices, PREF_FIX_LOOPS= True): + Vector= Blender.Mathutils.Vector + + def rvec(co): return round(co.x, 5), round(co.y, 5), round(co.z, 5) + def vert_treplet(v, i): + return v, rvec(v), i + + if type(from_data) in (type_tuple, type_list): + verts= [vert_treplet(Vector(from_data[i]), ii) for ii, i in enumerate(indices)] + else: + verts= [vert_treplet(from_data.verts[i].co, ii) for ii, i in enumerate(indices)] + + if PREF_FIX_LOOPS: + + + len_verts= len(verts) + loop_list= [] + vert_dict= {} + i= 1 + while i<len(verts): + + vertkey= verts[i][1] + + loop_idx= 0 + try: # is this a loop back on one of the last edges? + loop_idx= vert_dict[vertkey] + + except: + vert_dict[vertkey]= i + + if loop_idx and abs(loop_idx-i)>2: + + # print 'Found loop', i-loop_idx + loop_list.append(verts[loop_idx:i]) + #print loop_list + verts[loop_idx:i+1]= [] #verts[loop_idx:i+1]= [] + i= loop_idx+1 + + for v in loop_list[-1]: + try: + del vert_dict[v[1]] + except: + pass + + + i+=1 + + loop_list.append(verts) + + + + + # vert mapping + vert_map= [None]*len(indices) + ii=0 + for verts in loop_list: + for i, vert in enumerate(verts): + vert_map[i+ii]= vert[2] + + ii+=len(verts) + + fill= Blender.Mathutils.PolyFill([ [v[0] for v in loop] for loop in loop_list]) + #draw_loops(loop_list) + #raise 'loopy' + # map to original indicies + + return [[vert_map[i] for i in reversed(f)] for f in fill] +""" + def ngon(from_data, indices, PREF_FIX_LOOPS= True): + # print 'NGON', len(indices) ''' takes a polyline of indices (fgon) and returns a list of face indicie lists. |