選択された稜線の長さを表示
ポリゴンメッシュの稜線の長さを測る必要があって書きました.
選択された稜線の長さを表示します(ポリゴンメッシュ限定).
"""選択されたエッジの総延長を表示
Shade 3D ver.15で動作を確認
"""
from math import sqrt
__author__ = "CASPAR003 "
__date__ = "2015-12-17"
def main():
"""選択されたエッジの総延長を表示
"""
shape = xshade.scene().active_shape()
if shape.type != 7: return # ポリゴンメッシュ以外は受け付けない
s = 0.0
for i in shape.active_edge_indices:
s += elength(shape, i)
print "{0:.1f}mm".format(s)
return
def elength(shape, i):
"""指定されたエッジの長さを返す
@param[in] shape xshade.shapeオブジェクト(ポリゴンメッシュ)
@param[in] i エッジ番号
@return 指定されたエッジの長さ
"""
# 両端の頂点の座標を取得
x0 = shape.vertex(shape.edge(i).v0).position
x1 = shape.vertex(shape.edge(i).v1).position
# グローバル座標に変換
x0 = ctransform(x0, shape.local_to_world_matrix)
x1 = ctransform(x1, shape.local_to_world_matrix)
return sqrt((x1[0] - x0[0])**2 + (x1[1] - x0[1])**2 + (x1[2] - x0[2])**2)
def ctransform(v, m):
"""vをmで座標変換
ベクトルvをマトリクスmで座標変換して返します.
@param[in] v 座標ベクトル
@param[in] m 変換マトリクス
@return 変換後の座標ベクトル
Reference::
でった☆,Kouji Tanimoto,柴田孝之."Shadeスクリプト大全".ビー・エヌ・エヌ新社,2004-12-25.p.203.
"""
x = v[0]*m[0][0] + v[1]*m[1][0] + v[2]*m[2][0] + m[3][0]
y = v[0]*m[0][1] + v[1]*m[1][1] + v[2]*m[2][1] + m[3][1]
z = v[0]*m[0][2] + v[1]*m[1][2] + v[2]*m[2][2] + m[3][2]
return [x, y, z]
if __name__ == "__main__": main()
MiniDiary
横着
最近,スクリプト書いてもしかるべき所に申請したり登録したりするのが億劫で....
投稿者 | CASPAR003 |
投稿時刻 | 22:47 |
カテゴリー | Shade |
コメント | 0 件 |
トラックバック | 0 件 |
記事へのリンク | http://www.caspar003.info/delta/archive/2015/12/17/2247.html |
コメント
- 投稿者
トラックバック
- トラックバック