7.2.5.4        Istruzioni SWITCH CASE e RANGE



Un'istruzione condizionale piu potente è #switch. La sintassi è la seguente...

#switch (VALORE)
#case (TEST_1)
// Questa sezione è analizzata se VALORE=TEST_1
#break // Fine primo caso

#case (TEST_2)
// Questa sezione è analizzata se VALORE=TEST_2
#break // Fine secondo caso

#range (LOW_1, HIGH_1)
// Questa sezione è analizzata se (VALORE>=LOW_1)& (VALORE<=HIGH_1)
#break // Fine terzo caso

#range(LOW_2, HIGH_2)
// Questa sezione è analizzata se (VALORE>=LOW_2)& (VALORE<=HIGH_2)
#break // Fine quarto caso

#else
// Questa sezione è analizzata se nessun altro case o
// range sono veri.
#end // Fine della parte condizionale

L'espressione decimale VALORE che segue l'istruzione #switch è valutata e comparata ai valori nelle istruzioni #case o #range. Quando si usa #case, essa è seguita da un'espressione decimale (TEST_1 nell'esempio) in parentesi. Essa è comparata a VALORE. Come al solito in POV-Ray, i confronti di valori decimali sono considerati uguali se la loro differenza è inferiore a 1e-10. Se i valori sono uguali, l'analisi continua normalmente fino ad incontrare l'istruzione #break, #else o #end. Se il confronto fallisce POV-Ray salta le istruzioni fino a quando non trova #case o #range.

Se usi l'istruzione
#range essa è seguita da due espressioni decimali (LOW_1 ed HIGH_1 nell'esempio) che sono chiuse in parentesi e separate da una virgola. Se l'interruttore (switch) VALORE cade nell'intervallo specificato allora l'analisi continua normalmente fino a che non è raggiunta l'istruzione #break, #else o #end. Se VALORE è al di fuori dall'intervallo il confronto fallisce e POV-Ray salta fino a quando non viene trovato un altro #case o #range.

Se nessuna istruzione
#case o #range ha successo è analizzata la sezione #else. L'istruzione #else è opzionale. Se non è specificata nessuna istruzione #else e nessun confronto riesce, allora l'analisi riprende dopo l'istruzione #end.

Ci può essere qualsiasi numero di istruzioni
#case o #range in qualsiasi ordine si voglia. Se una sezione viene valutata vera ma non è specificato alcuna istruzione #break, l'analisi fallirà al successivo #case o #range e continuerà fino a un #break, #else o #end. Incontrando un'istruzione #break mentre il programma è in fase di elaborazione, una sezione che ha successo provoca un immediato salto all'istruzione #end senza operare l'analisi delle successive sezioni, anche se una condizione successiva poteva essere soddisfatta.