2016年1月24日日曜日

位置、回転、スケール合わせスクリプト

選択しているオブジェクトの位置や回転、スケール、ピボットなどをコピーして、別のオブジェクトにペーストするスクリプトです。

※ご使用の際は自己責任でお願いします。




●Copy
選択しているオブジェクトの情報をコピーします。

●Pivot
選択しているオブジェクトのピボット位置を、コピーしたピボット位置に合わせます。(上手く動作しないかも)

●Translate
選択しているオブジェクトの位置を、コピーした位置に合わせます。

●Translate(ver.FT)
選択しているオブジェクトの位置を、コピーした位置に合わせます。
コピーしたオブジェクトがフリーズトランスフォームされていた場合は、こちらを使ってください。

●Rotate
選択しているオブジェクトの回転を、コピーした回転に合わせます。

●Scale
選択しているオブジェクトのスケールを、コピーしたスケールに合わせます。

●Center Pivot
ピボット位置をセンターにします。

●Freeze Transform
フリーズトランスフォームします。


●スクリプト(python)
import maya.cmds as mc

#copy location,rotation and scale value of selected object
def copySelObjVal(arg):
    global loc,rot,sca,WRP,WSP,locFT
   
    if not mc.ls(sl=1):
        if mc.window('ErrorCPNon',ex=1):
            mc.deleteUI('ErrorCPNon')
           
        mc.window('ErrorCPNon',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Nothing selected objects',w=200,h=50)
        mc.showWindow()
       
    elif len(mc.ls(sl=1)) >= 2:
        if mc.window('ErrorCPTwo',ex=1):
            mc.deleteUI('ErrorCPTwo')
           
        mc.window('ErrorCPTwo',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Too many selected objects',w=200,h=50)
        mc.showWindow()

    else:
        selA = mc.ls(sl=1)
        loc = mc.xform(selA,q=1,ws=1,t=1)
        rot = mc.xform(selA,q=1,ws=1,ro=1)
        sca = mc.xform(selA,q=1,r=1,s=1)
        WRP = mc.xform(selA,q=1,rp=1,ws=1)
        WSP = mc.xform(selA,q=1,sp=1,ws=1)
        locFT_tmp = mc.xform(q=1,ws=1,piv=1)
        locFT = locFT_tmp[0:3]

#paste location value of selected object
def pasteSelTraVal(arg):
    global loc,rot,sca,WRP,WSP
   
    if not mc.ls(sl=1):
        if mc.window('ErrorCPNon',ex=1):
            mc.deleteUI('ErrorCPNon')
           
        mc.window('ErrorCPNon',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Nothing selected objects',w=200,h=50)
        mc.showWindow()
       
    elif len(mc.ls(sl=1)) >= 2:
        if mc.window('ErrorCPTwo',ex=1):
            mc.deleteUI('ErrorCPTwo')
           
        mc.window('ErrorCPTwo',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Too many selected objects',w=200,h=50)
        mc.showWindow()

    else:
        selB = mc.ls(sl=1)
        mc.xform(selB,ws=1,t=loc)

#paste rotaion value of selected object
def pasteSelRotVal(arg):
    global loc,rot,sca,WRP,WSP
   
    if not mc.ls(sl=1):
        if mc.window('ErrorCPNon',ex=1):
            mc.deleteUI('ErrorCPNon')
           
        mc.window('ErrorCPNon',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Nothing selected objects',w=200,h=50)
        mc.showWindow()
       
    elif len(mc.ls(sl=1)) >= 2:
        if mc.window('ErrorCPTwo',ex=1):
            mc.deleteUI('ErrorCPTwo')
           
        mc.window('ErrorCPTwo',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Too many selected objects',w=200,h=50)
        mc.showWindow()

    else:
        selB = mc.ls(sl=1)
        mc.xform(selB,ws=1,ro=rot)

#paste scale value of selected object
def pasteSelScaVal(arg):
    global loc,rot,sca,WRP,WSP
   
    if not mc.ls(sl=1):
        if mc.window('ErrorCPNon',ex=1):
            mc.deleteUI('ErrorCPNon')
           
        mc.window('ErrorCPNon',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Nothing selected objects',w=200,h=50)
        mc.showWindow()
       
    elif len(mc.ls(sl=1)) >= 2:
        if mc.window('ErrorCPTwo',ex=1):
            mc.deleteUI('ErrorCPTwo')
           
        mc.window('ErrorCPTwo',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Too many selected objects',w=200,h=50)
        mc.showWindow()

    else:
        selB = mc.ls(sl=1)
        mc.xform(selB,s=sca)

#paste pivot value of selected object
def pasteSelPivVal(arg):
    global loc,rot,sca,WRP,WSP
   
    if not mc.ls(sl=1):
        if mc.window('ErrorCPNon',ex=1):
            mc.deleteUI('ErrorCPNon')
           
        mc.window('ErrorCPNon',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Nothing selected objects',w=200,h=50)
        mc.showWindow()
       
    elif len(mc.ls(sl=1)) >= 2:
        if mc.window('ErrorCPTwo',ex=1):
            mc.deleteUI('ErrorCPTwo')
           
        mc.window('ErrorCPTwo',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Too many selected objects',w=200,h=50)
        mc.showWindow()

    else:
        selB = mc.ls(sl=1)
        mc.xform(selB,rp=WRP,ws=1)
        mc.xform(selB,sp=WSP,ws=1)
   
#center pivot
def centerPivot(arg):
    mc.xform(cp=1)
   
#freeze transform
def freezTransformKU(arg):
    mc.makeIdentity(a=1,t=1,r=1,s=1)

#paste loc value for freeze transform object
def pasteTraValFT(arg):
    global loc,rot,sca,WRP,WSP,locFT
   
    if not mc.ls(sl=1):
        if mc.window('ErrorCPNon',ex=1):
            mc.deleteUI('ErrorCPNon')
           
        mc.window('ErrorCPNon',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Nothing selected objects',w=200,h=50)
        mc.showWindow()
       
    elif len(mc.ls(sl=1)) >= 2:
        if mc.window('ErrorCPTwo',ex=1):
            mc.deleteUI('ErrorCPTwo')
           
        mc.window('ErrorCPTwo',title='Error',s=0)
        mc.columnLayout()
        mc.text(l='Too many selected objects',w=200,h=50)
        mc.showWindow()

    else:
        selB = mc.ls(sl=1)
        mc.xform(selB,ws=1,t=locFT)

#window
if mc.window('copyPaste', ex=1):
    mc.deleteUI('copyPaste')
   
mc.window('copyPaste',title='copyPaste',s=0)
mc.columnLayout()
mc.button(l='Copy',c=copySelObjVal,w=110,bgc=(1,0.443,0))
mc.button(l='Pivot',c=pasteSelPivVal,w=110,bgc=(0.8,0.8,0.8))
mc.button(l='Translate',c=pasteSelTraVal,w=110)
mc.button(l='Translate(ver.FT)',c=pasteTraValFT,w=110)
mc.button(l='Rotate',c=pasteSelRotVal,w=110)
mc.button(l='Scale',c=pasteSelScaVal,w=110)
mc.button(l='Center Pivot',c=centerPivot,w=110,bgc=(0.5,0.5,0.5))
mc.button(l='Freeze Transform',c=freezTransformKU,w=110,bgc=(0.2,0.2,0.2))
mc.showWindow()

0 件のコメント:

コメントを投稿