Blender (jusqu'à 2.49)
Python 
Trucs et Astuces(1)
Description: renommer tous ou partie de l'ensemble des objets d'un fichier.
 
    Début   Index
précédentScript Python
Script python:truc 2 Suivant

Il arrive que l'on produise des modélisations très détaillées avec un nombre considérable d'objets divers dont les noms finissent par devenir assez peu clair quand on essaye de les repérer au travers des fenêtres d'affichage comme celles que la combinaison  de touche Shift-F4 (fenêtre de visualisation globale des objets) et Shift -F1 (fenêtre d'importation) peuvent faire apparaître.
Essayer de savoir ce que peut être le Plane.001 ou Plane.002 ou Plane.075 relève de la clairvoyance pure et simple.
Un peu d'ordre pendant la construction originale aurait évité ce gendre de problème, mais il est souvent trop tard (d'ailleurs ces opérations d'identification n'ont rien d'agréable, ni d'attirant, et, en fait, elles sont tellement fastidieuses qu'on peut dire qu'elles ont tout ce qu'il faut  pour qu'on les oublie). Ensuite,  après la modlisation, parvenir à une situation organisée  où chaque objet est titré,  pour identifier son appartenance à tel ou tel objet plus complexe, devient un vrai casse tête et, finalement, très ennuyeux.

Ce tutoriel se propose de vous montrer une petite astuce en Blender2.04/python pour rendre cette tache aussi intuitive et rapide que possible en passant pasr un certain nombre de phase:

1/ Préparez votre environnement Blender
2/ Charger le fichier
3/ Exécuter le script
4/ Comprendre pourquoi ça marche.
5/ Transformer le script pour ne modifier que les objets sélectionnés


Préparez votre environnement Blender

Pour commencer, préparez votre environnement Blender pour avoir un espace de travail divisé en, au moins, une fenêtre 3D et une fenêtre de script. Une, pour voir ce que vous faites (et  parce que, cerise sur le gateau, il y a possibilité de choisr "à vue" des groupes d'objets pour leur attribuer un nom, mais chaque chose en son temps, nous verrons cela plus tard), l'autre, parce qu'il est indispensable de se trouver dans la fenêtre de script active lorsque l'on tape la combinaison de touche ALT-Pqui lance l'exécution du script python.

Charger le fichier
La méthode de chargement est expliquée dans la page d'introduction de la série de tutoriels sur le Blender Python.  Il me parait intéressant de reprendre ici ces quelques mots pour les adapter à la nouvelle présentation de Blender 2.0.
La fenêtre de script est reconnaissable par ce bouton . Dans la version 2.0x de Blender elle est accessible par une sorte colonne qui offre un accès direct à chaque type de fenêtre.  C'est la troisième en partant du haut.
 

Note: Il est difficile de situer exactement où se trouvera ce bouton. Tout au plus peut-on signaler qu'il se trouve sur la barre de boutons que les auteurs du logiciel ont nommé Header
Peut-être cette barre se trouve-t-elle au dessus de la fenêtre, ou au dessous. Comme dans la nouvelle mouture  du logiciel il y a un module de jeu qui peut être lancé en ligne et temps réel, la barre en question peut très bien avoir disparue. 

Il vaut mieux charger le script que de l'écrire Pour cela cliquer le bouton de DataBloc . Choisissez OPEN NEW .

Cela ouvre un fenêtre de sélection de fichier comme celle qui vous permet de charger un fichier blend. Le bouton droit de votre souris surligne en bleu le fichier que vous désignez. Le bouton gauche fait apparaître le nom dans le second formulaire . Le bouton central  charge immédiatement le fichier. Si vous n'avez pas de souris 3 boutons ALT-bouton gauche le remplacera.

télécharger le texte du script sur le web.

Exécuter le script
Pour exécuter le script il faut obligatpoirement amener le point de la souris sur  la fenêtre de script et taper: ALT-P.

Comprendre pourquoi ça marche
Décortiquons le script ligne par ligne.
 
import Blender
...

Comme vous le savez peut-être déjà, le langage python est un langage modulaire. On importe donc des blocs, ou modules, contenants les fonctions et les noms de fonction dont on a besoin. Dans le blender/python le module qui contient toutes les fonctions et nom de fonctions, et même tous les sous-modules, s'appelle tout simplement: Blender, il faut le charger au début du script si l'on veut effectuer une quelquonque opération sur le logiciel ou sur les objets qu'il gère en mémoire.
 
from Blender import Objet
...

A partir du module principal, on charge un sous-module: Objet qui permet d'accéder aux  objets du logiciel. On pourrait se passer de cet appel et demander à utiliser les méthodes et les champs de ce module en écrivant: Blender.Objet. L'appel permet de raccourcir les scripts en chargeant la liste de noms contenu par le module de manière à ce que python puisse les reconnaître.
Nous ne nous attarderons pas sur l'importation du module sys qui n'est nécessaire que pour les utilisateurs de blender dans un environnement Windows9x/nt/2000. Voir la page d'intro à ce sujet.

Le module Object offre les fonctions suivantes :

Get(nom_d_objet)
nom_d_objet est un argument ou paramètre variable qui peut être, ou non, passé à la fonction. Si un objet portant ce nom existe dans Blender (un objet créé par l'utilisateur, evidemment) un pointeur sur cet objet est retourné dans la variable qui aura été créé pour le recevoir. En  fait il faut écrire:
Variable_locale=Object.Get(nom_d_objet)
A partir de ce moment, si on veut obtenir le contenu de l'objet nom_d_objet, ou intervenir sur ce contenu, il faut passer par Variable_locale. Si aucun objet ne porte le nom passé en paramètre Variable_locale contiendra la valeur None.
Si aucun paramètre n'est fourni à la fonction elle renvoie une liste contenant tous les noms d'objets disponibles à ce moment-là.
GetSelected().
Cette fonction retourne la liste des objets sélectionnés. L'objet actif se trouve en première position. Il faut écrire:
Variable_locale=Object.GetSelected()
Variable_locale[0] contiendra l'objet en magenta vif.
Revenons au script.
 
L=Object.Get()
...

Nous appliquons  la fonction Get() pour obtenir la liste de tous les noms dans L.
 
print L
...

Permet de contrôler le contenu de la  liste en l'affichant dans la console (dos ou autre si on travaille sous linux), et éventuellement prendre les mesures qui s'imposent s'il y a un problème.
 
for obj in L:
...

On crée une boucle sur la liste de manière à ce que obj corresponde successivement à chaque nom d'objet. En fait ce nom est en même temps l'objet lui-même et il est possible de travailler sur chacune de ses variables.
Tous les objets contiennent ces champs:

  • name - nom de l'objet blender qui est référencé par cet objet 
  • block_type - "Object"
  • properties - liste odes propriétés des données supplémentaires
  • parent - lien vers l'Objet parent
  • track - lien vers l'objet traqué
  • ipo - lien vers les  Ipo
  • data - lien vers les données
  • mat - la matrice de cet objet
  • loc - le vecteur de localisation 
  • dloc - le vecteur de localisation delta
  • rot - the rotation vector (angles are in radians)
  • drot - the delta rotation vector (angles are in radians)
  • size - le vecteur dimension/echelle 
  • dsize - le vecteur de dimension/echelle delta 
  • LocX - coordonnée X de localisation 
  • LocY - coordonnée Y de localisation 
  • LocZ -  coordonnée Z de localisation 
  • dLocX - X delta location coordinate
  • dLocY - Y delta location coordinate
  • dLocZ - Z delta location coordinate
  • RotX - angle X de rotation (en radians)
  • RotY - angle Y de rotation (en radians)
  • RotZ -  angle Z de rotation (en radians)
  • dRotX - angle X delta de rotation (en radians)
  • dRotY - angle Y delta de rotation (en radians)
  • dRotZ - angle Z delta de rotation  (en radians)
  • SizeX - dimension/echelle X 
  • SizeY - dimension/echelle Y 
  • SizeZ - dimension/echelle Z 
  • dSizeX - dimension/echelle delta X
  • dSizeY - dimension/echelle delta Y
  • dSizeZ - dimension/echelle delta Z
  • EffX - coordonnée X de l'effector 
  • EffY - coordonnée Y de l'effector 
  • EffZ - coordonnée Z de l'effector
  • Layer - Calque de l'objet 
  • On modifie systématiquement le champ .name...
     
        obj.name='test_'+obj.name
    ...

    en créant une chaine de caractère constituée de la partie entre guillemet, qui est la partie modifiable ou à ajouter,  à laquelle on concatène (on ajoute, encore une fois) le nom précédent de l'objet. On range le résultat dans la variable .name

    Pour que le script ne modifie que les objets sélectionnés il sufiit de transformer la ligne:
                         L=Object.Get()
    en
                                 L=Object.GetSelected()

    Télécharger la version modifiée
     

    Pour faire court, le script peut se résumer à :
     
     

    nouveau_nom='cequejeveux_'
    import Blender
    from Blender import Object
    L=Object.Get()
    for obj in L:
         obj.name=nouveau_nom+obj.name

    Pour corriger une éventuelle erreur de nom
    Script pour corriger les erreurs sur un groupe d'objets sélectionnés

    Télécharger le script de correction de nom.

    Fini


    Note personnelle sur la préparation des fenêtres activables par le menu SCR (SCReen, écran).

    Il est clair que chacun doit avoir ses préférences et habitudes de travail en ce qui concerne la présenation de l'espace de travail. Pour ma part j'ai choisi d'avoir 4 écrans  accessibles par ce menu.

    --  Un écran animation avec une vue 3D,  la fenêtre d'affichage des IPOs, et une fenêtre en bandeau, tout en bas de l'écran pour avoir accès aux commandes des differents types d'objets.
    -- Un écran principal divisé en deux fenêtres horizontales: une fenêtre de modélisation 3D que je contrôle habituellement avec les touches du clavier numérique, et la fenêtre de commande.
    -- Un écran script tel qu'il a été décrit ci-dessus.
    -- Un écran sequenceur qui n'ets rien d'autre que l'écran standard du séquenceur de  blender (pour l'instant j'utilise peu le séquenceur).


     
     
    précédentScript Python
     Script python:truc 2 Suivant
    Vers le :  Haut de page

    Les questions concernant cette page  peuvent être posées sur  :
     news://news.zoo-logique.org/3D.Blender


     

     

    Livre en français
    Blender : apprenez, pratiquez, Créez, livre, Ed. Campus Press, coll. Starter Kit
    Blender Starter Kit

    Forum
    FAQ
    Lexique
    Didacticiels
    Compilations
    Blender2KT
    Débuter
    Modelage
    Blender python
    Materiaux
    Lumière
    Animation
    API python (eng)
    Archives nzn
    Statistiques
    Doc flash Sculptris
    Galerie Sculptris

    mon site de démos sur youtube