Maison
Module
import bpy
Pygram = bpy.data.texts["pygram.py"].as_module()
Volumes = bpy.data.texts["volumes.py"].as_module()
Pygram.cleanup()
Test
 
import bpy
Pygram = bpy.data.texts["pygram.py"].as_module()
Volumes = bpy.data.texts["volumes.py"].as_module()
Pygram.cleanup()
 
a = Pygram.Point(0,0,0)
b = Pygram.Point(10,0,0)
l = Pygram.Line(a,b)
v = Pygram.Vector(0,10,0)
j = Pygram.Vector(0,0,10)
 
f = Volumes.extrude(l,v)
c = Volumes.cube(f,j)
print(c)
-  Parfait ! 
-  Ah oui mais le - print(c)« renvoie »- Nonedans la console.
 
-  Mais oui, notre fonction - cube()dans- volumes.pyne renvoie rien,
 
-  … None ! 
📢 Object: cube
📢 Face: a 📢 Point:(0,0,0) b 📢 Point:(10,0,0) c 📢 Point:(10.0,10.0,0.0) d 📢 Point:(0.0,10.0,0.0)
📢 Face: a 📢 Point:(10.0,10.0,0.0) b 📢 Point:(0.0,10.0,0.0) c 📢 Point:(0.0,10.0,10.0) d 📢 Point:(10.0,10.0,10.0)
📢 Face: a 📢 Point:(10,0,0) b 📢 Point:(10.0,10.0,0.0) c 📢 Point:(10.0,10.0,10.0) d 📢 Point:(10.0,0.0,10.0)
📢 Face: a 📢 Point:(0,0,0) b 📢 Point:(0.0,10.0,0.0) c 📢 Point:(0.0,10.0,10.0) d 📢 Point:(0.0,0.0,10.0)
📢 Face: a 📢 Point:(0,0,0) b 📢 Point:(10,0,0) c 📢 Point:(10.0,0.0,10.0) d 📢 Point:(0.0,0.0,10.0)
Fonction
-  Regroupons les variables qui permettent de générer un cube dans une nouvelle fonction que nous appelons - house(x,y,z)qui prendra 3 arguments nous permettant de positionner cette « maison » dans l'espace.
 
-  Utiliser la fonction - rename()pour renommer l'objet en- house
 
def house(x,y,z):
    a = Pygram.Point(0,0,0)
    b = Pygram.Point(10,0,0)
    l = Pygram.Line(a,b)
    v = Pygram.Vector(0,10,0)
    j = Pygram.Vector(0,0,10)
    f = Volumes.extrude(l,v)
    c = Volumes.cube(f,j)
    c.rename("house")
house(0,0,0)
-  À présent : 
-  Changer les valeurs des variables présentes dans la fonction - house()pour produire un cube aux dimensions suivantes : 5m x 5m en plan et 2.5m de hauteur
 
-  Renommer la variable - jen- hpour plus de lisibilité (h pour height)
 
-  Évidemment, il faut aussi renommer - jen- hdans l'appel de la fonction- cube()…
 
 
Toit
import bpy
Pygram = bpy.data.texts["pygram.py"].as_module()
Volumes = bpy.data.texts["volumes.py"].as_module()
Pygram.cleanup()
 
def cube(f,v):
  ...
 
 
def house(x,y,z):
    a = Pygram.Point(0,0,0)
    b = Pygram.Point(5,0,0)
    l = Pygram.Line(a,b)
    v = Pygram.Vector(0,5,0)
    h = Pygram.Vector(0,0,2.5)
    f = Volumes.extrude(l,v)
    c = cube(f,h)
    c.rename("house")
 
house(0,0,0)
-  Maintenant, il s'agit de modifier la fonction - cube()pour y ajouter les 4 nouvelles faces du toit.
 
-  Pour construire les deux pans inclinés et les deux  pignons- , il nous faut trouver le centre du segment (a1,b1) qui correspond à la ligne supérieure du cube, et nous aurons également besoin de (c1,d1). 
-  Pour ce faire, nous allons utiliser la fonction - center()de l'objet- Line
 
-  Dans notre fonction - cube()nous avons commencer par créer les points- a1,- b1, … en créant des copies par déplacement des point- a,- b. Voici la démarche pour créer les points de construction de la toiture à l'aide de ces points :
 
    # Line 1
    line_1 = Pygram.Line(a1,b1)
    center_1 = line_1.center()
    p1 = center_1.move(v) # move vertically
    print("This is my Line #1")
    print(line_1)
-  Réaliser la même opération sur l'autre façade à partir des points (c1,d1) pour créer une ligne - line_2et un point- p2
 
-  Ensuite il s'agit de créer un premier pan incliné à partir des points que nous venons de créer avec la fonction - face()de l'objet Pygram.
 
 
 
-  Dernière étape : ajouter les pignons 
-  Ici, il s'agit d'ajouter des faces triangulaires 
-  Utiliser la fonction - tri(a,b,c)de l'objet Pygram
 
 
-  Et voilà ! 
-  Pour terminer, nous pouvons créer trois petites maisons en modifiant la fonction - house(x,y,z):
 
-  Ajouter une variable - wpour la largeur de la maison qui correspond à la longeur de la Ligne- l, et modifier la création des points- aet- bpour qu'ils prennent en compte les coordonnées- x,y,zde la fonction.
 
-  Ajoutons maintenant les trois appels de fonction - house()aux trois coordonnées- (0,0,0),- (5,0,0)et- (10,0,0).
 
-  Pour terminer, renommer la fonction - cube()en- house_volume()
 
-  👏 
Maison alternative
-  Cet exercice comporte un certain nombre de difficultés. 
-  En cas de blocage, il est bon de prendre un chemin détourné. 
-  Il s'agit d'essayer de faire les mêmes choses, mais plus simplement. 
-  3) Pour terminer, renommer - roof()en- house()
 
-  4) Votre fonction est maintenant identique à la maison « non-alternative », telle qu'elle est décrite plus haut. Pour terminer, il faut donc générer 3 petites maisons comme l'exercice le demande. Relire l'énoncé depuis le début, si nécessaire. 
-  Et voilà :)