@ifc-lite/renderer 3.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/aabb-edges.d.ts +10 -0
- package/dist/aabb-edges.d.ts.map +1 -1
- package/dist/aabb-edges.js +13 -0
- package/dist/aabb-edges.js.map +1 -1
- package/dist/ao-params.d.ts +85 -0
- package/dist/ao-params.d.ts.map +1 -0
- package/dist/ao-params.js +109 -0
- package/dist/ao-params.js.map +1 -0
- package/dist/ao-pass.d.ts +47 -0
- package/dist/ao-pass.d.ts.map +1 -0
- package/dist/ao-pass.js +157 -0
- package/dist/ao-pass.js.map +1 -0
- package/dist/appearance-preview.d.ts +2 -0
- package/dist/appearance-preview.d.ts.map +1 -1
- package/dist/appearance-preview.js +4 -0
- package/dist/appearance-preview.js.map +1 -1
- package/dist/camera-animation-immediate.d.ts +5 -0
- package/dist/camera-animation-immediate.d.ts.map +1 -0
- package/dist/camera-animation-immediate.js +16 -0
- package/dist/camera-animation-immediate.js.map +1 -0
- package/dist/camera-animation.d.ts +3 -9
- package/dist/camera-animation.d.ts.map +1 -1
- package/dist/camera-animation.js +14 -9
- package/dist/camera-animation.js.map +1 -1
- package/dist/camera-matrices.d.ts +3 -0
- package/dist/camera-matrices.d.ts.map +1 -1
- package/dist/camera-matrices.js +12 -1
- package/dist/camera-matrices.js.map +1 -1
- package/dist/camera-orientation.d.ts +62 -0
- package/dist/camera-orientation.d.ts.map +1 -0
- package/dist/camera-orientation.js +155 -0
- package/dist/camera-orientation.js.map +1 -0
- package/dist/camera-projection.d.ts +3 -1
- package/dist/camera-projection.d.ts.map +1 -1
- package/dist/camera-projection.js +26 -20
- package/dist/camera-projection.js.map +1 -1
- package/dist/camera-surface-zoom.d.ts +32 -0
- package/dist/camera-surface-zoom.d.ts.map +1 -0
- package/dist/camera-surface-zoom.js +37 -0
- package/dist/camera-surface-zoom.js.map +1 -0
- package/dist/camera.d.ts +32 -61
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +71 -167
- package/dist/camera.js.map +1 -1
- package/dist/clash-solid-pipeline.d.ts +9 -3
- package/dist/clash-solid-pipeline.d.ts.map +1 -1
- package/dist/clash-solid-pipeline.js +31 -8
- package/dist/clash-solid-pipeline.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -3
- package/dist/constants.js.map +1 -1
- package/dist/depth-reconstruct.d.ts +43 -0
- package/dist/depth-reconstruct.d.ts.map +1 -0
- package/dist/depth-reconstruct.js +35 -0
- package/dist/depth-reconstruct.js.map +1 -0
- package/dist/device-recovery.d.ts +60 -0
- package/dist/device-recovery.d.ts.map +1 -0
- package/dist/device-recovery.js +153 -0
- package/dist/device-recovery.js.map +1 -0
- package/dist/device.d.ts +2 -0
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +13 -1
- package/dist/device.js.map +1 -1
- package/dist/environment.d.ts +26 -15
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +24 -13
- package/dist/environment.js.map +1 -1
- package/dist/federation-registry.d.ts +16 -0
- package/dist/federation-registry.d.ts.map +1 -1
- package/dist/federation-registry.js +80 -9
- package/dist/federation-registry.js.map +1 -1
- package/dist/gpu-static-upload.d.ts +39 -0
- package/dist/gpu-static-upload.d.ts.map +1 -0
- package/dist/gpu-static-upload.js +70 -0
- package/dist/gpu-static-upload.js.map +1 -0
- package/dist/gpu-upload-guard.d.ts +95 -0
- package/dist/gpu-upload-guard.d.ts.map +1 -0
- package/dist/gpu-upload-guard.js +88 -0
- package/dist/gpu-upload-guard.js.map +1 -0
- package/dist/index.d.ts +71 -41
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +340 -375
- package/dist/index.js.map +1 -1
- package/dist/instanced-override-color.d.ts +8 -0
- package/dist/instanced-override-color.d.ts.map +1 -1
- package/dist/instanced-override-color.js +10 -0
- package/dist/instanced-override-color.js.map +1 -1
- package/dist/instanced-render.d.ts +22 -2
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +47 -10
- package/dist/instanced-render.js.map +1 -1
- package/dist/instanced-rte.d.ts +17 -0
- package/dist/instanced-rte.d.ts.map +1 -0
- package/dist/instanced-rte.js +32 -0
- package/dist/instanced-rte.js.map +1 -0
- package/dist/merged-mesh-extract.d.ts.map +1 -1
- package/dist/merged-mesh-extract.js +5 -0
- package/dist/merged-mesh-extract.js.map +1 -1
- package/dist/mesh-rte-uniforms.d.ts +46 -0
- package/dist/mesh-rte-uniforms.d.ts.map +1 -0
- package/dist/mesh-rte-uniforms.js +59 -0
- package/dist/mesh-rte-uniforms.js.map +1 -0
- package/dist/model-bounds-tracker.d.ts +7 -0
- package/dist/model-bounds-tracker.d.ts.map +1 -1
- package/dist/model-bounds-tracker.js +16 -5
- package/dist/model-bounds-tracker.js.map +1 -1
- package/dist/model-translation.d.ts +40 -2
- package/dist/model-translation.d.ts.map +1 -1
- package/dist/model-translation.js +152 -17
- package/dist/model-translation.js.map +1 -1
- package/dist/pick-rte-snapshot.d.ts +7 -0
- package/dist/pick-rte-snapshot.d.ts.map +1 -0
- package/dist/pick-rte-snapshot.js +15 -0
- package/dist/pick-rte-snapshot.js.map +1 -0
- package/dist/pick-types.d.ts +17 -0
- package/dist/pick-types.d.ts.map +1 -0
- package/dist/pick-types.js +5 -0
- package/dist/pick-types.js.map +1 -0
- package/dist/pick-uniforms.d.ts +6 -0
- package/dist/pick-uniforms.d.ts.map +1 -1
- package/dist/pick-uniforms.js +22 -18
- package/dist/pick-uniforms.js.map +1 -1
- package/dist/pick-world-position.d.ts +18 -0
- package/dist/pick-world-position.d.ts.map +1 -0
- package/dist/pick-world-position.js +21 -0
- package/dist/pick-world-position.js.map +1 -0
- package/dist/picker-readbacks.d.ts +6 -0
- package/dist/picker-readbacks.d.ts.map +1 -0
- package/dist/picker-readbacks.js +20 -0
- package/dist/picker-readbacks.js.map +1 -0
- package/dist/picker-rte-uniforms.d.ts +6 -0
- package/dist/picker-rte-uniforms.d.ts.map +1 -0
- package/dist/picker-rte-uniforms.js +41 -0
- package/dist/picker-rte-uniforms.js.map +1 -0
- package/dist/picker.d.ts +6 -7
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +88 -115
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts +10 -1
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +57 -21
- package/dist/picking-manager.js.map +1 -1
- package/dist/pipeline.d.ts +1 -7
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +17 -20
- package/dist/pipeline.js.map +1 -1
- package/dist/point-picker.d.ts +5 -1
- package/dist/point-picker.d.ts.map +1 -1
- package/dist/point-picker.js +49 -9
- package/dist/point-picker.js.map +1 -1
- package/dist/pointcloud/point-cloud-handle-ids.d.ts +22 -0
- package/dist/pointcloud/point-cloud-handle-ids.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-handle-ids.js +31 -0
- package/dist/pointcloud/point-cloud-handle-ids.js.map +1 -0
- package/dist/pointcloud/point-cloud-node.d.ts +14 -6
- package/dist/pointcloud/point-cloud-node.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-node.js.map +1 -1
- package/dist/pointcloud/point-cloud-pick-sources.d.ts +47 -0
- package/dist/pointcloud/point-cloud-pick-sources.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-pick-sources.js +32 -0
- package/dist/pointcloud/point-cloud-pick-sources.js.map +1 -0
- package/dist/pointcloud/point-cloud-placement.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-placement.js +20 -5
- package/dist/pointcloud/point-cloud-placement.js.map +1 -1
- package/dist/pointcloud/point-cloud-ray-transform.d.ts +78 -4
- package/dist/pointcloud/point-cloud-ray-transform.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-ray-transform.js +31 -84
- package/dist/pointcloud/point-cloud-ray-transform.js.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.d.ts +21 -19
- package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.js +46 -52
- package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
- package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts +44 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.js +44 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.js.map +1 -0
- package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -0
- package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.js +55 -44
- package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
- package/dist/pointcloud/point-cloud-visibility.d.ts +10 -0
- package/dist/pointcloud/point-cloud-visibility.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-visibility.js +18 -0
- package/dist/pointcloud/point-cloud-visibility.js.map +1 -0
- package/dist/pointcloud/point-pipeline.d.ts +4 -9
- package/dist/pointcloud/point-pipeline.d.ts.map +1 -1
- package/dist/pointcloud/point-pipeline.js +4 -9
- package/dist/pointcloud/point-pipeline.js.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.d.ts +1 -21
- package/dist/pointcloud/point-shader.wgsl.d.ts.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.js +25 -5
- package/dist/pointcloud/point-shader.wgsl.js.map +1 -1
- package/dist/post-pass-chain.d.ts +38 -0
- package/dist/post-pass-chain.d.ts.map +1 -0
- package/dist/post-pass-chain.js +99 -0
- package/dist/post-pass-chain.js.map +1 -0
- package/dist/post-processor.d.ts +12 -26
- package/dist/post-processor.d.ts.map +1 -1
- package/dist/post-processor.js +14 -72
- package/dist/post-processor.js.map +1 -1
- package/dist/raycast-engine.d.ts +7 -5
- package/dist/raycast-engine.d.ts.map +1 -1
- package/dist/raycast-engine.js +17 -20
- package/dist/raycast-engine.js.map +1 -1
- package/dist/raycast-point-cloud-query.d.ts +1 -1
- package/dist/raycast-point-cloud-query.d.ts.map +1 -1
- package/dist/reference-image-pipeline.d.ts +1 -1
- package/dist/reference-image-pipeline.d.ts.map +1 -1
- package/dist/reference-image-pipeline.js +25 -7
- package/dist/reference-image-pipeline.js.map +1 -1
- package/dist/reference-images.d.ts +3 -1
- package/dist/reference-images.d.ts.map +1 -1
- package/dist/reference-images.js +15 -5
- package/dist/reference-images.js.map +1 -1
- package/dist/relative-to-eye.d.ts +146 -0
- package/dist/relative-to-eye.d.ts.map +1 -0
- package/dist/relative-to-eye.js +326 -0
- package/dist/relative-to-eye.js.map +1 -0
- package/dist/render-section-draw.d.ts +11 -0
- package/dist/render-section-draw.d.ts.map +1 -1
- package/dist/render-section-draw.js +6 -3
- package/dist/render-section-draw.js.map +1 -1
- package/dist/renderer-color-readback.d.ts +50 -0
- package/dist/renderer-color-readback.d.ts.map +1 -0
- package/dist/renderer-color-readback.js +145 -0
- package/dist/renderer-color-readback.js.map +1 -0
- package/dist/renderer-overlays.d.ts +15 -3
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +46 -20
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/renderer-screenshot.d.ts +4 -0
- package/dist/renderer-screenshot.d.ts.map +1 -0
- package/dist/renderer-screenshot.js +17 -0
- package/dist/renderer-screenshot.js.map +1 -0
- package/dist/renderer-symbolic-overlays.d.ts +5 -2
- package/dist/renderer-symbolic-overlays.d.ts.map +1 -1
- package/dist/renderer-symbolic-overlays.js +36 -13
- package/dist/renderer-symbolic-overlays.js.map +1 -1
- package/dist/renderer-viewport.d.ts +45 -0
- package/dist/renderer-viewport.d.ts.map +1 -1
- package/dist/renderer-viewport.js +44 -0
- package/dist/renderer-viewport.js.map +1 -1
- package/dist/rte-clip-space.d.ts +12 -0
- package/dist/rte-clip-space.d.ts.map +1 -0
- package/dist/rte-clip-space.js +22 -0
- package/dist/rte-clip-space.js.map +1 -0
- package/dist/rte-frustum.d.ts +24 -0
- package/dist/rte-frustum.d.ts.map +1 -0
- package/dist/rte-frustum.js +45 -0
- package/dist/rte-frustum.js.map +1 -0
- package/dist/scene-appearance-preview.d.ts +2 -0
- package/dist/scene-appearance-preview.d.ts.map +1 -1
- package/dist/scene-appearance-preview.js +9 -0
- package/dist/scene-appearance-preview.js.map +1 -1
- package/dist/scene-authored-owner.d.ts +10 -0
- package/dist/scene-authored-owner.d.ts.map +1 -1
- package/dist/scene-authored-owner.js +44 -5
- package/dist/scene-authored-owner.js.map +1 -1
- package/dist/scene-batch-rebuild.d.ts +18 -0
- package/dist/scene-batch-rebuild.d.ts.map +1 -0
- package/dist/scene-batch-rebuild.js +49 -0
- package/dist/scene-batch-rebuild.js.map +1 -0
- package/dist/scene-batch-upload.d.ts +4 -1
- package/dist/scene-batch-upload.d.ts.map +1 -1
- package/dist/scene-batch-upload.js +31 -38
- package/dist/scene-batch-upload.js.map +1 -1
- package/dist/scene-bucket-routing.d.ts +21 -0
- package/dist/scene-bucket-routing.d.ts.map +1 -0
- package/dist/scene-bucket-routing.js +44 -0
- package/dist/scene-bucket-routing.js.map +1 -0
- package/dist/scene-contents.d.ts +8 -0
- package/dist/scene-contents.d.ts.map +1 -1
- package/dist/scene-derived-mesh-provenance.d.ts +13 -0
- package/dist/scene-derived-mesh-provenance.d.ts.map +1 -0
- package/dist/scene-derived-mesh-provenance.js +30 -0
- package/dist/scene-derived-mesh-provenance.js.map +1 -0
- package/dist/scene-device-recovery.d.ts +103 -0
- package/dist/scene-device-recovery.d.ts.map +1 -0
- package/dist/scene-device-recovery.js +295 -0
- package/dist/scene-device-recovery.js.map +1 -0
- package/dist/scene-finalize-regroup.d.ts +54 -0
- package/dist/scene-finalize-regroup.d.ts.map +1 -0
- package/dist/scene-finalize-regroup.js +136 -0
- package/dist/scene-finalize-regroup.js.map +1 -0
- package/dist/scene-geometry.d.ts +1 -0
- package/dist/scene-geometry.d.ts.map +1 -1
- package/dist/scene-geometry.js +3 -23
- package/dist/scene-geometry.js.map +1 -1
- package/dist/scene-instance-bounds.d.ts +12 -0
- package/dist/scene-instance-bounds.d.ts.map +1 -0
- package/dist/scene-instance-bounds.js +48 -0
- package/dist/scene-instance-bounds.js.map +1 -0
- package/dist/scene-instance-materialization.d.ts +4 -1
- package/dist/scene-instance-materialization.d.ts.map +1 -1
- package/dist/scene-instance-materialization.js +21 -6
- package/dist/scene-instance-materialization.js.map +1 -1
- package/dist/scene-instance-translation.d.ts +17 -0
- package/dist/scene-instance-translation.d.ts.map +1 -0
- package/dist/scene-instance-translation.js +50 -0
- package/dist/scene-instance-translation.js.map +1 -0
- package/dist/scene-instance-types.d.ts +6 -0
- package/dist/scene-instance-types.d.ts.map +1 -1
- package/dist/scene-model-translation.d.ts +13 -1
- package/dist/scene-model-translation.d.ts.map +1 -1
- package/dist/scene-model-translation.js +23 -1
- package/dist/scene-model-translation.js.map +1 -1
- package/dist/scene-precision.d.ts +16 -0
- package/dist/scene-precision.d.ts.map +1 -0
- package/dist/scene-precision.js +73 -0
- package/dist/scene-precision.js.map +1 -0
- package/dist/scene-rect-select.d.ts +11 -1
- package/dist/scene-rect-select.d.ts.map +1 -1
- package/dist/scene-rect-select.js +7 -4
- package/dist/scene-rect-select.js.map +1 -1
- package/dist/scene.d.ts +42 -39
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +258 -375
- package/dist/scene.js.map +1 -1
- package/dist/section-2d-lift.d.ts +10 -2
- package/dist/section-2d-lift.d.ts.map +1 -1
- package/dist/section-2d-lift.js +14 -6
- package/dist/section-2d-lift.js.map +1 -1
- package/dist/section-2d-line-buffer.d.ts +12 -4
- package/dist/section-2d-line-buffer.d.ts.map +1 -1
- package/dist/section-2d-line-buffer.js +59 -33
- package/dist/section-2d-line-buffer.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +18 -72
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +72 -103
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-2d-types.d.ts +38 -0
- package/dist/section-2d-types.d.ts.map +1 -0
- package/dist/section-2d-types.js +6 -0
- package/dist/section-2d-types.js.map +1 -0
- package/dist/section-cap-pipelines.d.ts +6 -0
- package/dist/section-cap-pipelines.d.ts.map +1 -0
- package/dist/section-cap-pipelines.js +87 -0
- package/dist/section-cap-pipelines.js.map +1 -0
- package/dist/section-plane-geometry.d.ts +24 -0
- package/dist/section-plane-geometry.d.ts.map +1 -0
- package/dist/section-plane-geometry.js +93 -0
- package/dist/section-plane-geometry.js.map +1 -0
- package/dist/section-plane.d.ts +23 -24
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +58 -174
- package/dist/section-plane.js.map +1 -1
- package/dist/shaders/ao.wgsl.d.ts +2 -0
- package/dist/shaders/ao.wgsl.d.ts.map +1 -0
- package/dist/shaders/ao.wgsl.js +234 -0
- package/dist/shaders/ao.wgsl.js.map +1 -0
- package/dist/shaders/color-transfer.wgsl.d.ts +26 -0
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -0
- package/dist/shaders/color-transfer.wgsl.js +53 -0
- package/dist/shaders/color-transfer.wgsl.js.map +1 -0
- package/dist/shaders/depth-reconstruct.wgsl.d.ts +16 -0
- package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -0
- package/dist/shaders/depth-reconstruct.wgsl.js +69 -0
- package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -0
- package/dist/shaders/main-rte-shadow.wgsl.d.ts +4 -0
- package/dist/shaders/main-rte-shadow.wgsl.d.ts.map +1 -0
- package/dist/shaders/main-rte-shadow.wgsl.js +54 -0
- package/dist/shaders/main-rte-shadow.wgsl.js.map +1 -0
- package/dist/shaders/main.wgsl.d.ts +1 -6
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +110 -159
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/shaders/relative-to-eye.wgsl.d.ts +12 -0
- package/dist/shaders/relative-to-eye.wgsl.d.ts.map +1 -0
- package/dist/shaders/relative-to-eye.wgsl.js +40 -0
- package/dist/shaders/relative-to-eye.wgsl.js.map +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts +28 -12
- package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/section-2d-overlay.wgsl.js +40 -13
- package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
- package/dist/shaders/shadow.wgsl.d.ts +1 -1
- package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
- package/dist/shaders/shadow.wgsl.js +25 -7
- package/dist/shaders/shadow.wgsl.js.map +1 -1
- package/dist/shaders/sky.wgsl.d.ts +1 -11
- package/dist/shaders/sky.wgsl.d.ts.map +1 -1
- package/dist/shaders/sky.wgsl.js +17 -19
- package/dist/shaders/sky.wgsl.js.map +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.d.ts +2 -9
- package/dist/shaders/symbolic-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.js +88 -17
- package/dist/shaders/symbolic-overlay.wgsl.js.map +1 -1
- package/dist/shaders/textured.wgsl.d.ts.map +1 -1
- package/dist/shaders/textured.wgsl.js +11 -9
- package/dist/shaders/textured.wgsl.js.map +1 -1
- package/dist/shadow-light-matrix.d.ts +7 -0
- package/dist/shadow-light-matrix.d.ts.map +1 -1
- package/dist/shadow-light-matrix.js +11 -0
- package/dist/shadow-light-matrix.js.map +1 -1
- package/dist/shadow-occluder-batches.d.ts +10 -0
- package/dist/shadow-occluder-batches.d.ts.map +1 -0
- package/dist/shadow-occluder-batches.js +39 -0
- package/dist/shadow-occluder-batches.js.map +1 -0
- package/dist/shadow-occluders.d.ts.map +1 -1
- package/dist/shadow-occluders.js +4 -0
- package/dist/shadow-occluders.js.map +1 -1
- package/dist/shadow-pass.d.ts +5 -51
- package/dist/shadow-pass.d.ts.map +1 -1
- package/dist/shadow-pass.js +49 -45
- package/dist/shadow-pass.js.map +1 -1
- package/dist/shadow-types.d.ts +39 -0
- package/dist/shadow-types.d.ts.map +1 -0
- package/dist/shadow-types.js +15 -0
- package/dist/shadow-types.js.map +1 -0
- package/dist/symbolic-overlay-geometry.d.ts +7 -0
- package/dist/symbolic-overlay-geometry.d.ts.map +1 -0
- package/dist/symbolic-overlay-geometry.js +43 -0
- package/dist/symbolic-overlay-geometry.js.map +1 -0
- package/dist/symbolic-overlay-pipelines.d.ts +24 -36
- package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
- package/dist/symbolic-overlay-pipelines.js +175 -182
- package/dist/symbolic-overlay-pipelines.js.map +1 -1
- package/dist/symbolic-text-atlas.d.ts +21 -0
- package/dist/symbolic-text-atlas.d.ts.map +1 -1
- package/dist/symbolic-text-atlas.js +29 -1
- package/dist/symbolic-text-atlas.js.map +1 -1
- package/dist/types.d.ts +20 -26
- package/dist/types.d.ts.map +1 -1
- package/dist/visual-enhancement.d.ts +23 -1
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +38 -12
- package/dist/visual-enhancement.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-projection.js","sourceRoot":"","sources":["../src/camera-projection.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAS/D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-projection.js","sourceRoot":"","sources":["../src/camera-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zoom toward the surface under the cursor (#5393).
|
|
3
|
+
*
|
|
4
|
+
* Plain wheel zoom anchors on the plane through the orbit target and dollies
|
|
5
|
+
* the target forward by half of every step (`CameraControls.zoomPerspective`,
|
|
6
|
+
* the anti-"Zeno" dolly), so its step has no relation to how far the surface
|
|
7
|
+
* under the cursor is: repeated notches pass straight through a pipe or a
|
|
8
|
+
* small building into empty space.
|
|
9
|
+
*
|
|
10
|
+
* With a picked surface point P, each notch instead moves the camera along the
|
|
11
|
+
* cursor ray toward P by a fraction of the REMAINING distance, down to a
|
|
12
|
+
* standoff. That approaches the surface asymptotically and never reaches it.
|
|
13
|
+
* The camera is translated, not rotated, so P stays under the cursor; the
|
|
14
|
+
* orbit target is re-seated on the view axis at P's depth, so orbit and pan
|
|
15
|
+
* afterwards scale with the surface the user zoomed to rather than with the
|
|
16
|
+
* old, now far-behind, target.
|
|
17
|
+
*/
|
|
18
|
+
import type { Vec3 } from './types.js';
|
|
19
|
+
/** Closest the camera gets to the picked surface, in scene units (metres). */
|
|
20
|
+
export declare const SURFACE_ZOOM_MIN_STANDOFF = 0.02;
|
|
21
|
+
export interface SurfaceZoomPose {
|
|
22
|
+
position: Vec3;
|
|
23
|
+
target: Vec3;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* One zoom-in notch toward `point`. `fraction` in (0, 1) is the share of the
|
|
27
|
+
* remaining distance to cover. Returns the new pose, or null when the point is
|
|
28
|
+
* unusable (non-finite, at the eye, or not in front of the camera), in which
|
|
29
|
+
* case the caller falls back to plain zoom.
|
|
30
|
+
*/
|
|
31
|
+
export declare function surfaceZoomStep(pose: SurfaceZoomPose, point: Vec3, fraction: number): SurfaceZoomPose | null;
|
|
32
|
+
//# sourceMappingURL=camera-surface-zoom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera-surface-zoom.d.ts","sourceRoot":"","sources":["../src/camera-surface-zoom.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAuB5G"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/** Closest the camera gets to the picked surface, in scene units (metres). */
|
|
5
|
+
export const SURFACE_ZOOM_MIN_STANDOFF = 0.02;
|
|
6
|
+
/**
|
|
7
|
+
* One zoom-in notch toward `point`. `fraction` in (0, 1) is the share of the
|
|
8
|
+
* remaining distance to cover. Returns the new pose, or null when the point is
|
|
9
|
+
* unusable (non-finite, at the eye, or not in front of the camera), in which
|
|
10
|
+
* case the caller falls back to plain zoom.
|
|
11
|
+
*/
|
|
12
|
+
export function surfaceZoomStep(pose, point, fraction) {
|
|
13
|
+
const { position: p, target: t } = pose;
|
|
14
|
+
if (![point.x, point.y, point.z].every(Number.isFinite) || !(fraction > 0 && fraction < 1))
|
|
15
|
+
return null;
|
|
16
|
+
const fx = t.x - p.x, fy = t.y - p.y, fz = t.z - p.z;
|
|
17
|
+
const fLen = Math.hypot(fx, fy, fz);
|
|
18
|
+
if (!(fLen > 0) || !Number.isFinite(fLen))
|
|
19
|
+
return null;
|
|
20
|
+
const forward = { x: fx / fLen, y: fy / fLen, z: fz / fLen };
|
|
21
|
+
const toX = point.x - p.x, toY = point.y - p.y, toZ = point.z - p.z;
|
|
22
|
+
const dist = Math.hypot(toX, toY, toZ);
|
|
23
|
+
const depth0 = toX * forward.x + toY * forward.y + toZ * forward.z;
|
|
24
|
+
// A point behind the eye (or on it) is no surface to approach.
|
|
25
|
+
if (!(dist > 0) || !(depth0 > 0))
|
|
26
|
+
return null;
|
|
27
|
+
// Moving along the cursor ray scales the point's depth (its distance along
|
|
28
|
+
// the view axis, which is what the near plane clips) by the same factor as
|
|
29
|
+
// its distance, so the standoff is enforced on depth: an off-axis point is
|
|
30
|
+
// shallower than it is far.
|
|
31
|
+
const next = Math.max(dist * (1 - fraction), (SURFACE_ZOOM_MIN_STANDOFF * dist) / depth0);
|
|
32
|
+
const k = next < dist ? 1 - next / dist : 0; // at the standoff: hold still, never pass
|
|
33
|
+
const position = { x: p.x + toX * k, y: p.y + toY * k, z: p.z + toZ * k };
|
|
34
|
+
const d = depth0 * (1 - k); // the point's depth after the move, >= the standoff
|
|
35
|
+
return { position, target: { x: position.x + forward.x * d, y: position.y + forward.y * d, z: position.z + forward.z * d } };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=camera-surface-zoom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera-surface-zoom.js","sourceRoot":"","sources":["../src/camera-surface-zoom.ts"],"names":[],"mappings":"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"}
|
package/dist/camera.d.ts
CHANGED
|
@@ -8,17 +8,20 @@ import type { Vec3, Mat4 } from './types.js';
|
|
|
8
8
|
import { type InteractionMode } from './camera-controls.js';
|
|
9
9
|
import type { ProjectionMode } from './camera-state.js';
|
|
10
10
|
import { type Bounds3, type FitPolicy } from './camera-fit-policy.js';
|
|
11
|
+
import { RelativeToEyeFrame } from './relative-to-eye.js';
|
|
11
12
|
export declare class Camera {
|
|
12
13
|
private state;
|
|
13
14
|
private controls;
|
|
14
15
|
private animator;
|
|
15
16
|
private projection;
|
|
16
17
|
private firstPerson;
|
|
18
|
+
private orientation;
|
|
19
|
+
/** The sole renderer camera frame used by all RTE-capable consumers. */
|
|
20
|
+
private readonly relativeToEyeFrame;
|
|
21
|
+
/** Mirror of the controls' gate, for the surface zoom below (#5393). */
|
|
22
|
+
private interactionMode;
|
|
17
23
|
constructor();
|
|
18
|
-
/**
|
|
19
|
-
* Cold-path convenience for this class's own setters. The hot path uses the
|
|
20
|
-
* closure built in the constructor; see the note there.
|
|
21
|
-
*/
|
|
24
|
+
/** Publish both camera frames after every setter, gesture and animation. */
|
|
22
25
|
private updateMatrices;
|
|
23
26
|
/**
|
|
24
27
|
* Set camera aspect ratio
|
|
@@ -66,8 +69,15 @@ export declare class Camera {
|
|
|
66
69
|
* @param mouseY - Mouse Y position in canvas coordinates
|
|
67
70
|
* @param canvasWidth - Canvas width
|
|
68
71
|
* @param canvasHeight - Canvas height
|
|
72
|
+
* @param fastZoom - Pure dolly (Shift / Cesium): the full step translates the rig
|
|
73
|
+
* @param surfacePoint - World point on the visible surface under the cursor
|
|
74
|
+
* (#5393). Zooming IN approaches it and stops short of it; it is ignored
|
|
75
|
+
* for zoom-out, fast zoom and orthographic. The surface step applies no
|
|
76
|
+
* inertia, so `addVelocity` has no effect on it.
|
|
69
77
|
*/
|
|
70
|
-
zoom(delta: number, addVelocity?: boolean, mouseX?: number, mouseY?: number, canvasWidth?: number, canvasHeight?: number, fastZoom?: boolean): void;
|
|
78
|
+
zoom(delta: number, addVelocity?: boolean, mouseX?: number, mouseY?: number, canvasWidth?: number, canvasHeight?: number, fastZoom?: boolean, surfacePoint?: Vec3): void;
|
|
79
|
+
/** One zoom-in notch toward a picked surface point; false = not applied. */
|
|
80
|
+
private zoomTowardSurface;
|
|
71
81
|
/**
|
|
72
82
|
* Fit view to bounding box. Sets camera to southeast isometric view (typical
|
|
73
83
|
* BIM starting view). Y-up coordinate system: Y is vertical
|
|
@@ -145,6 +155,13 @@ export declare class Camera {
|
|
|
145
155
|
*/
|
|
146
156
|
reset(): void;
|
|
147
157
|
getViewProjMatrix(): Mat4;
|
|
158
|
+
/** The reverse-Z projection matrix (perspective or orthographic); a copy. */
|
|
159
|
+
getProjMatrix(): Mat4;
|
|
160
|
+
/**
|
|
161
|
+
* Return the shared RTE frame for the current camera state. GPU consumers
|
|
162
|
+
* must use this instead of deriving a second camera rebase.
|
|
163
|
+
*/
|
|
164
|
+
getRelativeToEyeFrame(): RelativeToEyeFrame;
|
|
148
165
|
getPosition(): Vec3;
|
|
149
166
|
getTarget(): Vec3;
|
|
150
167
|
/**
|
|
@@ -158,73 +175,27 @@ export declare class Camera {
|
|
|
158
175
|
/**
|
|
159
176
|
* The aspect ratio (width / height) the projection is currently built from.
|
|
160
177
|
*
|
|
161
|
-
* This is the DRAWING BUFFER's ratio
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
178
|
+
* This is the DRAWING BUFFER's ratio. Since #5383 the buffer is the CSS box
|
|
179
|
+
* scaled by one pixel ratio on both axes, so the two agree up to integer
|
|
180
|
+
* rounding of the buffer (the width used to be floored to a multiple of 64,
|
|
181
|
+
* which made them differ by up to 63 pixels).
|
|
165
182
|
*
|
|
166
|
-
*
|
|
167
|
-
* from `canvas.toDataURL()`, which encodes that same drawing
|
|
168
|
-
* `<AspectRatio>` written beside it describes the image
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* reproduces the framing rather than one 63 pixels wider.
|
|
183
|
+
* The buffer ratio is the right one for BCF (#3612). A viewpoint's snapshot
|
|
184
|
+
* PNG comes from `canvas.toDataURL()`, which encodes that same drawing
|
|
185
|
+
* buffer, so the `<AspectRatio>` written beside it describes the image
|
|
186
|
+
* actually in the archive. It is also the ratio the projection matrix used,
|
|
187
|
+
* so a viewer restoring the camera reproduces the framing.
|
|
172
188
|
*
|
|
173
189
|
* Always finite and positive -- {@link setAspect} rejects anything else --
|
|
174
190
|
* which is what BCF 3.0's `PositiveDouble` schema type requires.
|
|
175
191
|
*/
|
|
176
192
|
getAspect(): number;
|
|
177
|
-
/**
|
|
178
|
-
* Get distance from camera position to target.
|
|
179
|
-
*
|
|
180
|
-
* Deliberately **unsanitized**: it reports the pose as it actually is, so a
|
|
181
|
-
* malformed one (a BCF viewpoint restored from a file reaches the public
|
|
182
|
-
* setters unvalidated) yields NaN rather than a substituted number. This is
|
|
183
|
-
* a measurement, not a control input: it is what `useBCF` reads back when
|
|
184
|
-
* restoring a viewpoint and what the BCF overlay scales markers by. There is
|
|
185
|
-
* no substitute that is right for every reader — a plausible-looking `1`
|
|
186
|
-
* would place every restored target one unit from the eye — and returning a
|
|
187
|
-
* number here would contradict `getPosition()`/`getTarget()`, which are raw,
|
|
188
|
-
* leaving callers no way to tell that the pose is broken. Gesture code inside
|
|
189
|
-
* this package guards with {@link isUsableDistance} instead; each gesture
|
|
190
|
-
* needs a different fallback. Callers OUTSIDE the package cannot use that
|
|
191
|
-
* predicate (it is package-internal) and are not all guarded — see #2466 for
|
|
192
|
-
* the viewpoint-restore path (#2441).
|
|
193
|
-
*/
|
|
193
|
+
/** Raw pose distance; non-finite source poses remain observable. */
|
|
194
194
|
getDistance(): number;
|
|
195
|
-
/**
|
|
196
|
-
* Get current camera rotation angles in degrees
|
|
197
|
-
* Returns { azimuth, elevation } where:
|
|
198
|
-
* - azimuth: horizontal rotation (0-360), 0 = front
|
|
199
|
-
* - elevation: vertical rotation (-90 to 90), 0 = horizon
|
|
200
|
-
*/
|
|
201
195
|
getRotation(): {
|
|
202
196
|
azimuth: number;
|
|
203
197
|
elevation: number;
|
|
204
198
|
};
|
|
205
|
-
/**
|
|
206
|
-
* Place the camera at an ABSOLUTE orientation around its current target,
|
|
207
|
-
* in the same angle convention {@link getRotation} reports — the exact
|
|
208
|
-
* inverse of it, so `setRotation(a, e)` then `getRotation()` returns
|
|
209
|
-
* `{ azimuth: a, elevation: e }` (modulo the normalisation and pole clamp
|
|
210
|
-
* below).
|
|
211
|
-
*
|
|
212
|
-
* This is the only absolute-orientation entry point on the camera. Everything
|
|
213
|
-
* else is relative (`orbit`, and the viewer's 90° rotate steppers built on it)
|
|
214
|
-
* or names a direction rather than an angle (`setPresetView`), which is why a
|
|
215
|
-
* host command that says "go to azimuth 120°, elevation 30°" had nothing to
|
|
216
|
-
* call and silently did nothing (#2934).
|
|
217
|
-
*
|
|
218
|
-
* The orbit radius and the target are preserved — this rotates the camera on
|
|
219
|
-
* its current sphere, it does not reframe. `up` is reset to world Y, matching
|
|
220
|
-
* `orbit`, so the reported azimuth comes back through `getRotation`'s
|
|
221
|
-
* position-based branch.
|
|
222
|
-
*
|
|
223
|
-
* @param azimuth Horizontal angle in degrees; normalised into [0, 360).
|
|
224
|
-
* @param elevation Vertical angle in degrees, 0 = horizon. Clamped to just
|
|
225
|
-
* inside ±90° (the same `MIN_PHI` margin `orbit` uses) — the exact poles
|
|
226
|
-
* collapse `cross(forward, up)` and flip the model.
|
|
227
|
-
*/
|
|
228
199
|
setRotation(azimuth: number, elevation: number): void;
|
|
229
200
|
/**
|
|
230
201
|
* Unproject screen coordinates to a ray in world space
|
package/dist/camera.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAM7E,OAAO,EAAiB,KAAK,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,wBAAwB,CAAC;AAOhH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,WAAW,CAAoB;IACvC,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4B;IAC/D,wEAAwE;IACxE,OAAO,CAAC,eAAe,CAA0B;;IAiCjD,4EAA4E;IAC5E,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAa/B;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlD;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKhD;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAK5C;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAYzB;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAIzC,2EAA2E;IAC3E,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAK/C;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,IAAI;IAShE;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,IAAI;IAe9D;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,UAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI;IAatK,4EAA4E;IAC5E,OAAO,CAAC,iBAAiB;IAezB;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI;IAIvC;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIlC;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D;;;OAGG;IACG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAOxC;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStE;;;;OAIG;IACH,iBAAiB,CACf,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3E,SAAS;IAgCZ;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7E;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhG;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI7C;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAIjE;;;;OAIG;IACH,aAAa,CACX,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAC5D,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,EACjC,gBAAgB,CAAC,EAAE,MAAM,GACxB,IAAI;IAIP;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAcb,iBAAiB,IAAI,IAAI;IAIzB,6EAA6E;IAC7E,aAAa,IAAI,IAAI;IAIrB;;;OAGG;IACH,qBAAqB,IAAI,kBAAkB;IAI3C,WAAW,IAAI,IAAI;IAInB,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAS,IAAI,MAAM;IAInB,oEAAoE;IACpE,WAAW,IAAI,MAAM;IAErB,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAErD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAErD;;;;;;;OAOG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE;IAI9H;;;;;;OAMG;IACH,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI3G;;;OAGG;IACH,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAkB7C;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAI5B;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWhC;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI;IAK3H;;;;;OAKG;IACH,cAAc,IAAI;QAAE,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI;IAI/G;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI;IAIjI;;;;OAIG;IACH,oBAAoB,IAAI;QAAE,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI;CAGtH"}
|
package/dist/camera.js
CHANGED
|
@@ -6,9 +6,12 @@ import { CameraControls } from './camera-controls.js';
|
|
|
6
6
|
import { CameraAnimator } from './camera-animation.js';
|
|
7
7
|
import { CameraProjection } from './camera-projection.js';
|
|
8
8
|
import { FirstPersonNavigator } from './camera-first-person.js';
|
|
9
|
-
import { updateCameraMatrices } from './camera-matrices.js';
|
|
9
|
+
import { updateCameraMatrices, updateCameraRelativeFrame } from './camera-matrices.js';
|
|
10
|
+
import { CameraOrientation } from './camera-orientation.js';
|
|
10
11
|
import { pickFitPolicy } from './camera-fit-policy.js';
|
|
11
|
-
import {
|
|
12
|
+
import { DEFAULT_ORTHO_SIZE, isUsableBounds, isUsableDistance, usableOrthoSize, } from './camera-guards.js';
|
|
13
|
+
import { RelativeToEyeFrame } from './relative-to-eye.js';
|
|
14
|
+
import { surfaceZoomStep } from './camera-surface-zoom.js';
|
|
12
15
|
import { CAMERA_CONSTANTS } from './constants.js';
|
|
13
16
|
export class Camera {
|
|
14
17
|
state;
|
|
@@ -16,6 +19,11 @@ export class Camera {
|
|
|
16
19
|
animator;
|
|
17
20
|
projection;
|
|
18
21
|
firstPerson;
|
|
22
|
+
orientation;
|
|
23
|
+
/** The sole renderer camera frame used by all RTE-capable consumers. */
|
|
24
|
+
relativeToEyeFrame = new RelativeToEyeFrame();
|
|
25
|
+
/** Mirror of the controls' gate, for the surface zoom below (#5393). */
|
|
26
|
+
interactionMode = 'all';
|
|
19
27
|
constructor() {
|
|
20
28
|
// Geometry is converted from IFC Z-up to WebGL Y-up during import
|
|
21
29
|
this.state = {
|
|
@@ -36,24 +44,19 @@ export class Camera {
|
|
|
36
44
|
sceneBounds: null,
|
|
37
45
|
orbitAnchorBounds: null,
|
|
38
46
|
};
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
// sub-system drives the matrices through, and routing it via the private
|
|
42
|
-
// method would add a hop to it. Depth is therefore unchanged from before
|
|
43
|
-
// the extraction (closure → one call), and the callee is monomorphic.
|
|
44
|
-
const updateMatrices = () => updateCameraMatrices(this.state);
|
|
47
|
+
// All pose writers publish the ordinary and relative frames together.
|
|
48
|
+
const updateMatrices = () => this.updateMatrices();
|
|
45
49
|
this.controls = new CameraControls(this.state, updateMatrices);
|
|
46
|
-
this.projection = new CameraProjection(this.state, updateMatrices);
|
|
50
|
+
this.projection = new CameraProjection(this.state, updateMatrices, this.relativeToEyeFrame);
|
|
47
51
|
this.animator = new CameraAnimator(this.state, updateMatrices, this.controls, this.projection);
|
|
48
52
|
this.firstPerson = new FirstPersonNavigator(this.state, updateMatrices);
|
|
53
|
+
this.orientation = new CameraOrientation(this.state, this.animator, updateMatrices);
|
|
49
54
|
this.updateMatrices();
|
|
50
55
|
}
|
|
51
|
-
/**
|
|
52
|
-
* Cold-path convenience for this class's own setters. The hot path uses the
|
|
53
|
-
* closure built in the constructor; see the note there.
|
|
54
|
-
*/
|
|
56
|
+
/** Publish both camera frames after every setter, gesture and animation. */
|
|
55
57
|
updateMatrices() {
|
|
56
58
|
updateCameraMatrices(this.state);
|
|
59
|
+
updateCameraRelativeFrame(this.state, this.relativeToEyeFrame);
|
|
57
60
|
}
|
|
58
61
|
/**
|
|
59
62
|
* Set camera aspect ratio
|
|
@@ -117,6 +120,7 @@ export class Camera {
|
|
|
117
120
|
}
|
|
118
121
|
/** Restrict interactive orbit/pan/zoom (embed `controls` param, #2934). */
|
|
119
122
|
setInteractionMode(mode) {
|
|
123
|
+
this.interactionMode = mode;
|
|
120
124
|
this.controls.setInteractionMode(mode);
|
|
121
125
|
}
|
|
122
126
|
/**
|
|
@@ -159,8 +163,18 @@ export class Camera {
|
|
|
159
163
|
* @param mouseY - Mouse Y position in canvas coordinates
|
|
160
164
|
* @param canvasWidth - Canvas width
|
|
161
165
|
* @param canvasHeight - Canvas height
|
|
162
|
-
|
|
163
|
-
|
|
166
|
+
* @param fastZoom - Pure dolly (Shift / Cesium): the full step translates the rig
|
|
167
|
+
* @param surfacePoint - World point on the visible surface under the cursor
|
|
168
|
+
* (#5393). Zooming IN approaches it and stops short of it; it is ignored
|
|
169
|
+
* for zoom-out, fast zoom and orthographic. The surface step applies no
|
|
170
|
+
* inertia, so `addVelocity` has no effect on it.
|
|
171
|
+
*/
|
|
172
|
+
zoom(delta, addVelocity = false, mouseX, mouseY, canvasWidth, canvasHeight, fastZoom, surfacePoint) {
|
|
173
|
+
// Zooming IN over geometry approaches the picked surface instead of the
|
|
174
|
+
// target plane, so repeated notches stop short of it (#5393). Pure dolly
|
|
175
|
+
// (fast zoom, Cesium) and orthographic keep the plain path.
|
|
176
|
+
if (surfacePoint && delta < 0 && !fastZoom && this.zoomTowardSurface(delta, surfacePoint))
|
|
177
|
+
return;
|
|
164
178
|
// Gate inertia on whether `zoom` applied, same reason as `orbit` above (#2934 review).
|
|
165
179
|
if (!this.controls.zoom(delta, mouseX, mouseY, canvasWidth, canvasHeight, fastZoom))
|
|
166
180
|
return;
|
|
@@ -169,6 +183,23 @@ export class Camera {
|
|
|
169
183
|
this.animator.addZoomVelocity(normalizedDelta);
|
|
170
184
|
}
|
|
171
185
|
}
|
|
186
|
+
/** One zoom-in notch toward a picked surface point; false = not applied. */
|
|
187
|
+
zoomTowardSurface(delta, point) {
|
|
188
|
+
// Same gate as CameraControls.zoom: only 'all' may dolly (#2934).
|
|
189
|
+
if (this.interactionMode !== 'all' || this.state.projectionMode !== 'perspective')
|
|
190
|
+
return false;
|
|
191
|
+
const fraction = Math.min(Math.abs(delta) * CAMERA_CONSTANTS.ZOOM_SENSITIVITY, CAMERA_CONSTANTS.MAX_ZOOM_DELTA);
|
|
192
|
+
const next = surfaceZoomStep(this.state.camera, point, fraction);
|
|
193
|
+
if (!next)
|
|
194
|
+
return false;
|
|
195
|
+
// The orbit centre is left where it is on purpose: the mouse path re-seats
|
|
196
|
+
// it on every orbit start, and the new target already sits at the surface.
|
|
197
|
+
// In place, like every other pose writer: callers may hold these objects.
|
|
198
|
+
Object.assign(this.state.camera.position, next.position);
|
|
199
|
+
Object.assign(this.state.camera.target, next.target);
|
|
200
|
+
this.updateMatrices();
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
172
203
|
/**
|
|
173
204
|
* Fit view to bounding box. Sets camera to southeast isometric view (typical
|
|
174
205
|
* BIM starting view). Y-up coordinate system: Y is vertical
|
|
@@ -310,7 +341,18 @@ export class Camera {
|
|
|
310
341
|
this.state.orbitAnchorBounds = null;
|
|
311
342
|
}
|
|
312
343
|
getViewProjMatrix() {
|
|
313
|
-
return this.state.viewProjMatrix;
|
|
344
|
+
return { m: new Float32Array(this.state.viewProjMatrix.m) };
|
|
345
|
+
}
|
|
346
|
+
/** The reverse-Z projection matrix (perspective or orthographic); a copy. */
|
|
347
|
+
getProjMatrix() {
|
|
348
|
+
return { m: new Float32Array(this.state.projMatrix.m) };
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Return the shared RTE frame for the current camera state. GPU consumers
|
|
352
|
+
* must use this instead of deriving a second camera rebase.
|
|
353
|
+
*/
|
|
354
|
+
getRelativeToEyeFrame() {
|
|
355
|
+
return this.relativeToEyeFrame;
|
|
314
356
|
}
|
|
315
357
|
getPosition() {
|
|
316
358
|
return { ...this.state.camera.position };
|
|
@@ -333,17 +375,16 @@ export class Camera {
|
|
|
333
375
|
/**
|
|
334
376
|
* The aspect ratio (width / height) the projection is currently built from.
|
|
335
377
|
*
|
|
336
|
-
* This is the DRAWING BUFFER's ratio
|
|
337
|
-
*
|
|
338
|
-
*
|
|
339
|
-
*
|
|
378
|
+
* This is the DRAWING BUFFER's ratio. Since #5383 the buffer is the CSS box
|
|
379
|
+
* scaled by one pixel ratio on both axes, so the two agree up to integer
|
|
380
|
+
* rounding of the buffer (the width used to be floored to a multiple of 64,
|
|
381
|
+
* which made them differ by up to 63 pixels).
|
|
340
382
|
*
|
|
341
|
-
*
|
|
342
|
-
* from `canvas.toDataURL()`, which encodes that same drawing
|
|
343
|
-
* `<AspectRatio>` written beside it describes the image
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
* reproduces the framing rather than one 63 pixels wider.
|
|
383
|
+
* The buffer ratio is the right one for BCF (#3612). A viewpoint's snapshot
|
|
384
|
+
* PNG comes from `canvas.toDataURL()`, which encodes that same drawing
|
|
385
|
+
* buffer, so the `<AspectRatio>` written beside it describes the image
|
|
386
|
+
* actually in the archive. It is also the ratio the projection matrix used,
|
|
387
|
+
* so a viewer restoring the camera reproduces the framing.
|
|
347
388
|
*
|
|
348
389
|
* Always finite and positive -- {@link setAspect} rejects anything else --
|
|
349
390
|
* which is what BCF 3.0's `PositiveDouble` schema type requires.
|
|
@@ -351,147 +392,10 @@ export class Camera {
|
|
|
351
392
|
getAspect() {
|
|
352
393
|
return this.state.camera.aspect;
|
|
353
394
|
}
|
|
354
|
-
/**
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
* malformed one (a BCF viewpoint restored from a file reaches the public
|
|
359
|
-
* setters unvalidated) yields NaN rather than a substituted number. This is
|
|
360
|
-
* a measurement, not a control input: it is what `useBCF` reads back when
|
|
361
|
-
* restoring a viewpoint and what the BCF overlay scales markers by. There is
|
|
362
|
-
* no substitute that is right for every reader — a plausible-looking `1`
|
|
363
|
-
* would place every restored target one unit from the eye — and returning a
|
|
364
|
-
* number here would contradict `getPosition()`/`getTarget()`, which are raw,
|
|
365
|
-
* leaving callers no way to tell that the pose is broken. Gesture code inside
|
|
366
|
-
* this package guards with {@link isUsableDistance} instead; each gesture
|
|
367
|
-
* needs a different fallback. Callers OUTSIDE the package cannot use that
|
|
368
|
-
* predicate (it is package-internal) and are not all guarded — see #2466 for
|
|
369
|
-
* the viewpoint-restore path (#2441).
|
|
370
|
-
*/
|
|
371
|
-
getDistance() {
|
|
372
|
-
const dir = {
|
|
373
|
-
x: this.state.camera.position.x - this.state.camera.target.x,
|
|
374
|
-
y: this.state.camera.position.y - this.state.camera.target.y,
|
|
375
|
-
z: this.state.camera.position.z - this.state.camera.target.z,
|
|
376
|
-
};
|
|
377
|
-
return Math.sqrt(dir.x * dir.x + dir.y * dir.y + dir.z * dir.z);
|
|
378
|
-
}
|
|
379
|
-
/**
|
|
380
|
-
* Get current camera rotation angles in degrees
|
|
381
|
-
* Returns { azimuth, elevation } where:
|
|
382
|
-
* - azimuth: horizontal rotation (0-360), 0 = front
|
|
383
|
-
* - elevation: vertical rotation (-90 to 90), 0 = horizon
|
|
384
|
-
*/
|
|
385
|
-
getRotation() {
|
|
386
|
-
const dir = {
|
|
387
|
-
x: this.state.camera.position.x - this.state.camera.target.x,
|
|
388
|
-
y: this.state.camera.position.y - this.state.camera.target.y,
|
|
389
|
-
z: this.state.camera.position.z - this.state.camera.target.z,
|
|
390
|
-
};
|
|
391
|
-
const distance = Math.sqrt(dir.x * dir.x + dir.y * dir.y + dir.z * dir.z);
|
|
392
|
-
// `distance < 1e-6` alone is a magnitude test, not a finiteness one: the
|
|
393
|
-
// comparison is false for NaN, so a malformed pose fell through the guard
|
|
394
|
-
// that looked like it was catching it, and `Math.asin(Math.max(-1,
|
|
395
|
-
// Math.min(1, NaN)))` is NaN — a NaN elevation that leaves the renderer
|
|
396
|
-
// entirely, into the viewer's rotation readout and the measurement
|
|
397
|
-
// handlers (#2441). Same neutral answer as the degenerate pose, which is
|
|
398
|
-
// preserved verbatim.
|
|
399
|
-
if (!isUsableDistance(distance, 1e-6))
|
|
400
|
-
return { azimuth: 0, elevation: 0 };
|
|
401
|
-
// Elevation: angle from horizontal plane
|
|
402
|
-
const elevation = Math.asin(Math.max(-1, Math.min(1, dir.y / distance))) * 180 / Math.PI;
|
|
403
|
-
// Calculate azimuth smoothly using up vector
|
|
404
|
-
// The up vector defines the "screen up" direction, which determines rotation
|
|
405
|
-
const upX = this.state.camera.up.x;
|
|
406
|
-
const upY = this.state.camera.up.y;
|
|
407
|
-
const upZ = this.state.camera.up.z;
|
|
408
|
-
// Project up vector onto horizontal plane (XZ plane)
|
|
409
|
-
const upLen = Math.sqrt(upX * upX + upZ * upZ);
|
|
410
|
-
let azimuth;
|
|
411
|
-
if (upLen > 0.01) {
|
|
412
|
-
// Use up vector projection for azimuth (smooth and consistent)
|
|
413
|
-
azimuth = (Math.atan2(-upX, -upZ) * 180 / Math.PI + 360) % 360;
|
|
414
|
-
// For bottom view, flip azimuth
|
|
415
|
-
if (elevation < -80 && upY < 0) {
|
|
416
|
-
azimuth = (azimuth + 180) % 360;
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
else {
|
|
420
|
-
// Fallback: use position-based azimuth when up vector is vertical
|
|
421
|
-
azimuth = (Math.atan2(dir.x, dir.z) * 180 / Math.PI + 360) % 360;
|
|
422
|
-
}
|
|
423
|
-
return { azimuth, elevation };
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
* Place the camera at an ABSOLUTE orientation around its current target,
|
|
427
|
-
* in the same angle convention {@link getRotation} reports — the exact
|
|
428
|
-
* inverse of it, so `setRotation(a, e)` then `getRotation()` returns
|
|
429
|
-
* `{ azimuth: a, elevation: e }` (modulo the normalisation and pole clamp
|
|
430
|
-
* below).
|
|
431
|
-
*
|
|
432
|
-
* This is the only absolute-orientation entry point on the camera. Everything
|
|
433
|
-
* else is relative (`orbit`, and the viewer's 90° rotate steppers built on it)
|
|
434
|
-
* or names a direction rather than an angle (`setPresetView`), which is why a
|
|
435
|
-
* host command that says "go to azimuth 120°, elevation 30°" had nothing to
|
|
436
|
-
* call and silently did nothing (#2934).
|
|
437
|
-
*
|
|
438
|
-
* The orbit radius and the target are preserved — this rotates the camera on
|
|
439
|
-
* its current sphere, it does not reframe. `up` is reset to world Y, matching
|
|
440
|
-
* `orbit`, so the reported azimuth comes back through `getRotation`'s
|
|
441
|
-
* position-based branch.
|
|
442
|
-
*
|
|
443
|
-
* @param azimuth Horizontal angle in degrees; normalised into [0, 360).
|
|
444
|
-
* @param elevation Vertical angle in degrees, 0 = horizon. Clamped to just
|
|
445
|
-
* inside ±90° (the same `MIN_PHI` margin `orbit` uses) — the exact poles
|
|
446
|
-
* collapse `cross(forward, up)` and flip the model.
|
|
447
|
-
*/
|
|
448
|
-
setRotation(azimuth, elevation) {
|
|
449
|
-
// Angles are an input class of their own, and both of them reach the
|
|
450
|
-
// trigonometry below unguarded: a non-finite one writes a NaN position and
|
|
451
|
-
// destroys an otherwise valid pose. Same rejection `orbit` applies to its
|
|
452
|
-
// deltas — a rejected call changes nothing at all.
|
|
453
|
-
if (!areFiniteNumbers(azimuth, elevation))
|
|
454
|
-
return;
|
|
455
|
-
// An in-flight tween or leftover inertia writes position/target on the next
|
|
456
|
-
// `update()` and would erase this pose a frame later — a host that sends
|
|
457
|
-
// SET_VIEW (animated) and then SET_CAMERA would end up at the preset. An
|
|
458
|
-
// absolute placement supersedes whatever motion is still running, so cancel
|
|
459
|
-
// it; this also drops the preset-view rotation cycle, which is correct
|
|
460
|
-
// after the camera has been reoriented out from under it.
|
|
461
|
-
this.animator.reset();
|
|
462
|
-
const target = this.state.camera.target;
|
|
463
|
-
const dir = {
|
|
464
|
-
x: this.state.camera.position.x - target.x,
|
|
465
|
-
y: this.state.camera.position.y - target.y,
|
|
466
|
-
z: this.state.camera.position.z - target.z,
|
|
467
|
-
};
|
|
468
|
-
const current = Math.sqrt(dir.x * dir.x + dir.y * dir.y + dir.z * dir.z);
|
|
469
|
-
// A degenerate pose (position === target, or a non-finite one) has no orbit
|
|
470
|
-
// radius to preserve. Any positive radius yields a well-formed view matrix
|
|
471
|
-
// at the requested direction, which is strictly better than propagating the
|
|
472
|
-
// degeneracy — and leaves the caller's angles observable, which is the
|
|
473
|
-
// whole point of the command.
|
|
474
|
-
const distance = isUsableDistance(current, 1e-6) ? current : 1;
|
|
475
|
-
// The TARGET is the other unguarded input, and `isUsableDistance` above only
|
|
476
|
-
// rescues the radius. `setTarget` accepts non-finite coordinates, and every
|
|
477
|
-
// position component below is `target.<axis> + ...`, so one NaN there makes
|
|
478
|
-
// the whole pose NaN -- and this method's contract is that it RECOVERS a
|
|
479
|
-
// pose, so silently writing an unrecoverable one is worse than refusing.
|
|
480
|
-
// Same rejection shape as the angle guard at the top: change nothing.
|
|
481
|
-
if (!areFiniteNumbers(target.x, target.y, target.z))
|
|
482
|
-
return;
|
|
483
|
-
const theta = ((((azimuth % 360) + 360) % 360) * Math.PI) / 180;
|
|
484
|
-
const poleMargin = CAMERA_CONSTANTS.MIN_PHI;
|
|
485
|
-
const phi = Math.max(poleMargin, Math.min(Math.PI - poleMargin, ((90 - elevation) * Math.PI) / 180));
|
|
486
|
-
const sinPhi = Math.sin(phi);
|
|
487
|
-
this.state.camera.position = {
|
|
488
|
-
x: target.x + distance * sinPhi * Math.sin(theta),
|
|
489
|
-
y: target.y + distance * Math.cos(phi),
|
|
490
|
-
z: target.z + distance * sinPhi * Math.cos(theta),
|
|
491
|
-
};
|
|
492
|
-
this.state.camera.up = { x: 0, y: 1, z: 0 };
|
|
493
|
-
this.updateMatrices();
|
|
494
|
-
}
|
|
395
|
+
/** Raw pose distance; non-finite source poses remain observable. */
|
|
396
|
+
getDistance() { return this.orientation.getDistance(); }
|
|
397
|
+
getRotation() { return this.orientation.getRotation(); }
|
|
398
|
+
setRotation(azimuth, elevation) { this.orientation.setRotation(azimuth, elevation); }
|
|
495
399
|
/**
|
|
496
400
|
* Unproject screen coordinates to a ray in world space
|
|
497
401
|
* @param screenX - X position in screen coordinates
|