MRが楽しい

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

Blender2.9で利用可能なpythonスクリプトを作る その84(オブジェクトの寸法情報から体積を計算する)

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

オブジェクトの寸法情報を取得する

オブジェクトの寸法情報を取得するには Object クラスの dimensions 変数を参照します。
dimensions 変数はグローバル座標に基づく絶対的な長さを返します。
docs.blender.org

本記事ではこの寸法情報を使用してオブジェクトの体積を計算します。
MESH の形状に基づく計算でないため、オブジェクトの正確な体積を示すものではありませんが、おおよその体積を素早く計算できるメリットがあります。

サンプルコード

指定数のオブジェクトの寸法情報から体積を計算して値を返却します。
取得失敗時には 0 を返しています。
・Script_get_volume_object.py

# bpyインポート
import bpy

# オブジェクトの寸法情報から体積を計算する
def get_volume_object(arg_targetobject:bpy.types.Object) -> float:
    """オブジェクトの寸法情報から体積を計算する

    Keyword Arguments:
        arg_targetobject {bpy.types.Object} -- 対象オブジェクト

    Returns:
        float -- 体積(取得失敗時:0)
    """
    
    # 指定オブジェクトがメッシュか確認する
    if arg_targetobject.type != 'MESH':

        # 指定オブジェクトがMESHでない場合は処理しない
        return 0
        
    # 指定オブジェクトの寸法情報を取得する
    # オブジェクトのインタフェース
    # (https://docs.blender.org/api/current/bpy.types.Object.html)
    target_dimensions = arg_targetobject.dimensions

    # 体積を計算する(X軸の長さ x Y軸の長さ x Z軸の長さ)
    result_volume = target_dimensions[0] * target_dimensions[1] * target_dimensions[2]

    return result_volume

# 関数の実行例
# Sphereオブジェクトの体積を取得する
get_volume = get_volume_object(arg_targetobject=bpy.data.objects.get("Sphere"))
# 結果をコンソールに表示する
print("Sphere Volume : " + str(round(get_volume, 2)))

f:id:bluebirdofoz:20211006204339j:plain

・スケール変更例
f:id:bluebirdofoz:20211006204347j:plain

・子オブジェクトでの実行例
f:id:bluebirdofoz:20211006204355j:plain
f:id:bluebirdofoz:20211006204408j:plain