Les conditions classiques
En utilisant une condition, vous pouvez décider de n'utiliser une partie du code
qu'à une condition (si une certaine variable vaut 3 par exemple, ou si elle est plus petite que 12, ...).
Les conditions ne fonctionnent qu'avec les nombres (éventuellement décimaux) ! Impossible donc de comparer des chaînes de caractères ou des objets.
Les différentes comparaisons possibles sont :
- L'égalité, avec le signe "=" (un seul égal) : la condition sera vraie uniquement si les deux nombres comparés sont égaux.
- L'inégalité, avec le signe "!=" : la condition sera vraie si les deux nombres sont différents.
- La supériorité (ou l'infériorité) stricte, avec le signe ">" (ou "<") : la condition sera vraie uniquement si le premier nombre est strictement plus grand (ou plus petit) que le second.
- La supériorité (ou l'infériorité) large, avec le signe ">=" (ou "<=") : la condition sera alors vraie si le premier nombre est plus grand (ou plus petit) ou égal au second.
Les conditions s'utilisent ainsi :
Code : Autre1
2
3
4
5
| #if (condition)
(...)
#end |
ou bien
Code : Autre1
2
3
4
5
6
7
8
9
| #if (condition)
(...)
#else
(...)
#end |
(En remplaçant
condition par la condition en question, et en ajoutant quelque chose au milieu.)
Dans le deuxième cas, ce qu'il y a entre
#if et
#else sera utilisé si la condition est vraie ; ce qu'il y a entre
#else et
#end sera utilisé si la condition est fausse.
Voici un exemple :
Code : Autre1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include "colors.inc"
#declare maSphere = sphere {
<0,0,0>
1
pigment { Red }
};
#declare a = 3;
#if (a > 4)
object {
maSphere
}
#end
#declare a = 5;
#if (a > 4)
object {
maSphere
translate <2,0,0>
}
#end |
Au final, la deuxième sphère apparaîtra, mais pas la première. Facile à comprendre, non ?
Notez bien les parenthèses autour de la condition : elles sont obligatoires.
Code : Autre
Ne fonctionnera pas !
Les conditions de déclaration
Il existe également un autre type de condition : on peut ainsi n'exécuter une partie du code que si une variable a déjà été définie (ou au contraire n'a jamais été définie),
qu'elle que soit sa valeur.
Malgré son apparence relativement inutile, ce type de condition sera très utilisé si vous devez créer vos propres
include. Vous vous souvenez du problème évoqué au chapitre précédent ? Le risque de déclencher une inclusion en boucle, ce qui pourrait causer un paradoxe spatio-temporel et ainsi détruire l'univers... et bien, avec ces conditions, aucun risque ! Regarder donc ce bout de code :
Code : Autre1
2
3
4
| #ifndef(mon_fichier_securite)
#declare mon_fichier_securite = 1;
(...)
#end |
#ifndef(mon_fichier_securite) n'exécute le code qui suit que si la variable (ici
mon_fichier_securite) n'a jamais été défini. Comme les conditions classique, il ne faut pas oublier les parenthèses autour de la condition, ni le
#end à la fin.
Vous voyez ce qui va se passer ? La première fois que POV-Ray va entrer dans votre fichier pour le lire, la variable
mon_fichier_securite n'existera pas, donc la condition sera vraie et le code sera lu. Mais la fois suivante,
mon_fichier_securite aura la valeur 1, donc sera défini... Et le code sera simplement ignoré ! De cette manière, on évite d'être inclus une infinité de fois, ce qui peut vous sauver la vie
Pour vérifier qu'une variable a déjà été définie, il faudra utiliser
#ifdef(ma_variable) à la place de
#ifndef(ma_variable).
Ignorer une partie de code
Souvent, vous aurez besoin d'ignorer purement et simplement une portion de votre scène, principalement afin de mener des tests. Bien qu'il soit tentant d'utiliser les commentaires pour cela, c'est très déconseillé.
A la place, utilisez une condition toujours fausse :
Code : Autre1
2
3
4
5
6
7
8
9
10
11
12
13
| sphere {
// Cette sphère apparaîtra.
<0,0,0>
1
}
#if (0)
sphere {
// Celle-ci, non.
<1,0,0>
1
}
#end |