From 50795b82398bca52271282cbade2a9f0d0865654 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Sat, 24 Sep 2011 13:18:23 +0900 Subject: [PATCH] Calculate the model "size". The size is actually the average area in quake units of the mesh's triangles. Again, my results are slightly smaller (0.025). With this, all calculable fields are set. Only eye position, flags and synctype remain. --- tools/io_mesh_qfmdl/export_mdl.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/io_mesh_qfmdl/export_mdl.py b/tools/io_mesh_qfmdl/export_mdl.py index d51e5dedc..b8b2759cf 100644 --- a/tools/io_mesh_qfmdl/export_mdl.py +++ b/tools/io_mesh_qfmdl/export_mdl.py @@ -143,6 +143,19 @@ def scale_verts(mdl): for f in mdl.frames: f.scale(mdl) +def calc_average_area(mdl): + frame = mdl.frames[0] + if frame.type: + frame = frame.frames[0] + totalarea = 0.0 + for tri in mdl.tris: + verts = tuple(map(lambda i: frame.verts[i], tri.verts)) + a = Vector(verts[0].r) - Vector(verts[1].r) + b = Vector(verts[2].r) - Vector(verts[1].r) + c = a.cross(b) + totalarea += (c * c) ** 0.5 / 2.0 + return totalarea / len(mdl.tris) + def export_mdl(operator, context, filepath): obj = context.active_object mesh = obj.to_mesh (context.scene, True, 'PREVIEW') #wysiwyg? @@ -155,6 +168,7 @@ def export_mdl(operator, context, filepath): mdl.tris, mdl.stverts, vertmap = build_tris(mesh) convert_stverts (mdl, mdl.stverts) mdl.frames.append(make_frame(mesh, vertmap)) + mdl.size = calc_average_area(mdl) scale_verts(mdl) mdl.write(filepath) return {'FINISHED'}