""" Package :- Free Script Module :- Free Script Description :- Mirror the pose for selected controller. Usage :- Copy the script to maya script editor in python tab YouTube : - https://www.youtube.com/watch?v=TeKAB70WJE0 Creator :- Sanjeev Dhama """ import maya.cmds as cmds class MirrorPose(): def __init__(self,*arg): if cmds.window('MirrorPose',exists=1): cmds.deleteUI('MirrorPose') cmds.window('MirrorPose',t='MirrorPose', iconName='MirrorPose', widthHeight=(500,180)) self.framelayout = cmds.frameLayout(lv =0) self.formlayout = cmds.formLayout(nd=100,p = self.framelayout) self.rdo_grp = cmds.radioButtonGrp(l='Mirror across:', la3=['xy', 'yz', 'xz'], nrb=3, sl=2) self.search_for_field = cmds.textFieldGrp(l='Search for:', tx='L_') self.replace_with_field = cmds.textFieldGrp(l='Replace with:', tx='R_') self.chBox = cmds.checkBox(l = 'Mirrored ctrl') self.left_btn = cmds.button(label='Miror(Left>Right)', c=self.mirror_l) self.right_btn = cmds.button(label='Miror(Right>Left)', c=self.mirror_r) cmds.formLayout(self.formlayout,e=1,af=[(self.rdo_grp,'top',10),(self.rdo_grp,'left',0),(self.rdo_grp,'right',0)]) cmds.formLayout(self.formlayout,e=1,af=[(self.search_for_field,'top',35),(self.search_for_field,'left',10)]) cmds.formLayout(self.formlayout,e=1,af=[(self.replace_with_field,'top',60),(self.replace_with_field,'left',10)]) cmds.formLayout(self.formlayout,e=1,af=[(self.chBox,'top',85),(self.chBox,'left',152)]) cmds.formLayout(self.formlayout,e=1,af=[(self.left_btn,'top',110),(self.left_btn,'left',150)]) cmds.formLayout(self.formlayout,e=1,af=[(self.right_btn,'top',110),(self.right_btn,'left',280)]) cmds.showWindow('MirrorPose') def mirror_l(self, *arg): self.mirror(side='left') def mirror_r(self, *arg): self.mirror(side='right') def mirror(self, side): tra = [] rot = [] side_l = cmds.textFieldGrp(self.search_for_field, q=1, text=1) side_r = cmds.textFieldGrp(self.replace_with_field, q=1, text=1) sel = cmds.ls(sl=1) for ctrl in sel: if side == 'left': side = side_l elif side == 'right': side = side_r ta = cmds.xform(ctrl, q=1, ws=1, t=1) ro = cmds.xform(ctrl, q=1, ws=1, ro=1) axis = cmds.radioButtonGrp(self.rdo_grp, q=1, sl=1) mirrored = cmds.checkBox(self.chBox, q=1, v=1) if axis == 1: if mirrored: tra = [ta[0], ta[1], ta[2]*-1] rot = [ro[0]*-1, ro[1]*-1, ro[2]] else: tra = [ta[0], ta[1], ta[2]*-1] rot = [ro[0]*-1, ro[1]*-1, ro[2]] if axis == 2: if mirrored: tra = [ta[0]*-1, ta[1], ta[2]] rot = [ro[0]+180, ro[1]*-1, ro[2]*-1] else: tra = [ta[0]*-1, ta[1], ta[2]] rot = [ro[0], ro[1]*-1, ro[2]*-1] if axis == 3: if mirrored: tra = [ta[0], ta[1]*-1, ta[2]] rot = [ro[0]*-1, ro[1], ro[2]*-1] else: tra = [ta[0], ta[1]*-1, ta[2]] rot = [ro[0]*-1, ro[1], ro[2]*-1] if side in ctrl: split_name = ctrl.split(side)[1] if side == side_l: ctrl_name = '{}{}'.format(side_r, split_name) if side == side_r: ctrl_name = '{}{}'.format(side_l, split_name) if side == side_l: cmds.xform(ctrl_name, ws=1, t=tra) cmds.xform(ctrl_name, ws=1, ro=rot) if side == side_r: cmds.xform(ctrl_name, ws=1, t=tra) cmds.xform(ctrl_name, ws=1, ro=rot) else: cmds.confirmDialog(t='Confirmation', m='Wrong selection!', icn='information', b='OK', bgc=(.7, .7, .7)) MirrorPose()