import bpy import mathutils
# @brief モデルのポリゴンの重心をリストで返す # @param [in] obj オブジェクト # @return 重心座標のリスト def face_gravities(obj): mesh = obj.data vcoords = mesh.vertices # オブジェクトの行列を取得 local44 = obj.matrix_world; ret = [] # 全てのポリゴンに対するループ for poly in mesh.polygons: grav = mathutils.Vector((0,0,0)) for v in poly.vertices: # v はpolyの各頂点のID grav += vcoords[ v ].co # 頂点座標の合計を頂点数で割る grav /= len(poly.vertices) # グローバル座標に変換してリストへ追加 ret.append( local44 @ grav ) return ret
# 使用例 gravs = face_gravities( bpy.context.active_object ) # 計算した座標へ球を設置 for g in gravs: bpy.ops.mesh.primitive_uv_sphere_add( radius=0.1, segments=8, ring_count=8, enter_editmode=False, location=g )