📖 功能概述
翻转操作是 Grasshopper 树形数据处理中的一个经典变换——将数据树的最后一级路径索引与分支内元素的序号互换位置。
其效果类似于矩阵转置:原本分散在不同分支、同一位置的元素,会被重组成一个新的独立分支。
简单理解:如果原数据是一个表格(行=分支,列=元素),翻转后行和列互换。
所有原路径的「最后一级编号」变成新分支的元素序号,而「元素序号」变成新路径的最后一级编号。
🧠 核心算法:最后一级翻转
先决条件检查
一致性校验:遍历所有路径,确保路径深度(索引数)全部相等。
├─ 深度不一致 → 报 Error 终止
└─ 深度一致 → 进入翻转逻辑
翻转过程
设路径深度为 N(例如 {0;1;2} 的深度为 3),前缀长度 = N - 1:
对每条路径 i,每个元素 k:
新路径 = 前缀(原路径前 N-1 个索引) + 追加(k)
数据 = 该元素
示例(N=2):
输入:{0;0}→[A,B,C], {0;1}→[D,E], {0;2}→[F,G]
前缀 = 原路径[0](仅保留第1级)
A:前缀{0} + 追加(0) → {0;0}
B:前缀{0} + 追加(1) → {0;1}
C:前缀{0} + 追加(2) → {0;2}
D:前缀{1} + 追加(0) → {1;0}
E:前缀{1} + 追加(1) → {1;1}
F:前缀{2} + 追加(0) → {2;0}
G:前缀{2} + 追加(1) → {2;1}
输出:{0;0}→[A], {0;1}→[B], {0;2}→[C], {1;0}→[D], {1;1}→[E], {2;0}→[F], {2;1}→[G]