978 lines
48 KiB
Python
978 lines
48 KiB
Python
#GAME ENGINE AUTO RIG
|
|
|
|
import maya.cmds as cmds
|
|
import maya.mel as mel
|
|
from functools import partial
|
|
import os
|
|
|
|
|
|
class JointMover_Build():
|
|
|
|
def __init__(self):
|
|
|
|
|
|
#get access to our maya tools
|
|
toolsPath = cmds.internalVar(usd = True) + "mayaTools.txt"
|
|
|
|
if os.path.exists(toolsPath):
|
|
|
|
f = open(toolsPath, 'r')
|
|
self.mayaToolsDir = f.readline()
|
|
f.close()
|
|
|
|
|
|
#import in the base joint mover file
|
|
cmds.file(self.mayaToolsDir + "/General/ART/JointMover.mb", i = True)
|
|
|
|
#build spine controls
|
|
self.buildJointMover_Spine()
|
|
self.buildJointMover_Neck()
|
|
|
|
#parent head mover to neck
|
|
neckBones = cmds.getAttr("Skeleton_Settings.numNeckBones")
|
|
cmds.parent("head_mover_grp", ("neck_0" + str(int(neckBones)) + "_mover"))
|
|
|
|
#parent clavicles to spine bone
|
|
spineBones = cmds.getAttr("Skeleton_Settings.numSpineBones")
|
|
|
|
|
|
if spineBones == 10:
|
|
cmds.parent("clavicle_mover_l_grp", ("spine_" + str(int(spineBones)) + "_mover"))
|
|
cmds.parent("clavicle_mover_r_grp", ("spine_" + str(int(spineBones)) + "_mover"))
|
|
|
|
else:
|
|
cmds.parent("clavicle_mover_l_grp", ("spine_0" + str(int(spineBones)) + "_mover"))
|
|
cmds.parent("clavicle_mover_r_grp", ("spine_0" + str(int(spineBones)) + "_mover"))
|
|
|
|
|
|
|
|
#build the hands/fingers
|
|
self.buildJointMover_Hands("Left")
|
|
self.buildJointMover_Hands("Right")
|
|
|
|
|
|
#check for leg style
|
|
legStyle = cmds.getAttr("Skeleton_Settings.legStyle")
|
|
|
|
#hind legs
|
|
if legStyle == 1:
|
|
|
|
#delete existing legs
|
|
cmds.delete("thigh_mover_l_grp")
|
|
cmds.delete("thigh_mover_r_grp")
|
|
|
|
#bring in hind legs
|
|
cmds.file(self.mayaToolsDir + "/General/ART/JointMover_hindLeg.mb", i = True)
|
|
cmds.parent("thigh_mover_l_grp", "pelvis_mover")
|
|
cmds.parent("thigh_mover_r_grp", "pelvis_mover")
|
|
|
|
#assign material and delete imported material
|
|
connections = cmds.listConnections("JointMover_hindLeg_proxy_geo_body_m")
|
|
for connection in connections:
|
|
if cmds.nodeType(connection) == "shadingEngine":
|
|
subConnections = cmds.listConnections(connection)
|
|
geo = []
|
|
for conn in subConnections:
|
|
if cmds.nodeType(conn) == "transform":
|
|
geo.append(conn)
|
|
|
|
for geo in geo:
|
|
cmds.select(geo)
|
|
cmds.select("proxy_geo_body_m", add= True)
|
|
cmds.hyperShade(assign = "proxy_geo_body_m")
|
|
|
|
cmds.delete("JointMover_hindLeg_proxy_geo_body_m")
|
|
|
|
|
|
#build feet
|
|
self.buildJointMover_Feet("Left")
|
|
self.buildJointMover_Feet("Right")
|
|
|
|
#build twist joints
|
|
if cmds.getAttr("Skeleton_Settings.leftUpperArmTwist") > 0:
|
|
self.buildTwistJoints("upperarm_twist_0", "leftUpperArmTwist", "l", "upperarm_mover_l", "lowerarm_mover_l_grp", "down")
|
|
|
|
if cmds.getAttr("Skeleton_Settings.rightUpperArmTwist") > 0:
|
|
self.buildTwistJoints("upperarm_twist_0", "rightUpperArmTwist", "r", "upperarm_mover_r", "lowerarm_mover_r_grp", "down")
|
|
|
|
if cmds.getAttr("Skeleton_Settings.leftLowerArmTwist") > 0:
|
|
self.buildTwistJoints("lowerarm_twist_0", "leftLowerArmTwist", "l", "lowerarm_mover_l", "hand_mover_l_grp", "up")
|
|
|
|
if cmds.getAttr("Skeleton_Settings.rightLowerArmTwist") > 0:
|
|
self.buildTwistJoints("lowerarm_twist_0", "rightLowerArmTwist", "r", "lowerarm_mover_r", "hand_mover_r_grp", "up")
|
|
|
|
if cmds.getAttr("Skeleton_Settings.leftUpperLegTwist") > 0:
|
|
self.buildTwistJoints("thigh_twist_0", "leftUpperLegTwist", "l", "thigh_mover_l", "calf_mover_l_grp", "down")
|
|
|
|
if cmds.getAttr("Skeleton_Settings.rightUpperLegTwist") > 0:
|
|
self.buildTwistJoints("thigh_twist_0", "rightUpperLegTwist", "r", "thigh_mover_r", "calf_mover_r_grp", "down")
|
|
|
|
if cmds.getAttr("Skeleton_Settings.leftLowerLegTwist") > 0:
|
|
self.buildTwistJoints("calf_twist_0", "leftLowerLegTwist", "l", "calf_mover_l", "foot_mover_l_grp", "up")
|
|
|
|
if cmds.getAttr("Skeleton_Settings.rightLowerLegTwist") > 0:
|
|
self.buildTwistJoints("calf_twist_0", "rightLowerLegTwist", "r", "calf_mover_r", "foot_mover_r_grp", "up")
|
|
|
|
|
|
#build extra joints
|
|
attrs = cmds.listAttr("Skeleton_Settings")
|
|
self.addExtraJoints(attrs)
|
|
|
|
|
|
#lock down all proxy geo
|
|
cmds.select("proxy_geo*")
|
|
selection = cmds.ls(sl = True, geometry = True, transforms = True)
|
|
|
|
for each in selection:
|
|
if each.find("Shape") == -1:
|
|
cmds.setAttr(each + ".tx", keyable = False, lock = True)
|
|
cmds.setAttr(each + ".ty", keyable = False, lock = True)
|
|
cmds.setAttr(each + ".tz", keyable = False, lock = True)
|
|
cmds.setAttr(each + ".rx", keyable = False, lock = True)
|
|
cmds.setAttr(each + ".ry", keyable = False, lock = True)
|
|
cmds.setAttr(each + ".rz", keyable = False, lock = True)
|
|
cmds.setAttr(each + ".sx", keyable = False, lock = True)
|
|
cmds.setAttr(each + ".sy", keyable = False, lock = True)
|
|
cmds.setAttr(each + ".sz", keyable = False, lock = True)
|
|
|
|
cmds.setAttr(each + ".overrideEnabled", 1)
|
|
cmds.setAttr(each + ".overrideDisplayType", 2)
|
|
|
|
|
|
#find all nodes in the joint mover and lock those nodes
|
|
cmds.select("root_mover_grp", r = True, hi = True)
|
|
cmds.select("Skeleton_Settings", add = True)
|
|
nodes = cmds.ls(sl = True, transforms = True)
|
|
|
|
|
|
for node in nodes:
|
|
cmds.lockNode(node, lock = True)
|
|
|
|
|
|
|
|
|
|
def buildSpineControls(self, pivotJoint, name):
|
|
|
|
#create lattice
|
|
lattice = cmds.lattice(divisions = (2,2,2), objectCentered = True, ldv = (2,2,2))[1]
|
|
|
|
#find lattice point positions in world space
|
|
|
|
frontTopRight = cmds.xform((lattice + ".pt[0][0][1]"), q = True, ws = True, t = True)
|
|
backTopRight = cmds.xform((lattice + ".pt[0][1][1]"), q = True, ws = True, t = True)
|
|
frontTopLeft = cmds.xform((lattice + ".pt[1][0][1]"), q = True, ws = True, t = True)
|
|
backTopLeft = cmds.xform((lattice + ".pt[1][1][1]"), q = True, ws = True, t = True)
|
|
frontBottomRight = cmds.xform((lattice + ".pt[0][0][0]"), q = True, ws = True, t = True)
|
|
backBottomRight = cmds.xform((lattice + ".pt[0][1][0]"), q = True, ws = True, t = True)
|
|
frontBottomLeft = cmds.xform((lattice + ".pt[1][0][0]"), q = True, ws = True, t = True)
|
|
backBottomLeft = cmds.xform((lattice + ".pt[1][1][0]"), q = True, ws = True, t = True)
|
|
|
|
#create a curve (cube) using the positions of the lattice points
|
|
globalMoverControl = cmds.curve(name = (name + "_mover"), d = 1, p=[(frontBottomRight), (frontTopRight), (frontTopLeft), (frontBottomLeft), (frontBottomRight), (frontTopRight), (backTopRight), (backBottomRight), (backBottomLeft), (frontBottomLeft), (frontTopLeft), (backTopLeft), (backBottomLeft), (backBottomRight), (backTopRight), (backTopLeft)])
|
|
|
|
#make correct pivot for global control
|
|
pivot = cmds.xform(pivotJoint, q = True, ws = True, t = True)
|
|
cmds.xform(globalMoverControl, piv = pivot)
|
|
|
|
#create global mover group
|
|
globalMoverGroup = cmds.group(empty = True, name = (name + "_mover_grp"))
|
|
constraint = cmds.parentConstraint(pivotJoint, globalMoverGroup)[0]
|
|
cmds.delete(constraint)
|
|
|
|
cmds.parent(globalMoverControl, globalMoverGroup)
|
|
cmds.setAttr(globalMoverControl + ".overrideEnabled", 1)
|
|
cmds.setAttr(globalMoverControl + ".overrideColor", 17)
|
|
|
|
#duplicate the globalMoverControl and scale it down
|
|
offsetMoverControl = cmds.duplicate(globalMoverControl, name = (name + "_mover_offset"))[0]
|
|
cmds.setAttr(offsetMoverControl + ".scaleX", .85)
|
|
cmds.setAttr(offsetMoverControl + ".scaleY", .85)
|
|
cmds.setAttr(offsetMoverControl + ".scaleZ", .85)
|
|
|
|
cmds.xform(offsetMoverControl, piv = pivot)
|
|
|
|
cmds.parent(offsetMoverControl, globalMoverControl)
|
|
cmds.setAttr(offsetMoverControl + ".overrideEnabled", 1)
|
|
cmds.setAttr(offsetMoverControl + ".overrideColor", 18)
|
|
|
|
|
|
#freeze transforms
|
|
cmds.makeIdentity(globalMoverControl, apply = True, t = True, r = True, s = True)
|
|
|
|
|
|
#create the geo mover control
|
|
geoMover = cmds.duplicate("geo_mover", name = (name + "_geo_mover"))[0]
|
|
shapeNode = cmds.listRelatives(geoMover, children = True, shapes = True)[0]
|
|
cmds.setAttr(geoMover + "|" + shapeNode + ".visibility", 0)
|
|
|
|
constraint = cmds.pointConstraint(lattice, geoMover)[0]
|
|
cmds.delete(constraint)
|
|
|
|
cmds.parent(geoMover, offsetMoverControl)
|
|
cmds.makeIdentity(geoMover, apply = True, t = True, r = True, s = True)
|
|
|
|
|
|
#create lra controls
|
|
lraGroup = cmds.group(empty = True, name = (name + "_lra_grp"))
|
|
constraint = cmds.parentConstraint(pivotJoint, lraGroup)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(lraGroup, offsetMoverControl)
|
|
|
|
lraCtrl = cmds.duplicate("lra", name = (name + "_lra"))[0]
|
|
cmds.setAttr(lraCtrl + ".v", 1)
|
|
constraint = cmds.parentConstraint(lraGroup, lraCtrl)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(lraCtrl, lraGroup)
|
|
cmds.makeIdentity(lraCtrl, apply = True, t = True, r = True, s = True)
|
|
|
|
#lock translations and rotations on lra controls
|
|
cmds.setAttr(lraCtrl + ".tx", lock = True, k = False)
|
|
cmds.setAttr(lraCtrl + ".ty", lock = True, k = False)
|
|
cmds.setAttr(lraCtrl + ".tz", lock = True, k = False)
|
|
cmds.setAttr(lraCtrl + ".rx", lock = True, k = False)
|
|
cmds.setAttr(lraCtrl + ".ry", lock = True, k = False)
|
|
cmds.setAttr(lraCtrl + ".rz", lock = True, k = False)
|
|
|
|
|
|
#delete lattice
|
|
cmds.delete(lattice)
|
|
|
|
cmds.container("JointMover", edit = True, addNode = globalMoverGroup, includeNetwork=True,includeHierarchyBelow=True)
|
|
return [globalMoverGroup, globalMoverControl, offsetMoverControl, geoMover]
|
|
|
|
|
|
|
|
|
|
def buildJointMover_Spine(self):
|
|
|
|
#get number of spine bones
|
|
spineBones = cmds.getAttr("Skeleton_Settings.numSpineBones")
|
|
|
|
|
|
if spineBones == 2:
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_spine_01", "proxy_geo_spine_02"], r = True)
|
|
spine1Controls = self.buildSpineControls("spine_01_pivot_joint", "spine_01")
|
|
cmds.parent(["proxy_geo_spine_01", "proxy_geo_spine_02"], spine1Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_03", "proxy_geo_spine_04", "proxy_geo_spine_05"], r = True)
|
|
spine2Controls = self.buildSpineControls("spine_05_pivot_joint", "spine_02")
|
|
cmds.parent(["proxy_geo_spine_03", "proxy_geo_spine_04", "proxy_geo_spine_05"], spine2Controls[3])
|
|
|
|
cmds.parent(spine2Controls[0], spine1Controls[1])
|
|
cmds.parent(spine1Controls[0], "pelvis_mover")
|
|
|
|
|
|
if spineBones == 3:
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_spine_01"], r = True)
|
|
spine1Controls = self.buildSpineControls("spine_01_pivot_joint", "spine_01")
|
|
cmds.parent(["proxy_geo_spine_01"], spine1Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_02", "proxy_geo_spine_03"], r = True)
|
|
spine2Controls = self.buildSpineControls("spine_04_pivot_joint", "spine_02")
|
|
cmds.parent(["proxy_geo_spine_02", "proxy_geo_spine_03"], spine2Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_04", "proxy_geo_spine_05"], r = True)
|
|
spine3Controls = self.buildSpineControls("spine_07_pivot_joint", "spine_03")
|
|
cmds.parent(["proxy_geo_spine_04", "proxy_geo_spine_05"], spine3Controls[3])
|
|
|
|
cmds.parent(spine3Controls[0], spine2Controls[1])
|
|
cmds.parent(spine2Controls[0], spine1Controls[1])
|
|
cmds.parent(spine1Controls[0], "pelvis_mover")
|
|
|
|
|
|
|
|
if spineBones == 4:
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_spine_01"], r = True)
|
|
spine1Controls = self.buildSpineControls("spine_01_pivot_joint", "spine_01")
|
|
cmds.parent(["proxy_geo_spine_01"], spine1Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_02"], r = True)
|
|
spine2Controls = self.buildSpineControls("spine_03_pivot_joint", "spine_02")
|
|
cmds.parent(["proxy_geo_spine_02"], spine2Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_03"], r = True)
|
|
spine3Controls = self.buildSpineControls("spine_05_pivot_joint", "spine_03")
|
|
cmds.parent(["proxy_geo_spine_03"], spine3Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_04", "proxy_geo_spine_05"], r = True)
|
|
spine4Controls = self.buildSpineControls("spine_07_pivot_joint", "spine_04")
|
|
cmds.parent(["proxy_geo_spine_04", "proxy_geo_spine_05"], spine4Controls[3])
|
|
|
|
cmds.parent(spine4Controls[0], spine3Controls[1])
|
|
cmds.parent(spine3Controls[0], spine2Controls[1])
|
|
cmds.parent(spine2Controls[0], spine1Controls[1])
|
|
cmds.parent(spine1Controls[0], "pelvis_mover")
|
|
|
|
|
|
|
|
if spineBones == 5:
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_spine_01"], r = True)
|
|
spine1Controls = self.buildSpineControls("spine_01_pivot_joint", "spine_01")
|
|
cmds.parent(["proxy_geo_spine_01"], spine1Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_02"], r = True)
|
|
spine2Controls = self.buildSpineControls("spine_03_pivot_joint", "spine_02")
|
|
cmds.parent(["proxy_geo_spine_02"], spine2Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_03"], r = True)
|
|
spine3Controls = self.buildSpineControls("spine_05_pivot_joint", "spine_03")
|
|
cmds.parent(["proxy_geo_spine_03"], spine3Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_04"], r = True)
|
|
spine4Controls = self.buildSpineControls("spine_07_pivot_joint", "spine_04")
|
|
cmds.parent(["proxy_geo_spine_04"], spine4Controls[3])
|
|
|
|
cmds.select(["proxy_geo_spine_05"], r = True)
|
|
spine5Controls = self.buildSpineControls("spine_09_pivot_joint", "spine_05")
|
|
cmds.parent(["proxy_geo_spine_05"], spine5Controls[3])
|
|
|
|
cmds.parent(spine5Controls[0], spine4Controls[1])
|
|
cmds.parent(spine4Controls[0], spine3Controls[1])
|
|
cmds.parent(spine3Controls[0], spine2Controls[1])
|
|
cmds.parent(spine2Controls[0], spine1Controls[1])
|
|
cmds.parent(spine1Controls[0], "pelvis_mover")
|
|
|
|
|
|
|
|
|
|
def buildJointMover_Neck(self):
|
|
|
|
#get number of neck bones
|
|
neckBones = cmds.getAttr("Skeleton_Settings.numNeckBones")
|
|
spineBones = cmds.getAttr("Skeleton_Settings.numSpineBones")
|
|
|
|
|
|
if neckBones == 1:
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_neck_01", "proxy_geo_neck_02", "proxy_geo_neck_03"], r = True)
|
|
neck1Controls = self.buildSpineControls("neck_01_pivot_joint", "neck_01")
|
|
cmds.parent(["proxy_geo_neck_01", "proxy_geo_neck_02", "proxy_geo_neck_03"], neck1Controls[3])
|
|
|
|
if spineBones == 10:
|
|
cmds.parent(neck1Controls[0], ("spine_" + str(int(spineBones)) + "_mover"))
|
|
|
|
else:
|
|
cmds.parent(neck1Controls[0], ("spine_0" + str(int(spineBones)) + "_mover"))
|
|
|
|
|
|
|
|
if neckBones == 2:
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_neck_01", "proxy_geo_neck_02"], r = True)
|
|
neck1Controls = self.buildSpineControls("neck_01_pivot_joint", "neck_01")
|
|
cmds.parent(["proxy_geo_neck_01", "proxy_geo_neck_02"], neck1Controls[3])
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_neck_03"], r = True)
|
|
neck2Controls = self.buildSpineControls("neck_03_pivot_joint", "neck_02")
|
|
cmds.parent(["proxy_geo_neck_03"], neck2Controls[3])
|
|
|
|
|
|
cmds.parent(neck2Controls[0], neck1Controls[1])
|
|
|
|
if spineBones == 10:
|
|
cmds.parent(neck1Controls[0], ("spine_" + str(int(spineBones)) + "_mover"))
|
|
|
|
else:
|
|
cmds.parent(neck1Controls[0], ("spine_0" + str(int(spineBones)) + "_mover"))
|
|
|
|
|
|
|
|
if neckBones == 3:
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_neck_01"], r = True)
|
|
neck1Controls = self.buildSpineControls("neck_01_pivot_joint", "neck_01")
|
|
cmds.parent(["proxy_geo_neck_01"], neck1Controls[3])
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_neck_02"], r = True)
|
|
neck2Controls = self.buildSpineControls("neck_02_pivot_joint", "neck_02")
|
|
cmds.parent(["proxy_geo_neck_02"], neck2Controls[3])
|
|
|
|
#select proxy geo and build controls
|
|
cmds.select(["proxy_geo_neck_03"], r = True)
|
|
neck3Controls = self.buildSpineControls("neck_03_pivot_joint", "neck_03")
|
|
cmds.parent(["proxy_geo_neck_03"], neck3Controls[3])
|
|
|
|
|
|
cmds.parent(neck3Controls[0], neck2Controls[1])
|
|
cmds.parent(neck2Controls[0], neck1Controls[1])
|
|
|
|
if spineBones == 10:
|
|
cmds.parent(neck1Controls[0], ("spine_" + str(int(spineBones)) + "_mover"))
|
|
|
|
else:
|
|
cmds.parent(neck1Controls[0], ("spine_0" + str(int(spineBones)) + "_mover"))
|
|
|
|
|
|
def buildJointMover_Hands(self, side):
|
|
|
|
foot = side.lower()
|
|
|
|
#check each attr, if attr is false, parent proxy to next in chain.
|
|
|
|
#BIG TOE
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "thumb3") == False:
|
|
cmds.parent("proxy_geo_thumb_03_" + foot[0], "thumb_02_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives("thumb_03_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr("thumb_03_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr("thumb_03_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr("thumb_03_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr("thumb_03_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "thumb2") == False:
|
|
children = cmds.listRelatives("thumb_02_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "thumb_01_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives("thumb_02_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr("thumb_02_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr("thumb_02_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr("thumb_02_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr("thumb_02_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "thumb1") == False:
|
|
children = cmds.listRelatives("thumb_01_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "hand_geo_mover_" + foot[0])
|
|
|
|
|
|
shape = cmds.listRelatives("thumb_01_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr("thumb_01_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr("thumb_01_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
shape = cmds.listRelatives("thumb_01_mover_offset_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr("thumb_01_mover_offset_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr("thumb_01_mover_offset_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
cmds.parent("thumb_02_mover_" + foot[0] + "_grp", "hand_mover_" + foot[0])
|
|
|
|
#INDEX TOE
|
|
|
|
for toe in ["index", "middle", "ring", "pinky"]:
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + toe + "3") == False:
|
|
cmds.parent("proxy_geo_" + toe + "_03_" + foot[0], toe + "_02_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives(toe + "_03_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_03_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr(toe + "_03_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr(toe + "_03_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_03_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + toe + "2") == False:
|
|
children = cmds.listRelatives(toe + "_02_geo_mover_" + foot[0], children = True, type = "transform")
|
|
|
|
cmds.parent(children, "" + toe + "_01_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives(toe + "_02_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_02_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr(toe + "_02_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr(toe + "_02_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_02_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + toe + "1") == False:
|
|
children = cmds.listRelatives(toe + "_01_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "" + toe + "_metacarpal_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives(toe + "_01_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_01_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr(toe + "_01_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr(toe + "_01_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_01_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + toe + "meta") == False:
|
|
children = cmds.listRelatives("" + toe + "_metacarpal_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "hand_geo_mover_" + foot[0])
|
|
|
|
shape = cmds.listRelatives(toe + "_metacarpal_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_metacarpal_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_metacarpal_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
shape = cmds.listRelatives(toe + "_metacarpal_mover_offset_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_metacarpal_mover_offset_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_metacarpal_mover_offset_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
|
|
cmds.parent(toe + "_01_mover_" + foot[0] + "_grp", "hand_mover_" + foot[0])
|
|
|
|
|
|
|
|
|
|
def buildJointMover_Feet(self, side):
|
|
|
|
foot = side.lower()
|
|
|
|
#check each attr, if attr is false, parent proxy to next in chain.
|
|
|
|
#BIG TOE
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "Footbigtoe2") == False:
|
|
children = cmds.listRelatives("bigtoe_distal_phalange_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "bigtoe_proximal_phalange_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives("bigtoe_distal_phalange_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr("bigtoe_distal_phalange_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr("bigtoe_distal_phalange_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr("bigtoe_distal_phalange_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr("bigtoe_distal_phalange_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "Footbigtoe1") == False:
|
|
children = cmds.listRelatives("bigtoe_proximal_phalange_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "bigtoe_metatarsal_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives("bigtoe_proximal_phalange_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr("bigtoe_proximal_phalange_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr("bigtoe_proximal_phalange_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr("bigtoe_proximal_phalange_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr("bigtoe_proximal_phalange_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "Footbigtoemeta") == False:
|
|
children = cmds.listRelatives("bigtoe_metatarsal_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "ball_geo_mover_" + foot[0])
|
|
|
|
|
|
shape = cmds.listRelatives("bigtoe_metatarsal_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr("bigtoe_metatarsal_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr("bigtoe_metatarsal_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
shape = cmds.listRelatives("bigtoe_metatarsal_mover_offset_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr("bigtoe_metatarsal_mover_offset_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr("bigtoe_metatarsal_mover_offset_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
cmds.parent("bigtoe_proximal_phalange_mover_" + foot[0] + "_grp", "ball_mover_" + foot[0])
|
|
|
|
#INDEX TOE
|
|
|
|
for toe in ["index", "middle", "ring", "pinky"]:
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "Foot" + toe + "3") == False:
|
|
children = cmds.listRelatives("" + toe + "_distal_phalange_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "" + toe + "_middle_phalange_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives(toe + "_distal_phalange_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_distal_phalange_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr(toe + "_distal_phalange_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr(toe + "_distal_phalange_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_distal_phalange_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "Foot" + toe + "2") == False:
|
|
children = cmds.listRelatives("" + toe + "_middle_phalange_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "" + toe + "_proximal_phalange_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives(toe + "_middle_phalange_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_middle_phalange_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr(toe + "_middle_phalange_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr(toe + "_middle_phalange_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_middle_phalange_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "Foot" + toe + "1") == False:
|
|
children = cmds.listRelatives("" + toe + "_proximal_phalange_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "" + toe + "_metatarsal_geo_mover_" + foot[0])
|
|
shape = cmds.listRelatives(toe + "_proximal_phalange_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_proximal_phalange_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr(toe + "_proximal_phalange_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr(toe + "_proximal_phalange_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_proximal_phalange_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "Foot" + toe + "meta") == False:
|
|
children = cmds.listRelatives("" + toe + "_metatarsal_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "ball_geo_mover_" + foot[0])
|
|
|
|
shape = cmds.listRelatives(toe + "_metatarsal_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_metatarsal_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_metatarsal_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
shape = cmds.listRelatives(toe + "_metatarsal_mover_offset_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr(toe + "_metatarsal_mover_offset_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr(toe + "_metatarsal_mover_offset_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
|
|
cmds.parent(toe + "_proximal_phalange_mover_" + foot[0] + "_grp", "ball_mover_" + foot[0])
|
|
|
|
if cmds.getAttr("Skeleton_Settings." + foot + "ball") == False:
|
|
children = cmds.listRelatives("ball_geo_mover_" + foot[0], children = True, type = "transform")
|
|
cmds.parent(children, "foot_geo_mover_" + foot[0])
|
|
cmds.parent(toe + "_proximal_phalange_mover_" + foot[0] + "_grp", "foot_mover_" + foot[0])
|
|
shape = cmds.listRelatives("ball_mover_" + foot[0], shapes = True)[0]
|
|
cmds.setAttr("ball_mover_" + foot[0] + ".v", 0)
|
|
cmds.setAttr("ball_mover_" + foot[0] + ".v", lock = True, keyable = False)
|
|
cmds.setAttr("ball_mover_" + foot[0] + "|" + shape + ".v", 0)
|
|
cmds.setAttr("ball_mover_" + foot[0] + "|" + shape + ".v", lock = True, keyable = False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def addExtraJoints(self, attrs):
|
|
skippedAttrs = []
|
|
|
|
#right side joints needs to have -180 on rotate X to be mirrored
|
|
#print attrs
|
|
|
|
for attr in attrs:
|
|
if attr.find("extraJoint") == 0:
|
|
attribute = cmds.getAttr("Skeleton_Settings." + attr, asString = True)
|
|
parent = attribute.partition("/")[0]
|
|
jointType = attribute.partition("/")[2].partition("/")[0]
|
|
name = attribute.rpartition("/")[2]
|
|
|
|
|
|
if parent.find("_") != -1:
|
|
|
|
if parent.rpartition("_")[2] == "l":
|
|
parent = parent.rpartition("_l")[0]
|
|
parent = parent + "_mover_l"
|
|
|
|
if cmds.objExists(parent) == False:
|
|
parent = parent.partition("_mover_l")[0] + "_l_mover"
|
|
|
|
if parent.rpartition("_")[2] == "r":
|
|
parent = parent.rpartition("_r")[0]
|
|
parent = parent + "_mover_r"
|
|
|
|
if cmds.objExists(parent) == False:
|
|
parent = parent.partition("_mover_r")[0] + "_r_mover"
|
|
|
|
if parent.rpartition("_")[2] != "l":
|
|
if parent.rpartition("_")[2] != "r":
|
|
if parent.rpartition("_")[2] != "mover":
|
|
parent = parent + "_mover"
|
|
|
|
|
|
if parent.find("_") == -1:
|
|
parent = parent + "_mover"
|
|
|
|
#check to see if the parent is a leaf joint and modify parent name if so
|
|
if parent.find("(") != -1:
|
|
parent = parent.partition(" (")[0] + "_mover"
|
|
|
|
|
|
if cmds.objExists(parent):
|
|
|
|
if jointType != "chain":
|
|
#for leaf joints, find the suffix TR, T, or R
|
|
if name.find("(") != -1:
|
|
name = name.partition(" (")[0]
|
|
|
|
group = cmds.group(empty = True, name = (name + "_mover_grp"))
|
|
constraint = cmds.pointConstraint((parent), group)[0]
|
|
cmds.delete(constraint)
|
|
|
|
if name.rpartition("_")[2] == "r":
|
|
cmds.setAttr(group + ".rx", -180)
|
|
|
|
if name.find("r_") == 0:
|
|
cmds.setAttr(group + ".rx", -180)
|
|
|
|
if name.find("_r_") != -1:
|
|
cmds.setAttr(group + ".rx", -180)
|
|
|
|
#force update
|
|
cmds.select(group)
|
|
cmds.setToolTo( 'moveSuperContext' )
|
|
cmds.refresh(force = True)
|
|
cmds.select(clear = True)
|
|
|
|
cmds.parent(group, parent)
|
|
|
|
|
|
|
|
#position the global mover (need to dupe template)
|
|
duplicate = cmds.duplicate("extra_joints_template", name = (name + "_mover"))[0]
|
|
cmds.setAttr(duplicate + ".visibility", True)
|
|
constraint = cmds.parentConstraint(group, duplicate)
|
|
cmds.delete(constraint)
|
|
cmds.parent(duplicate, group)
|
|
cmds.makeIdentity(duplicate, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
#create the offset control
|
|
offsetCtrl = cmds.duplicate(duplicate, name = (name + "_mover_offset"))[0]
|
|
cmds.setAttr(offsetCtrl + ".scaleX",.85)
|
|
cmds.setAttr(offsetCtrl + ".scaleY",.85)
|
|
cmds.setAttr(offsetCtrl + ".scaleZ",.85)
|
|
|
|
cmds.parent(offsetCtrl, duplicate)
|
|
cmds.makeIdentity(offsetCtrl, t = 1, r = 1, s = 1, apply = True)
|
|
cmds.setAttr(offsetCtrl + ".overrideColor", 18)
|
|
|
|
#create the geo mover
|
|
geoMover = cmds.duplicate("geo_mover", name = (name + "_geo_mover"))[0]
|
|
constraint = cmds.parentConstraint(offsetCtrl, geoMover)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(geoMover, offsetCtrl)
|
|
shape = cmds.listRelatives(geoMover, shapes = True)[0]
|
|
cmds.setAttr(geoMover + "|" + shape + ".v", 0)
|
|
cmds.makeIdentity(geoMover, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
#create the proxy geo
|
|
proxy = cmds.duplicate("extra_joints_template_geo", name = "proxy_geo_" + name)[0]
|
|
constraint = cmds.parentConstraint(offsetCtrl, proxy)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(proxy, geoMover)
|
|
cmds.setAttr(proxy + ".visibility", 1)
|
|
cmds.makeIdentity(proxy, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
|
|
|
|
#create the lra
|
|
lraGroup = cmds.group(empty = True, name = name + "_lra_grp")
|
|
constraint = cmds.parentConstraint(group, lraGroup)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(lraGroup, offsetCtrl)
|
|
|
|
lra = cmds.duplicate("lra", name = name + "_lra")[0]
|
|
cmds.setAttr(lra + ".v", 1)
|
|
|
|
|
|
constraint = cmds.parentConstraint(lraGroup, lra)[0]
|
|
cmds.delete(constraint)
|
|
|
|
cmds.parent(lra, lraGroup)
|
|
cmds.makeIdentity(lra, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
attrs = cmds.listAttr(lra, keyable = True)
|
|
for attr in attrs:
|
|
cmds.setAttr(lra + "." + attr, lock = True)
|
|
|
|
|
|
#otherwise, it's dynamic
|
|
else:
|
|
numJoints = name.partition(" (")[2].partition(")")[0]
|
|
name = name.partition(" (")[0]
|
|
|
|
|
|
space = 20
|
|
|
|
for i in range(int(numJoints)):
|
|
|
|
group = cmds.group(empty = True, name = (name + "_0" + str(i + 1) + "_mover_grp"))
|
|
constraint = cmds.pointConstraint((parent), group)[0]
|
|
cmds.delete(constraint)
|
|
|
|
|
|
#need to mirror world group for right side
|
|
if name.rpartition("_")[2] == "r":
|
|
cmds.setAttr(group + ".rx", -180)
|
|
space = -20
|
|
|
|
if name.find("r_") == 0:
|
|
cmds.setAttr(group + ".rx", -180)
|
|
space = -20
|
|
|
|
if name.find("_r_") != -1:
|
|
cmds.setAttr(group + ".rx", -180)
|
|
space = -20
|
|
|
|
|
|
cmds.parent(group, parent)
|
|
if i != 0:
|
|
cmds.setAttr(group + ".ty", space)
|
|
|
|
|
|
|
|
#position the global mover (need to dupe template)
|
|
duplicate = cmds.duplicate("extra_joints_dynamic", name = (name + "_0" + str(i + 1) + "_mover"))[0]
|
|
cmds.setAttr(duplicate + ".visibility", True)
|
|
|
|
#need to mirror world group for right side
|
|
if name.rpartition("_")[2] == "r":
|
|
cmds.xform(duplicate, relative = True, piv = [0, 20, 0])
|
|
|
|
if name.find("r_") == 0:
|
|
cmds.xform(duplicate, relative = True, piv = [0, 20, 0])
|
|
|
|
if name.find("_r_") != -1:
|
|
cmds.xform(duplicate, relative = True, piv = [0, 20, 0])
|
|
|
|
|
|
|
|
constraint = cmds.parentConstraint(group, duplicate)
|
|
cmds.delete(constraint)
|
|
cmds.parent(duplicate, group)
|
|
cmds.makeIdentity(duplicate, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
|
|
#create the offset control
|
|
offsetCtrl = cmds.duplicate(duplicate, name = (name + "_0" + str(i + 1) + "_mover_offset"))[0]
|
|
cmds.setAttr(offsetCtrl + ".scaleX",.85)
|
|
cmds.setAttr(offsetCtrl + ".scaleY",.85)
|
|
cmds.setAttr(offsetCtrl + ".scaleZ",.85)
|
|
|
|
cmds.parent(offsetCtrl, duplicate)
|
|
cmds.makeIdentity(offsetCtrl, t = 1, r = 1, s = 1, apply = True)
|
|
cmds.setAttr(offsetCtrl + ".overrideColor", 18)
|
|
|
|
|
|
#create the geo mover
|
|
geoMover = cmds.duplicate("geo_mover", name = (name + "_0" + str(i + 1) + "_geo_mover"))[0]
|
|
constraint = cmds.parentConstraint(offsetCtrl, geoMover)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(geoMover, offsetCtrl)
|
|
shape = cmds.listRelatives(geoMover, shapes = True)[0]
|
|
cmds.setAttr(geoMover + "|" + shape + ".v", 0)
|
|
cmds.makeIdentity(geoMover, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
|
|
|
|
#create the proxy geo
|
|
proxy = cmds.duplicate("extra_joints_dynamic_geo", name = "proxy_geo_" + name + "_0" + str(i + 1))[0]
|
|
constraint = cmds.pointConstraint(offsetCtrl, proxy)[0]
|
|
cmds.delete(constraint)
|
|
|
|
cmds.parent(proxy, geoMover)
|
|
cmds.setAttr(proxy + ".visibility", 1)
|
|
cmds.makeIdentity(proxy, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
|
|
#create the lra
|
|
lraGroup = cmds.group(empty = True, name = name + "_0" + str(i + 1) + "_lra_grp")
|
|
constraint = cmds.parentConstraint(group, lraGroup)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(lraGroup, offsetCtrl)
|
|
|
|
lra = cmds.duplicate("lra", name = name + "_0" + str(i + 1) + "_lra")[0]
|
|
cmds.setAttr(lra + ".v", 1)
|
|
|
|
constraint = cmds.parentConstraint(lraGroup, lra)[0]
|
|
cmds.delete(constraint)
|
|
|
|
cmds.parent(lra, lraGroup)
|
|
cmds.makeIdentity(lra, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
attrs = cmds.listAttr(lra, keyable = True)
|
|
for attr in attrs:
|
|
cmds.setAttr(lra + "." + attr, lock = True)
|
|
|
|
|
|
parent = duplicate
|
|
|
|
|
|
else:
|
|
skippedAttrs.append(attr)
|
|
|
|
if skippedAttrs:
|
|
self.addExtraJoints(skippedAttrs)
|
|
|
|
|
|
|
|
def buildTwistJoints(self, moverName, attr, side, parent, child, direction):
|
|
|
|
#get length of bone
|
|
dist = (abs(cmds.getAttr(child + ".tx"))) / (cmds.getAttr("Skeleton_Settings." + attr))
|
|
|
|
#Twist Attr
|
|
if cmds.getAttr("Skeleton_Settings." + attr) > 0:
|
|
|
|
for i in range(int(cmds.getAttr("Skeleton_Settings." + attr))):
|
|
name = moverName + str(i + 1)
|
|
group = cmds.group(empty = True, name = (name + "_mover_" + side + "_grp"))
|
|
lraTarget = parent.partition("_mover")[0] + "_" + side + "_lra"
|
|
constraint = cmds.parentConstraint(lraTarget, group)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(group, parent)
|
|
|
|
|
|
#position group
|
|
tx = cmds.getAttr(child + ".tx")
|
|
if i == 0:
|
|
if direction == "down":
|
|
if tx > 0:
|
|
tx = 1
|
|
else:
|
|
tx = -1
|
|
cmds.setAttr(group + ".tx", tx)
|
|
|
|
if direction == "up":
|
|
cmds.setAttr(group + ".tx", cmds.getAttr(child + ".tx"))
|
|
|
|
|
|
else:
|
|
if direction == "down":
|
|
if cmds.getAttr(child + ".tx") > 0:
|
|
tx = dist * i
|
|
else:
|
|
tx = (dist * -1) * i
|
|
|
|
cmds.setAttr(group + ".tx", tx)
|
|
|
|
if direction == "up":
|
|
if cmds.getAttr(child + ".tx") > 0:
|
|
tx = dist * i
|
|
tx = cmds.getAttr(child + ".tx") - tx
|
|
|
|
else:
|
|
tx = dist * i
|
|
tx = cmds.getAttr(child + ".tx") + tx
|
|
|
|
cmds.setAttr(group + ".tx", tx)
|
|
|
|
|
|
|
|
|
|
#position the global mover (need to dupe template)
|
|
duplicate = cmds.duplicate("extra_joints_template", name = (name + "_mover_" + side))[0]
|
|
cmds.setAttr(duplicate + ".visibility", True)
|
|
constraint = cmds.parentConstraint(group, duplicate)
|
|
cmds.delete(constraint)
|
|
cmds.parent(duplicate, group)
|
|
cmds.makeIdentity(duplicate, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
|
|
#create the offset control
|
|
offsetCtrl = cmds.duplicate(duplicate, name = (name + "_mover_offset_" + side))[0]
|
|
cmds.setAttr(offsetCtrl + ".scaleX",.85)
|
|
cmds.setAttr(offsetCtrl + ".scaleY",.85)
|
|
cmds.setAttr(offsetCtrl + ".scaleZ",.85)
|
|
|
|
cmds.parent(offsetCtrl, duplicate)
|
|
cmds.makeIdentity(offsetCtrl, t = 1, r = 1, s = 1, apply = True)
|
|
cmds.setAttr(offsetCtrl + ".overrideColor", 18)
|
|
|
|
#create the geo mover
|
|
geoMover = cmds.duplicate("geo_mover", name = (name + "_geo_mover_" + side))[0]
|
|
constraint = cmds.parentConstraint(offsetCtrl, geoMover)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(geoMover, offsetCtrl)
|
|
shape = cmds.listRelatives(geoMover, shapes = True)[0]
|
|
cmds.setAttr(geoMover + "|" + shape + ".v", 0)
|
|
cmds.makeIdentity(geoMover, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
#create the proxy geo
|
|
proxy = cmds.duplicate("extra_joints_template_geo", name = "proxy_geo_" + name + "_" + side)[0]
|
|
constraint = cmds.parentConstraint(offsetCtrl, proxy)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(proxy, geoMover)
|
|
cmds.setAttr(proxy + ".visibility", 1)
|
|
cmds.makeIdentity(proxy, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
|
|
#create the lra
|
|
lraGroup = cmds.group(empty = True, name = name + "_" + side + "_lra_grp")
|
|
constraint = cmds.parentConstraint(group, lraGroup)[0]
|
|
cmds.delete(constraint)
|
|
cmds.parent(lraGroup, offsetCtrl)
|
|
|
|
lra = cmds.duplicate("lra", name = name + "_" + side + "_lra")[0]
|
|
cmds.setAttr(lra + ".v", 1)
|
|
|
|
|
|
constraint = cmds.parentConstraint(lraGroup, lra)[0]
|
|
cmds.delete(constraint)
|
|
|
|
cmds.parent(lra, lraGroup)
|
|
cmds.makeIdentity(lra, t = 1, r = 1, s = 1, apply = True)
|
|
|
|
attrs = cmds.listAttr(lra, keyable = True)
|
|
for attr in attrs:
|
|
cmds.setAttr(lra + "." + attr, lock = True)
|
|
|
|
|