Files
STPViewer/README.zh-TW.md
T
etwenandClaude Fable 5 38eb6d92d9 docs: Refresh ARCHITECTURE/README (EN+zh-TW) for v0.5.0 feature set
- READMEs: version badge 0.5.0, hotkey column in measure table,
  circle-center snap / standard views / ortho / tree search & isolate /
  volume / 3-pt section / multi-file interference / STEP export /
  settings & MRU; version history adds v0.4.0 and v0.5.0
- ARCHITECTURE: overview bullets, data models (ModelNodeViewModel,
  MeasureMode.Volume) brought up to date

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 09:00:56 +08:00

214 lines
11 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# STPViewer
[![English](https://img.shields.io/badge/English-lightgrey.svg)](README.md) [![繁體中文](https://img.shields.io/badge/%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87-2ea043.svg)](README.zh-TW.md)
> STP/STEP 3D 檢視器(Windows 桌面程式,C# .NET 8 WPF)— 多檔匯入、裝配樹、點/距離/邊/面/圓量測。
![version](https://img.shields.io/badge/version-0.5.0-blue.svg) ![platform](https://img.shields.io/badge/platform-Windows-0078D6.svg) ![.NET](https://img.shields.io/badge/.NET-8.0-512BD4.svg) ![UI](https://img.shields.io/badge/UI-WPF-blueviolet.svg)
---
## 📖 目錄
- [✨ 功能特色](#-功能特色)
- [💻 系統需求](#-系統需求)
- [📥 安裝](#-安裝)
- [🚀 快速開始](#-快速開始)
- [📚 使用指南](#-使用指南)
- [🔨 從原始碼建置](#-從原始碼建置)
- [📁 專案結構](#-專案結構)
- [⚠️ 已知限制](#-已知限制)
- [🤝 貢獻](#-貢獻)
- [📜 版本紀錄](#-版本紀錄)
- [🙏 致謝](#-致謝)
---
## ✨ 功能特色
快速開啟機構件 STEP 檔做確認與量測,不需安裝 SolidWorks / Creo 等重量級 CAD。
- **多檔匯入** — STEP / STL / DXF,工具列匯入(可複選)、拖放到視窗、命令列 `STPViewer.exe a.stp b.stl`,或最近檔案下拉(▾,最近 10 筆)
- **裝配樹** — STEP product structure 還原成樹(組件→零件);逐節點 顯示/隱藏、換色(cascade)、Zoom-to;檔案層級可移除、開關輪廓邊線;**名稱搜尋過濾**;右鍵 **只顯示此節點 / 反轉顯示 / 全部顯示 / 量體積質心**;tooltip 顯示外形尺寸 L×W×H
- **量測**(工具列切換模式或快速鍵,點擊模型):
| 模式 | 快速鍵 | 輸出 |
|---|---|---|
| 📍 點 | P | XYZ 座標(自動吸附鄰近 B-rep 頂點**或圓心** |
| 📏 距離 | D | 兩點直線距離 + ΔX/ΔY/ΔZ — 點兩個孔緣即吸附**圓心**=直接量 pin pitch |
| 📐 邊 | E | 直線長 / 曲線長 / 圓弧長 + 半徑 |
| ⬛ 面 | F | 面積(網格近似)+ 曲面類型(平面法向量、圓柱半徑/軸向) |
| ⭕ 圓 | C | 圓心 / 半徑 / 直徑 / 周長 |
| ∠ 角度 | A | 兩面(法向量)/ 兩直線邊 夾角 + 補角 |
| ⇔ 面距 | M | 面到面最短距離(網格近似)+ 最近點對 |
| ⚖ 體積 | (樹右鍵) | 網格 signed volume + 質心標記 + 外形尺寸(封閉實體) |
| ⤚ 對齊(兩點) | | 點「要移動零件」一點 + 目標點 → 純平移使兩點貼合 |
| 🎯 對齊(三點) | | 來源檔 3 點 + 目標檔 3 對應點 → 旋轉+平移一次貼合 |
同鍵再按 = 退出模式;**Esc** 先取消進行中的點選、再按退出模式。
- **旋轉** — 樹面板選檔案 + 工具列 ↻X/↻Y/↻Z 繞中心 +90°(擺正方向用,連按累加)
- **拖曳** 🖐 — 手形游標模式,左鍵按住零件沿螢幕平面拖動、放開定位(右鍵轉視角不受影響)
- **操作器** ⊹ — 樹面板選檔案 → XYZ 三色箭頭 + 旋轉環(Fusion 360 風格);拖箭頭沿該軸移動(與視角無關)、拖環繞軸轉。永遠浮在最上層、不被實體遮擋
- **干涉檢查** 🧩 — 2 個以上可見檔案**兩兩配對**檢查:相交時顯示紅色干涉交線 + 相交三角形對數;無相交時回報最小間隙 gap(gap≈0 即為配合 match,共面貼合不算干涉)
- **剖面** ✂ — X/Y/Z 軸或**在模型上點 3 點定義任意平面**;位置滑桿 + 數值輸入 + 反向;CPU 網格裁切(背景平行運算),原始幾何保留(量測仍精確)
- **單位** — mm ⇄ inch 一鍵切換,既有量測(清單與 3D 標籤)即時換算
- **匯出** — 量測結果 CSVUTF-8 BOMExcel 中文不亂碼)、3D 視圖 2× PNG 截圖、📤 **STEP 匯出**:可見零件以目前對齊位置寫成新 STEP 檔(原始檔不動)
- **視角** — 右鍵旋轉、滾輪縮放、中鍵平移、ViewCube;一鍵 **等角/前/上/右** 標準視圖與 **正交⇄透視** 切換
- **記住設定** — 視窗位置大小、單位、最近檔案自動保存;左右面板可拖曳調寬
量測原則:邊長、圓半徑、角度取 **B-rep 精確值**;面積為三角網格加總近似(三角化精度依模型尺寸自適應 0.02–0.5 mm)。
---
## 💻 系統需求
| 項目 | 需求 |
|------|------|
| 作業系統 | Windows 10 / 11x64 |
| 執行階段 | .NET 8 Desktop Runtime(框架相依版)— Portable 版則免裝 |
| 建置 SDK | .NET 8 SDK(僅從原始碼建置時需要) |
---
## 📥 安裝
下載發佈版直接執行,免安裝。
- **框架相依版**(檔案較小):需 .NET 8 Desktop Runtime,執行 `STPViewer v0.5.0.exe`
- **Portable 版**self-contained):內含 runtime,免安裝 / 免系統管理員,執行 `STPViewer v0.5.0.exe`
或從原始碼建置(見下)。
```bash
git clone https://github.com/ETWen/STPViewer.git
cd STPViewer
dotnet build STPViewer.sln
```
---
## 🚀 快速開始
```bash
# 建置並執行
dotnet build STPViewer.sln
dotnet run --project src/STPViewer
# 發佈免安裝資料夾
dotnet publish src/STPViewer -c Release -o publish/STPViewer
```
接著匯入 `.stp` 檔(工具列「匯入」、拖放、或命令列帶檔),選一個量測模式,點擊模型即可。
---
## 📚 使用指南
1. **匯入** 一個或多個 CAD 檔,每個檔案成為裝配樹的一個 root,視角自動 Zoom 到全景。
2. **操作樹** — 名稱搜尋、顯示/隱藏(或右鍵隔離顯示)、換色、Zoom-to 某節點,或移除檔案。
3. **量測** — 工具列選模式或按快速鍵(P/D/E/F/C/A/M),點擊模型;點孔緣自動吸圓心,兩下就是 pin pitch;Esc 取消。結果顯示於右側面板,可單筆刪除或全部清除。
4. **裝配** — 用 對齊(兩點/三點)、旋轉、拖曳、操作器擺位,再用干涉檢查(可見檔全部兩兩檢查)驗證配合。
5. **剖面** — 開啟 ✂、選軸向或點 3 點定義任意平面、滑動(或輸入 %)剖切;量測仍以原始幾何精確計算。
6. **匯出** — 量測結果存 CSV、截 2× PNG,或把對齊後的場景寫成新 STEP 檔交接給 CAD。
無 UI 匯入管線與幾何數學驗證:
```bash
dotnet run --project tools/SmokeTest -- "path\to\model.stp" # 匯入 + 裝配樹
dotnet run --project tools/SmokeTest -- --clip-test # 剖切裁切數學
dotnet run --project tools/SmokeTest -- --interference-test # 干涉 相交/分離/貼合
dotnet run --project tools/SmokeTest -- --align-test # 三點對齊剛體變換數學
dotnet run --project tools/SmokeTest -- --export-test in.stp out.stp # STEP 匯出往返驗證
```
---
## 🔨 從原始碼建置
```bash
dotnet build STPViewer.sln -c Debug
dotnet run --project src/STPViewer
dotnet publish src/STPViewer -c Release -o publish/STPViewer
```
NuGet 相依(自動還原):`CADability``HelixToolkit.Wpf``CommunityToolkit.Mvvm`
---
## 📁 專案結構
```
STPViewer/
├── ARCHITECTURE.md # 設計、資料流、開發 Phase
├── CLAUDE.md # 專案記憶 & 開發慣例
├── STPViewer.sln
├── src/STPViewer/
│ ├── STPViewer.csproj # net8.0-windows、UseWPF、單一版號來源 <Version>
│ ├── MainWindow.xaml / .cs # 版面 + 滑鼠拾取轉發
│ ├── Models/ # FaceInfo、MeasureMode、MeasurementResult、UnitSystem
│ ├── Services/ # StepImport、Measurement、Interference、Section、RigidAlign、Settings
│ └── ViewModels/ # MainViewModelpartialDrag/Gizmo/Section/Interference/Export)、ModelNodeViewModel
└── tools/SmokeTest/ # 無 UI 匯入 + 幾何數學驗證
```
---
## ⚠️ 已知限制
- 大型 STEP(數千面)匯入需數十秒(CADability 解析成本),匯入期間有進度提示、UI 不凍結。
- 輪廓邊線超過 30,000 線段的檔案預設關閉邊線(WPF `LinesVisual3D` 轉動視角時效能限制),可在樹面板手動開啟。
- **IGES 不支援**CADability 無 IGES reader);STL 無 B-rep,僅支援 點/距離/角度/面距 量測;DXF 為線架構檢視。
- 剖切面無封口(cap),剖開處顯示內部背面材質(深灰)。
- STEP 匯出為「目前位置的 Solid/Shell 平面清單」,不保留原始裝配階層與 product 名稱;STL 網格、DXF 線架構無 B-rep 不匯出。
- 面積、面距、體積/質心為三角網格近似值;邊長/圓半徑/角度為 B-rep 精確值。
- 少數 AP242 檔案 CADability 支援不完整,匯入失敗會提示訊息(不閃退)。
- 唯讀檢視器,不寫入/修改原始檔案。
---
## 🤝 貢獻
1. Fork 並建立 feature 分支:`git checkout -b feature/your-feature`
2. 遵循 [Conventional Commits](https://www.conventionalcommits.org/)`feat(scope): summary`
3. Push 後開 Pull Request
---
## 📜 版本紀錄
### v0.5.0
- **功能擴充:** 圓心吸附(兩下量孔對孔 pitch)、量測快速鍵(P/D/E/F/C/A/M+ Esc、標準視圖(等角/前/上/右)+ 正交投影、裝配樹搜尋/隔離顯示/反轉、體積與質心、3點任意剖切平面 + 位置數值輸入、干涉檢查支援 3+ 檔(兩兩配對)、對齊後場景匯出 STEP、面板可調寬、視窗/單位/最近檔案自動保存。
### v0.4.0
- **效能:** 剖面裁切改背景平行運算(大檔拉滑桿不再凍結 UI);零件變換烘焙(拖曳/操作器放開)平行化;干涉間隙精修以 AABB 快速拒絕加速。
- **穩定性:** 全域例外處理(記 log 至 `%LOCALAPPDATA%\STPViewer\error.log` + 訊息框,不閃退);背景運算期間停用會改動幾何的指令;匯入防重入。
### v0.3.2
- **效能:** 大組件量測模式下轉動視角不再卡頓。量測模式改為渲染合併網格(每檔 1 個 model),並用命中三角形的頂點 index 反查回是哪個面,不再掛數萬個逐面 model;逐面渲染只保留給剖面模式。
- 相機互動暫停事件加訂 `HelixViewport3D.CameraChanged`,避免相機實例被換掉時訂閱失效。
### v0.3.1
- 操作器 always-on-top 疊圖層(永遠浮在零件上、不被實體遮擋)。
### v0.3.0
- 旋轉對齊:軸向旋轉(↻X/↻Y/↻Z)、三點對齊,以及統一的 `TransformRoot` 剛體變換路徑。
### v0.2.x
- 拖曳模式、兩點對齊、干涉檢查、剖面、角度/面距量測、裝配樹、STL/DXF 支援、mm ⇄ inch。
---
## 🙏 致謝
- [CADability](https://github.com/SOFAgh/CADability) — 純 C# CAD kernelSTEP 匯入、B-rep 幾何、面三角化
- [HelixToolkit.Wpf](https://github.com/helix-toolkit/helix-toolkit) — 3D viewport、相機操作、HitTest
- [CommunityToolkit.Mvvm](https://github.com/CommunityToolkit/dotnet) — MVVM
詳細設計與開發 Phase 見 [ARCHITECTURE.md](ARCHITECTURE.md)。