* nmesh to mesh

* fixed errors with Null materials
* faster material exporting
* export with modifiers applied
* faces with invalid material indicies work now (maybe should be delt with in the Py API)
* removed per vert col code since all colors are pre face now.
This commit is contained in:
2007-01-26 10:37:18 +00:00
parent 624030165b
commit bc6fc72209

View File

@@ -2,7 +2,7 @@
""" """
Name: 'LightWave (.lwo)...' Name: 'LightWave (.lwo)...'
Blender: 232 Blender: 243
Group: 'Export' Group: 'Export'
Tooltip: 'Export selected meshes to LightWave File Format (.lwo)' Tooltip: 'Export selected meshes to LightWave File Format (.lwo)'
""" """
@@ -67,57 +67,64 @@ v5.5 format.
# #
# ***** END GPL LICENCE BLOCK ***** # ***** END GPL LICENCE BLOCK *****
import Blender, meshtools import Blender
import struct, chunk, os, cStringIO, time, operator import struct, cStringIO, operator
import BPyMesh
VCOL_NAME = "\251 Per-Face Vertex Colors"
DEFAULT_NAME = "\251 Blender Default"
# ============================== # ==============================
# === Write LightWave Format === # === Write LightWave Format ===
# ============================== # ==============================
def write(filename): def write(filename):
start = time.clock() start = Blender.sys.time()
file = open(filename, "wb") file = open(filename, "wb")
objects = Blender.Object.GetSelected() scn = Blender.Scene.GetCurrent()
objects.sort(lambda a,b: cmp(a.name, b.name)) objects = list(scn.objects.context)
if not objects: if not objects:
meshtools.print_boxed("No mesh objects are selected.") Blender.Draw.PupMenu('Error%t|No Objects selected')
return return
if len(objects) > 20 and meshtools.show_progress: try: objects.sort( key = lambda a: a.name )
meshtools.show_progress = 0 except: objects.sort(lambda a,b: cmp(a.name, b.name))
text = generate_text() text = generate_text()
desc = generate_desc() desc = generate_desc()
icon = "" #generate_icon() icon = "" #generate_icon()
material_names = get_used_material_names(objects) meshes = []
for obj in objects:
mesh = BPyMesh.getMeshFromObject(obj, None, True, False, scn)
if mesh:
mesh.transform(obj.matrixWorld)
meshes.append(mesh)
material_names = get_used_material_names(meshes)
tags = generate_tags(material_names) tags = generate_tags(material_names)
surfs = generate_surfs(material_names) surfs = generate_surfs(material_names)
chunks = [text, desc, icon, tags] chunks = [text, desc, icon, tags]
meshdata = cStringIO.StringIO() meshdata = cStringIO.StringIO()
layer_index = 0
for object in objects:
if object.type != 'Mesh': continue
objname = object.name
mesh = object.data
obj = Blender.Object.Get(objname)
mesh.transform(obj.matrixWorld) layer_index = 0
layr = generate_layr(objname, layer_index)
for mesh in meshes:
layr = generate_layr(obj.name, layer_index)
pnts = generate_pnts(mesh) pnts = generate_pnts(mesh)
bbox = generate_bbox(mesh) bbox = generate_bbox(mesh)
pols = generate_pols(mesh) pols = generate_pols(mesh)
ptag = generate_ptag(mesh, material_names) ptag = generate_ptag(mesh, material_names)
clip = generate_clip(mesh, material_names) clip = generate_clip(mesh, material_names)
if mesh.hasFaceUV(): if mesh.faceUV:
vmad_uv = generate_vmad_uv(mesh) # per face vmad_uv = generate_vmad_uv(mesh) # per face
if meshtools.has_vertex_colors(mesh): if mesh.vertexColors:
if meshtools.average_vcols: #if meshtools.average_vcols:
vmap_vc = generate_vmap_vc(mesh) # per vert # vmap_vc = generate_vmap_vc(mesh) # per vert
else: #else:
vmad_vc = generate_vmad_vc(mesh) # per face vmad_vc = generate_vmad_vc(mesh) # per face
write_chunk(meshdata, "LAYR", layr); chunks.append(layr) write_chunk(meshdata, "LAYR", layr); chunks.append(layr)
@@ -126,21 +133,22 @@ def write(filename):
write_chunk(meshdata, "POLS", pols); chunks.append(pols) write_chunk(meshdata, "POLS", pols); chunks.append(pols)
write_chunk(meshdata, "PTAG", ptag); chunks.append(ptag) write_chunk(meshdata, "PTAG", ptag); chunks.append(ptag)
if meshtools.has_vertex_colors(mesh): if mesh.vertexColors:
if meshtools.average_vcols: #if meshtools.average_vcols:
write_chunk(meshdata, "VMAP", vmap_vc) # write_chunk(meshdata, "VMAP", vmap_vc)
chunks.append(vmap_vc) # chunks.append(vmap_vc)
else: #else:
write_chunk(meshdata, "VMAD", vmad_vc) write_chunk(meshdata, "VMAD", vmad_vc)
chunks.append(vmad_vc) chunks.append(vmad_vc)
if mesh.hasFaceUV(): if mesh.faceUV:
write_chunk(meshdata, "VMAD", vmad_uv) write_chunk(meshdata, "VMAD", vmad_uv)
chunks.append(vmad_uv) chunks.append(vmad_uv)
write_chunk(meshdata, "CLIP", clip) write_chunk(meshdata, "CLIP", clip)
chunks.append(clip) chunks.append(clip)
layer_index += 1 layer_index += 1
mesh.verts = None # save some ram
for surf in surfs: for surf in surfs:
chunks.append(surf) chunks.append(surf)
@@ -158,10 +166,8 @@ def write(filename):
Blender.Window.DrawProgressBar(1.0, "") # clear progressbar Blender.Window.DrawProgressBar(1.0, "") # clear progressbar
file.close() file.close()
print '\a\r', print '\a\r',
end = time.clock() print "Successfully exported %s in %.3f seconds" % (filename.split('\\')[-1].split('/')[-1], Blender.sys.time() - start)
seconds = " in %.2f %s" % (end-start, "seconds")
message = "Successfully exported " + os.path.basename(filename) + seconds
meshtools.print_boxed(message)
# ======================================= # =======================================
# === Generate Null-Terminated String === # === Generate Null-Terminated String ===
@@ -176,27 +182,25 @@ def generate_nstring(string):
# =============================== # ===============================
# === Get Used Material Names === # === Get Used Material Names ===
# =============================== # ===============================
def get_used_material_names(objects): def get_used_material_names(meshes):
matnames = {} matnames = {}
for object in objects: for mesh in meshes:
if object.type == 'Mesh': if (not mesh.materials) and mesh.vertexColors:
mesh = object.getData(mesh=1)
if (not mesh.materials) and (meshtools.has_vertex_colors(mesh)):
# vcols only # vcols only
if meshtools.average_vcols: matnames[VCOL_NAME] = None
matnames["\251 Per-Vert Vertex Colors"] = None
else: elif mesh.materials and (not mesh.vertexColors):
matnames["\251 Per-Face Vertex Colors"] = None
elif (mesh.materials) and (not meshtools.has_vertex_colors(mesh)):
# materials only # materials only
for material in mesh.materials: for material in mesh.materials:
if material:
matnames[material.name] = None matnames[material.name] = None
elif (not mesh.materials) and (not meshtools.has_vertex_colors(mesh)): elif (not mesh.materials) and (not mesh.vertexColors):
# neither # neither
matnames["\251 Blender Default"] = None matnames[DEFAULT_NAME] = None
else: else:
# both # both
for material in mesh.materials: for material in mesh.materials:
if material:
matnames[material.name] = None matnames[material.name] = None
return matnames.keys() return matnames.keys()
@@ -204,8 +208,11 @@ def get_used_material_names(objects):
# === Generate Tag Strings (TAGS Chunk) === # === Generate Tag Strings (TAGS Chunk) ===
# ========================================= # =========================================
def generate_tags(material_names): def generate_tags(material_names):
if material_names:
material_names = map(generate_nstring, material_names) material_names = map(generate_nstring, material_names)
tags_data = reduce(operator.add, material_names) tags_data = reduce(operator.add, material_names)
else:
tags_data = generate_nstring('');
return tags_data return tags_data
# ======================== # ========================
@@ -214,7 +221,7 @@ def generate_tags(material_names):
def generate_surface(name): def generate_surface(name):
#if name.find("\251 Per-") == 0: #if name.find("\251 Per-") == 0:
# return generate_vcol_surf(mesh) # return generate_vcol_surf(mesh)
if name == "\251 Blender Default": if name == DEFAULT_NAME:
return generate_default_surf() return generate_default_surf()
else: else:
return generate_surf(name) return generate_surf(name)
@@ -242,7 +249,7 @@ def generate_layr(name, idx):
def generate_pnts(mesh): def generate_pnts(mesh):
data = cStringIO.StringIO() data = cStringIO.StringIO()
for i, v in enumerate(mesh.verts): for i, v in enumerate(mesh.verts):
if not i%100 and meshtools.show_progress: if not i%100:
Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Writing Verts") Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Writing Verts")
x, y, z = v.co x, y, z = v.co
data.write(struct.pack(">fff", x, z, y)) data.write(struct.pack(">fff", x, z, y))
@@ -256,9 +263,9 @@ def generate_bbox(mesh):
# need to transform verts here # need to transform verts here
if mesh.verts: if mesh.verts:
nv = [v.co for v in mesh.verts] nv = [v.co for v in mesh.verts]
xx = map(operator.getitem, nv, [0]*len(nv)) xx = [ co[0] for co in nv ]
yy = map(operator.getitem, nv, [1]*len(nv)) yy = [ co[1] for co in nv ]
zz = map(operator.getitem, nv, [2]*len(nv)) zz = [ co[2] for co in nv ]
else: else:
xx = yy = zz = [0.0,] xx = yy = zz = [0.0,]
@@ -268,12 +275,13 @@ def generate_bbox(mesh):
# ======================================== # ========================================
# === Average All Vertex Colors (Fast) === # === Average All Vertex Colors (Fast) ===
# ======================================== # ========================================
'''
def average_vertexcolors(mesh): def average_vertexcolors(mesh):
vertexcolors = {} vertexcolors = {}
vcolor_add = lambda u, v: [u[0]+v[0], u[1]+v[1], u[2]+v[2], u[3]+v[3]] vcolor_add = lambda u, v: [u[0]+v[0], u[1]+v[1], u[2]+v[2], u[3]+v[3]]
vcolor_div = lambda u, s: [u[0]/s, u[1]/s, u[2]/s, u[3]/s] vcolor_div = lambda u, s: [u[0]/s, u[1]/s, u[2]/s, u[3]/s]
for i, f in enumerate(mesh.faces): # get all vcolors that share this vertex for i, f in enumerate(mesh.faces): # get all vcolors that share this vertex
if not i%100 and meshtools.show_progress: if not i%100:
Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Finding Shared VColors") Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Finding Shared VColors")
col = f.col col = f.col
for j in xrange(len(f)): for j in xrange(len(f)):
@@ -283,7 +291,7 @@ def average_vertexcolors(mesh):
vertexcolors.setdefault(index, []).append([r,g,b,255]) vertexcolors.setdefault(index, []).append([r,g,b,255])
i = 0 i = 0
for index, value in vertexcolors.iteritems(): # average them for index, value in vertexcolors.iteritems(): # average them
if not i%100 and meshtools.show_progress: if not i%100:
Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Averaging Vertex Colors") Blender.Window.DrawProgressBar(float(i)/len(mesh.verts), "Averaging Vertex Colors")
vcolor = [0,0,0,0] # rgba vcolor = [0,0,0,0] # rgba
for v in value: for v in value:
@@ -292,10 +300,13 @@ def average_vertexcolors(mesh):
value[:] = vcolor_div(vcolor, shared) value[:] = vcolor_div(vcolor, shared)
i+=1 i+=1
return vertexcolors return vertexcolors
'''
# ==================================================== # ====================================================
# === Generate Per-Vert Vertex Colors (VMAP Chunk) === # === Generate Per-Vert Vertex Colors (VMAP Chunk) ===
# ==================================================== # ====================================================
# Blender now has all vcols per face
"""
def generate_vmap_vc(mesh): def generate_vmap_vc(mesh):
data = cStringIO.StringIO() data = cStringIO.StringIO()
data.write("RGB ") # type data.write("RGB ") # type
@@ -308,6 +319,7 @@ def generate_vmap_vc(mesh):
data.write(struct.pack(">H", i)) # vertex index data.write(struct.pack(">H", i)) # vertex index
data.write(struct.pack(">fff", r/255.0, g/255.0, b/255.0)) data.write(struct.pack(">fff", r/255.0, g/255.0, b/255.0))
return data.getvalue() return data.getvalue()
"""
# ==================================================== # ====================================================
# === Generate Per-Face Vertex Colors (VMAD Chunk) === # === Generate Per-Face Vertex Colors (VMAD Chunk) ===
@@ -318,15 +330,13 @@ def generate_vmad_vc(mesh):
data.write(struct.pack(">H", 3)) # dimension data.write(struct.pack(">H", 3)) # dimension
data.write(generate_nstring("Blender's Vertex Colors")) # name data.write(generate_nstring("Blender's Vertex Colors")) # name
for i, f in enumerate(mesh.faces): for i, f in enumerate(mesh.faces):
if not i%100 and meshtools.show_progress: if not i%100:
Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Vertex Colors") Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Vertex Colors")
col = f.col col = f.col
f_v = f.v
for j in xrange(len(f)-1, -1, -1): # Reverse order for j in xrange(len(f)-1, -1, -1): # Reverse order
r = col.r r,g,b, dummy = tuple(col[j])
g = col.g data.write(struct.pack(">H", f_v[j].index)) # vertex index
b = col.b
v = f[j].index
data.write(struct.pack(">H", v)) # vertex index
data.write(struct.pack(">H", i)) # face index data.write(struct.pack(">H", i)) # face index
data.write(struct.pack(">fff", r/255.0, g/255.0, b/255.0)) data.write(struct.pack(">fff", r/255.0, g/255.0, b/255.0))
return data.getvalue() return data.getvalue()
@@ -341,13 +351,14 @@ def generate_vmad_uv(mesh):
data.write(generate_nstring("Blender's UV Coordinates")) # name data.write(generate_nstring("Blender's UV Coordinates")) # name
for i, f in enumerate(mesh.faces): for i, f in enumerate(mesh.faces):
if not i%100 and meshtools.show_progress: if not i%100:
Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing UV Coordinates") Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing UV Coordinates")
uv = f.uv uv = f.uv
f_v = f.v
for j in xrange(len(f)-1, -1, -1): # Reverse order for j in xrange(len(f)-1, -1, -1): # Reverse order
U,V = uv[j] U,V = uv[j]
v = f[j].index v = f_v[j].index
data.write(struct.pack(">H", v)) # vertex index data.write(struct.pack(">H", v)) # vertex index
data.write(struct.pack(">H", i)) # face index data.write(struct.pack(">H", i)) # face index
data.write(struct.pack(">ff", U, V)) data.write(struct.pack(">ff", U, V))
@@ -370,41 +381,59 @@ def generate_pols(mesh):
data = cStringIO.StringIO() data = cStringIO.StringIO()
data.write("FACE") # polygon type data.write("FACE") # polygon type
for i,f in enumerate(mesh.faces): for i,f in enumerate(mesh.faces):
if not i%100 and meshtools.show_progress: if not i%100:
Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Faces") Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Faces")
data.write(struct.pack(">H", len(f))) # numfaceverts data.write(struct.pack(">H", len(f))) # numfaceverts
numfaceverts = len(f) numfaceverts = len(f)
f_v = f.v
for j in xrange(numfaceverts-1, -1, -1): # Reverse order for j in xrange(numfaceverts-1, -1, -1): # Reverse order
data.write(generate_vx(f[j].index)) data.write(generate_vx(f_v[j].index))
return data.getvalue() return data.getvalue()
# ================================================= # =================================================
# === Generate Polygon Tag Mapping (PTAG Chunk) === # === Generate Polygon Tag Mapping (PTAG Chunk) ===
# ================================================= # =================================================
def generate_ptag(mesh, material_names): def generate_ptag(mesh, material_names):
def surf_indicies(mat):
try:
if mat:
return material_names.index(mat.name)
except:
pass
return 0
data = cStringIO.StringIO() data = cStringIO.StringIO()
data.write("SURF") # polygon tag type data.write("SURF") # polygon tag type
mesh_materials = mesh.materials mesh_materials = mesh.materials
for i, f in enumerate(mesh.faces): # numfaces mesh_surfindicies = [surf_indicies(mat) for mat in mesh_materials]
if not i%100 and meshtools.show_progress:
Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Surface Indices") try: VCOL_NAME_SURF_INDEX = material_names.index(VCOL_NAME)
data.write(generate_vx(i)) except: VCOL_NAME_SURF_INDEX = 0
if (not mesh_materials) and (meshtools.has_vertex_colors(mesh)): # vcols only
if meshtools.average_vcols: try: DEFAULT_NAME_SURF_INDEX = material_names.index(DEFAULT_NAME)
name = "\251 Per-Vert Vertex Colors" except: DEFAULT_NAME_SURF_INDEX = 0
else: len_mat = len(mesh_materials)
name = "\251 Per-Face Vertex Colors" for i, f in enumerate(mesh.faces): # numfaces
elif (mesh_materials) and (not meshtools.has_vertex_colors(mesh)): # materials only f_mat = f.mat
idx = f.mat #erialIndex if f_mat >= len_mat: f_mat = 0 # Rare annoying eror
name = mesh_materials[idx].name
elif (not mesh_materials) and (not meshtools.has_vertex_colors(mesh)): # neither
name = "\251 Blender Default" if not i%100:
else: # both Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing Surface Indices")
idx = f.mat
if idx >= len(mesh_materials): idx = 0 data.write(generate_vx(i))
name = mesh_materials[idx].name if (not mesh_materials) and mesh.vertexColors: # vcols only
surfidx = VCOL_NAME_SURF_INDEX
elif mesh_materials and not mesh.vertexColors: # materials only
surfidx = mesh_surfindicies[f_mat]
elif (not mesh_materials) and (not mesh.vertexColors): # neither
surfidx = DEFAULT_NAME_SURF_INDEX
else: # both
surfidx = mesh_surfindicies[f_mat]
surfidx = material_names.index(name)
data.write(struct.pack(">H", surfidx)) # surface index data.write(struct.pack(">H", surfidx)) # surface index
return data.getvalue() return data.getvalue()
@@ -413,10 +442,8 @@ def generate_ptag(mesh, material_names):
# =================================================== # ===================================================
def generate_vcol_surf(mesh): def generate_vcol_surf(mesh):
data = cStringIO.StringIO() data = cStringIO.StringIO()
if meshtools.average_vcols and meshtools.has_vertex_colors(mesh): if mesh.vertexColors:
surface_name = generate_nstring("\251 Per-Vert Vertex Colors") surface_name = generate_nstring(VCOL_NAME)
else:
surface_name = generate_nstring("\251 Per-Face Vertex Colors")
data.write(surface_name) data.write(surface_name)
data.write("\0\0") data.write("\0\0")
@@ -438,7 +465,7 @@ def generate_vcol_surf(mesh):
data.write(generate_nstring("Blender's Vertex Colors")) # name data.write(generate_nstring("Blender's Vertex Colors")) # name
data.write("CMNT") # material comment data.write("CMNT") # material comment
comment = "Vertex Colors: Exported from Blender\256 " + meshtools.blender_version_str comment = "Vertex Colors: Exported from Blender\256 243"
comment = generate_nstring(comment) comment = generate_nstring(comment)
data.write(struct.pack(">H", len(comment))) data.write(struct.pack(">H", len(comment)))
data.write(comment) data.write(comment)
@@ -452,37 +479,54 @@ def generate_surf(material_name):
data.write(generate_nstring(material_name)) data.write(generate_nstring(material_name))
data.write("\0\0") data.write("\0\0")
try:
material = Blender.Material.Get(material_name) material = Blender.Material.Get(material_name)
R,G,B = material.R, material.G, material.B R,G,B = material.R, material.G, material.B
ref = material.ref
emit = material.emit
spec = material.spec
hard = material.hard
except:
material = None
R=G=B = 1.0
ref = 1.0
emit = 0.0
spec = 0.2
hard = 0.0
data.write("COLR") data.write("COLR")
data.write(struct.pack(">H", 14)) data.write(struct.pack(">H", 14))
data.write(struct.pack(">fffH", R, G, B, 0)) data.write(struct.pack(">fffH", R, G, B, 0))
data.write("DIFF") data.write("DIFF")
data.write(struct.pack(">H", 6)) data.write(struct.pack(">H", 6))
data.write(struct.pack(">fH", material.ref, 0)) data.write(struct.pack(">fH", ref, 0))
data.write("LUMI") data.write("LUMI")
data.write(struct.pack(">H", 6)) data.write(struct.pack(">H", 6))
data.write(struct.pack(">fH", material.emit, 0)) data.write(struct.pack(">fH", emit, 0))
data.write("SPEC") data.write("SPEC")
data.write(struct.pack(">H", 6)) data.write(struct.pack(">H", 6))
data.write(struct.pack(">fH", material.spec, 0)) data.write(struct.pack(">fH", spec, 0))
data.write("GLOS") data.write("GLOS")
data.write(struct.pack(">H", 6)) data.write(struct.pack(">H", 6))
gloss = material.hard / (255/2.0) gloss = hard / (255/2.0)
gloss = round(gloss, 1) gloss = round(gloss, 1)
data.write(struct.pack(">fH", gloss, 0)) data.write(struct.pack(">fH", gloss, 0))
data.write("CMNT") # material comment data.write("CMNT") # material comment
comment = material_name + ": Exported from Blender\256 " + meshtools.blender_version_str comment = material_name + ": Exported from Blender\256 243"
comment = generate_nstring(comment) comment = generate_nstring(comment)
data.write(struct.pack(">H", len(comment))) data.write(struct.pack(">H", len(comment)))
data.write(comment) data.write(comment)
# Check if the material contains any image maps # Check if the material contains any image maps
if material:
mtextures = material.getTextures() # Get a list of textures linked to the material mtextures = material.getTextures() # Get a list of textures linked to the material
for mtex in mtextures: for mtex in mtextures:
if (mtex) and (mtex.tex.type == Blender.Texture.Types.IMAGE): # Check if the texture is of type "IMAGE" if (mtex) and (mtex.tex.type == Blender.Texture.Types.IMAGE): # Check if the texture is of type "IMAGE"
@@ -528,7 +572,7 @@ def generate_surf(material_name):
# ============================================= # =============================================
def generate_default_surf(): def generate_default_surf():
data = cStringIO.StringIO() data = cStringIO.StringIO()
material_name = "\251 Blender Default" material_name = DEFAULT_NAME
data.write(generate_nstring(material_name)) data.write(generate_nstring(material_name))
data.write("\0\0") data.write("\0\0")
@@ -555,7 +599,7 @@ def generate_default_surf():
data.write(struct.pack(">fH", gloss, 0)) data.write(struct.pack(">fH", gloss, 0))
data.write("CMNT") # material comment data.write("CMNT") # material comment
comment = material_name + ": Exported from Blender\256 " + meshtools.blender_version_str comment = material_name + ": Exported from Blender\256 243"
# vals = map(chr, xrange(164,255,1)) # vals = map(chr, xrange(164,255,1))
# keys = xrange(164,255,1) # keys = xrange(164,255,1)
@@ -573,11 +617,7 @@ def generate_default_surf():
# === Generate Object Comment (TEXT Chunk) === # === Generate Object Comment (TEXT Chunk) ===
# ============================================ # ============================================
def generate_text(): def generate_text():
comment = "Lightwave Export Script for Blender " comment = "Lightwave Export Script for Blender by Anthony D'Agostino"
comment += meshtools.blender_version_str + "\n"
comment += "by Anthony D'Agostino\n"
comment += "scorpius@netzero.com\n"
comment += "http://ourworld.compuserve.com/homepages/scorpius\n"
return generate_nstring(comment) return generate_nstring(comment)
# ============================================== # ==============================================
@@ -607,8 +647,8 @@ def generate_icon():
def generate_clip(mesh, material_names): def generate_clip(mesh, material_names):
data = cStringIO.StringIO() data = cStringIO.StringIO()
clipid = 1 clipid = 1
for i in xrange(len(mesh.materials)): # Run through list of materials used by mesh for i, material in enumerate(mesh.materials): # Run through list of materials used by mesh
material = Blender.Material.Get(mesh.materials[i].name) if material:
mtextures = material.getTextures() # Get a list of textures linked to the material mtextures = material.getTextures() # Get a list of textures linked to the material
for mtex in mtextures: for mtex in mtextures:
if (mtex) and (mtex.tex.type == Blender.Texture.Types.IMAGE): # Check if the texture is of type "IMAGE" if (mtex) and (mtex.tex.type == Blender.Texture.Types.IMAGE): # Check if the texture is of type "IMAGE"