Avant de commencer, avoir un onglet ouvert de la doc officiel n'est pas du luxe! :hehe:

Pour pouvoir afficher des informations dans le viewport, cela passe par la commande:

headsUpDisplay

Cette commande crée un objet "d'affichage tête haute" (HUD) qui est placé sur un plan 2D au dessus du viewport 3D. Cette fonctionnalité peut être utilisé pour afficher des informations récupéré depuis un script. La chaine de caractère affichés dans le viewport est formaté en utilisant les informations récupéré grâce aux flags de la commande.

Voici un exemple de création d'un objet HUD classique:

headsUpDisplay -section 2	//numéro de la section dans lequel placer l'objet HUD
	-block 2	//numéro du block dans lequel placer l'objet HUD
	-blockSize "medium"	//la taille du block
	-label "myInformation"	//le texte qui sera écrit devans ce qu'on souhaite afficher
	-labelFontSize "large"	//la taille de la font du label
	-dataFontSize "large"	//la taille de la font des informations affichées
	-command "getMyInformation()"	//la procédure à éxécuter pour obtenir les informations. Elle doit renvoyer une valeur ou un tableau de valeur.
	-event "SelectionChanged"	//l'event qui lance la procédure et affiche le résultat.
	-nodeChanges "attributeChange"	//execute également la procédure si un attribut est changé (et pas qu'une sélection).
	HUDMyInformation;	//on finit par le nom de l'objet HUD

Lancez ça:

show_infos_in_viewport_maya001.png

Comme vous l'aurez deviné, le "(No Data)" vient du fait qu'il n'y à pas de procédure "getMyInformation()" à exécuter et qu'elle ne renvois rien.

Créons-en une:

global proc string getMyInformation()
{
	return "Toto";
}

show_infos_in_viewport_maya002.png

Voila! Maintenant vous pouvez faire ce que vous voulez dans le script et l'afficher dans le viewport! :sourit:

Un exemple pratique? L'afficheur du numéro de la frame:

global proc string getFrameNumber()
{
	string $frame = `currentTime -q`;	//on doit renvoyer une chaine de caractère
	return $frame;
}
 
headsUpDisplay -section 2
	-block 2
	-blockSize "medium"
	-label "Frame"
	-labelFontSize "large"
	-dataFontSize "large"
	-command "getFrameNumber()"
	-attachToRefresh	//La commande est executé en même temps que le processus de refresh de Maya (tout le temps).
	HUDFrameNumber;

show_infos_in_viewport_maya003.png

Vous pouvez aussi bien ne pas utiliser le flag "label" pour n'avoir qu'un numéro dans l'affichage.

Pour ce qui est du placement dans le viewport, les informations sur les numéros de section sont là:

 ________________________
|    |    |    |    |    |
|    |    |    |    |    |
| 0  | 1  | 2  | 3  | 4  |
|    |    |    |    |    |
|____|____|____|____|____|
|    |    |    |    |    |
|    |    |    |    |    |
| 5  | 6  | 7  | 8  | 9  |
|    |    |    |    |    |
|____|____|____|____|____|

Pour ce qui est des du flag "block", c'est à peut près l'équivalent de la hauteur dans le block:

  • 0: Tout en haut.
  • n: tout en bas.

Vous pouvez aussi ajouter un menu pour afficher ou masquer votre objet HUD:

global string $gHeadsUpDisplayMenu;	//le display menu de l'interface Maya
 
//ajoute un objet au menu
menuItem -parent $gHeadsUpDisplayMenu
	-checkBox true
	-label "Frame Number"
	-command "headsUpDisplay -e -vis #1 HUDFrameNumber"
	-annotation "Frame Number: Toggle the display of frame number";

show_infos_in_viewport_maya004.png

Merci à Patrick McNabb pour ce dernier point. :)

J'espère que ce tuto vous aidera durant vos productions. ;)

Bon courage! Et à bientôt!