可以针对不同的条件生成不同的后继。条件可以通过规则参数、形状属性或几何函数来表示。

PredecessorShape --> 
                     case condition1 : Successor1 
                     case condition2 : Successor2
                     ...
                     else: SuccessorN

 

示例 1

Footprint(type) -->
      case type == "residential" : extrude(10)
      case geometry.area/2 < 200 : extrude(30)
      else : NIL

 

在此示例中,足迹规则采用字符串类型的一个参数type。如果字符串等于“residental”,则取第一个后继(即当前形状被挤压 10 个单位)。

  • 如果字符串不等于“住宅”,并且当前形状的几何面积小于 400,则取第二个后继(即当前形状被挤压 30 个单位)。
  • 如果以上两个条件都不为真,则取第三个后继并生成NIL形状(NIL是特殊形状符号,意思是“不生成形状”)。
  • 条件可以任意与运算符&&||组合 (布尔和/或运算),并且可以使用数学表达式。
  • 也可以嵌套条件。嵌套级别没有限制。

示例 2

Footprint(type) -->
      case type == "residential" || type == "park": 
        case geometry.area/2 < 200 && geometry.area > 10 : extrude(10)
        else: extrude(15)
      case type == "industrial" : extrude(100)
      else : NIL

 

示例 2 演示了嵌套条件和布尔运算。

笔记:

and 语句必须构建一个连续的块,并且不能被后续块打断(就像一个块,它们与众所周知的编程语言中的if语句非常不同)。

caseelse语句必须构建一个连续的块,并且不能被后继者打断。它们类似于switch-case块,但不同于众所周知的编程语言中的 if 语句。