-
-
Save sevelee/54805fd0705a8cd9f0195233d02f39dc to your computer and use it in GitHub Desktop.
Ryan Roberts - Wrap Deformer
This file contains 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
''' | |
Ryan Roberts - Wrap Deformer | |
rr_wrap.py | |
Description: | |
Ryan Robers created a simple function to create a wrap deformer. | |
The wrap deformer needs a little more than the deform command to get working. | |
Michael Clavan | |
I wanted to have the function also return the deformer to the user. So, my contributions are pretty minor. | |
I converted the wrap deformer into a pynode object type pm.nt.Wrap. | |
''' | |
import maya.cmds as cmds | |
import pymel.core as pm | |
def createWrap(*args,**kwargs): | |
influence=args[0] | |
surface = args[1] | |
shapes = cmds.listRelatives(influence,shapes=True) | |
influenceShape = shapes[0] | |
shapes = cmds.listRelatives(surface,shapes=True) | |
surfaceShape = shapes[0] | |
#create wrap deformer | |
weightThreshold = kwargs.get('weightThreshold',0.0) | |
maxDistance = kwargs.get('maxDistance',1.0) | |
exclusiveBind = kwargs.get('exclusiveBind',False) | |
autoWeightThreshold = kwargs.get('autoWeightThreshold',True) | |
falloffMode = kwargs.get('falloffMode',0) | |
wrapData = cmds.deformer(surface, type='wrap') | |
wrapNode = wrapData[0] | |
cmds.setAttr(wrapNode+'.weightThreshold',weightThreshold) | |
cmds.setAttr(wrapNode+'.maxDistance',maxDistance) | |
cmds.setAttr(wrapNode+'.exclusiveBind',exclusiveBind) | |
cmds.setAttr(wrapNode+'.autoWeightThreshold',autoWeightThreshold) | |
cmds.setAttr(wrapNode+'.falloffMode',falloffMode) | |
cmds.connectAttr(surface+'.worldMatrix[0]',wrapNode+'.geomMatrix') | |
#add influence | |
duplicateData = cmds.duplicate(influence,name=influence+'Base') | |
base = duplicateData[0] | |
shapes = cmds.listRelatives(base,shapes=True) | |
baseShape = shapes[0] | |
cmds.hide(base) | |
#create dropoff attr if it doesn't exist | |
if not cmds.attributeQuery('dropoff',n=influence,exists=True): | |
cmds.addAttr( influence, sn='dr', ln='dropoff', dv=4.0, min=0.0, max=20.0 ) | |
cmds.setAttr( influence+'.dr', k=True ) | |
#if type mesh | |
if cmds.nodeType(influenceShape) == 'mesh': | |
#create smoothness attr if it doesn't exist | |
if not cmds.attributeQuery('smoothness',n=influence,exists=True): | |
cmds.addAttr( influence, sn='smt', ln='smoothness', dv=0.0, min=0.0 ) | |
cmds.setAttr( influence+'.smt', k=True ) | |
#create the inflType attr if it doesn't exist | |
if not cmds.attributeQuery('inflType',n=influence,exists=True): | |
cmds.addAttr( influence, at='short', sn='ift', ln='inflType', dv=2, min=1, max=2 ) | |
cmds.connectAttr(influenceShape+'.worldMesh',wrapNode+'.driverPoints[0]') | |
cmds.connectAttr(baseShape+'.worldMesh',wrapNode+'.basePoints[0]') | |
cmds.connectAttr(influence+'.inflType',wrapNode+'.inflType[0]') | |
cmds.connectAttr(influence+'.smoothness',wrapNode+'.smoothness[0]') | |
#if type nurbsCurve or nurbsSurface | |
if cmds.nodeType(influenceShape) == 'nurbsCurve' or cmds.nodeType(influenceShape) == 'nurbsSurface': | |
#create the wrapSamples attr if it doesn't exist | |
if not cmds.attributeQuery('wrapSamples',n=influence,exists=True): | |
cmds.addAttr( influence, at='short', sn='wsm', ln='wrapSamples', dv=10, min=1 ) | |
cmds.setAttr( influence+'.wsm', k=True ) | |
cmds.connectAttr(influenceShape+'.ws',wrapNode+'.driverPoints[0]') | |
cmds.connectAttr(baseShape+'.ws',wrapNode+'.basePoints[0]') | |
cmds.connectAttr(influence+'.wsm',wrapNode+'.nurbsSamples[0]') | |
cmds.connectAttr(influence+'.dropoff',wrapNode+'.dropoff[0]') | |
# I want to return a pyNode object for the wrap deformer. | |
# I do not see the reason to rewrite the code here into pymel. | |
# return wrapNode | |
return pm.nt.Wrap(wrapNode) | |
# selected = cmds.ls(sl=True) | |
# createWrap(selected[0],selected[1]) | |
# |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment