规则可以参数化,即可以定义带有参数的签名并在生成期间选择匹配的签名。

笔记:

不需要显式的参数类型,CGA 编译器会自动查找参数的类型。CGA 语法中共有三种类型:float、boolean 和 string。浮点类型用于所有数字(也包括整数)。对于每种类型,还有一个数组变体:浮点数组、布尔数组和字符串数组。

示例 1

Lot               --> s('0.8,'1,'0.8)
                      center(xz) 
                      Footprint(20)
                      
Footprint(height) --> extrude(height*0.8)

 

在执行规则Lot期间,会生成一个带有形状符号Footprint和浮点参数“20”的新形状。此外,height参数的值为 20。

笔记:

可以使用浮点参数构建任意数学表达式。

示例 2

Lot                    --> s('0.8,'1,'0.8) 
                           center(xz) 
                           Footprint(20,geometry.area)

Footprint(height, area) --> t(0,0,1) 
                           extrude(height) 
                           Envelope(area)

Envelope(area)         --> split(y) { ~4 : Floor(area) }*

 

Footprint规则采用两个参数,EnvelopeFloor规则采用一个参数。

笔记:

注意区域是如何从规则传递到规则的。

示例 3

Lot                    --> Footprint("just an example")

Footprint(height,area) --> t(0,0,1) 
                           extrude(height) 
                           Envelope(area)
                           
Footprint(text)        --> print(text)

 

规则重载如示例 3 所示。足迹规则有两种,一种具有两个浮点参数,一种具有一个字符串参数。编译器会自动确保在形状创建期间仅使用匹配的形状(即在执行上述Lot规则期间,创建带有字符串参数的封装形状)。

笔记:

如果不存在匹配规则,则生成新的叶子。