From f9750bde0bab5fc1b76180d4e3b10bbdb017442d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 22 Sep 2026 13:16:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E5=99=A8=E5=8F=96=E6=99=AF?= =?UTF-8?q?=E8=B7=9D=E7=A6=BB=E6=94=B9=E7=94=A8=E5=89=8D=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E6=9C=89=E9=99=90=E6=AD=A3=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - packages/model3d-viewer/src/framing.ts:computeModel3dViewerFitDistance 不再无条件采信调用方传入的 distance,改为 Number.isFinite 且大于 0 才采用,否则回落包围盒角点求解,避免 0 / 负数 / NaN 让 maxDistance 小于 minDistance 验证:npx vitest run packages/model3d-viewer、npx tsc -p tsconfig.typecheck-guardrails.json --noEmit --- packages/model3d-viewer/src/framing.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/model3d-viewer/src/framing.ts b/packages/model3d-viewer/src/framing.ts index 78c7ba7bb..94a129e67 100644 --- a/packages/model3d-viewer/src/framing.ts +++ b/packages/model3d-viewer/src/framing.ts @@ -200,8 +200,11 @@ export function createModel3dViewerFitSolver( export function computeModel3dViewerFitDistance( input: Model3dViewerFramingInput, ): number { - if (input.distance !== undefined) { - return input.distance; + // 调用方给的距离会直接决定 near / far / 轨道缩放范围,非法值(0、负数、NaN) + // 会让 maxDistance 小于 minDistance,取景与轨道钳制一起失效,故按无效处理。 + const distance = input.distance; + if (distance !== undefined && Number.isFinite(distance) && distance > 0) { + return distance; } const solver = createModel3dViewerFitSolver({ center: computeModel3dViewerBoxCenter(input.box),