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 }
🎨 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)