Maya Script Python ウェイトのコピーその2

import maya.cmds as cmds

oJnt2 = []
oSel = cmds.ls( sl= 1, o= 1 )[0]
oSkt = cmds.listHistory( oSel )
oCls = cmds.ls( oSkt, type= "skinCluster" )[0]
oVtx = cmds.filterExpand( sm= 31 )[0]
oJnt = cmds.skinPercent( oCls, oVtx, query= 1, transform= None )
for oJ in oJnt :
	if oJ.find("|") != -1 :
		oJ = oJ.rsplit("|",1)[1]
	oJnt2.append( oJ )
oWei = cmds.skinPercent( oCls, oVtx, query= 1, value= 1 )
oWei = [ x for x in oWei if x > 0.0 ]
oDic = dict( zip( oJnt2, oWei ) )
print "{0:-^60}".format( "CopyWeight" )
for k, v in oDic.items() :
	print "{0:_<30}{1:_>30}".format( k, v )
print "\n\n"

以前記事で書いたウェイトのコピーペーストの違うバージョンです。
コピーする際に設定されているインフルエンス全ての値を取得するのではなく、
値が入っているものだけコピーします。
なので、コピー元のオブジェクトに設定されているインフルエンスと、
コピー先のオブジェクトに設定されているインフルエンスが違っても無理やりペーストします。
なんだかまずいような気もしますが、一応動作確認はしました。
ただ、保証はしません。
無理矢理でもいいからとにかくコピーしたい、という時に使ってみたら使えました。
 

そういえば、Pythonは変数に何でも入れられてしまいます。
型の宣言が無いので、入れ替えも自由です。
ふと思ったのですが、独学で体系だった勉強をしていないので、自分の作るものは変数の名前の一貫性が殆どありません。
同じ処理をするのにコピーして使うと、使えない場合が多いのです。今さらながらに困った、、

 

よくよく考えてみれば、英語などのラテン系の言語では複数形が存在し、sを付けることでそれを表す。
なるほどただの文字列とリスト(配列)でsの有無でそれらを判別するようにすれば、分かりやすい。
もちろんsである必要はないが、それを使わない理由もない。
日常使う言語に思考が左右される。当然といえば当然の事を理解しました。

 

さらには、そういった言語では単体を示すのにaなどの文字を当てます。
プログラムでは必要ありませんが、日常ではあればそれなりに役に立つのだと思います。
しかしまた、それがあるせいで言葉に縛られる。なるほど一神教が普及するわけだ。と妙に納得してしまいます。
これからは変数の名前に気をつけよう。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です