gps-plus-slam-app-framework 1.10.0 → 1.13.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 +27 -28
- package/dist/{absolute-orientation-C_IxDR_j.d.ts → absolute-orientation-0WIsqJnu.d.ts} +1 -1
- package/dist/{accuracy-circles-BE7tbvYV.d.ts → accuracy-circles-CFnKGfsD.d.ts} +1 -1
- package/dist/{app-selectors-CV7ggGoo.d.ts → app-selectors-QM0ZpNA4.d.ts} +1 -1
- package/dist/ar/ar-crash-isolation.d.ts +2 -0
- package/dist/ar/ar-crash-isolation.js +40 -0
- package/dist/ar/bresenham3d.d.ts +1 -1
- package/dist/ar/camera-blit-capture.d.ts +1 -1
- package/dist/ar/capability-checker.d.ts +1 -1
- package/dist/ar/capture-failure-tracker.d.ts +1 -1
- package/dist/ar/capture-motion-gate.d.ts +2 -0
- package/dist/{capture-motion-gate-D1eyGC_o.js → ar/capture-motion-gate.js} +25 -2
- package/dist/ar/chromium-camera-access-workaround.d.ts +1 -1
- package/dist/ar/chromium-camera-access-workaround.js +1 -1
- package/dist/ar/depth-grid-lookup.d.ts +1 -1
- package/dist/ar/depth-occluder.d.ts +1 -1
- package/dist/ar/depth-occluder.js +1 -1
- package/dist/ar/depth-sampler.d.ts +3 -3
- package/dist/ar/depth-sampler.js +28 -1
- package/dist/ar/depth-unprojection.d.ts +1 -1
- package/dist/ar/enable-gps-ar.d.ts +1 -1
- package/dist/ar/enable-gps-ar.js +20 -5
- package/dist/ar/frame-loop.d.ts +1 -1
- package/dist/ar/hit-test-reticle-driver.d.ts +2 -0
- package/dist/ar/hit-test-reticle-driver.js +122 -0
- package/dist/ar/image-capture.d.ts +1 -1
- package/dist/ar/image-capture.js +1 -1
- package/dist/ar/image-quality.d.ts +2 -2
- package/dist/ar/image-quality.js +136 -4
- package/dist/ar/index.d.ts +35 -32
- package/dist/ar/index.js +17 -15
- package/dist/ar/occlusion-mesh-worker.d.ts +2 -2
- package/dist/ar/occlusion-mesh-worker.js +6 -4
- package/dist/ar/occupancy-grid.d.ts +2 -2
- package/dist/ar/occupancy-grid.js +192 -12
- package/dist/ar/occupancy-mesher.d.ts +1 -1
- package/dist/ar/occupancy-mesher.js +1 -636
- package/dist/ar/qr/index.d.ts +11 -0
- package/dist/ar/qr/index.js +11 -0
- package/dist/ar/{planar-pnp.d.ts → qr/planar-pnp.d.ts} +1 -1
- package/dist/ar/{planar-pnp.js → qr/planar-pnp.js} +1 -1
- package/dist/ar/qr/qr-debug-view.d.ts +2 -0
- package/dist/ar/{qr-debug-view.js → qr/qr-debug-view.js} +2 -2
- package/dist/ar/{qr-derived-pose.d.ts → qr/qr-derived-pose.d.ts} +1 -1
- package/dist/ar/{qr-derived-pose.js → qr/qr-derived-pose.js} +2 -2
- package/dist/ar/{qr-detection-controller.d.ts → qr/qr-detection-controller.d.ts} +1 -1
- package/dist/ar/qr/qr-detection-controller.js +2 -0
- package/dist/ar/{qr-frontend.d.ts → qr/qr-frontend.d.ts} +1 -1
- package/dist/ar/{qr-frontend.js → qr/qr-frontend.js} +1 -1
- package/dist/ar/{qr-pose.d.ts → qr/qr-pose.d.ts} +1 -1
- package/dist/ar/{qr-pose.js → qr/qr-pose.js} +1 -1
- package/dist/ar/qr/qr-size-depth-context.d.ts +3 -0
- package/dist/ar/{qr-size-depth-context.js → qr/qr-size-depth-context.js} +4 -4
- package/dist/ar/{qr-size-measurer.d.ts → qr/qr-size-measurer.d.ts} +1 -1
- package/dist/ar/qr/qr-size-measurer.js +2 -0
- package/dist/ar/replay-scene.d.ts +1 -1
- package/dist/ar/replay-scene.js +15 -13
- package/dist/ar/scene-node-names.d.ts +1 -1
- package/dist/ar/webxr-nue-basis.d.ts +1 -1
- package/dist/ar/webxr-session.d.ts +4 -4
- package/dist/ar/webxr-session.js +2 -2
- package/dist/ar/xr-camera-texture.d.ts +1 -1
- package/dist/ar/xr-error-handler.d.ts +1 -1
- package/dist/ar/xr-frame-loop.d.ts +1 -1
- package/dist/ar/xr-frame-loop.js +1 -1
- package/dist/ar-crash-isolation-BSFw_beO.d.ts +52 -0
- package/dist/{ar-world-group-alignment-B6XiA1cT.d.ts → ar-world-group-alignment-CvvfACfx.d.ts} +2 -2
- package/dist/{capability-checker-DEo-ktWI.d.ts → capability-checker-DrWimJ_t.d.ts} +1 -1
- package/dist/capture-motion-gate-C60Qrilh.d.ts +120 -0
- package/dist/{cell-key-Bj-eYTLA.js → cell-key-D1b_Ix-p.js} +12 -1
- package/dist/{chromium-camera-access-workaround-DCd8SP2N.d.ts → chromium-camera-access-workaround-BRs6gkI4.d.ts} +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/{create-slam-app-store-CH31erpP.d.ts → create-slam-app-store-HNe1PBtx.d.ts} +37 -6
- package/dist/{create-slam-app-store-DLv5ZwqU.js → create-slam-app-store-wYN7YkB5.js} +21 -10
- package/dist/{depth-grid-lookup-DY6zYTLx.d.ts → depth-grid-lookup-PcJTdRLL.d.ts} +1 -1
- package/dist/{depth-sampler-txG8evgQ.d.ts → depth-sampler-BcvuxgCS.d.ts} +30 -3
- package/dist/{depth-unprojection-JKkeqJrV.d.ts → depth-unprojection-DbGipFkA.d.ts} +1 -1
- package/dist/{enable-gps-ar-BbNWyqp5.d.ts → enable-gps-ar-xjz3jNqm.d.ts} +10 -5
- package/dist/{file-system-utils-CfLTj5Ra.d.ts → file-system-utils-DE3BViuq.d.ts} +1 -1
- package/dist/{frame-conversions-CH7E2Iv_.d.ts → frame-conversions-CzPQDYpM.d.ts} +1 -1
- package/dist/{fused-path-DOKzVMiO.d.ts → fused-path-CBAttcVm.d.ts} +1 -1
- package/dist/geo/h3-proximity.d.ts +1 -1
- package/dist/geo/h3-proximity.js +1 -1
- package/dist/geo/index.d.ts +1 -1
- package/dist/{geodesic-angle-HXBWiXiI.js → geodesic-angle-CZ_Ow90I.js} +2 -2
- package/dist/{gps-anchor-BaqyRsPC.d.ts → gps-anchor-Gv4NDwH4.d.ts} +1 -1
- package/dist/{gps-ar-pose-sampler-BOOV0jJk.d.ts → gps-ar-pose-sampler-DBEYDFY5.d.ts} +1 -1
- package/dist/{gps-event-coordinator-03rVh_us.d.ts → gps-event-coordinator-BKwB4RyQ.d.ts} +4 -4
- package/dist/{gps-event-markers-BsC2Ynlh.d.ts → gps-event-markers-212h7j3D.d.ts} +39 -5
- package/dist/{h3-proximity-pFluGfwL.d.ts → h3-proximity-CAEk3osq.d.ts} +1 -1
- package/dist/hit-test-reticle-driver-CfKiDgsa.d.ts +40 -0
- package/dist/{image-capture-Cr_rljeV.d.ts → image-capture-BXmx1YvD.d.ts} +6 -6
- package/dist/{image-capture-BUqqsOi3.js → image-capture-Dn8uLIP2.js} +3 -3
- package/dist/{image-quality-BjBLoTec.d.ts → image-quality-G7_qT4aj.d.ts} +44 -2
- package/dist/index-DVmgFIgm.d.ts +64 -0
- package/dist/{index-C2Bo0buN.d.ts → index-DX9VC257.d.ts} +10 -72
- package/dist/{index-CuHaGY0F.d.ts → index-qtZ2muFd.d.ts} +1 -1
- package/dist/index.d.ts +89 -82
- package/dist/index.js +31 -24
- package/dist/{leaflet-map-overlay-QhF199BW.d.ts → leaflet-map-overlay-BkHmzvpD.d.ts} +1 -1
- package/dist/{leaflet-map-overlay-BRkUhZMD.js → leaflet-map-overlay-DjWfRT8a.js} +1 -1
- package/dist/{map-data-D8sSxpOr.d.ts → map-data-BQXPtRz7.d.ts} +3 -3
- package/dist/{map-data-D3oE8AQP.js → map-data-vL8jb5Z9.js} +1 -1
- package/dist/{map-overlay-draw-1E61FLKs.d.ts → map-overlay-draw-sTM3wug_.d.ts} +1 -1
- package/dist/{median-Bla_W50f.js → median-DDBrZGP0.js} +2 -2
- package/dist/{null-storage-backend-DXXuwG8T.d.ts → null-storage-backend-Dtn3TBfT.d.ts} +2 -2
- package/dist/{occlusion-mesh-CZ4i_SW2.d.ts → occlusion-mesh-BY2aMej3.d.ts} +43 -6
- package/dist/occupancy-cubes-visualizer-soN0Sizd.d.ts +146 -0
- package/dist/{occupancy-grid-f0I07UxI.d.ts → occupancy-grid-DKzIdCSZ.d.ts} +114 -4
- package/dist/{occupancy-mesher-BqnRd10x.d.ts → occupancy-mesher-Co80tOpl.d.ts} +22 -1
- package/dist/occupancy-mesher-DzNeJdQf.js +837 -0
- package/dist/{opfs-storage-backend-D1ZpeNEL.d.ts → opfs-storage-backend-CZ-ECudx.d.ts} +2 -2
- package/dist/perf-stats-overlay-BMEQrzx6.d.ts +68 -0
- package/dist/{persistence-middleware-CI4Cetnl.d.ts → persistence-middleware-Byo_Fs4n.d.ts} +13 -3
- package/dist/{planar-pnp-CPLhg5MX.d.ts → planar-pnp-CkcMN3o3.d.ts} +2 -2
- package/dist/pointer-picking-BATHHTlT.d.ts +41 -0
- package/dist/{ar-D-03Kso-.js → qr-CTp5xI83.js} +11 -25
- package/dist/{qr-debug-view-BmbWo06j.d.ts → qr-debug-view-BMjNVhV2.d.ts} +2 -2
- package/dist/{qr-derived-pose-DEYT85ul.d.ts → qr-derived-pose-Dq7mPK2s.d.ts} +3 -3
- package/dist/{qr-detected-slice-CPEkGbxh.d.ts → qr-detected-slice-8t_laDR9.d.ts} +9 -8
- package/dist/{qr-detection-controller-bRTJXC6G.js → qr-detection-controller-DXc1yHRf.js} +3 -3
- package/dist/{qr-detection-controller-IcMRpTjV.d.ts → qr-detection-controller-Dh4Paymb.d.ts} +4 -4
- package/dist/{qr-frontend-61SKPSyU.d.ts → qr-frontend-BnLlVjKu.d.ts} +2 -2
- package/dist/{qr-pose-CCTF1PP0.d.ts → qr-pose-_dInl6di.d.ts} +1 -1
- package/dist/{qr-pose-aggregation-BL6gfl0s.d.ts → qr-pose-aggregation-Bpv4uARJ.d.ts} +2 -2
- package/dist/{qr-pose-aggregation-H-O_Jjz9.js → qr-pose-aggregation-Cp0Mtg_j.js} +4 -4
- package/dist/{qr-size-depth-context-DJsYqbqY.d.ts → qr-size-depth-context-Bzbx98nS.d.ts} +3 -3
- package/dist/{qr-size-measurer-Bl_i-umk.d.ts → qr-size-measurer-18_W3INY.d.ts} +5 -5
- package/dist/{qr-size-measurer-BVOIg-He.js → qr-size-measurer-zZB9S1va.js} +4 -4
- package/dist/{recording-replayer-DyIN13nG.d.ts → recording-replayer-BKmVuchg.d.ts} +2 -2
- package/dist/{recording-slice-DziOl7P5.d.ts → recording-slice-zMedT0ot.d.ts} +10 -5
- package/dist/{replay-engine-DAymjsd1.d.ts → replay-engine-D-cbT0Fw.d.ts} +1 -1
- package/dist/{replay-scene-CZdWgcpc.d.ts → replay-scene-D5qzY0_x.d.ts} +12 -5
- package/dist/sensors/absolute-orientation.d.ts +1 -1
- package/dist/sensors/absolute-orientation.js +1 -1
- package/dist/sensors/gps-error-handler.d.ts +1 -1
- package/dist/sensors/gps.d.ts +1 -1
- package/dist/sensors/index.d.ts +4 -4
- package/dist/sensors/permission-checker.d.ts +1 -1
- package/dist/{session-disposers-BZS-hi8u.js → session-disposers-BJM5U62W.js} +1 -1
- package/dist/state/app-selectors.d.ts +1 -1
- package/dist/state/combined-root-state.d.ts +1 -1
- package/dist/state/create-slam-app-store.d.ts +1 -1
- package/dist/state/create-slam-app-store.js +1 -1
- package/dist/state/gps-ar-pose-sampler.d.ts +2 -2
- package/dist/state/gps-event-coordinator.d.ts +2 -2
- package/dist/state/index.d.ts +19 -20
- package/dist/state/index.js +3 -4
- package/dist/state/persistence-middleware.d.ts +2 -2
- package/dist/state/persistence-middleware.js +24 -15
- package/dist/state/qr-detected-slice.d.ts +3 -3
- package/dist/state/qr-detected-slice.js +8 -8
- package/dist/state/recording-replayer.d.ts +2 -2
- package/dist/state/recording-replayer.js +1 -1
- package/dist/state/recording-slice.d.ts +1 -1
- package/dist/state/replay-engine.d.ts +1 -1
- package/dist/state/replay-occupancy-subscriber.d.ts +51 -0
- package/dist/state/replay-occupancy-subscriber.js +85 -0
- package/dist/state/replay-session.d.ts +88 -0
- package/dist/state/replay-session.js +165 -0
- package/dist/state/store-subscribers.d.ts +2 -2
- package/dist/state/store-subscribers.js +1 -1
- package/dist/state/subscribe-to-selector.d.ts +1 -1
- package/dist/state/tracking-quality.d.ts +1 -1
- package/dist/state/tracking-quality.js +2 -2
- package/dist/state/tracking-slice.d.ts +1 -1
- package/dist/{state-U45ioVyB.js → state-DxL3T1Id.js} +1 -2
- package/dist/storage/file-system-utils.d.ts +1 -1
- package/dist/storage/file-system-utils.js +1 -1
- package/dist/storage/index.d.ts +8 -8
- package/dist/storage/null-storage-backend.d.ts +1 -1
- package/dist/storage/opfs-storage-backend.d.ts +1 -1
- package/dist/storage/opfs-storage.d.ts +1 -1
- package/dist/storage/storage-backend.d.ts +1 -1
- package/dist/storage/zip-coverage-embed.d.ts +1 -1
- package/dist/storage/zip-coverage-embed.js +1 -1
- package/dist/storage/zip-export.d.ts +1 -1
- package/dist/storage/zip-reader.d.ts +1 -1
- package/dist/{storage-backend-BX7egQKi.d.ts → storage-backend-DCYbOvTw.d.ts} +1 -1
- package/dist/{store-subscribers-DtwakLrQ.d.ts → store-subscribers-BbRW35u5.d.ts} +2 -2
- package/dist/{subscribe-to-selector-Cgo9JTfS.d.ts → subscribe-to-selector-B_lm_euO.d.ts} +1 -1
- package/dist/test-utils/browser-mocks.d.ts +1 -1
- package/dist/test-utils/zip-round-trip-helpers.d.ts +1 -1
- package/dist/text-sprite-C6VcC2mo.d.ts +53 -0
- package/dist/{tracking-slice-Bt2OEQhA.d.ts → tracking-slice-D5LDL_y4.d.ts} +3 -2
- package/dist/types/ar-types.d.ts +1 -1
- package/dist/types/geo-types.d.ts +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/utils/concurrency.d.ts +1 -1
- package/dist/utils/failure-tracker.d.ts +1 -1
- package/dist/utils/format-file-size.d.ts +1 -1
- package/dist/utils/fused-path.d.ts +1 -1
- package/dist/utils/index.d.ts +7 -7
- package/dist/utils/index.js +1 -1
- package/dist/utils/list-formatter.d.ts +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/visualization/accuracy-circles.d.ts +1 -1
- package/dist/visualization/accuracy-circles.js +1 -1
- package/dist/visualization/alignment-lerper.d.ts +1 -1
- package/dist/visualization/ar-world-group-alignment.d.ts +1 -1
- package/dist/visualization/ar-world-group-alignment.js +2 -2
- package/dist/visualization/camera-follower.d.ts +1 -1
- package/dist/visualization/css3d-renderer-manager.d.ts +1 -1
- package/dist/visualization/frame-conversions.d.ts +1 -1
- package/dist/visualization/frustum-visibility.d.ts +1 -1
- package/dist/visualization/gps-anchor.d.ts +1 -1
- package/dist/visualization/gps-anchor.js +2 -2
- package/dist/visualization/gps-compass-cubes.d.ts +1 -1
- package/dist/visualization/gps-compass-cubes.js +6 -22
- package/dist/visualization/gps-event-markers.d.ts +2 -2
- package/dist/visualization/gps-event-markers.js +27 -6
- package/dist/visualization/hit-test-reticle.d.ts +1 -1
- package/dist/visualization/hit-test-reticle.js +3 -2
- package/dist/visualization/index.d.ts +25 -20
- package/dist/visualization/index.js +11 -6
- package/dist/visualization/leaflet-map-overlay.d.ts +1 -1
- package/dist/visualization/leaflet-map-overlay.js +1 -1
- package/dist/visualization/lerp-utils.d.ts +1 -1
- package/dist/visualization/map-data.d.ts +1 -1
- package/dist/visualization/map-data.js +1 -1
- package/dist/visualization/map-overlay-draw.d.ts +1 -1
- package/dist/visualization/occluder-mesh-driver.d.ts +2 -2
- package/dist/visualization/occluder-mesh-driver.js +1 -1
- package/dist/visualization/occlusion-mesh.d.ts +2 -2
- package/dist/visualization/occlusion-mesh.js +54 -4
- package/dist/visualization/occupancy-cubes-visualizer.d.ts +2 -0
- package/dist/visualization/occupancy-cubes-visualizer.js +221 -0
- package/dist/visualization/perf-stats-overlay.d.ts +2 -0
- package/dist/visualization/perf-stats-overlay.js +85 -0
- package/dist/visualization/pointer-picking.d.ts +2 -0
- package/dist/visualization/pointer-picking.js +58 -0
- package/dist/visualization/text-sprite.d.ts +2 -0
- package/dist/visualization/text-sprite.js +105 -0
- package/dist/visualization/three-dispose.d.ts +1 -1
- package/dist/visualization/vis-colors.d.ts +1 -1
- package/dist/visualization/wayfinding-hud.d.ts +2 -0
- package/dist/visualization/wayfinding-hud.js +289 -0
- package/dist/visualization/wayfinding-placement.d.ts +2 -0
- package/dist/visualization/wayfinding-placement.js +157 -0
- package/dist/wayfinding-hud-DVun2b69.d.ts +82 -0
- package/dist/wayfinding-placement-dnHzfYlT.d.ts +97 -0
- package/dist/{webxr-session-DWKUsCN9.js → webxr-session-BBlgzrqY.js} +150 -280
- package/dist/{webxr-session-CGFZ429B.d.ts → webxr-session-DurXRnl_.d.ts} +144 -194
- package/dist/{xr-frame-loop-25gM4B0K.d.ts → xr-frame-loop-A1mGDFHI.d.ts} +1 -1
- package/dist/{zip-coverage-embed-BrodRLq0.d.ts → zip-coverage-embed-BC3O2-8b.d.ts} +1 -1
- package/package.json +5 -3
- package/dist/ar/qr-debug-view.d.ts +0 -2
- package/dist/ar/qr-detection-controller.js +0 -2
- package/dist/ar/qr-size-depth-context.d.ts +0 -3
- package/dist/ar/qr-size-measurer.js +0 -2
- package/dist/capture-motion-gate-BmjiWUJv.d.ts +0 -24
- package/dist/map-overlay-0yJOcEVO.d.ts +0 -153
- package/dist/recording-options-Cai9D14V.d.ts +0 -700
- package/dist/state/recording-options.d.ts +0 -2
- package/dist/state/recording-options.js +0 -620
- package/dist/visualization/map-overlay.d.ts +0 -2
- package/dist/visualization/map-overlay.js +0 -241
- /package/dist/{alignment-lerper-B4COh_0p.d.ts → alignment-lerper-CK1TYLIL.d.ts} +0 -0
- /package/dist/{ar-types-CBafnxhE.d.ts → ar-types-BprL3nKv.d.ts} +0 -0
- /package/dist/{bresenham3d-D-t9i_b5.d.ts → bresenham3d-bt61R-Qa.d.ts} +0 -0
- /package/dist/{camera-blit-capture-BlC-arRb.d.ts → camera-blit-capture-CgNJ9grH.d.ts} +0 -0
- /package/dist/{camera-follower-B6zA3dy9.d.ts → camera-follower-OnnXsbHd.d.ts} +0 -0
- /package/dist/{capture-failure-tracker-BAUKjtXU.d.ts → capture-failure-tracker-bUXJeMvQ.d.ts} +0 -0
- /package/dist/{concurrency-DW0jQo3G.d.ts → concurrency-CMhbkxBk.d.ts} +0 -0
- /package/dist/{css3d-renderer-manager-DbrSY7Mh.d.ts → css3d-renderer-manager-CE6xN7XM.d.ts} +0 -0
- /package/dist/{failure-tracker-B7fzPfZo.d.ts → failure-tracker-BdaFulDA.d.ts} +0 -0
- /package/dist/{format-file-size-Da8rZgfs.d.ts → format-file-size-B2CJdRqD.d.ts} +0 -0
- /package/dist/{frame-loop-7HigCj7m.d.ts → frame-loop-CUEIdlhS.d.ts} +0 -0
- /package/dist/{frustum-visibility-COPfzruF.d.ts → frustum-visibility-BTx1Sqfo.d.ts} +0 -0
- /package/dist/{geo-types-BfDK8kJu.d.ts → geo-types-DGe5UKgx.d.ts} +0 -0
- /package/dist/{gps-CX5b9g3s.d.ts → gps-CC0l9lCp.d.ts} +0 -0
- /package/dist/{gps-compass-cubes-CT3TWctJ.d.ts → gps-compass-cubes-QQJgpRXR.d.ts} +0 -0
- /package/dist/{gps-error-handler-DjVuLXve.d.ts → gps-error-handler-da4DCcs5.d.ts} +0 -0
- /package/dist/{hit-test-reticle-DhnCMOsc.d.ts → hit-test-reticle-DcOyqo3B.d.ts} +0 -0
- /package/dist/{index-CjxbDm8W.d.ts → index-T8Fxvzka.d.ts} +0 -0
- /package/dist/{index-Nr3qg4IH.d.ts → index-Y_RNWbQX.d.ts} +0 -0
- /package/dist/{lerp-utils-bwMwVCpU.d.ts → lerp-utils-B-ecvLq2.d.ts} +0 -0
- /package/dist/{list-formatter-1ttG18MQ.d.ts → list-formatter-C45u3Vgv.d.ts} +0 -0
- /package/dist/{logger-B4StJUDb.d.ts → logger-BQGNXi9W.d.ts} +0 -0
- /package/dist/{opfs-storage-S_odkCk1.d.ts → opfs-storage-CrhVauNL.d.ts} +0 -0
- /package/dist/{permission-checker-D1C5zvo-.d.ts → permission-checker-BDrCOwQF.d.ts} +0 -0
- /package/dist/{scene-node-names-DWzhE7Ro.d.ts → scene-node-names-Ct6ATrfM.d.ts} +0 -0
- /package/dist/{three-dispose-C9mdpSRX.d.ts → three-dispose-B5-XiECx.d.ts} +0 -0
- /package/dist/{vis-colors-DjStl_tD.d.ts → vis-colors-16Pht13u.d.ts} +0 -0
- /package/dist/{webxr-nue-basis-C3vTqkE2.d.ts → webxr-nue-basis-B8ZEetVb.d.ts} +0 -0
- /package/dist/{xr-camera-texture-C6Z4d7RR.d.ts → xr-camera-texture-BA4xiaQ4.d.ts} +0 -0
- /package/dist/{xr-error-handler-D9y5r8ok.d.ts → xr-error-handler-BeyxXCE_.d.ts} +0 -0
- /package/dist/{zip-export-CuBimX1J.d.ts → zip-export-Cfl_kNQ7.d.ts} +0 -0
- /package/dist/{zip-reader-BHc_b_iA.d.ts → zip-reader-DwkuvlGo.d.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as RawGpsSample, t as GpsCoord } from "./geo-types-
|
|
1
|
+
import { n as RawGpsSample, t as GpsCoord } from "./geo-types-DGe5UKgx.js";
|
|
2
2
|
import { LatLong, Matrix4, Quaternion, Vector3 } from "gps-plus-slam-js";
|
|
3
3
|
|
|
4
4
|
//#region ../src/visualization/map-data.d.ts
|
|
@@ -10,7 +10,7 @@ interface MapData {
|
|
|
10
10
|
* (GPS-converted tip of `fusedPath`), so the dot keeps moving indoors where
|
|
11
11
|
* the raw fix freezes; the last raw GPS fix is only the pre-alignment
|
|
12
12
|
* fallback. See
|
|
13
|
-
* gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-07-06-recorder-live-map-user-dot-fused-pose-user-feedback.md.
|
|
13
|
+
* gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-07-06-1526-recorder-live-map-user-dot-fused-pose-user-feedback.md.
|
|
14
14
|
*/
|
|
15
15
|
userPosition: GpsCoord | null;
|
|
16
16
|
/** Raw GPS samples (yellow polyline + per-event accuracy circles). */
|
|
@@ -24,7 +24,7 @@ interface MapData {
|
|
|
24
24
|
* north, `[0, 360)`) for the user-position heading line, or null when
|
|
25
25
|
* undefined (no rotation/alignment yet, or camera near-vertical). See
|
|
26
26
|
* Finding 2 of
|
|
27
|
-
* gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-06-28-map-rings-transparency-and-view-direction-user-feedback.md.
|
|
27
|
+
* gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-06-28-1822-map-rings-transparency-and-view-direction-user-feedback.md.
|
|
28
28
|
*
|
|
29
29
|
* Optional only so pre-existing direct `MapData` literals (e.g. the static
|
|
30
30
|
* summary map, which is out of scope and draws no heading line) keep
|
|
@@ -7,7 +7,7 @@ import { vec3 } from "gl-matrix";
|
|
|
7
7
|
* Turns the latest AR camera rotation into an absolute compass bearing (degrees
|
|
8
8
|
* clockwise from geographic North) so the live/replay map overlay can draw a
|
|
9
9
|
* thin view-direction line from the user-position dot. See Finding 2 of
|
|
10
|
-
* gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-06-28-map-rings-transparency-and-view-direction-user-feedback.md.
|
|
10
|
+
* gps-plus-slam/GpsPlusSlamJs_Docs/docs/2026-06-28-1822-map-rings-transparency-and-view-direction-user-feedback.md.
|
|
11
11
|
*
|
|
12
12
|
* Why this lives in the app-framework (NOT the library's `orientation-heading.ts`):
|
|
13
13
|
* that library module is the MAGNETIC path — its bearings come from the
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Shared median helpers (2026-07-10 quality-review A-2).
|
|
4
4
|
*
|
|
5
5
|
* Six private copies with two silently different semantics used to live in
|
|
6
|
-
* `ar/qr-size-from-depth.ts`, `state/tracking-quality.ts`,
|
|
6
|
+
* `ar/qr/qr-size-from-depth.ts`, `state/tracking-quality.ts`,
|
|
7
7
|
* `visualization/gps-anchor.ts` (interpolating) and `ar/image-quality.ts`,
|
|
8
|
-
* `ar/qr-pose-aggregation.ts`, `state/qr-detected-slice.ts` (lower-middle).
|
|
8
|
+
* `ar/qr/qr-pose-aggregation.ts`, `state/qr-detected-slice.ts` (lower-middle).
|
|
9
9
|
* The two variants are deliberately separate named exports — picking the
|
|
10
10
|
* wrong one is exactly the drift this consolidation prevents.
|
|
11
11
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as SessionMetadata } from "./opfs-storage-
|
|
2
|
-
import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-
|
|
1
|
+
import { n as SessionMetadata } from "./opfs-storage-CrhVauNL.js";
|
|
2
|
+
import { n as StorageBackend, t as CreateSessionResult } from "./storage-backend-DCYbOvTw.js";
|
|
3
3
|
|
|
4
4
|
//#region ../src/storage/null-storage-backend.d.ts
|
|
5
5
|
declare class NullStorageBackend implements StorageBackend {
|
|
@@ -1,10 +1,29 @@
|
|
|
1
|
-
import { t as GridCell } from "./bresenham3d-
|
|
2
|
-
import {
|
|
3
|
-
import { n as MeshMode, t as Aabb } from "./occupancy-mesher-BqnRd10x.js";
|
|
1
|
+
import { t as GridCell } from "./bresenham3d-bt61R-Qa.js";
|
|
2
|
+
import { n as MeshMode, t as Aabb } from "./occupancy-mesher-Co80tOpl.js";
|
|
4
3
|
import * as THREE from "three";
|
|
5
|
-
import { Vector3 } from "gps-plus-slam-js";
|
|
4
|
+
import { Vector3 as Vector3$1 } from "gps-plus-slam-js";
|
|
6
5
|
|
|
7
6
|
//#region ../src/visualization/occlusion-mesh.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Debug-visualization style for the **persistent occluder** mesh (2026-07-02
|
|
9
|
+
* debug-viz-styles plan) — which visible debug skin(s) `OcclusionMesh` renders
|
|
10
|
+
* on top of the invisible depth-only occluder:
|
|
11
|
+
* - `'off'` — no debug rendering (the shipped default; occlusion is invisible).
|
|
12
|
+
* - `'matcap'` — the original shiny semi-transparent cyan skin.
|
|
13
|
+
* - `'depth-shaded'` — matcap + camera-distance fade + white fresnel rim, so
|
|
14
|
+
* overlapping near/far surfaces read as separate shells.
|
|
15
|
+
* - `'wireframe'` — the raw triangulation as GL lines (mesh-structure
|
|
16
|
+
* inspection: triangle density, mesher seams, degenerate spots).
|
|
17
|
+
* - `'depth-shaded-wireframe'` — both of the above composed.
|
|
18
|
+
*
|
|
19
|
+
* Owned here since the 2026-07-11 G-1 move (this module is the consumer; it
|
|
20
|
+
* previously lived in the recorder settings catalog). The values array is
|
|
21
|
+
* exported so the recorder's `occluderDebugStyle` validator can enum-check
|
|
22
|
+
* persisted values; the settings `<select>` options are hardcoded in the
|
|
23
|
+
* recorder's `index.html`.
|
|
24
|
+
*/
|
|
25
|
+
declare const OCCLUDER_DEBUG_STYLES: readonly ["off", "matcap", "depth-shaded", "wireframe", "depth-shaded-wireframe"];
|
|
26
|
+
type OccluderDebugStyle = (typeof OCCLUDER_DEBUG_STYLES)[number];
|
|
8
27
|
/**
|
|
9
28
|
* Depth-shaded debug-skin constants — **module constants, not user settings**
|
|
10
29
|
* (tune in code after the first on-device look; 2026-07-02 debug-viz-styles
|
|
@@ -106,6 +125,24 @@ declare class OcclusionMesh {
|
|
|
106
125
|
getTriangleCount(): number;
|
|
107
126
|
/** The AABB list from the most recent {@link update} (physics export hook). */
|
|
108
127
|
getAabbs(): readonly Aabb[];
|
|
128
|
+
/**
|
|
129
|
+
* The underlying `THREE.Mesh` (the depth-only occluder geometry), for a
|
|
130
|
+
* pointer-raycast layer to target the real occluder surface (2026-07-15
|
|
131
|
+
* replay-harness Part B). The mesh's `colorWrite:false` invisibility does NOT
|
|
132
|
+
* affect `THREE.Raycaster`, and `frustumCulled:false` is fine for raycasting.
|
|
133
|
+
* Treat it as read-only — re-mesh via {@link update} / restyle via
|
|
134
|
+
* {@link setDebugStyle} instead of mutating the returned object.
|
|
135
|
+
*/
|
|
136
|
+
getMesh(): THREE.Mesh;
|
|
137
|
+
/**
|
|
138
|
+
* Show or hide the WHOLE occluder — the depth-only mesh AND any active debug
|
|
139
|
+
* skins. Hiding stops the depth mesh writing depth, so a co-located visualizer
|
|
140
|
+
* (e.g. the occupancy cubes at the same surface) is no longer occluded by the
|
|
141
|
+
* otherwise-invisible occluder. Independent of {@link setDebugStyle}: a later
|
|
142
|
+
* `setDebugStyle` re-adds skins as visible, so re-apply `setVisible` after a
|
|
143
|
+
* style change if you need them hidden (a mesh-view controller does exactly this).
|
|
144
|
+
*/
|
|
145
|
+
setVisible(visible: boolean): void;
|
|
109
146
|
/**
|
|
110
147
|
* Re-mesh from a fresh occupied-cell snapshot. Pass
|
|
111
148
|
* `grid.getOccupiedCells(occupancy.minConfidence)` so the occluder shares the
|
|
@@ -116,7 +153,7 @@ declare class OcclusionMesh {
|
|
|
116
153
|
* with `mode: 'smooth'` (otherwise ignored). When omitted under `'smooth'`,
|
|
117
154
|
* the surface nets falls back to cell centres.
|
|
118
155
|
*/
|
|
119
|
-
update(cells: Iterable<GridCell>, cellSizeM: number, getCellPoint?: (cell: GridCell) => Vector3 | null): void;
|
|
156
|
+
update(cells: Iterable<GridCell>, cellSizeM: number, getCellPoint?: (cell: GridCell) => Vector3$1 | null): void;
|
|
120
157
|
/**
|
|
121
158
|
* Apply **precomputed** geometry (positions/indices) without meshing — the
|
|
122
159
|
* entry point for the Web Worker offload: the driver posts the occupied-cell
|
|
@@ -183,4 +220,4 @@ declare class OcclusionMesh {
|
|
|
183
220
|
dispose(): void;
|
|
184
221
|
}
|
|
185
222
|
//#endregion
|
|
186
|
-
export {
|
|
223
|
+
export { OcclusionMeshOptions as a, occluderFresnelRim as c, OcclusionMesh as i, OCCLUDER_DEPTH_SHADE as n, buildOccluderDepthShadeSnippet as o, OccluderDebugStyle as r, occluderDepthFade as s, OCCLUDER_DEBUG_STYLES as t };
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { t as GridCell } from "./bresenham3d-bt61R-Qa.js";
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
|
|
4
|
+
//#region ../src/visualization/occupancy-cubes-visualizer.d.ts
|
|
5
|
+
/** The read surface of the framework's `OccupancyGrid` this class draws. */
|
|
6
|
+
interface OccupancyGridSource {
|
|
7
|
+
getOccupiedCells(minObservations?: number): readonly GridCell[];
|
|
8
|
+
/**
|
|
9
|
+
* Viewer-local window over the occupied set (Step 2 of the 2026-07-03
|
|
10
|
+
* long-session fps plan — backed by the grid's chunk index, so the cost is
|
|
11
|
+
* bounded by the neighbourhood, not the session). Optional so older grid
|
|
12
|
+
* doubles still satisfy the interface; when present AND a finite pose is
|
|
13
|
+
* supplied AND `overCapRadiusM` is bounded, `refresh` snapshots through it
|
|
14
|
+
* instead of the O(total-cells) `getOccupiedCells` walk.
|
|
15
|
+
*/
|
|
16
|
+
getOccupiedCellsWithin?(centerPos: readonly [number, number, number], radiusM: number, minObservations?: number): readonly GridCell[];
|
|
17
|
+
getCellCenter(cell: GridCell): readonly [number, number, number];
|
|
18
|
+
/**
|
|
19
|
+
* Per-cell average of the EXACT unprojected surface points (follow-up
|
|
20
|
+
* Item A), or null when unavailable. Optional so older grid doubles still
|
|
21
|
+
* satisfy the interface; when present, cubes are drawn here (hugging the
|
|
22
|
+
* real surface) instead of at the lattice `getCellCenter`.
|
|
23
|
+
*/
|
|
24
|
+
getCellPoint?(cell: GridCell): readonly [number, number, number] | null;
|
|
25
|
+
/**
|
|
26
|
+
* Per-cell average camera color (0–255 per channel, Iter 8), or null
|
|
27
|
+
* when the cell carries no color — the cube then falls back to the
|
|
28
|
+
* height ramp.
|
|
29
|
+
*/
|
|
30
|
+
getCellColor(cell: GridCell): readonly [number, number, number] | null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Where the viewer is, for viewer-local over-cap cube selection (Issue B
|
|
34
|
+
* of the 2026-06-22 cube cadence/locality plan). Raw WebXR — the **same
|
|
35
|
+
* frame** as `getCellPoint`/`getCellCenter`, so distances are computed in
|
|
36
|
+
* one consistent space with no basis change.
|
|
37
|
+
*/
|
|
38
|
+
interface ViewerPose {
|
|
39
|
+
/** Camera position [x, y, z], raw WebXR. */
|
|
40
|
+
readonly cameraPos: readonly [number, number, number];
|
|
41
|
+
/**
|
|
42
|
+
* Camera rotation [x, y, z, w], raw WebXR. Carried for the **deferred**
|
|
43
|
+
* B2 in-front-of-viewer FOV pass; B1 (nearest-N) does not read it.
|
|
44
|
+
*/
|
|
45
|
+
readonly cameraRot?: readonly [number, number, number, number];
|
|
46
|
+
}
|
|
47
|
+
interface OccupancyCubesVisualizerOptions {
|
|
48
|
+
/** Maximum rendered cubes (InstancedMesh capacity). Default 2000. */
|
|
49
|
+
readonly maxInstances?: number;
|
|
50
|
+
/**
|
|
51
|
+
* Minimum observation count for a cell to be drawn (noise filter,
|
|
52
|
+
* forwarded to `getOccupiedCells`). Default 1 — tuned in Iter 6.
|
|
53
|
+
*/
|
|
54
|
+
readonly minObservations?: number;
|
|
55
|
+
/**
|
|
56
|
+
* Rendered edge length of each debug cube in meters. Deliberately
|
|
57
|
+
* much smaller than the grid cell (0.15 m) so individual voxels stay
|
|
58
|
+
* readable instead of fusing into a solid wall. Default 0.025
|
|
59
|
+
* (field-tuned: 0.1 still read as too bulky on device).
|
|
60
|
+
*/
|
|
61
|
+
readonly cubeSizeM?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Random source for the over-cap subset selection. Injected so tests
|
|
64
|
+
* are deterministic. Default `Math.random`.
|
|
65
|
+
*/
|
|
66
|
+
readonly rng?: () => number;
|
|
67
|
+
/**
|
|
68
|
+
* Radius (meters, raw WebXR) of the viewer-local window used by the
|
|
69
|
+
* over-cap nearest-N selection (Step 1.1 of the 2026-07-03 long-session
|
|
70
|
+
* fps plan): cells beyond it are dropped before scoring/sorting, bounding
|
|
71
|
+
* the per-refresh cost by the neighbourhood instead of the whole session.
|
|
72
|
+
* At 15 cm voxels and the 2000-instance cap a 10 m sphere is already
|
|
73
|
+
* generous. Non-finite / non-positive = unbounded (legacy). Default 10.
|
|
74
|
+
*/
|
|
75
|
+
readonly overCapRadiusM?: number;
|
|
76
|
+
}
|
|
77
|
+
declare class OccupancyCubesVisualizer {
|
|
78
|
+
private readonly arSpaceNode;
|
|
79
|
+
private readonly minObservations;
|
|
80
|
+
private readonly cubeSizeM;
|
|
81
|
+
private readonly rng;
|
|
82
|
+
private readonly overCapRadiusM;
|
|
83
|
+
private readonly mesh;
|
|
84
|
+
private readonly geometry;
|
|
85
|
+
private readonly material;
|
|
86
|
+
private disposed;
|
|
87
|
+
/**
|
|
88
|
+
* @param arSpaceNode - the node whose local space is AR-odometry NUE
|
|
89
|
+
* and which receives the alignment matrix (`arWorldGroup` live,
|
|
90
|
+
* `replaySceneState.arWorldGroup` in replay) — NOT the scene root.
|
|
91
|
+
*/
|
|
92
|
+
constructor(arSpaceNode: THREE.Object3D, options?: OccupancyCubesVisualizerOptions);
|
|
93
|
+
/** Number of cubes currently drawn. */
|
|
94
|
+
getCount(): number;
|
|
95
|
+
/**
|
|
96
|
+
* Show or hide the cubes live without discarding them — the cheap
|
|
97
|
+
* mesh-view toggle (a later `refresh` still repopulates them). Flips the
|
|
98
|
+
* instanced mesh's `visible` flag; O(1), no re-mesh.
|
|
99
|
+
*/
|
|
100
|
+
setVisible(visible: boolean): void;
|
|
101
|
+
/**
|
|
102
|
+
* Redraw from the grid: every sufficiently-observed cell when under the
|
|
103
|
+
* instance cap. Over cap, draw the cells **nearest the viewer** when a
|
|
104
|
+
* `viewerPose` is supplied (Issue B1 — keeps the local neighbourhood
|
|
105
|
+
* dense instead of a room-wide random scatter); fall back to the legacy
|
|
106
|
+
* random subset when no pose is given or the pose is non-finite (a
|
|
107
|
+
* tracking glitch), so older callers and deterministic tests are
|
|
108
|
+
* unchanged.
|
|
109
|
+
*
|
|
110
|
+
* Each chosen cell's draw position is computed exactly once (via
|
|
111
|
+
* `getCellPoint` ?? `getCellCenter`) and carried through to the draw
|
|
112
|
+
* loop — the over-cap ranking needs it one step earlier than the legacy
|
|
113
|
+
* code did.
|
|
114
|
+
*/
|
|
115
|
+
refresh(grid: OccupancyGridSource, viewerPose?: ViewerPose): void;
|
|
116
|
+
/** Hide all cubes (e.g. on store swap); the mesh stays in the scene. */
|
|
117
|
+
clear(): void;
|
|
118
|
+
/** Remove the mesh from its parent and release GPU resources. */
|
|
119
|
+
dispose(): void;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Pick the `count` items nearest `eye`, ranked by squared distance to each
|
|
123
|
+
* item's draw position. Pure and deterministic: positions come from
|
|
124
|
+
* `positionOf` (computed exactly once per item) and are carried through on
|
|
125
|
+
* the result so the draw loop never re-fetches them. Ties keep input order
|
|
126
|
+
* (stable sort). Exported for the property tests in
|
|
127
|
+
* `occupancy-cubes-visualizer.property.test.ts`.
|
|
128
|
+
*
|
|
129
|
+
* Squared distance is sufficient — `sqrt` is monotonic, so it never changes
|
|
130
|
+
* the ranking, and skipping it avoids `count` square roots per repaint.
|
|
131
|
+
*
|
|
132
|
+
* `maxRadius` (Step 1.1 of the 2026-07-03 long-session fps plan) drops items
|
|
133
|
+
* farther than that from `eye` BEFORE scoring/sorting, shrinking the sort
|
|
134
|
+
* from O(N log N) over every cell ever seen to O(K log K) over the local
|
|
135
|
+
* neighbourhood — the linear-in-session-length term behind the long-walk fps
|
|
136
|
+
* decline. Behaviour-preserving whenever the count-th nearest item lies
|
|
137
|
+
* within the radius (property-tested); when fewer than `count` items survive
|
|
138
|
+
* the filter, only those are returned — distant cubes vanish by design (plan
|
|
139
|
+
* §Risks). Omitted / non-finite radius = unbounded (legacy behaviour).
|
|
140
|
+
*/
|
|
141
|
+
declare function pickNearestSubset<T>(items: readonly T[], count: number, eye: readonly [number, number, number], positionOf: (item: T) => readonly [number, number, number], maxRadius?: number): Array<{
|
|
142
|
+
item: T;
|
|
143
|
+
pos: readonly [number, number, number];
|
|
144
|
+
}>;
|
|
145
|
+
//#endregion
|
|
146
|
+
export { pickNearestSubset as a, ViewerPose as i, OccupancyCubesVisualizerOptions as n, OccupancyGridSource as r, OccupancyCubesVisualizer as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as GridCell } from "./bresenham3d-
|
|
2
|
-
import { a as RgbTuple, i as DepthSample } from "./ar-types-
|
|
1
|
+
import { t as GridCell } from "./bresenham3d-bt61R-Qa.js";
|
|
2
|
+
import { a as RgbTuple, i as DepthSample } from "./ar-types-BprL3nKv.js";
|
|
3
3
|
import { Vector3 } from "gps-plus-slam-js";
|
|
4
4
|
|
|
5
5
|
//#region ../src/ar/cell-key.d.ts
|
|
@@ -21,10 +21,65 @@ interface OccupancyGridOptions {
|
|
|
21
21
|
* carving stops, to respect depth noise. Default 2 (Unity parity).
|
|
22
22
|
*/
|
|
23
23
|
readonly carveStopCells?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Confidence-guarded carving (2026-07-16 synthetic-scene investigation):
|
|
26
|
+
* when set, a carve ray reaching a cell whose observation count is at or
|
|
27
|
+
* above this threshold DECAYS the cell (count − 1, measured point/color
|
|
28
|
+
* means preserved) and stops the trace — an established surface can no
|
|
29
|
+
* longer be erased by a single deeper reading (silhouette-grazing churn
|
|
30
|
+
* under a perfect sensor, or a noisy/bled too-far endpoint sweeping
|
|
31
|
+
* through a confirmed wall into the occluded background), while REPEATED
|
|
32
|
+
* contradicting rays still drain and eventually delete confidently-wrong
|
|
33
|
+
* cells (the 2026-07-16-1547 fossilization field regression: a HARD block
|
|
34
|
+
* made noise meshes immortal — mesh built while the grid was uncertain
|
|
35
|
+
* could never be un-built by better data). Once below the threshold, the
|
|
36
|
+
* legacy delete applies. Default undefined = legacy unguarded carving.
|
|
37
|
+
* Must be a positive safe integer when set.
|
|
38
|
+
*/
|
|
39
|
+
readonly carveConfidenceThreshold?: number;
|
|
24
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Recommended reconstruction defaults for apps that build AND render an occupancy
|
|
43
|
+
* mesh (the Recorder, the PhysicsDemo). These are the single framework-level source
|
|
44
|
+
* of truth so every consumer inherits the same tuning — change them here and both
|
|
45
|
+
* apps follow.
|
|
46
|
+
*
|
|
47
|
+
* They are DELIBERATELY separate from {@link OccupancyGrid}'s constructor fallback
|
|
48
|
+
* (`cellSizeM ?? 0.15`, Unity parity): that primitive fallback stays 0.15 because a
|
|
49
|
+
* pile of low-level tests build `new OccupancyGrid()` with no args and assume 0.15
|
|
50
|
+
* quantization. Both apps always pass an explicit `cellSizeM`, so the app-facing
|
|
51
|
+
* recommended default and the primitive fallback can differ without conflict.
|
|
52
|
+
*
|
|
53
|
+
* Tuning (2026-07-16 EVENING, maintainer's on-device framerate/mesh trade-off
|
|
54
|
+
* pass — supersedes the same-day corpus-sweep values 0.18/3): voxel 16 cm,
|
|
55
|
+
* noise floor 2. The sweep's argument for floor 3 (floaters = phantom
|
|
56
|
+
* colliders: mc 3 ≈ 1.9% vs mc 2 ≈ 3.5%) was measured under LEGACY carving;
|
|
57
|
+
* with the decay carve guard the floater gap largely disappears (real
|
|
58
|
+
* pillar-orbit A/B: guarded mc 2 isolates 2.12% vs guarded mc 3 2.19%), so
|
|
59
|
+
* the faster floor is affordable now. `0.16` stays within
|
|
60
|
+
* `OCCUPANCY_CONSTRAINTS.cellSizeM.max` (0.20); `2` within `minConfidence`
|
|
61
|
+
* 1–10. History: 2026-07-16-0557 corpus sweep (0.18/3),
|
|
62
|
+
* 2026-07-15-1640 device-impression change (0.18/2). See the recorder's
|
|
63
|
+
* recording-options.ts.md for the full tuning timeline.
|
|
64
|
+
*/
|
|
65
|
+
declare const DEFAULT_OCCUPANCY_CELL_SIZE_M = 0.16;
|
|
66
|
+
/**
|
|
67
|
+
* Recommended occupancy noise floor — the minimum observation count before a cell
|
|
68
|
+
* is rendered/meshed (the Recorder's `minConfidence`, the demo's `minObservations`,
|
|
69
|
+
* and — since the decay guard — both apps' `carveConfidenceThreshold`).
|
|
70
|
+
* See {@link DEFAULT_OCCUPANCY_CELL_SIZE_M} for the rationale and the tuning note.
|
|
71
|
+
*/
|
|
72
|
+
declare const DEFAULT_OCCUPANCY_MIN_OBSERVATIONS = 2;
|
|
25
73
|
declare class OccupancyGrid {
|
|
26
74
|
readonly cellSizeM: number;
|
|
27
75
|
readonly carveStopCells: number;
|
|
76
|
+
/**
|
|
77
|
+
* Carve-blocking observation-count threshold, or undefined for legacy
|
|
78
|
+
* unguarded carving (see {@link OccupancyGridOptions}). Public + always
|
|
79
|
+
* present on instances so consumers built against a newer source can
|
|
80
|
+
* feature-detect the guard on an installed build at runtime.
|
|
81
|
+
*/
|
|
82
|
+
readonly carveConfidenceThreshold: number | undefined;
|
|
28
83
|
private readonly cells;
|
|
29
84
|
/**
|
|
30
85
|
* Chunk index (Step 2 of the 2026-07-03 long-session fps plan): cell keys
|
|
@@ -51,7 +106,7 @@ declare class OccupancyGrid {
|
|
|
51
106
|
* an already-settled cell (count `> MAX_RELEVANT_COUNT`) does NOT bump it, so a
|
|
52
107
|
* consumer can cheaply skip a full re-derive (cube refresh / occluder re-mesh)
|
|
53
108
|
* when the revision is unchanged — the dominant idle-time saving over a long
|
|
54
|
-
* session (see `2026-06-30-occluder-tuning-followups.md`).
|
|
109
|
+
* session (see `2026-06-30-0829-occluder-tuning-followups.md`).
|
|
55
110
|
*/
|
|
56
111
|
private revision;
|
|
57
112
|
/**
|
|
@@ -180,8 +235,63 @@ declare class OccupancyGrid {
|
|
|
180
235
|
* steps before the endpoint. The endpoint cell itself is additionally
|
|
181
236
|
* protected so a current observation is never erased (relevant for
|
|
182
237
|
* carveStopCells = 0 and for the unconditional start-cell visit).
|
|
238
|
+
*
|
|
239
|
+
* With `carveConfidenceThreshold` set, the trace additionally stops at the
|
|
240
|
+
* first cell whose count has reached the threshold, DECAYING it by one
|
|
241
|
+
* observation (means preserved) — soft contradiction instead of deletion,
|
|
242
|
+
* so nothing behind an established surface is carved but repeated
|
|
243
|
+
* contradictions still un-build it (see the option docs). Note this makes
|
|
244
|
+
* a repeated identical carve NOT a no-op — the per-sample unique-endpoint
|
|
245
|
+
* dedupe in `addSample` is therefore semantically load-bearing under the
|
|
246
|
+
* guard (one decay per contradicting ray per sample).
|
|
247
|
+
*
|
|
248
|
+
* PERFORMANCE — fused walk (2026-07-17 perf loop, iteration 1): this is
|
|
249
|
+
* the framework's hottest non-render loop (hundreds of rays per depth
|
|
250
|
+
* sample at the 200 ms reconstruction cadence), and the generic
|
|
251
|
+
* `bresenham3d(callback)` shape dominated the fold profile: a fresh
|
|
252
|
+
* `[x, y, z]` tuple + callback dispatch + full `cellKey` repack +
|
|
253
|
+
* `cellsEqual` per visited cell. The Bresenham walk (identical integer
|
|
254
|
+
* stepping, `bresenham3d` stays the reference — see the fold-oracle
|
|
255
|
+
* property test) is therefore fused in here with two key tricks:
|
|
256
|
+
*
|
|
257
|
+
* - The packed cell key is maintained INCREMENTALLY: stepping one cell
|
|
258
|
+
* along an axis moves the key by that axis' constant field stride
|
|
259
|
+
* (base-2^17 positional packing), replacing the 3-term repack.
|
|
260
|
+
* - The endpoint guard compares packed keys (`key === endpointKey`).
|
|
261
|
+
* Every walked cell lies inside the camera→point AABB whose corners the
|
|
262
|
+
* caller range-checked, so packing is bijective on the whole walk and
|
|
263
|
+
* the compare is exactly `cellsEqual` — and key aliasing is impossible.
|
|
264
|
+
*
|
|
265
|
+
* The cell tuple is materialized only on an actual delete/decay hit (rare
|
|
266
|
+
* per trace, handled in {@link carveCellAt}). Measured on the
|
|
267
|
+
* occupancy-fold bench (devbox-win11, Node 24, 50 samples × 576 pts,
|
|
268
|
+
* production config): 37.05 → 25.71 ms median of 5, −30.6%.
|
|
269
|
+
* Input safety: cameraCell/pointCell are integer cells from
|
|
270
|
+
* `cellForPosition` (finite-checked upstream) and both range-checked by
|
|
271
|
+
* `addSample`, so dm ≤ 2·CELL_KEY_LIMIT « MAX_TRACE_STEPS and the generic
|
|
272
|
+
* tracer's integer/span guards are structurally satisfied here.
|
|
183
273
|
*/
|
|
184
274
|
private carve;
|
|
275
|
+
/**
|
|
276
|
+
* Per-cell action of the fused carve walk (extracted so both it and the
|
|
277
|
+
* walk stay under the lint complexity budget; a monomorphic private-method
|
|
278
|
+
* call per visited cell measured within noise of the fully-inlined form).
|
|
279
|
+
*
|
|
280
|
+
* @returns `false` when the trace must stop: the cell is an established
|
|
281
|
+
* surface (count ≥ threshold) that was decayed instead of deleted.
|
|
282
|
+
*/
|
|
283
|
+
private carveCellAt;
|
|
284
|
+
/**
|
|
285
|
+
* Soft contradiction of an established cell (confidence-guarded carving):
|
|
286
|
+
* remove one observation while preserving the measured point/color MEANS
|
|
287
|
+
* (sums are scaled with the count — decrementing the divisor alone would
|
|
288
|
+
* silently shift `getCellPoint`/`getCellColor`). Deletes outright when the
|
|
289
|
+
* count would reach 0 (threshold 1). Bumps revisions like any mutation
|
|
290
|
+
* that can change a consumer's occupied set (counts above
|
|
291
|
+
* MAX_RELEVANT_COUNT cannot cross any selectable floor, so those decays
|
|
292
|
+
* stay revision-silent).
|
|
293
|
+
*/
|
|
294
|
+
private decayCell;
|
|
185
295
|
/** Add a newly-occupied cell to its chunk's index set. */
|
|
186
296
|
private indexCell;
|
|
187
297
|
/** Remove a carved cell from its chunk (dropping an emptied chunk set). */
|
|
@@ -191,4 +301,4 @@ declare class OccupancyGrid {
|
|
|
191
301
|
private increment;
|
|
192
302
|
}
|
|
193
303
|
//#endregion
|
|
194
|
-
export {
|
|
304
|
+
export { cellKey as a, OccupancyGridOptions as i, DEFAULT_OCCUPANCY_MIN_OBSERVATIONS as n, unpackCellKey as o, OccupancyGrid as r, DEFAULT_OCCUPANCY_CELL_SIZE_M as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as GridCell } from "./bresenham3d-
|
|
1
|
+
import { t as GridCell } from "./bresenham3d-bt61R-Qa.js";
|
|
2
2
|
import { Vector3 } from "gps-plus-slam-js";
|
|
3
3
|
|
|
4
4
|
//#region ../src/ar/occupancy-mesher.d.ts
|
|
@@ -75,6 +75,27 @@ interface MeshOccupiedCellsOptions {
|
|
|
75
75
|
* retain the tuple (no caching it as a key, no async use). Copy it if needed.
|
|
76
76
|
*/
|
|
77
77
|
readonly getCellPoint?: (cell: GridCell) => Vector3 | null;
|
|
78
|
+
/**
|
|
79
|
+
* Pre-packed per-cell centroids for `'smooth'`, aligned with the **input
|
|
80
|
+
* `cells` order** (3 numbers per input cell; a non-finite triple — the
|
|
81
|
+
* worker wire protocol packs NaN for "no centroid" — falls back to that
|
|
82
|
+
* cell's geometric centre, exactly like a null/non-finite `getCellPoint`
|
|
83
|
+
* result). This is the mesh-worker fast path (2026-07-17 perf loop,
|
|
84
|
+
* iteration 2): `runMeshRequest` receives exactly this array over the wire,
|
|
85
|
+
* so consuming it directly deletes the per-cell key-map + callback + tuple
|
|
86
|
+
* plumbing from the hottest re-mesh loop. When set, `'smooth'` ignores
|
|
87
|
+
* `getCellPoint`; other modes ignore `centroids` entirely (`'corner-fit'`
|
|
88
|
+
* still needs the callback).
|
|
89
|
+
*/
|
|
90
|
+
readonly centroids?: Float64Array | null;
|
|
91
|
+
/**
|
|
92
|
+
* Set `false` to skip building the per-cell AABB list (`result.aabbs` is
|
|
93
|
+
* then empty). The occlusion-mesh worker path consumes only
|
|
94
|
+
* positions/indices, and at the ~100k-cell regime the discarded AABB
|
|
95
|
+
* objects (~2 allocations per cell, every re-mesh) were pure GC pressure
|
|
96
|
+
* (2026-07-17 perf loop, iteration 2). Default `true`.
|
|
97
|
+
*/
|
|
98
|
+
readonly includeAabbs?: boolean;
|
|
78
99
|
}
|
|
79
100
|
/**
|
|
80
101
|
* Mesh a snapshot of occupied cells into a face-culled surface + AABB list.
|