Blender (jusqu'à 2.49)
Python 
Script: créer un réseau carré de polygone.
4ieme partie: automatiser la création des facettes.
 
English Version
  Index Principal  Index Python
PrécédentPython: automatiser...des points (3/5) 
Python:  Grapheur 2D (4bis/5) Suivant

 
 
La réalisation des facettes n'est pas beaucoup plus difficile que celle des points. Il faut observer quels points devront être assemblés et dans quel ordre En reprenant les mêmes variables n, i et j. Le travail se fait une ligne après l'autre.

Pour i =0 et j=0, les points sont: 

verts[0], 
verts[1],
verts[4], 
verts[3], 
que l'on peut transformer en 
verts[i*n+j], 
verts[i*n+j+1], 
verts[(i+1)*n+j+1], 
verts[(i+1)*n+j]
On s'aperçoit rapidement que l'on peut remplir toutes les facettes en faisant varier i et j entre 0.0 et n-1. Le reste n'est que de la mise en forme.  Presque, puisqu'il faut au moins transformer la valeur n en entier, en effet les indices de liste ne peuvent être que des entiers. Il y a assez de notions développées dans ces pages pour construire une méthode qui n'est peut-être pas très élégante, elle a le mérite d'être efficace:
n0=len(range(0,n))
Mais c'est loin d'être économique et le python offre une solution beacoup plus courte comme le langage C: le transtypage. Il suffit d'écrire:
n0=int(n)
i=0, j=0
0 1 2
3 4 5
6 7 8
i=0, j=1
0 1 2
3 4 5
6 7 8
i=1, j=0
0 1 2
3 4 5
6 7 8
i=1, j=1
0 1 2
3 4 5
6 7 8

Le source du script python:
 
# [snip...] 
# on reprend le source en l'emplacement 
# exact où on l'a laissé à la page précédente.

#valeur entière de n
n0=int(n)

for i in range(0,n-1): 
      # Ici commence le premier sous-programme 
      # quatre espaces d'indentation 
      for j in range(0,n-1): 
          # Ici commence la seconde boucle 
          # huit espaces d'indentation 
          f=NMesh.Face() 
          f.v.append(me.verts[i*n0+j]) 
          f.v.append(me.verts[i*n0+j+1]) 
          f.v.append(me.verts[(i+1)*n0+j+1]) 
          f.v.append(me.verts[(i+1)*n0+j])
          # Après avoir complété a facette
          # on l'ajoute à la liste de "me"
          me.faces.append(f)
          # Fin de la boucle interne 
      #Fin de la boucle externe 

NMesh.PutRaw(me,"plane",1) 
Blender.Redraw()
# Essayer le fichier py


 
PrécédentPython: automatiser...des points (3/5)
 Python:  Grapheur 2D (4bis/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:  Pour éviter que  la facette ne soit croisée par un segment, la série de point doit donc suivre très exactement le périmètre. 

 

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