MRが楽しい

MRやVRについて学習したことを書き残す

Blender2.9で利用可能なpythonスクリプトを作る その81(メッシュの三角面数を取得する)

本日は Blender の技術調査枠です。
Blender2.9で利用可能なpythonスクリプトを作ります。

メッシュの三角面数を取得する

python スクリプトからメッシュオブジェクトの三角面数を取得してみます。
Mesh データの calc_loop_triangles() 関数を呼び出すと、ポリゴンの三角面が計算されて loop_triangles に保持されます。
このコレクションの数から三角面数を取得できます。
docs.blender.org

サンプルコード

指定オブジェクトの三角面数を返却します。取得に失敗した場合は 0 を返します。
・Script_meshtriangles_count.py

# bpyインポート
import bpy

# 指定メッシュの三角面数を取得する
def count_triangles_mesh(arg_object) -> int:
    """指定メッシュの三角面数を取得する
    
    Keyword Arguments:
        arg_objectname {bpy.types.Object} -- 対象オブジェクト

    Returns:
        int -- 三角面数(取得失敗時:0)
    """

    # 指定オブジェクトがメッシュか確認する
    if arg_object.type != 'MESH':
        # 指定オブジェクトが存在しない場合は処理しない
        return 0

    # Meshデータを取得する
    # メッシュアクセスのマニュアル
    # (https://docs.blender.org/api/current/bpy.types.Mesh.html)
    msh = arg_object.data

    # 三角面を計算する(結果はloop_trianglesに保存される)
    msh.calc_loop_triangles()

    # 三角面数を取得する
    triangles_count = len(msh.loop_triangles)

    return triangles_count

# 関数の実行例
# 全オブジェクトデータを取得する
for obj in bpy.data.objects:
    # ポリゴン数を取得する
    polycount = count_triangles_mesh(obj)
    # 結果をコンソールに表示する
    print(obj.name + " : " + str(polycount))

f:id:bluebirdofoz:20210929005111j:plain

シーン内の全オブジェクトの総三角面数を返却します。取得に失敗した場合は 0 を返します。
・Script_allmeshtriangles_count.py

# bpyインポート
import bpy

# 指定メッシュの三角面数を取得する
def count_alltriangles_mesh() -> int:
    """全メッシュの総三角面数を取得する
    
    Keyword Arguments:

    Returns:
        int -- 三角面数(取得失敗時:0)
    """

    # 総三角面数のカウンタ
    triangles_count = 0

    # 全メッシュデータを取得する
    for obj in bpy.data.objects:
        # 三角面数を加算する
        triangles_count += count_triangles_mesh(obj)

    return triangles_count

# 指定メッシュの三角面数を取得する
def count_triangles_mesh(arg_object) -> int:
    """指定メッシュの三角面数を取得する
    
    Keyword Arguments:
        arg_objectname {bpy.types.Object} -- 対象オブジェクト

    Returns:
        int -- 三角面数(取得失敗時:0)
    """

    # 指定オブジェクトがメッシュか確認する
    if arg_object.type != 'MESH':
        # 指定オブジェクトが存在しない場合は処理しない
        return 0

    # Meshデータを取得する
    # メッシュアクセスのマニュアル
    # (https://docs.blender.org/api/current/bpy.types.Mesh.html)
    msh = arg_object.data

    # 三角面を計算する(結果はloop_trianglesに保存される)
    msh.calc_loop_triangles()

    # 三角面数を取得する
    triangles_count = len(msh.loop_triangles)

    return triangles_count

# 関数の実行例
# 総三角面数を取得する
triangles_count = count_alltriangles_mesh()
# 結果をコンソールに表示する
print("triangles : " + str(triangles_count))

f:id:bluebirdofoz:20210929005120j:plain

ポリゴン数を取得する場合

三角面数ではなくポリゴン数を取得する場合は以下の記事を参考にして下さい。
bluebirdofoz.hatenablog.com