ON-BLOG

CGのこと、あれこれ書いてます。

コンスト先とか元とか

昔作ったやつ
実行で、コンスト元を選択し
Ctrl押しながらだと、コンスト先を取得する。
現状再帰的処理は入れていないし
色々不備はあるかと。

今度修正。

# -*- encoding: utf-8 -*-
import maya.cmds as cmds
import sys

def ConnectionList(KeyState,List,hako,Sel):
    #重複処理
    S_ListNode = list(set(List))
    for Node in S_ListNode:
        #拘束先を取得
        if KeyState == 4:
            #コンストだけ抽出
            if cmds.objectType(Node,isType="orientConstraint") or cmds.objectType(Node,isType="pointConstraint") or cmds.objectType(Node,isType="parentConstraint") or cmds.objectType(Node,isType="scaleConstraint"):
                #targetParentMatrixはバッティングする可能性が高いので修正案件 
                hako.append(cmds.listConnections(Node + ".target[0].targetParentMatrix",d=False))
        #拘束元を取得
        elif KeyState == 0:
            if cmds.objectType(Node,isType="orientConstraint") or cmds.objectType(Node,isType="pointConstraint") or cmds.objectType(Node,isType="parentConstraint") or cmds.objectType(Node,isType="scaleConstraint"):   
                Source = cmds.listConnections(Node + ".target[0].targetParentMatrix",d=False)[0]
                if Source == Sel:
                    hako.append(cmds.listConnections(Node + ".constraintParentInverseMatrix"))
    return hako

def Constraint_Source_Select():
    hako = []
    ListNode = []
    KeyState = cmds.getModifiers()
    #0-None
    #1-Shift
    #2-CapsLock
    #4-Ctrl
    #8-Alt
    Sels = cmds.ls(sl=True)
    for Sel in Sels:
        #source拘束元←←←←←←←←destination拘束される側
        #Ctrl押されてたら = 拘束先を取得
        if KeyState == 4:
            ListNode = cmds.listConnections(Sel,source=True,destination=False)
        #NotPusyKey = 拘束元を取得
        elif KeyState == 0:
            ListNode = cmds.listConnections(Sel,source=False,destination=True)
        #例外処理
        if ListNode == None:
            cmds.select(cl=True)
            cmds.confirmDialog(message = u'そもそも接続がないみたいです',button=['OK'], defaultButton='OK')
            sys.exit()
        
        #ここを再帰的にすれば、最後まで検索可能。
        List = ConnectionList(KeyState,ListNode,hako,Sel)
        print List
        if len(List) > 0:
            cmds.select(List[0])
            cmds.confirmDialog(message = u"選択しました。\n" + str(List[0]) ,button=['OK'], defaultButton='OK')
        else:
            cmds.confirmDialog(message = u'それ以上接続がないみたいです',button=['OK'], defaultButton='OK')
        
Constraint_Source_Select()