Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2006-07-03 08:12:53 +0400
committerCampbell Barton <ideasman42@gmail.com>2006-07-03 08:12:53 +0400
commitacef774a610802bed2874b326ef601776bf0093e (patch)
tree7b2e2a3803435a80f96318da293472e9e5b91745 /release
parent8a10a773453bef0ce5c4e2eee40b09ef8f5aacb6 (diff)
Modernized radiosity i/o - better errors, optimized with LC's modifiers and matricies applied.
Diffstat (limited to 'release')
-rw-r--r--release/scripts/radiosity_export.py108
-rw-r--r--release/scripts/radiosity_import.py104
2 files changed, 128 insertions, 84 deletions
diff --git a/release/scripts/radiosity_export.py b/release/scripts/radiosity_export.py
index 43ec7d9838c..461d9f8cfa8 100644
--- a/release/scripts/radiosity_export.py
+++ b/release/scripts/radiosity_export.py
@@ -69,33 +69,48 @@ specular highlights to the vertex colors.
import Blender, meshtools
#import time
+import BPyMesh
try:
import struct
+ NULL_COLOR= struct.pack('<BBBB', 255,255,255,255)
except:
- msg = "Error: you need a full Python install to run this script."
- meshtools.print_boxed(msg)
- Blender.Draw.PupMenu("ERROR%t|"+msg)
+ struct= None
+
+
# ================================
# ====== Write Radio Format ======
# ================================
def write(filename):
- #start = time.clock()
+ if not filename.lower().endswith('.radio'):
+ filename += '.radio'
+
+ scn= Blender.Scene.GetCurrent()
+ object= scn.getActiveObject()
+ if not object:
+ Blender.Draw.PupMenu('Error%t|Select 1 active object')
+ return
+ objname= object.name
+
+ 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)
+
+
+
+ start = Blender.sys.time()
file = open(filename, "wb")
- objects = Blender.Object.GetSelected()
- objname = objects[0].name
- meshname = objects[0].data.name
- mesh = Blender.NMesh.GetRaw(meshname)
- obj = Blender.Object.Get(objname)
-
- if not meshtools.has_vertex_colors(mesh):
- message = "Please assign vertex colors before exporting. \n"
- message += objname + " object was not saved."
- meshtools.print_boxed(message)
- Blender.Draw.PupMenu("ERROR%t|"+message)
- return
+ if not mesh.faceUV:
+ mesh.faceUV= 1
+ #message = 'Please assign vertex colors before exporting "%s"|object was not saved' % object.name
+ #Blender.Draw.PupMenu("ERROR%t|"+message)
+ #return
# === Object Name ===
file.write(struct.pack("<h", len(objname)))
@@ -103,38 +118,45 @@ def write(filename):
# === Vertex List ===
file.write(struct.pack("<l", len(mesh.verts)))
- 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
+ for v in mesh.verts:
+ #if not i%100 and meshtools.show_progress:
+ # Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Writing Verts")
+ x, y, z = tuple(v.co)
file.write(struct.pack("<fff", x, y, z))
# === Face List ===
- file.write(struct.pack("<l", len(mesh.faces)))
- 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(struct.pack("<b", len(mesh.faces[i].v)))
- for j in range(len(mesh.faces[i].v)):
- file.write(struct.pack("<h", mesh.faces[i].v[j].index))
-
- for j in range(4): # .col always has a length of 4
- file.write(struct.pack("<BBBB", mesh.faces[i].col[j].r,
- mesh.faces[i].col[j].g,
- mesh.faces[i].col[j].b,
- mesh.faces[i].col[j].a))
-
+ file.write(struct.pack('<l', len(mesh.faces)))
+ #for i in range(len(mesh.faces)):
+ for f in mesh.faces:
+ #if not i%100 and meshtools.show_progress:
+ # Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Faces")
+
+ file.write(struct.pack('<b', len(f) ))
+ #for j in range(len(mesh.faces[i].v)):
+ for v in f.v:
+ file.write(struct.pack('<h', v.index))
+
+ f_col= f.col
+ for c in f_col: # .col always has a length of 4
+ file.write(struct.pack('<BBBB', c.r, c.g, c.b, c.a))
+
+ # Write the last values out again. always have 4 cols even for tris
+ if len(f_col) == 3:
+ file.write(NULL_COLOR)
+
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
+ end = Blender.sys.time()
+ message = 'Successfully exported "%s" in %.2f seconds' % (Blender.sys.basename(filename), end-start)
meshtools.print_boxed(message)
-def fs_callback(filename):
- if filename.find('.radio', -6) <= 0: filename += '.radio'
- write(filename)
-Blender.Window.FileSelector(fs_callback, "Export Radio")
+def main():
+ if not struct:
+ Blender.Draw.PupMenu('ERROR%t|Error: you need a full Python install to run this script')
+ return
+
+ Blender.Window.FileSelector(write, 'Export Radio', Blender.sys.makename(ext='.radio'))
+
+if __name__ == '__main__':
+ main()
diff --git a/release/scripts/radiosity_import.py b/release/scripts/radiosity_import.py
index d2d45568b99..85ad1a891b2 100644
--- a/release/scripts/radiosity_import.py
+++ b/release/scripts/radiosity_import.py
@@ -53,76 +53,98 @@ file to open.
# ***** END GPL LICENCE BLOCK *****
import Blender, meshtools
-#import time
try:
import struct
except:
- msg = "Error: you need a full Python install to run this script."
- meshtools.print_boxed(msg)
- Blender.Draw.PupMenu("ERROR%t|"+msg)
+ struct= None
# ===============================
# ====== Read Radio Format ======
# ===============================
def read(filename):
- #start = time.clock()
+ start = Blender.sys.time()
file = open(filename, "rb")
mesh = Blender.NMesh.GetRaw()
#mesh.addMaterial(Blender.Material.New())
-
+
+ NULL_UV3= [ (0,0), (0,1), (1,1) ]
+ NULL_UV4= [ (0,0), (0,1), (1,1), (1,0) ]
+
+
# === Object Name ===
namelen, = struct.unpack("<h", file.read(2))
objname, = struct.unpack("<"+`namelen`+"s", file.read(namelen))
# === Vertex List ===
+ Vert= Blender.NMesh.Vert
numverts, = struct.unpack("<l", file.read(4))
- for i in range(numverts):
- if not i%100 and meshtools.show_progress:
- Blender.Window.DrawProgressBar(float(i)/numverts, "Reading Verts")
- x, y, z = struct.unpack("<fff", file.read(12))
- mesh.verts.append(Blender.NMesh.Vert(x, y, z))
-
+
+ # Se we can run in a LC
+ def _vert_():
+ x,y,z= struct.unpack('<fff', file.read(12))
+ return Vert(x, y, z)
+
+ mesh.verts= [_vert_() for i in xrange(numverts)]
+ del _vert_
+
+
# === Face List ===
+ Face= Blender.NMesh.Face
+ Col= Blender.NMesh.Col
numfaces, = struct.unpack("<l", file.read(4))
- for i in range(numfaces):
- if not i%100 and meshtools.show_progress:
- Blender.Window.DrawProgressBar(float(i)/numfaces, "Reading Faces")
+ for i in xrange(numfaces):
+ #if not i%100 and meshtools.show_progress:
+ # Blender.Window.DrawProgressBar(float(i)/numfaces, "Reading Faces")
- face = Blender.NMesh.Face()
+
numfaceverts, = struct.unpack("<b", file.read(1))
-
- for j in range(numfaceverts):
- index, = struct.unpack("<h", file.read(2))
- face.v.append(mesh.verts[index])
-
- for j in range(4):
- r, g, b, a = struct.unpack("<BBBB", file.read(4))
- vertexcolor = Blender.NMesh.Col(r, g, b, a)
- face.col.append(vertexcolor)
-
- if len(face.v) == 3:
- face.uv = [ (0,0), (0,1), (1,1) ]
+
+
+ face = Face(\
+ [\
+ mesh.verts[\
+ struct.unpack("<h", file.read(2))[0]] for j in xrange(numfaceverts)\
+ ]
+ )
+
+ face.col= [ Col(r, g, b, a) \
+ for j in xrange(4)\
+ for r,g,b,a in ( struct.unpack("<BBBB", file.read(4)), )]
+
+ if len(face) == 3:
+ face.uv = NULL_UV3
else:
- face.uv = [ (0,0), (0,1), (1,1), (1,0) ]
+ face.uv = NULL_UV4
+
face.mode = 0
mesh.faces.append(face)
- # ->tools.create_mesh(verts, faces, objname):
- Blender.NMesh.PutRaw(mesh, objname)
- object = Blender.Object.GetSelected()
- object[0].name=objname
- # ->tools.create_mesh(verts, faces, objname):
-
+ scn= Blender.Scene.GetCurrent()
+ for obj in scn.getChildren():
+ obj.sel= 0
+
+ obj= Blender.Object.New('Mesh', objname)
+ mesh.name= objname
+ obj.link(mesh)
+ scn.link(obj)
+ obj.sel= 1
+ obj.Layers= scn.Layers
+
Blender.Window.DrawProgressBar(1.0, '') # clear progressbar
file.close()
- #end = time.clock()
- #seconds = " in %.2f %s" % (end-start, "seconds")
- message = "Successfully imported " + Blender.sys.basename(filename)# + seconds
+ end = Blender.sys.time()
+ message = 'Successfully imported "%s" in %.2f seconds' % (Blender.sys.basename(filename), end-start)
meshtools.print_boxed(message)
-def fs_callback(filename):
- read(filename)
-Blender.Window.FileSelector(fs_callback, "Import Radio")
+def main():
+ if not struct:
+ Blender.Draw.PupMenu('ERROR%t|Error: you need a full Python install to run this script')
+ return
+
+ Blender.Window.FileSelector(read, "Import Radio", Blender.sys.makename(ext='.radio'))
+
+if __name__ == '__main__':
+ main()