1. Изменен внешний вид карточек зон мониторинга и поведение при выборе модели - загружаются нужные модели при выборе карточки
2. Добавлено автоматическое масштабирование и позиционирование камеры - модель сразу открывается и показывается вся на экране
This commit is contained in:
@@ -480,6 +480,55 @@ const ModelViewer: React.FC<ModelViewerProps> = ({
|
||||
max: { x: boundingBox.max.x, y: boundingBox.max.y, z: boundingBox.max.z },
|
||||
},
|
||||
})
|
||||
|
||||
// Автоматическое кадрирование камеры для отображения всей модели
|
||||
const camera = scene.activeCamera as ArcRotateCamera
|
||||
if (camera) {
|
||||
const center = boundingBox.min.add(boundingBox.max).scale(0.5)
|
||||
const size = boundingBox.max.subtract(boundingBox.min)
|
||||
const maxDimension = Math.max(size.x, size.y, size.z)
|
||||
|
||||
// Устанавливаем оптимальное расстояние камеры
|
||||
const targetRadius = maxDimension * 2.5 // Множитель для комфортного отступа
|
||||
|
||||
// Плавная анимация камеры к центру модели
|
||||
scene.stopAnimation(camera)
|
||||
|
||||
const ease = new CubicEase()
|
||||
ease.setEasingMode(EasingFunction.EASINGMODE_EASEINOUT)
|
||||
|
||||
const frameRate = 60
|
||||
const durationMs = 800 // 0.8 секунды
|
||||
const totalFrames = Math.round((durationMs / 1000) * frameRate)
|
||||
|
||||
// Анимация позиции камеры
|
||||
Animation.CreateAndStartAnimation(
|
||||
'frameCameraTarget',
|
||||
camera,
|
||||
'target',
|
||||
frameRate,
|
||||
totalFrames,
|
||||
camera.target.clone(),
|
||||
center.clone(),
|
||||
Animation.ANIMATIONLOOPMODE_CONSTANT,
|
||||
ease
|
||||
)
|
||||
|
||||
// Анимация зума
|
||||
Animation.CreateAndStartAnimation(
|
||||
'frameCameraRadius',
|
||||
camera,
|
||||
'radius',
|
||||
frameRate,
|
||||
totalFrames,
|
||||
camera.radius,
|
||||
targetRadius,
|
||||
Animation.ANIMATIONLOOPMODE_CONSTANT,
|
||||
ease
|
||||
)
|
||||
|
||||
console.log('[ModelViewer] Camera framed to model:', { center, targetRadius, maxDimension })
|
||||
}
|
||||
}
|
||||
|
||||
setLoadingProgress(100)
|
||||
|
||||
Reference in New Issue
Block a user