Home           
Les attributs
 

<< Les fenêtres modales

Aujourd'hui, nous allons voir comment travailler avec les attributs avec du MEL. Tout d'abord, nous allons voir comment changer les attributs d'un objet. Ensuite nous verrons comment connecter des attributs ensemble. Et enfin nous verrons comment ajouter un attribut.

Ce tutorial est inspiré grandement de Maya API quick start de Hiroyuki Haga.

Quelques définitions

Définition d'un noeud selon Maya : construction qui contient des informations spécifiques mais aussi les actions qui sont possibles sur ces informations. Tout ce qui est crée à tout moment dans Maya est le résultat des dynamiques de Maya, une architecture basé sur les noeuds, qui réévaluent continuellement le réseau de noeuds.
Chaque noeud peut recevoir, sauvegarder et fournir des informations avec des attributs. Un atttribut d'un noeud peut être raccordé à d'autres attributs : c'est ce qui crée le réseau.

Un exemple d'attribut de noeud de transformation est le RotateX qui représente l'angle de rotation sur l'axe X. En reliant les noeuds entre eux, il est possible de réaliser un nombre illimité de relations entre les attributs.
Il est possible d'aller dans l'éditeur d'attributs.

Et voici l'éditeur d'attributs:

Vous pouvez donc changer les attributs d'un objet dans cet éditeur.

Changer un attribut

Faisons un polyCube en utilisant par exemple la fonction MEL polyCube.

Nous avons maintenant un joli cube. Et tous ses attributs.

Il est possible de modifer ces attributs pour changer la position du cube par exemple.
Il est aussi possible de changer ces attributs grâce au MEL en utilisant la fonction setAttr!!

En utilisant setAttr "pCube1.translateY" 1; le cube va se déplacer de 1 selon l'axe Y.

C'est donc très simple.

Il est possible de récupérer tous les attributs d'un objet grâce à la fonction listAttr.

string $list_attributs[] = `listAttr pCube1`;

Ce code permet de récupérer tous les noms des attributs d'un objet. Par exemple:

  • rotate : les angles de rotation ;
  • center : les coordonnées du centre de l'objet ;
  • translate : translation appliquée à l'objet.

Pour un polyCube, la liste d'attributs contient 181 attributs! ( en faisaint size($list_attributs);, il est possible d'obtenir le nombre d'attributs).

Maintenant que nous savons récupérer la liste des attributs, voyons comment connaître la valeur d'un attribut.

Il suffit d'utiliser la fonction getAttr.

Voici un exemple de code complet :

Connexion d'attributs

Voyons maintenant un sujet plus élaboré. Nous allons voir comment connecter des attributs d'objets entre eux. Par exemple, nous allons connecter, la déplacement en 'Z' de deux cubes.
Pour cela nous allons créer 2 cubes et les connecter.

polyCube
setAttr "pCube1.translateY" 1;
Nous venons de créer notre premier cube.

polyCube
Nous avons notre deuxième cube.

Et voici la scène dans l'hypergraphe :

Nous avons donc 2 cubes. Déplaçons le second cube selon l'axe X : setAttr "pCube2.translateX" 1;.

Nous allons maintenant connecter nos 2 cubes grâce à la fonction connectAttr.

connectAttr -f pCube1.translateZ pCube2.translateZ;
Et voici le résultat obtenu :

// Result: Connected pCube1.translate.translateZ to pCube2.translate.translateZ //

Maintenant dans l'Hypergraph, sélectionner Graph > Input and Ouput Connections.

On voit apparaître la connection en passant la souris par dessus.

Déplaçons maintenant un des 2 cubes grâce à la fonction move. La focntion move permet de déplacer un objet selon 3 axes. Nous allons utiliser le flag -r de cette fonction qui signifie que nous travaillons en coordonnées relatives : l'objet se déplace par rapport à sa dernière position.
Voici la syntaxe complète de la commande que nous allons utiliser : move -r 0 2 2 pCube1;.
Si aucun nom d'objet n'est spécifié, c'est l'objet sélectionné qui est déplacé.

La scène de départ :

La scène d'arrivée :

Et la différence entre les 2 :

On remarque donc que le second cube a lui aussi déplacé de 2 unités selon l'axe des Z mais pas selon l'axe des Y. Pour s'en convaincre, il suffit d'utiliser la commande getAttr.

Pour connaître avec quel autre noeud est connecté un noeud, il suffit d'utiliser listConnections.

Voici donc le résultat de listConnections pCube1 : // Result: pCube2 //.

Dernière étape : casser le lien entre les 2! Il faut utiliser : disconnectAttr.

Et voici l'hypergraph :

Vous savez donc maintenant connecter et déconnecter des attributs entre eux.

Ajouter un attribut

Pour ajouter un attribut à un noeud, il faut sélectionner ce noeud et utiliser la commande addAttr.

En s'aidant de l'aide, on peut taper le code suivant:

addAttr -shortName ms -longName mass -defaultValue 1.0 -minValue 0.001 -maxValue 10000;
addAttr -shortName n -longName nom -dt "string";
getAttr pCube1.nom;

addAttr -longName rainbow -usedAsColor -attributeType float3;
   addAttr -longName redBow -attributeType "float" -parent rainbow;
   addAttr -longName greenBow -attributeType "float" -parent rainbow;
   addAttr -longName blueBow -attributeType "float" -parent rainbow;
getAttr pCube1.rainbow;

Avec ces quelques lignes inspirées de l'aide, notre noeud s'est vu rajouté un attribut mass compris entre 0.001 et 10000, un attribut nom qui est une string et enfin un attribut rainbow qui possède des sous-attributs et qui est utilisé comme une couleur.

Les nouveaux attributs se retrouvent dans l'onglet Extra Attributes

Comme les attributs par défaut, ces attributs peuvent être connectés à d'autres attributs.

Il est aussi possible de détruire un des attributs qui a été créé dynamiquement avec la commande deleteAttr.

Pour savoir quels attributs peuvent être supprimer, il faut taper la commande deleteAttr avec le flag -q. Par exemple si on exécute deleteAttr -q pCube1;, voici le résultat : // Result: mass nom rainbow redBow greenBow blueBow //. Il suffit ensuite de choisir quel attribut on veut supprimer en faisant, par exemple, deleteAttr pCube1.mass;. Vous avez les bases pour vous affairer avec les attributs.

 

<< Les fenêtres modales
  eXTReMe Tracker