以下の内容はhttps://redhologerbera.hatenablog.com/entry/2025/04/10/221238より取得しました。


BlenderPythonで選択しているメッシュの面積を求める

本日はBlenderPython枠です。

今回はBlenderPythonで選択中のメッシュの面積を求めていきます。

〇環境

・Windows11PC

・Blender4.4

〇面積の求め方

三角形の面積は、縦×横/2ですが、3次元上の3つの頂点(𝐴(𝑥1,𝑦1,𝑧1), 𝐵(𝑥2,𝑦2,𝑧2), 𝐶(𝑥3,𝑦3,𝑧_3))を使用して次のように定義することができます。

①まずはAB、ACのベクトルを計算します。


 AB = (x_2 - x_1 , y_2 - y_1, z_2 - z_1)

 AC = (x_3 - x_1 , y_3 - y_1, z_3 - z_1)

②次にABとACの外積を求めます。(絶対値が入っているのは面積は正の値であるため)


 |AB×AC|

これが縦×横に相当します。

③最後に1/2で割ることで面積が表現されます。

〇BlenderPythonでの面積を求める処理

Blenderでは頂点情報を取得できるため先ほどのアルゴリズムを使用して計算を行うことはできますが、bmeshなどで簡単に計算できるようになっています。

具体的には以下のようなコードになります。

import bpy
import bmesh

# メッシュオブジェクトが選択されているか確認
obj = bpy.context.active_object
if obj is None or obj.type != 'MESH':
    print("選択されたオブジェクトがありません、またはメッシュオブジェクトではありません。")
else:
    # 編集モードに切り替え(必要であれば)
    if bpy.context.mode != 'EDIT_MESH':
        bpy.ops.object.mode_set(mode='EDIT')

    # bmeshの取得
    bm = bmesh.from_edit_mesh(obj.data)

    # 面積計算
    total_area = sum(face.calc_area() for face in bm.faces)

    print(f"選択されたメッシュの総面積: {total_area:.4f}")

    # メッシュを更新
    bmesh.update_edit_mesh(obj.data, loop_triangles=True)

 このコードを実行することで各ポリゴンの面積を求めsum関数で足しています。

ここではプリミティブキューブを使用しているため2m×2m=4m2の大きさ×6=24m2の面積であるとわかりました。

本日は以上です。




以上の内容はhttps://redhologerbera.hatenablog.com/entry/2025/04/10/221238より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14