def closest_pt_on_mesh_position(point, mesh, *args):
"""rtrns position of closest pt
#--------------------
#inputs and outputs for "closestPointOnMesh":
#inputs:
#"mesh"->"inputMesh" (mesh node of transform)
#"clusPos"->"inPosition"
#"worldMatrix"(transform of point)->"inputMatrix"
#outputs:
#"position"->surfacepoint in space
#"u"->parameter u
#"v"->parameter v
#"normal"->normal vector
#"closestFaceIndex"->index of closest face
#"closestVertexIndex"->index of closet vertex
#---------------------
"""
if isinstance(point, basestring):
if isType(point, "transform"):
# cmds.select(point, r=True)
ptPos = cmds.xform(point, ws=True, q=True, rp=True)
name = point
else:
cmds.warning("zbw_rig.closest_pt_on_mesh_position: the string you gave me isn't a transform")
return()
elif isinstance(point, (list, tuple)):
if len(point)==3:
ptPos = point
name = mesh
else:
cmds.warning("zbw_rig.closest_pt_on_mesh_position: there are not the right number of indices in the "
"iterable you gave me. Need 3, you gave {0}".format(len(point)))
else:
cmds.warning("zbw_rig.closest_pt_on_mesh_position: You didn't give me a name of transform or position(array["
"3])")
return()
cpomNode = cmds.shadingNode("closestPointOnMesh", asUtility=True, n="{0}_CPOM".format(name))
cmds.connectAttr("{0}.outMesh".format(mesh), "{0}.inMesh".format(cpomNode))
cmds.setAttr("{0}.inPosition".format(cpomNode), ptPos[0], ptPos[1], ptPos[2])
cmds.connectAttr("{0}.worldMatrix".format(mesh), "{0}.inputMatrix".format(cpomNode))
cpomPos = cmds.getAttr("{0}.position".format(cpomNode))[0]
cmds.delete(cpomNode)
return (cpomPos)
评论列表
文章目录