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

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)

追記

ローカル座標しか取得していなかったので、ワールド座標系で取得するように変更した。
複数形状に対応してみたが、まだ選択されたポリゴンメッシュのみサイズ取得できる状態。