2025年12月22日月曜日

Blender オブジェクトの部分選択範囲の面積測定

 Measuring the Area of ​​a Selected Part of an Object in Blender


I created a Blender Python script that selects a portion of an object in the Blender 3D viewport and measures the area of ​​that selection.


Blender3Dビューポートにおいてあるオブジェクトの一定部分を選択し、その選択範囲の面積を測定するBlenderPythonスクリプトを作成しました。

1 オブジェクト部分選択範囲の面積測定BlenderPythonスクリプト

import bpy
import bmesh

obj = bpy.context.edit_object
mw = obj.matrix_world

bm = bmesh.from_edit_mesh(obj.data)

# 選択面があるか確認
if not any(f.select for f in bm.faces):
    print("No faces selected. Face Select(3)で面を選択してください。")
    raise SystemExit

# 選択状態を保ったままコピー
bm2 = bm.copy()

# コピー側で「選択面」だけ取得(index対応は使わない)
sel2 = [f for f in bm2.faces if f.select]

# 選択面だけ三角化し、生成された三角形(result['faces'])だけを使う
res = bmesh.ops.triangulate(bm2, faces=sel2)
tri_faces = res.get("faces", [])

area = 0.0
for f in tri_faces:
    if len(f.verts) != 3:
        continue
    v0, v1, v2 = [mw @ v.co for v in f.verts]
    area += 0.5 * (v1 - v0).cross(v2 - v0).length

bm2.free()

print("Selected face area (WORLD, triangulated selection only) =", area)
2 使い方

・BlenderPythonスクリプトをBlenderテキストエディターにコピー

・エディターモードでオブジェクトの部分を選択

・BlenderPythonスクリプトを走らせる。

・システムコンソールに面積が表示される。

(システムコンソールはウィンドウ→システムコンソール切り替えで事前に表示しておきます。なおデフォルトでシステムコンソールは文字化けしていますが、面積は正常に読み取れます。)


立体オブジェクトの一部を選択した様子


システムコンソールに面積測定結果が表示された様子

3 特別な性能

・オブジェクトのスケールが(1,1,1)でなくても、つまり非等方スケール(例 (30、30、1))でも、3Dビューポートにおける正確な面積を測定します。

4 無料アドオン3D Print Toolboxについて

Blenderアドオン3D Print Toolboxで立体オブジェクトの体積と表面積を測定できます。平面メッシュなら、その表面積を測定できます。しかし、立体オブジェクトの部分を選択してその面積を測定することはできません。

0 件のコメント:

コメントを投稿