more updates, mostly 2.3 error checking, nice messages when pythons not installed...
authorCampbell Barton <ideasman42@gmail.com>
Mon, 3 Jul 2006 20:17:40 +0000 (20:17 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 3 Jul 2006 20:17:40 +0000 (20:17 +0000)
BPyMesh will work with the exception of the redux function in py2.3

release/scripts/bpymodules/BPyMesh.py
release/scripts/bpymodules/BPyMesh_redux.py
release/scripts/lightwave_import.py
release/scripts/nendo_import.py
release/scripts/ply_export.py
release/scripts/ply_import.py

index 92fe58c1dce3f28f9517796c99b9178ae6024fac..4cba8d6f65be375aec9225963596ab45abd71037 100644 (file)
@@ -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 []
index 680ee27859e85f92b737b935abece15bcc262863..b3ea615371b653acb21922a63725679c4d619f0f 100644 (file)
@@ -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
        
index 0f24caa2f6ea9dfb352d9c1dcf8ae82fe4e8947c..d4799cfb1719c12c71925624ddfd57a068e68790 100644 (file)
@@ -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
 """
index e34101ad1e1a3f49531ba61885fefe4a617dee44..90a0e4fe4628b02153b94fdb7a5a6dd3b1191bb0 100644 (file)
@@ -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()
+
index e09b9e59133ff78d86558c4b4bb5f7545ee5f6f8..dbe6ca41f633ca33f30b1f9d3f5cf2051a43dac3 100644 (file)
@@ -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()
index dcdbc11ce5d1901efcf557bd4dbc5428db8d22cb..0b349909258da29d10d8b74c22bb18c71f9a5a27 100644 (file)
@@ -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()
+
+
+
+