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

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-05-27 21:07:49 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-05-27 21:07:49 +0400
commit0cfcfb8aeaa04387f11fcaa22acc0324762cb195 (patch)
treeab252c80e03fc66decf3b70078da5b7114d0c870 /io_scene_map
parent9186c3482ad664308c2176c59bea0e89622a79b7 (diff)
python3 & pep8 edits
Diffstat (limited to 'io_scene_map')
-rw-r--r--io_scene_map/export_map.py267
1 files changed, 146 insertions, 121 deletions
diff --git a/io_scene_map/export_map.py b/io_scene_map/export_map.py
index bfb2a364..e0dc539f 100644
--- a/io_scene_map/export_map.py
+++ b/io_scene_map/export_map.py
@@ -37,22 +37,20 @@ This script Exports a Quake 3 map format.
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------
-
-
-
from Blender import *
import BPyMesh
-PREF_SCALE= Draw.Create(100)
-PREF_FACE_THICK= Draw.Create(0.1)
-PREF_GRID_SNAP= Draw.Create(0)
+PREF_SCALE = Draw.Create(100)
+PREF_FACE_THICK = Draw.Create(0.1)
+PREF_GRID_SNAP = Draw.Create(0)
# Quake 1/2?
-# PREF_DEF_TEX_OPTS= Draw.Create(' 0 0 0 1 1\n') # not user settable yet
+# PREF_DEF_TEX_OPTS = Draw.Create(' 0 0 0 1 1\n') # not user settable yet
# Quake 3+?
-PREF_DEF_TEX_OPTS= Draw.Create(' 0 0 0 1 1 0 0 0\n') # not user settable yet
+PREF_DEF_TEX_OPTS = Draw.Create(' 0 0 0 1 1 0 0 0\n') # not user settable yet
+
+PREF_NULL_TEX = Draw.Create('NULL') # not user settable yet
+PREF_INVIS_TEX = Draw.Create('common/caulk')
-PREF_NULL_TEX= Draw.Create('NULL') # not user settable yet
-PREF_INVIS_TEX= Draw.Create('common/caulk')
def write_cube2brush(file, faces):
'''
@@ -64,26 +62,34 @@ def write_cube2brush(file, faces):
# file.write('// brush "%s", "%s"\n' % (ob.name, ob.getData(name_only=1)))
file.write('// brush from cube\n{\n')
- if PREF_GRID_SNAP.val: format_vec= '( %d %d %d ) '
- else: format_vec= '( %.8f %.8f %.8f ) '
+ if PREF_GRID_SNAP.val:
+ format_vec = '( %d %d %d ) '
+ else:
+ format_vec = '( %.8f %.8f %.8f ) '
for f in faces:
# from 4 verts this gets them in reversed order and only 3 of them
# 0,1,2,3 -> 2,1,0
for v in f.v[2::-1]:
- file.write(format_vec % tuple(v.co) )
+ file.write(format_vec % v.co[:])
- try: mode= f.mode
- except: mode= 0
+ try:
+ mode = f.mode
+ except:
+ mode = 0
if mode & Mesh.FaceModes.INVISIBLE:
file.write(PREF_INVIS_TEX.val)
else:
- try: image= f.image
- except: image= None
+ try:
+ image = f.image
+ except:
+ image = None
- if image: file.write(sys.splitext(sys.basename(image.filename))[0])
- else: file.write(PREF_NULL_TEX.val)
+ if image:
+ file.write(sys.splitext(sys.basename(image.filename))[0])
+ else:
+ file.write(PREF_NULL_TEX.val)
# Texture stuff ignored for now
file.write(PREF_DEF_TEX_OPTS.val)
@@ -92,9 +98,10 @@ def write_cube2brush(file, faces):
def round_vec(v):
if PREF_GRID_SNAP.val:
- return round(v.x), round(v.y), round(v.z)
+ return v.to_tuple(0)
else:
- return tuple(v)
+ return v[:]
+
def write_face2brush(file, face):
'''
@@ -102,41 +109,46 @@ def write_face2brush(file, face):
each face is a cube/brush
'''
- if PREF_GRID_SNAP.val: format_vec= '( %d %d %d ) '
- else: format_vec= '( %.8f %.8f %.8f ) '
-
+ if PREF_GRID_SNAP.val:
+ format_vec = '( %d %d %d ) '
+ else:
+ format_vec = '( %.8f %.8f %.8f ) '
- image_text= PREF_NULL_TEX.val
+ image_text = PREF_NULL_TEX.val
- try: mode= face.mode
- except: mode= 0
+ try:
+ mode = face.mode
+ except:
+ mode = 0
if mode & Mesh.FaceModes.INVISIBLE:
- image_text= PREF_INVIS_TEX.val
+ image_text = PREF_INVIS_TEX.val
else:
- try: image= face.image
- except: image= None
- if image: image_text = sys.splitext(sys.basename(image.filename))[0]
+ try:
+ image = face.image
+ except:
+ image = None
+ if image:
+ image_text = sys.splitext(sys.basename(image.filename))[0]
# original verts as tuples for writing
- orig_vco= [tuple(v.co) for v in face]
+ orig_vco = [v.co[:] for v in face]
# new verts that give the face a thickness
- dist= PREF_SCALE.val * PREF_FACE_THICK.val
- new_vco= [round_vec(v.co - (v.no * dist)) for v in face]
- #new_vco= [round_vec(v.co - (face.no * dist)) for v in face]
+ dist = PREF_SCALE.val * PREF_FACE_THICK.val
+ new_vco = [round_vec(v.co - (v.no * dist)) for v in face]
+ #new_vco = [round_vec(v.co - (face.no * dist)) for v in face]
file.write('// brush from face\n{\n')
# front
for co in orig_vco[2::-1]:
- file.write(format_vec % co )
+ file.write(format_vec % co)
file.write(image_text)
# Texture stuff ignored for now
file.write(PREF_DEF_TEX_OPTS.val)
-
for co in new_vco[:3]:
- file.write(format_vec % co )
+ file.write(format_vec % co)
if mode & Mesh.FaceModes.TWOSIDE:
file.write(image_text)
else:
@@ -146,36 +158,37 @@ def write_face2brush(file, face):
file.write(PREF_DEF_TEX_OPTS.val)
# sides.
- if len(orig_vco)==3: # Tri, it seemms tri brushes are supported.
- index_pairs= ((0,1), (1,2), (2,0))
+ if len(orig_vco) == 3: # Tri, it seemms tri brushes are supported.
+ index_pairs = ((0, 1), (1, 2), (2, 0))
else:
- index_pairs= ((0,1), (1,2), (2,3), (3,0))
+ index_pairs = ((0, 1), (1, 2), (2, 3), (3, 0))
for i1, i2 in index_pairs:
for co in orig_vco[i1], orig_vco[i2], new_vco[i2]:
- file.write( format_vec % co )
+ file.write(format_vec % co)
file.write(PREF_INVIS_TEX.val)
file.write(PREF_DEF_TEX_OPTS.val)
file.write('}\n')
+
def is_cube_facegroup(faces):
'''
Returens a bool, true if the faces make up a cube
'''
# cube must have 6 faces
if len(faces) != 6:
- print '1'
+ # print('1')
return False
# Check for quads and that there are 6 unique verts
- verts= {}
+ verts = {}
for f in faces:
- if len(f)!= 4:
+ if len(f) != 4:
return False
for v in f:
- verts[v.index]= 0
+ verts[v.index] = 0
if len(verts) != 8:
return False
@@ -186,12 +199,13 @@ def is_cube_facegroup(faces):
verts[v.index] += 1
for v in verts.itervalues():
- if v != 3: # vert has 3 users?
+ if v != 3: # vert has 3 users?
return False
# Could we check for 12 unique edges??, probably not needed.
return True
+
def is_tricyl_facegroup(faces):
'''
is the face group a tri cylinder
@@ -200,18 +214,18 @@ def is_tricyl_facegroup(faces):
# cube must have 5 faces
if len(faces) != 5:
- print '1'
+ # print('1')
return False
# Check for quads and that there are 6 unique verts
- verts= {}
- tottri= 0
+ verts = {}
+ tottri = 0
for f in faces:
- if len(f)== 3:
- tottri+=1
+ if len(f) == 3:
+ tottri += 1
for v in f:
- verts[v.index]= 0
+ verts[v.index] = 0
if len(verts) != 6 or tottri != 2:
return False
@@ -222,24 +236,25 @@ def is_tricyl_facegroup(faces):
verts[v.index] += 1
for v in verts.itervalues():
- if v != 3: # vert has 3 users?
+ if v != 3: # vert has 3 users?
return False
# Could we check for 12 unique edges??, probably not needed.
return True
+
def write_node_map(file, ob):
'''
Writes the properties of an object (empty in this case)
as a MAP node as long as it has the property name - classname
returns True/False based on weather a node was written
'''
- props= [(p.name, p.data) for p in ob.game_properties]
+ props = [(p.name, p.data) for p in ob.game_properties]
- IS_MAP_NODE= False
+ IS_MAP_NODE = False
for name, value in props:
- if name=='classname':
- IS_MAP_NODE= True
+ if name == "classname":
+ IS_MAP_NODE = True
break
if not IS_MAP_NODE:
@@ -250,15 +265,20 @@ def write_node_map(file, ob):
for name_value in props:
file.write('"%s" "%s"\n' % name_value)
if PREF_GRID_SNAP.val:
- file.write('"origin" "%d %d %d"\n' % tuple([round(axis*PREF_SCALE.val) for axis in ob.getLocation('worldspace')]) )
+ file.write('"origin" "%d %d %d"\n' %
+ tuple([round(axis * PREF_SCALE.val)
+ for axis in ob.getLocation('worldspace')]))
else:
- file.write('"origin" "%.6f %.6f %.6f"\n' % tuple([axis*PREF_SCALE.val for axis in ob.getLocation('worldspace')]) )
+ file.write('"origin" "%.6f %.6f %.6f"\n' %
+ tuple([axis * PREF_SCALE.val
+ for axis in ob.getLocation('worldspace')]))
+
file.write('}\n')
return True
def export_map(filepath):
-
+ """
pup_block = [\
('Scale:', PREF_SCALE, 1, 1000, 'Scale the blender scene by this value.'),\
('Face Width:', PREF_FACE_THICK, 0.01, 10, 'Thickness of faces exported as brushes.'),\
@@ -271,31 +291,35 @@ def export_map(filepath):
if not Draw.PupBlock('map export', pup_block):
return
+ """
Window.WaitCursor(1)
- time= sys.time()
- print 'Map Exporter 0.0'
- file= open(filepath, 'w')
+ time = sys.time()
+ print("Map Exporter 0.0")
+ file = open(filepath, 'w')
+ obs_mesh = []
+ obs_lamp = []
+ obs_surf = []
+ obs_empty = []
- obs_mesh= []
- obs_lamp= []
- obs_surf= []
- obs_empty= []
+ SCALE_MAT = Mathutils.Matrix()
+ SCALE_MAT[0][0] = SCALE_MAT[1][1] = SCALE_MAT[2][2] = PREF_SCALE.val
- SCALE_MAT= Mathutils.Matrix()
- SCALE_MAT[0][0]= SCALE_MAT[1][1]= SCALE_MAT[2][2]= PREF_SCALE.val
+ dummy_mesh = Mesh.New()
- dummy_mesh= Mesh.New()
-
- TOTBRUSH= TOTLAMP= TOTNODE= 0
+ TOTBRUSH = TOTLAMP = TOTNODE = 0
for ob in Object.GetSelected():
- type= ob.type
- if type == 'Mesh': obs_mesh.append(ob)
- elif type == 'Surf': obs_surf.append(ob)
- elif type == 'Lamp': obs_lamp.append(ob)
- elif type == 'Empty': obs_empty.append(ob)
+ type = ob.type
+ if type == 'Mesh':
+ obs_mesh.append(ob)
+ elif type == 'Surf':
+ obs_surf.append(ob)
+ elif type == 'Lamp':
+ obs_lamp.append(ob)
+ elif type == 'Empty':
+ obs_empty.append(ob)
if obs_mesh or obs_surf:
# brushes and surf's must be under worldspan
@@ -303,22 +327,19 @@ def export_map(filepath):
file.write('{\n')
file.write('"classname" "worldspawn"\n')
-
- print '\twriting cubes from meshes'
+ print("\twriting cubes from meshes")
for ob in obs_mesh:
dummy_mesh.getFromObject(ob.name)
#print len(mesh_split2connected(dummy_mesh))
# Is the object 1 cube? - object-is-a-brush
- dummy_mesh.transform(ob.matrixWorld*SCALE_MAT) # 1 to tx the normals also
+ # 1 to tx the normals also
+ dummy_mesh.transform(ob.matrixWorld * SCALE_MAT)
if PREF_GRID_SNAP.val:
for v in dummy_mesh.verts:
- co= v.co
- co.x= round(co.x)
- co.y= round(co.y)
- co.z= round(co.z)
+ v.co[:] = v.co.to_tuple(0)
# High quality normals
BPyMesh.meshCalcNormals(dummy_mesh)
@@ -327,29 +348,27 @@ def export_map(filepath):
for face_group in BPyMesh.mesh2linkedFaces(dummy_mesh):
if is_cube_facegroup(face_group):
write_cube2brush(file, face_group)
- TOTBRUSH+=1
+ TOTBRUSH += 1
elif is_tricyl_facegroup(face_group):
write_cube2brush(file, face_group)
- TOTBRUSH+=1
+ TOTBRUSH += 1
else:
for f in face_group:
write_face2brush(file, f)
- TOTBRUSH+=1
+ TOTBRUSH += 1
#print 'warning, not exporting "%s" it is not a cube' % ob.name
+ dummy_mesh.verts = None
- dummy_mesh.verts= None
-
-
- valid_dims= 3,5,7,9,11,13,15
+ valid_dims = 3, 5, 7, 9, 11, 13, 15
for ob in obs_surf:
'''
Surf, patches
'''
- surf_name= ob.getData(name_only=1)
- data= Curve.Get(surf_name)
- mat = ob.matrixWorld*SCALE_MAT
+ surf_name = ob.getData(name_only=1)
+ data = Curve.Get(surf_name)
+ mat = ob.matrixWorld * SCALE_MAT
# This is what a valid patch looks like
@@ -369,8 +388,8 @@ NULL
}
"""
for i, nurb in enumerate(data):
- u= nurb.pointsU
- v= nurb.pointsV
+ u = nurb.pointsU
+ v = nurb.pointsV
if u in valid_dims and v in valid_dims:
file.write('// brush %d surf_name\n' % i)
@@ -378,7 +397,7 @@ NULL
file.write('patchDef2\n')
file.write('{\n')
file.write('NULL\n')
- file.write('( %d %d 0 0 0 )\n' % (u, v) )
+ file.write('( %d %d 0 0 0 )\n' % (u, v))
file.write('(\n')
u_iter = 0
@@ -391,9 +410,11 @@ NULL
# add nmapping 0 0 ?
if PREF_GRID_SNAP.val:
- file.write(' ( %d %d %d 0 0 )' % round_vec(Mathutils.Vector(p[0:3]) * mat))
+ file.write(" ( %d %d %d 0 0 )" %
+ round_vec(Mathutils.Vector(p[0:3]) * mat))
else:
- file.write(' ( %.6f %.6f %.6f 0 0 )' % tuple(Mathutils.Vector(p[0:3]) * mat))
+ file.write(' ( %.6f %.6f %.6f 0 0 )' %
+ (Mathutils.Vector(p[0:3]) * mat)[:])
# Move to next line
if u_iter == u:
@@ -403,52 +424,56 @@ NULL
file.write(')\n')
file.write('}\n')
file.write('}\n')
-
-
# Debugging
# for p in nurb: print 'patch', p
else:
- print "NOT EXPORTING PATCH", surf_name, u,v, 'Unsupported'
-
+ print("Warning: not exporting patch",
+ surf_name, u, v, 'Unsupported')
if obs_mesh or obs_surf:
- file.write('}\n') # end worldspan
+ file.write('}\n') # end worldspan
-
- print '\twriting lamps'
+ print("\twriting lamps")
for ob in obs_lamp:
- print '\t\t%s' % ob.name
- lamp= ob.data
+ print("\t\t%s" % ob.name)
+ lamp = ob.data
file.write('{\n')
file.write('"classname" "light"\n')
- file.write('"light" "%.6f"\n' % (lamp.dist* PREF_SCALE.val))
+ file.write('"light" "%.6f"\n' % (lamp.dist * PREF_SCALE.val))
if PREF_GRID_SNAP.val:
- file.write('"origin" "%d %d %d"\n' % tuple([round(axis*PREF_SCALE.val) for axis in ob.getLocation('worldspace')]) )
+ file.write('"origin" "%d %d %d"\n' %
+ tuple([round(axis * PREF_SCALE.val)
+ for axis in ob.getLocation('worldspace')]))
else:
- file.write('"origin" "%.6f %.6f %.6f"\n' % tuple([axis*PREF_SCALE.val for axis in ob.getLocation('worldspace')]) )
+ file.write('"origin" "%.6f %.6f %.6f"\n' %
+ tuple([axis * PREF_SCALE.val
+ for axis in ob.getLocation('worldspace')]))
+
file.write('"_color" "%.6f %.6f %.6f"\n' % tuple(lamp.col))
file.write('"style" "0"\n')
file.write('}\n')
- TOTLAMP+=1
+ TOTLAMP += 1
-
- print '\twriting empty objects as nodes'
+ print("\twriting empty objects as nodes")
for ob in obs_empty:
if write_node_map(file, ob):
- print '\t\t%s' % ob.name
- TOTNODE+=1
+ print("\t\t%s" % ob.name)
+ TOTNODE += 1
else:
- print '\t\tignoring %s' % ob.name
+ print("\t\tignoring %s" % ob.name)
Window.WaitCursor(0)
- print 'Exported Map in %.4fsec' % (sys.time()-time)
- print 'Brushes: %d Nodes: %d Lamps %d\n' % (TOTBRUSH, TOTNODE, TOTLAMP)
+ print("Exported Map in %.4fsec" % (sys.time() - time))
+ print("Brushes: %d Nodes: %d Lamps %d\n" % (TOTBRUSH, TOTNODE, TOTLAMP))
def main():
Window.FileSelector(export_map, 'EXPORT MAP', '*.map')
-if __name__ == '__main__': main()
+
+if __name__ == '__main__':
+ main()
+
# export_map('/foo.map')