MRが楽しい

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

Blender2.9で利用可能なpythonスクリプトを作る その80(メッシュのポリゴン数を取得する)

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

メッシュのポリゴン数を取得する

python スクリプトからメッシュオブジェクトのポリゴン数を取得してみます。
Mesh データの polygons からメッシュのコレクションが取得できるので、このコレクションの数からポリゴン数を取得できます。
docs.blender.org

サンプルコード

指定オブジェクトのポリゴン数を返却します。取得に失敗した場合は 0 を返します。
・Script_meshpolygons_count.py

# bpyインポート
import bpy

# 指定メッシュのポリゴン数を取得する
def count_polygons_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

    return len(msh.polygons)

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

f:id:bluebirdofoz:20210928234448j:plain

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

# bpyインポート
import bpy

# 指定メッシュのポリゴン数を取得する
def count_allpolygons_mesh() -> int:
    """全メッシュの総ポリゴン数を取得する
    
    Keyword Arguments:

    Returns:
        int -- ポリゴン数(取得失敗時:0)
    """

    # 総ポリゴン数のカウンタ
    polygons_count = 0

    # 全メッシュデータを取得する
    for obj in bpy.data.objects:
        # ポリゴン数を加算する
        polygons_count += count_polygons_mesh(obj)

    return polygons_count

# 指定メッシュのポリゴン数を取得する
def count_polygons_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

    return len(msh.polygons)

# 関数の実行例
# 総ポリゴン数を取得する
polycount = count_allpolygons_mesh()
# 結果をコンソールに表示する
print("polygons : " + str(polycount))

f:id:bluebirdofoz:20210928234458j:plain

三角面数を取得する場合

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