more updates, mostly 2.3 error checking, nice messages when pythons not installed and some nendo import optimizations.

BPyMesh will work with the exception of the redux function in py2.3
This commit is contained in:
2006-07-03 20:17:40 +00:00
parent 64ff9ae4a8
commit c4b4e2922f
6 changed files with 106 additions and 71 deletions

View 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()