Afficher des informations personnalisées dans le viewport Maya
Par Narann le lundi, 1 février 2010, 21:21 - Script et code - Lien permanent
Il peut être intéressant d'avoir certaines informations d'affiché dans le viewport de Maya. En effet, malgré un grand choix d'information génériques, certaines, spécifiques à vos scripts et/ou productions ne sont pas affichées.
Il existe une méthode pour pouvoir afficher l'information que l'on souhaite et je vous propose de voir comment faire.
Avant de commencer, avoir un onglet ouvert de la doc officiel n'est pas du luxe!
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:
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"; }
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;
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";
Merci à Patrick McNabb pour ce dernier point. :)
J'espère que ce tuto vous aidera durant vos productions. ;)
Bon courage! Et à bientôt!