diff options
author | Campbell Barton <ideasman42@gmail.com> | 2006-07-03 05:52:14 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2006-07-03 05:52:14 +0400 |
commit | 6c4a0d7769930715baa527715884536610050be5 (patch) | |
tree | a39070f466644a697d3f5bbf42141ceb5bea8e08 /release | |
parent | aaf05a1d20dd991077d59645e963c5cbcbecd6dc (diff) |
added python 2.3 set importer for BPyMesh_redux
made ngon loop-reduce function faster by replacing dicts with sets
off_export has some errors, modernized the script.
added a python 2.3 reversed compat function - just uses ls[::-1]
Further 2.3 compat testing needed.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/3ds_import.py | 6 | ||||
-rw-r--r-- | release/scripts/bpymodules/BPyMesh.py | 49 | ||||
-rw-r--r-- | release/scripts/bpymodules/BPyMesh_redux.py | 19 | ||||
-rw-r--r-- | release/scripts/off_export.py | 53 |
4 files changed, 74 insertions, 53 deletions
diff --git a/release/scripts/3ds_import.py b/release/scripts/3ds_import.py index 157881087fb..f51a764586e 100644 --- a/release/scripts/3ds_import.py +++ b/release/scripts/3ds_import.py @@ -112,10 +112,12 @@ from struct import calcsize, unpack import os # If python version is less than 2.4, try to get set stuff from module -import sys -if ( (sys.version_info[0] <= 2) and (sys.version_info[1] < 4) ): +try: + set +except: from sets import Set as set + #this script imports uvcoords as sticky vertex coords #this parameter enables copying these to face uv coords #which shold be more useful. diff --git a/release/scripts/bpymodules/BPyMesh.py b/release/scripts/bpymodules/BPyMesh.py index 5e111340217..02896296feb 100644 --- a/release/scripts/bpymodules/BPyMesh.py +++ b/release/scripts/bpymodules/BPyMesh.py @@ -1,5 +1,22 @@ import Blender -from BPyMesh_redux import redux # seperated because of its size. +#from BPyMesh_redux import redux # seperated because of its size. +#from BPyMesh_redux import redux # seperated because of its size. +import BPyMesh_redux +reload(BPyMesh_redux) +redux= BPyMesh_redux.redux + +# python 2.3 has no reversed() iterator. this will only work on lists and tuples +try: + reversed +except: + def reversed(l): return l[::-1] + + +# If python version is less than 2.4, try to get set stuff from module +try: + set +except: + from sets import Set as set def meshWeight2Dict(me): @@ -653,7 +670,7 @@ def ngon(from_data, indices, PREF_FIX_LOOPS= True): else: verts= [from_data.verts[i].co for ii, i in enumerate(indices)] - for i in reversed(xrange(1, len(verts))): + for i in xrange(len(verts)-1, 0, -1): # same as reversed(xrange(1, len(verts))): if verts[i][1]==verts[i-1][0]: verts.pop(i-1) @@ -678,15 +695,15 @@ def ngon(from_data, indices, PREF_FIX_LOOPS= True): return [] - edge_used_count= {} - del_edges= {} + edges_used= set() + edges_doubles= set() # We need to check if any edges are used twice location based. for ed in edges: edkey= ed_key_mlen(verts[ed[0]], verts[ed[1]]) - try: - del_edges[edkey]= edge_used_count[edkey] - except: - edge_used_count[edkey]= True + if edkey in edges_used: + edges_doubles.add(edkey) + else: + edges_used.add(edkey) # Store a list of unconnected loop segments split by double edges. # will join later @@ -698,12 +715,8 @@ def ngon(from_data, indices, PREF_FIX_LOOPS= True): for v in verts: if v!=v_prev: - # Arze we crossing an edge we removed? - #if del_edges.has_key( ): - try: eddata= del_edges[ed_key_mlen(v, v_prev)] - except: eddata= None - - if eddata: + # Are we crossing an edge we removed? + if ed_key_mlen(v, v_prev) in edges_doubles: context_loop= [v] loop_segments.append(context_loop) else: @@ -739,10 +752,10 @@ def ngon(from_data, indices, PREF_FIX_LOOPS= True): joining_segments= False segcount= len(loop_segments) - for j in reversed(xrange(segcount)): + for j in xrange(segcount-1, -1, -1): #reversed(xrange(segcount)): seg_j= loop_segments[j] if seg_j: - for k in reversed(xrange(j)): + for k in xrange(j-1, -1, -1): # reversed(xrange(j)): if not seg_j: break seg_k= loop_segments[k] @@ -855,8 +868,8 @@ def meshCalcNormals(me, vertNormals=None): len_fnos= len(fnos) if len_fnos>1: totAngDiff=0 - for j in reversed(xrange(len_fnos)): - for k in reversed(xrange(j)): + for j in xrange(len_fnos-1, -1, -1): # same as reversed(xrange(...)) + for k in xrange(j-1, -1, -1): # same as reversed(xrange(...)) #print j,k try: totAngDiff+= (Ang(fnos[j], fnos[k])) # /180 isnt needed, just to keeop the vert small. diff --git a/release/scripts/bpymodules/BPyMesh_redux.py b/release/scripts/bpymodules/BPyMesh_redux.py index 0ffbc313e41..680ee27859e 100644 --- a/release/scripts/bpymodules/BPyMesh_redux.py +++ b/release/scripts/bpymodules/BPyMesh_redux.py @@ -28,6 +28,12 @@ LineIntersect= Blender.Mathutils.LineIntersect CrossVecs= Blender.Mathutils.CrossVecs import BPyMesh +# If python version is less than 2.4, try to get set stuff from module + +try: + set +except: + from sets import Set as set def uv_key(uv): return round(uv.x, 5), round(uv.y, 5) @@ -185,15 +191,16 @@ def redux(ob, REDUX=0.5, BOUNDRY_WEIGHT=2.0, REMOVE_DOUBLES=False, FACE_AREA_WEI else: for i, ed in enumerate(edges): collapse_edges[i].init_from_edge(ed) - # Faster then slicing - for ii in xrange(len(collapse_edges)-(i+1)): - collapse_edges.pop() + + # Strip the unneeded end off the list + collapse_edges[i+1:]= [] for i, f in enumerate(faces): collapse_faces[i].init_from_face(f) - # Faster then slicing - for ii in xrange(len(collapse_faces)-(i+1)): - collapse_faces.pop() + + # Strip the unneeded end off the list + collapse_faces[i+1:]= [] + collapse_edges_dict= dict( [(ced.key, ced) for ced in collapse_edges] ) diff --git a/release/scripts/off_export.py b/release/scripts/off_export.py index 53bd9ef6a6f..f1c0e397032 100644 --- a/release/scripts/off_export.py +++ b/release/scripts/off_export.py @@ -56,54 +56,53 @@ Notes:<br> # # ***** END GPL LICENCE BLOCK ***** -import Blender, meshtools +import Blender #import time +# Python 2.3 has no reversed. +try: + reversed +except: + def reversed(l): return l[::-1] + # ============================== # ====== Write OFF Format ====== # ============================== def write(filename): #start = time.clock() - file = open(filename, "wb") - - objects = Blender.Object.GetSelected() - objname = objects[0].name - meshname = objects[0].data.name - mesh = Blender.NMesh.GetRaw(meshname) - #mesh = Blender.NMesh.GetRawFromObject(meshname) # for SubSurf - obj = Blender.Object.Get(objname) + file = open(filename, 'wb') + scn= Blender.Scene.GetCurrent() + object= scn.getActiveObject() + if not object or object.getType()!='Mesh': + Blender.Draw.PupMenu('Error%t|Select 1 active mesh object') + return + + mesh = object.getData(mesh=1) # === OFF Header === - file.write("OFF\n") - file.write("%d %d %d\n" % (len(mesh.verts), len(mesh.faces), 0)) + file.write('OFF\n') + file.write('%d %d %d\n' % (len(mesh.verts), len(mesh.faces), 0)) # === Vertex List === - for i in range(len(mesh.verts)): - if not i%100 and meshtools.show_progress: - Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Writing Verts") - x, y, z = mesh.verts[i].co - file.write("%f %f %f\n" % (x, y, z)) + for i, v in enumerate(mesh.verts): + file.write('%f %f %f\n' % tuple(v.co)) # === Face List === - for i in range(len(mesh.faces)): - if not i%100 and meshtools.show_progress: - Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Faces") - file.write(`len(mesh.faces[i].v)`+' ') - mesh.faces[i].v.reverse() - for j in range(len(mesh.faces[i].v)): - file.write(`mesh.faces[i].v[j].index`+' ') - file.write("\n") + for i, f in enumerate(mesh.faces): + file.write('%i ' % len(f)) + for v in reversed(f.v): + file.write('%d ' % v.index) + file.write('\n') Blender.Window.DrawProgressBar(1.0, '') # clear progressbar file.close() #end = time.clock() #seconds = " in %.2f %s" % (end-start, "seconds") - message = "Successfully exported " + Blender.sys.basename(filename)# + seconds - meshtools.print_boxed(message) + message = 'Successfully exported "%s"' % Blender.sys.basename(filename)# + seconds def fs_callback(filename): if filename.find('.off', -4) <= 0: filename += '.off' write(filename) -Blender.Window.FileSelector(fs_callback, "Export OFF") +Blender.Window.FileSelector(fs_callback, "Export OFF", Blender.sys.makename(ext='.off')) |