Pascal Editor
Pascal 场景修复源码:保留有用墙体,清理旧链接,只推断唯一父节点
阅读并执行纯场景修复函数,再区分保守修复、完整验证、迁移和渲染各自的职责。
你将学会
- 三轮处理做出不同决策
- 修复明确反向链接,不随意决定归属
- 连接验证层,但不要混淆含义
开始前需要
- 基础场景图、JavaScript 和 HTTP 知识
- 尺寸与关系具有明确预期的自有小场景
解释实现边界,复现本章检查清单或窄范围图练习。
先看结论
- 有子节点的零长度宿主墙被有意保留。
- 唯一证据可修复父链接,歧义不能。
- 纯修复只是导入验收中的一层。
三轮处理做出不同决策
healSceneNodes 修复复制后的节点映射。第一轮只删除没有子节点、且端点距离不大于 1e-6 的墙。退化墙如果仍挂有门窗就会保留,因为删除它可能破坏有意义的关系。这个判断发生在子列表清理之前,不能把它描述成迭代几何优化器。
第二轮移除非字符串子引用、刚删除墙的引用、重复 ID,以及子节点已经明确属于另一父节点的旧链接。旧版场地节点可能内嵌子对象,函数会保留它们供后续迁移处理,而不是在这里展平或删除。不同损坏类型因此采用不同保留策略。
修复明确反向链接,不随意决定归属
第三轮收集每个存活子节点的父级声明,只有恰好一个非自身父节点声明它时,才填补空 parentId。两个竞争父节点不会被任意选择。这是依据结构证据的保守推断,不是对整个图合法、无环或适用于所有建筑操作的证明。
函数同时返回修复计数、ID 和结果映射。未改变节点保留引用身份,修复节点使用副本。我们验证了原始输入 JSON 不变、无子节点零长度墙被移除、无效与过期引用分别计数、唯一父链接被修复,而歧义父链接保持未解决。
连接验证层,但不要混淆含义
validateBuildJson 使用修复后的节点,区分硬错误与警告,并验证已知或已注册插件的模式。未知插件类型可以带警告保留在结果图中,不因父节点静态子 ID 模式而直接失败。材质逐项规范化,无效项跳过并警告。结构检查成功不代表建筑规范合规或视觉验收通过。
独立探针在验证源码哈希后,使用 Node 类型擦除执行无依赖 TypeScript,没有运行完整验证器、场景存储迁移或 GPU。下面的 JavaScript 仅独立解释唯一父节点规则;刻意限制范围,可以不安装 Pascal 就复现歧义和自父节点情况。
实施步骤
- 1
阅读固定源码的三轮修复。
- 2
分别测试空墙与挂有开口的墙。
- 3
比较唯一、歧义和自身父级声明。
- 4
结构修复后继续检查警告和渲染。
可复制示例
// 独立模拟一条修复规则,不是完整场景修复器。
function inferredParent(nodeId, claims) {
return claims.length === 1 && claims[0] !== nodeId ? claims[0] : null;
}
console.log([inferredParent("wall", ["level"]), inferredParent("wall", ["a", "b"]), inferredParent("wall", ["wall"])]);常见问题
修复会删除所有零长度墙吗?
不会。所查第一轮会保留仍有子节点的墙,包括挂有开口的宿主墙。
图修复后能证明建筑设计安全吗?
不能。结构修复、模式验证、画面检查与专业设计审查是不同工作。
资料来源
- README.md来源核查 2026-09-08
- LICENSE来源核查 2026-09-08
- packages/cli/package.json来源核查 2026-09-08
- packages/core/package.json来源核查 2026-09-08
- packages/viewer/README.md来源核查 2026-09-08
- packages/cli/src/runtime.ts来源核查 2026-09-08
- packages/cli/src/editor-process.ts来源核查 2026-09-08
- packages/cli/src/mcp-connector.ts来源核查 2026-09-08
- packages/mcp/src/transports/http.ts来源核查 2026-09-08
- packages/mcp/src/storage/sqlite-scene-store.ts来源核查 2026-09-08
- packages/core/src/store/use-scene.ts来源核查 2026-09-08
- packages/viewer/src/components/renderers/node-renderer.tsx来源核查 2026-09-08
- packages/viewer/src/lib/renderer-capability.ts来源核查 2026-09-08
- packages/core/src/validation/validate-build-json.ts来源核查 2026-09-08
- packages/core/src/utils/heal-scene-graph.ts来源核查 2026-09-08
- packages/mcp/src/storage/slug.ts来源核查 2026-09-08