python:pygram:cube

Table of Contents

Cube

import bpy
Pygram = bpy.data.texts["pygram.py"].as_module()

et

Pygram.cleanup()
  • Nous allons crĂ©er une fonction cube(w) pour gĂ©nĂ©rer des cubes de toutes dimensions.
  • Mais au lieu d'utiliser la fonction face() des Objets Pygram,
  • nous allons commencer par crĂ©er une fonction d'extrusion (comme celle de Blender).

Ligne

  • DĂ©couvrir les objets Point et les objets Ligne.
  • Dans les premiĂšres lignes de notre fichier,
  • Commençons par crĂ©er deux points (a et b), une ligne (l) et un vecteur (v) et 4 variables a,b,l,v :
  • CrĂ©er un point a aux coordonnĂ©es (0,0,0)
  • CrĂ©er un point b aux coordonnĂ©es (10,0,0)
  • CrĂ©er une ligne l avec a et b
  • CrĂ©er un Vecteur v : (0,10,0) de 10 unitĂ©s en Y
  • Maintenant, vĂ©rifions que nous pouvons « extruder » un point Ă  l'aide d'un vecteur :
  • CrĂ©er un point m Ă  partir du point a de la ligne l en le dĂ©plaçant Ă  l'aide du vecteur v :
m = l.a.move(v)
  • Noter que la fonction move() crĂ©er une copie du point dĂ©placĂ©.
  • Afficher les coordonnĂ©es du point m grace Ă  la fonction print() de l'objet Point() :
print(m)

et vérifier ses coordonnées dans la console.

  • Nous voyons bien que nous pouvions crĂ©er l'Ă©quivalent du point b en dĂ©plaçant le point a avec le vecteur v

Extrusion

  • Maintenant, nous allons Ă©crire une fonction qui extrude une ligne et produit une face, comme le fait Blender.
  • Écrire une fonction extrude(l,v) prenant 2 arguments : une ligne l et un vecteur v
  • Dans la fonction extrude() crĂ©ons des variables pour stocker les points a et b de la ligne l
a = l.a
b = l.b
  • Puis crĂ©er 2 nouveaux points c et d en dĂ©plaçant les points a et b de la ligne.
  • Le point a est dĂ©placĂ© en un point d
  • Le point b est dĂ©placĂ© en un point c
  • CrĂ©er un objet Pygram et utiliser les points a et b de la ligne l et les points c et d pour crĂ©er une face Ă  l'aide de la fonction face()
  • :!: Attention, il faut bien respecter les relations des points (a⇒d,b⇒c) et l'ordre des points dans la fonction face(a,b,c,d).
  • Pour terminer, ajouter dans la fonction extrude() l'appel de construction obj.build()
  • Et « renvoyer » l'objet créé (return obj)
  • Ajouter une nouvelle variable f = extrude(l,v) pour tester la fonction

  • Maintenant, changer et tester les valeurs de v : (0,0,10)

  • Et avec v : (0,10,10)

Cube

  • CrĂ©ons maintenant la fonction cube(f,v) prenant 2 arguments : f une face et v un vecteur
  • Il s'agit donc d'« extruder » un cube Ă  partir d'une face comme le fait Blender.
  • Nous avons dĂ©jĂ  la variable f que nous avons créée avec la fonction extrude()
  • Ajoutons une nouvelle variable pour l'extrusion du cube :
j = Pygram.Vector(0,0,10)
  • Ensuite commençons Ă  Ă©crire notre fonction cube()
  • La premiĂšre chose que nous allons faire, c'est de « rĂ©cupĂ©rer » la face que nous avons créée dans l'Objet Pygram. Car la variable obj que nous avons retournĂ©e de notre fonction extrude(), c'est un Objet. Ce n'est pas une Face ni un Point ni un Vecteur
  • Les Faces sont stockĂ©es dans les Objets Pygram dans une Liste.
  • Les Ă©lĂ©ments des listes sont numĂ©rotĂ©s Ă  partir de zĂ©ro
  • Pour accĂ©der aux Faces de notre Objet, nous avons une fonction get_face(n)
  • Donc ici, nous allons ajouter au dĂ©but de notre fonction cube() cette ligne :
def cube(f,v):
  face = f.get_face(0)
  • VĂ©rifions dans la console que les donnĂ©es correspondent Ă  ce que nous avons en tĂȘte :
def cube(f,v):
  face = f.get_face(0)
  print(face)
  • Puis nous ajoutons un nouvel objet avec lequel nous allons « extruder » notre face
 obj = Pygram.Object()
  • À prĂ©sent, nous allons crĂ©er les faces du cube en dĂ©plaçant avec move() les 4 points de la face.
  • Nous pouvons commencer par dĂ©placer, Ă  la verticale, le point a1 ainsi :
  a1 = face.a.move(j)
  • Rappelons-nous que v sera Ă©gale Ă  j quand nous aurons fini d'Ă©crire la fonction et que nous l'appellerons avec les variables prĂ©cĂ©demment créées (l'Objet f et le Vecteur j)
  • Continuons par crĂ©er les 3 autres points Ă  la verticale de b,c et d que nous nommons b1,c1 et d1.
  • Ensuite ajoutons une premiĂšre face avec la fonction face() de notre Objet obj et pour commencer, avec les point c,d,d1 et c1
  • Ajoutons ensuite la fonction obj.build()
  • Puis sur une nouvelle ligne, testons notre fonction
cube(f,j)

  • Notez bien la maniĂšre de fabriquer les faces : dans le sens inverse des aiguilles d'une montre :

  • Si, par exemple vous inversez :
    • obj.face(c,d,c1,d1)
    • au lieu de
    • obj.face(c,d,d1,c1)
  • Voici le rĂ©sultat :

  • Pour terminer, ajoutez, une par une, les autres faces et testez votre fonction Ă  chaque Ă©tape

  • Ajoutons uniquement 5 faces au cube car nous n'aurons pas besoin de la face au sol
  • Pour terminer ajoutons, avant la fonction build() le nom de l'objet :
obj.name = "cube"

đŸ˜