← 返回函数库

split

部分实现Geometry细分
✅ 已实现:XYZ 轴分割(split(x) / split(y) / split(z))功能完整,支持所有官方用法。
⚠️ 已知限制:UV 空间分割(split(u) / split(v))语法已解析,但几何裁剪目前采用基于 scope 的近似映射,非真实 UV 空间投影。多轴同时分割(split(xyz))尚未支持。

语法

split(axis) { size1 : operations1 ... sizeN : operationsN }
split(axis, adjustMode) { ... }

-- 带重复后缀
split(axis) { ... }*

尺寸模式

模式写法说明
绝对2.5固定长度单位
相对'0.3占父 scope 的百分比
浮动~1按比例分配剩余空间
重复2*~1*重复填充整个空间

Adjust 模式

模式说明
adjust(默认)最后一个分支自动调整以填充父 scope 空隙
noAdjust保持父 scope 尺寸,不压缩/拉伸子 scope

示例

-- 基础分割
Lot -->
  split(x) { 2 : Green | 3 : Red | ~1 : Blue }

-- 带重复的房屋楼层
Building -->
  split(y) { ~1 : Floor }*

-- noAdjust 模式
Facade -->
  split(x, noAdjust) { 2 : Window | 2 : Wall }

-- UV 分割(语法支持)
Shape -->
  split(u, uvSpace, 0) { '0.5 : Left | ~1 : Right }

测试覆盖

16 个官方 CityEngine split 示例全部通过测试,14 个官方示例已发布至 marketplace.cgajs.com

相关函数

comp · extrude · offset

🎨 3D 预览 — 楼层分割

@StartRule
Lot --> primitiveCube(6, 4, 0.3)
        extrude(9)
        comp(f) { top: Roof | side: Facade }

Facade -->
  split(y) { ~1 : Floor }*

Floor -->
  split(x) { 1 : Wall | 2 : Window | 1 : Wall }

Window --> color(0.3, 0.5, 0.8)
Wall   --> color(0.75, 0.7, 0.65)
Roof   --> color(0.5, 0.25, 0.2)