Aller au menu - Aller au contenu

Icône Les macros

Mise à jour : 01/07/2010
525 visites depuis 7 jours, dont 7 sur ce chapitre classé 218/786
Les macros jouent un rôle crucial dans l'allègement de votre quantité de travail. :D
En effet, elles permettent de définir une fois pour toute une action longue et pénible, pour après l'utiliser bien plus facilement !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

A quoi ça sert ?

Les macros sont très utiles dès qu'on veut répéter souvent une action, qui ne peut pas être simplifiée avec de simples boucles.
Par exemple, imaginez que l'on veuille faire deux tables presque identiques, à une différence près : l'une des deux serait un petit peu plus basse que l'autre.
:D Pas de problème, me direz-vous, utilise un scale !
Ce serait une idée, en effet, mais ce n'est pas possible : un scale aplatirait toute la table, et donc diminuerait son épaisseur ! :(
Malheur ! Nous sommes donc damnés !
Mais non ! :D La solution : les macros !
Les macros permettent de définir toute une action (allant d'un simple calcul à la définition d'un objet complexe) en prenant un certains nombres de paramètres qui modifieront le résultat.
Par exemple, on pourrait faire une macro qui prend en paramètre la hauteur de la table, et qui crée cette table : de cette manière, on ne fait qu'une fois le long et fastidieux travail de créer la table, et il ne reste plus qu'à appeler deux, trois ou mille fois notre macro, sans effort supplémentaire ! :p Merveilleux, non ?

Macros de calcul

Les macros les plus simples effectuent un simple calcul : par exemple, on peut faire une macro qui additionne deux nombres, mais ce serait relativement stupide puisque le signe + le fait bien plus rapidement. >_<
Nous allons faire une macro qui permet de calculer la factorielle d'un nombre, grâce à une boucle.

Voici comment on définit une macro :
Code : Autre
1
2
3
#macro factorielle(n)

#end

On a ainsi définit une macro du nom de factorielle, qui prend comme unique paramètre n. Le #end permet d'indiquer que l'on a finit de définir la macro.
Tout le code utilisé pour calculer la factorielle de n sera donc située entre le #macro et le #end.
Le reste est surtout mathématiques, donc je ne m'attarderai pas dessus :
Code : Autre
1
2
3
4
5
6
7
8
9
#macro factorielle(n)
  #local i = n;
  #local resultat = 1;
  #while (i > 1)
    #local resultat = resultat * i;
    #local i = i-1;
  #end
  resultat
#end

Une chose devrait vous étonner : dans toute cette macro, on n'a jamais utilisé #declare, mais #local. Leur rôle est le même : donner une valeur à une variable.
o_O Dans ce cas, pourquoi ne pas utiliser #declare ? Tu veux nous embrouiller ??
Attention ! J'ai dit qu'ils avaient le même rôle, mais pas le même effet ! :p
#local permet d'utiliser des variables qui n'existeront que dans la macro en cours. De cette façon, on ne risque pas d'empiéter sur d'autres variables, en particuliers des variables d'autres macros...
A part cette différence, #local et #declare s'utilisent exactement de la même manière. Rien de bien compliqué, donc : il faut juste faire attention à les utiliser au bons endroits (dans une macro pour #local, et partout ailleurs pour #declare).

On a mit resultat tout seul à la fin de la macro, ce qui veut dire que, lorsque l'on utilisera la macro, le résultat sera simplement mit à la place. Par exemple, pour faire une sphère de rayon 3! (3! = factorielle(3) = 6) :
Code : Autre
1
2
3
4
sphere {
  <0,0,0>
  factorielle(3)
}

Difficile de faire plus simple ! :D

Macros d'objets

Même si une macro peut servir pour calculer des valeurs, elles sont bien plus souvent utilisées pour créer un objet.
Revenons à notre table. Nous allons créer une macro table qui permet de choisir la hauteur de sa table. Le paramètre à prendre sera donc hauteur. Il ne reste plus qu'à construire la table à l'intérieur de la macro :
Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#macro table(hauteur)
  union {
    box {
      // Premier pied
      <-0.6, 0, -1.1>
      <-0.4, hauteur, -0.9>
    }
    box {
      // Second pied
      <0.6, 0, -1.1>
      <0.4, hauteur, -0.9>
    }
    box {
      // Troisième pied
      <-0.6, 0, 1.1>
      <-0.4, hauteur, 0.9>
    }
    box {
      // Quatrième pied
      <0.6, 0, 1.1>
      <0.4, hauteur, 0.9>
    }
    box {
      // Planche de la table
      <-1, hauteur, -1.5>
      <1, hauteur + 0.2, 1.5>
    }
    pigment { rgb <1,0,0> }
  }
#end


Pour l'utiliser, il ne reste plus qu'à faire :
Code : Autre
1
2
3
object {
  table(1)
}

Exactement comme si table(1) était une variable qui contenait la table.

Les paramètres que prend une macro peuvent contenir n'importe quoi : un nombre, un objet, une couleur, ... On va donc améliorer notre macro pour que l'on puisse également choisir la couleur de la table. :D
Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#macro table(hauteur, couleur)
  union {
    box {
      // Premier pied
      <-0.6, 0, -1.1>
      <-0.4, hauteur, -0.9>
    }
    box {
      // Second pied
      <0.6, 0, -1.1>
      <0.4, hauteur, -0.9>
    }
    box {
      // Troisième pied
      <-0.6, 0, 1.1>
      <-0.4, hauteur, 0.9>
    }
    box {
      // Quatrième pied
      <0.6, 0, 1.1>
      <0.4, hauteur, 0.9>
    }
    box {
      // Planche de la table
      <-1, hauteur, -1.5>
      <1, hauteur + 0.2, 1.5>
    }
    pigment { rgb couleur }
  }
#end

Et on l'utilise :
Code : Autre
1
2
3
4
5
6
7
8
9
10
11
#include "colors.inc"

object {
  table (1, <1,0,0>)
  translate <-1.5,0,0>
}

object {
  table (0.7, Blue)
  translate <1.5,0,0>
}

C'est aussi simple que ça !
Pour vous entraîner, vous pouvez par exemple améliorer encore cette macro, pour pouvoir choisir la largeur et la longueur de la table, voire même son épaisseur et la largeur des pieds...
Un autre intérêt est que si vous voulez un jour améliorer votre table en la rendant plus jolie, il suffira de modifier la macro sans toucher au reste de la scène ^^

Q.C.M.

A quoi sert une macro ?
Où met-on les instructions utilisée par une macro ?

Statistiques de réponses au QCM

Comme vous avez pu le constater, les macro sont vraiment très puissantes, et offrent de nombreuses possibilités. Si vous cherchez un moyen ultime pour simplifier votre travail, voici l'outil idéal ! :p
Chapitre précédent Sommaire Chapitre suivant

Partager

Il n'y a pas encore de commentaire pour ce tuto.