-
-
Save moppius/74ca6f17f0f4f4541b4ac1c3de976079 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 Roberts 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. | |
Paul Greveson: | |
Removed all dependencies on maya.cmds and used some more PyMel methods to clean up code. | |
Also added some simple checks to prevent errors, and removed redundant comments. | |
Fixed the argument order (it was inverse of Maya defaults of surfaces followed by influence object) | |
''' | |
import pymel.core as pm | |
def create_wrap(*args,**kwargs): | |
surface = args[0] | |
influence=args[1] | |
influenceShape = influence.getShape() | |
surfaceShape = surface.getShape() | |
if influenceShape is None or surfaceShape is None: | |
pm.warning("One or more inputs had no shape node - cannot create Wrap deformer!") | |
return None | |
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 = pm.deformer(surface, type='wrap') | |
wrapNode = wrapData[0] | |
wrapNode.setAttr('weightThreshold', weightThreshold) | |
wrapNode.setAttr('maxDistance', maxDistance) | |
wrapNode.setAttr('exclusiveBind', exclusiveBind) | |
wrapNode.setAttr('autoWeightThreshold', autoWeightThreshold) | |
wrapNode.setAttr('falloffMode', falloffMode) | |
pm.connectAttr(surface + '.worldMatrix[0]', wrapNode + '.geomMatrix') | |
duplicateData = pm.duplicate(influence, name=influence + 'Base') | |
base = duplicateData[0] | |
baseShape = base.getShape() | |
base.hide() | |
if not pm.attributeQuery('dropoff', n=influence, exists=True): | |
influence.addAttr('dropoff', sn='dr', dv=4.0, min=0.0, max=20.0) | |
influence.setAttr('dr', k=True) | |
if influenceShape.nodeType() == 'mesh': | |
if not pm.attributeQuery('smoothness', n=influence, exists=True): | |
influence.addAttr('smoothness', sn='smt', dv=0.0, min=0.0) | |
influence.setAttr('smt', k=True) | |
if not pm.attributeQuery('inflType', n=influence, exists=True): | |
influence.addAttr('inflType', at='short', sn='ift', dv=2, min=1, max=2) | |
pm.connectAttr(influenceShape + '.worldMesh', wrapNode + '.driverPoints[0]') | |
pm.connectAttr(baseShape + '.worldMesh', wrapNode + '.basePoints[0]') | |
pm.connectAttr(influence + '.inflType', wrapNode + '.inflType[0]') | |
pm.connectAttr(influence + '.smoothness', wrapNode + '.smoothness[0]') | |
if influenceShape.nodeType() == 'nurbsCurve' or influenceShape.nodeType() == 'nurbsSurface': | |
if not pm.attributeQuery('wrapSamples', n=influence, exists=True): | |
influence.addAttr('wrapSamples', at='short', sn='wsm', dv=10, min=1) | |
influence.setAttr('wsm', k=True) | |
pm.connectAttr(influenceShape + '.ws', wrapNode + '.driverPoints[0]') | |
pm.connectAttr(baseShape + '.ws', wrapNode + '.basePoints[0]') | |
pm.connectAttr(influence + '.wsm', wrapNode + '.nurbsSamples[0]') | |
pm.connectAttr(influence + '.dropoff', wrapNode + '.dropoff[0]') | |
return pm.nt.Wrap(wrapNode) | |
# sel = pm.ls(sl=True) | |
# create_wrap(sel[0], sel[1]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment