mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-22 02:11:19 +00:00
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.
This commit is contained in:
parent
07b5db64c6
commit
50795b8239
1 changed files with 14 additions and 0 deletions
|
@ -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'}
|
||||
|
|
Loading…
Reference in a new issue