Forked from utatsuya/MayaAPI2.0_setWeights_getWeights.py
Created
May 11, 2016 19:46
-
-
Save SEVEZ/ca8666b92dfbbbea06ef68e12e060d87 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # python api2.0 setWeights(),setWeight() | |
| # http://ueta.hateblo.jp/entry/2015/08/24/102937 | |
| import time | |
| import maya.api.OpenMaya as OpenMaya2 | |
| import maya.api.OpenMayaAnim as OpenMayaAnim2 | |
| #_time = time.time | |
| _time = time.clock | |
| SKINCLUSTER = "skinCluster1" | |
| MESHSHAPE = "TestMeshShape" | |
| msg = "Python API 2.0" | |
| startTime = _time() | |
| def n( name ): | |
| sellist = OpenMaya2.MGlobal.getSelectionListByName( name ) | |
| try: | |
| return sellist.getDagPath(0) | |
| except: | |
| return sellist.getDependNode(0) | |
| # スキンクラスタ取得 | |
| skinNode = n( SKINCLUSTER ) | |
| skinFn = OpenMayaAnim2.MFnSkinCluster( skinNode ) | |
| # シェイプの取得 | |
| meshPath = n( MESHSHAPE ) | |
| meshNode = meshPath.node() | |
| # 取得対象の頂点 | |
| # 今回はすべての頂点を取得したいので[0,1,2,,,,,MaxVertex]となっている。 | |
| meshVerItFn = OpenMaya2.MItMeshVertex( meshNode ) | |
| indices = range( meshVerItFn.count() ) | |
| # 指定の頂点をコンポーネントとして取得する。 | |
| singleIdComp = OpenMaya2.MFnSingleIndexedComponent() | |
| vertexComp = singleIdComp.create( OpenMaya2.MFn.kMeshVertComponent ) | |
| singleIdComp.addElements( indices ) | |
| # setWeights()で指定するためのインフルエンスIntArrayを作成 | |
| infDags = skinFn.influenceObjects() | |
| infIndexes = OpenMaya2.MIntArray( len( infDags ) , 0 ) | |
| for x in xrange( len( infDags ) ): | |
| infIndexes[x] = int( skinFn.indexForInfluenceObject( infDags[x] ) ) | |
| # すべてのウエイトの値を取得 | |
| s = _time() | |
| weightData = skinFn.getWeights( meshPath , vertexComp ) | |
| get = _time() - s | |
| print msg, "getWeights()", get, "s" | |
| # 最初に取得したウエイトを再設定 | |
| s = _time() | |
| skinFn.setWeights( meshPath , vertexComp , infIndexes , weightData[0] ) | |
| set = _time() - s | |
| print msg, "setWeights()", set, "s" | |
| total = _time() - startTime | |
| print msg, "(Total Time)", total, "s" | |
| print msg, "(etc)", (total - get - set), "s" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment