Created
August 29, 2015 14:19
-
-
Save utatsuya/a95afe3c5523ab61e61b 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