Blender (jusqu'à 2.49)
Python
Inséré proprement 
un nouveau script dans les menus 
 
    Début   Index
précédentLes scripts dans les menus 
Import bezier paths Suivant

(voir aussi :Nouvelle interface graphique pour le lancement des scripts et Appel des scripts à partir des menus 
 
 

1/ En-tête pour un fichier simple
2/ Le principe du site-package appliqué au menu  Scripts
3/ Le site-package ne permet pas d'utiliser le menu pour rappeler le même script 

Les rédacteurs de scripts ne pensent pas toujours à doter leur travaux d'un en-tête permettant de les faire apparaître dans le menu Scripts de Blender . C'est le genre de chose que l'utilisateur de base peut réaliser lui-même mais avec prudence . En effet, il existe  deux types de scripts  . Le premier, le script simple, constitué d'un seul et unique fichier,  se règle facilement en ajoutant quelques lignes au début . Le second, qui est constitué d'un nombre variable de modules (en général, c'est pour cette raison qu'il n'y a pas d'en-tête pour les menus) dans lesquels l'auteur a regroupé ses fonctions, est plus délicat à traité car on ne le modifie pas ni ne l'installe sans risque .

1/ En-tête pour un fichier simple

Exemple d'en-tête pour un fichier simple :
#!BPY

"""
Name: 'Paths (.svg, .ps, .eps, .ai, Gimp)'
Blender: 233
Group: 'Import'
Submenu: 'Gimp 1.0 - 1.2.5' Gimp_1_0
Submenu: 'Gimp 2.0' Gimp_2_0
Submenu: 'Illustrator (.ai) PS-Adobe-2.0' AI
Submenu: 'InkScape (.svg)' SVG
Submenu: 'Postscript (.eps/.ps) PS-Adobe-2.0' EPS
Tip: 'Import a path from any of a set of formats (still experimental)'
"""
 

Tous les en-têtes de script que l'on souhaite voir apparaître dans les menus de blender doivent commencer par cinq caractères :
#!BPY
...
Cette expression indique à l'API python que ce qui se trouvera ensuite dans l'espace de texte défini par les triples guillemets 
"""
...
"""
doit être interprété comme une mise en forme d'une hierarchie de menus.
  • Name: 'texte'
  • Blender: numéro de version
  • Group: 'type'
  • Submenu: 'texte' argument
  • ...
  • Tip: 'texte'
  • Name, Blender, Group et Tip sont obligatoires . Les guillemets simples aussi autour des chaine de caractère. En fait, tout ce qui est en gras ci-dessus est obligatoire . 
    Le texte qui suit Name sera affiché dans le menu mais ne doit pas respecter de forme particulière .  Il vaut meiux vérifier que ce nom n'est pas déjà  utilisé par un autre script .

    Le numéro de version empêchera l'utilisation avec une version antérieure qui ne contiendrait pas certaines fonctions de l'API . 

    Le  type qui suit Group doit exister dans la version correspondante . Par défaut, et en cas de doute, il est préférable de choisir le groupe Misc qui correspond à  Divers mais il faut éviter le groupe Help qui force l'affichage dans un autre menu que Scripts .

    Submenu est optionnel est doit être suivi d'un premier texte libre qui apparaitra dans le menu et d'un second qui sera passé au script lui-même comme s'il s'agissait d'un argument en ligen de commande (voir la documentation du module sys et de la propriété argv en python). 
    Enfin, le script doit se trouver dans le répertoire .blender/scripts ou dans le  répertoire qui a été défini comme pythonpath dans la fenêtre des préférences utilisateur .
     
    Attention:
    Si on souhaite modifier le python path  il faut fournir uen adresse valide : f:\didacticiel\blender\tutor\ ne passera pas alors que  f:\didacticiel\blender\tutor ne posera pas de problème .  Il est indispensable d'utiliser le bouton d'update pour reconstruire la liste . 


    2/ Le principe du site-package appliqué au menu  Scripts

    Certains scripts sont constitués de plusieurs modules . Les développeurs ayant l'habitude de nommer leurs librairies de fonctions  math.py ou matrix.py se servir de la méthode précédente pour ajouter une entrée dans le menu risque d'écraser les fichiers qui portent déjà le même nom .  La parade à ce genre de problème est toute simple :  on crée dans le répertoire .blender/scriptsun sous-répertoire pour accueillir  tous les modules et on leur ajoute un fichier __init__.py qui contient un appel aux module nécessaires . 

    Par exemple, pour  fiber2, cela donnerait :

    et le fichier __init__.py contient la ligne :
     

    import fiber2Gui

    Normalement en ajoutant dans le répertoire .blender/scripts  le fichier fiber_in_menu_misc.py (le nom exact a peu d'importance, il doit simplement être différent de ceux qui s'y trouvent déjà) qui contient ces lignes :
     

    #!BPY

    """ Registration info for Blender menus: <- these words are ignored
    Name: 'Fiber2'
    Blender: 232
    Group: 'Misc'
    Tip: 'import fiber2 from site-packages.'
    """ 
    import fiber2

    On devrait obtenir un résultat mais ce n'est  pas suffisant pour les menus de Blender. Il faut appeler directement le fichier __init__ :

    ...
    import fiber2.__init__
    ce qui revient à écrire ::
    ...
    import fiber2.fiber2Gui

    3/ Le site-package ne permet pas d'utiliser le menu pour rappeler le même script 

    C'est un phénomène assez connu : le script finit de s'exécuter mais le python ne supprime pas complètement les modules de son espace de nom . On peut le contrôler facilement en utilisant le bout de code suivant :
    import sys
    for m in sys.modules.keys():
     if m.find('fiber2')!=-1 : print m, sys.modules[m]
    On obtient l'affichage suivant dans la console dos:
    fiber2.dynoise <module 'fiber2.dynoise' from 'E:\zi^p\3DGRX\blender\blender-2.37
    -windows\.blender\scripts\fiber2\dynoise.pyc'>
    fiber2.fiber3 <module 'fiber2.fiber3' from 'E:\zi^p\3DGRX\blender\blender-2.37-w
    indows\.blender\scripts\fiber2\fiber3.pyc'>
    fiber2.math None
    fiber2.fiber2Gui <module 'fiber2.fiber2Gui' from 'E:\zi^p\3DGRX\blender\blender-
    2.37-windows\.blender\scripts\fiber2\fiber2Gui.pyc'>
    fiber2.string None
    fiber2 <module 'fiber2' from 'E:\zi^p\3DGRX\blender\blender-2.37-windows\.blende
    r\scripts\fiber2\__init__.pyc'>
    fiber2.sys None
    fiber2.Blender None
    fiber2.os None
    La solution consiste à vérifier que ces noms de modules (les fonctions ont bien été nettoyées)  ne sont plus dans ce dictionnaire et, si c'est le nécessaire,  à les supprimer dans le script d'appel :
     
     
    #!BPY

    """ Registration info for Blender menus: <- these words are ignored
    Name: 'Fiber2'
    Blender: 232
    Group: 'Misc'
    Tip: 'import fiber2 from site-packages.'
    """
    import sys
    for mod in sys.modules.keys():
     if mod.find('fiber2') !=-1 : del sys.modules[mod]

    import fiber2.__init__

    Essayer avec le fichier d'exemple
     
    précédentLes scripts dans les menus 
     Import bezier paths 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