maya腿的蒙皮旋转枢轴_python Maya烘焙枢轴

这是一个用Python编写的Maya烘焙枢轴工具。该脚本检查是否有对象被选中、当前是否处于移动/旋转/缩放工具,并获取自定义方向。然后,根据用户的选择,它可以设置对象的旋转到自定义方向,或者将对象的枢轴点重置到初始位置,同时保持子层级的位置不变。
摘要由CSDN通过智能技术生成

以下是“烘焙枢轴工具”(bake Pivot tool)的python版本:

它是在一个基本的领域工作,但我可能会犯一些错误

在脚本的末尾,有用于查找包含代码的mel文件的命令。在import maya.cmds as cmds

import maya.mel as mel

def bakeCustomToolPivot(pos=1, ori=1):

# Check 1) must have an object(s) selected

objects = cmds.ls(sl=1, transforms=1)

shapes = cmds.ls(sl=1, shapes=1)

if len(shapes) > 0:

transforms = cmds.listRelatives(path=1, parent=1, type='transform')

objects += transforms

if len(objects) == 0:

cmds.error("m_bakeCustomToolPivot.kNoObjectsSelectedError")

return None

# Check 2) must be in the move/rotate/scale tool

currentCtx = cmds.currentCtx()

contextList = ["moveSuperContext", "manipMoveContext", "RotateSuperContext",

"manipRotateContext", "scaleSuperContext", "manipScaleContext"]

if currentCtx not in contextList:

cmds.error("m_bakeCustomToolPivot.kWrongToolError")

return None

# Check 3) must be in custom orientation mode

customOri = []

pivotModeActive = 0

customModeActive = 0

if currentCtx == "moveSuperContext" or currentCtx == "manipMoveContext":

customOri = cmds.manipMoveContext('Move', q=1, orientAxes=1)

pivotModeActive = cmds.manipMoveContext('Move', q=1, editPivotMode=1)

customModeActive = cmds.manipMoveContext('Move', q=1, mode=1) / 6

elif currentCtx == "RotateSuperContext" or currentCtx == "manipRotateContext":

customOri = cmds.manipRotateContext('Rotate', q=1, orientAxes=1)

pivotModeActive = cmds.manipRotateContext('Rotate', q=1, editPivotMode=1)

customModeActive = cmds.manipRotateContext('Rotate', q=1, mode=1) / 3

elif currentCtx == "scaleSuperContext" or currentCtx == "manipScaleContext":

customOri = cmds.manipScaleContext('Scale', q=1, orientAxes=1)

pivotModeActive = cmds.manipScaleContext('Scale', q=1, editPivotMode=1)

customModeActive = cmds.manipScaleContext('Scale', q=1, mode=1) / 6

if ori and not pos and not customModeActive:

cmds.error("m_bakeCustomToolPivot.kWrongAxisOriModeError")

return None

# Get custom orientation

if ori and customModeActive:

customOri[0] = mel.eval('rad_to_deg({})'.format(customOri[0]))

customOri[1] = mel.eval('rad_to_deg({})'.format(customOri[1]))

customOri[2] = mel.eval('rad_to_deg({})'.format(customOri[2]))

# Set object(s) rotation to the custom one (preserving child transform positions and geometry positions)

cmds.rotate(customOri[0], customOri[1], customOri[2], objects, a=1, pcp=1, pgp=1, ws=1, fo=1)

if pos:

for object in objects:

# Get pivot in parent space

# object = 'pSphere4'

old = [0, 0, 0]

m = cmds.xform(object, q=1, m=1)

p = cmds.xform(object, q=1, os=1, sp=1)

old[0] = (p[0] * m[0] + p[1] * m[4] + p[2] * m[8] + m[12])

old[1] = (p[0] * m[1] + p[1] * m[5] + p[2] * m[9] + m[13])

old[2] = (p[0] * m[2] + p[1] * m[6] + p[2] * m[10] + m[14])

# Zero out pivots

cmds.xform(objects, zeroTransformPivots=1)

# Translate object(s) back to previous pivot (preserving child transform positions and geometry positions)

new = cmds.getAttr(object + ".translate")[0]

cmds.move((old[0] - new[0]), (old[1] - new[1]), (old[2] - new[2]), object, pcp=1, pgp=1, ls=1, r=1)

# Exit pivot mode

if pivotModeActive:

mel.eval('ctxEditMode;')

# Set the axis orientation mode back to object

if ori and customModeActive:

if currentCtx == "moveSuperContext" or currentCtx == "manipMoveContext":

cmds.manipMoveContext('Move', e=1, mode=0)

elif currentCtx == "RotateSuperContext" or currentCtx == "manipRotateContext":

cmds.manipRotateContext('Rotate', e=True, mode=0)

elif currentCtx == "scaleSuperContext" or currentCtx == "manipScaleContext":

cmds.manipScaleContext('Scale', e=1, mode=0)

print(mel.eval('whatIs bakeCustomToolPivot;'))

print(mel.eval('whatIs performBakeCustomToolPivot;'))

bakeCustomToolPivot()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值