summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Pouzenc <ludovic@pouzenc.fr>2018-12-31 18:41:06 +0100
committerLudovic Pouzenc <ludovic@pouzenc.fr>2018-12-31 18:41:06 +0100
commit64f9fbff414c6f17c2256dcd6c932b5d0c3f1380 (patch)
treefe297bf180116b06d9c7d505b3b3cd8317e8d4e5
parenta6634a415fd38b1bc86f8a9d55d4019aabc01afa (diff)
downloadblender-export-hl1map-64f9fbff414c6f17c2256dcd6c932b5d0c3f1380.tar.gz
blender-export-hl1map-64f9fbff414c6f17c2256dcd6c932b5d0c3f1380.tar.bz2
blender-export-hl1map-64f9fbff414c6f17c2256dcd6c932b5d0c3f1380.zip
Draft improvement
-rwxr-xr-xdrafts/print_mapfile_to_console.py34
1 files changed, 26 insertions, 8 deletions
diff --git a/drafts/print_mapfile_to_console.py b/drafts/print_mapfile_to_console.py
index 2f5d179..61a92ca 100755
--- a/drafts/print_mapfile_to_console.py
+++ b/drafts/print_mapfile_to_console.py
@@ -1,6 +1,8 @@
import bpy
+import bmesh
from mathutils import Vector
+# https://developer.valvesoftware.com/wiki/MAP_file_format
def fmt3(vec3):
return "%.10f %.10f %.10f"%(vec3.x, vec3.y, vec3.z)
def fmt_plane(plane3dots):
@@ -24,7 +26,7 @@ def output_brush_start():
print("\t{")
def output_brush_face(plane3dots, tename, tev1, teoff1, tev2, teoff2, rot, scaleX, scaleY):
- print("\t%s"%fmt_face(plane3dots, tename, tev1, teoff1, tev2, teoff2, rot, scaleX, scaleY))
+ print("\t\t%s"%fmt_face(plane3dots, tename, tev1, teoff1, tev2, teoff2, rot, scaleX, scaleY))
def output_brush_end():
print("\t}")
@@ -55,6 +57,7 @@ def debug(fano,plane3dots):
print(fano-n)
print()
+# https://developer.valvesoftware.com/wiki/MAP_file_format
worldspawn_props = {
'classname': 'worldspawn',
'sounds': 1,
@@ -65,14 +68,29 @@ worldspawn_props = {
blender_to_map_scale_factor = 100
-# https://developer.valvesoftware.com/wiki/MAP_file_format
-output_entity_start(worldspawn_props)
-for o in bpy.data.scenes[0].objects:
- if o.type != 'MESH':
- continue
- mat_to_map = o.matrix_world * blender_to_map_scale_factor
- mesh = o.data
+
+scene = bpy.context.scene
+# Simplify each mesh once (a mesh could be used by multiple objects)
+unique_meshes = set([ob.data for ob in scene.objects if ob.type == 'MESH'])
+for mesh in unique_meshes:
+ bm = bmesh.new()
+ bm.from_mesh(mesh)
+ bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=0.01)
+ bmesh.ops.holes_fill(bm, edges=bm.edges) #, sides=0
+ bmesh.ops.connect_verts_concave(bm, faces=bm.faces)
+ bmesh.ops.connect_verts_nonplanar(bm, faces=bm.faces) #, angle_limit=0.0
+ bmesh.ops.planar_faces(bm, faces=bm.faces)
+ bmesh.ops.recalc_face_normals(bm, faces=bm.faces)
+ bm.to_mesh(mesh)
+ bm.free()
+
+# Export each object in .map
+all_objects_with_mesh_type = [ob for ob in scene.objects if ob.type == 'MESH']
+output_entity_start(worldspawn_props)
+for ob in all_objects_with_mesh_type:
+ mat_to_map = ob.matrix_world * blender_to_map_scale_factor
+ mesh = ob.data
mesh.update(calc_tessface=True)
for fa in mesh.tessfaces:
output_brush_start()