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):切割的寬度,根據字首的不同具有不同的含義,沿軸的寬度有以下不同的解釋
operations:執行在新產生的模型上的一系列操作1.沒有字首,size代表絕對寬度,優先順序高
2.帶有字首 ',相對值,值應該在 0 到 1 之間,超過了沒有意義,取整體寬度的百分比,優先順序高
3.帶有字首~,取近似值,根據字首後的值,在帶有相同字首的值間進行比較。Size 值的大小本身沒有絕對意義,取同類型比較的百分比。這種型別的寬度總值取前兩種型別分割後的剩餘值。優先順序低
* :重複{ }中的分割內容
注意
相同優先順序,在前面的優先程度高。先滿足優先順序程度高的需求
如果僅有帶字首~的,那麼後面的值按照真實值進行計算,如果整個要分割的長度還有剩餘,那麼均分到每一個小塊
示例
沿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")
注意:如圖,雖然尺寸與絕對切割尺寸相同,但近似切割並沒有出現不完整切割的現象,因為近似切割會自動調整尺寸保證完整切割