Maya 참조 주위의 명령 소개

14819 단어 파이썬maya

소개



참조 주위의 명령의 소개입니다.
해설이라고 하는 것보다 잘 사용하는 것만 정리한 것이 됩니다.

이미 비슷한 내용으로 어드벤드 캘린더에 투고되고 있습니다만 신경쓰지 않는다!

참조 노드의 이름 가져오기



참조된 객체에서 참조 노드를 가져옵니다.


우선 잘못된 방법을 소개.
node      = "ref:pSphere1"
namespace = node.split(":")[0]
RNnode    = namespace + 'RN'
# Result: u'refRN' # 

문제없이 움직이는 것처럼 보이지만 객체의 네임 스페이스가 변경되면 움직이지 않습니다.

올바른 방법이 여기
node   = "ref:pSphere1"
RNnode = cmds.referenceQuery(node, referenceNode=True)
# Result: u'refRN' # 

원래 객체의 네임스페이스가 변경되어도 문제없이 RN 노드의 이름을 얻을 수 있습니다.

참조 노드에서 정보 검색



자주 사용하는 것

withoutCopyNumber는 모르면 빠지므로 조심합시다.
node   = "ref:pSphere1"
RNnode = cmds.referenceQuery(node, referenceNode=True)

# リファレンスのネームスペースを取得
cmds.referenceQuery(RNnode, namespace=True)
# Result: u':ref' # 

# リファレンスのファイルパスを取得
cmds.referenceQuery(RNnode, filename=True)
# Result: u'C:/Users/ponty/Desktop/ref.ma' # 

# filenameのResultが'C:/Users/ponty/Desktop/ref.ma(1)'となる場合はこちらを使います。 
# リファレンスのファイルパスを取得
cmds.referenceQuery(RNnode, filename=True, withoutCopyNumber=True)
# Result: u'C:/Users/ponty/Desktop/ref.ma' # 

# リファレンスのロード状態を取得
cmds.referenceQuery(RNnode, isLoaded=True)
# Result: True # 

# リファレンスされたオブジェクト一覧を取得
cmds.referenceQuery(RNnode, nodes=True)
"""
Result: [
 u'ref:pSphere1',
 u'ref:pSphereShape1',
 u'ref:shapeEditorManager',
 u'ref:poseInterpolatorManager',
 u'ref:layerManager',
 u'ref:defaultLayer',
 u'ref:renderLayerManager',
 u'ref:defaultRenderLayer',
 u'ref:polySphere1',
 u'ref:uiConfigurationScriptNode',
 u'ref:sceneConfigurationScriptNode'
 ]
"""

기능화



장면의 자산 정보 목록을 함께 사전에 요약해 봅니다.
def getRefarenceInfo():
    ret = []

    refNodes = cmds.ls(references=True)
    for RNnode in refNodes:
        ref = {}
        ref.update({
            'namespace' : cmds.referenceQuery(RNnode, namespace=True),
            'filenam'   : cmds.referenceQuery(RNnode, filename=True),
            'w_filenam' : cmds.referenceQuery(RNnode, filename=True, withoutCopyNumber=True),
            'isLoaded'  : cmds.referenceQuery(RNnode, isLoaded=True),
            'nodes'     : cmds.referenceQuery(RNnode, nodes=True),
            'node'      : cmds.referenceQuery(RNnode, nodes=True)[0],
            })
        ret.append(ref)

    return ret
"""
# Result: [{'filenam': u'C:/Users/ponty/Desktop/cube.ma{1}',
  'isLoaded': True,
  'namespace': u':ref',
  'node': u'ref:pCube1',
  'nodes': [u'ref:pCube1',
            u'ref:pCubeShape1',
            u'ref:shapeEditorManager',
            u'ref:poseInterpolatorManager',
            u'ref:layerManager',
            u'ref:defaultLayer',
            u'ref:renderLayerManager',
            u'ref:defaultRenderLayer',
            u'ref:polyCube1',
            u'ref:uiConfigurationScriptNode',
            u'ref:sceneConfigurationScriptNode'],
  'w_filenam': u'C:/Users/ponty/Desktop/cube.ma'},
 {'filenam': u'C:/Users/ponty/Desktop/ref.ma{2}',
  'isLoaded': True,
  'namespace': u':ref1',
  'node': u'ref1:pSphere1',
  'nodes': [u'ref1:pSphere1',
            u'ref1:pSphereShape1',
            u'ref1:shapeEditorManager',
            u'ref1:poseInterpolatorManager',
            u'ref1:layerManager',
            u'ref1:defaultLayer',
            u'ref1:renderLayerManager',
            u'ref1:defaultRenderLayer',
            u'ref1:polySphere1',
            u'ref1:uiConfigurationScriptNode',
            u'ref1:sceneConfigurationScriptNode'],
  'w_filenam': u'C:/Users/ponty/Desktop/ref.ma'}] # 
"""

실제 직장에서 자주 사용합니다.

Reference 주변 조작


# リファレンスの作成
cmds.file('C:/Users/ponty/Desktop/ref.ma', reference=True, ns='ref')
# Result: u'C:/Users/ponty/Desktop/ref.ma' # 

# リファレンスのリムーブ
node   = "ref:pSphere1"
RNnode = cmds.referenceQuery(node, referenceNode=True)
RNpath = cmds.referenceQuery(RNnode, filename=True)
cmds.file(RNpath, removeReference=True)

# リファレンスの置き換え
node   = "ref:pSphere1"
RNnode = cmds.referenceQuery(node, referenceNode=True)
cmds.file('C:/Users/ponty/Desktop/cube.ma', lr=RNnode)

같은 캐릭터를 레퍼런스로 읽을 필요가 있는 경우는, 커멘드로부터 읽으면 편해집니다.
cmds.file('C:/Users/ponty/Desktop/characterA.ma', reference=True, ns='CH_A_1')
cmds.file('C:/Users/ponty/Desktop/characterA.ma', reference=True, ns='CH_A_2')
cmds.file('C:/Users/ponty/Desktop/characterA.ma', reference=True, ns='CH_A_3')
cmds.file('C:/Users/ponty/Desktop/characterB.ma', reference=True, ns='CH_B_1')
cmds.file('C:/Users/ponty/Desktop/characterB.ma', reference=True, ns='CH_B_2')
cmds.file('C:/Users/ponty/Desktop/characterB.ma', reference=True, ns='CH_B_3')

파일 조작을 수작업으로 하면 나중에 고통받는 날개가 되기 때문에 가능한 범위에서 자동화합시다!

이상!

좋은 웹페이지 즐겨찾기