Blender (jusqu'à 2.49)
Python 
Script: créer un réseau carré de polygone.
2nd partie: itération.
English Version
  Index principal  Index Python
précédentPython: réseau carré (1/5) 
Python: automatiser...des points (3/5) Suivant

Le didacticiel précédent a permis d'apprendre à créer un polygone. Mais en modélisation 3D, il est extrèmement rare que l'on construise un objet avec un seul polygone, le plus souvent il s'agit d'un ensemble compliqué, d'un réseau, d'une résille. Il n'est evidemment pas possible d'envisager la création "à la main" de chaque polygone. Surtout quand on sait qu'un mesh de Blender peut en contenir plus de 65000. C'est ici que va se révéler la puissance du langage de programmation, dans la possibilité d'automatiser cette opération. Pour cela nous avons besoin de savoir construire une boucle itérative en python.

Créer une boucle itérative en python

Une boucle itérative pourrait correspondre au pseudo code:
 
Tant que cette variable est inférieur à cette valeur
       Exécuter ces opérations
 Suivant : on augmente cette variable d'une unité et on retourne à la ligne tant que...

En  pascal ou en modula cela donnerait:
 
For cette_variable cette_valeur do
      Begin
      executer _commande_1 ;
      executer _commande_2 ;
      End;

En  langage C:
 
for (cette_variable=a_ceci ;
       cette_variable cette_valeur;
      cette_variable++)
     {
      executer _commande_1 ;
      executer _commande_2 ;
   }

En Basic:
 
FOR cette_variable = a_ceci TO cette_variable =  cette_valeur
      executer _commande_1
      executer _commande_2
NEXT cette_variable

Dans ces langages les boucles se déroulent entre des bornes qui sont clairement définies: les limites en nombres d'itérations comme les limites du texte de la boucle elle-même. Que ces limites soient des parenthèses, les mots clefs  "begin/end" ou "for/next" le résultat est le même.

Hélas, le python est optimisé, on peut même dire qu'il a été conçu, pour travailler avec des listes.  Une boucle itérative prendra comme borne  une liste. Cela signifie  que la boucle débutera sur le premier élément de la liste, puis sautera au second et ainsi de suite. Cette opération sera effectuée au moins une fois pour chaque élément de la liste jusqu'à ce que  la fin de la liste soit  atteinte.

En  Python:
 
for  cette_variable in cette_liste :
      executer _commande_1
      executer _commande_2 

De plus cette_variable est vraiment le énième élément de cette_liste. Si cette_variable est traitée dans le corps de la fonction cela  revient à travailler directement sur l'élément en question.
Les bornes du corps de la boucle sont le signe ":" et les indentations, les retraits par rapport à la marge des lignes qui constituent le corps de la boucle. Les indentations doivent être toujours identiques et de même nature. On ne peut pas panacher des espaces et des tabulations. Un décalage supplémentaire vers l'intérieur de la page indique au python qu'il doit prendre en compte un nouveau sous-programme. Si ce sous-programme n'est pas déclaré clairement avec le signe ":" à la ligne précédente,c'est considéré comme une erreur de syntaxe.

Ce n'est pas le propos de ce didacticiel que de montrer les avantages incontestables de cette façon de procéder. Il est clair pourtant qu'il y a là de quoi être surpris, surtout si on a une déjà une certaine  expérience de la programmation.

Et nous sommes bien ennuyés car pour travailler FACILEMENT  avec notre maillage, nous avons besoin d'accéder à des valeurs qui correspondent à les lignes et des positions dans ces lignes, en fait des cellules dans un tableau bidimentionnel (niveau quatrième de collège, espace 2D  abscisses et ordonnées, rien d'impossible à comprendre).
 
 
précédentPython: réseau carré (1/5) 
 Python: automatiser...des points (3/5) 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