Skip to content

feat(viewport): v1.0 B2 — 拾取 + 选中描边跨引擎#40

Merged
longyi-xw merged 11 commits into
mainfrom
feat/v1.0b2-pick-outline
Jun 13, 2026
Merged

feat(viewport): v1.0 B2 — 拾取 + 选中描边跨引擎#40
longyi-xw merged 11 commits into
mainfrom
feat/v1.0b2-pick-outline

Conversation

@longyi-xw

Copy link
Copy Markdown
Owner

What

  • BabylonAdapter.pickAtscene.pick + metadata.nodeId 父链上溯(A1 已埋标记,无新增 tagging);构造时建默认编辑器相机(镜像 ThreeAdapter defaultCamera [4,3,4]→origin/fov 50°——scene.pick 需要 activeCamera,且这是 conformance 拾取对等的基础;BabylonRenderHost 的 ArcRotate 在 mount 时照旧接管)。
  • conformance 拾取对等:套件加 options.makePickAdapter(Three: setViewportSize(800,600);Babylon: 定尺寸 NullEngine),中心命中 / 角落天空 null / 移除后 null ×2 引擎。
  • IRenderHost.setSelection(node_id) + BabylonRenderHostHighlightLayer(#3b82f6 对齐 Three OutlinePass)实现;幂等(removeAllMeshes + re-add,覆盖 group/prefab 多网格);NullEngine 下可测(无降级路径)。
  • BabylonViewport 点选接线:PR fix(viewport): drag-then-release no longer hijacks selection onto the grid #8 click-vs-drag guard(5px)→ pickAt → setSelectedNodeId(空白清选);useUIStore 订阅 → host.setSelectionapplyDiff 后重放高亮(同 id 移除+重建时把高亮重新挂到新 mesh 实例——旧实例的清理 HighlightLayer 自身经 onDisposeObservable 完成)。
  • ThreeViewport 最小收敛diffAndApply 内联 BFS 迁 diffSceneNodes(净 -17 行;removed 分支 gizmo detach/outline 清空逐字保留);拾取/描边/gizmo/snap 不动——B3 抽 ThreeRenderHost 时一起收。
  • 禁用面:视口点选自 B2 起跨引擎(视口内部接线,不经 isEngineEditingCapable);gizmo pill/play/F/拖拽门不变,isEngineEditingCapable 注释同步更新。

Why

  • Architecture: design/framework/architecture.md §7 v1.0(多运行时适配器)
  • Spec: docs/superpowers/specs/2026-06-11-v1.0b2-pick-outline-design.md · Plan: docs/superpowers/plans/2026-06-11-v1.0b2-pick-outline.md
  • B1(feat(viewport): v1.0 B1 — render host 实时视口切引擎(看+转相机) #39)后 Babylon 视口 view-only;B2 让第二引擎获得编辑器最基础的交互——点选与选中反馈,并把拾取语义钉进跨引擎契约测试。

How to test

  • pnpm lint && pnpm typecheck && pnpm test(564 tests:conformance 拾取对等 ×2 引擎 + adapter/render-host/BabylonViewport 新用例)
  • pnpm tauri dev 视觉 smoke:
    • 切 Babylon:点 cube → 蓝色高亮 + 右栏面板同步;点空白 → 清选清高亮
    • 层级面板选中 → 视口高亮跟随;选灯光节点 → 层清空不报错
    • 轨道拖拽释放在 cube 上 → 不误选(drag guard)
    • 选中后面板改 position → 高亮随 mesh 移动
    • 切回 Three:点选/描边/gizmo/撤销/拖放零回归(diffAndApply 已迁 diffSceneNodes)
    • 引擎来回切:两侧选中视觉状态自动恢复
  • conformance 拾取对等含义:双引擎同构相机/视口下同屏幕点解析出同一节点(center→box、corner→null、removed→null)

已跑 headless 视觉 smoke(vite + headless Chrome CDP,B1 同款手法):上述各项全过,console 全程零 error。最终整体审查(含「真视口里 scene.pick 用 ArcRotate 相机、转相机后拾取仍正确」的关键集成验证)结论可合并。

🤖 Generated with Claude Code

longyi-xw and others added 11 commits June 11, 2026 22:16
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… editor camera

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ial options object

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ay comment

- Assert highlight layer contains mesh before deletion and is cleared after
- Fix comment to explain that replay re-attaches highlight to rebuilt mesh
  instances (not for cleaning stale meshes — that's auto-done by dispose)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
…since B2

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@longyi-xw longyi-xw merged commit b74faac into main Jun 13, 2026
1 check passed
@longyi-xw longyi-xw deleted the feat/v1.0b2-pick-outline branch June 13, 2026 12:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant