Avant de commencer, sachez qu’on ne peut pas parler de méthode à proprement parler tant il s’agit plutôt d’un bricolage. :perplex:

Première chose, trouvons un attribut qui n’affiche pas de commande setAttr dans le Script Editor. C’est le cas de l’attribut Smooth Mesh Preview des nœuds de type mesh.

Essayez de le modifier, rien ne s’affiche. Vous pouvez activer Echo All Commands, l’attribut apparaît une seule fois sur les 257 lignes qui s’affichent. Difficile de le trouver. :pasClasse:

Le truc c’est qu’un attribut affiché par l’Attribute Editor de Maya n’a pas forcément une relation 1:1 avec l’attribut du nœud qu’il est censé représenter. En effet, l’Attribute Editor permet d’afficher des interfaces qui ont leur propre logique. Dans le mon exemple, l’interface de l’Attribut Editor exécute un script « sous le capot » et c’est ce script qui, suivant la combinaison des paramètres sélectionnés dans l’interface, set l’attribut à une valeur donnée (0, 1 ou 2). Comme ce n’est pas Maya qui s’occupe de modifier l’attribut mais un script, la commande de setAttr n’apparaît pas dans le Script Editor. :dtcFuckSmile:

Ce n’est donc pas la bonne méthode. Voici la mienne :

Le principe consiste à sauver deux fois la scène, une fois avec l’attribut dans un état, et l’autre fois avec l’attribut dans un autre état et de faire une différence ligne à ligne via un logiciel spécialisé. Allons-y ! :grenadelauncher:

Laissez l’attribut non modifié puis sauvez la scène en ASCII :

Contrairement au binaire, ce mode permet de sauver sa scène sous forme d’un gros script lisible pas tout bon éditeur de texte (ouvrez la scène sauvegardée avec votre éditeur de texte favoris puis jugez) .

N’oubliez pas de cocher l’option Use full names for attributes on nodes. Comme vous le devinez, cette option affiche les noms complets des attributs. :siffle:

Sauvez une scène avec l’attribut Smooth Mesh Preview désactivé et une autre avec l’attribut activé.

Ensuite, ouvrez votre outil de visualisation de différence de fichier (diff ou Meld sous Linux, WinMerge sous Windows, FileMerge sous Mac).

En version ligne de commande, sous Linux, cela donne :

$ diff /home/narann/test.ma /home/narann/test2.ma
2,3c2,3
< //Name: test.ma
< //Last modified: Fri, Jul 09, 2017 21:13:45 PM
---
> //Name: test2.ma
> //Last modified: Fri, Jul 09, 2017 21:13:57 PM
75a76
>       setAttr ".displaySmoothMesh" 2;
188c189
< // End of test.ma
---
> // End of test2.ma

Si on enlève les dates en début de fichier et la dernière ligne, on obtient :

>       setAttr ".displaySmoothMesh" 2;

L’attribut s’appelle donc « displaySmoothMesh » et n’est pas un booléen mais un entier. :reflechi:

On ne va quand même pas s’arrêter ici vous ne croyez pas ? Vous n’avez pas envi de connaitre les valeurs possibles de cet attribut ? :dentcasse:

Vérifions son type :

import maya.cmds as mc

print mc.getAttr("pSphereShape1.displaySmoothMesh", type=True)
# enum

Donc c’est un enum. Pour récupérer la liste des valeurs possibles via un enum il faut utiliser la commande attributeQuery avec l’argument listEnum :

print mc.attributeQuery("displaySmoothMesh", node="pSphereShape1", listEnum=True)
# [u'Base Mesh Only:Base and Smooth Mesh:Smooth Mesh Only']

On a donc :

  • Base Mesh Only (index 0)
  • Base and Smooth Mesh (index 1)
  • Smooth Mesh Only (index 2)

Bon, ça c’était cadeau, histoire de pousser le truc un peu plus loin mais l’idée de base, c’est de faire une différence entre les fichiers. :slow_clap:

 

:marioCours: