這一次收編了兩位貢獻者的 Revit UI 成果:嘉祥(@laytonluo)補上 ribbon 上的 MCP 服務狀態圖示,任遠(@7alexhuang-ux)帶來一整套相機管理停靠面板、Key Plan 一鍵四視圖,以及視圖診斷/篩選器/Section Box/文件操作共 29 支新工具。
git pull 的話,你什麼都不會看到這次改的是 C# add-in 本體,不是文件。Revit 載入的是已編譯的 RevitMCP.dll,所以同步原始碼不會讓 ribbon 改變;而停靠面板是在 OnStartup 註冊的,不重啟 Revit 就不會出現。先把這四步做完,再往下看功能。
① ribbon 完全沒變 → 沒重建/沒重新部署 DLL。
② 沒有「相機管理」按鈕 → 部署了但沒重啟 Revit。
③ AI 端還是只有 192 支工具 → 沒跑 npm run build;MCP client 執行的是 MCP-Server/build/,不是 src/。
# 1. 同步 fork(或直接用 GitHub 頁面上的 "Sync fork" 按鈕)
git remote add upstream https://github.com/shuotao/REVIT_MCP_study.git # 只需做一次
git fetch upstream
git merge upstream/main
# 2. 重建 MCP Server(工具 192 → 221 靠這一步生效)
npm --prefix MCP-Server run build
# 3. 重建 add-in —— 換成你自己的 Revit 版本(R22/R23/R24/R25/R26)
dotnet build -c Release.R24 MCP/RevitMCP.csproj
# 4. 部署
powershell -File scripts/install-addon.ps1 -Version 2024
然後重啟 Revit。npm 相依套件這次沒有變動,不需要重跑 npm install。
任遠的規格書裡寫著「R22/R23 有既有的 CommandExecutor.LinkDisplay.cs 編譯錯誤」——那是他開發中途的狀態。他後來自己補了版本防護,收編時在乾淨環境複驗過:R22、R23、R24、R25、R26 五組建置各 0 error。如果你是 Revit 2022/2023,可以照上面的步驟直接升。
以前「MCP 服務(開/關)」按鈕沒有圖示,服務是開還是關只會在你按下去的那一瞬間、由一個 TaskDialog 告訴你一次——關掉對話框之後 ribbon 上就沒有任何線索了。想確認狀態只能再按一次,而再按一次就把它關掉了。
按鈕帶 ON/OFF 圖示,與 SocketService.IsRunning 連動;滑過去的 tooltip 直接寫「MCP 服務:開啟/監聽中(port 8964)/點擊停止」。port 是從 ConfigManager 實際讀的,改過 REVIT_MCP_PORT 的人會看到自己的那個號碼。
服務啟動是非同步的(StartAsync() fire-and-forget),port 被佔用時內部會先等 500 ms 才真正綁定——原實作在那段時間讀到的狀態還是「關」。現在改成「按下去立刻套一次 + 之後幾次 Revit 閒置再讀回校正」,所以不會停在錯的圖示上。
入口:功能區 MCP Tools → 相機管理。它是 Revit 原生停靠面板(預設停在右側,寬度 300–600 px 可用),不是 MCP App——不需要 AI client 連線也能用。管理對象是專案裡所有 IsPerspective = true 的非樣板 3D 視圖。
面板是懶載入:開檔、切視圖、面板本身載入都不會自動去讀模型,會停在「按『重新整理』載入相機」。這個設計是為了修一輪崩潰——原本在文件還在開啟時就同步做 DataGrid 重繪與 ExportImage,會讓 Revit 在開檔後 5–10 秒掛掉(0xe0434352)。所以:先按「重新整理」。
| 區 | 內容 |
|---|---|
| ① 工具列 | 搜尋框(依名稱篩選)/重新整理/從透視圖同步(在透視圖裡導覽過但清單沒更新時強制重讀)/「⋯」選單(匯出 Excel、開啟預覽視窗) |
| ② 相機清單 | 每台相機一列:名稱、樓層、離樓板高度、水平角、俯仰角。右鍵欄標題可勾出選用欄位(平面 X/Y、遠裁剪、視野角估算、Eye Elevation 原始值) |
| ③ 位置圖 | 該樓層平面底圖上畫出所有相機位置與視野扇形。滾輪縮放、左鍵拖曳平移、雙擊空白=符合畫面 |
| ④ 視圖操作 | 一鍵 4 視圖、一鍵出圖紙、更新樓層總覽、重設剖面位置、等角範圍/近側、剖面方向/位置、剖面轉 90° 等下拉選項 |
| ⑤ 人視高預設值 | 批次把相機設到人視高的預設值 |
| ⑥ 狀態列 | 最近一次動作的結果或錯誤,前面帶 HH:mm |
單擊只是選取。雙擊相機名稱(或位置圖上的圓點)會產生/更新三張真實的 Revit 視圖——平面 Key Plan、沿視線的剖面、等角——再連同原透視圖一起並排。視圖以 Extensible Storage 綁在相機上,改名不會變孤兒、重跑不會重複建立。
清單裡的樓層、離樓板高度、水平角、俯仰角都可以就地編輯,按 Enter 直接下交易改模型。輸入無效值會還原,不彈對話框。
一鍵 4 視圖/僅打開透視圖/重新命名/複製到其他樓層/視角版本(具名視角快照,存在 .rvt 裡可切回)/一鍵出圖紙/重設剖面到視線。清單列與位置圖標記共用同一個選單。
| 原本的麻煩 | 面板的回答 |
|---|---|
| 性質面板的 Eye Elevation 從內部原點量起,看不出相機離樓板多高 | 一律顯示「離樓板高度」;原始 Eye Elevation 只唯讀備查 |
| 相機在平面上看不到、不能列印 | Key Plan 平面/剖面上畫出相機標記,是真的 Revit 詳圖元素,可列印 |
| 沒有總覽,不知道一共有幾台、分佈在哪 | 清單+位置圖一次看完;每層另可產生一張「樓層總覽」平面 |
| 每台相機要手動排圖紙;想試不同角度得另開一台相機 | 一鍵出圖紙;具名「視角版本」存在模型裡,隨時切回 |
完整規格(每個按鈕的行為、樓層判定規則、ES Schema)在 docs/camera-manager/spec.zh-TW.md;為什麼這樣決定在 adr.zh-TW.md;哪些還沒驗證在 roadmap.zh-TW.md。
面板的功能另外包了 8 支工具供自動測試呼叫同一套服務程式碼,其餘 21 支是視圖診斷與文件操作。全部可在 Tools 索引查到卡片。
| 分組 | 數 | 工具 |
|---|---|---|
| 相機管理 | 8 | list_cameras、get_camera_info、set_camera_pose、run_camera_keyplan、run_camera_overview、create_camera_sheet、copy_camera_to_level、camera_version |
| 視圖表現法診斷/控制 | 6 | get_view_graphics_diagnostics、set_view_template_controls、create_view_filter、remove_view_filter、get_filterable_parameters、list_fill_patterns |
| 視圖範圍/裁剪/出圖 | 4 | get_view_range、set_view_range、get_view_extents、capture_view_image |
| Section Box | 2 | set_section_box、set_3d_section_box |
| 連結顯示 | 3 | get_link_display_settings、set_link_display_settings、reload_links |
| 材質圖形 | 2 | get_material_graphics、set_material_graphics |
| 文件操作 | 4 | list_open_documents、open_document、close_document、save_document |
get_view_graphics_diagnostics——唯讀回答「這張圖為什麼長這樣」。它沿 Revit 的覆寫優先序(視覺型式 > 元素覆寫 > 篩選器 > 類別覆寫 > 材料)一次掃完,把所有命中的成因都列出來,而不是只回報第一個。以前這題要人工翻五個地方。
R22–R26 五組建置各 0 error;registerRevitTools() 實回 221 支、零重複;MCP-Server build 通過;兩個 ribbon 圖示確認已編進 RevitMCP.g.resources(R22 與 R25 各驗一次);verify-qaqc.ps1 -SkipBuild -SkipDeploy 67 PASS/0 FAIL。
這批功能沒有在 upstream 做過 Revit 實機驗證——收編時本機 Revit 未執行,驗收只到建置與資源嵌入層。停靠面板的開啟與操作手感、Key Plan 四視圖的實際幾何、ribbon 圖示的外觀與切換、以及任遠自己列出的未驗清單(崩潰修復未能複現、迷你地圖縮放平移、剖面保留調整的端到端行為),目前全部仍是待驗狀態。
%APPDATA%\RevitMCP\Logs 裡的 log 會更快。