import Blender
from Blender import NMesh

  # Quelques fonctions du module mathematiques de  Python
  # peuvent se reveler utiles,  le python, grand econome,
  # ne charge que le strict minimum lorsqu'il est sollicite
  # il est necessaire de demander le reste...
import math
from math import *

  # Creation du reseau de polygones
me=NMesh.GetRaw()

  # Sans aborder le probleme des variables locales
  # et des variables globales il vaut mieux (je prefere)  declarer les 
  # compteurs en dehors des sous-programmes 
i=0.0
j=0.0

  #  Les strictes conditions du didacticiel
  # on range la valeur 9 dans une variable maxpoint
maxpoint=32.0*32.0

  # On applique systematiquement:
  # on tire la racine carre de maxpoint avec 
  # la fonction sqrt()
n=sqrt(maxpoint)
print n

for i in range(0,n):
      # Ici commence le premier sous-programme
      # quatre espaces d'indentation
    print i
    for j in range(0,n):
          # Ici commence la seconde boucle
          # huit espaces d'indentation
        print j
        x=sin(j*pi*2/(n-1))*cos(-pi/2+i*pi/(n-1))*2
        y=cos(j*pi*2/(n-1))*(1-cos(-pi/2+i*pi/(n-1)))*2
        z=sin(-pi/2+i*pi/(n-1))*2
        v=NMesh.Vert(x,y,z)
        me.verts.append(v)
        # Fin de la boucle interne
    #Fin de la boucle externe


#valeur entiere de n
n0=len(range(0,n))
print n0

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]) 
        # Apres avoir complete 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()