CityEngine城市三维建模入门教程 课件 第4章 CGA规则建模_第1页
CityEngine城市三维建模入门教程 课件 第4章 CGA规则建模_第2页
CityEngine城市三维建模入门教程 课件 第4章 CGA规则建模_第3页
CityEngine城市三维建模入门教程 课件 第4章 CGA规则建模_第4页
CityEngine城市三维建模入门教程 课件 第4章 CGA规则建模_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CityEngine城市三维建模入门教程配套课件第四章CGA规则建模CATALOG4.1CityEngine坐标系4.2创建和使用CGA规则文件4.3CGA基本语法4.4CGA形状编辑操作4.5CGA纹理贴图操作4.6CGA属性及属性设置4.7CGA程序结构与规则函数4.8CGA常用内置函数4.9CGA注解与样式4.1CityEngine坐标系在CityEngine的三维建模中,无论是手动建模还是CGA规则建模都会涉及到坐标系,它不仅定义了模型的位置、方位,还控制着模型创建过程中每个面及边点的定位,纹理贴图的大小和位置。CityEngine的坐标系部署在场景中,可在3D视图中进行可视化。CityEngine提供了五种不同的坐标系,分别是世界坐标系、场景坐标系、对象坐标系、枢轴坐标系、范围坐标系。世界坐标系世界坐标系(WorldCoordinateSystem)是指整个场景所处的全局空间直角坐标系,它以格网中粗十字线交点为原点,它定义了每个形状相对该原点的空间坐标位置,其空间范围最广。世界坐标系具有三个分量,分别为x、y、z轴。其中y轴指向向上,x轴指向正东,z轴指向正南。它们可在视图设置中,通过显示坐标轴、格网和罗盘进行可视化。世界坐标系的轴向在3D视图中和CityEngine坐标系(CityEngineCS)的轴向一致。4.1CityEngine坐标系场景坐标系场景坐标系(SceneCS)是指整个场景所处的地理坐标系,它通常以地球赤道和投影带的中央经线的交点为原点,它定义了每个形状相对该原点的地理空间参考,其空间范围限于投影平面内。场景坐标系具有三个分量,分别为x、y、z轴。其中z轴指向向上,x轴指向正东(经度向),y轴指向正北(纬度向)。它们可在视图设置中,通过显示坐标轴、格网和罗盘进行可视化。场景坐标系的轴向在3D视图中可通过视图设置(Viewsettings)->查看坐标系(Viewcoordinatesystem)进行查看。4.1CityEngine坐标系通常,每个形状都具有一个局部坐标系,用于标识自身的坐标方向,便于使用变换工具进行处理,称之为对象坐标系(ObjectCoordinateSystem)。其原点设置在初始形状的首边的第一个点上,并且轴向定义为x轴沿着第一条边,y轴沿着第一面的法线,z轴垂直于xy平面。对象坐标系对象坐标系具有位置和方向属性,可通过initialShape.origin.p{x|y|z}属性获取对象相对于世界坐标系原点的位置,通过initialShape.origin.o{x|y|z}获取对应方向。4.1CityEngine坐标系枢轴坐标系4.1CityEngine坐标系枢轴坐标系(PivotCoordinateSystem)用于描述对象中每个子形状的位置状态,它基于对象空间坐标系定义了每个子形状相对于对象坐标系原点的位置。枢轴坐标系的原点设置在子形状首边的第一个点上,并且沿着首边的方向定义为x轴,沿着第一面的法线方向定义为y轴,沿着xy平面的法线方向定义为z轴。枢轴坐标系具有枢轴属性,可通过pivot.p{x|y|z}属性获取枢轴位置,通过pivot.o{x|y|z}获取枢轴方向。每个形状都有一个关联的范围坐标系(ScopeCoordinateSystem)。他基于枢轴空间坐标系定义了形状的边界框尺寸。典型的形状变换会在范围坐标系上运行。范围坐标系具有范围属性,可通过scope.t{x|y|z}属性获取形状的平移向量,通过scope.r{x|y|z}获取形状的旋转向量,通过scope.s{x|y|z}获取形状的尺寸向量,通过scope.elevation获取形状的高度。范围坐标系4.1CityEngine坐标系各坐标系之间的关系世界坐标系(原点)对象坐标系(原点)枢轴坐标系(原点)范围坐标系范围坐标系枢轴坐标系对象坐标系世界坐标系场景坐标系()4.2创建和使用CGA规则文件在rules文件夹上,点击鼠标右键选择New->CGARuleFile,打开CGARuleFile对话框,输入文件名,点击Finish结束。编辑新创建的规则文件代码如下。version

"2019.0"//版本号@startRule//显式声明起始规则//Lot为起始形状Lot-->extrude(10)//拉伸10m

color("#00FF00")//填充绿色

X.

//X.为终端形状选择绘制的矩形地块,点击Inspector属性框中的Shape面板,设置Rules相应参数,或在主工具条上点击分配规则文件(Assignrulefile)按钮选择规则起始结点。点击主工具条中的Generate按钮,生成三维模型。(a)(b)在形状图层上使用矩形建模工具绘制尺寸为20m*20m的矩形形状。

CGA规则的表达CGA规则的基本思想是用多个新形状替换具有特定形状符号的旧形状,基本语法:PredecessorShape-->SuccessorPredecessorShape为前驱形状,由形状符号标识,“-->”表示执行规则,Successor为后继形状,由形状操作和形状符号构成。形状操作会更改当前形状,形状符号会创建当前形状的副本(带有新的形状符号),并将其作为活动形状添加到形状树中。如果存在新形状符号的规则,则随后导出新形状,否则它将成为叶子形状。4.3CGA基本语法注意:CGA规则区分字母大小写B形状C形状定义下面CGA规则:A->Bt(30,0,0)C.在上述规则执行过程中,首先创建A形状的副本,并将其形状符号设置为B和C。其中B形状没有任何的操作,C形状具有平移t()操作,即将其沿x轴移动30个单位。如果没有匹配B形状的规则,则生成过程结束,但此时B形状会提示“未定义规则(UndefinedRule)”的警告。C形状后面加了“.”表示该形状为终端形状,之后再有关于C形状的规则不再执行。执行上述规则相当于对模型A进行了复制和平移操作。

CGA起始规则每一个CGA规则文件都有一个或多个起始规则入口,用于显式标识规则的起始运行,基本语法:@StartRuleLot-->SuccessorLot为CGA规则初始形状符号缺省名称,可以任意定义。当存在多个规则时,应使用注解@StartRule为起始规则作显式声明。Successor为后继形状。4.3CGA基本语法//初始形状:20m*20m@startRule//显式声明起始规则Lot1-->AA-->extrude(20)@startRule//显式声明起始规则Lot2-->extrude(15)B@startRule//显式声明起始规则Lot3-->extrude(10)color(1,0,0)C.Lot1初始形状生成了A形状A形状执行了拉伸操作(A形状后面没有形状符,默认为A形状)Lot2初始形状生成了B形状,B形状执行了拉伸操作Lot3初始形状生成了C形状,C形状执行了拉伸和着色操作,且C形状为终端形状,标识该形状规则的终止CGA起始规则示例在编写CGA规则之前,CityEngine提供了version关键字来定义为其编写规则的版本号,以此检测潜在的代码不兼容性。这种不兼容性主要由新功能函数和现有功能函数的不匹配导致。尽管前者相对来说没有太大问题,但后者通常是不希望的,仅在需要纠正明显的错误或其它缺点时才会发生。有关潜在不兼容性的警告会写入日志。关于CGA版本之间的更改的描述,可参见CGA更改日志。版本号4.3CGA基本语法行注释:在注释内容前面使用//

或#

字符。段落注释:在注释内容前后使用/*…*/

字符。行内注释:在CGA语句中对需要注释的内容添加/*…*/

字符。CGA提供了三种注释方式,分别是行注释、段落注释和行内注释。version

"2019.0"

//版本号//行注释,使用C注释符#行注释,使用Python注释符/*段落注释,使用C注释符*/@StartRule//@注解符,显式声明规则起始形状

Lot-->//Lot为起始形状

extrude/*拉伸10m*/(10)

X.

//X.为终端形状

CGA注释4.3CGA基本语法4.4CGA形状编辑操作拉伸操作extrude()操作用于将形状沿着面法线或拉伸类型指定的方向进行拉伸,通常将地块向上挤出一个高度,基本语法:

extrude(distance)extrude(extrusionType,distance)参数说明见教程第84页。//初始形状:20m*20m矩形Lot-->

extrude(y,20)

A.颜色操作color()函操作用于给形状着色,基本语法:

color(s)color(r,g,b)color(r,g,b,o)@StartRuleLot-->

extrude(20)

color("#FFCC00")A.

@StartRuleInit-->

extrude(20)

color(0.5,1,0,0.4)B.

参数说明见教程第85页。4.4CGA形状编辑操作锥体操作taper()操作用于将形状沿着面法线拉伸为锥体形状,基本语法:taper(distance)//初始形状:20m*20m矩形Lot-->

taper(20)

color(0.5,0.5,0.5)

A.参数说明见教程第86页。4.4CGA形状编辑操作内部矩形操作innerRectangle()操作用于寻找几何体中平行于scopeY轴和scopeX轴几何范围面积最大的矩形,基本语法:

innerRectangle(alignment){selectoroperatoroperations|selectoroperatoroperations}参数说明见教程第86页。4.4CGA形状编辑操作//初始形状:20m*20m,不规则矩形Lot-->

innerRectangle(edge){shape:extrude(10)

color(0.5,0.5,0.5,0.3)

A.

|remainder:color(0,1,0)B.

}原生四边形操作primitiveQuad()操作用于在当前形状范围内生成一个四边形几何体,基本语法:primitiveQuad()primitiveQuad(width,length)参数说明见教程第87页。4.4CGA形状编辑操作//初始形状:20m*20m,不规则矩形Lot-->

primitiveQuad(10,15)

extrude(10)

color(0,1,0,0.3)

X.原生圆形操作primitiveDisk()操作用于在当前形状范围内生成一个圆形几何体,基本语法:primitiveDisk()primitiveDisk(nVertices)primitiveDisk(nVertices,radius)参数说明见教程第88页。4.4CGA形状编辑操作//初始形状:20m*20m,不规则矩形Lot-->

primitiveDisk(16,6)

extrude(10)

color(0,1,0,0.3)

X.原生立方体操作primitiveCube()操作用于在当前形状范围内生成一个长方体,基本语法:primitiveCube()primitiveCube(width,height,depth)参数说明见教程第88页。4.4CGA形状编辑操作//初始形状:20m*20m,不规则矩形Lot-->

primitiveCube(8,8,8)

color(0,1,0,0.3)

X.原生球体操作primitiveSphere()操作用于在当前形状范围内生成一个球体,基本语法:primitiveSphere()primitiveSphere(sides,divisions)primitiveSphere(sides,divisions,radius)参数说明见教程第89页。4.4CGA形状编辑操作//初始形状:20m*20m矩形Lot-->

primitiveSphere()

color(0,1,0)

X.原生柱体函数primitiveCylinder()操作用于在当前形状范围内生成一个圆柱体,基本语法:primitiveCylinder()primitiveCylinder(sides)primitiveCylinder(sides,radius,height)4.4CGA形状编辑操作//初始形状:20m*20m矩形Lot-->

primitiveCylinder(16,5,10)

color(0,1,0)

X.参数说明见教程第90页。原生锥体操作primitiveCone()操作用于在当前形状范围内生成一个圆锥体,基本语法:primitiveCone()primitiveCone(sides)primitiveCone(sides,radius,height)参数说明见教程第91页。4.4CGA形状编辑操作//初始形状:20m*20m矩形Lot-->

primitiveCone(16,5,10)

color(0,1,0)

X.插入外部模型操作i()操作用于插入外部3D模型(一般是单体或小品模型)到当前形状中,基本语法:i(geometryPath)i(geometryPath,upAxisOfGeometry)i(geometryPath,upAxisOfGeometry,insertMode)参数说明见教程第91页。4.4CGA形状编辑操作//初始形状:20m*20m矩形Lot-->i("models/tree/tree.obj")

T.组件操作comp()操作用于从模型中分离出满足一定条件的面、边或点模型,基本语法:comp(compSelector){selectoroperatoroperations|selectoroperatoroperations...}

4.4CGA形状编辑操作参数说明见教程第92页。//初始形状:40m*40m矩形Lot-->

extrude(40)

comp(f){

front:color(1,0,0)FrontFacade.

|top:color(0,0,1)TopFacade.|side:color(0,1,0)SideFacade.

}前面侧面顶面切割操作split()操作用于将形状沿着特定方向切割为若干子形状,CityEngine提供了两种切割类型,分别为基于笛卡尔空间和纹理空间。其中,笛卡尔空间中的spit()操作,基本语法:split(splitAxis){size1:operations1|size2:operations2|...|sizen-1:operationsn-1}split(splitAxis){size1:operations1|size2:operations2|...|sizen-1:operationsn-1}*split(splitAxis,adjustSelector){size1:operations1|...|sizen-1:operationsn-1}split(splitAxis,adjustSelector){size1:operations1|...|sizen-1:operationsn-1}*4.4CGA形状编辑操作参数说明见教程第96页。//初始形状:40m*40m矩形Lot-->

extrude(40)

split(y){20:color(1,0,0)A.

|15:color(0,0,1)B.|~5:color(0,1,0)C.

}切割操作示例//初始形状:40m*40m矩形Lot-->

extrude(40)

split(y){20:color(1,0,0)A|15:color(0,0,1)B|~5:color(0,1,0)C.

}A-->

split(y){~5:D.}*B-->

split(x){2:E.|{4:E.}*|2:E.}切割面积操作splitArea()操作用于将形状按面积大小切割为若干子形状,基本语法为:

splitArea(splitAxis){area1:operations1|...|arean-1:operationsn-1}splitArea(splitAxis){area1:operations1|...|arean-1:operationsn-1}*splitArea(splitAxis,adjustSelector){area1:operations1|...|arean-1:operationsn-1}splitArea(splitAxis,adjustSelector){area1:operations1|...|arean-1:operationsn-1}*参数说明见教程第100页。4.4CGA形状编辑操作//初始形状:40m*40m矩形Lot-->

splitArea(x){'0.5:extrude(20)A.|'0.3:extrude(10)B.|~5:extrude(15)C.

}偏移操作offset()操作用于将多边形内缩与外放,基本语法:

offset(offsetDistance)offset(offsetDistance,offsetSelector)参数说明见教程第101页。4.4CGA形状编辑操作//初始形状:40m*40m矩形Lot-->

primitiveDisk(32,18)

offset(2,border)

extrude(10)

color(1,0,0)

X.退步操作setback()操作用于多边形的内缩,基本语法:setback(setbackDistance){selectoroperatoroperations|selectoroperatoroperations...}setback(setbackDistance,uvSet){selectoroperatoroperations|selectoroperatoroperations...}4.4CGA形状编辑操作参数说明见教程第102页。//初始形状:40m*40m矩形Lot-->

setback(5){side:Garten

|remainder:Building

}

/*设置后退距离5米,后退的这部分作为绿地Garten,剩余的作为Building*/

Garten-->color("#00ff00")

extrude(1)X.

Building-->offset(-2,inside)

extrude(20)Y.退步操作示例L型操作shapeL()操作用来绘制L型形状,基本语法:shapeL(frontWidth,leftWidth){selectoroperatoroperations|selectoroperatoroperations}4.4CGA形状编辑操作参数说明见教程第105页。//初始形状:40m*40m矩形Lot-->

shapeL(20,10){shape:building|remainder:grass

}building-->

extrude(20)color(“#6892D7”)grass-->

extrude(1)color(0,1,0)U型操作shapeU()操作用来绘制U型形状,基本语法:shapeU(frontWidth,rightWidth,leftWidth){selectoroperatoroperations|selectoroperatoroperations}4.4CGA形状编辑操作参数说明见教程第106页。//初始形状:40m*40m矩形Lot-->

shapeU(20,10,5){shape:building|remainder:grass

}building-->

extrude(20)color("#6892D7")grass-->

extrude(1)color(0,1,0)O型操作shapeO()操作用来绘制O型形状,基本语法:

shapeO(frontWidth,rightWidth,backWidth,leftWidth){selectoroperatoroperations|selectoroperatoroperations}4.4CGA形状编辑操作参数说明见教程第107页。//初始形状:40m*40m矩形Lot-->

shapeO(16,10,8,4){shape:buildingremainder:grass

}building-->

extrude(20)color("#6892D7")grass-->

extrude(1)color(0,1,0)随机点操作scatter()操作用于在一定范围内生成一定数量的随机点,基本语法:scatter(domain,nPoints,distributionType){operations}scatter(domain,nPoints,gaussian,scatterMean,scatterStddev){operations}4.4CGA形状编辑操作参数说明见教程第109页。//初始形状:40m*40m矩形@startRuleLot-->

scatter(surface,10,gaussian,center,20){

tree

}

tree-->

s(4,8,4)

i("models/tree/tree.obj")

color(0,1,0)镜像操作mirror()函数用于将当前形状进行镜像处理,基本语法:

mirror(xFlip,yFlip,zFlip)4.4CGA形状编辑操作参数说明见教程第115页。//初始形状:40m*40m矩形Lot-->

i("models/tree/tree.obj")

color(0,1,0)

mirror(false,true,false)(a)(b)平移操作t()操作用于将形状沿指定长度进行平移,基本语法:t(tx,ty,tz)//初始形状:40m*40m矩形Lot-->

extrude(20)

color(1,0,0,0.5)

t(-30,0,30)

X.参数说明见教程第116页。4.4CGA形状编辑操作缩放操作s()操作用于将形状沿指定大小进行缩放,基本语法:

s(xSize,ySize,zSize)

s(‘xSize,‘ySize,‘zSize)4.4CGA形状编辑操作参数说明见教程第117页。//初始形状:40m*40m矩形Lot-->

extrude(20)

color(1,0,0,0.5)

s(20,20,20)

X.旋转操作r()操作用于将形状沿指定角度进行旋转,基本语法:r(xAngle,yAngle,zAngle)r(centerSelector,

xAngle,yAngle,zAngle)4.4CGA形状编辑操作参数说明见教程第118页。#初始形状:20m*5m矩形Lot-->

extrude(10)

split(y){

1:r(0,120*split.index/split.total,0)X.

}*居中操作center()操作用于设置变换后的形状处于初始形状的中心,基本语法:center(axesSelection)参数说明见教程第120页。4.4CGA形状编辑操作//初始形状:40m*40m矩形Lot-->

s('0.6,'1,'0.6)

extrude(20)

center(xz)

A.NIL操作NIL操作用于从形状树中删除当前形状,基本语法:NIL//初始形状:20m*20m矩形Lot-->

split(x){2:extrude(10)X.|1:NIL

}*4.4CGA形状编辑操作单坡屋顶操作roofShed()操作用于生成单坡屋顶形状,基本语法:roofShed(angle)roofShed(angle,index)4.4CGA形状编辑操作参数说明见教程第121页。//初始形状:20m*10m矩形Lot-->

extrude(10)

comp(f){top:Top|side:X.

}Top-->

roofShed(20,0)color(1,0,0)双坡屋顶操作roofGable()操作用于生成双坡屋顶形状,基本语法:

roofGable(angle)roofGable(angle,overhangX)roofGable(angle,overhangX,overhangY)4.4CGA形状编辑操作参数说明见教程第122页。//初始形状:20m*10m矩形Lot-->

extrude(10)

comp(f){top:Top|side:X.

}Top-->

roofGable(20,1,0.5)color(1,0,0)四坡屋顶操作roofHip()操作用于生成四坡屋顶形状,基本语法:roofHip(angle)roofHip(angle,overhang)4.4CGA形状编辑操作参数说明见教程第123页。//初始形状:20m*10m矩形Lot-->

extrude(10)

comp(f){top:Top|side:X.

}Top-->

roofHip(20,1)color(1,0,0)金字塔屋顶操作roofPyramid()操作用于生成金字塔屋顶形状,基本语法:roofPyramid(angle)4.4CGA形状编辑操作参数说明见教程第124页。//初始形状:20m*10m矩形Lot-->

extrude(10)

comp(f){top:Top|side:X.

}Top-->

roofPyramid(20)color(1,0,0)设置投影操作setupProjection()操作用于设置纹理的大小及纹理对应的纹理坐标系图层,基本语法:setupProjection(uvSet,axesSelector,texWidth,texHeight)setupProjection(uvSet,axesSelector,texWidth,texHeight,widthOffset,heightOffset)setupProjection(uvSet,axesSelector,texWidth,texHeight,widthOffset,heightOffset,uwFactor)4.5CGA纹理贴图操作参数说明见教程第130页。投影UV操作projectUV()操作根据相应的投影矩阵来创建所选UV集合的纹理坐标,基本语法:projectUV(uvSet)4.5CGA纹理贴图操作参数说明见教程第131页。填充纹理操作texture()操作用于为形状进行贴图,基本语法:texture(texPath)参数说明见教程第131页。纹理贴图示例//初始形状尺寸:无要求Lot-->

//水立方尺寸:177m*177m*31m

s(177,0,177)//将初始形状缩放为177m*177m

center(xz)//居中

extrude(31)//拉伸31m

comp(f){all:wFacades}//提取所有面

//为水立方各面填充纹理wFacades-->

setupProjection(0,scope.xy,80,50)

texture("assets/waterCube.jpg")

projectUV(0)组件属性comp属性提供有关形状被分割后的组件的信息,具体包括:stringcomp.selfloatcomp.indexfloatcomp.total4.6CGA属性及属性设置属性说明见教程第138页。//初始形状:20m*20m矩形Lot-->

extrude(10)

comp(f){all:print("face_id:"+comp.index

+",total:"+comp.total)

X.

}切割属性split提供了形状被切割后的相关属性,主要为:floatsplit.index

floatsplit.total4.6CGA属性及属性设置属性说明见教程第140页。//初始形状:1.5m*0.25m矩形Lot-->

extrude(1)/

split(y){0.1:t(-split.index/split.total*2.5,0,0)X.

}*材质属性材质属性用来控制形状的明暗,纹理和导出。CityEngine支持十个具有固定语义的纹理通道。这些通道属性包括材质名称(name)、着色器(shader)、颜色(color)、环境光(ambient)、镜面光(specular)、发射光(emissive)、透明度(opacity)、反射率(reflectivity)、发光度(shininess)、凹凸值(bumpValue)、金属度(metallic)、粗糙度(roughness)、纹理通道(colormap

|bumpmap

|dirtmap

|specularmap

|opacitymap

|normalmap)以及其它。这些属性均可以被set()函数进行设置。其中:set(material.colormap,“纹理路径”)等价于texture(“纹理路径”)纹理函数4.6CGA属性及属性设置关于材质属性的详细说明见教程第143页。@StartRuleLot-->

extrude(30)

split(y){5:floor_slice|{~4:floor_slice}*}floor_slice-->

comp(f){top:color(0.5,0.5,0.5)X.|side:floor_side

}floor_side-->

split(x){{~2:floor_win}*}floor_win-->

offset(-0.01)

comp(f){border:color(0.2,0.2,0.2)frame.|inside:glass

}glass-->//玻璃幕墙

color("#6892d7")

set(material.opacity,0.7)

set(material.specular.r,0.6)

set(material.specular.g,0.6)

set(material.specular.b,0.6)

set(material.reflectivity,0.3)设置材质属性示例对象坐标系属性initialShape属性描述形状的对象坐标系,并由位置向量P和方向向量O定义,具体为:floatinitialShape.origin.p{x|y|z}floatinitialShape.origin.o{x|y|z}4.6CGA属性及属性设置属性说明见教程第144页。枢轴坐标系属性pivot属性描述形状的枢轴坐标系,并由位置向量P和方向向量O定义,具体包括:floatpivot.p{x|y|z}floatpivot.o{x|y|z}属性说明见教程第145页。4.6CGA属性及属性设置范围坐标系属性scope属性表示相对于枢轴的空间中当前形状的定向边界框,由三个向量来表示:平移向量T,旋转向量R和尺寸向量S,具体包括:floatscope.t{x|y|z}floatscope.r{x|y|z}floatscope.s{x|y|z}floatscope.elevation属性说明见教程第145页。若某个恒量值经常被重复性调用,可被定义为常量,语法为:constvar

=value|expression自定义规则属性CGA规则支持自定义属性以此简化函数中的参数调用和提高模型交互显示效果。在规则中,若某个变化值经常被重复性调用,可被定义为属性,语法为:attrvar

=value|expression4.6CGA属性及属性设置//初始形状:10m*10m矩形attr

h1=10attr

h2=10Lot-->

split(x){10:extrude(h1)A.|~10:extrude(h2)B.

}属性设置函数set()函数用来对属性进行设置,基本语法:set(attribute,boolvalue)set(attribute,floatvalue)set(attribute,stringvalue)4.6CGA属性及属性设置参数说明见教程第147页。//定义属性attr

height=0attr

colour="#00FF00"//初始形状:20m*20m矩形Lot-->

set(height,20)extrude(height)

color(colour)

comp(f){side:X.|top:set(material.color.r,1)Y.}顺序结构CGA规则的顺序结构比较简单,按规则的执行方向和语句先后顺序,从左到右,从上到下按顺序执行。4.7CGA程序结构与规则函数CGA规则提供了条件判断结构用于将部分顺序结构转变为分支结构,基本语法:PredecessorShape-->casecondition1:successor1casecondition2:successor2…else:successorn条件判断结构参数说明见教程第149页。条件判断结构示例(a)(b)//初始形状:20m*20m矩形attr

height=5Lot-->

extrude(height)AA-->

case

height>5:

color(1,0,0)B.

else:color(0,1,0)C.随机判断结构CGA规则除了提供条件判断结构实现程序语句的分支功能外,还提供了随机判断结构,基本语法:PredecessorShape-->percentage%:Successor1percentage%:Successor2...else:SuccessorN4.7CGA程序结构与规则函数参数说明见教程第151页。//初始形状尺寸:200m*200m矩形Lot-->30%:extrude(30)color("#FFFFFF")40%:extrude(1)color("#00FF00")

else:extrude(10)color("#FF0000")循环结构在现有的CGA规则版本中,CityEngine没有提供for循环和while循环,但允许使用“递归”实现循环结构,基本语法:4.7CGA程序结构与规则函数PredecessorShape-->

casecondition://循环终止条件operations//形状操作SuccesorX//循环终止形状

else:operations//形状操作Succesor//复制当前形状

PredecessorShape//递归调用

参数说明见教程第153页。循环结构示例//初始形状:20m*20m矩形attrh=1//每层高度attra=1//顶面面积@StartRuleLot-->

extrude(h)Tower//递归调用规则,实现循环Tower-->

case

geometry.area(top)<a://终止条件

color(1,0,0)Y.

else://循环

X.

primitiveDisk(32)

s('0.8,'1,'0.8)

extrude(h)

t(0,h,0)

center(xz)

print("area:"+geometry.area())Tower//递归带参规则CGA规则为了优化代码设计结构及提高形状操作的复用性,允许使用自定义带参规则,基本语法:

PredecessorShape(arg1,arg2,…,argN)-->Successor4.7CGA程序结构与规则函数参数说明见教程第156页。//初始形状:20m*20m矩形Lot-->

extrude(20)

set(material.color.g,0)

split(y){2:Floor(split.index,split.total)}*//自定义带参规则Floor(index,total)-->

set(material.color.r,index/total)

set(material.color.b,1-index/total)

X.CGA规则为了优化程序设计结构及提高代码的复用性,允许使用自定义函数封装代码,基本语法:FunctionName(arg1,arg2,…,argn)=Operations自定义函数4.7CGA程序结构与规则函数参数说明见教程第157页。//初始形状:20m*20m矩形const

h1=5h2=8h3=12//自定义带参函数getColor(h)=

caseh<=5:"#FF0000"

caseh>5&&h<=10:"#FFFF00"

else:"#CCCCCC"

Lot-->

split(x){6:shpOperation(h1)A.

|6:shpOperation(h2)B.

|~6:shpOperation(h3)C.}//自定义带参规则shpOperation(h)-->

extrude(h)color(getColor(h))4.7CGA程序结构与规则函数外部规则的导入类似其它计算机编程语言,CGA代码允许导入外部规则文件,以提高代码复用性,基本语法:

importid:filePathimportid(style-id_1,...,style-id_n):filePathimportid:filePath(attribute_1,...,attribute_n)importid:filePath(attribute_1=value,...,attribute_n=value)importid:filePath()参数说明见教程第160页。4.8CGA常用内置函数几何角度函数geometry.angle()函数用来获取当前形状的几何角度,基本语法:

floatgeometry.angle(angleSelector)参数说明见教程第163页。几何面积函数geometry.area()函数用来获取当前形状的几何面积,基本语法:floatgeometry.area()floatgeometry.area(areaSelector)参数说明见教程第163页。几何高度函数geometry.height()函数用来获取当前形状的几何高度(以世界坐标系为参考),基本语法:floatgeometry.height()4.8CGA常用内置函数参数说明见教程第164页。纹理尺寸函数geometry.du/dv()函数用来获取当前纹理的长度/宽度,通常用于街道形状,基本语法:floatgeometry.du(floatuvSet,surfaceParameterization)floatgeometry.dv(floatuvSet,surfaceParameterization)参数说明见教程第166页。attr

roadPath="assets/roadc.jpg"attr

sidewalk="assets/sidewalk.jpg"Road-->

texture(roadPath)

scaleUV(0,geometry.du(0,unitSpace)/5,0.62)

X(geometry.du(0,unitSpace),geometry.dv(0,unitSpace))

Sidewalk-->

extrude(0.3)

texture(sidewalk)

tileUV(0,3,3)

rotateUV(0,55)X(length,width)-->

print("Length:"+length+",\nwidth:"+width)纹理尺寸函数示例最小距离函数minimumDistance()函数用于返回当前范围到与给定标签匹配的所有形状范围中的最小距离。如果找不到与指定标签匹配的形状,则返回无穷大,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论