@pascal-app/core 1.0.4 → 1.0.6
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/dist/agent-operations/__fixtures__/add-object-cases.d.ts +102 -90
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/add-object-cases.js +301 -1
- package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/add-stair-cases.js +176 -0
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.js +410 -40
- package/dist/agent-operations/__fixtures__/cases.d.ts +18 -3
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/cases.js +183 -4
- package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/corner-window-cases.js +155 -0
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +14 -0
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +709 -0
- package/dist/agent-operations/__fixtures__/finish-cases.d.ts +7 -0
- package/dist/agent-operations/__fixtures__/finish-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/finish-cases.js +758 -0
- package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/lot-info-cases.js +370 -0
- package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/merge-windows-cases.js +321 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +2237 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/native-materials.js +82 -0
- package/dist/agent-operations/__fixtures__/node-read-cases.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/node-read-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/node-read-cases.js +639 -0
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts +24 -0
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/notation-cases.js +356 -0
- package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/place-items-cases.js +80 -2
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +19726 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.js +106 -0
- package/dist/agent-operations/__fixtures__/roof-cases.d.ts +9 -0
- package/dist/agent-operations/__fixtures__/roof-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/roof-cases.js +382 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +2 -1
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.js +136 -1
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +417 -0
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +15 -3
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +290 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/site-cases.js +780 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +1 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.js +630 -3
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +311 -1
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/verify-scene-cases.js +59 -11
- package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/view-assets-cases.js +155 -0
- package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts +50 -0
- package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/view-scene-cases.js +425 -0
- package/dist/agent-operations/achieved.d.ts +5 -0
- package/dist/agent-operations/achieved.d.ts.map +1 -1
- package/dist/agent-operations/achieved.js +21 -1
- package/dist/agent-operations/add-column.d.ts.map +1 -1
- package/dist/agent-operations/add-column.js +3 -1
- package/dist/agent-operations/add-fence.d.ts +18 -0
- package/dist/agent-operations/add-fence.d.ts.map +1 -0
- package/dist/agent-operations/add-fence.js +48 -0
- package/dist/agent-operations/add-level.d.ts +4 -1
- package/dist/agent-operations/add-level.d.ts.map +1 -1
- package/dist/agent-operations/add-level.js +48 -12
- package/dist/agent-operations/add-object.d.ts +38 -9
- package/dist/agent-operations/add-object.d.ts.map +1 -1
- package/dist/agent-operations/add-object.js +172 -11
- package/dist/agent-operations/add-wall.d.ts +1 -3
- package/dist/agent-operations/add-wall.d.ts.map +1 -1
- package/dist/agent-operations/add-wall.js +35 -9
- package/dist/agent-operations/apply-changes.d.ts +7 -1
- package/dist/agent-operations/apply-changes.d.ts.map +1 -1
- package/dist/agent-operations/apply-changes.js +54 -22
- package/dist/agent-operations/apply-outcome.d.ts +6 -0
- package/dist/agent-operations/apply-outcome.d.ts.map +1 -1
- package/dist/agent-operations/apply-outcome.js +23 -8
- package/dist/agent-operations/asset-views.d.ts +75 -0
- package/dist/agent-operations/asset-views.d.ts.map +1 -0
- package/dist/agent-operations/asset-views.js +234 -0
- package/dist/agent-operations/author-scene.d.ts +157 -0
- package/dist/agent-operations/author-scene.d.ts.map +1 -0
- package/dist/agent-operations/author-scene.js +1076 -0
- package/dist/agent-operations/authored-scene-merge.d.ts +4 -0
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -0
- package/dist/agent-operations/authored-scene-merge.js +96 -0
- package/dist/agent-operations/batch.d.ts +22 -0
- package/dist/agent-operations/batch.d.ts.map +1 -0
- package/dist/agent-operations/batch.js +104 -0
- package/dist/agent-operations/ceiling-object-observations.d.ts +31 -0
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -0
- package/dist/agent-operations/ceiling-object-observations.js +111 -0
- package/dist/agent-operations/corner-window.d.ts +19 -0
- package/dist/agent-operations/corner-window.d.ts.map +1 -0
- package/dist/agent-operations/corner-window.js +84 -0
- package/dist/agent-operations/create-roof.d.ts +32 -0
- package/dist/agent-operations/create-roof.d.ts.map +1 -0
- package/dist/agent-operations/create-roof.js +304 -0
- package/dist/agent-operations/create-room.d.ts +2 -0
- package/dist/agent-operations/create-room.d.ts.map +1 -1
- package/dist/agent-operations/create-room.js +73 -5
- package/dist/agent-operations/create-stair.d.ts +6 -28
- package/dist/agent-operations/create-stair.d.ts.map +1 -1
- package/dist/agent-operations/create-stair.js +187 -104
- package/dist/agent-operations/design-brief.d.ts +38 -0
- package/dist/agent-operations/design-brief.d.ts.map +1 -0
- package/dist/agent-operations/design-brief.js +300 -0
- package/dist/agent-operations/designs.d.ts +24 -0
- package/dist/agent-operations/designs.d.ts.map +1 -0
- package/dist/agent-operations/designs.js +48 -0
- package/dist/agent-operations/door-clearance.d.ts +16 -1
- package/dist/agent-operations/door-clearance.d.ts.map +1 -1
- package/dist/agent-operations/door-clearance.js +61 -4
- package/dist/agent-operations/duplicate-level.d.ts.map +1 -1
- package/dist/agent-operations/duplicate-level.js +2 -1
- package/dist/agent-operations/find-by-type.d.ts +14 -7
- package/dist/agent-operations/find-by-type.d.ts.map +1 -1
- package/dist/agent-operations/find-by-type.js +266 -43
- package/dist/agent-operations/furnish-room.d.ts +22 -1
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +66 -19
- package/dist/agent-operations/furniture-kind.d.ts +22 -0
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -0
- package/dist/agent-operations/furniture-kind.js +69 -0
- package/dist/agent-operations/get-node.d.ts +5 -2
- package/dist/agent-operations/get-node.d.ts.map +1 -1
- package/dist/agent-operations/get-node.js +82 -10
- package/dist/agent-operations/hosted-services.d.ts +2 -1
- package/dist/agent-operations/hosted-services.d.ts.map +1 -1
- package/dist/agent-operations/index.d.ts +281 -69
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +66 -5
- package/dist/agent-operations/item-space.d.ts +22 -0
- package/dist/agent-operations/item-space.d.ts.map +1 -0
- package/dist/agent-operations/item-space.js +69 -0
- package/dist/agent-operations/layout-clearance.d.ts +52 -3
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
- package/dist/agent-operations/layout-clearance.js +340 -30
- package/dist/agent-operations/level-height-fill.d.ts +12 -0
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -0
- package/dist/agent-operations/level-height-fill.js +59 -0
- package/dist/agent-operations/level-reads.d.ts +5 -1
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +10 -3
- package/dist/agent-operations/list-levels.d.ts.map +1 -1
- package/dist/agent-operations/list-levels.js +23 -0
- package/dist/agent-operations/material-preset.d.ts.map +1 -1
- package/dist/agent-operations/material-preset.js +3 -9
- package/dist/agent-operations/material-refs.d.ts +7 -1
- package/dist/agent-operations/material-refs.d.ts.map +1 -1
- package/dist/agent-operations/material-refs.js +10 -5
- package/dist/agent-operations/merge-windows.d.ts +6 -0
- package/dist/agent-operations/merge-windows.d.ts.map +1 -0
- package/dist/agent-operations/merge-windows.js +27 -0
- package/dist/agent-operations/move-roofs.d.ts +9 -0
- package/dist/agent-operations/move-roofs.d.ts.map +1 -0
- package/dist/agent-operations/move-roofs.js +29 -0
- package/dist/agent-operations/paint.d.ts +2 -1
- package/dist/agent-operations/paint.d.ts.map +1 -1
- package/dist/agent-operations/paint.js +163 -53
- package/dist/agent-operations/photo-elevation.d.ts +155 -0
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -0
- package/dist/agent-operations/photo-elevation.js +761 -0
- package/dist/agent-operations/place-in-room.d.ts +29 -0
- package/dist/agent-operations/place-in-room.d.ts.map +1 -0
- package/dist/agent-operations/place-in-room.js +403 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +15 -2
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
- package/dist/agent-operations/plan-geometry.js +3 -0
- package/dist/agent-operations/point-context.d.ts +139 -0
- package/dist/agent-operations/point-context.d.ts.map +1 -0
- package/dist/agent-operations/point-context.js +1 -0
- package/dist/agent-operations/project-files.d.ts +9 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -0
- package/dist/agent-operations/project-files.js +25 -0
- package/dist/agent-operations/record-made.d.ts +18 -0
- package/dist/agent-operations/record-made.d.ts.map +1 -0
- package/dist/agent-operations/record-made.js +28 -0
- package/dist/agent-operations/roof-footprint.d.ts +24 -0
- package/dist/agent-operations/roof-footprint.d.ts.map +1 -0
- package/dist/agent-operations/roof-footprint.js +242 -0
- package/dist/agent-operations/roof-writes.d.ts +20 -0
- package/dist/agent-operations/roof-writes.d.ts.map +1 -0
- package/dist/agent-operations/roof-writes.js +165 -0
- package/dist/agent-operations/room-findings.d.ts +54 -0
- package/dist/agent-operations/room-findings.d.ts.map +1 -0
- package/dist/agent-operations/room-findings.js +143 -0
- package/dist/agent-operations/room-floor-script.d.ts +23 -0
- package/dist/agent-operations/room-floor-script.d.ts.map +1 -0
- package/dist/agent-operations/room-floor-script.js +54 -0
- package/dist/agent-operations/room-structure.d.ts +2 -2
- package/dist/agent-operations/room-structure.d.ts.map +1 -1
- package/dist/agent-operations/scene-checkpoint.d.ts +94 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -0
- package/dist/agent-operations/scene-checkpoint.js +176 -0
- package/dist/agent-operations/scene-queries.d.ts +3750 -3319
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-queries.js +13 -23
- package/dist/agent-operations/scene-review.d.ts +52 -0
- package/dist/agent-operations/scene-review.d.ts.map +1 -0
- package/dist/agent-operations/scene-review.js +106 -0
- package/dist/agent-operations/scene-view.d.ts +82 -15
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +408 -51
- package/dist/agent-operations/search-assets.d.ts +2 -2
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +4 -3
- package/dist/agent-operations/search-materials.d.ts +9 -3
- package/dist/agent-operations/search-materials.d.ts.map +1 -1
- package/dist/agent-operations/search-materials.js +83 -29
- package/dist/agent-operations/set-checkpoint.d.ts +9 -0
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -0
- package/dist/agent-operations/set-checkpoint.js +31 -0
- package/dist/agent-operations/set-ground-level.d.ts +12 -0
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -0
- package/dist/agent-operations/set-ground-level.js +61 -0
- package/dist/agent-operations/site.d.ts +21 -0
- package/dist/agent-operations/site.d.ts.map +1 -0
- package/dist/agent-operations/site.js +123 -0
- package/dist/agent-operations/types.d.ts +66 -7
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.d.ts +39 -5
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +223 -44
- package/dist/agent-operations/wall-face-script.d.ts +28 -0
- package/dist/agent-operations/wall-face-script.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-script.js +62 -0
- package/dist/agent-operations/wall-object-observations.d.ts +41 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -0
- package/dist/agent-operations/wall-object-observations.js +249 -0
- package/dist/agent-operations/wall-opening.d.ts +23 -23
- package/dist/agent-operations/wall-opening.d.ts.map +1 -1
- package/dist/agent-operations/wall-skirting.d.ts +24 -0
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -0
- package/dist/agent-operations/wall-skirting.js +85 -0
- package/dist/agent-tools/add-object.d.ts +11 -7
- package/dist/agent-tools/add-object.d.ts.map +1 -1
- package/dist/agent-tools/add-object.js +17 -11
- package/dist/agent-tools/assets.d.ts +8 -0
- package/dist/agent-tools/assets.d.ts.map +1 -1
- package/dist/agent-tools/assets.js +13 -1
- package/dist/agent-tools/author-scene.d.ts +651 -0
- package/dist/agent-tools/author-scene.d.ts.map +1 -0
- package/dist/agent-tools/author-scene.js +252 -0
- package/dist/agent-tools/batch.d.ts +25 -0
- package/dist/agent-tools/batch.d.ts.map +1 -0
- package/dist/agent-tools/batch.js +61 -0
- package/dist/agent-tools/checkpoints.d.ts +13 -0
- package/dist/agent-tools/checkpoints.d.ts.map +1 -0
- package/dist/agent-tools/checkpoints.js +16 -0
- package/dist/agent-tools/clear-scene.d.ts.map +1 -1
- package/dist/agent-tools/collections.d.ts +6 -6
- package/dist/agent-tools/collections.d.ts.map +1 -1
- package/dist/agent-tools/columns.d.ts +18 -18
- package/dist/agent-tools/columns.js +2 -2
- package/dist/agent-tools/corner-window.d.ts +46 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -0
- package/dist/agent-tools/corner-window.js +47 -0
- package/dist/agent-tools/create-room.d.ts +26 -25
- package/dist/agent-tools/create-room.d.ts.map +1 -1
- package/dist/agent-tools/create-room.js +11 -4
- package/dist/agent-tools/design-brief.d.ts +408 -0
- package/dist/agent-tools/design-brief.d.ts.map +1 -0
- package/dist/agent-tools/design-brief.js +149 -0
- package/dist/agent-tools/designs.d.ts +34 -0
- package/dist/agent-tools/designs.d.ts.map +1 -0
- package/dist/agent-tools/designs.js +50 -0
- package/dist/agent-tools/fences.d.ts +28 -0
- package/dist/agent-tools/fences.d.ts.map +1 -0
- package/dist/agent-tools/fences.js +31 -0
- package/dist/agent-tools/find-by-type.d.ts +8 -1
- package/dist/agent-tools/find-by-type.d.ts.map +1 -1
- package/dist/agent-tools/find-by-type.js +23 -2
- package/dist/agent-tools/furnish-room.d.ts +10 -8
- package/dist/agent-tools/furnish-room.d.ts.map +1 -1
- package/dist/agent-tools/furnish-room.js +3 -1
- package/dist/agent-tools/hosted-services.d.ts +177 -141
- package/dist/agent-tools/hosted-services.d.ts.map +1 -1
- package/dist/agent-tools/hosted-services.js +47 -14
- package/dist/agent-tools/index.d.ts +894 -215
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +47 -3
- package/dist/agent-tools/levels.d.ts +11 -3
- package/dist/agent-tools/levels.d.ts.map +1 -1
- package/dist/agent-tools/levels.js +16 -5
- package/dist/agent-tools/measurement.d.ts +38 -20
- package/dist/agent-tools/measurement.d.ts.map +1 -1
- package/dist/agent-tools/measurement.js +117 -67
- package/dist/agent-tools/merge-windows.d.ts +10 -0
- package/dist/agent-tools/merge-windows.d.ts.map +1 -0
- package/dist/agent-tools/merge-windows.js +12 -0
- package/dist/agent-tools/nodes.d.ts.map +1 -1
- package/dist/agent-tools/nodes.js +1 -1
- package/dist/agent-tools/notation-inventory.d.ts +16 -0
- package/dist/agent-tools/notation-inventory.d.ts.map +1 -0
- package/dist/agent-tools/notation-inventory.js +105 -0
- package/dist/agent-tools/paint.d.ts +5 -5
- package/dist/agent-tools/paint.d.ts.map +1 -1
- package/dist/agent-tools/paint.js +1 -1
- package/dist/agent-tools/photo-elevation.d.ts +32 -0
- package/dist/agent-tools/photo-elevation.d.ts.map +1 -0
- package/dist/agent-tools/photo-elevation.js +73 -0
- package/dist/agent-tools/place-in-room.d.ts +35 -0
- package/dist/agent-tools/place-in-room.d.ts.map +1 -0
- package/dist/agent-tools/place-in-room.js +61 -0
- package/dist/agent-tools/place-items.d.ts +1 -1
- package/dist/agent-tools/place-items.js +2 -2
- package/dist/agent-tools/project-files.d.ts +189 -0
- package/dist/agent-tools/project-files.d.ts.map +1 -0
- package/dist/agent-tools/project-files.js +99 -0
- package/dist/agent-tools/refusal.d.ts.map +1 -1
- package/dist/agent-tools/retired.d.ts +21 -0
- package/dist/agent-tools/retired.d.ts.map +1 -0
- package/dist/agent-tools/retired.js +29 -0
- package/dist/agent-tools/roofs.d.ts +100 -0
- package/dist/agent-tools/roofs.d.ts.map +1 -0
- package/dist/agent-tools/roofs.js +96 -0
- package/dist/agent-tools/room-structure.d.ts +46 -38
- package/dist/agent-tools/room-structure.d.ts.map +1 -1
- package/dist/agent-tools/room-structure.js +30 -27
- package/dist/agent-tools/search-materials.d.ts +22 -3
- package/dist/agent-tools/search-materials.d.ts.map +1 -1
- package/dist/agent-tools/search-materials.js +13 -14
- package/dist/agent-tools/site.d.ts +27 -0
- package/dist/agent-tools/site.d.ts.map +1 -0
- package/dist/agent-tools/site.js +40 -0
- package/dist/agent-tools/sources.d.ts +12 -0
- package/dist/agent-tools/sources.d.ts.map +1 -0
- package/dist/agent-tools/sources.js +11 -0
- package/dist/agent-tools/stairs.d.ts +48 -28
- package/dist/agent-tools/stairs.d.ts.map +1 -1
- package/dist/agent-tools/stairs.js +65 -22
- package/dist/agent-tools/verify-scene.d.ts.map +1 -1
- package/dist/agent-tools/verify-scene.js +1 -1
- package/dist/agent-tools/view-scene.d.ts +50 -12
- package/dist/agent-tools/view-scene.d.ts.map +1 -1
- package/dist/agent-tools/view-scene.js +74 -31
- package/dist/agent-tools/wall-openings.d.ts +77 -73
- package/dist/agent-tools/wall-openings.d.ts.map +1 -1
- package/dist/agent-tools/wall-openings.js +9 -5
- package/dist/agent-tools/walls.d.ts +4 -4
- package/dist/agent-tools/walls.d.ts.map +1 -1
- package/dist/agent-tools/walls.js +7 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +454 -250
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/__fixtures__/wall-opening-cases.js +62 -2
- package/dist/building/corner-window.d.ts +56 -0
- package/dist/building/corner-window.d.ts.map +1 -0
- package/dist/building/corner-window.js +179 -0
- package/dist/building/ground-level.d.ts +26 -0
- package/dist/building/ground-level.d.ts.map +1 -0
- package/dist/building/ground-level.js +58 -0
- package/dist/building/index.d.ts +5 -0
- package/dist/building/index.d.ts.map +1 -1
- package/dist/building/index.js +5 -0
- package/dist/building/level-duplication.d.ts +7472 -6613
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-duplication.js +18 -4
- package/dist/building/level-insertion.d.ts +55 -0
- package/dist/building/level-insertion.d.ts.map +1 -0
- package/dist/building/level-insertion.js +35 -0
- package/dist/building/merge-windows.d.ts +58 -0
- package/dist/building/merge-windows.d.ts.map +1 -0
- package/dist/building/merge-windows.js +189 -0
- package/dist/building/opening-style-presets.d.ts +2 -2
- package/dist/building/opening-style-presets.d.ts.map +1 -1
- package/dist/building/photo-elevation.d.ts +125 -0
- package/dist/building/photo-elevation.d.ts.map +1 -0
- package/dist/building/photo-elevation.js +404 -0
- package/dist/building/wall-gaps.d.ts +13 -0
- package/dist/building/wall-gaps.d.ts.map +1 -0
- package/dist/building/wall-gaps.js +158 -0
- package/dist/building/wall-openings.d.ts +154 -119
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +37 -9
- package/dist/capture/schema.d.ts +22 -22
- package/dist/capture/source.d.ts.map +1 -1
- package/dist/capture/source.js +1 -1
- package/dist/commands/structure/create-zone.d.ts +12 -1
- package/dist/commands/structure/create-zone.d.ts.map +1 -1
- package/dist/commands/structure/create-zone.js +49 -0
- package/dist/commands/structure/divide-zone.d.ts +3 -3
- package/dist/commands/structure/index.d.ts +1 -1
- package/dist/commands/structure/index.d.ts.map +1 -1
- package/dist/commands/structure/index.js +1 -1
- package/dist/commands/structure/set-floor-foundation.d.ts +6 -6
- package/dist/commands/structure/set-zone-intent.d.ts +4 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
- package/dist/commands/structure/set-zone-intent.js +19 -0
- package/dist/commands/structure/shared.d.ts +3642 -3213
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/zone-wall-merge.d.ts +4149 -3334
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +106 -26
- package/dist/events/bus.d.ts +22 -3
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/capture-sessions.d.ts +5 -0
- package/dist/events/capture-sessions.d.ts.map +1 -0
- package/dist/events/capture-sessions.js +31 -0
- package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +1 -2
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +4 -6
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3608 -3179
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +11 -2
- package/dist/hooks/spatial-grid/use-spatial-query.d.ts +3 -3
- package/dist/hooks/spatial-grid/wall-spatial-grid.d.ts.map +1 -1
- package/dist/index.d.ts +37 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -9
- package/dist/lib/__fixtures__/mezzanine.d.ts +11800 -10132
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +3642 -3213
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/angle-accumulator.d.ts.map +1 -1
- package/dist/lib/artifact-store.d.ts.map +1 -1
- package/dist/lib/below-grade-footprints.d.ts +65 -0
- package/dist/lib/below-grade-footprints.d.ts.map +1 -0
- package/dist/lib/below-grade-footprints.js +181 -0
- package/dist/lib/building-footprint.d.ts +33 -0
- package/dist/lib/building-footprint.d.ts.map +1 -0
- package/dist/lib/building-footprint.js +89 -0
- package/dist/lib/corner-pair.d.ts +1129 -0
- package/dist/lib/corner-pair.d.ts.map +1 -0
- package/dist/lib/corner-pair.js +130 -0
- package/dist/lib/corner-snap.d.ts +54 -0
- package/dist/lib/corner-snap.d.ts.map +1 -0
- package/dist/lib/corner-snap.js +125 -0
- package/dist/lib/critically-damped.d.ts +11 -0
- package/dist/lib/critically-damped.d.ts.map +1 -0
- package/dist/lib/critically-damped.js +14 -0
- package/dist/lib/deepest-drawn.d.ts +18 -0
- package/dist/lib/deepest-drawn.d.ts.map +1 -0
- package/dist/lib/deepest-drawn.js +65 -0
- package/dist/lib/door-operation.d.ts +1 -1
- package/dist/lib/exterior-wall-loops.d.ts +17 -0
- package/dist/lib/exterior-wall-loops.d.ts.map +1 -0
- package/dist/lib/exterior-wall-loops.js +334 -0
- package/dist/lib/finish-script.d.ts +61 -0
- package/dist/lib/finish-script.d.ts.map +1 -0
- package/dist/lib/finish-script.js +86 -0
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +4 -4
- package/dist/lib/floor-plate-paint.d.ts +3 -1
- package/dist/lib/floor-plate-paint.d.ts.map +1 -1
- package/dist/lib/floor-plate-paint.js +24 -4
- package/dist/lib/floor-plates.d.ts +50 -50
- package/dist/lib/floor-script.d.ts +24 -0
- package/dist/lib/floor-script.d.ts.map +1 -0
- package/dist/lib/floor-script.js +51 -0
- package/dist/lib/foundation-construction.d.ts +73 -0
- package/dist/lib/foundation-construction.d.ts.map +1 -0
- package/dist/lib/foundation-construction.js +242 -0
- package/dist/lib/foundation-standard.d.ts +30 -0
- package/dist/lib/foundation-standard.d.ts.map +1 -0
- package/dist/lib/foundation-standard.js +30 -0
- package/dist/lib/foundation-wall.d.ts +36 -0
- package/dist/lib/foundation-wall.d.ts.map +1 -0
- package/dist/lib/foundation-wall.js +66 -0
- package/dist/lib/generic-foundation.d.ts +40 -0
- package/dist/lib/generic-foundation.d.ts.map +1 -0
- package/dist/lib/generic-foundation.js +200 -0
- package/dist/lib/geometry-script-node.d.ts +32 -3
- package/dist/lib/geometry-script-node.d.ts.map +1 -1
- package/dist/lib/geometry-script-node.js +26 -0
- package/dist/lib/grade-standing.d.ts +38 -0
- package/dist/lib/grade-standing.d.ts.map +1 -0
- package/dist/lib/grade-standing.js +137 -0
- package/dist/lib/ground-level.d.ts +20 -0
- package/dist/lib/ground-level.d.ts.map +1 -0
- package/dist/lib/ground-level.js +49 -0
- package/dist/lib/ground-over-part.d.ts +13 -0
- package/dist/lib/ground-over-part.d.ts.map +1 -0
- package/dist/lib/ground-over-part.js +94 -0
- package/dist/lib/ground-seat.d.ts +47 -0
- package/dist/lib/ground-seat.d.ts.map +1 -0
- package/dist/lib/ground-seat.js +61 -0
- package/dist/lib/ground-window.d.ts +39 -0
- package/dist/lib/ground-window.d.ts.map +1 -0
- package/dist/lib/ground-window.js +147 -0
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +2 -3
- package/dist/lib/own-floor-intent.d.ts.map +1 -1
- package/dist/lib/own-floor-intent.js +4 -4
- package/dist/lib/plate-surface.d.ts.map +1 -1
- package/dist/lib/plate-surface.js +3 -1
- package/dist/lib/point-ask.d.ts +9 -0
- package/dist/lib/point-ask.d.ts.map +1 -0
- package/dist/lib/point-ask.js +36 -0
- package/dist/lib/room-drawn-floor.d.ts +1 -1
- package/dist/lib/room-drawn-floor.d.ts.map +1 -1
- package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
- package/dist/lib/room-floor-feasibility.js +3 -3
- package/dist/lib/room-graph.d.ts.map +1 -1
- package/dist/lib/room-graph.js +2 -0
- package/dist/lib/room-name.d.ts +2 -0
- package/dist/lib/room-name.d.ts.map +1 -1
- package/dist/lib/room-name.js +2 -0
- package/dist/lib/room-topology-index.d.ts.map +1 -1
- package/dist/lib/room-topology-index.js +1 -1
- package/dist/lib/room-zone-adoption.d.ts.map +1 -1
- package/dist/lib/script-inputs-key.d.ts +3 -0
- package/dist/lib/script-inputs-key.d.ts.map +1 -0
- package/dist/lib/script-inputs-key.js +13 -0
- package/dist/lib/setback-envelope.d.ts +95 -5
- package/dist/lib/setback-envelope.d.ts.map +1 -1
- package/dist/lib/setback-envelope.js +351 -35
- package/dist/lib/site-flatwork.d.ts +11 -0
- package/dist/lib/site-flatwork.d.ts.map +1 -0
- package/dist/lib/site-flatwork.js +11 -0
- package/dist/lib/site-ground-height.d.ts +13 -0
- package/dist/lib/site-ground-height.d.ts.map +1 -0
- package/dist/lib/site-ground-height.js +16 -0
- package/dist/lib/site-placement.d.ts +362 -0
- package/dist/lib/site-placement.d.ts.map +1 -0
- package/dist/lib/site-placement.js +942 -0
- package/dist/lib/snap-ease.d.ts +20 -0
- package/dist/lib/snap-ease.d.ts.map +1 -0
- package/dist/lib/snap-ease.js +50 -0
- package/dist/lib/structure-kernel.d.ts +1 -1
- package/dist/lib/structure-kernel.d.ts.map +1 -1
- package/dist/lib/structure-kernel.js +2 -0
- package/dist/lib/surface-support-references.d.ts +4 -0
- package/dist/lib/surface-support-references.d.ts.map +1 -0
- package/dist/lib/surface-support-references.js +19 -0
- package/dist/lib/terrain-support-query.d.ts +10 -0
- package/dist/lib/terrain-support-query.d.ts.map +1 -1
- package/dist/lib/terrain-support-query.js +1 -1
- package/dist/lib/wall-face-script.d.ts +66 -0
- package/dist/lib/wall-face-script.d.ts.map +1 -0
- package/dist/lib/wall-face-script.js +235 -0
- package/dist/lib/zone-colors.d.ts +1 -1
- package/dist/lib/zone-colors.d.ts.map +1 -1
- package/dist/lib/zone-quantities.d.ts.map +1 -1
- package/dist/lib/zone-quantities.js +4 -5
- package/dist/material-kinds.d.ts +9 -0
- package/dist/material-kinds.d.ts.map +1 -0
- package/dist/material-kinds.js +30 -0
- package/dist/material-library.d.ts +4 -4
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +72 -26
- package/dist/node-slots/index.d.ts +1 -0
- package/dist/node-slots/index.d.ts.map +1 -1
- package/dist/node-slots/index.js +7 -1
- package/dist/node-slots/roof.d.ts +5 -0
- package/dist/node-slots/roof.d.ts.map +1 -0
- package/dist/node-slots/roof.js +12 -0
- package/dist/node-slots/stair.d.ts +2 -0
- package/dist/node-slots/stair.d.ts.map +1 -1
- package/dist/node-slots/stair.js +6 -2
- package/dist/procedural-items/design-placement.d.ts.map +1 -1
- package/dist/procedural-items/design.d.ts +19 -19
- package/dist/procedural-items/fixtures.d.ts +297 -297
- package/dist/procedural-items/fixtures.d.ts.map +1 -1
- package/dist/procedural-items/integration.d.ts +106 -106
- package/dist/procedural-items/joints.d.ts +4 -4
- package/dist/procedural-items/library-colors.d.ts +22 -22
- package/dist/procedural-items/library-colors.d.ts.map +1 -1
- package/dist/procedural-items/motion-controller.d.ts.map +1 -1
- package/dist/procedural-items/node.d.ts +291 -291
- package/dist/procedural-items/query.d.ts +1 -1
- package/dist/procedural-items/query.d.ts.map +1 -1
- package/dist/procedural-items/recipe.d.ts +11 -11
- package/dist/procedural-items/recipe.d.ts.map +1 -1
- package/dist/procedural-items/section.d.ts.map +1 -1
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/scene-api.d.ts +1 -0
- package/dist/registry/scene-api.d.ts.map +1 -1
- package/dist/registry/scene-api.js +3 -0
- package/dist/registry/subtree.d.ts.map +1 -1
- package/dist/registry/subtree.js +2 -0
- package/dist/registry/types.d.ts +120 -1
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/assembly.d.ts +41 -41
- package/dist/schema/asset-url.d.ts +1 -1
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/base.d.ts +9 -9
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/camera.d.ts +1 -1
- package/dist/schema/collection-templates.d.ts +20 -20
- package/dist/schema/collection-templates.d.ts.map +1 -1
- package/dist/schema/geometry-metadata.d.ts +7 -7
- package/dist/schema/geometry-metadata.d.ts.map +1 -1
- package/dist/schema/geometry-source.d.ts +26 -16
- package/dist/schema/geometry-source.d.ts.map +1 -1
- package/dist/schema/geometry-source.js +14 -0
- package/dist/schema/index.d.ts +10 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +10 -7
- package/dist/schema/material.d.ts +33 -33
- package/dist/schema/nodes/barrel-roof.d.ts +3 -0
- package/dist/schema/nodes/barrel-roof.d.ts.map +1 -0
- package/dist/schema/nodes/barrel-roof.js +11 -0
- package/dist/schema/nodes/block.d.ts +8 -8
- package/dist/schema/nodes/box-vent.d.ts +13 -13
- package/dist/schema/nodes/building.d.ts +9 -8
- package/dist/schema/nodes/building.d.ts.map +1 -1
- package/dist/schema/nodes/building.js +2 -0
- package/dist/schema/nodes/cabinet.d.ts +130 -129
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.js +1 -1
- package/dist/schema/nodes/ceiling.d.ts +15 -15
- package/dist/schema/nodes/chimney.d.ts +23 -23
- package/dist/schema/nodes/column.d.ts +207 -199
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +2 -0
- package/dist/schema/nodes/construction-dimension.d.ts +34 -34
- package/dist/schema/nodes/cupola.d.ts +15 -15
- package/dist/schema/nodes/curtain-wall.d.ts +21 -20
- package/dist/schema/nodes/curtain-wall.d.ts.map +1 -1
- package/dist/schema/nodes/curtain-wall.js +23 -0
- package/dist/schema/nodes/door.d.ts +50 -43
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +19 -0
- package/dist/schema/nodes/dormer.d.ts +37 -36
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +17 -17
- package/dist/schema/nodes/duct-fitting.d.ts +24 -24
- package/dist/schema/nodes/duct-segment.d.ts +14 -14
- package/dist/schema/nodes/duct-terminal.d.ts +12 -12
- package/dist/schema/nodes/elevator.d.ts +15 -15
- package/dist/schema/nodes/eyebrow-vent.d.ts +13 -13
- package/dist/schema/nodes/fence-feature.d.ts +37 -37
- package/dist/schema/nodes/fence-types.d.ts +32 -0
- package/dist/schema/nodes/fence-types.d.ts.map +1 -0
- package/dist/schema/nodes/fence-types.js +22 -0
- package/dist/schema/nodes/fence.d.ts +43 -72
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/fence.js +4 -20
- package/dist/schema/nodes/floor-opening.d.ts +8 -8
- package/dist/schema/nodes/guide.d.ts +8 -8
- package/dist/schema/nodes/gutter.d.ts +14 -14
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/gutter.js +6 -5
- package/dist/schema/nodes/hvac-equipment.d.ts +13 -13
- package/dist/schema/nodes/imported-mesh.d.ts +8 -8
- package/dist/schema/nodes/item.d.ts +30 -25
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/lean-to-extension.d.ts +36 -36
- package/dist/schema/nodes/level.d.ts +9 -9
- package/dist/schema/nodes/lineset.d.ts +8 -8
- package/dist/schema/nodes/liquid-line.d.ts +8 -8
- package/dist/schema/nodes/measurement.d.ts +8 -8
- package/dist/schema/nodes/opening-types.d.ts +13 -13
- package/dist/schema/nodes/opening-types.d.ts.map +1 -1
- package/dist/schema/nodes/pipe-fitting.d.ts +15 -15
- package/dist/schema/nodes/pipe-segment.d.ts +11 -11
- package/dist/schema/nodes/pipe-trap.d.ts +9 -9
- package/dist/schema/nodes/ridge-vent.d.ts +14 -14
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/ridge-vent.js +3 -1
- package/dist/schema/nodes/roof-glazing-config.d.ts +90 -0
- package/dist/schema/nodes/roof-glazing-config.d.ts.map +1 -0
- package/dist/schema/nodes/roof-glazing-config.js +34 -0
- package/dist/schema/nodes/roof-glazing.d.ts +57 -0
- package/dist/schema/nodes/roof-glazing.d.ts.map +1 -0
- package/dist/schema/nodes/roof-glazing.js +514 -0
- package/dist/schema/nodes/roof-segment-resize.d.ts +4 -0
- package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-resize.js +21 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts +5 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-shape.js +44 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts +1 -1
- package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-walls.js +24 -0
- package/dist/schema/nodes/roof-segment.d.ts +153 -46
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +91 -20
- package/dist/schema/nodes/roof-types.d.ts +14 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -0
- package/dist/schema/nodes/roof-types.js +14 -0
- package/dist/schema/nodes/roof.d.ts +49 -49
- package/dist/schema/nodes/scan.d.ts +8 -8
- package/dist/schema/nodes/separator.d.ts +8 -8
- package/dist/schema/nodes/shelf.d.ts +16 -16
- package/dist/schema/nodes/site-facts.d.ts +64 -0
- package/dist/schema/nodes/site-facts.d.ts.map +1 -0
- package/dist/schema/nodes/site-facts.js +73 -0
- package/dist/schema/nodes/site.d.ts +105 -63
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +7 -70
- package/dist/schema/nodes/skylight.d.ts +41 -41
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +21 -21
- package/dist/schema/nodes/solar-panel.d.ts +21 -21
- package/dist/schema/nodes/spawn.d.ts +8 -8
- package/dist/schema/nodes/stair-construction.d.ts +3 -3
- package/dist/schema/nodes/stair-defaults.d.ts +16 -0
- package/dist/schema/nodes/stair-defaults.d.ts.map +1 -0
- package/dist/schema/nodes/stair-defaults.js +15 -0
- package/dist/schema/nodes/stair-segment.d.ts +22 -22
- package/dist/schema/nodes/stair-types.d.ts +29 -0
- package/dist/schema/nodes/stair-types.d.ts.map +1 -0
- package/dist/schema/nodes/stair-types.js +23 -0
- package/dist/schema/nodes/stair.d.ts +51 -75
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +6 -20
- package/dist/schema/nodes/structural-grid.d.ts +8 -8
- package/dist/schema/nodes/surface-hole-metadata.d.ts +2 -2
- package/dist/schema/nodes/turbine-vent.d.ts +13 -13
- package/dist/schema/nodes/unit.d.ts +10 -10
- package/dist/schema/nodes/unit.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +479 -146
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +19 -0
- package/dist/schema/nodes/window.d.ts +55 -39
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +10 -0
- package/dist/schema/nodes/zone.d.ts +231 -12
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +10 -0
- package/dist/schema/provenance.d.ts +21 -21
- package/dist/schema/scene-material.d.ts +5 -5
- package/dist/schema/site-presentation.d.ts +100 -0
- package/dist/schema/site-presentation.d.ts.map +1 -0
- package/dist/schema/site-presentation.js +83 -0
- package/dist/schema/types.d.ts +1954 -1414
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -1
- package/dist/services/index.d.ts +5 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +5 -1
- package/dist/services/level-height.d.ts.map +1 -1
- package/dist/services/level-height.js +7 -3
- package/dist/services/port-connectivity.d.ts +4 -0
- package/dist/services/port-connectivity.d.ts.map +1 -1
- package/dist/services/port-connectivity.js +35 -0
- package/dist/services/project-file-sink.d.ts +9 -0
- package/dist/services/project-file-sink.d.ts.map +1 -0
- package/dist/services/project-file-sink.js +13 -0
- package/dist/services/roof-bearing.d.ts +62 -0
- package/dist/services/roof-bearing.d.ts.map +1 -0
- package/dist/services/roof-bearing.js +234 -0
- package/dist/services/roof-level.d.ts +121 -0
- package/dist/services/roof-level.d.ts.map +1 -0
- package/dist/services/roof-level.js +280 -0
- package/dist/services/roof-move.d.ts +83 -0
- package/dist/services/roof-move.d.ts.map +1 -0
- package/dist/services/roof-move.js +316 -0
- package/dist/services/stair-surface-snap.d.ts +14 -0
- package/dist/services/stair-surface-snap.d.ts.map +1 -0
- package/dist/services/stair-surface-snap.js +116 -0
- package/dist/services/storey-datum.d.ts +12 -0
- package/dist/services/storey-datum.d.ts.map +1 -0
- package/dist/services/storey-datum.js +18 -0
- package/dist/services/storey.d.ts +51 -5
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +125 -8
- package/dist/solar-panel-presets.d.ts +2 -2
- package/dist/store/actions/node-actions.d.ts +3613 -3182
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +46 -1
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/history-control.d.ts +39 -0
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +84 -4
- package/dist/store/scene-annotations.d.ts +7267 -6409
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/store/scene-preview.d.ts +16 -0
- package/dist/store/scene-preview.d.ts.map +1 -0
- package/dist/store/scene-preview.js +144 -0
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-terrain.d.ts.map +1 -1
- package/dist/store/use-live-transforms.d.ts.map +1 -1
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +37 -4
- package/dist/systems/elevator/elevator-dispatch.js +1 -1
- package/dist/systems/fence/fence-features.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.js +24 -3
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +9 -3
- package/dist/systems/roof/roof-elevation.d.ts +5 -0
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +91 -62
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +4623 -3516
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +5149 -4076
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/slab/slab-support.d.ts +6 -3
- package/dist/systems/slab/slab-support.d.ts.map +1 -1
- package/dist/systems/slab/slab-support.js +78 -10
- package/dist/systems/stair/stair-detail-budget.d.ts +2 -2
- package/dist/systems/stair/stair-detail-budget.d.ts.map +1 -1
- package/dist/systems/stair/stair-footprint.d.ts +6 -0
- package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
- package/dist/systems/stair/stair-footprint.js +27 -14
- package/dist/systems/stair/stair-layout.d.ts +2 -2
- package/dist/systems/stair/stair-opening-preview.d.ts +3643 -3214
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-presets.d.ts +73 -65
- package/dist/systems/stair/stair-presets.d.ts.map +1 -1
- package/dist/systems/stair/stair-presets.js +16 -9
- package/dist/systems/stair/stair-rail-path.d.ts +1 -1
- package/dist/systems/stair/stair-rise-query.d.ts +16 -0
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.js +57 -7
- package/dist/systems/stair/stair-sizing.d.ts +101 -99
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.d.ts +11 -0
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.js +21 -0
- package/dist/systems/wall/wall-curve.d.ts +5 -0
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +13 -0
- package/dist/systems/wall/wall-frame.d.ts.map +1 -1
- package/dist/systems/wall/wall-frame.js +8 -0
- package/dist/systems/wall/wall-room-sides.d.ts +8 -0
- package/dist/systems/wall/wall-room-sides.d.ts.map +1 -1
- package/dist/systems/wall/wall-room-sides.js +60 -7
- package/dist/systems/wall/wall-top.d.ts +7 -4
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +14 -6
- package/dist/systems/wall/wall-topology.d.ts +4 -0
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +4 -2
- package/dist/systems/wall/wall-trim.d.ts +7 -0
- package/dist/systems/wall/wall-trim.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim.js +10 -0
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +8 -0
- package/dist/utils/ensure-scene-openings.d.ts +7420 -6562
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-piece-adoption.d.ts +2 -2
- package/dist/utils/floor-plate-migration.d.ts +3746 -3317
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.js +2 -2
- package/dist/utils/heal-scene-graph.d.ts +12 -0
- package/dist/utils/heal-scene-graph.d.ts.map +1 -1
- package/dist/utils/heal-scene-graph.js +40 -23
- package/dist/utils/legacy-wall-datums.d.ts.map +1 -1
- package/dist/utils/legacy-wall-datums.js +2 -2
- package/dist/utils/owned-floor-opening-migration.d.ts +3642 -3213
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +3730 -7777
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/scene-migrations.d.ts +1 -1
- package/dist/utils/scene-migrations.d.ts.map +1 -1
- package/dist/utils/scene-migrations.js +1 -1
- package/dist/utils/semantic-equal.d.ts +3 -0
- package/dist/utils/semantic-equal.d.ts.map +1 -0
- package/dist/utils/semantic-equal.js +26 -0
- package/dist/utils/structure-id.d.ts.map +1 -1
- package/dist/utils/types.d.ts.map +1 -1
- package/dist/utils/wall-face-migration.d.ts +1 -1
- package/dist/utils/wall-face-migration.d.ts.map +1 -1
- package/package.json +36 -10
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Straightening a photo of a flat face: the plane-to-plane perspective transform (a homography)
|
|
3
|
+
* between metres on the face and pixels in the photo, and the warp that draws the face head-on.
|
|
4
|
+
* Several faces of one photo share its camera: the vanishing points of their lines give its focal
|
|
5
|
+
* length and rotation, and each face's homography is K·[along up origin].
|
|
6
|
+
* Pure over numbers and RGBA buffers, so the chat (canvas) and the MCP (any codec) share it.
|
|
7
|
+
*/
|
|
8
|
+
export function applyHomography(h, [x, y]) {
|
|
9
|
+
const w = h[6] * x + h[7] * y + h[8];
|
|
10
|
+
if (Math.abs(w) < 1e-12)
|
|
11
|
+
return null;
|
|
12
|
+
return [(h[0] * x + h[1] * y + h[2]) / w, (h[3] * x + h[4] * y + h[5]) / w];
|
|
13
|
+
}
|
|
14
|
+
export function multiplyHomography(a, b) {
|
|
15
|
+
const m = [];
|
|
16
|
+
for (let r = 0; r < 3; r++)
|
|
17
|
+
for (let c = 0; c < 3; c++)
|
|
18
|
+
m.push(a[r * 3] * b[c] + a[r * 3 + 1] * b[3 + c] + a[r * 3 + 2] * b[6 + c]);
|
|
19
|
+
return m;
|
|
20
|
+
}
|
|
21
|
+
export function invertHomography(h) {
|
|
22
|
+
const [a, b, c, d, e, f, g, i, j] = h;
|
|
23
|
+
const co = [
|
|
24
|
+
e * j - f * i,
|
|
25
|
+
-(b * j - c * i),
|
|
26
|
+
b * f - c * e,
|
|
27
|
+
-(d * j - f * g),
|
|
28
|
+
a * j - c * g,
|
|
29
|
+
-(a * f - c * d),
|
|
30
|
+
d * i - e * g,
|
|
31
|
+
-(a * i - b * g),
|
|
32
|
+
a * e - b * d,
|
|
33
|
+
];
|
|
34
|
+
const det = a * co[0] + b * co[3] + c * co[6];
|
|
35
|
+
if (Math.abs(det) < 1e-12)
|
|
36
|
+
return null;
|
|
37
|
+
const inverse = co.map((value) => value / det);
|
|
38
|
+
return normalised(inverse);
|
|
39
|
+
}
|
|
40
|
+
function normalised(h) {
|
|
41
|
+
const scale = h[8];
|
|
42
|
+
if (Math.abs(scale) < 1e-12 || !h.every(Number.isFinite))
|
|
43
|
+
return null;
|
|
44
|
+
return h.map((value) => value / scale);
|
|
45
|
+
}
|
|
46
|
+
/** Moves points to their centroid and scales them to an average distance of √2 (Hartley). */
|
|
47
|
+
function conditioning(points) {
|
|
48
|
+
const cx = points.reduce((sum, [x]) => sum + x, 0) / points.length;
|
|
49
|
+
const cy = points.reduce((sum, [, y]) => sum + y, 0) / points.length;
|
|
50
|
+
const mean = points.reduce((sum, [x, y]) => sum + Math.hypot(x - cx, y - cy), 0) / points.length;
|
|
51
|
+
const s = mean > 1e-12 ? Math.SQRT2 / mean : 1;
|
|
52
|
+
return [s, 0, -s * cx, 0, s, -s * cy, 0, 0, 1];
|
|
53
|
+
}
|
|
54
|
+
/** Gaussian elimination with partial pivoting; null when the system is singular. */
|
|
55
|
+
function solveLinear(a, b) {
|
|
56
|
+
const n = b.length;
|
|
57
|
+
const m = a.map((row, i) => [...row, b[i]]);
|
|
58
|
+
const scale = Math.max(...m.map((row, i) => Math.abs(row[i])), 1e-300);
|
|
59
|
+
for (let col = 0; col < n; col++) {
|
|
60
|
+
let pivot = col;
|
|
61
|
+
for (let row = col + 1; row < n; row++)
|
|
62
|
+
if (Math.abs(m[row][col]) > Math.abs(m[pivot][col]))
|
|
63
|
+
pivot = row;
|
|
64
|
+
if (Math.abs(m[pivot][col]) < 1e-10 * scale)
|
|
65
|
+
return null;
|
|
66
|
+
[m[col], m[pivot]] = [m[pivot], m[col]];
|
|
67
|
+
for (let row = 0; row < n; row++) {
|
|
68
|
+
if (row === col)
|
|
69
|
+
continue;
|
|
70
|
+
const factor = m[row][col] / m[col][col];
|
|
71
|
+
for (let k = col; k <= n; k++)
|
|
72
|
+
m[row][k] -= factor * m[col][k];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return m.map((row, i) => row[n] / row[i]);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The homography taking each `from` to its `to`, fitted over all pairs by least squares on
|
|
79
|
+
* conditioned coordinates, so one point picked a few pixels off moves the fit, not breaks it.
|
|
80
|
+
* Null for fewer than four pairs or points that do not span the plane.
|
|
81
|
+
*/
|
|
82
|
+
export function solveHomography(pairs) {
|
|
83
|
+
if (pairs.length < 4)
|
|
84
|
+
return null;
|
|
85
|
+
const tFrom = conditioning(pairs.map((pair) => pair.from));
|
|
86
|
+
const tTo = conditioning(pairs.map((pair) => pair.to));
|
|
87
|
+
const ata = Array.from({ length: 8 }, () => new Array(8).fill(0));
|
|
88
|
+
const atb = new Array(8).fill(0);
|
|
89
|
+
const accumulate = (row, value) => {
|
|
90
|
+
for (let i = 0; i < 8; i++) {
|
|
91
|
+
atb[i] += row[i] * value;
|
|
92
|
+
for (let j = 0; j < 8; j++)
|
|
93
|
+
ata[i][j] += row[i] * row[j];
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
for (const { from, to } of pairs) {
|
|
97
|
+
const [x, y] = applyHomography(tFrom, from);
|
|
98
|
+
const [u, v] = applyHomography(tTo, to);
|
|
99
|
+
accumulate([x, y, 1, 0, 0, 0, -u * x, -u * y], u);
|
|
100
|
+
accumulate([0, 0, 0, x, y, 1, -v * x, -v * y], v);
|
|
101
|
+
}
|
|
102
|
+
const solved = solveLinear(ata, atb);
|
|
103
|
+
if (!solved)
|
|
104
|
+
return null;
|
|
105
|
+
const conditioned = [...solved, 1];
|
|
106
|
+
const tToInverse = invertHomography(tTo);
|
|
107
|
+
if (!tToInverse)
|
|
108
|
+
return null;
|
|
109
|
+
return normalised(multiplyHomography(multiplyHomography(tToInverse, conditioned), tFrom));
|
|
110
|
+
}
|
|
111
|
+
/** Where the lines through `a` and through `b` cross; null when they are parallel. */
|
|
112
|
+
export function lineIntersection(a, b) {
|
|
113
|
+
const [[x1, y1], [x2, y2]] = a;
|
|
114
|
+
const [[x3, y3], [x4, y4]] = b;
|
|
115
|
+
const denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
|
|
116
|
+
const size = Math.max(Math.hypot(x2 - x1, y2 - y1) * Math.hypot(x4 - x3, y4 - y3), 1e-300);
|
|
117
|
+
if (Math.abs(denominator) < 1e-9 * size)
|
|
118
|
+
return null;
|
|
119
|
+
const t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / denominator;
|
|
120
|
+
return [x1 + t * (x2 - x1), y1 + t * (y2 - y1)];
|
|
121
|
+
}
|
|
122
|
+
const dot3 = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
123
|
+
const cross3 = (a, b) => [
|
|
124
|
+
a[1] * b[2] - a[2] * b[1],
|
|
125
|
+
a[2] * b[0] - a[0] * b[2],
|
|
126
|
+
a[0] * b[1] - a[1] * b[0],
|
|
127
|
+
];
|
|
128
|
+
const scale3 = (a, s) => [a[0] * s, a[1] * s, a[2] * s];
|
|
129
|
+
const add3 = (a, b) => [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
|
|
130
|
+
function unit3(a) {
|
|
131
|
+
const n = Math.hypot(a[0], a[1], a[2]);
|
|
132
|
+
return n > 1e-12 && Number.isFinite(n) ? scale3(a, 1 / n) : null;
|
|
133
|
+
}
|
|
134
|
+
/** Eigenvalues ascending, with their unit eigenvectors, of a symmetric 3 × 3 (cyclic Jacobi). */
|
|
135
|
+
function symmetricEigen(m) {
|
|
136
|
+
const a = m.map((row) => [...row]);
|
|
137
|
+
const v = [
|
|
138
|
+
[1, 0, 0],
|
|
139
|
+
[0, 1, 0],
|
|
140
|
+
[0, 0, 1],
|
|
141
|
+
];
|
|
142
|
+
for (let sweep = 0; sweep < 64; sweep++) {
|
|
143
|
+
const off = a[0][1] ** 2 + a[0][2] ** 2 + a[1][2] ** 2;
|
|
144
|
+
const diagonal = a[0][0] ** 2 + a[1][1] ** 2 + a[2][2] ** 2;
|
|
145
|
+
if (off <= 1e-30 * diagonal || off === 0)
|
|
146
|
+
break;
|
|
147
|
+
for (const [p, q] of [
|
|
148
|
+
[0, 1],
|
|
149
|
+
[0, 2],
|
|
150
|
+
[1, 2],
|
|
151
|
+
]) {
|
|
152
|
+
if (Math.abs(a[p][q]) < 1e-300)
|
|
153
|
+
continue;
|
|
154
|
+
const theta = (a[q][q] - a[p][p]) / (2 * a[p][q]);
|
|
155
|
+
const t = (theta >= 0 ? 1 : -1) / (Math.abs(theta) + Math.sqrt(theta * theta + 1));
|
|
156
|
+
const c = 1 / Math.sqrt(t * t + 1);
|
|
157
|
+
const s = t * c;
|
|
158
|
+
for (let k = 0; k < 3; k++) {
|
|
159
|
+
const [kp, kq] = [a[k][p], a[k][q]];
|
|
160
|
+
a[k][p] = c * kp - s * kq;
|
|
161
|
+
a[k][q] = s * kp + c * kq;
|
|
162
|
+
}
|
|
163
|
+
for (let k = 0; k < 3; k++) {
|
|
164
|
+
const [pk, qk] = [a[p][k], a[q][k]];
|
|
165
|
+
a[p][k] = c * pk - s * qk;
|
|
166
|
+
a[q][k] = s * pk + c * qk;
|
|
167
|
+
}
|
|
168
|
+
for (let k = 0; k < 3; k++) {
|
|
169
|
+
const [kp, kq] = [v[k][p], v[k][q]];
|
|
170
|
+
v[k][p] = c * kp - s * kq;
|
|
171
|
+
v[k][q] = s * kp + c * kq;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return [0, 1, 2]
|
|
176
|
+
.map((i) => ({ value: a[i][i], vector: [v[0][i], v[1][i], v[2][i]] }))
|
|
177
|
+
.sort((x, y) => x.value - y.value);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Where lines that are parallel on the building meet in the photo: their vanishing point, as a unit
|
|
181
|
+
* homogeneous point (x, y, w) about the photo's centre with its longer side as unit, so lines
|
|
182
|
+
* parallel in the photo give w = 0 (a point at infinity) instead of a division by zero. Least
|
|
183
|
+
* squares over all the lines, each weighted by its length. Null for fewer than two distinct lines.
|
|
184
|
+
*/
|
|
185
|
+
export function vanishingPoint(segments, photo) {
|
|
186
|
+
const unit = Math.max(photo.width, photo.height);
|
|
187
|
+
const at = ([x, y]) => [(x - photo.width / 2) / unit, (y - photo.height / 2) / unit, 1];
|
|
188
|
+
const m = [0, 1, 2].map(() => [0, 0, 0]);
|
|
189
|
+
for (const [a, b] of segments) {
|
|
190
|
+
const line = cross3(at(a), at(b));
|
|
191
|
+
// |line.xy| is the segment's length: dividing by it once leaves the length as the weight.
|
|
192
|
+
const length = Math.hypot(line[0], line[1]);
|
|
193
|
+
if (length < 1e-12)
|
|
194
|
+
continue;
|
|
195
|
+
for (let i = 0; i < 3; i++)
|
|
196
|
+
for (let j = 0; j < 3; j++)
|
|
197
|
+
m[i][j] += (line[i] * line[j]) / length;
|
|
198
|
+
}
|
|
199
|
+
const [smallest, middle, largest] = symmetricEigen(m);
|
|
200
|
+
// Two near-identical lines (the same corner picked twice) cross anywhere: no vanishing point.
|
|
201
|
+
if (!(middle.value > 1e-5 * largest.value))
|
|
202
|
+
return null;
|
|
203
|
+
const point = smallest.vector;
|
|
204
|
+
return point[2] < 0 ? scale3(point, -1) : point;
|
|
205
|
+
}
|
|
206
|
+
/** Root mean square distance, in photo pixels, of each segment's ends from the line through its middle and `direction`'s vanishing point. */
|
|
207
|
+
export function vanishingResidualPx(camera, direction, segments) {
|
|
208
|
+
if (!segments.length)
|
|
209
|
+
return 0;
|
|
210
|
+
const point = [
|
|
211
|
+
camera.focal * direction[0] + camera.centre[0] * direction[2],
|
|
212
|
+
camera.focal * direction[1] + camera.centre[1] * direction[2],
|
|
213
|
+
direction[2],
|
|
214
|
+
];
|
|
215
|
+
let sum = 0;
|
|
216
|
+
for (const [a, b] of segments) {
|
|
217
|
+
const line = cross3([(a[0] + b[0]) / 2, (a[1] + b[1]) / 2, 1], point);
|
|
218
|
+
const norm = Math.hypot(line[0], line[1]) || 1;
|
|
219
|
+
for (const [x, y] of [a, b])
|
|
220
|
+
sum += ((line[0] * x + line[1] * y + line[2]) / norm) ** 2;
|
|
221
|
+
}
|
|
222
|
+
return Math.sqrt(sum / (segments.length * 2));
|
|
223
|
+
}
|
|
224
|
+
/** A focal length below a quarter or above ten times the photo's longer side is no photo's. */
|
|
225
|
+
const FOCAL_RANGE = [0.25, 10];
|
|
226
|
+
/** How much the perpendicular pairs must say about the focal length, at least. */
|
|
227
|
+
const MIN_PAIR_WEIGHT = 0.02;
|
|
228
|
+
/** The principal point stays within this many longer sides of the centre, up or down. */
|
|
229
|
+
const MAX_SHIFT = 1;
|
|
230
|
+
/**
|
|
231
|
+
* The focal length and the principal point's height (in units of the photo's longer side, from
|
|
232
|
+
* its centre) that make each pair of perpendicular directions perpendicular. With the principal
|
|
233
|
+
* point at (0, c), a pair of vanishing points gives (x₁, y₁ − c·w₁, f·w₁)·(x₂, y₂ − c·w₂, f·w₂) = 0,
|
|
234
|
+
* linear in c and g = f² + c²: −(y₁w₂ + y₂w₁)·c + w₁w₂·g = −(x₁x₂ + y₁y₂). Least squares over the
|
|
235
|
+
* pairs; a vanishing point far out has a small w and says little about f. With the verticals
|
|
236
|
+
* parallel (w = 0) their pairs put c on the horizon. Too few or too alike pairs keep c = 0.
|
|
237
|
+
*/
|
|
238
|
+
function focalAndCentre(pairs) {
|
|
239
|
+
const rows = pairs.map(([a, b]) => ({
|
|
240
|
+
c: -(a[1] * b[2] + b[1] * a[2]),
|
|
241
|
+
g: a[2] * b[2],
|
|
242
|
+
rhs: -(a[0] * b[0] + a[1] * b[1]),
|
|
243
|
+
}));
|
|
244
|
+
const sum = (term) => rows.reduce((total, row) => total + term(row), 0);
|
|
245
|
+
const weight = Math.sqrt(sum((row) => row.g * row.g));
|
|
246
|
+
const [cc, cg, gg] = [sum((r) => r.c * r.c), sum((r) => r.c * r.g), sum((r) => r.g * r.g)];
|
|
247
|
+
const [cr, gr] = [sum((r) => r.c * r.rhs), sum((r) => r.g * r.rhs)];
|
|
248
|
+
const determinant = cc * gg - cg * cg;
|
|
249
|
+
let centre = 0;
|
|
250
|
+
let squared = gr / gg;
|
|
251
|
+
if (rows.length > 1 && determinant > 1e-3 * cc * gg) {
|
|
252
|
+
const c = (cr * gg - gr * cg) / determinant;
|
|
253
|
+
const g = (gr * cc - cr * cg) / determinant;
|
|
254
|
+
if (Math.abs(c) <= MAX_SHIFT && g - c * c > 0) {
|
|
255
|
+
centre = c;
|
|
256
|
+
squared = g - c * c;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Each well-placed pair's focal length on its own, at that centre: they agree when the picks do.
|
|
260
|
+
const alone = rows
|
|
261
|
+
.filter((row) => Math.abs(row.g) > 0.05)
|
|
262
|
+
.map((row) => (row.rhs - row.c * centre) / row.g - centre * centre)
|
|
263
|
+
.filter((value) => value > 0)
|
|
264
|
+
.map(Math.sqrt);
|
|
265
|
+
return { weight, focal: Math.sqrt(squared), centre, alone };
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* The photo's camera from vanishing points (from `vanishingPoint`): the vertical one when the
|
|
269
|
+
* verticals were picked, one per face, and which faces meet at a right angle. First the focal
|
|
270
|
+
* length and the principal point's height (`focalAndCentre`), then the rotation: up from the
|
|
271
|
+
* verticals (or across two faces), each face's direction from its vanishing point, made level, and
|
|
272
|
+
* turned so the face looks at the camera (`probe` is a photo pixel on it). `focalSpread` is the
|
|
273
|
+
* ratio between the largest and the smallest focal length the well-placed pairs give on their own:
|
|
274
|
+
* 1 when they agree.
|
|
275
|
+
*/
|
|
276
|
+
export function solvePhotoCamera(input) {
|
|
277
|
+
const { photo, vertical, faces } = input;
|
|
278
|
+
const pairs = [
|
|
279
|
+
...(vertical ? faces.map((face) => [vertical, face.vanishing]) : []),
|
|
280
|
+
...input.perpendicular.map(([i, j]) => [faces[i].vanishing, faces[j].vanishing]),
|
|
281
|
+
];
|
|
282
|
+
if (!pairs.length)
|
|
283
|
+
return { failure: 'needs_second_direction' };
|
|
284
|
+
const { weight, focal, centre, alone } = focalAndCentre(pairs);
|
|
285
|
+
if (weight < MIN_PAIR_WEIGHT)
|
|
286
|
+
return { failure: 'at_infinity' };
|
|
287
|
+
if (!(focal >= FOCAL_RANGE[0] && focal <= FOCAL_RANGE[1]))
|
|
288
|
+
return { failure: 'unsolved' };
|
|
289
|
+
const direction = (v) => unit3([v[0], v[1] - centre * v[2], focal * v[2]]);
|
|
290
|
+
const directions = faces.map((face) => direction(face.vanishing));
|
|
291
|
+
const [i, j] = input.perpendicular[0] ?? [];
|
|
292
|
+
let up = (vertical && direction(vertical)) ??
|
|
293
|
+
(i !== undefined && directions[i] && directions[j]
|
|
294
|
+
? unit3(cross3(directions[i], directions[j]))
|
|
295
|
+
: null);
|
|
296
|
+
if (!up)
|
|
297
|
+
return { failure: 'unsolved' };
|
|
298
|
+
if (up[1] > 0)
|
|
299
|
+
up = scale3(up, -1);
|
|
300
|
+
const unitPx = Math.max(photo.width, photo.height);
|
|
301
|
+
const camera = {
|
|
302
|
+
...photo,
|
|
303
|
+
focal: focal * unitPx,
|
|
304
|
+
centre: [photo.width / 2, photo.height / 2 + centre * unitPx],
|
|
305
|
+
up,
|
|
306
|
+
};
|
|
307
|
+
const axes = [];
|
|
308
|
+
for (const [index, face] of faces.entries()) {
|
|
309
|
+
const raw = directions[index];
|
|
310
|
+
let along = raw && unit3(add3(raw, scale3(up, -dot3(raw, up))));
|
|
311
|
+
if (!along)
|
|
312
|
+
return { failure: 'unsolved' };
|
|
313
|
+
let normal = cross3(along, up);
|
|
314
|
+
if (dot3(normal, photoRay(camera, face.probe)) > 0) {
|
|
315
|
+
along = scale3(along, -1);
|
|
316
|
+
normal = scale3(normal, -1);
|
|
317
|
+
}
|
|
318
|
+
axes.push({ along, up, normal });
|
|
319
|
+
}
|
|
320
|
+
const focalSpread = alone.length > 1 ? Math.max(...alone) / Math.min(...alone) : 1;
|
|
321
|
+
return { camera, faces: axes, focalSpread };
|
|
322
|
+
}
|
|
323
|
+
/** The ray from the camera through a photo pixel, in camera coordinates (its depth is 1). */
|
|
324
|
+
export function photoRay(camera, [x, y]) {
|
|
325
|
+
return [(x - camera.centre[0]) / camera.focal, (y - camera.centre[1]) / camera.focal, 1];
|
|
326
|
+
}
|
|
327
|
+
/** Where a photo pixel's ray meets a face's plane, in camera coordinates; null behind the camera. */
|
|
328
|
+
export function pointOnFace(camera, face, pixel) {
|
|
329
|
+
const ray = photoRay(camera, pixel);
|
|
330
|
+
const depth = face.distance / dot3(face.normal, ray);
|
|
331
|
+
return depth > 0 && Number.isFinite(depth) ? scale3(ray, depth) : null;
|
|
332
|
+
}
|
|
333
|
+
/** A photo pixel's place on a face, (along, up) in the face's units, from where its normal meets it. */
|
|
334
|
+
export function faceCoordinates(camera, face, pixel) {
|
|
335
|
+
const point = pointOnFace(camera, face, pixel);
|
|
336
|
+
return point && [dot3(face.along, point), dot3(face.up, point)];
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* The plane of a face from the camera and its two vertical edges `width` apart (the walls' extent):
|
|
340
|
+
* the one distance that puts them so far apart. Null when the edges come out the wrong way round.
|
|
341
|
+
*/
|
|
342
|
+
export function faceAtWidth(camera, axes, edges, width) {
|
|
343
|
+
const across = (points) => points.reduce((sum, pixel) => {
|
|
344
|
+
const ray = photoRay(camera, pixel);
|
|
345
|
+
return sum + dot3(axes.along, ray) / dot3(axes.normal, ray);
|
|
346
|
+
}, 0) / points.length;
|
|
347
|
+
const distance = width / (across(edges.right) - across(edges.left));
|
|
348
|
+
return distance < 0 && Number.isFinite(distance) ? { ...axes, distance } : null;
|
|
349
|
+
}
|
|
350
|
+
/** The plane of a face through the corner it shares with another: `corner` is that edge's pixels. */
|
|
351
|
+
export function faceThroughCorner(camera, axes, other, corner) {
|
|
352
|
+
const points = corner.map((pixel) => pointOnFace(camera, other, pixel));
|
|
353
|
+
if (points.some((point) => !point))
|
|
354
|
+
return null;
|
|
355
|
+
const middle = scale3(points.reduce((sum, point) => add3(sum, point), [0, 0, 0]), 1 / points.length);
|
|
356
|
+
const distance = dot3(axes.normal, middle);
|
|
357
|
+
return distance < 0 ? { ...axes, distance } : null;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Metres on a face, from `origin` (its face coordinates), to photo pixels: K·[along up origin].
|
|
361
|
+
* Its third row is the depth in metres, so a point behind the camera has w < 0.
|
|
362
|
+
*/
|
|
363
|
+
export function cameraFaceHomography(camera, face, origin) {
|
|
364
|
+
const offset = add3(add3(scale3(face.along, origin[0]), scale3(face.up, origin[1])), scale3(face.normal, face.distance));
|
|
365
|
+
const [a, u, t] = [face.along, face.up, offset].map((v) => [
|
|
366
|
+
camera.focal * v[0] + camera.centre[0] * v[2],
|
|
367
|
+
camera.focal * v[1] + camera.centre[1] * v[2],
|
|
368
|
+
v[2],
|
|
369
|
+
]);
|
|
370
|
+
return [a[0], u[0], t[0], a[1], u[1], t[1], a[2], u[2], t[2]];
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* An image `width` × `height` whose every pixel samples `src` (bilinear) where `toSource` maps
|
|
374
|
+
* its centre. What falls outside the source stays transparent.
|
|
375
|
+
*/
|
|
376
|
+
export function warpImage(src, toSource, width, height) {
|
|
377
|
+
const out = new Uint8ClampedArray(width * height * 4);
|
|
378
|
+
const { width: sw, height: sh, data } = src;
|
|
379
|
+
for (let v = 0; v < height; v++) {
|
|
380
|
+
for (let u = 0; u < width; u++) {
|
|
381
|
+
const w = toSource[6] * (u + 0.5) + toSource[7] * (v + 0.5) + toSource[8];
|
|
382
|
+
// Behind the camera: a face running past the photo's side would wrap round.
|
|
383
|
+
if (w < 1e-12)
|
|
384
|
+
continue;
|
|
385
|
+
const sx = (toSource[0] * (u + 0.5) + toSource[1] * (v + 0.5) + toSource[2]) / w - 0.5;
|
|
386
|
+
const sy = (toSource[3] * (u + 0.5) + toSource[4] * (v + 0.5) + toSource[5]) / w - 0.5;
|
|
387
|
+
if (sx < -0.5 || sy < -0.5 || sx > sw - 0.5 || sy > sh - 0.5)
|
|
388
|
+
continue;
|
|
389
|
+
const x0 = Math.max(0, Math.min(sw - 1, Math.floor(sx)));
|
|
390
|
+
const y0 = Math.max(0, Math.min(sh - 1, Math.floor(sy)));
|
|
391
|
+
const x1 = Math.min(sw - 1, x0 + 1);
|
|
392
|
+
const y1 = Math.min(sh - 1, y0 + 1);
|
|
393
|
+
const fx = Math.max(0, Math.min(1, sx - x0));
|
|
394
|
+
const fy = Math.max(0, Math.min(1, sy - y0));
|
|
395
|
+
const o = (v * width + u) * 4;
|
|
396
|
+
for (let c = 0; c < 4; c++) {
|
|
397
|
+
const top = data[(y0 * sw + x0) * 4 + c] * (1 - fx) + data[(y0 * sw + x1) * 4 + c] * fx;
|
|
398
|
+
const bottom = data[(y1 * sw + x0) * 4 + c] * (1 - fx) + data[(y1 * sw + x1) * 4 + c] * fx;
|
|
399
|
+
out[o + c] = Math.round(top * (1 - fy) + bottom * fy);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return { width, height, data: out };
|
|
404
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { WallNode } from '../schema/index.js';
|
|
2
|
+
type Pt = [number, number];
|
|
3
|
+
/**
|
|
4
|
+
* The walls that close every gap a plan's walls leave, whatever opening each takes: a storey's
|
|
5
|
+
* outline for its roof, whether or not its doors and windows are in yet.
|
|
6
|
+
*/
|
|
7
|
+
export declare function gapBridges(walls: readonly WallNode[]): {
|
|
8
|
+
start: Pt;
|
|
9
|
+
end: Pt;
|
|
10
|
+
thickness: number;
|
|
11
|
+
}[];
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=wall-gaps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wall-gaps.d.ts","sourceRoot":"","sources":["../../src/building/wall-gaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAsJ1B;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE;;;;IAMpD"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/** Wall ends this close are joined. */
|
|
2
|
+
const JOIN = 0.05;
|
|
3
|
+
/** The narrowest gap a door or window leaves. */
|
|
4
|
+
const MIN_GAP = 0.6;
|
|
5
|
+
/** On the outside: up to a garage door or a stacking slider. */
|
|
6
|
+
const MAX_OUTSIDE = 5;
|
|
7
|
+
/** Two gaps closer than this, side by side, are one opening found from two wall ends. */
|
|
8
|
+
const DUPLICATE = 0.5;
|
|
9
|
+
const sub = (a, b) => [a[0] - b[0], a[1] - b[1]];
|
|
10
|
+
const dot = (a, b) => a[0] * b[0] + a[1] * b[1];
|
|
11
|
+
const cross = (a, b) => a[0] * b[1] - a[1] * b[0];
|
|
12
|
+
const round = (value) => Math.round(value * 1e6) / 1e6;
|
|
13
|
+
const at = (p, u, s) => [
|
|
14
|
+
round(p[0] + u[0] * s),
|
|
15
|
+
round(p[1] + u[1] * s),
|
|
16
|
+
];
|
|
17
|
+
const same = (p, q) => Math.hypot(q[0] - p[0], q[1] - p[1]) < JOIN;
|
|
18
|
+
function unit(wall) {
|
|
19
|
+
const [dx, dz] = sub(wall.end, wall.start);
|
|
20
|
+
const length = Math.hypot(dx, dz);
|
|
21
|
+
return [dx / length, dz / length];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* How a wall end meets the others. Closed: a wall carries on in line from it, or it runs into
|
|
25
|
+
* another wall's side. Cornered: another wall turns there (a partition ending at an outside wall's
|
|
26
|
+
* jamb leaves the gap open: Hawkesbury's laundry door).
|
|
27
|
+
*/
|
|
28
|
+
function endOf(p, self, walls) {
|
|
29
|
+
let cornered = false;
|
|
30
|
+
for (const other of walls) {
|
|
31
|
+
if (other === self)
|
|
32
|
+
continue;
|
|
33
|
+
const u = unit(other);
|
|
34
|
+
if (same(other.start, p) || same(other.end, p)) {
|
|
35
|
+
if (Math.abs(cross(u, unit(self))) < 0.05)
|
|
36
|
+
return 'closed';
|
|
37
|
+
cornered = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const v = sub(p, other.start);
|
|
41
|
+
const along = dot(v, u);
|
|
42
|
+
const length = Math.hypot(...sub(other.end, other.start));
|
|
43
|
+
if (along > JOIN &&
|
|
44
|
+
along < length - JOIN &&
|
|
45
|
+
Math.abs(cross(u, v)) <= (other.thickness ?? 0.2) / 2 + JOIN)
|
|
46
|
+
return 'closed';
|
|
47
|
+
}
|
|
48
|
+
return cornered ? 'cornered' : 'free';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Where a plan's walls leave a gap for an opening: a wall end facing, in line, the end of another
|
|
52
|
+
* wall, or a partition stopping short of the wall it runs to. Found once each.
|
|
53
|
+
*/
|
|
54
|
+
function gapCandidates(walls) {
|
|
55
|
+
const straight = walls.filter((wall) => !wall.curveOffset && Math.hypot(...sub(wall.end, wall.start)) > JOIN);
|
|
56
|
+
const found = new Map();
|
|
57
|
+
for (const wall of straight) {
|
|
58
|
+
const u = unit(wall);
|
|
59
|
+
for (const [p, out] of [
|
|
60
|
+
[wall.end, u],
|
|
61
|
+
[wall.start, [-u[0], -u[1]]],
|
|
62
|
+
]) {
|
|
63
|
+
const end = endOf(p, wall, straight);
|
|
64
|
+
if (end === 'closed')
|
|
65
|
+
continue;
|
|
66
|
+
// The nearest thing ahead: a wall end in line, or a wall across the way.
|
|
67
|
+
let nearest = null;
|
|
68
|
+
for (const other of straight) {
|
|
69
|
+
if (other === wall)
|
|
70
|
+
continue;
|
|
71
|
+
const w = unit(other);
|
|
72
|
+
const half = (wall.thickness ?? 0.2) / 2;
|
|
73
|
+
if (Math.abs(cross(u, w)) < 0.05) {
|
|
74
|
+
for (const q of [other.start, other.end]) {
|
|
75
|
+
const v = sub(q, p);
|
|
76
|
+
const s = dot(v, out);
|
|
77
|
+
if (s > JOIN && Math.abs(cross(out, v)) < Math.max(half, (other.thickness ?? 0.2) / 2))
|
|
78
|
+
if (!nearest || s < nearest.s)
|
|
79
|
+
nearest = { s, end: [q[0], q[1]], to: other, clear: s, atEnd: true };
|
|
80
|
+
}
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (Math.abs(cross(out, w)) < 0.5)
|
|
84
|
+
continue;
|
|
85
|
+
const v = sub(other.start, p);
|
|
86
|
+
const s = cross(v, w) / cross(out, w);
|
|
87
|
+
const t = cross(v, out) / cross(out, w);
|
|
88
|
+
const length = Math.hypot(...sub(other.end, other.start));
|
|
89
|
+
// The ray meets the wall's body, which reaches half its thickness past its centreline's end.
|
|
90
|
+
const reach = Math.max(JOIN, (other.thickness ?? 0.2) / 2);
|
|
91
|
+
if (s <= JOIN || t < -reach || t > length + reach)
|
|
92
|
+
continue;
|
|
93
|
+
const clear = s - (other.thickness ?? 0.2) / 2;
|
|
94
|
+
if (!nearest || s < nearest.s)
|
|
95
|
+
nearest = {
|
|
96
|
+
s,
|
|
97
|
+
end: at(p, out, s),
|
|
98
|
+
to: other,
|
|
99
|
+
clear,
|
|
100
|
+
atEnd: t < reach || t > length - reach,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (!nearest || nearest.clear < MIN_GAP - 1e-9 || nearest.clear > MAX_OUTSIDE + 1e-9)
|
|
104
|
+
continue;
|
|
105
|
+
// From a corner, only a gap that ends at a wall end: the outside past a building's corner
|
|
106
|
+
// runs to whatever wall lies across it.
|
|
107
|
+
if (end === 'cornered' && !nearest.atEnd)
|
|
108
|
+
continue;
|
|
109
|
+
const start = [p[0], p[1]];
|
|
110
|
+
const key = [start, nearest.end]
|
|
111
|
+
.map((q) => `${Math.round(q[0] * 100)},${Math.round(q[1] * 100)}`)
|
|
112
|
+
.sort()
|
|
113
|
+
.join('|');
|
|
114
|
+
if (found.has(key))
|
|
115
|
+
continue;
|
|
116
|
+
found.set(key, {
|
|
117
|
+
start,
|
|
118
|
+
end: nearest.end,
|
|
119
|
+
// In line, the gap belongs to the thicker of its two walls (an outside wall's last jamb is
|
|
120
|
+
// often a thin stub); across, to the wall it starts from.
|
|
121
|
+
thickness: Math.abs(cross(u, unit(nearest.to))) < 0.05
|
|
122
|
+
? Math.max(wall.thickness ?? 0.2, nearest.to.thickness ?? 0.2)
|
|
123
|
+
: (wall.thickness ?? 0.2),
|
|
124
|
+
clear: nearest.clear,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// One gap per opening: two wall ends a few centimetres apart find it twice.
|
|
129
|
+
const candidates = [];
|
|
130
|
+
for (const gap of [...found.values()].sort((a, b) => a.clear - b.clear)) {
|
|
131
|
+
const centre = mid(gap);
|
|
132
|
+
const direction = unitOf(gap);
|
|
133
|
+
if (!candidates.some((kept) => Math.hypot(...sub(mid(kept), centre)) < DUPLICATE &&
|
|
134
|
+
Math.abs(cross(unitOf(kept), direction)) < 0.1))
|
|
135
|
+
candidates.push(gap);
|
|
136
|
+
}
|
|
137
|
+
return candidates;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The walls that close every gap a plan's walls leave, whatever opening each takes: a storey's
|
|
141
|
+
* outline for its roof, whether or not its doors and windows are in yet.
|
|
142
|
+
*/
|
|
143
|
+
export function gapBridges(walls) {
|
|
144
|
+
return gapCandidates(walls).map(({ start, end, thickness }) => ({
|
|
145
|
+
start,
|
|
146
|
+
end,
|
|
147
|
+
thickness,
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
const mid = (gap) => [
|
|
151
|
+
(gap.start[0] + gap.end[0]) / 2,
|
|
152
|
+
(gap.start[1] + gap.end[1]) / 2,
|
|
153
|
+
];
|
|
154
|
+
const unitOf = (gap) => {
|
|
155
|
+
const [dx, dz] = sub(gap.end, gap.start);
|
|
156
|
+
const length = Math.hypot(dx, dz);
|
|
157
|
+
return [dx / length, dz / length];
|
|
158
|
+
};
|