Exemplo n.º 1
0
def renameReposeObj(obj, targetName, previous):
    ''' Rename `obj` to `targetName`, suffixing the (possible) existing one and storing transform info.
    '''
    #print('    Rename {} with prev of {}'.format(obj, previous) )
    oldName = targetName.replace('repose', 'old')
    if objExists(oldName):  # and '_helper' not in oldName:
        # For now, just skip of _helpers, though I should give them generated unique names
        print(oldName, 'exists, deleting')
        delete(oldName)
    
    if objExists(targetName):
        old = PyNode(targetName)
        old.rename( oldName )
        
        previous = old if not previous else previous
    
    if previous:
        addVector(obj, 'prevRot', previous.r.get())
        addVector(obj, 'prevTrans', previous.t.get())
        addVector(obj, 'prevRotWorld', xform(previous, q=True, ws=True, ro=True))
        addVector(obj, 'prevTransWorld', xform(previous, q=True, ws=True, t=True))
    
    obj.rename( targetName )
Exemplo n.º 2
0
def cardIk(card):

    #ctrl = mel.eval( 'curve -d 1 -p -0.5 1 -0.866026 -p -0.5 1 0.866025 -p 1 1 0 -p -0.5 1 -0.866026 -p 0 0 0 -p -0.5 -1 -0.866026 -p -0.5 -1 0.866025 -p 0 0 0 -p -0.5 1 0.866025 -p 1 1 0 -p 0 0 0 -p 1 -1 0 -p -0.5 -1 -0.866026 -p -0.5 -1 0.866025 -p 1 -1 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 ;' )

    ctrl = PyNode(
        mel.eval(
            'curve -d 1 -p 0 4 0 -p -2.828427 2.828427 -2.47269e-007 -p -4 0 -3.49691e-007 -p -2.828427 -2.828427 -2.47269e-007 -p 0 -4 0 -p 2.828427 -2.828427 0 -p 4 0 0 -p 2.828427 2.828427 0 -p 0 4 0 -p -1.23634e-007 2.828427 2.828427 -p -1.74846e-007 0 4 -p -1.23634e-007 -2.828427 2.828427 -p 0 -4 0 -p 3.70903e-007 -2.828427 -2.828427 -p 5.24537e-007 0 -4 -p 3.70903e-007 2.828427 -2.828427 -p 0 4 0 -p 0 0 0 -p 0 -4 0 -p 0 0 0 -p -4 0 0 -p 4 0 0 -p 0 0 -4 -p 0 0 4 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 ;'
        ))

    ctrl.rename(card.name() + "_target")

    upCtrl = duplicate(ctrl)[0]
    upCtrl.rename(card.name() + "_up")

    aim = spaceLocator()
    aim.setParent(ctrl)
    aim.t.set(0, 0, 0)
    hide(aim)

    up = spaceLocator()
    up.setParent(upCtrl)
    hide(up)

    base = spaceLocator()
    base.rename('cardIkBase')
    hide(base)
    pointConstraint(card, base)

    util.moveTo(ctrl, card.joints[-1])
    util.moveTo(upCtrl, card.vtx[1])

    aimConstraint(aim,
                  card,
                  wut='object',
                  wuo=up,
                  aim=[0, -1, 0],
                  u=[0, 0, -1])

    dist = distanceDimension(base, aim)
    dist.getParent().setParent(ctrl)
    hide(dist)

    core.math.divide(dist.distance,
                     dist.distance.get() / card.sy.get()) >> card.sy

    follower = spaceLocator()
    follower.rename('cardIkFollower')
    follower.setParent(card)
    follower.t.set(0, 0, 0)
    hide(follower)

    pointConstraint(up, follower, skip=['x', 'z'])

    sideDist = distanceDimension(follower, up)
    sideDist.getParent().setParent(ctrl)
    hide(sideDist)

    core.math.divide(sideDist.distance,
                     sideDist.distance.get() / card.sz.get()) >> card.sz

    # Orient controls with the card so moving in local space initially preserves orientation.
    upCtrl.setRotation(card.getRotation(space='world'), space='world')
    ctrl.setRotation(card.getRotation(space='world'), space='world')

    distBetweenCtrls = (ctrl.getTranslation(space='world') -
                        upCtrl.getTranslation(space='world')).length()
    if distBetweenCtrls < 8.0:
        upCtrl.s.set([distBetweenCtrls / 8.0] * 3)
        ctrl.s.set([distBetweenCtrls / 8.0] * 3)

    select(ctrl)