|
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. |
|