vers l'index général de l'aide / vers l'index des directives

commutateurs (#switch - #case - #range)

objectif

Exécuter des portions de code, en fonction de la valeur d'une variable donnée. Les commutateurs permettent d'éviter la mise en place de branchements #if en cascade (difficiles à gérer).

compatibilité

POV-Ray 3.0 +sup.

syntaxe

#switch (Variable)
 #case (Valeur1) 
  (... code à executer si Variable = Valeur1 ...)
 #break
 
 #range (Valeur2,Valeur3)
  (... code à executer si Valeur2 <= Variable <= Valeur3 ...)
 #break

 #else
  (... code à exécuter si aucune autre condition n'a été remplie ...)

#end
 

La variable (attention, ce n'est pas une condition !) spécifiée après #switch va être comparée à des valeurs ou fourchettes de valeurs, et provoquer l'exécution de portions de code suivant le résultat de ces comparaisons.

#case, suivi d'une valeur entre parenthèses, compare cette valeur et la valeur de la variable. Si elles sont égales, le code situé avant #break est exécuté, puis l'interpréteur passe directement aux instructions situées après #end.

#range, suivi de deux valeurs entre parenthèses, vérifie si la valeur de la variable est située dans la fourchette entre ces deux valeurs (comprises). Si c'est le cas, le code situé avant #break est exécuté, puis l'interpréteur passe directement aux instructions situées après #end.

On peut placer autant de tests qu'on le veut dans une directive #switch.

Attention, le premier test qui s'avère vrai renvoie l'interpréteur vers #end dès que #break est rencontré, et les tests suivants ne seront pas évalués. Cependant, l'omission volontaire de #break permet d'éviter cela, et fait en sorte que le #case ou le #range suivant soit également évalué, quel que soit le résultat.

exemple

#declare Var1=6;
#switch (Var1)
 #case (8) 
  sphere {<0,0,0>,2 pigment {Red}} //ne sera pas exécuté
 #break
 
 #range (0,7)
  sphere {<4,0,3>,2 pigment {Green}} //sera exécuté, puis passe à #end
 #break

 #range (8,12)                       //ne sera même pas testé !
  sphere {<4,0,3>,2 pigment {Yellow}}  
 #break

 #else
  sphere {<0,0,0>,2 pigment {Blue}} //ne sera pas exécuté, puisque un des
                                    //tests était vrai.
#end

Rédacteur: Fabien Mosen