ポリゴンメッシュのサイズ取得


ShadeのPythonでポリゴンメッシュのサイズ取得するスクリプト。

Shadeにバウンディングボックスのサイズをさくっと取得できる関数はなぜか実装されていないので手製ライブラリを作る。

変数定義で無駄な書き方をしているような気がするのは気のせいだろうか……

from math import sin, cos, pi, atan, sqrt, exp
scene = xshade.scene()
shape = xshade.shape
maxX = 0.0
minX = 0.0
xVal = []
maxY = 0.0
minY = 0.0
yVal = []
maxZ = 0.0
minZ = 0.0
zVal = []
def div_vec_float(vec, scalar):
return [vec[0] / scalar, vec[1] / scalar, vec[2] / scalar]
def mul_vec_mat4(vec, mat):
new_vec = [
vec[0]*mat[0][0] + vec[1]*mat[1][0] + vec[2]*mat[2][0] + mat[3][0],
vec[0]*mat[0][1] + vec[1]*mat[1][1] + vec[2]*mat[2][1] + mat[3][1],
vec[0]*mat[0][2] + vec[1]*mat[1][2] + vec[2]*mat[2][2] + mat[3][2
if not mat[3][3] == 1.0:
new_vec = div_vec_float(new_vec, mat[3][3])
return new_vec
def get_potision(act_shape):
for i in range( act_shape.total_number_of_control_points):
cur_position = mul_vec_mat4(act_shape.vertex(i).position, act_shape.local_to_world_matrix)
xVal.append(cur_position[0])
yVal.append(cur_position[1])
zVal.append(cur_position[2])
act_shapes = scene.active_shapes
act_ID = 0
for i in act_shapes:
if act_shapes[act_ID].type == 7:
get_potision(act_shapes[act_ID])
act_ID = act_ID + 1
maxX = max( xVal )
minX = min( xVal )
sizX = maxX - minX
maxY = max( yVal )
minY = min( yVal )
sizY = maxY - minY
maxZ = max( zVal )
minZ = min( zVal )
sizZ = maxZ - minZ
print 'Xmax = ' + str(maxX) + ' / Xmin ' + str(minX) + ' / XSize = ' + str(sizX)
print 'Ymax = ' + str(maxY) + ' / Ymin ' + str(minY) + ' / YSize = ' + str(sizY)
print 'Zmax = ' + str(maxZ) + ' / Zmin ' + str(minZ) + ' / ZSize = ' + str(sizZ)

追記

ローカル座標しか取得していなかったので、ワールド座標系で取得するように変更した。

複数形状に対応してみたが、まだ選択されたポリゴンメッシュのみサイズ取得できる状態。

コメントを残す

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

Optimization WordPress Plugins & Solutions by W3 EDGE