CityEngine CGA语法之切割函数 split

概要

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

参数

splitAxis (selstring):有三个取值:X,Y,Z,splitAxis表示沿哪个轴切割,XYZ轴系为模型轴系

adjustSelector:有两个取值:adjust和noAdjust,默认为adjust,adjust表示切割出来的新几何体自动调整scope范围(几何体外接最小长方体)为新几何体的scope,noAdjust表示新几何体的scope保持为切割前的scope

size (float):切割的宽度,根据前缀的不同具有不同的含义,沿轴的宽度有以下不同的解释

1.没有前缀,size代表绝对宽度,优先级高

2.带有前缀 ',相对值,值应该在 0 到 1 之间,超过了没有意义,取整体宽度的百分比,优先级高

3.带有前缀~,取近似值,根据前缀后的值,在带有相同前缀的值间进行比较。Size 值的大小本身没有绝对意义,取同类型比较的百分比。这种类型的宽度总值取前两种类型分割后的剩余值。优先级低

operations:执行在新产生的模型上的一系列操作

* :重复{ }中的分割内容

注意

相同优先级,在前面的优先程度高。先满足优先级程度高的需求

如果仅有带前缀~的,那么后面的值按照真实值进行计算,如果整个要分割的长度还有剩余,那么均分到每一个小块

示例

沿X轴切割,调整scope

Lot -->
	extrude(16)
	split(x) { 10 : A.|20 : B.| 30 : C.}





沿X轴切割,不调整scope

Lot -->
	extrude(16)
	split(x,noAdjust) { 10 : A.|20 : B.| 30 : C.}







相对尺寸切割

Lot -->
	extrude(16)
	split(x) { '0.2 : A|'0.3 : B| '0.5 : C}
A-->
	color("#ff0000")
B-->
	color("#00ff00")
C-->
	color("#0000ff")




注意:当切割范围超出几何体尺寸范围,则超出尺寸的切割操作无效

如若设置第二次切割的尺寸比例因子为0.8,则第三次切割操作无效

Lot -->
	extrude(16)
	split(x) { '0.2 : A|'0.8 : B| '0.5 : C}
A-->
	color("#ff0000")
B-->
	color("#00ff00")
C-->
	color("#0000ff")






绝对尺寸切割与近似尺寸切割

设置近似切割尺寸为~10,两个绝对切割尺寸也为10

Lot -->
	extrude(16)
	split(x) {~10 : A|10 : B| 10 : C}
A-->
	color("#ff0000")
B-->
	color("#00ff00")
C-->
	color("#0000ff")






注意:虽然近似切割尺寸设置为10,但因为它是一个近似值,优先级低,在绝对切割尺寸完成后,自动调整尺寸


设置两个近似切割尺寸分别为~2和~1,绝对切割尺寸为10

Lot -->
	extrude(16)
	split(x) {~1 : A|10 : B| ~2 : C}
A-->
	color("#ff0000")
B-->
	color("#00ff00")
C-->
	color("#0000ff")





注意:在绝对切割尺寸优先完成后,还存在两个近似切割,在存在多个近似切割的情况下,根据近似切割尺寸与同类型尺寸的百分比确定切割范围,如图,第一个近似切割尺寸占所有近似切割尺寸三分之一,第二个近似切割尺寸占所有近似切割尺寸三分之二


重复绝对切割

Lot -->
	extrude(16)
	split(x) {5 : A|10 : B| 15 : C}*
A-->	
	color("#ff0000")
B-->
	color("#00ff00")
C-->
	color("#0000ff")



注意:如图,绝对切割执行了3次完整地切割和1次不完整的切割,直到超出尺寸为止


重复近似切割


Lot -->
	extrude(16)
	split(x) {~5 : A|~10 : B| ~15 : C}*
A-->	
	color("#ff0000")
B-->
	color("#00ff00")
C-->
	color("#0000ff")



注意:如图,虽然尺寸与绝对切割尺寸相同,但近似切割并没有出现不完整切割的现象,因为近似切割会自动调整尺寸保证完整切割



  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值