Maya
  • Nyers
    #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')