Blender (jusqu'à 2.49)
|
Python
Script:
créer un réseau carré de polygone.
4ieme
partie: automatiser la création des facettes.
|
|
English
Version
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
|
i=0, j=1
|
i=1, j=0
|
i=1, j=1
|
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 |
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. |
|