1、 CGA常用内置函数
几何角度函数geometry.angle()
用来获取当前形状的几何角度
语法:
- float geometry.angle(angleType)
参数: - angleType - 选择器,用于角度计算的选择器。
maxSlope - 计算形状相对于 xz 平面的最大坡度(以度为单位)。
azimuth - 计算当前形状的最大坡度的方向方位角(以度为单位)。
zenith - 计算 90 度(天顶)与最大坡度之差。
看个例子:
angle_maxSlope-->
comp(f) { all : color(geometry.angle(maxSlope)/ 90, 0.0, 0.0) Shape. }
几何面积函数geometry.area()
语法:
- float geometry.area()
- float geometry.area(faceOrientation)
参数: - faceOrientation - 选择器,要包含在面积计算中的面的选择器。
{ surface| all }(默认)
{ front | back | left | right | top | bottom | side }
{ object.front | object.back | object.left | object.right | object.top |object.bottom | object. Side }
看个例子:
version "2022.1"
@StartRule
Lot-->
comp(f){
top:color(0,1,0)X.
|front:color(1,0,0)X.
|side:color(0,0,1)X.
}
extrude(10)
print("Top:"+geometry.area(top)) //打印顶面面积
print("Front:"+geometry.area(front)) //打印前面面积
print("Side:"+geometry.area(side)) //打印侧面面积
print("All:"+geometry.area(all)) //打印所有面积
几何高度函数geometry.height()
语法:
- float geometry. Height()
看个例子:
Height-->
color(0,1,0)
print("Height:"+geometry.height())
纹理尺寸函数geometry.du/dv()
语法:
- float geometry.du(uvSet, surfaceParameterization)
- float geometry.dv(uvSet, surfaceParameterization)
参数: - uvSet - 浮点型,纹理坐标集编号(介于 [0,9] 之间的整数)。
surfaceParameterization - 选择器,表面参数空间。
- uvSpace - 选择实际纹理坐标(通常介于 [0,1] 之间)。
unitSpace - 计算沿 u 或 v 轴的几何相关表面拉伸,并计算采用世界坐标单位(例如米)的近似值。
看个例子:
A-->
comp(f){
top:A1
|side:color(0,1,0)X.
}
A1-->
setupProjection(0, scope.xy,22,22)
texture("/new_project/assets/Flat/flatRoof_3.jpg")
projectUV(0)
print("geometry.du:"+geometry.du(0, unitSpace))
print("geometry.dv:"+geometry.dv(0, unitSpace))
色阶函数colorRamp()
色带中符合给定 value 的十六进制颜色值(使用 gradient 进行选择)。 意味着 value 会映射到色带上并返回对应的颜色。
语法:
string colorRamp(gradient, value)
参数:
- gradient - 字符串
{ "whiteToBlack" | "greenToRed" | "yellowToRed" | "redToBlue" | "orangeToBlue" | "brownToBlue" | "spectrum" } - 预设不同的色带,可以直接使用。
- value - 浮点型(范围 [0, 1])
看个例子:
ColorRamp-->
extrude(20)
split(y){
2:Dye(split.index/split.total)
}*
Dye(val)-->
color(colorRamp("greenToRed",val))
X.
2、 CGA属性注解
起始规则注解@StartRule
起始规则注解,用于显式声明规则文件的起始规则名称,以便起始规则选择器能正确识别起始规则。
排序注解@Order(n)
属性排序注解用于控制属性,在检查器面板上的出现次序。n为属性的排序编号可取负值,值越小越靠前,反之则越靠后。
@Order(0)
attr height1 = 8
@Order(2)
attr color1 = "#FF0000"
@Order(1)
attr height2 = 1
@Order(3)
attr color2 = "#00FF00"
@StartRule
Lot-->
shapeL(5,10){shape:B|remainder:G}
B-->
extrude(height1) color(color1) C.
G-->
extrude(height2) color(color2) D.
分组注解@Group
属性分组注解用于控制属性在检查器面板上的分组。
@Group("建筑物属性",1)
attr height1 = 8
attr color1 = "#FF0000"
@Group("草地属性",2)
attr height2 = 1
attr color2 = "#00FF00"
@StartRule
Lot-->
shapeL(5,10){shape:B|remainder:G}
B-->
extrude(height1) color(color1) C.
G-->
extrude(height2) color(color2) D.
属性描述注解@Description(Info)
属性描述注解用于描述属性在检查器面板上的信息。
颜色注解@Color
颜色注解用于在检查器面板上设置颜色属性时以颜色选择器方式打开。
@Color
attr color1 = "#0000ff"
值域注解@Range
@Range(min = value,max=value,stepsize=0,restricted=true)
值域注解用于定义属性在检查器面板上的取值范围,并使用滑块来设置属性值。
@Range(min=5,max=10,stepsize=1)
attr height1 = 8
值域注解定义了height1属性在检查器面板上的取值范围为5~10,以1为滑动步长,默认值为true,可以使用滑块来设置修改其属性值。
角度注解@Angle
角度注解用于定义属性,在检查器面板上的角度取值,并用滑块来设置属性,同时添加角度单位:度。
@Group("地块属性",0)
@Angle
attr ang=0
@Distance
@Range(min=0,max=10,stepsize=1)
attr dis = 0
@Group("建筑物属性",1)
@Range(min=5,max=10,stepsize=1)
attr height1 = 8
@Color
attr color1 = "#0000ff"
@Group("草地属性",2)
@Range(min=5,max=10,stepsize=1)
attr height2 = 1
@Color
attr color2 = "#00ff00"
@StartRule
Lot-->
r(0,-ang,0)
t(-dis,0,0)
shapeL(5,10){shape:B|remainder:G}
B-->
extrude(height1) color(color1) C.
G-->
extrude(height2) color(color2) D.
距离注解@Distance
距离注解用于在属性在检查器面板上添加距离单位:米。
@Distance
@Range(min=0,max=10,stepsize=1)
attr dis = 0
给dis属性添加距离单位米
百分比注解@Percent
百分比注解用于为属性,在检查器面板上添加百分比单位:%,用法与距离注解一致。
枚举注解@Enum
@Enum(value_1,value_2,...,restricted = true)
枚举注解用于为属性在检查器面板上添加枚举列表。
@Group("地块属性",0)
@Angle
attr ang=0
@Distance
@Range(min=0,max=10,stepsize=1)
attr dis = 0
@Group("建筑物属性",1)
@Range(min=5,max=10,stepsize=1)
attr height1 = 8
@Color
attr color1 = "#0000ff"
@Enum(0.5,1,1.5,2,2.5)
attr winWidth = 1.5
@Group("草地属性",2)
@Range(min=5,max=10,stepsize=1)
attr height2 = 1
@Color
attr color2 = "#00ff00"
@StartRule
Lot-->
shapeL(5,10){shape:Building|remainder:Ground}
Building-->
extrude(height1)
color(color1)
split(y){{~1:X.|2:Floor}*|~0.5:X.}
C.
Floor-->
split(x){{~0.5:Wall|winWidth:X.}*|~0.5:Wall}
Wall-->
split(z){{~0.5:X.|1:X.}*|~0.5:X.}
Ground-->
extrude(height2) color(color2) D.
3、 外部规则导入import
通过import关键字导入当前规则文件中并用id冠以前缀。
语法:
import id : filePath
import id ( styleId, ... , styleId ) : filePath
import id : filePath ( attrId, ... , attrId )
import id : filePath ( attrId = expression, ... , attrId = expression )
import id : filePath ( )
import id : filePath ( extensionId --> operations, ... , extensionId --> operations )
参数:
- id
导入的规则、属性和函数的唯一前缀。 - filePath - 字符串
CGA 规则文件(例如,“file.cga”)的绝对路径或相对路径。
如导入的规则文件包含多个样式,则默认情况下所有样式都将被导入并且样式管理器中可见为了限制导入规则文件中可用的样式可通过在导入id后括号中的枚举导入样式来指定导入样式。
在默认情况下来自外部规则的属性值将传递到当前规则文件中,由于属性命名可能存在冲突,因此外部规则文件的属性可能被覆盖,为了解决冲突可以导入规则文件后面用括弧枚举属性做以保护。
首先编写颜色规则文件代码如下所示,并保存为colour.cga。
/* CGA File Name : colour. cga */
// common color - rulc functions
@Description("Adjust v to obtain spectral color")
@Range( min=0, step=0.1, max=1)
attr v =0.5//默认colorRamp的值为0.5
//自定义功能
//生成spectrum色带
Spectrum = colorRamp ("spectrum",v)
Spectrum(v) = colorRamp ("spectrum",v)
//个性化规则
Red --> color (1,0,0)
Orange --> color (1,0.5,0)
Yellow --> color (1,1,0)
Green --> color (0,1,0)
Cyan --> color (0,1,1)
Blue --> color (0,0,1)
Purple --> color (1,0,1)
Pink --> color (1,0.5,0.5)
然后,编写导入的颜色规则文件代码,如下所示。
//导入外部规则文件
//使用(v)保护颜色文件中的 v属性
import colour:"colour.cga"(v)
@Description("缩放因子")//使用注解描述属性v
attr v=0.2//新规则中的v变量
Lot -->
s('v,'1,'v)//缩放
extrude (10)//拉伸
color (colour.Spectrum)
//按颜色光谱色着色
X.
标签:attr,--,建模,geometry,color,规则,注解,属性 From: https://www.cnblogs.com/yitingpan/p/18211473参考教程:CityEngine 城市三维建模入门教程,作者:车明亮 王英利 王晓文,ISBN:978-7-111-70954-1