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! ~~
Essayez d'obtenir le nœud de référence à partir de l'objet référencé.
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.
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'
]
"""
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.
#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!