Tuna.Revit.Toolkit Skill
本技能是关于如何在 Revit 二开中使用 Tuna.Revit.Toolkit(常见为 Tuna.Revit.Extensions 与 Tuna.Revit.Infrastructure)完成查询、选择、事务、变换、Ribbon 与命令编写。
Use this skill when the user asks practical “how to do X with Tuna” questions: Document queries, selection, transactions, transforms, ribbon wiring, and command patterns.
Quick routing / 快速定位
按功能分级把需求路由到 resources/ / templates/,再从对应小节复制最短可运行代码。
A) 入口与 UI(App / Ribbon / Command)
- App 入口(OnStartup / InitailizeComponents)→
templates/app.tmpl.cs+resources/02-ribbon-wiring.md - Ribbon 挂载(Tab / Panel / Button / Icon)→
resources/02-ribbon-wiring.md - Command 骨架 / 命令上下文(UIApplication/UIDocument/Document)→
templates/command.tmpl.cs+resources/03-command-context.md
B) 交互与数据(Query / Selection)
- 图元查询 / element query(Document.GetElements...)→
resources/01-element-query.md - 单选 / select one element(SelectElement)→
resources/04-selection.md - 多选 / select multiple elements(SelectElements)→
resources/04-selection.md - 框选 / select by rectangle(SelectElementsByRectangle)→
resources/04-selection.md
直接参考:04-selection.md:L89-L109 - 点选 / pick point(SelectPoint)→
resources/04-selection.md
C) 修改模型(Transactions / Transforms)
- 事务 / transactions(NewTransaction / NewTransactionGroup)→
resources/05-transactions.md - 变换 / transforms(Move / Rotate / Transform)→
resources/06-transforms.md
D) 进阶(ExternalEvent / Transient / Pitfalls)
- 外部事件 / external event(非 Revit 上下文回到 Revit API)→
resources/03-command-context.md(ExternalEvent 段落) - 临时显示 / transient display(TransientDisplay)→
resources/06-transforms.md(TransientDisplay 段落) - 常见坑 / pitfalls →
resources/07-pitfalls.md
Fastest path / 最短上手路径
目标:用最少代码把 “App + Ribbon + Command” 跑起来,然后再叠加 selection / transaction / query。
1) Application 入口(Revit 启动时注册 Ribbon)
推荐继承 TunaApplication 并实现 InitailizeComponents():
- 可复制骨架:
templates/app.tmpl.cs - 详细说明:
resources/02-ribbon-wiring.md
2) Command 入口(从 TunaCommand 拿上下文 + 写业务)
推荐继承 TunaCommand,并在 Execute() 中拿到 UIApplication/UIDocument/Document:
- 可复制骨架:
templates/command.tmpl.cs - 详细说明:
resources/03-command-context.md
3) 在事务里修改模型(推荐用 Extensions 的 NewTransaction)
修改模型必须进事务:优先使用 document.NewTransaction(...) / document.NewTransactionGroup(...):
- 详细说明:
resources/05-transactions.md
How to use / 使用方式
当被调用时,请按以下顺序组织输出:
- 先给出最短路径(最少代码、最少步骤)让用户跑起来
- 再补充可选增强(过滤器、错误处理、多版本兼容、性能)
- 输出可直接粘贴的代码片段,并引用仓库内已有模式(如
TunaApplication/TunaCommand)
Patterns / 输出模式(写答案时的默认套路)
- 如果用户问“怎么写插件入口 / Ribbon 怎么挂” → 先给
TunaApplication + AddRibbonTab + AddRibbonPanel + AddPushButton的最短骨架,再补CommandButtonAttribute与图标路径规则。 - 如果用户问“怎么选 / 框选 / 点选” → 直接用
SelectionExtensions,并提醒用SelectionResult<T>.SelectionStatus判断是否 Cancelled。 - 如果用户问“怎么改模型 / 移动旋转” → 先包
document.NewTransaction(...),再用 Revit API(如ElementTransformUtils),并提示 pinned/constraints/group 失败场景。 - 如果用户问“怎么在非命令上下文改模型” → 先用
IExternalEventService.PostCommand(...)把动作投递回 Revit 上下文。
Knowledge layout / 知识结构
- 治理入口:
metadata.yaml(版本、触发、归属等) - 稳定性基座:
examples/(输入输出示例) - 结构一致性:
templates/(可复用代码骨架) - 确定性能力:
scripts/(可执行检查/生成逻辑) - 知识上下文:
resources/(按需引用的详细说明)
优先从 resources/ 选择最相关小节组合答案;需要给出“可复制骨架”时,引用 templates/;需要展示期望输出形态时,引用 examples/。
Source: shichuyibushishiwu/Tuna.Revit.Toolkit — distributed by TomeVault.