fix: 修复 3D NaN 崩溃/样品图不刷新/画布点选失效

- replayShape 段过滤补 Y 轴有限值校验(此前仅校验 X)
- inferSashGlyphs bdRect 增加有限值守卫
- WindoorThreed 逐网格有限值防护 + maxDim 守卫, 杜绝 NaN 网格
- CombineCanvas shapePts 过滤非有限点, 修复包围盒污染导致的点选失效
- 组合画布引入 rev 版本号: 原地变异几何后强制 3D 预览重建
  (修复尺寸编辑后样品图不变化)
This commit is contained in:
HHY
2026-09-21 02:26:08 -07:00
parent 4303aa6986
commit 4b52767654
5 changed files with 27 additions and 11 deletions
+8 -4
View File
@@ -109,10 +109,14 @@ const saveName = ref('')
const saving = ref(false)
const canvasRef = ref()
let uidSeq = 1
const rev = ref(0)
const combinedJson = computed(() =>
shapes.value.length ? JSON.stringify({ s: { cs: 60, cjs: 100 }, cp: [], sm: shapes.value,
epi: [], sbf: [], wlc: '', wall: [], scale: 0, note: [] }) : '')
const combinedJson = computed(() => {
void rev.value // 画布原地变异几何后通过版本号强制重算(驱动 3D 预览重建)
if (!shapes.value.length) return ''
return JSON.stringify({ s: { cs: 60, cjs: 100 }, cp: [], sm: shapes.value,
epi: [], sbf: [], wlc: '', wall: [], scale: 0, note: [], rev: rev.value })
})
// ---------- 样板库 ----------
async function loadLib() {
@@ -198,7 +202,7 @@ function syncSelSize() {
if (bb) { selSize.w = Math.round(bb.x1 - bb.x0); selSize.h = Math.round(bb.y1 - bb.y0) }
}
function onCanvasChange() { refreshMeta(); syncSelSize() }
function onCanvasChange() { refreshMeta(); syncSelSize(); rev.value++ }
function onSelResize() {
if (selSize.w >= 300 && selSize.h >= 300) canvasRef.value?.resizeSelected(selSize.w, selSize.h)