小数点以下の数値を綺麗にしよう

こんにちは!Rhinoです。
モデルの移動値などに小数点以下の細かな値が残っていて注意された経験ありませんか?
仕事を始めた頃は僕はよくありましたw
そんな経験から小数点以下の数値が気になってしまいます…
今日は簡単なスクリプトでそんな悩みを解決したいと思いますw

どうやって数値を綺麗にするか

数値を綺麗にするためにはどうしたら良いでしょうか?
例えばこんな数値があるとします。
これを小数点以下2桁までの数値にしたいと思います。

5.1689371

まず100倍します。

516.89371

100倍した値の小数点以下の数値をFloor関数を使って切り捨てます。

516

最後に100で割って元の桁に戻します。

5.16

コード

上記の方法をコード化してみました。
対象は選択されているtransformノードになります。

# -*- coding: utf-8 -*-
import maya.cmds as cmds
import math

#引数として与えられる桁でリストの要素を切り捨て
def roundValue( dig, list ):
	result = []
	
	for item in list:
		result.append( math.floor( item * ( 10 ** dig ) ) / ( 10 ** dig ) )
	
	return result

#小数点以下2桁
digit = 2
#選択しているtransformノードを取得
selection = cmds.ls( sl=True, fl=True, type="transform" )

for s in selection:
	translate = cmds.getAttr( "%s.translate" % s )[0]
	rotate = cmds.getAttr( "%s.rotate" % s )[0]
	scale = cmds.getAttr( "%s.scale" % s )[0]
	rTranslate = roundValue( digit, translate )
	rRotate  = roundValue( digit, rotate )
	rScale  = roundValue( digit, scale )
	cmds.setAttr( "%s.translate" % s, rTranslate[0], rTranslate[1], rTranslate[2], type="double3" )
	cmds.setAttr( "%s.rotate" % s, rRotate[0], rRotate[1], rRotate[2], type="double3" )
	cmds.setAttr( "%s.scale" % s, rScale[0], rScale[1], rScale[2], type="double3" )

簡単ですがこれで気持ちもすっきりですね。
では、また!

コメント

タイトルとURLをコピーしました