Maya
-
#31508
Nah, elkészült, berakom ide alulra, hátha van egy kettő észrevételed. Kapszulákat rak a függvény a jointok közé. Amit próbáltam kérdezni, hogy ha megvan egy mátrix, azt ráállítani egy másik objektum transzformációjaként. Ahogy olvastam worldMatrixet nem lehet kötözgetni, translatian, rotation, scale az ellenben megy.
def joinTraversalDFS(node):
print node
# process parent node
worldMatL = cmds.xform('%s'%node, q=True, ws=True, m=True)
worldMatM = om.MMatrix()
mUtil.createMatrixFromList(worldMatL, worldMatM)
mTransformMtx = om.MTransformationMatrix(worldMatM)
trans = mTransformMtx.getTranslation(om.MSpace.kWorld)
quat = mTransformMtx.rotation()
eulerRot = quat.asEulerRotation()
angles = [math.degrees(angle) for angle in (eulerRot.x, eulerRot.y, eulerRot.z)]
children = cmds.listRelatives( node, c=True )
if children:
# get bone height from first child
worldMatL = cmds.xform('%s'%children[0], q=True, os=True, m=True)
halfDist = worldMatL[12]/2.0
# create default capsule at origin
boneName = 'bone_%s' % (node)
cmds.polyCylinder( n='%s'%boneName, r=1, h=worldMatL[12]-2, sx=16, sy=1, sz=4, rcp=True, ax=(1,0,0) )
cmds.makeIdentity( boneName, apply=True )
# place capsule at parent joint joint
cmds.setAttr('%s.translate'%boneName, trans.x, trans.y, trans.z, type="double3")
cmds.setAttr('%s.rotate'%boneName, angles[0], angles[1], angles[2], type="double3")
# position capsule between the parent and child joint
cmds.xform(boneName, r=True, os=True, translation=(halfDist,0,0))
for jointIt in children:
joinTraversalDFS(jointIt)
Meghívni a root jointra, és akkor bekapszulázza a joint chaint - joinTraversalDFS('jointChainRoot')