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 )
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)