1. 程式人生 > >CityEngine CGA語法之切割函式 split

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")



注意:如圖,雖然尺寸與絕對切割尺寸相同,但近似切割並沒有出現不完整切割的現象,因為近似切割會自動調整尺寸保證完整切割