2点間の距離を測る

選択した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 は使用できなくなるが、アドオンにするほどのものではないだろう。
  • クラスを使用せずに実行するだけにしたかったが、レポートを出力するためには、クラスを使用せざるを得なかった。
  • スクリプトには必要最低限のコードしか書いていないので、適宜修正してほしい。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です