翻转树形数据 · Flip Tree

将树形数据的最后一级路径索引与分支内元素的序号互换,实现树形结构的转置
📂 LK → Tree 📄 FlipTree.cs 🔄 结构转置 🏗️ 树形变换

📖 功能概述

翻转操作是 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]

📥 输入参数

名称类型必填说明
树形数据 (D) Generic 必需 需要翻转最后一级的树形数据结构。所有路径深度必须一致。

📤 输出参数

名称类型说明
翻转后数据 (D) Generic 最后一级索引与元素序号互换后的新树形数据。

🎯 典型应用

⚠️ 注意事项:
  • 所有路径深度必须一致,否则组件会报错中止。
  • Flip 操作不会丢失任何数据——元素总数保持不变,只是重组了路径结构。
  • 空分支(含 0 个元素的分支)在翻转时不会被分配任何元素到新路径。
  • Flip 与 GH 自带的 Flip Matrix 组件概念相似,但更灵活——适用于任意深度的树形数据。

📋 组件信息

名称翻转树形数据
英文名Flip Tree
分类LK → Tree
基类GH_Component
GUID39C6B2AC-9772-4664-80C2-72AE6C63EF5F