带有参数的规则

可以对规则进行参数化处理,即可以定义带有参数的特征文件,并在生成过程中选择匹配的特征文件。

注:

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

示例 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 规则将采用一个参数。

注:

请注意 area 是如何在规则间传递的。

示例 3

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

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

示例 3 中显示了规则重载。 一共有两个 Footprint 规则,一个带有两个浮点参数,另一个带有一个字符串参数。 编译器会自动确保在形状创建过程中仅使用匹配的参数(即在运行上述 Lot 规则期间,将创建带有字符串参数的 Footprint 形状)。

注:

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


在本主题中