feat(web): add an interactive read-only Spreadsheet view
Geometry Nodes workspace now exposes real mesh buffers (objects, vertices, edges, faces, UVs, attributes) with filtering, column show/hide/reorder, row selection, pagination and explicit CSV export. Interactions never touch the Main revision. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# Web Blender 全站功能补齐与入门课程 — 实施进度
|
||||
|
||||
日期:2026-11-13
|
||||
状态:**进行中(UV + OPFS 保存检查点完成;四块编辑器其余三块待实现)**
|
||||
状态:**进行中(UV、Texture Paint、Geometry Nodes、Spreadsheet 完成;Compositor 与课程待实现)**
|
||||
|
||||
## 本轮铁律
|
||||
|
||||
@@ -77,13 +77,29 @@
|
||||
- 添加 Transform、从 Group Input 拖拽连接到 Transform,提交后 3 节点/2 连线,graphCount=1;
|
||||
- OPFS 保存 → reload → 最近项目恢复 → 重开后仍是 3 节点/2 连线。
|
||||
|
||||
### 6. Spreadsheet 交互式只读表
|
||||
|
||||
- 新 `web/app/src/app/ui/SpreadsheetView.tsx`,替换 Geometry Nodes 工作区的静态三列表:
|
||||
- 数据源:对象、顶点、边、面、UV、属性;顶点/面/UV 读取 `geometryBuffers` 的
|
||||
`positions/normals/colors/indices/edgeVertexIndices/triangleFaceIndices/uvs`;
|
||||
- 文本过滤(任意列)、列显示/隐藏、列左右重排、行点选与 Shift 范围选择、选择本页/清除、
|
||||
分页(50/100/250/500/1000 行)、CSV 显式导出(用户手动下载,符合 OPFS 铁律);
|
||||
- `data-testid="spreadsheet-view"` 与 `data-source/data-row-count/data-page/data-selected-rows/
|
||||
data-visible-columns/data-readonly`;交互全部只读,不产生 Main revision。
|
||||
- 边在缺少 `edgeVertexIndices` 时从三角形索引去重推导;面按 `triangleFaceIndices` 聚合。
|
||||
单表最多显示 50,000 行并在脚注注明截断。
|
||||
- 验证:
|
||||
`DISPLAY=:1 CHROME_PATH=/usr/bin/google-chrome GPU_MODE=hardware npx playwright test --config playwright.config.ts tests/e2e/web-spreadsheet-readonly.spec.ts --workers=1`
|
||||
→ **2/2 PASS(24.2s)**:
|
||||
- 对象 7 行 → 顶点表过滤/分页/列隐藏与重排/选择/CSV 下载,revision 不变;
|
||||
- 属性表含 position,UV/面/边可切换,切换网格后 OPFS 保存 → reload → 最近项目恢复 → 顶点表仍可用。
|
||||
|
||||
## 待实现(按计划顺序)
|
||||
|
||||
1. **Spreadsheet 交互式只读表**:数据源/过滤/行列/列重排/CSV;原生属性值读取需 WASM。
|
||||
2. **Compositor 节点画布**:协议+React Flow+执行/Viewer;原生 writer/reader 缺失,需要最大的一次
|
||||
1. **Compositor 节点画布**:协议+React Flow+执行/Viewer;原生 writer/reader 缺失,需要最大的一次
|
||||
WASM 工作。
|
||||
3. 其余缺口:Area 编辑器选择/⋮、Camera Perspective、Preferences、Outliner、Graph Editor。
|
||||
4. 15 模块课程、15 个短视频、OPFS 保存重开流程、增量发布到 `https://49.232.250.35:58014/`。
|
||||
2. 其余缺口:Area 编辑器选择/⋮、Camera Perspective、Preferences、Outliner、Graph Editor。
|
||||
3. 15 模块课程、15 个短视频、OPFS 保存重开流程、增量发布到 `https://49.232.250.35:58014/`。
|
||||
|
||||
## 已知限制 / 未验证
|
||||
|
||||
@@ -92,7 +108,9 @@
|
||||
Base Color 来绘制;后续可加“Make Local”入口。
|
||||
- GN 画布节点位置目前只在会话内保存;`GeometryNodeIR` 尚无 `location`,原生 writer/reader 未写
|
||||
`locx/locy`,保存重开保留节点/连线但不保留布局。Properties 表单与画布各自持有 draft,未完全共享。
|
||||
- Compositor 画布、Spreadsheet 尚未实现;课程/视频尚未开始。
|
||||
- Spreadsheet 只读当前网格缓冲,不读取 GN 修改器求值后的属性域(桌面 5.2 也无可编辑单元格);
|
||||
单表上限 50,000 行,超出部分截断提示。
|
||||
- Compositor 画布尚未实现;课程/视频尚未开始。
|
||||
- 本轮只验证 Chromium + RTX 4060;未验证其他浏览器。
|
||||
- 既有保存下载型 spec 尚未迁移;在迁移完成前不要把这些旧 spec 的失败当作产品回归。
|
||||
- 远端首次 wasm 加载 154–193 秒;课程录制只做本地,页面需提示首载时间。
|
||||
|
||||
Reference in New Issue
Block a user