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

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

 

在此示例中,规则 Footprint 采用字符串类型的一个参数 type。 如果该字符串等于 “residental”,则采用第一个后继(即,将当前形状拉伸 10 个单位)。

  • 如果字符串不等于 “residential”,并且当前形状的几何的面积小于 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 演示了嵌套条件和布尔运算。

注:

case 和 else 语句必须构建一个连续的块,并且不能被后继中断(就像一个块,它们与熟知的编程语言中的 if 语句不同)。

case 和 else 语句必须构建一个连续的块,并且不能被后继中断。 它们类似于 switch-case 块,并且不同于熟知的编程语言中的 if 语句。