Скрипт избавляет от рутиной работы по созданию контролов , для различных мелочей и окружения.
maya python script
Выделяем 2 противоположных ребра , и запускаем скрипт:
import maya.cmds as cm inc ="" edS = cm.ls(sl=1) cm.select(edS[0]) cm.SelectEdgeLoopSp() cl1 = cm.cluster() #filterEdgetoObj i = edS[0].find('.') nameObj =edS[0][:i] cm.select(edS[1]) cm.SelectEdgeLoopSp() cl2 = cm.cluster() cl1_vec = cm.xform(cl1,q=1,rp=1,os=1) cl2_vec = cm.xform(cl2,q=1,rp=1,os=1) jnt1 = cm.joint(p=cl1_vec) jnt2 = cm.joint(p=cl2_vec) cm.joint(jnt1,e=1,oj='xyz',secondaryAxisOrient='yup',ch=1,zso=1) cm.circle(n=(nameObj+inc+'_ctrl'),nr=[90,0,0],r=2.5) cm.DeleteHistory() tr_ctrl = cm.ls(sl=1) trGRP = cm.group(n=(nameObj+inc+'_ctrl_SN')) mainGRP = cm.group(n=(nameObj+inc+'_ctrl_PH')) cm.xform(mainGRP,t=cl1_vec,ws=1) jntOrient = cm.xform(jnt1,q=1,ro=1,ws=1) cm.xform(mainGRP,ro=jntOrient,ws=1) cm.select(jnt1) cm.select(jnt2,add=1) cm.select(mainGRP,add=1) PointConstr = cm.pointConstraint() cm.delete(PointConstr,jnt1,cl1,cl2) cm.select(nameObj) geoGrp = cm.group(n=(nameObj+'_grp')) cm.select(tr_ctrl) cm.select(geoGrp,add=1) cm.parentConstraint(mo=1) cm.scaleConstraint(mo=1) cm.setAttr((tr_ctrl[0]+".overrideEnabled"), 1) cm.setAttr((tr_ctrl[0]+".overrideColor"), 23)