[Bf-committers] Cursor to center of mass

Ummi Nom umminom at gmail.com
Wed Nov 21 04:30:33 CET 2012


Hi!

I've written some center of mass calculations in python for closed meshes,
but there is an issue with using tessfaces in my code; I run mesh.update
with tessfaces=True but when I loop over mesh.tessfaces there are only 6
faces in default scene cube so the center of mass is offset.

It seems to work when the mesh is triangulated
http://www.pasteall.org/37396/python

# Code
import mathutils
from mathutils import *
import bpy

tess_count = 0

# Handle tri as a tetrahedron with fourth point at origo
def handleTri(v1, v2, v3):
    global tess_count
    tess_count = tess_count + 1

    temp = (v3-v1).cross(v2-v1)
    nor = temp.normalized()
    area = 0.5*temp.dot(nor)
    vol = area*nor.dot(v1)/3.0
    centroid = (v1+v2+v3)/4.0

    return (centroid, vol)


for me in bpy.data.meshes:
    me.update(calc_tessface=True)

    sumc= Vector()
    summ = 0


    for f in me.tessfaces:
        v1 = Vector(me.vertices[f.vertices[0]].co)
        v2 = Vector(me.vertices[f.vertices[1]].co)
        v3 = Vector(me.vertices[f.vertices[2]].co)

        centroid, mass = handleTri(v1, v2, v3)
        sumc += centroid * mass
        summ += mass

    print(tess_count)

    print(sumc/summ)


More information about the Bf-committers mailing list