スポンサーリンク

| キーワード:

Blender Python でポリゴンの重心を求める

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
        )

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: