Previous:The #ifdef and #ifndef Directives Main Index Next:The #while...#end Directive
A more powerful conditional is the #switch
directive. The syntax is as follows...
- #switch (
Switch_Value )
SWITCH_CLAUSE... [#else
TOKENS...] #end
- #case(
Case_Value )
TOKENS... [#break
] |
- #range(
Low_Value ,
High_Value )
TOKENS... [#break
]
The TOKENS are any number of POV-Ray keyword, identifiers, or punctuation and (
Switch_Value )
is a float expression. The parentheses are required. The #end
directive is required. The SWITCH_CLAUSE comes in two varieties. In the #case
variety, the float Switch_Value is compared to the float Case_Value. If they are equal, the condition is true. Note that values whose difference is less than 1e-10 are considered equal in case of round off errors. In the #range
variety, Low_Value Switch and High_Value are floats separated by a comma and enclosed in parentheses. If Low_Value <= Switch_Value and Switch_Value<=High_Value then the condition is true.
In either variety, if the clause's condition is true, that clause's tokens are parsed normally and parsing continues until a #break
, #else
or #end
directive is reached. If the condition is false, POV-Ray skips until another #case
or #range
is found.
There may be any number of #case
or #range
clauses in any order you want. If a clause evaluates true but no #break
is specified, the parsing will fall through to the next #case
or #range
and that clause conditional is evaluated. Hitting #break
while parsing a successful section causes an immediate jump to the #end
without processing subsequent sections, even if a subsequent condition would also have been satisfied.
An optional #else
clause may be the last clause. It is only executed if the clause before it was a false clause.
Here is an example:
#switch (VALUE) #case (TEST_1) // This section is parsed if VALUE=TEST_1 #break //First case ends #case (TEST_2) // This section is parsed if VALUE=TEST_2 #break //Second case ends #range (LOW_1,HIGH_1) // This section is parsed if (VALUE>=LOW_1)&(VALUE<=HIGH_1) #break //Third case ends #range (LOW_2,HIGH_2) // This section is parsed if (VALUE>=LOW_2)&(VALUE<=HIGH_2) #break //Fourth case ends #else // This section is parsed if no other case or // range is true. #end // End of conditional part
Previous:The #ifdef and #ifndef Directives Main Index Next:The #while...#end Directive