forked from bartvdbraak/blender
updated raw import/export nice error messages, optimized with LC's removed meshtools depencancy, use Mesh instead of NMesh
This commit is contained in:
parent
96c6457b26
commit
e8d39a3ca3
@ -1,8 +1,8 @@
|
||||
#!BPY
|
||||
|
||||
"""
|
||||
Name: 'Raw Triangle (.raw)...'
|
||||
Blender: 232
|
||||
Name: 'Raw Faces (.raw)...'
|
||||
Blender: 242
|
||||
Group: 'Export'
|
||||
Tooltip: 'Export selected mesh to Raw Triangle Format (.raw)'
|
||||
"""
|
||||
@ -53,49 +53,48 @@ Usage:<br>
|
||||
#
|
||||
# ***** END GPL LICENCE BLOCK *****
|
||||
|
||||
import Blender, meshtools
|
||||
import sys
|
||||
#import time
|
||||
import Blender
|
||||
import BPyMesh
|
||||
|
||||
# =================================
|
||||
# === Write RAW Triangle Format ===
|
||||
# =================================
|
||||
def write(filename):
|
||||
#start = time.clock()
|
||||
start = Blender.sys.time()
|
||||
if not filename.lower().endswith('.raw'):
|
||||
filename += '.raw'
|
||||
|
||||
scn= Blender.Scene.GetCurrent()
|
||||
object= scn.getActiveObject()
|
||||
if not object:
|
||||
Blender.Draw.PupMenu('Error%t|Select 1 active object')
|
||||
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)
|
||||
|
||||
|
||||
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)
|
||||
|
||||
|
||||
std=sys.stdout
|
||||
sys.stdout=file
|
||||
for face in mesh.faces:
|
||||
if len(face.v) == 3: # triangle
|
||||
v1, v2, v3 = face.v
|
||||
faceverts = tuple(v1.co) + tuple(v2.co) + tuple(v3.co)
|
||||
print "% f % f % f % f % f % f % f % f % f" % faceverts
|
||||
else: # quadrilateral
|
||||
v1, v2, v3, v4 = face.v
|
||||
faceverts1 = tuple(v1.co) + tuple(v2.co) + tuple(v3.co)
|
||||
faceverts2 = tuple(v3.co) + tuple(v4.co) + tuple(v1.co)
|
||||
print "% f % f % f % f % f % f % f % f % f" % faceverts1
|
||||
print "% f % f % f % f % f % f % f % f % f" % faceverts2
|
||||
sys.stdout=std
|
||||
|
||||
|
||||
Blender.Window.DrawProgressBar(1.0, '') # clear progressbar
|
||||
for f in mesh.faces:
|
||||
for v in f.v:
|
||||
file.write('%.6f %.6f %.6f ' % tuple(v.co))
|
||||
file.write('\n')
|
||||
file.close()
|
||||
#end = time.clock()
|
||||
#seconds = " in %.2f %s" % (end-start, "seconds")
|
||||
message = "Successfully exported " + Blender.sys.basename(filename)# + seconds
|
||||
meshtools.print_boxed(message)
|
||||
|
||||
end = Blender.sys.time()
|
||||
message = 'Successfully exported "%s" in %.4f seconds' % ( Blender.sys.basename(filename), end-start)
|
||||
print message
|
||||
|
||||
def fs_callback(filename):
|
||||
if filename.find('.raw', -4) <= 0: filename += '.raw'
|
||||
write(filename)
|
||||
|
||||
Blender.Window.FileSelector(fs_callback, "Export Raw")
|
||||
def main():
|
||||
Blender.Window.FileSelector(write, 'RAW Export', Blender.sys.makename(ext='.raw'))
|
||||
|
||||
|
||||
if __name__=='__main__':
|
||||
main()
|
||||
|
@ -1,8 +1,8 @@
|
||||
#!BPY
|
||||
|
||||
"""
|
||||
Name: 'Raw Triangle (.raw)...'
|
||||
Blender: 232
|
||||
Name: 'Raw Faces (.raw)...'
|
||||
Blender: 242
|
||||
Group: 'Import'
|
||||
Tooltip: 'Import Raw Triangle File Format (.raw)'
|
||||
"""
|
||||
@ -59,50 +59,67 @@ tolerance.
|
||||
#
|
||||
# ***** END GPL LICENCE BLOCK *****
|
||||
|
||||
import Blender, meshtools
|
||||
#import time
|
||||
import Blender
|
||||
|
||||
# ================================
|
||||
# === Read RAW Triangle Format ===
|
||||
# ================================
|
||||
def read(filename):
|
||||
#start = time.clock()
|
||||
t = Blender.sys.time()
|
||||
file = open(filename, "rb")
|
||||
|
||||
# Collect data from RAW format
|
||||
faces = []
|
||||
for line in file.readlines():
|
||||
try:
|
||||
f1, f2, f3, f4, f5, f6, f7, f8, f9 = map(float, line.split())
|
||||
faces.append([(f1, f2, f3), (f4, f5, f6), (f7, f8, f9)])
|
||||
except: # Quad
|
||||
f1, f2, f3, f4, f5, f6, f7, f8, f9, A, B, C = map(float, line.split())
|
||||
faces.append([(f1, f2, f3), (f4, f5, f6), (f7, f8, f9), (A, B, C)])
|
||||
|
||||
def line_to_face(line):
|
||||
# Each triplet is an xyz float
|
||||
line_split= map(float, line.split())
|
||||
if len(line_split)==9: # Tri
|
||||
f1, f2, f3, f4, f5, f6, f7, f8, f9 = line_split
|
||||
return [(f1, f2, f3), (f4, f5, f6), (f7, f8, f9)]
|
||||
if len(line_split)==12: # Quad
|
||||
f1, f2, f3, f4, f5, f6, f7, f8, f9, A, B, C = line_split
|
||||
return [(f1, f2, f3), (f4, f5, f6), (f7, f8, f9), (A, B, C)]
|
||||
|
||||
faces = [ line_to_face(line) for line in file.readlines()]
|
||||
file.close()
|
||||
|
||||
# Generate verts and faces lists, without duplicates
|
||||
verts = []
|
||||
coords = {}
|
||||
index = 0
|
||||
for i in range(len(faces)):
|
||||
for j in range(len(faces[i])):
|
||||
vertex = faces[i][j]
|
||||
if not coords.has_key(vertex):
|
||||
coords[vertex] = index
|
||||
index += 1
|
||||
verts.append(vertex)
|
||||
faces[i][j] = coords[vertex]
|
||||
|
||||
|
||||
for f in faces:
|
||||
if f: # Line might be blank
|
||||
for i, v in enumerate(f):
|
||||
try:
|
||||
f[i]= coords[v]
|
||||
except:
|
||||
f[i]= coords[v] = index
|
||||
index += 1
|
||||
verts.append(v)
|
||||
|
||||
me= Blender.Mesh.New()
|
||||
me.verts.extend(verts)
|
||||
me.faces.extend(faces)
|
||||
|
||||
|
||||
objname = Blender.sys.splitext(Blender.sys.basename(filename))[0]
|
||||
scn= Blender.Scene.GetCurrent()
|
||||
for obj in scn.getChildren():
|
||||
obj.sel= 0
|
||||
|
||||
me.name= objname
|
||||
ob= Blender.Object.New('Mesh', objname)
|
||||
ob.link(me)
|
||||
scn.link(ob)
|
||||
ob.sel= 1
|
||||
ob.Layers= scn.Layers
|
||||
Blender.Redraw()
|
||||
|
||||
print 'Successfully imported "%s" in %.4f seconds' % (Blender.sys.basename(filename), Blender.sys.time()-t)
|
||||
|
||||
meshtools.create_mesh(verts, faces, objname)
|
||||
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
|
||||
meshtools.print_boxed(message)
|
||||
|
||||
def fs_callback(filename):
|
||||
read(filename)
|
||||
def main():
|
||||
Blender.Window.FileSelector(read, 'RAW Import', Blender.sys.makename(ext='.raw'))
|
||||
|
||||
Blender.Window.FileSelector(fs_callback, "Import Raw")
|
||||
if __name__=='__main__':
|
||||
main()
|
||||
|
Loading…
Reference in New Issue
Block a user