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:
Diffstat (limited to 'release/scripts/lightwave_export.py')
-rw-r--r--release/scripts/lightwave_export.py61
1 files changed, 40 insertions, 21 deletions
diff --git a/release/scripts/lightwave_export.py b/release/scripts/lightwave_export.py
index 458e61f3a28..bbfb9649c69 100644
--- a/release/scripts/lightwave_export.py
+++ b/release/scripts/lightwave_export.py
@@ -68,8 +68,13 @@ v5.5 format.
# ***** END GPL LICENCE BLOCK *****
import Blender
-import struct, cStringIO, operator
import BPyMesh
+try: import struct
+except: struct = None
+try: import cStringIO
+except: cStringIO = None
+try: import operator
+except: operator = None
VCOL_NAME = "\251 Per-Face Vertex Colors"
DEFAULT_NAME = "\251 Blender Default"
@@ -95,12 +100,16 @@ def write(filename):
icon = "" #generate_icon()
meshes = []
+ mesh_object_name_lookup = {} # for name lookups only
+
for obj in objects:
mesh = BPyMesh.getMeshFromObject(obj, None, True, False, scn)
if mesh:
mesh.transform(obj.matrixWorld)
meshes.append(mesh)
-
+ mesh_object_name_lookup[mesh] = obj.name
+ del obj
+
material_names = get_used_material_names(meshes)
tags = generate_tags(material_names)
surfs = generate_surfs(material_names)
@@ -111,7 +120,7 @@ def write(filename):
layer_index = 0
for mesh in meshes:
- layr = generate_layr(obj.name, layer_index)
+ layr = generate_layr(mesh_object_name_lookup[mesh], layer_index)
pnts = generate_pnts(mesh)
bbox = generate_bbox(mesh)
pols = generate_pols(mesh)
@@ -149,7 +158,9 @@ def write(filename):
layer_index += 1
mesh.verts = None # save some ram
-
+
+ del mesh_object_name_lookup
+
for surf in surfs:
chunks.append(surf)
@@ -345,23 +356,28 @@ def generate_vmad_vc(mesh):
# === Generate Per-Face UV Coords (VMAD Chunk) ===
# ================================================
def generate_vmad_uv(mesh):
- data = cStringIO.StringIO()
- data.write("TXUV") # type
- data.write(struct.pack(">H", 2)) # dimension
- data.write(generate_nstring("Blender's UV Coordinates")) # name
+ layers = mesh.getUVLayerNames()
+ org_uv = mesh.activeUVLayer
+ for l in layers:
+ mesh.activeUVLayer = l
+ data = cStringIO.StringIO()
+ data.write("TXUV") # type
+ data.write(struct.pack(">H", 2)) # dimension
+ data.write(generate_nstring(l)) # name
+ for i, f in enumerate(mesh.faces):
+ if not i%100:
+ Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing UV Coordinates")
+
+ uv = f.uv
+ f_v = f.v
+ for j in xrange(len(f)-1, -1, -1): # Reverse order
+ U,V = uv[j]
+ v = f_v[j].index
+ data.write(struct.pack(">H", v)) # vertex index
+ data.write(struct.pack(">H", i)) # face index
+ data.write(struct.pack(">ff", U, V))
- for i, f in enumerate(mesh.faces):
- if not i%100:
- Blender.Window.DrawProgressBar(float(i)/len(mesh.faces), "Writing UV Coordinates")
-
- uv = f.uv
- f_v = f.v
- for j in xrange(len(f)-1, -1, -1): # Reverse order
- U,V = uv[j]
- v = f_v[j].index
- data.write(struct.pack(">H", v)) # vertex index
- data.write(struct.pack(">H", i)) # face index
- data.write(struct.pack(">ff", U, V))
+ mesh.activeUVLayer = org_uv
return data.getvalue()
# ======================================
@@ -685,4 +701,7 @@ def fs_callback(filename):
if not filename.lower().endswith('.lwo'): filename += '.lwo'
write(filename)
-Blender.Window.FileSelector(fs_callback, "Export LWO", Blender.sys.makename(ext='.lwo'))
+if struct and cStringIO and operator:
+ Blender.Window.FileSelector(fs_callback, "Export LWO", Blender.sys.makename(ext='.lwo'))
+else:
+ Blender.Draw.PupMenu("Error%t|This script requires a full python installation")