diff --git a/release/scripts/bpymodules/BPyMesh.py b/release/scripts/bpymodules/BPyMesh.py index 92fe58c1dce..4cba8d6f65b 100644 --- a/release/scripts/bpymodules/BPyMesh.py +++ b/release/scripts/bpymodules/BPyMesh.py @@ -1,8 +1,8 @@ import Blender -from BPyMesh_redux import redux # seperated because of its size. -#import BPyMesh_redux -#reload(BPyMesh_redux) -#redux= BPyMesh_redux.redux +# 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: @@ -15,7 +15,10 @@ except: try: set except: - from sets import Set as set + try: + from sets import Set as set + except: + set= None def meshWeight2Dict(me): @@ -642,6 +645,10 @@ def ngon(from_data, indices, PREF_FIX_LOOPS= True): indices: a list of indicies to use this list is the ordered closed polyline to fill, and can be a subset of the data given. PREF_FIX_LOOPS: If this is enabled polylines that use loops to make multiple polylines are delt with correctly. ''' + + if not set: # Need sets for this, otherwise do a normal fill. + PREF_FIX_LOOPS= False + Vector= Blender.Mathutils.Vector if not indices: return [] diff --git a/release/scripts/bpymodules/BPyMesh_redux.py b/release/scripts/bpymodules/BPyMesh_redux.py index 680ee27859e..b3ea615371b 100644 --- a/release/scripts/bpymodules/BPyMesh_redux.py +++ b/release/scripts/bpymodules/BPyMesh_redux.py @@ -33,7 +33,10 @@ import BPyMesh try: set except: - from sets import Set as set + try: + from sets import Set as set + except: + set= None def uv_key(uv): return round(uv.x, 5), round(uv.y, 5) @@ -63,6 +66,8 @@ def redux(ob, REDUX=0.5, BOUNDRY_WEIGHT=2.0, REMOVE_DOUBLES=False, FACE_AREA_WEI if REDUX<0 or REDUX>1.0: raise 'Error, factor must be between 0 and 1.0' + elif not set: + raise 'Error, this function requires Python 2.4 or a full install of Python 2.3' BOUNDRY_WEIGHT= 1+BOUNDRY_WEIGHT diff --git a/release/scripts/lightwave_import.py b/release/scripts/lightwave_import.py index 0f24caa2f6e..d4799cfb171 100644 --- a/release/scripts/lightwave_import.py +++ b/release/scripts/lightwave_import.py @@ -50,6 +50,11 @@ importername = "lwo_import 0.3.0a - devel" # +---------------------------------------------------------- # +---------------------------------------------------------+ # | Release log: | +# | 0.2.2 : This code works with Blender 2.42 RC3 | +# | Added a new PolyFill function for BPYMesh's | +# | ngon() to use, checked compatibility | +# | lightwaves ngons are imported as fgons | +# | Checked compatibility against 1711 lwo files | # | 0.2.1 : This code works with Blender 2.40 RC1 | # | modified material mode assignment to deal with | # | Python API modification | @@ -85,8 +90,14 @@ import Blender # use for comprehensiveImageLoad import BPyImage +# Use this ngon function +import BPyMesh + #python specific modules import -import struct, chunk, os, cStringIO +try: + import struct, chunk, os, cStringIO +except: + struct= chunk= os= cStringIO= None # =========================================================== # === Utility Preamble ====================================== @@ -1060,8 +1071,6 @@ def read_surfs(lwochunk, surf_list, tag_list): -import BPyMesh -reload(BPyMesh) def reduce_face(verts, face): TriangleArea= Blender.Mathutils.TriangleArea Vector= Blender.Mathutils.Vector @@ -1428,35 +1437,6 @@ def create_objects(clip_list, objspec_list, surf_list): return -# ===================== -# === Load an image === -# ===================== -#extensively search for image name -""" -def load_image(dir_part, name): - img = None - nname = os.path.splitext(name) - lname = [c.lower() for c in nname] - ext_list = [nname[1]] - if lname[1] != nname[1]: - ext_list.append(lname[1]) - ext_list.extend(['.tga', '.png', '.jpg', '.gif', '.bmp']) #order from best to worst (personal judgement) bmp last cause of nasty bug - #first round: original "case" - name_list = [] - name_list.extend([os.path.join(dir_part, nname[0] + ext) for ext in ext_list]) - #second round: lower "case" - if lname[0] != nname[0]: - name_list.extend([os.path.join(dir_part, lname[0] + ext) for ext in ext_list]) - for nn in name_list: - if os.path.exists(nn) == 1: - break - try: - img = Blender.Image.Load(nn) - return img - except IOError: - return None -""" - # =========================================== # === Lookup for image index in clip_list === @@ -1788,16 +1768,15 @@ def read_faces_6(lwochunk): tobj.pprint("read %s faces; type of block %d (0=FACE; 1=PATCH)" % (len(faces), subsurf)) return faces, subsurf +def main(): + if not struct: + Blender.Draw.PupMenu('This importer requires a full python install') + return + + Blender.Window.FileSelector(read, "Import LWO", '*.lwo') - -# =========================================================== -# === Start the show and main callback ====================== -# =========================================================== - -def fs_callback(filename): - read(filename) - -Blender.Window.FileSelector(fs_callback, "Import LWO") +if __name__=='__main__': + main() # Cams debugging lwo loader """ diff --git a/release/scripts/nendo_import.py b/release/scripts/nendo_import.py index e34101ad1e1..90a0e4fe462 100644 --- a/release/scripts/nendo_import.py +++ b/release/scripts/nendo_import.py @@ -70,17 +70,25 @@ edges during the course of modeling. # ***** END GPL LICENCE BLOCK ***** import Blender, meshtools -import struct, time, sys, os +try: + import struct, os +except: + struct= None # ============================= # === Read Nendo 1.x Format === # ============================= def read(filename): - start = time.clock() + start = Blender.sys.time() + + scn= Blender.Scene.GetCurrent() + for obj in scn.getChildren(): + obj.sel= 0 + file = open(filename, "rb") version, numobjs = read_header(file) - for object in range(numobjs): + for object in xrange(numobjs): good, = struct.unpack(">B", file.read(1)) if not good: continue # an empty object objname = read_object_flags(file) @@ -94,9 +102,9 @@ def read(filename): Blender.Window.DrawProgressBar(1.0, "Done") # clear progressbar file.close() - end = time.clock() + end = Blender.sys.time() seconds = " in %.2f %s" % (end-start, "seconds") - message = "Successfully imported " + os.path.basename(filename) + seconds + message = "Successfully imported " + filename.split(Blender.sys.sep)[-1] + seconds message += " (%s)" % version.title() meshtools.print_boxed(message) @@ -130,7 +138,7 @@ def read_object_flags(file): def read_edge_table(file, version): numedges, = struct.unpack(">H", file.read(2)) edge_table = {} - for i in range(numedges): + for i in xrange(numedges): if not i%100 and meshtools.show_progress: Blender.Window.DrawProgressBar(float(i)/numedges, "Reading Edge Table") edge = struct.unpack(">8H", file.read(16)) @@ -146,7 +154,7 @@ def read_edge_table(file, version): def read_face_table(file): numfaces, = struct.unpack(">H", file.read(2)) face_table = {} - for i in range(numfaces): + for i in xrange(numfaces): if not i%100 and meshtools.show_progress: Blender.Window.DrawProgressBar(float(i)/numfaces, "Reading Face Table") face_table[i] = struct.unpack(">H", file.read(2))[0] @@ -158,7 +166,7 @@ def read_face_table(file): def read_vert_table(file): numverts, = struct.unpack(">H", file.read(2)) vert_table = [] - for i in range(numverts): + for i in xrange(numverts): if not i%100 and meshtools.show_progress: Blender.Window.DrawProgressBar(float(i)/numverts, "Reading Vertex Table") w, x, y, z = struct.unpack(">H3f", file.read(14)) @@ -196,7 +204,7 @@ def make_verts(vert_table): [0.0,-0.1, 0.0, 0.0], [0.0, 0.0, 0.0, 1.0]] verts = [] - for i in range(len(vert_table)): + for i in xrange(len(vert_table)): vertex = vert_table[i][1] vertex = meshtools.apply_transform(vertex, matrix) verts.append(vertex) @@ -207,11 +215,10 @@ def make_verts(vert_table): # ======================= def make_face_table(edge_table): # For Nendo face_table = {} - for i in range(len(edge_table)): + for i in xrange(len(edge_table)): Lf = edge_table[i][2] Rf = edge_table[i][3] - face_table[Lf] = i - face_table[Rf] = i + face_table[Lf] = face_table[Rf] = i return face_table # ======================= @@ -219,11 +226,10 @@ def make_face_table(edge_table): # For Nendo # ======================= def make_vert_table(edge_table): # For Nendo vert_table = {} - for i in range(len(edge_table)): + for i in xrange(len(edge_table)): Sv = edge_table[i][1] Ev = edge_table[i][0] - vert_table[Sv] = i - vert_table[Ev] = i + vert_table[Sv] = vert_table[Ev]= i return vert_table # ================== @@ -233,7 +239,7 @@ def make_faces(edge_table): # For Nendo face_table = make_face_table(edge_table) faces=[] #for i in range(len(face_table)): - for i in face_table.keys(): # avoids a whole class of errors + for i in face_table.iterkeys(): # avoids a whole class of errors face_verts = [] current_edge = face_table[i] while(1): @@ -250,7 +256,14 @@ def make_faces(edge_table): # For Nendo faces.append(face_verts) return faces -def fs_callback(filename): - read(filename) -Blender.Window.FileSelector(fs_callback, "Import Nendo") +def main(): + if not struct: + Blender.Draw.PupMenu('This importer requires a full python install') + return + + Blender.Window.FileSelector(read, 'Import Nendo', '*.ndo') + +if __name__=='__main__': + main() + diff --git a/release/scripts/ply_export.py b/release/scripts/ply_export.py index e09b9e59133..dbe6ca41f63 100644 --- a/release/scripts/ply_export.py +++ b/release/scripts/ply_export.py @@ -49,14 +49,21 @@ def file_callback(filename): return file = open(filename, 'wb') + mesh = BPyMesh.getMeshFromObject(object, None, True, False, scn) if not mesh: Blender.Draw.PupMenu('Error%t|Could not get mesh data from active object') return mesh.transform(object.matrixWorld) - - have_uv = mesh.faceUV + + if mesh.vertexColors or mesh.faceUV: + mesh.faceUV= 1 + have_uv= True + else: + have_uv= False + + verts = [] # list of dictionaries vdict = {} # (index, normal, uv) -> new index for i, f in enumerate(mesh.faces): @@ -130,4 +137,11 @@ def file_callback(filename): file.write('\n') file.close() -Blender.Window.FileSelector(file_callback, 'PLY Export', Blender.sys.makename(ext='.ply')) + + +def main(): + Blender.Window.FileSelector(file_callback, 'PLY Export', Blender.sys.makename(ext='.ply')) + + +if __name__=='__main__': + main() diff --git a/release/scripts/ply_import.py b/release/scripts/ply_import.py index dcdbc11ce5d..0b349909258 100644 --- a/release/scripts/ply_import.py +++ b/release/scripts/ply_import.py @@ -41,7 +41,10 @@ Run this script from "File->Import" and select the desired PLY file. # 2.32. import Blender, meshtools -import re, struct, StringIO +try: + import re, struct, StringIO +except: + struct= None class element_spec: name = '' @@ -301,5 +304,19 @@ def filesel_callback(filename): message = 'Successfully imported ' + Blender.sys.basename(filename) + ' ' + str(Blender.sys.time()-t) meshtools.print_boxed(message) -Blender.Window.FileSelector(filesel_callback, 'Import PLY', Blender.sys.makename(ext='.ply')) + + +def main(): + if not struct: + Blender.Draw.PupMenu('This importer requires a full python install') + return + + Blender.Window.FileSelector(filesel_callback, 'Import PLY', '*.ply') + +if __name__=='__main__': + main() + + + +