GetRHLayer 选取Rhino图层 · Layer

通过右键菜单中的图层树选取器,从 Rhino 活动文档中选择图层,输出图层完整路径
📂 LK → Layer📄 GetRHLayer.cs 🎛️ 右键树形菜单 💾 状态持久化

📖 功能概述

这是一个参数选取器组件(继承自 GH_PersistentParam<GH_String>),不是常规的 Solver 组件。它没有可用输入端口,通过右键 → Set Layer 弹出一个树形视图,展示 Rhino 文档中所有图层的层级结构供用户选择。

选中后,图层完整路径(含父级路径)被持久存储在该参数中,可作为数据源连接给其他组件使用。

💡 核心特性:
  • 树形图层选取 — 以 TreeView 控件展示所有图层,支持展开/折叠父子层级
  • 全路径输出 — 输出 layer.FullPath(如 "Default::Wall::Interior"),而非仅图层名称
  • 持久化存储 — 通过 Write / Read 序列化选中的图层 GUID,保存 .gh 文件后下次打开自动恢复
  • 禁用双击输入 — 禁用标准 GH_PersistentParam 的双击命令行输入方式,强制通过右键菜单选取

📤 输出参数

名称类型说明
图层 (L) — 主输出Text 选中的图层完整路径(如:::建筑::外墙)。双击参数面板可查看当前值,也可右键 → 输入数据列表 → 一次性添加多个图层。

🎛️ 交互操作

操作方式说明
选择图层右键 → Set Layer弹出带树形视图的菜单项,展示所有非删除、非引用的 Rhino 图层。
展开/折叠点击树节点的 ▶ / ▼ 箭头自动根据 layer.IsExpanded 属性恢复展开状态。
提交选择点击任意图层节点触发 TreeView_AfterSelect,写入 PersistentData 并触发重新求解。
批量图层右键 → 输入数据列表可手动输入多个图层完整路径,实现批量输出。
连接数据源从其他 Text 组件连线连线后规则输入取代持久化数据,右键菜单不再可用。

🧠 运行机制

树形图层构建逻辑

  1. 获取顶层图层 — 从 RhinoDoc.ActiveDoc.Layers 筛选出 ParentLayerId == Guid.Empty 且未删除、非引用的图层
  2. 按 SortIndex 排序 — 保持与 Rhino 文档图层面板一致的排序顺序
  3. 递归添加子图层 — 遍历 layer.GetChildren() 递归调用 AddLayerNode
  4. 恢复之前选中状态 — 通过 _selectedLayerId 定位之前选中的节点,自动高亮

序列化流程

// 写入:将选中图层 GUID 保存到 .gh 文件 writer.SetString("SelectedLayerId", _selectedLayerId.ToString()); // 读取:加载后恢复选中状态 string idStr = reader.GetString("SelectedLayerId"); if (Guid.TryParse(idStr, out Guid id)) _selectedLayerId = id;

注意点:无 Rhino 文档时的行为

如果 RhinoDoc.ActiveDoc 为 null,右键菜单项返回 null,不可用。

如果连线了外部数据源(SourceCount > 0),右键菜单同样不可用,组件退化为常规 Text 数据传递。

🧪 典型使用场景

⚠️ 注意事项

📋 组件信息

名称选取Rhino图层
英文名Layer
分类LK → Layer
基类GH_PersistentParam<GH_String>
特色树形图层选取、右键菜单、持久化序列化、禁用双击命令行
GUID{14878C5E-776C-4B60-841B-6CB36126B4B3}

更新日期:2026-06-29