属性是在具有以下属性的规则文件中定义的一组全局变量:
- 相对于规则文件的范围而言,这些属性为全局属性。
- 每个属性都将在规则文件中初始化为一个特定的值。
- 可以基于每个形状单独更改属性值。
您可以在检查器窗口的规则窗格中执行此操作。
注:
不同于函数,系统在生成过程开始时仅会评估一次属性。
示例
attr height = 150
attr landuse = "residential"
Lot --> extrude(height) Envelope(landuse)
在本例中,使用 attr 关键字定义了两个属性:height(其类型为浮点型)和 landuse(其类型为字符串型)。 这些属性将在 Lot 规则中使用。
属性也可以是条件属性或随机属性:
attr landuse = 50% : "residential"
else : "industrial"
在本例中,landuse 有 50% 的可能性被评估为 "residential",还有 50% 的可能性被评估为 "industrial"。 对于每种形状,系统都会评估一次条件或随机属性,并在生成过程中使其保持不变。
同样,您可以使用 rand() 函数:
attr height = rand(30,50)
Lot --> extrude(height) Envelope
Envelope -->
case height < 40 : SmallBuilding
else: LargeBuilding
对于每个开始规则为 Lot 的形状,height 的估算值将介于 30 到 50 个单位之间。 该高度为恒定值,且可用于规则文件中的任意位置。
注:
- 您可以单击并编辑该值,或使用滑块修改该值。 有关使用不同的源控制规则属性输入的详细信息,请参阅使用连接编辑器映射属性。
- 可以通过 CGA 注记来控制检查器窗口中属性的显示。
- 您可以使用交互式控点在 3D 视图中编辑属性。
在“检查器”窗口中更改属性
您可以在检查器窗口中针对每个初始形状单独设置标有 attr 的函数值。 例如,下面的定义将在规则参数部分中产生一个条目。
@Range(min=10, max=40)
attr height = 20
使用材料属性
由于 CGA 材料包含多种属性,因此可以使用 .cgamat 文件来管理 CGA 材料。 通常使用 CGA 材料编码器创建这些文件,可通过模型导出器访问该编码器。
version "2024.0"
@MaterialFile
attr myMaterial = "/ESRI.lib/assets/Materials/Architectural/Walls/Brick/Brick_StretcherBond_10x10_Black.cgamat"
Init -->
primitiveCube()
setMaterial(readMaterial(myMaterial))
为 CGA 模型分配材料的典型工作流涉及显示相应字符串属性,这些属性表示 .cgamat 文件的路径。 例如,以上规则将 ESRI.lib 中其中一种材料的路径分配给 myMaterial 属性。 readMaterial 函数将读取该材料文件,并将其转换为可传递给 setMaterial 操作的键值对数组。
可以使用 @MaterialFile 注记来注释字符串属性,该注记可为属性启用材料浏览器窗口。 要访问材料浏览器窗口,请单击材料按钮 ,或从检查器窗口的下拉菜单中单击浏览器。
注:
材料浏览器中填充了所有来自 ESRI.lib 的材料。此外,要在导航器窗口中预览 .cgamat 文件,请右键单击文件并选择文件预览。
材料浏览器窗口提供了一个格网状的图库,其中预览了 ESRI.lib 内的所有 .cgamat 材料文件。
材料浏览器窗口将在标题栏中显示活动属性的名称。 每次选择材料时,它将应用于 CityEngine 场景中的所选模型。
注:
材料浏览器窗口为非阻塞窗口,这意味着您可以修改相机并在视口窗口中检查模型上的当前所选材料。单击应用以应用材料;或单击取消以退出材料浏览器窗口,而不应用材料。
此外,更改场景选择内容将关闭材料浏览器窗口,而不应用材料,类似于取消按钮。
将值分配给多个形状
您可以采用手动方式将值快速分配给多个初始形状。 完成以下步骤以将属性分配给多个形状:
- 选择两个初始形状,这些形状需要具有已分配 height、roofColor 和 roofType 属性的规则文件。
- 将高度值更改为 40。
两个所选形状的高度值均已更改。
- 仅选择一个形状(或模型),然后将 height 值更改回规则默认值 20。
- 将两个模型全部选中。
height 值将显示为问号 (?),表示两个所选模型的此属性值不同。