選択した2頂点間の距離値を計算 (スクリプト)

ポリゴンメッシュまたは線形状で、選択した2つの頂点(コントロールポイント)の
ローカル座標での距離を計算するスクリプトです。


import math

scene = xshade.scene()

#---------------------------------------.
# 指定の形状で選択された2頂点の長さを計算.
# @param[in] shape       対象形状.
#---------------------------------------.
def getTwoPointsLength (shape):
    # ポリゴンメッシュでも線形状でもない場合はスキップ.
    if shape.type != 7 and shape.type != 4:
        print 'ポリゴンメッシュまたは線形状を選択してください。'
        return

    # 選択されている頂点(コントロールポイント)のインデックスと選択数を取得.    
    vCou = shape.total_number_of_control_points
    selectVIndices = []
    selectVCou = 0
    if shape.type == 4:     # 線形状の場合.
        for i in range(vCou):
            if shape.get_active_control_point(i):
                selectVIndices.append(i)
                selectVCou += 1
                if selectVCou > 2:
                    break

    else:       # ポリゴンメッシュの場合.
        for i in range(vCou):
            vertexD = shape.vertex(i)
            if vertexD.active:
                selectVIndices.append(i)
                selectVCou += 1
                if selectVCou > 2:
                    break
    if selectVCou > 2:
        print '頂点またはコントロールポイントが2つ以上選択されています。'
        return
    if selectVCou < 2:
        print '頂点またはコントロールポイントを2つ選択してください。'
        return

    # 2つの頂点(コントロールポイント)を取得.
    p0 = [0.0, 0.0, 0.0]
    p1 = [0.0, 0.0, 0.0]
    if shape.type == 4:     # 線形状の場合.
        p0 = shape.control_point(selectVIndices[0]).position
        p1 = shape.control_point(selectVIndices[1]).position
    else:       # ポリゴンメッシュの場合.
        p0 = shape.vertex(selectVIndices[0]).position
        p1 = shape.vertex(selectVIndices[1]).position

    # 距離を計算.
    dx = p1[0] - p0[0]
    dy = p1[1] - p0[1]
    dz = p1[2] - p0[2]
    distV = math.sqrt(dx * dx + dy * dy + dz * dz)
    print 'point(' + str(selectVIndices[0]) + ') - point(' + str(selectVIndices[1]) + ') : ' + str(distV) + ' mm'

shape = scene.active_shape()
getTwoPointsLength(shape)

ポリゴンメッシュまたは線形状をブラウザで選択し、形状編集モード + 頂点選択モードで2頂点(2コントロールポイント)を選択し、
上記スクリプトを実行します。
これでメッセージウィンドウに、2頂点間の距離値が表示されます。

Translate »