選択した2つの頂点の間の距離を測りたい時が稀にある。
スクリプト
import bpy
import bmesh
import math
class measure_distance(bpy.types.Operator):
bl_idname = 'mesh_vertices.measure_distance'
bl_label = 'Measure Distance'
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
me = context.active_object.data
bm = bmesh.from_edit_mesh(me)
v = [] # selected_vertices
for vert in bm.verts:
if vert.select == True:
v.append(vert)
lx = (v[0].co.x - v[1].co.x)**2
ly = (v[0].co.y - v[1].co.y)**2
lz = (v[0].co.z - v[1].co.z)**2
ll = math.sqrt(lx + ly + lz)
lx = math.sqrt(lx)
ly = math.sqrt(ly)
lz = math.sqrt(lz)
str = f"L: {ll} ( Lx: {lx}, Ly: {ly}, Lz: {lz} )"
self.report({'INFO'}, str)
return {'FINISHED'}
def register():
bpy.utils.register_class(measure_distance)
def unregister():
bpy.utils.unregister_class(measure_distance)
if __name__ == "__main__":
register()
手順
- Workspace を Scripting にする
- 新しいテキストに上記のスクリプトをコピペする(①)
- スクリプトを実行する(②)
- 頂点を2つ選択する(③)
- Menu Search を開き、「measure」等を入力する(④)
※ Menu Search は、F3 がショートカットキーとなっている場合が多い - Measure Distance をクリックする(⑤)
- レポートを確認する(⑥)

所感
- Blender を閉じると、Measure Distance は使用できなくなるが、アドオンにするほどのものではないだろう。
- クラスを使用せずに実行するだけにしたかったが、レポートを出力するためには、クラスを使用せざるを得なかった。
- スクリプトには必要最低限のコードしか書いていないので、適宜修正してほしい。