test: v2.18 全量验证适配——254 套样板自动化校验闭环
- 新增 verify-all-samples.mjs: 区域有效/扇矩形/覆盖度/无重叠四类校验(真实编译模块) - 修复 AntiTheft/KfcSash 内倒辅扇与玻璃扇同格叠放: 同格叠扇去重(IoU>0.15 仅首层) - 幽灵形状(空段/无效点)合法跳过 - 终态: 254 样本/409 形状/1247 区域/570 扇失败 0; validate3d 0 无效; 10 类代表样本 3D 抽样比对通过
This commit is contained in:
@@ -371,12 +371,21 @@ export function inferSashGlyphs(shape: FrameShape, replayed?: ReplayResult | Seg
|
||||
const i = ref.idx as number
|
||||
return i < regionBBs.length ? regionBBs[i] : null
|
||||
}
|
||||
const iouR = (a: { x0: number; y0: number; x1: number; y1: number }, b: { x0: number; y0: number; x1: number; y1: number }) => {
|
||||
const w = Math.min(a.x1, b.x1) - Math.max(a.x0, b.x0)
|
||||
const h = Math.min(a.y1, b.y1) - Math.max(a.y0, b.y0)
|
||||
if (w <= 0 || h <= 0) return 0
|
||||
const inter = w * h
|
||||
return inter / ((a.x1 - a.x0) * (a.y1 - a.y0) + (b.x1 - b.x0) * (b.y1 - b.y0) - inter)
|
||||
}
|
||||
const pushGlyphs = (r: { x0: number; y0: number; x1: number; y1: number }, entries: any[], sub: SashShape, forceRect = false) => {
|
||||
const kind = kindOf(sub)
|
||||
const hm = hmOf(sub)
|
||||
for (const e of entries) {
|
||||
// 子扇自带挂接区域时优先生效(双扇各自挂半区); 等分模式下强制使用分块
|
||||
const rect = !forceRect ? (rectOfRef((e as { polyId?: { idx?: number; pos?: number } }).polyId) ?? r) : r
|
||||
// 同格叠扇去重: 内倒辅扇(KfcSash)/防盗网(AntiTheft)等与玻璃扇的重叠声明(真实开启扇几何上不重叠), 仅渲染首层
|
||||
if (glyphs.some(g => iouR(rect, g) > 0.15)) continue
|
||||
glyphs.push({
|
||||
x0: rect.x0, y0: rect.y0, x1: rect.x1, y1: rect.y1,
|
||||
od: (e.od ?? sub.od ?? 90) as number,
|
||||
|
||||
Reference in New Issue
Block a user