def closest_pt_on_mesh_rotation(point, mesh, *args):
# TODO - generalize for various orientations, and various rotation orders
"""
takes a point (can be name of transform or iterable(3) of rotations and a poly mesh and gives the rotation [rot
order xyz] (for
aim along y) align to surface of
the xform at that point
"""
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 entries in the "
"list you gave me")
# get the rotations to align to normal at this point
loc = cmds.spaceLocator()
CPOMesh = closest_pt_on_mesh_position(point, mesh)
cmds.xform(loc, ws=True, t=CPOMesh)
aimVec = (0, 1, 0)
upVec = (0, 1, 0)
nc = cmds.normalConstraint(mesh, loc, aim=aimVec, upVector=upVec)
rot = cmds.xform(loc, ws=True, q=True, ro=True)
cmds.delete(nc, loc)
return (rot)
评论列表
文章目录