1、CityEngineg规则建模,Esri中国信息技术 有限公司徐汝坤,CityEngineg规则建模,-规则语法与常用函数,常用函数常用函数的用法练习:利用常用函数创建自己的规则规则语法,规则语法和常用函数目录,常用函数,extrude(拉伸/挤出):把地块变成一个建筑comp(拆分组件/炸开):把模型从整体分成不同的部分color(着色):给模型着色Split(分割/切片):建筑分成不同的楼层,常用的函数,功能:挤出一个高度,使模型从面状变为体块概要:extrude(height)extrude(axisWorld, height)参数说明:height:拉伸的高度。默认沿模型的Y轴拉伸ax
2、isWorld:设定拉伸轴线,使用世界坐标系的轴作为拉伸轴线。其可选参数为:world.x/world.y/world.z。使对象的拉伸有共同的方向,常用函数extrude,示例规则:Lot-extrude(10)CompModel,常用函数extrude,功能:从模型中分离出满足一定条件的模型概要:comp(compSelector) selector operator operations | selector operator operations . 参数说明:compSelector(keyword):要分割组件的类型。可选值f:面 | e:边 | v:点selector (keyw
3、ord)front, back, left, right, top, bottom 前后左右上下(模型轴系),常用vertical(垂直), horizontal(水平), aslant(有坡度的), nutantside 除水平部件外的其它部分all 所有的,常用函数comp,Lot-extrude(10)CompModelCompModel-comp(f)side: ColorsSideFacade | top: ColorfTopFacade,常用函数comp,功能:给模型着色概要:color(s)Color(r,g,b)参数说明:s (string):文本类型的颜色值(16进制)例如:
4、#rrggbbr,g,b (float,float,float):浮点类型的颜色值,每个值的取值在0到1.0之间,常用函数color,Lot-extrude(10) CompModelCompModel-comp(f)side: ColorsSideFacade | top: ColorfTopFacadeColorsSideFacade-color(#00ffff) SplitModelColorfTopFacade-color(1,0,0) TopFacade,常用函数color,功能:沿一定方向切割模型概要:split(splitAxis) size1 : operations1 | s
5、ize2 : operations2 | . | sizen-1 : operationsn-1 split(splitAxis) size1 : operations1 | size2 : operations2 | . | sizen-1 : operationsn-1 *参数说明:splitAxis:取值X | Y| Z,轴系为模型轴系sizen:分割的宽度,常用函数split,示例规则:SplitModel-split(y)4:color(#aa33bb) GroundFloor. | 3:Floor.*注:符号“ * ”代表重复执行,“ ”代表一个近似值,常用函数split,练习:简
6、单规则的编写,练习:简单规则的编写,Lot-extrude(10) extrudeModelextrudeModel-comp(f)side:SplitModel | top: ColorfTopFacade ColorfTopFacade-color(0,0,1) TopFacade.SplitModel-split(y)4:color(0,1,0) GroundFloor. | 3:color(1,1,0) MidFloor.| 1:color(1,0,0) TopFloor.,参考规则,规则语法,规则文件:由规则、属性、自定义函数以及注释等构成的集合。,规则语法,规则(函数)标准规则带参
7、规则随机规则条件规则递归规则属性自定认函数注释(comments),规则语法,形式:PredecessorShape - Successor特点:与无参函数比较类似,其结果返回给模型标识示例规则:Lot-extrude(10)CompModel,规则-标准规则,形式:PredecessorShape(Parameters) - Successor特点:与有参函数比较类似,根据需要传递改变后继模型外观的信息注意1:参数的类型可以是布尔型(bool)、浮点数值(float)和字符型(string),也可以是表达式注意2:具有不同参数个数的带参规则(前缀一样)比较类似于函数的重载,在CityEngi
8、ne认为这样的规则为不同的规则,规则-带参规则,示例规则:Lot -color(1,0,0)Footprint(20)Footprint(height)-extrude(height)Envelope.,规则-带参规则,形式:PredecessorShape - percentage%: Successor1 percentage%: Successor2.else: SuccessorN主要作用:用以随机生成不同外观的模型注意1:随机语句外不能出现任何语句注意2:必须以else结尾,else前面的percentage的和不得超过100,规则-随机规则,示例规则:Lot -60%:color(
9、1,0,0) Footprint(20)30%:color(0,1,0) Footprint(30)else:color(0,0,1) Footprint(50)Footprint(height)-extrude(height)Envelope.,规则-随机规则,形式:PredecessorShape - case condition1: Successor1 case condition2: Successor2 .else: SuccessorN特点:与函数中的条件语句比较类似,条件规则的关键字是case、else,根据不同的条件生成不同外观的模型注意:条件语句外不能出现任何语句,规则-条
10、件规则,示例规则Lot -case geometry.area1000:color(0,1,0) Footprint(30)else:color(0,0,1) Footprint(50)Footprint(height)-extrude(height)Envelope.,规则-条件规则,形式:PredecessorShape - case condition1: Operations PredecessorShape case condition2: Successor2 .else: SuccessorN特点:与函数中的循环语句比较类似,适用于满足一定条件时重复执行相同的操作,规则-递归规则
11、,示例规则Lot -extrude(10)color(1,0,0)comp(f)side:SideFacade | top:RecursiveRecursive-case geometry.area100:X. s(0.8,0.8,1)extrude(3)center(xz)comp(f)side:SideFacade | top:Recursiveelse:X.,规则-递归规则,属性是一组静态的全局变量,每个属性被初始化一个特定的值。attr(变量):可在inspector面板里调整,与对象的属性字段做关联;当定义的属性名字与字段名一致时会自动关联(值类型一致)Const(常量):参数值不能
12、在inspector面板里调整,也不能在规则中利用set函数调整其值。注意当没有关键字时,CityEngine会认为是自定义函数,属性,const height=20Lot -color(1,0,0)extrude(height),练习:属性的调整,CityEngnie中的自定义函数与属性比较类似,前面无关键字。自定义函数可以被参数化、随机化和条件化。示例:attr Floor=0height=case Floorcolor(1,0,0)extrude(height),自定义函数,目的:提高规则的易读性三种形式:行注释、块注释和行内注释行注释:利用字符“/”或“#”注释一行。示例如下:/ a comment# another comment块注释:利用“/*/”可以实现块注释。示例如下:/* block comments can be used to write multi-line comments*/行内注释:行内注释也是通过“/*/”来实现的。示例如下:Lot -Garden House /*Garage*/ Fence,注释(comments),常用函数extrudecompcolorsplit规则语法规则:带参规则、标准规则、随机规则、条件规则、递归规则属性自定义函数注释,小结,