首页 > 其他分享 >规则建模(二)

规则建模(二)

时间:2024-05-30 22:23:11浏览次数:14  
标签:attr -- 建模 geometry color 规则 注解 属性

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. }

image

几何面积函数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))	 //打印所有面积

image

几何高度函数geometry.height()

语法:

  • float geometry. Height()

看个例子:

Height-->
	color(0,1,0)
	print("Height:"+geometry.height())

image

纹理尺寸函数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))

image

色阶函数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.

image

2、 CGA属性注解

起始规则注解@StartRule

起始规则注解,用于显式声明规则文件的起始规则名称,以便起始规则选择器能正确识别起始规则。
image

排序注解@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.

image

分组注解@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.

image

属性描述注解@Description(Info)

属性描述注解用于描述属性在检查器面板上的信息。
image

颜色注解@Color

颜色注解用于在检查器面板上设置颜色属性时以颜色选择器方式打开。

@Color
attr color1 = "#0000ff"

image

值域注解@Range

@Range(min = value,max=value,stepsize=0,restricted=true)值域注解用于定义属性在检查器面板上的取值范围,并使用滑块来设置属性值。

@Range(min=5,max=10,stepsize=1)
attr height1 = 8

image
值域注解定义了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.

image

距离注解@Distance

距离注解用于在属性在检查器面板上添加距离单位:米。

@Distance
@Range(min=0,max=10,stepsize=1)
attr dis = 0

image 给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.

image

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.

image


参考教程:CityEngine 城市三维建模入门教程,作者:车明亮 王英利 王晓文,ISBN:978-7-111-70954-1

标签:attr,--,建模,geometry,color,规则,注解,属性
From: https://www.cnblogs.com/yitingpan/p/18211473

相关文章

  • 文本挖掘tf-idf,主题建模,情感分析,n-gram建模研究|附代码数据
    原文链接:http://tecdat.cn/?p=6864我们围绕文本挖掘技术进行一些咨询,帮助客户解决独特的业务问题。我们对20个Usenet公告板的20,000条消息进行分析 ( 点击文末“阅读原文”获取完整代码数据******** )。此数据集中的Usenet公告板包括新汽车,体育和密码学等主题。预处理我们首......
  • Ubuntu server 24 安装配置 snort3 3.2.1.0 网络入侵检测防御系统 配置注册规则集
    一下载并安装源代码地址:https://github.com/snort3/snort3/releases#下载,解压wgethttps://github.com/snort3/snort3/archive/refs/tags/3.2.1.0.tar.gztarzxvf3.2.1.0.tar.gz二 安装软件依赖包1安装依赖包sudoaptupdatesudoaptinstallbuild-essentia......
  • 风控建模常用指标——WOE/IV/COR/VIF/PSI总结以及实现代码
    风控建模常用指标——WOE/IV/COR/VIF/PSI总结以及实现代码在金融领域,风险控制(风控)是维护金融稳定和安全的重要环节。随着大数据时代的到来,金融机构越来越依赖于数据驱动的风控模型来评估和量化风险。在构建这些模型时,一系列关键指标成为了衡量和解释模型性能的基石。其中,WO......
  • 【源码】Spring Data JPA原理解析之Repository自定义方法命名规则执行原理(一)
     SpringDataJPA系列1、SpringBoot集成JPA及基本使用2、SpringDataJPACriteria查询、部分字段查询3、SpringDataJPA数据批量插入、批量更新真的用对了吗4、SpringDataJPA的一对一、LazyInitializationException异常、一对多、多对多操作5、SpringDataJPA自定......
  • Excel中怎样将第一行建立好的规则套用到每一行?
    考虑使用条件格式来完成,有两种方式可以尝试:一、一次性创建条件格式1.选中需要设置条件格式的区域,如果是不连续的区域,可以按住Ctrl键,然后用鼠标依次选中需要的数据区域2.点击开始选项卡,条件格式,在下拉选项中,点一下新建规则,3.在弹出的对话框中选中使用公式确定要设置格......
  • 数学建模--LaTex插入表格详细介绍
    目录1.插入普通的边线表格3.三线表的插入和空格说明3.基于复杂情况下表格的插入1.插入普通的边线表格(1)像这个右边的生成的这个比较普通的表格,我们是使用下面的代码实现的:(2)和插入一个一个图片一样,这个表格的插入也要构建一个环境,这个环境就是在这个\begin的后面加上{t......
  • 基于最新发表的端到端实时目标检测模型YOLOv10开发构建自己的个性化目标检测系统从零
    在我前面的系列博文中,对于目标检测系列的任务写了很多超详细的教程,目的是能够读完文章即可实现自己完整地去开发构建自己的目标检测系统,感兴趣的话可以自行移步阅读:《基于官方YOLOv4-u5【yolov5风格实现】开发构建目标检测模型超详细实战教程【以自建缺陷检测数据集为例】》......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
      在新课程下,培养学生的数学核心素养是高中数学课堂教学的根本任务。其中的建模思想是数学核心素养培养的一个基本指标,是学生正确认识数学知识内在本质与原理的重要思维工具。通过在数学课堂教学中有效地应用建模思想,主要的应用意义体现在如下几个方面:其一,通过在数学课堂中融入......
  • 深入解析Nginx Location匹配规则:顺序详解与最佳实践
    目录Nginxlocation匹配顺序详解总结与最佳实践 Nginx的location匹配顺序是Nginx配置中非常核心且重要的概念,它决定了Nginx如何处理进入服务器的请求。理解location匹配顺序不仅有助于优化Nginx的性能,还能确保网站或应用的正确运行。下面将详细阐述Nginx的location匹......
  • 关于统一建模语言UML
    某培训机构入学管理系统有报名、交费和就读等多项功能,下面是对其各项功能的说明:1、报名:由报名处负责,需要在学员登记表上进行报名登记,需要查询课程表让学员选报课程,学院所报课程将记录到学员选课表2、交费:由收费处负责,需要根据学员所报课程的收费标准进行收费,然后在账目表上记......