[错误]:带附件的曲线扫描组件渲染为直线圆柱,其扫描几何图形会被视为死代码

作者: atishfadte创建于 2026年8月27日更新于 2026年8月27日
标签triage: needs-review

提交前的注意事项 - [x] 我搜索了现有问题,没有找到重复的问题。 - [x] 我确认这是一个可重现的行为问题,而不是对项目的帮助请求。 ### 发生了什么? - 以primitive:"curve-sweep"编写的组件,带有明确的脊柱,在同时携带attachment块时,渲染为直缩放的圆柱体。生成器会发出正确的buildCurveSweepGeometry({...})调用,带有编写的脊柱,但该调用从未执行:curve-sweep位于ATTACHMENT_PRIMITIVES中,因此makeAttachmentEndpoint(attachment)返回非空,并且三元运算采用CylinderGeometry分支。被扫描的几何图形被发出为死代码。 我将此问题提交为问题,而不是简单的错误,因为test_attachment_does_not_override_primitive.py::test_every_attachment_primitive_still_takes_the_endpoint_path故意声明了此行为,对于ATTACHMENT_PRIMITIVES的五个成员都如此 - 因此看起来是故意的,我不想"修复"一个已记录的决定。但是,结果是修复添加了那个门的注释中描述的相同失败: - 从中导出几何图形无条件地默认覆盖了编写的原始图元:一个椭球头部,一个缩放的耳朵和两个端点之间的扫描尾部都以圆柱体的形式呈现,规范验证通过,工厂构建完成,错误的形状被发送。 该推理适用于curve-sweep,正如它适用于门拯救的原始图元一样。这也是swept_arc_gate.py存在的特定缺陷: - 曲线声明("弯曲成一个钩子,而不是直线锥体")需要swept_arc_gate.py:轮廓 IoU 通过一个直线锥体占据了大致相同的单元。请注意不对称性:tapered-sweep保留了其扫描几何图形(对于它有专门的测试),而curve-sweep则不这样做。如果这种差异是有意的,那么值得在注释中解释为什么。 ### 重现步骤 - 1. 编写一个组件,具有原始图元"curve-sweep",一个几何描述器脊柱和一个携带 parentSocket / localStart / localEnd / contactType / embedDepth / gapTolerance 的 attachment 块(在子部分上需要附件的结构传递中)。 - 2. 生成工厂:python3 forge/stage3_build/generate_threejs_factory.py spec.json --pass-id blockout --out model.ts - 3. 以下两者都存在于输出中 - 第二个在运行时获胜:grep -n "buildCurveSweepGeometry|makeAttachmentEndpoint(attachment_claw)" model.ts - const endpoint_claw_2 = makeAttachmentEndpoint(attachment_claw_2); - ... ? new THREE.CylinderGeometry(...) : buildCurveSweepGeometry({"spine": [...]})

参考图像或输入特征 - 硬表面物体(钳子锤),512×512 PNG,正面视图。钳子是一个弯曲的钩子,向下和向左扫描 - Silhouette 的单一最具标识性的特征。

内容来源: img2threejs/img2threejs