2 Commits
Author SHA1 Message Date
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
etwenandClaude Opus 4.8 e27fd17eb8 perf: Render merged mesh in measure mode to fix large-assembly orbit lag (v0.3.2)
Measurement modes used to render per-face content (one GeometryModel3D per
B-rep face). On a large assembly (64k faces measured) that is 64k draw calls,
and WPF re-walks the whole visual tree every frame, so orbiting in a
measurement tool was severely laggy while plain browse mode (which renders the
merged mesh, one model per file) stayed smooth.

Render the merged mesh whenever not sectioning (browse AND measure), and
resolve the picked B-rep face from the hit triangle's vertex index via
_mergedFaceRanges + ResolveMergedFace (binary search over per-face vertex-start
boundaries recorded at import — BuildMergedMesh appends faces in order with no
vertex welding, so the ranges are exact and stay valid across translation).
Per-face FacesContent is now rendered only in section mode (needs cut
geometry). WPF 3D hit testing is geometric and does not cull back faces, so
single-sided merged meshes still pick hole inner walls.

Also subscribe camera-interaction suspension to HelixViewport3D.CameraChanged
(control-level routed event) in addition to Camera.Changed, so it can't be
orphaned if Helix replaces the camera instance.

Verified: orbit in measure mode is now as smooth as browse; circle/face/edge/
angle/face-distance and section measurements unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 16:48:42 +08:00