Hi everyone, I have created a 'bounding box' as a master controller that controls the rotation and translation of multiple controllers. Currently I have been able to create the said master, by taking into account of the bounding box of the child controllers.
However I am having 2 issues. 1. Getting the master controller to move along together with the child controllers. Initially I tried to rectify it by getting the averaging position/ rotation of the children controllers, keyed it into the master controller followed by parenting in the child controllers thereafter. While it seems right on the first frame, as soon as I go to the next frame, the children controllers went out of control. I have attached a scene file for better clarity. This is the script that I am using to create the master controller: cmds.select('ctrl_A', add=True) cmds.select('ctrl_B', add=True) selections = cmds.ls(sl=True) master_helper = cmds.curve( name="masterParent", degree = 1, point = [(-0.5, 0.5, 0.5), (0.5, 0.5, 0.5), (0.5, 0.5, -0.5), (-0.5, 0.5, -0.5), (-0.5, 0.5, 0.5), (-0.5, -0.5, 0.5), (-0.5, -0.5, -0.5), (0.5, -0.5, -0.5), (0.5, -0.5, 0.5), (-0.5, -0.5, 0.5), (0.5, -0.5, 0.5), (0.5, 0.5, 0.5), (0.5, 0.5, -0.5), (0.5, -0.5, -0.5), (-0.5, -0.5, -0.5), (-0.5, 0.5, -0.5)] ) boundingBox = cmds.exactWorldBoundingBox(selections) scaleX = abs(boundingBox[0] - boundingBox[3]) scaleY = abs(boundingBox[1] - boundingBox[4]) scaleZ = abs(boundingBox[2] - boundingBox[5]) cmds.xform(master_helper, scale=[scaleX, scaleY, scaleZ]) count = len(selections) sums = [0,0,0] for item in selections: pos = cmds.xform(item, q=True, rp=True, ws=True) sums[0] += pos[0] sums[1] += pos[1] sums[2] += pos[2] center = [sums[0]/count, sums[1]/count, sums[2]/count] cmds.move(center[0], center[1], center[2], master_helper) cmds.makeIdentity(master_helper, apply=True, translate=True, rotate=True, scale=True) cmds.parent('ctrl_A', master_helper) cmds.parent('ctrl_B', master_helper) And this is the averaging that I was trying to use but failing badly: # This code portion is inserted before the parenting trans_sum = [0,0,0] rots_sum = [0,0,0] for i in selections: trans = cmds.xform(i, query=True, translation=True) rots = cmds.xform(i, query=True, rotation=True) trans_sum[0] += trans[0] trans_sum[1] += trans[1] trans_sum[2] += trans[2] rots_sum[0] += rots[0] rots_sum[1] += rots[2] rots_sum[2] += rots[2] trans_avg = [trans_sum[0]/count, trans_sum[1]/count, trans_sum[2]/count] rots_avg = [rots_sum[0]/count, rots_sum[1]/count, rots_sum[2]/count] cmds.xform(master_helper, ws=True, translation=trans_avg, rotation=rots_avg) cmds.move(center[0], center[1], center[2], master_helper) cmds.setKeyframe(master_helper) 2. I am wondering if it will also be possible to modify the master controller shape (the bounding box) where it will be located at the center of the child controllers? -- You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group. To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/b8409324-5784-466a-972b-2e2b0586f456%40googlegroups.com.
animation_test.mb
Description: Binary data