需要完善的内容,做个备忘 按 web-rtcp-5axis-sim-plan/docs/native-task-hal-sync-implementation-steps.md 的边界要求,本次只处理 Web Three.js 可视化层,不改 LinuxCNC task/HAL runtime 语义。 完成内容: Three.js 三维显示区改为 toolpath-only:删除画布内地板、网格、坐标轴、机床包络、转台、刀具实体,只保留刀具预览路径线。 补齐 Three.js 相机交互: - 鼠标左键/单指拖动:旋转 - 鼠标中键、右键或 Shift+拖动:平移 - 鼠标滚轮:缩放 - 双指:缩放并平移 - X/Y/Z/Fit 按钮:预设视角/复位视角 边界说明: 这次没有提升 nativeTaskReady/nativeHalSyncReady;它仍属于 Web simulation UI 显示层调整。task/HAL native/WASM 边界仍需继续按执行文档阶段 0-8 推进。 继续按 web-rtcp-5axis-sim-plan/docs/native-task-hal-sync-implementation-steps.md 边界推进 Three.js 显示层:程序预览和刀具执行过程已显示在 Three.js 区域。 完成内容: Three.js 区域现在同时显示: - 完整程序预览路径:来自 state.programExecution.motion,也就是 LinuxCNC interpreter/WASM canonical motion events。 - 已执行路径:优先来自 state.programExecutionTiming.samples,也就是 LinuxCNC TP queue runtime timing samples;没有 samples 时回退到 canonical motion 端点。 - 当前刀具/TCP 执行标记:来自 state.programRuntimeFeedback.axisPose / task-HAL runtime feedback,并显示刀轴方向线。 - 快速移动路径辅助层:从 canonical motion 中的 STRAIGHT_TRAVERSE 提取。 保留功能: - 鼠标/触控旋转、平移、缩放仍可用。 - X/Y/Z/Fit 预设视角仍可用。 - Clear 会同步清空完整预览路径和已执行路径。 实现文件: [five-axis-scene.js](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/app/src/visualization/five-axis-scene.js) [gmoccapy_shell_smoke.html](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html) 新增可观测状态: canvas.dataset.threeSceneMode=program-preview-and-tool-execution canvas.dataset.threeProgramPreviewSource=linuxcnc-interpreter-wasm / linuxcnc-machine-file-remap-wasm / fixture-line-playback canvas.dataset.threePathPoints=完整程序预览点数 canvas.dataset.threeExecutedPathPoints=已执行路径点数 canvas.dataset.threeToolExecutionMarker=true/false 验证已通过: npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh 边界说明: Three.js 不解析 G-code,不手写 LinuxCNC 运动语义;只消费已有 LinuxCNC interpreter canonical motion、TP timing samples、task/HAL runtime feedback。nativeTaskReady/nativeHalSyncReady 的提升仍按执行文档阶段任务另行完成。 发布站点已经可访问,但第一次远端 smoke 卡在无 GPU 的 WebGL 上了,页面退回了 2D fallback。这个不是业务逻辑失败,我现在切换浏览器参数强制 swiftshader,再跑同一套发布后测试。 我先确认当前程序执行数据从哪里来,以及 LinuxCNC 示例程序在仓库里如何被加载。目标是让 Three.js 区域既能显示完整程序预览路径,也能显示执行中的刀具位置/已执行轨迹,并尽量复用已有 interpreter/task/HAL 输出,不手写新的 CNC 语义。 文档更新会比较小:把 “下一步要做 Worker/store” 改为 “已接线”,把当前边界标为 Web simulation promoted,同时仍明确 hardware/realtime kernel/external user-M/tool DB 不支持。历史 M18/M13 记录不改。 公网测试已经跑到一个明确失败点:Save Session 在 http://82.156.24.101:8092 下抛出 OPFS is not available in this browser。这类浏览器存储 API 在公网 HTTP/IP 环境不是安全上下文,很多“保存、恢复、暂存机床文件、完整边界审计”都会受影响;我会继续把其余功能用异常隔离方式跑完,确认还有没有独立问题。 代码确认了:会话保存和机床文件暂存都硬依赖 OPFS。公网 HTTP/IP 不满足安全上下文,因此这些功能天然不可用;我会先用降级后的脚本继续测试不依赖 OPFS 的操作功能,再给出完整问题清单。 本轮继续处理公网 HTTP/IP 测试失败点:Save Session 在 http://82.156.24.101:8092 下因 OPFS 不可用报错。 完成内容: - five-axis session runtime 现在会优先使用 OPFS;如果当前浏览器没有 navigator.storage.getDirectory,则自动使用页面内存会话存储。 - Save Session / Restore Session 返回并记录 storageMode: - opfs:安全上下文下的 OPFS 持久化; - memory-fallback:公网 HTTP/IP 等无 OPFS 环境下的页面内存后备; - memory:测试显式注入的内存存储。 - gmoccapy 信息面板 Session 行现在显示 status / storageMode / path,避免把 memory-fallback 误认成 OPFS 持久化。 - browser smoke 覆盖默认 Save/Restore 按钮路径,确认无 OPFS 环境不会再抛出 “OPFS is not available in this browser.”。 实现文件: [five-axis-session.js](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/five-axis-session.js) [store.js](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/store.js) [gmoccapy-shell.js](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js) [verify_five_axis_session.mjs](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_five_axis_session.mjs) [gmoccapy_shell_smoke.html](/home/cnc/桌面/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html) 验证已通过: node web-rtcp-5axis-sim-plan/tests/node/verify_five_axis_session.mjs bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh 边界说明: memory-fallback 只解决公网 HTTP/IP 下“当前页面生命周期内保存/恢复会话”的可用性,不声称提供 OPFS 持久化。机床文件暂存、完整边界审计中仍硬依赖 OPFS 的部分,公网 HTTP/IP 下还需要继续按功能逐项降级或标记 blocked。