maya绑定,批量约束骨骼链 您所在的位置:网站首页 maya台灯骨骼绑定 maya绑定,批量约束骨骼链

maya绑定,批量约束骨骼链

2024-06-29 15:50| 来源: 网络整理| 查看: 265

选中根骨骼,在mayapython栏,执行下面代码:

# -*- coding: utf-8 -*-

"""

#根据骨骼链创建控制器,

#并对骨骼进行约束。

"""

import maya.cmds as cmds

import maya.mel as mel

def Create_Control(bone='Best'):

#根据骨骼的名称和轴向,创建控制器和控制器的组

grp = cmds.group(name =bone+'_CTRL_GRP',em=True)

control = cmds.circle(n=bone+'_CTRL',)[0]

print(control)

cmds.parent(control,grp)

cmds.matchTransform(grp,bone)

cmds.setAttr(control+'.ry',-90)

cmds.setAttr(control+'.sx',5)

cmds.setAttr(control+'.sy',5)

cmds.setAttr(control+'.sz',5)

cmds.select(cl=True)

cmds.select(control)

mel.eval('DeleteHistory;')

mel.eval('FreezeTransformations;')

cmds.parentConstraint(control,bone,mo=True)

return(control)

#对选中的物体进行进行类型判断,筛选出骨骼

all_objects = cmds.ls(sl=True)

parent_joints = []

if all_objects:

for obj in all_objects:

if cmds.nodeType(obj)=='joint':

parent_joints.append(obj)

else:

cmds.warning('the %s is not joint!'%obj)

#对筛选出的骨骼进行进一步筛选,分类出有骨骼链的和单骨骼的。

single_joints = []

chain_joints = []

if parent_joints:

for joint in parent_joints:

jointA= cmds.listRelatives(joint,c=True,typ='joint',ad=True)

if jointA:

jointA.append(joint)

jointA.reverse()

print(jointA)

chain_joints.append(jointA)

else:

single_joints.append(joint)

#根据骨骼轴向和名称创建控制器,并父子约束

print(single_joints)

print(chain_joints)

print(len(chain_joints[0]))

if single_joints:

for sj in single_joints:

Create_Control(bone=sj)

if chain_joints:

for i in range(0,len(chain_joints)):

ctrl1 = Create_Control(chain_joints[i][0])

for j in range(0,len(chain_joints[i])-1):

ctrl2  = Create_Control(chain_joints[i][j+1])

print(ctrl2)

print(ctrl1)

cmds.parent(ctrl2+'_GRP',ctrl1)

ctrl1=ctrl2

#=========================================

即可自动根据骨骼链的轴向和层级关系,创建出控制器,并完成父子约束。

注意:

1,如果是maya2022以上版本,需要把第一行的:# -*- coding: utf-8 -*-,删掉。

2,请确保骨骼无重名!!!!!

3,代码会在骨骼名称的基础上添加_CTRL后缀,作为控制器的名称。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有