|
|
| Line 62: |
Line 62: |
| function switchQuality(viewer, icon, lqUrl, hqUrl) { | | function switchQuality(viewer, icon, lqUrl, hqUrl) { |
| const isLQ = viewer.src === lqUrl; | | const isLQ = viewer.src === lqUrl; |
|
| |
| const orbit = viewer.getCameraOrbit();
| |
| const target = viewer.getCameraTarget();
| |
| const fov = viewer.getFieldOfView();
| |
|
| |
| const oldTime = viewer.currentTime;
| |
| const oldAnimation = viewer.animationName;
| |
|
| |
| viewer.setAttribute('camera-controls', 'false');
| |
|
| |
| let restored = false;
| |
|
| |
| function restoreCamera() {
| |
| if (restored) {
| |
| return;
| |
| }
| |
|
| |
| restored = true;
| |
|
| |
| requestAnimationFrame(function () {
| |
| viewer.cameraOrbit =
| |
| orbit.theta + 'rad ' +
| |
| orbit.phi + 'rad ' +
| |
| orbit.radius + 'm';
| |
|
| |
| viewer.cameraTarget =
| |
| target.x + 'm ' +
| |
| target.y + 'm ' +
| |
| target.z + 'm';
| |
|
| |
| viewer.fieldOfView = fov;
| |
|
| |
| if (oldAnimation) {
| |
| viewer.animationName = oldAnimation;
| |
| }
| |
|
| |
| if (typeof oldTime === 'number') {
| |
| viewer.currentTime = oldTime;
| |
| }
| |
|
| |
| requestAnimationFrame(function () {
| |
| viewer.setAttribute('camera-controls', '');
| |
|
| |
| if (viewer.hasAttribute('autoplay')) {
| |
| viewer.play();
| |
| }
| |
| });
| |
| });
| |
| }
| |
|
| |
| viewer.addEventListener('load', restoreCamera, {
| |
| once: true
| |
| });
| |
|
| |
| viewer.src = isLQ ? hqUrl : lqUrl; | | viewer.src = isLQ ? hqUrl : lqUrl; |
|
| |
| icon.src = isLQ ? HQ_ICON : LQ_ICON; | | icon.src = isLQ ? HQ_ICON : LQ_ICON; |
| } | | } |