-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathblender_export.py
85 lines (62 loc) · 1.58 KB
/
blender_export.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#
# Blender export script that generates the geometry file in the correct format
#
import Blender;
import Blender.Mesh;
def geomExport(filename):
file = open(filename, 'wb')
try :
doExport(file)
finally :
file.close()
def doExport(file):
scene = Blender.Scene.GetCurrent()
# Iterate over all objects and export
for obj in scene.objects:
# Only export selected objects
if not obj.isSelected():
continue
try :
mesh = Blender.Mesh.Get(obj.name)
except :
continue
if not mesh:
continue
mesh.transform(obj.matrixWorld)
# Iterate over all faces and write the vertices
for face in mesh.faces:
no = None
if face.smooth == 0 :
no = face.no
# Determine color
mi = face.mat
if mi < len(mesh.materials):
col = mesh.materials[face.mat].rgbCol
else :
col = [1.0, 1.0, 1.0]
# Write geometry
verts = face.v
nverts = len(verts)
if nverts == 3 :
writeTri(file, verts, col, no)
elif nverts == 4 :
writeTri(file, (verts[3], verts[1], verts[0]), col, no)
writeTri(file, (verts[1], verts[2], verts[3]), col, no)
else :
print "Skipping face that is neither tri nor quad!"
continue
def writeTri(file, verts, col, no) :
for v in verts:
# Write the information to the file
file.write('%f,%f,%f ' % tuple(v.co))
if no :
file.write('%f,%f,%f ' % tuple(no))
else :
file.write('%f,%f,%f ' % tuple(v.no))
file.write('%f,%f,%f ' % tuple(col))
file.write('\n')
def main():
Blender.Window.FileSelector(geomExport, 'trace.sh export',
Blender.sys.makename(ext='.geom'))
if __name__=='__main__':
main()