取景距离抬到不会让轨道缩放范围颠倒的下限
- packages/model3d-viewer/src/framing.ts:computeModel3dViewerFitDistance 对调用方传入的距离加下限(radius × 0.2 / 8),避免 distance 过小时 maxDistance 小于 minDistance,取景与轨道钳制同时失效 - packages/model3d-viewer/src/framing.test.ts:补极小距离的下限用例
This commit is contained in:
@@ -143,6 +143,20 @@ describe('computeModel3dViewerFitDistance', () => {
|
||||
|
||||
expect(distance).toBe(7);
|
||||
});
|
||||
|
||||
it('传入的距离小到会让缩放范围颠倒时,抬到能站住的下限', () => {
|
||||
const framing = computeModel3dViewerFraming({
|
||||
box: CUBE,
|
||||
aspect: 1,
|
||||
distance: computeModel3dViewerFitDistance({
|
||||
box: CUBE,
|
||||
aspect: 1,
|
||||
distance: 0.001,
|
||||
}),
|
||||
});
|
||||
|
||||
expect(framing.maxDistance).toBeGreaterThanOrEqual(framing.minDistance);
|
||||
});
|
||||
});
|
||||
|
||||
describe('createModel3dViewerFitSolver', () => {
|
||||
|
||||
@@ -218,7 +218,13 @@ export function computeModel3dViewerFitDistance(
|
||||
// 会让 maxDistance 小于 minDistance,取景与轨道钳制一起失效,故按无效处理。
|
||||
const distance = input.distance;
|
||||
if (distance !== undefined && Number.isFinite(distance) && distance > 0) {
|
||||
return distance;
|
||||
// `computeModel3dViewerFraming` 由这个距离推出 maxDistance = distance × 8、minDistance
|
||||
// = radius × 0.2;距离小到 0.025 × radius 以下时两者会颠倒,取景与轨道钳制一起失效。
|
||||
return Math.max(
|
||||
distance,
|
||||
(computeModel3dViewerBoxRadius(input.box) * MIN_DISTANCE_RATIO) /
|
||||
MAX_DISTANCE_RATIO,
|
||||
);
|
||||
}
|
||||
const solver = createModel3dViewerFitSolver({
|
||||
center: computeModel3dViewerBoxCenter(input.box),
|
||||
|
||||
Reference in New Issue
Block a user