[PYTHON] Présentation des commandes autour de la référence Maya

introduction

Présentation des commandes autour de la référence. C'est une compilation de seulement celles qui sont utilisées plus souvent que les explications.

~~ Déjà publié sur le calendrier de l'Avent avec un contenu similaire, mais ne vous inquiétez pas! ~~

Obtenez le nom du nœud de référence

Essayez d'obtenir le nœud de référence à partir de l'objet référencé. image.png

Tout d'abord, je vais présenter la mauvaise manière.

node      = "ref:pSphere1"
namespace = node.split(":")[0]
RNnode    = namespace + 'RN'
# Result: u'refRN' # 

Cela a l'air bien, mais cela ne fonctionne pas si l'espace de noms de l'objet change.

Voici la bonne manière

node   = "ref:pSphere1"
RNnode = cmds.referenceQuery(node, referenceNode=True)
# Result: u'refRN' # 

Vous pouvez obtenir le nom du nœud RN sans aucun problème, même si l'espace de noms de l'objet d'origine change.

Obtenir des informations à partir du nœud de référence

Articles fréquemment utilisés

Si vous ne savez pas sansCopyNumber, vous en serez accro, alors soyez prudent.

https://help.autodesk.com/cloudhelp/2019/JPN/Maya-Tech-Docs/CommandsPython/referenceEdit.html

node   = "ref:pSphere1"
RNnode = cmds.referenceQuery(node, referenceNode=True)

#Obtenir l'espace de noms de référence
cmds.referenceQuery(RNnode, namespace=True)
# Result: u':ref' # 

#Obtenez le chemin du fichier de référence
cmds.referenceQuery(RNnode, filename=True)
# Result: u'C:/Users/ponty/Desktop/ref.ma' # 

#Le résultat du nom de fichier est'C:/Users/ponty/Desktop/ref.ma(1)'Si oui, utilisez ceci.
#Obtenez le chemin du fichier de référence
cmds.referenceQuery(RNnode, filename=True, withoutCopyNumber=True)
# Result: u'C:/Users/ponty/Desktop/ref.ma' # 

#Obtenir l'état de charge de référence
cmds.referenceQuery(RNnode, isLoaded=True)
# Result: True # 

#Obtenir une liste d'objets référencés
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'
 ]
"""

Fonctionnalisation

Réunissons une liste d'informations sur les actifs de la scène dans un dictionnaire.

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'}] # 
"""

Je l'utilise souvent dans mon travail réel.

Opérations autour de la référence

#Créer une référence
cmds.file('C:/Users/ponty/Desktop/ref.ma', reference=True, ns='ref')
# Result: u'C:/Users/ponty/Desktop/ref.ma' # 

#Référence supprimer
node   = "ref:pSphere1"
RNnode = cmds.referenceQuery(node, referenceNode=True)
RNpath = cmds.referenceQuery(RNnode, filename=True)
cmds.file(RNpath, removeReference=True)

#Remplacement de référence
node   = "ref:pSphere1"
RNnode = cmds.referenceQuery(node, referenceNode=True)
cmds.file('C:/Users/ponty/Desktop/cube.ma', lr=RNnode)

Si vous avez besoin de lire plusieurs des mêmes caractères dans la référence, il sera plus facile de les lire à partir de la commande.

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')

Si vous opérez manuellement le fichier, vous en souffrirez plus tard, alors automatisons-le autant que possible!

c'est tout!

Recommended Posts

Présentation des commandes autour de la référence Maya
Examinez l'option (cachée?) De la commande Maya |
Compensez le manque de référence Maya Node
Maya | Obtenir le chemin de l'espace de travail