Blender (jusqu'à 2.49)
Python 
Script: créer un réseau carré de polygone.
1ère partie.

 
English Version
  Index principal  Index Python
précédentPython: Introduction 
Python: Boucle itérative (2/5) Suivant

Créer un carré avec Blender ne pose aucun problème: Barre espace, puis Mesh et enfin Plane. Le logiciel insère automatiquement l'objet à l'emplacement exact du curseur.

Imaginez un instant que grâce au python il soit possible de se libérer de la contrainte du curseur et de créer ce carré n'importe où dans l'espace en fournissant les coordonnées qui nous conviennent. C'est, peut-être, un peu plus compliqué que les quelques clics de souris de la méthode classique.

Dans ce didacticiel vous apprendrez  :

- à créer un fichier texxte python ".py"
- à importer un module,
- à créer un objet "mesh",
- à accéder et à modifier les données correspondant aux sommets de ce "mesh".


 Créer le fichier ".py":
 
1/  Passez dans l'éditeur de texte : MAJ-F11.
2/   Cliquez sur le bouton du navigateur de bloc de données (le petit carré avec un tiré blanc)
3/   Cliquez ADD NEW, vous avez maintenant une page active dans laquelle il est possible d'ajouter du texte, ce texte pourra être exécuté par la combinaison de touches ALT-p
4/ Modifiez le nom de fichier pour un sauvegarde ultérieure, cliquez sur le bouton [TX:Text.001], remplacez ce texte par "essai.py"
Importer les modules:
5/   Le curseur de la fenêtre de texte est rouge. A son emplacement écrivez sans laisser d'espace: 
 
import Blender

après la dernière lettre ne laissez aucun espace. Appuyez sur la touche [Entrée].Cette ligne indique au python qu'il doit charger le module Blender qui contient les différents modules qui contiennent, eux-même, les méthodes et les champs de données qui permettent d'intervenir sur les objets et les commandes du logiciel. 

Il faut imaginer le module Blender comme une poupée gigogne. A l'intérieur sont enfermés d'autres modules qui contiennent des méthodes et des propriétés, nous appellerons cela, plutôt, des champs de données. Les méthodes permettent d'intervenir et de modifier les propriétés. 

6/   Sur la ligne suivante ajoutez:
 
from Blender import NMesh

cette ligne évite d'alourdir le texte du fichier par des reférences continuelles au module principal. Sans elle vous seriez obligés d'écrire sans cesse : "Blender.NMesh.références". 

Créer un objet "Mesh"
7/   Le module NMesh contient une méthode, GetRaw(), que l'on doit utiliser pour obtenir la création en mémoire d'un objet "mesh". Cet objet est créé dans un tampon.

Notez que cet objet peut contenir la copie d'un autre mesh qui se trouve déjà dans la scène si on en passe le nom exact à la majuscule près. Exemple: me=GetRaw("mesh.001"), placera en mémoire une copie de travail de  "mesh.001" à laquel on pourra ensuite accéder par le nom "me".

 Sur la troisième ligne ajoutez:
 
me= NMesh.GetRaw()

Acceder au "mesh" et le modifier
8/ "me" est un objet mesh. Cet objet contient des méthodes et des propriétés. Pour l'instant les propriétés sont vides. Il n'y rien à traiter. Avant de commencer à intervenir à ce niveau il est bon de comprendre comment sont gérées les  informations touchant à la forme des objets mesh dans un logiciel 3D. 

A la base, il y a des points, ou sommets. Ces sommets sont groupés en un ensemble ordonné, une liste, un tableau à une dimension, dont  l'indice de départ est  zéro, comme les tableaux en langage C. Il y a donc le point [0], puis le point[1] et le point[2] ,etc. L'indice du dernier point est [nombre de point -1]. Chaque point est lui-même constitué d'un tableau, une autre liste,  à trois entrées contenant les coordonnées x,y et z.
 
Point1:__verts[0]------>{x[-1.0],y[-1.0],z[0.0]}
Point2:__verts[1]------>{x[1.0],y[1.0],z[0.0]}
Point3:__verts[2]------>{x[-1.0],y[0.0],z[0.0]}
Point4:__verts[3]------>{x[0.0],y[0.0],z[0.0]}
Point5:__verts[4]------>{x[1.0],y[0.0],z[0.0]}

  ....

Exemple d'une série de Points

C'est géométriquement à partir des points que sont constituées les facettes. Elles ont aussi plusieurs propriétés. 
La plus importante:  la liste des sommet, un tableau  qui référence les  adresses des coordonnées des points. Dans Blender les facettes peuvent avoir 3 ou 4 sommets. Dans d'autres logiciels, la limite du nombre de sommets par facette peut être: 65000, ça laisse rêveur.
 
Face1:___f[0]---->v.[0,3,2]
Face2:___f[1]---->v.[0,1,3]
Face3:___f[2]---->v.[1,4,3]
  .... 
Exemple d'une série de faces

Clarifions notre objectif: créer un réseau de faces. Nous n'essayerons pas d'attribuer une couleur. Dans la situation actuelle nous partons de  rien. Dans l'ordre: il nous faut d'abord indiquer que le mesh n'a pas de face coloriée et que le matériau n'est pas de type sticky. Ensuite Il nous faut construire une liste de sommets  et, en dernier lieu, utiliser ces sommets pour fabriquer des faces. 

La procédure de création de sommets, qui est très indirecte, passe par deux phases.
Phase 1: un objet  sommet est créé en mémoire à l'aide de la méthode NMesh.Vert(). Cette procedure reçoit entre ses parenthèses des paramètres qui correspondent aux coordonnées 3D du sommet. 
 
v=NMesh.Vert(1.0,0.0,0.0)

Phase 2: le sommet v est ajouté à la liste sommetde "me" qui se nomme "verts" en utilisant la méthode standard d'ajout d'élément des listes  du python "append()".  En python, les listes sont des objets qui ont des méthodes et des propriétés.
 
me.verts.append(v)

On recommence  l'opération un nombre de fois suffisants pour créer au moins une face:
 
v=NMesh.Vert(1.0,1.0,0.0)
me.verts.append(v)

v=NMesh.Vert(0.0,1.0,0.0)
me.verts.append(v)

v=NMesh.Vert(0.0,0.0,0.0)
me.verts.append(v)

La création de face est presque identique. Il y a une phase supplémentaire car il faut remplir la liste de point de la facette avant de l'ajouter à "me".

Phase 1: création d'un objet facette en mémoire avec la méthode "NMesh.Face()"
 
f=NMesh.Face()

Phase 2: remplissage de la facette avec les adresses des coordonnées des points. Ces adresses sont conservées dans une liste qui porte le doux nom de "v"
 
f.v.append(me.verts[0])
f.v.append(me.verts[1])
f.v.append(me.verts[2])
f.v.append(me.verts[3])

Phase 3:  nous ajoutons "f " à la liste de face de "me"
 
me.faces.append(f)

Il ne reste plus qu'à introduire ce nouvel objet dans la liste d'objets  de la scène actuelle de Blender en utilisant la méthode "PutRaw(mesh,[nom, renormalise])" du module NMesh. Les paramètres attendus sont le nom du mesh sur lequel nous avons travaillé et le "nom" qu'il devrait avoir dans la liste d'objet de Blender. Enfin,  le dernier paramètre oblige Blender à recalculer le vecteur normal sur chaque sommet. 
 
NMesh.PutRaw(me,"plane",1)

Il ne reste plus qu'à demander à Blender de mettre à jour  l'écran en le redessinant avec le nouvel objet.
 
Blender.Redraw()

Le combo magique: Alt-p et Ô miracle un carré vient de surgir à l'écran!!
Un autre combo: Alt-s ( qui fonctionne très bien sur les très anciennes versions de Blender, cependant un bug en rend l'utilisation impossible pour la sauvegarde initiale dans les versions supérieures à la 2.12, il est préférable d'utiliser Alt-Shift-f; après une première sauvegarde Alt-s donnera pleinement satisfaction jusqu'à la fin de la session), et la fenêtre d'enregistrement fichier apparaît. Il est désormais possible de donner un nom au fichier texte en remplaçant le "nom_de_fichier_courant.blend" qui s'est automatiquement affiché par "essai.py"
 

précédentPython: Introduction 
 Python: Boucle itérative (2/5) Suivant
Vers le Haut de page

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


NOTE 0
VARIABLE
Il n'est pas nécessaire d'indiquer au python de quel type de variable il s'agit. Alors que ce serait une grave erreur dans d'autres langages. Ce petit détail qui rappelle le bon temps du gwbasic.
NOTE 1
SOMMETS
Blender associe d'autres paramètres aux sommets comme le vecteur "normal",  la coordonnée UV pour le plaquage de texture et la valeur d'index qui doit être très pratique avec la fonction Hash.
NOTE 2
les autres propriétés de l'objet face:
  - la valeur de couleur qui est codée dans un tableau à 4 entrées : Rouge, Vert, Bleu, Alpha.
   -un tableau d'indices qui référence les matériaux qui sont utilisés sur cette facette. Dans Blender la valeur qui se trouve à cet endroit renvoie à un autre tableau de matériaux qui est celui utilisé par l'objet mesh. 
NOTE 3
Pour accéder à un élément d'une liste en particulier il faut passer son numéro entre crochet juste après le nom. Exemple: liste_nom=[n1,n2,n3,n4] , pour attribuer la valeur du numero 3 à une autre variable, il faut écrire: nom_variable=liste_nom[2],le contenu de nom_variable sera n3

 

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