本文档为Esri CityEngine学习文档,是CityEngine_2011_tutorial官方示例教程3 “Tutorial_03_Map_Control__2011_2”的中文翻译稿,由网友冬冬翻译整理。
城市包含非常多的对象。通过设置每一个建筑物的属性来控制它们会非常麻烦也是不太可能的。首先,你将在本教程中学习怎样使用CGA规则参数;然后你将学习怎样使用地图来控制你的城市的属性。
在你的CityEngine工作空间中导入“Tutorial_03_MapControl”工程
打开场景“Tutorial_03_MapControl/scenes/mapcontrolTutorial_01.cej ”
地图图层:地形
地图图层:水体
道路网图层(包含地块形状)
当你选中一个地块形状,在“Inspector”视窗中查看其属性信息,会发现它并没有被分配规则参数(规则参数组里面是空的),这种状况会发生改变当应用一个规则到这个形状上之后。
在“Scene”视窗中选择地块图层中的所有要素
【Shapes】-->【Assign Rule File...】选择规则文件“rules/simpleBuildingShells_01.cga”
再次选择地块数据的一个要素。在“Inspector”视窗中就出现了一个名为“height”的属性。这个属性是从哪里来的呢?在你对你的形状应用规则的时候,规则文件的属性信息就以地块数据的属性(规则属性)的形式显示出来。高度值来自规则文件。
单击“Inspector”视窗中的“Rule File”链接,打开规则文件。在左上角的位置,放置着“height(高度)”的定义。
// height value
attr height =80
此值用来在规则文件中定义建筑物的高度。现在,再次选中该要素。
【Shapes】->【Generate】
你将获得一个80米高的建筑模型。
现在在“Inspector”视窗中将高度值从“80”改为“150”。观察高度值从规则定义到用户定义的改变。当前建筑物的高程就被由“Inspector”中直接定义的值所更改了。而其他未选中的地块要素的高度值仍然是从规则文件中读取的。重新生成建筑物,可以发现建筑物的高度已经改变了。现在,你的场景应如下图所示。
同样的,你也可以打开场景“Tutorial_03_MapControl/scenes/mapcontrolTutorial_02.cej”来查看教程本部分的结果。
在第一部分场景的基础上继续或打开场景“Tutorial_03_MapControl/scenes/mapcontrolTutorial_02.cej”
使用当前设置生成一些建筑物,你的城市将如下图所示。
映射地图可以使生成建筑高度产生丰富的变化,这句话现在听起来并没有什么说服力。现在我们将使用下面的映射地图来一次性控制全部建筑物的高度,而不是使用第一部分中的手动设置CGA模型属性的方法。
映射地图中的红色波段代表该区域建筑物的高度。对比映射地图和地貌图,你会发现,我们要创建的映射地图是沿着湖的拐角部分分布的,另外还有一部分是在图的左上角部分。
创建一个新的地图图层【Layer】->【New Map Layer】
将图层命名为“Skyline Map”,选择“Mapping” 并单击下一步
为“Mapping”文件从“maps”文件夹中选择“skylineMap.png”
确认排列方式为居中,并关闭保持比例按钮
将X和Y的大小设置为3000
右键创建一个新的绘图属性将该属性命名为“skylineValue”
我们要使用该图像的红色波段来控制高度,因此在“channel(通道)”下拉框中选择“red”
建筑物的高度应该在20(0%红色)到200(100%红色)米之间取值。因此输入20作为最小值“Minimum”,200作为最大值“Maximum”。
单击【Finish】创建地图图层
小知识:在“Inspector”视窗中,调整映射地图图层的高程偏移,以便更好的观察地图。更改“alpha”值让其具有一定的透明度。
因为我们所选的“height(高度)”值已经存在于规则文件中,所以我们能够使用映射地图来控制器规则参数,现在将规则文件应用到地块上。
选中全部的地块数据要素
点击“inspector”视窗中规则属性“height”的连接按钮,启动连接编辑器(Connection Editor)。
选中“layer attribute”图层属性单选框,在下拉框中,选择 “Skyline Map”图层及其属性“skylineValue”
小知识:在设置好映射图层后,值中显示“?”符号。这表示选中的目标包含不同的值。
选择一个地块要素,在“inspector”视窗中观察其属性值,可以看到“Height”的值由“Skyline Map”控制。
选中湖湾区域的一些地块要素,并生成建筑物
以框选方式选择一些lot
【Shapes】->【Generate Models】
目前的工作已经让我们的场景初见效果了,现在我们将使用CGA语法来进行进一步的完善。打开规则文件“rules/simpleBuildingShells_02.cga”(在“文件导航窗口中双击此文件),查看如下函数:
// calc height with variation
getHeight(area) =
case area >600 : rand(0,40)+height
case area >200 : rand(0,40)+height/2
else: rand(15,30)
在此规则中,并没有直接使用地平线的高度值来确定建筑物的高度,这些用户自定义的函数是按照如下描述来定义建筑物的高度(请通过阅读CGA建模语言教程来学习CGA规则和函数)
只在大面积的地块上建立高层建筑物
为了使建筑高度增加一些变化,向高度值中引入了一个随机值。
在“Scene”视窗中选中地块图层
【Shapes】->【Assign Rule File…】,选择规则文件“rules/simpleBuildingShells_02.cga”
【Shapes】->【Generate Models】
完成本教程第二部分后,你的场景应如下图所示。
同样,你也可以打开“Tutorial_03_MapControl/scenes/mapcontrolTutorial_03.cej”来查看本部分的效果图
在第一部分场景的基础上继续或打开场景“Tutorial_03_MapControl/scenes/mapcontrolTutorial_03.cej”
一个城市通常有明显不同的土地利用类型区域。本部分将讲述如何为三种不同的土地类型设置属性。下面的地图中,使用蓝色代表商业区,红色代表工业区,绿色代表居住区。
在创建图层前首先观察“rules/simpleBuildingShells_03.cga”中的三个CGA属性
// land-use type
attr t_industrial = 0
attr t_commercial = 0
attr t_residential = 0
我们接下来要创建的地图图层需要有匹配的名称来表示属性信息
在“Scene”窗口中单击眼睛图标来隐藏映射图层
创建一个新的地图图层【Layer】->【New Map Layer…】
将图层命名为“Landuse Types”,选择“Mapping”并单击Next
从“maps”文件夹中选择 “areatypes.png”文件
确认对齐方式为居中,并关闭保持比例按钮
将X和Z的大小设置为3000
创建3个地图属性
将第一个属性命名为“t_industrial”,并在下拉框中选择对应通道
将第二个属性命名为“t_residential”,并在下拉框中选择对应通道
将第三个属性命名为“t_ commercial”,并在下拉框中选择对应通道
我们会在规则文件中对这些属性进行再赋值,因此默认的最大最小值0和1,在之后的使用中,是一个很好的映射
单击【Finish】按钮创建地图图层
小知识:在“Inspector”视窗中,调整新的地图图层的高程偏移,以便更好的观察地图。更改“alpha”值让其具有一定的透明度。
选中新建的地图图层,并在“Inspector”视窗中查看其属性信息。确认三个CGA属性已经被正确的定义。你可以使用该视窗来修改地图图层的设置。
现在对土地利用地图进行求值
选择地块图层的全部要素
应用规则文件“rules/simpleBuildingShells_03.cga”
为图层“Landuse Type”的土地利用参数设置数据源
在最终生成建筑物之前,再一次查看规则文件“rules/simpleBuildingShells_03.cga”,定位到颜色描述和函数“functionlanduseTypeColor”部分。
// color declarations
red = "#ffaaaa"
green = "#aaffaa"
blue = "#aaaaff"
white = "#ffffff"
// Functions
landuseTypeColor =
case t_industrial> t_commercial && t_industrial > t_residential : red
case t_commercial> t_industrial && t_commercial > t_residential : blue
case t_residential> t_industrial && t_residential > t_commercial : green
else : white
此函数用来分析土地利用地图的输入值,并根据这些值返回对应的值。如果来自地图的颜色通道值比其他通道的值大,相应的土地利用颜色就被返回,红色代表工业区,蓝色代表经济区,绿色代表居中区。通过利用颜色操纵color(landuseTypeColor)调用土地利用颜色函数,颜色被用来生成建筑物。现在在场景中生成全部建筑物。
在“Scene”视窗中选中lot图层
在最上方的工具栏中单击生成按钮
同样,你也可以打开“Tutorial_03_MapControl/scenes/mapcontrolTutorial_04.cej”来查看本部分的效果图。