Skip to content

Instantly share code, notes, and snippets.

@TSCG
Last active December 15, 2015 04:30
Show Gist options
  • Save TSCG/6de9716703b9d6b117ee to your computer and use it in GitHub Desktop.
Save TSCG/6de9716703b9d6b117ee to your computer and use it in GitHub Desktop.
snapToClosestPointOnMesh / Maya
#最近点にスナップ
#tgtObj=スナップ元のオブジェ、vtxList=スナップ対象の頂点リスト
import pymel.core as pm
import maya.cmds as cmds
def snapToClosestPointOnMesh(tgtObj,vtxList):
tgtObjShape = pm.PyNode(tgtObj).getShapes()
tmpCpNode = cmds.createNode( 'closestPointOnMesh', ss=True )
cmds.connectAttr( tgtObjShape[0]+'.worldMesh[0]', tmpCpNode+'.inMesh' )
cmds.connectAttr( tgtObjShape[0]+'.worldMatrix[0]', tmpCpNode+'.inputMatrix' )
for tmp in vtxList:
tmpPos = cmds.pointPosition( tmp, w=True)
cmds.setAttr(tmpCpNode+".inPosition", tmpPos[0],tmpPos[1],tmpPos[2])
fixPos = cmds.getAttr(tmpCpNode+".result.position")
cmds.xform( tmp, worldSpace=True, translation=fixPos[0])
cmds.delete(tmpCpNode)
#usage
#vtxs = cmds.ls(sl=True,flatten=True)
#snapToClosestPointOnMesh("pSphere1", vtxs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment