@ifc-lite/renderer 4.2.0 → 6.0.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/dist/camera-projection.d.ts +2 -0
- package/dist/camera-projection.d.ts.map +1 -1
- package/dist/camera-projection.js +46 -0
- package/dist/camera-projection.js.map +1 -1
- package/dist/chunk-grid.d.ts +21 -0
- package/dist/chunk-grid.d.ts.map +1 -1
- package/dist/chunk-grid.js +25 -7
- package/dist/chunk-grid.js.map +1 -1
- package/dist/clash-solid-pipeline.d.ts.map +1 -1
- package/dist/clash-solid-pipeline.js +4 -2
- package/dist/clash-solid-pipeline.js.map +1 -1
- package/dist/deviation/deviation-computer.d.ts +4 -0
- package/dist/deviation/deviation-computer.d.ts.map +1 -1
- package/dist/deviation/deviation-computer.js +20 -0
- package/dist/deviation/deviation-computer.js.map +1 -1
- package/dist/deviation/deviation-readback.d.ts +18 -0
- package/dist/deviation/deviation-readback.d.ts.map +1 -0
- package/dist/deviation/deviation-readback.js +67 -0
- package/dist/deviation/deviation-readback.js.map +1 -0
- package/dist/edge-params.d.ts +43 -0
- package/dist/edge-params.d.ts.map +1 -0
- package/dist/edge-params.js +63 -0
- package/dist/edge-params.js.map +1 -0
- package/dist/edge-pass.d.ts +54 -0
- package/dist/edge-pass.d.ts.map +1 -0
- package/dist/edge-pass.js +185 -0
- package/dist/edge-pass.js.map +1 -0
- package/dist/entity-color-table.d.ts +140 -0
- package/dist/entity-color-table.d.ts.map +1 -0
- package/dist/entity-color-table.js +238 -0
- package/dist/entity-color-table.js.map +1 -0
- package/dist/gpu-upload-guard.d.ts +1 -1
- package/dist/gpu-upload-guard.js +1 -1
- package/dist/hover-mesh-cache.d.ts +29 -0
- package/dist/hover-mesh-cache.d.ts.map +1 -0
- package/dist/hover-mesh-cache.js +31 -0
- package/dist/hover-mesh-cache.js.map +1 -0
- package/dist/index.d.ts +43 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +196 -189
- package/dist/index.js.map +1 -1
- package/dist/individual-mesh-upload.d.ts +24 -0
- package/dist/individual-mesh-upload.d.ts.map +1 -0
- package/dist/individual-mesh-upload.js +85 -0
- package/dist/individual-mesh-upload.js.map +1 -0
- package/dist/instanced-render.d.ts +22 -12
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +39 -27
- package/dist/instanced-render.js.map +1 -1
- package/dist/instanced-rte.d.ts +68 -7
- package/dist/instanced-rte.d.ts.map +1 -1
- package/dist/instanced-rte.js +98 -17
- package/dist/instanced-rte.js.map +1 -1
- package/dist/instanced-vertex-layout.d.ts +26 -0
- package/dist/instanced-vertex-layout.d.ts.map +1 -0
- package/dist/instanced-vertex-layout.js +61 -0
- package/dist/instanced-vertex-layout.js.map +1 -0
- package/dist/mesh-material.d.ts +26 -0
- package/dist/mesh-material.d.ts.map +1 -0
- package/dist/mesh-material.js +52 -0
- package/dist/mesh-material.js.map +1 -0
- package/dist/mesh-rte-uniforms.d.ts +5 -2
- package/dist/mesh-rte-uniforms.d.ts.map +1 -1
- package/dist/mesh-rte-uniforms.js +5 -2
- package/dist/mesh-rte-uniforms.js.map +1 -1
- package/dist/model-translation.d.ts.map +1 -1
- package/dist/model-translation.js +0 -7
- package/dist/model-translation.js.map +1 -1
- package/dist/outline-params.d.ts +45 -0
- package/dist/outline-params.d.ts.map +1 -0
- package/dist/outline-params.js +54 -0
- package/dist/outline-params.js.map +1 -0
- package/dist/overlay-routing.d.ts +8 -8
- package/dist/overlay-routing.js +2 -2
- package/dist/overlay-routing.js.map +1 -1
- package/dist/overlay-theme-uniforms.d.ts +54 -0
- package/dist/overlay-theme-uniforms.d.ts.map +1 -0
- package/dist/overlay-theme-uniforms.js +89 -0
- package/dist/overlay-theme-uniforms.js.map +1 -0
- package/dist/overlay-theme.d.ts +79 -0
- package/dist/overlay-theme.d.ts.map +1 -0
- package/dist/overlay-theme.js +24 -0
- package/dist/overlay-theme.js.map +1 -0
- package/dist/partial-batch-requests.d.ts +2 -2
- package/dist/pick-mesh-budget.d.ts +28 -0
- package/dist/pick-mesh-budget.d.ts.map +1 -0
- package/dist/pick-mesh-budget.js +74 -0
- package/dist/pick-mesh-budget.js.map +1 -0
- package/dist/picker-rte-uniforms.d.ts +7 -1
- package/dist/picker-rte-uniforms.d.ts.map +1 -1
- package/dist/picker-rte-uniforms.js +9 -1
- package/dist/picker-rte-uniforms.js.map +1 -1
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +15 -28
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +4 -47
- package/dist/picking-manager.js.map +1 -1
- package/dist/pipeline.d.ts +9 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +47 -70
- package/dist/pipeline.js.map +1 -1
- package/dist/point-picker.d.ts.map +1 -1
- package/dist/point-picker.js +7 -2
- package/dist/point-picker.js.map +1 -1
- package/dist/pointcloud/point-cloud-node.js +1 -1
- package/dist/pointcloud/point-cloud-node.js.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.js +3 -1
- package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -1
- package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.js +7 -1
- package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
- package/dist/post-pass-chain.d.ts +15 -2
- package/dist/post-pass-chain.d.ts.map +1 -1
- package/dist/post-pass-chain.js +49 -14
- package/dist/post-pass-chain.js.map +1 -1
- package/dist/raycast-engine.d.ts +5 -1
- package/dist/raycast-engine.d.ts.map +1 -1
- package/dist/raycast-engine.js +20 -8
- package/dist/raycast-engine.js.map +1 -1
- package/dist/raycast-point-cloud-query.d.ts +2 -0
- package/dist/raycast-point-cloud-query.d.ts.map +1 -1
- package/dist/raycast-point-cloud-query.js +7 -0
- package/dist/raycast-point-cloud-query.js.map +1 -1
- package/dist/raycast-source-curve-query.d.ts +13 -0
- package/dist/raycast-source-curve-query.d.ts.map +1 -0
- package/dist/raycast-source-curve-query.js +17 -0
- package/dist/raycast-source-curve-query.js.map +1 -0
- package/dist/reference-image-pipeline.d.ts.map +1 -1
- package/dist/reference-image-pipeline.js +4 -2
- package/dist/reference-image-pipeline.js.map +1 -1
- package/dist/relative-to-eye-abi.d.ts +36 -0
- package/dist/relative-to-eye-abi.d.ts.map +1 -0
- package/dist/relative-to-eye-abi.js +72 -0
- package/dist/relative-to-eye-abi.js.map +1 -0
- package/dist/relative-to-eye.d.ts +15 -35
- package/dist/relative-to-eye.d.ts.map +1 -1
- package/dist/relative-to-eye.js +46 -74
- package/dist/relative-to-eye.js.map +1 -1
- package/dist/render-stats.d.ts +5 -1
- package/dist/render-stats.d.ts.map +1 -1
- package/dist/render-stats.js +1 -1
- package/dist/render-stats.js.map +1 -1
- package/dist/renderer-overlays.d.ts +8 -7
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +14 -16
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/scene-batch-rebuild.d.ts +1 -2
- package/dist/scene-batch-rebuild.d.ts.map +1 -1
- package/dist/scene-batch-rebuild.js +4 -8
- package/dist/scene-batch-rebuild.js.map +1 -1
- package/dist/scene-batch-upload.d.ts.map +1 -1
- package/dist/scene-batch-upload.js +7 -3
- package/dist/scene-batch-upload.js.map +1 -1
- package/dist/scene-contents.d.ts +1 -1
- package/dist/scene-contents.d.ts.map +1 -1
- package/dist/scene-derived-batches.d.ts +19 -64
- package/dist/scene-derived-batches.d.ts.map +1 -1
- package/dist/scene-derived-batches.js +16 -51
- package/dist/scene-derived-batches.js.map +1 -1
- package/dist/scene-device-recovery.d.ts +3 -3
- package/dist/scene-device-recovery.d.ts.map +1 -1
- package/dist/scene-device-recovery.js +12 -9
- package/dist/scene-device-recovery.js.map +1 -1
- package/dist/scene-geometry.d.ts +6 -6
- package/dist/scene-geometry.d.ts.map +1 -1
- package/dist/scene-geometry.js +8 -9
- package/dist/scene-geometry.js.map +1 -1
- package/dist/scene-instance-bounds.d.ts +1 -1
- package/dist/scene-instance-bounds.d.ts.map +1 -1
- package/dist/scene-instance-bounds.js +4 -16
- package/dist/scene-instance-bounds.js.map +1 -1
- package/dist/scene-instance-materialization.d.ts.map +1 -1
- package/dist/scene-instance-materialization.js +4 -4
- package/dist/scene-instance-materialization.js.map +1 -1
- package/dist/scene-instance-translation.d.ts +6 -10
- package/dist/scene-instance-translation.d.ts.map +1 -1
- package/dist/scene-instance-translation.js +9 -31
- package/dist/scene-instance-translation.js.map +1 -1
- package/dist/scene-instance-types.d.ts +11 -2
- package/dist/scene-instance-types.d.ts.map +1 -1
- package/dist/scene-instance-types.js +7 -1
- package/dist/scene-instance-types.js.map +1 -1
- package/dist/scene-model-translation.d.ts +1 -2
- package/dist/scene-model-translation.d.ts.map +1 -1
- package/dist/scene-model-translation.js +4 -3
- package/dist/scene-model-translation.js.map +1 -1
- package/dist/scene.d.ts +44 -30
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +121 -129
- package/dist/scene.js.map +1 -1
- package/dist/section-2d-line-buffer.d.ts +2 -2
- package/dist/section-2d-line-buffer.d.ts.map +1 -1
- package/dist/section-2d-line-buffer.js +10 -11
- package/dist/section-2d-line-buffer.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +6 -4
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +45 -21
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-2d-types.d.ts +1 -1
- package/dist/section-2d-types.d.ts.map +1 -1
- package/dist/section-2d-types.js +1 -1
- package/dist/section-2d-types.js.map +1 -1
- package/dist/section-plane.d.ts +3 -0
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +18 -25
- package/dist/section-plane.js.map +1 -1
- package/dist/selection-mask-pass.d.ts +85 -0
- package/dist/selection-mask-pass.d.ts.map +1 -0
- package/dist/selection-mask-pass.js +170 -0
- package/dist/selection-mask-pass.js.map +1 -0
- package/dist/selection-mask-pipelines.d.ts +57 -0
- package/dist/selection-mask-pipelines.d.ts.map +1 -0
- package/dist/selection-mask-pipelines.js +150 -0
- package/dist/selection-mask-pipelines.js.map +1 -0
- package/dist/selection-outline-frame.d.ts +47 -0
- package/dist/selection-outline-frame.d.ts.map +1 -0
- package/dist/selection-outline-frame.js +122 -0
- package/dist/selection-outline-frame.js.map +1 -0
- package/dist/shaders/color-transfer.wgsl.d.ts +5 -3
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -1
- package/dist/shaders/color-transfer.wgsl.js +5 -3
- package/dist/shaders/color-transfer.wgsl.js.map +1 -1
- package/dist/shaders/depth-reconstruct.wgsl.d.ts +7 -2
- package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -1
- package/dist/shaders/depth-reconstruct.wgsl.js +8 -3
- package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -1
- package/dist/shaders/edges.wgsl.d.ts +20 -0
- package/dist/shaders/edges.wgsl.d.ts.map +1 -0
- package/dist/shaders/edges.wgsl.js +257 -0
- package/dist/shaders/edges.wgsl.js.map +1 -0
- package/dist/shaders/entity-color-table.wgsl.d.ts +2 -0
- package/dist/shaders/entity-color-table.wgsl.d.ts.map +1 -0
- package/dist/shaders/entity-color-table.wgsl.js +85 -0
- package/dist/shaders/entity-color-table.wgsl.js.map +1 -0
- package/dist/shaders/main.wgsl.d.ts +1 -1
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +107 -171
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/shaders/mesh-uniforms.wgsl.d.ts +2 -0
- package/dist/shaders/mesh-uniforms.wgsl.d.ts.map +1 -0
- package/dist/shaders/mesh-uniforms.wgsl.js +53 -0
- package/dist/shaders/mesh-uniforms.wgsl.js.map +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/section-2d-overlay.wgsl.js +3 -2
- package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
- package/dist/shaders/selection-mask.wgsl.d.ts +16 -0
- package/dist/shaders/selection-mask.wgsl.d.ts.map +1 -0
- package/dist/shaders/selection-mask.wgsl.js +138 -0
- package/dist/shaders/selection-mask.wgsl.js.map +1 -0
- package/dist/shaders/shadow.wgsl.d.ts +1 -1
- package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
- package/dist/shaders/shadow.wgsl.js +3 -3
- package/dist/shaders/specular.wgsl.d.ts +34 -0
- package/dist/shaders/specular.wgsl.d.ts.map +1 -0
- package/dist/shaders/specular.wgsl.js +134 -0
- package/dist/shaders/specular.wgsl.js.map +1 -0
- package/dist/shadow-occluders.d.ts.map +1 -1
- package/dist/shadow-occluders.js +1 -0
- package/dist/shadow-occluders.js.map +1 -1
- package/dist/shadow-pass.d.ts +0 -1
- package/dist/shadow-pass.d.ts.map +1 -1
- package/dist/shadow-pass.js +26 -32
- package/dist/shadow-pass.js.map +1 -1
- package/dist/shadow-types.d.ts +3 -0
- package/dist/shadow-types.d.ts.map +1 -1
- package/dist/shadow-types.js.map +1 -1
- package/dist/snap-detector.d.ts +5 -0
- package/dist/snap-detector.d.ts.map +1 -1
- package/dist/snap-detector.js.map +1 -1
- package/dist/source-curve-clipping.d.ts +7 -0
- package/dist/source-curve-clipping.d.ts.map +1 -0
- package/dist/source-curve-clipping.js +165 -0
- package/dist/source-curve-clipping.js.map +1 -0
- package/dist/source-curve-snap.d.ts +49 -0
- package/dist/source-curve-snap.d.ts.map +1 -0
- package/dist/source-curve-snap.js +197 -0
- package/dist/source-curve-snap.js.map +1 -0
- package/dist/symbolic-overlay-pipelines.d.ts +1 -1
- package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
- package/dist/symbolic-overlay-pipelines.js +13 -22
- package/dist/symbolic-overlay-pipelines.js.map +1 -1
- package/dist/symbolic-text-rte.d.ts +16 -0
- package/dist/symbolic-text-rte.d.ts.map +1 -0
- package/dist/symbolic-text-rte.js +37 -0
- package/dist/symbolic-text-rte.js.map +1 -0
- package/dist/textured-vertices.d.ts.map +1 -1
- package/dist/textured-vertices.js +2 -3
- package/dist/textured-vertices.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/visual-enhancement.d.ts +10 -7
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +9 -8
- package/dist/visual-enhancement.js.map +1 -1
- package/dist/xray-alpha.d.ts +7 -3
- package/dist/xray-alpha.d.ts.map +1 -1
- package/dist/xray-alpha.js +11 -7
- package/dist/xray-alpha.js.map +1 -1
- package/package.json +4 -4
- package/dist/post-processor.d.ts +0 -46
- package/dist/post-processor.d.ts.map +0 -1
- package/dist/post-processor.js +0 -295
- package/dist/post-processor.js.map +0 -1
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
import type { Vec3 } from './types.js';
|
|
6
6
|
import type { CameraInternalState } from './camera-state.js';
|
|
7
7
|
import type { RelativeToEyeFrame } from './relative-to-eye.js';
|
|
8
|
+
/** Capture one camera frame for all affine source-line depth checks in a pick. */
|
|
9
|
+
export declare function createProjectableLineInterval(frame: RelativeToEyeFrame): (start: Vec3, end: Vec3) => readonly [number, number] | null;
|
|
8
10
|
/**
|
|
9
11
|
* Handles projection math: screen-to-world and world-to-screen conversions,
|
|
10
12
|
* bounding box fitting, and near/far plane management.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-projection.d.ts","sourceRoot":"","sources":["../src/camera-projection.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-projection.d.ts","sourceRoot":"","sources":["../src/camera-projection.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,kFAAkF;AAClF,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,kBAAkB,GACxB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAiC9D;AAgBD;;;GAGG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAFlB,KAAK,EAAE,mBAAmB,EAC1B,cAAc,EAAE,MAAM,IAAI,EAC1B,kBAAkB,EAAE,kBAAkB;IAGzD;;;;;;OAMG;IACH,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAqC3G;;;;;;;OAOG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE;IAgG9H;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI;IAiCvC;;;;OAIG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAG7C"}
|
|
@@ -3,6 +3,52 @@
|
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
import { MathUtils, viewBasis } from './math.js';
|
|
5
5
|
import { DEFAULT_ORTHO_SIZE, isUsableBounds } from './camera-guards.js';
|
|
6
|
+
/** Capture one camera frame for all affine source-line depth checks in a pick. */
|
|
7
|
+
export function createProjectableLineInterval(frame) {
|
|
8
|
+
if (!frame.isAvailable())
|
|
9
|
+
return () => null;
|
|
10
|
+
const snapshot = frame.snapshot();
|
|
11
|
+
const m = snapshot.getViewProjection().m;
|
|
12
|
+
const depth = (p) => ({
|
|
13
|
+
z: m[2] * p[0] + m[6] * p[1] + m[10] * p[2] + m[14],
|
|
14
|
+
w: m[3] * p[0] + m[7] * p[1] + m[11] * p[2] + m[15],
|
|
15
|
+
});
|
|
16
|
+
return (start, end) => {
|
|
17
|
+
const a = snapshot.worldToRelative([start.x, start.y, start.z]);
|
|
18
|
+
const b = snapshot.worldToRelative([end.x, end.y, end.z]);
|
|
19
|
+
if (![...a, ...b].every(Number.isFinite))
|
|
20
|
+
return null;
|
|
21
|
+
const first = depth(a), last = depth(b);
|
|
22
|
+
if (![first.z, first.w, last.z, last.w].every(Number.isFinite))
|
|
23
|
+
return null;
|
|
24
|
+
let low = 0, high = 1;
|
|
25
|
+
// projectToScreen requires W > 0 and -1 <= Z/W <= 1. With positive W,
|
|
26
|
+
// these are three linear halfspaces along an affine source line.
|
|
27
|
+
for (const [from, to] of [
|
|
28
|
+
[first.w, last.w],
|
|
29
|
+
[first.w + first.z, last.w + last.z],
|
|
30
|
+
[first.w - first.z, last.w - last.z],
|
|
31
|
+
]) {
|
|
32
|
+
const slope = to - from;
|
|
33
|
+
if (slope === 0) {
|
|
34
|
+
if (from < 0)
|
|
35
|
+
return null;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const root = -from / slope;
|
|
39
|
+
if (slope > 0)
|
|
40
|
+
low = Math.max(low, root);
|
|
41
|
+
else
|
|
42
|
+
high = Math.min(high, root);
|
|
43
|
+
if (low > high)
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
// W=0 is excluded even when it lies on the other two plane boundaries.
|
|
47
|
+
if (!(first.w + (last.w - first.w) * ((low + high) / 2) > 0))
|
|
48
|
+
return null;
|
|
49
|
+
return [low, high];
|
|
50
|
+
};
|
|
51
|
+
}
|
|
6
52
|
/**
|
|
7
53
|
* One NDC axis: `screen / extent * scale + offset`, degrading to the centre
|
|
8
54
|
* of the axis when the extent is unusable.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-projection.js","sourceRoot":"","sources":["../src/camera-projection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"camera-projection.js","sourceRoot":"","sources":["../src/camera-projection.ts"],"names":[],"mappings":"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"}
|
package/dist/chunk-grid.d.ts
CHANGED
|
@@ -56,5 +56,26 @@ export declare function chunkCellKey(mesh: ChunkAnchorSource, cellSize: number):
|
|
|
56
56
|
* ("~" cannot collide: colour keys are `r|g|b|a` integers, cell keys are
|
|
57
57
|
* `cx,cy,cz` integers, and the overflow suffix uses "#".)
|
|
58
58
|
*/
|
|
59
|
+
/** Metallic/roughness slice of `Material` a colour key can fold in. */
|
|
60
|
+
export interface MaterialKeySource {
|
|
61
|
+
metallic?: number;
|
|
62
|
+
roughness?: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Colour key for grouping meshes into batches: RGBA quantized to 1000
|
|
66
|
+
* levels, packed as `r|g|b|a`, with an IFC-authored metallic/roughness
|
|
67
|
+
* suffix (#5582), quantized the same way. `createSceneBatch` patches one
|
|
68
|
+
* material row per batch (`scene-batch-upload.ts`) from its first piece, so
|
|
69
|
+
* two pieces landing in the same bucket draw with that one finish — the
|
|
70
|
+
* 1/1000 quantization means finishes closer than 0.001 apart (e.g. metallic
|
|
71
|
+
* or roughness 0.1001 vs 0.1004) share a batch and its first piece's exact
|
|
72
|
+
* value, same as the pre-#5582 colour quantization already accepted for hue.
|
|
73
|
+
* That is intentional, not a bug: a difference below 1/1000 is not visually
|
|
74
|
+
* distinguishable, so two pieces THAT close were always going to render
|
|
75
|
+
* alike. The suffix is omitted (not "0|0") when neither field is authored,
|
|
76
|
+
* so an unauthored piece keeps its pre-#5582 key exactly — no batch churn
|
|
77
|
+
* for the overwhelmingly common case.
|
|
78
|
+
*/
|
|
79
|
+
export declare function colorKey(color: readonly [number, number, number, number], material?: MaterialKeySource): string;
|
|
59
80
|
export declare function bucketBaseKeyFor(mesh: ChunkAnchorSource, colorKey: string, chunking: SpatialChunkingConfig | null): string;
|
|
60
81
|
//# sourceMappingURL=chunk-grid.d.ts.map
|
package/dist/chunk-grid.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-grid.d.ts","sourceRoot":"","sources":["../src/chunk-grid.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GACrC,MAAM,CAGR"}
|
|
1
|
+
{"version":3,"file":"chunk-grid.d.ts","sourceRoot":"","sources":["../src/chunk-grid.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB9E;AAED;;;;;;;;GAQG;AACH,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAChD,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,MAAM,CAUR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GACrC,MAAM,CAGR"}
|
package/dist/chunk-grid.js
CHANGED
|
@@ -31,14 +31,32 @@ export function chunkCellKey(mesh, cellSize) {
|
|
|
31
31
|
return `${cx},${cy},${cz}`;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
34
|
+
* Colour key for grouping meshes into batches: RGBA quantized to 1000
|
|
35
|
+
* levels, packed as `r|g|b|a`, with an IFC-authored metallic/roughness
|
|
36
|
+
* suffix (#5582), quantized the same way. `createSceneBatch` patches one
|
|
37
|
+
* material row per batch (`scene-batch-upload.ts`) from its first piece, so
|
|
38
|
+
* two pieces landing in the same bucket draw with that one finish — the
|
|
39
|
+
* 1/1000 quantization means finishes closer than 0.001 apart (e.g. metallic
|
|
40
|
+
* or roughness 0.1001 vs 0.1004) share a batch and its first piece's exact
|
|
41
|
+
* value, same as the pre-#5582 colour quantization already accepted for hue.
|
|
42
|
+
* That is intentional, not a bug: a difference below 1/1000 is not visually
|
|
43
|
+
* distinguishable, so two pieces THAT close were always going to render
|
|
44
|
+
* alike. The suffix is omitted (not "0|0") when neither field is authored,
|
|
45
|
+
* so an unauthored piece keeps its pre-#5582 key exactly — no batch churn
|
|
46
|
+
* for the overwhelmingly common case.
|
|
41
47
|
*/
|
|
48
|
+
export function colorKey(color, material) {
|
|
49
|
+
const r = Math.round(color[0] * 1000);
|
|
50
|
+
const g = Math.round(color[1] * 1000);
|
|
51
|
+
const b = Math.round(color[2] * 1000);
|
|
52
|
+
const a = Math.round(color[3] * 1000);
|
|
53
|
+
const base = `${r}|${g}|${b}|${a}`;
|
|
54
|
+
if (material?.metallic === undefined && material?.roughness === undefined)
|
|
55
|
+
return base;
|
|
56
|
+
const m = material.metallic !== undefined ? Math.round(material.metallic * 1000) : '';
|
|
57
|
+
const rg = material.roughness !== undefined ? Math.round(material.roughness * 1000) : '';
|
|
58
|
+
return `${base}|${m}|${rg}`;
|
|
59
|
+
}
|
|
42
60
|
export function bucketBaseKeyFor(mesh, colorKey, chunking) {
|
|
43
61
|
if (!chunking)
|
|
44
62
|
return colorKey;
|
package/dist/chunk-grid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk-grid.js","sourceRoot":"","sources":["../src/chunk-grid.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAyC/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAuB,EAAE,QAAgB;IACpE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"chunk-grid.js","sourceRoot":"","sources":["../src/chunk-grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clash-solid-pipeline.d.ts","sourceRoot":"","sources":["../src/clash-solid-pipeline.ts"],"names":[],"mappings":"AAgCA,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,SAAS,EAAE,YAAY,GAAG,YAAY,CAAC;IACvC,iFAAiF;IACjF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,6CAA6C;IAC7C,OAAO,EAAE,WAAW,CAAC;IACrB,mEAAmE;IACnE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,EACtB,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACzC,YAAY,CAkBd;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,MAAM,CAAuC;gBAEzC,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,GAAE,MAAU;IAM5F,OAAO,CAAC,IAAI;IAoFZ,mDAAmD;IACnD,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAmC3C,WAAW,IAAI,OAAO;IAItB,MAAM,CACJ,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,YAAY,EACtB,WAAW,CAAC,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC5C,IAAI;
|
|
1
|
+
{"version":3,"file":"clash-solid-pipeline.d.ts","sourceRoot":"","sources":["../src/clash-solid-pipeline.ts"],"names":[],"mappings":"AAgCA,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,SAAS,EAAE,YAAY,GAAG,YAAY,CAAC;IACvC,iFAAiF;IACjF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,6CAA6C;IAC7C,OAAO,EAAE,WAAW,CAAC;IACrB,mEAAmE;IACnE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,EACtB,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACzC,YAAY,CAkBd;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,MAAM,CAAuC;gBAEzC,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,GAAE,MAAU;IAM5F,OAAO,CAAC,IAAI;IAoFZ,mDAAmD;IACnD,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAmC3C,WAAW,IAAI,OAAO;IAItB,MAAM,CACJ,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,YAAY,EACtB,WAAW,CAAC,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC5C,IAAI;IAkBP,OAAO,IAAI,IAAI;CAWhB"}
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { SYMBOLIC_FILL_WGSL } from './shaders/symbolic-overlay.wgsl.js';
|
|
26
26
|
import { PIPELINE_CONSTANTS } from './constants.js';
|
|
27
|
-
import {
|
|
27
|
+
import { tryPackRteDrawableDelta } from './relative-to-eye.js';
|
|
28
28
|
const VERTEX_STRIDE_BYTES = (3 + 4) * 4; // pos.xyz + color.rgba, 4 bytes each
|
|
29
29
|
/**
|
|
30
30
|
* Expand an indexed triangle mesh + single colour into the flat
|
|
@@ -190,7 +190,9 @@ export class ClashSolidPipeline {
|
|
|
190
190
|
uniform.set(viewProj, 0);
|
|
191
191
|
if (this.origin && rteViewProj && rteCamera) {
|
|
192
192
|
uniform.set(rteViewProj, 16);
|
|
193
|
-
|
|
193
|
+
// Outside this camera's RTE envelope: not rasterisable this frame (#6128).
|
|
194
|
+
if (!tryPackRteDrawableDelta(this.origin, rteCamera, uniform, 32))
|
|
195
|
+
return;
|
|
194
196
|
uniform[35] = 1;
|
|
195
197
|
}
|
|
196
198
|
this.device.queue.writeBuffer(this.uniformBuffer, 0, uniform);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clash-solid-pipeline.js","sourceRoot":"","sources":["../src/clash-solid-pipeline.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"clash-solid-pipeline.js","sourceRoot":"","sources":["../src/clash-solid-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { WebGPUDevice } from '../device.js';
|
|
2
2
|
import type { Scene } from '../scene.js';
|
|
3
3
|
import type { PointCloudRenderer } from '../pointcloud/point-cloud-renderer.js';
|
|
4
|
+
import { type DeviationAssetStats } from './deviation-readback.js';
|
|
4
5
|
/** Tuning knobs for a single `DeviationComputer.compute` run. */
|
|
5
6
|
export interface DeviationComputeOptions {
|
|
6
7
|
/** Clip range applied during compute. 0 → no clip. Default 1m. */
|
|
@@ -37,6 +38,7 @@ export interface DeviationComputeResult {
|
|
|
37
38
|
*/
|
|
38
39
|
export declare class DeviationComputer {
|
|
39
40
|
private pipeline;
|
|
41
|
+
private computedBuffers;
|
|
40
42
|
/**
|
|
41
43
|
* Cache of which mesh-set the BVH was built from. We rebuild on
|
|
42
44
|
* `computeDeviations` only when the cached "fingerprint" misses,
|
|
@@ -60,6 +62,8 @@ export declare class DeviationComputer {
|
|
|
60
62
|
* instead of failing loudly.
|
|
61
63
|
*/
|
|
62
64
|
init(device: GPUDevice): void;
|
|
65
|
+
/** Export-only GPU readback; each row belongs to one scan asset. */
|
|
66
|
+
readAssetStats(ctx: DeviationComputeContext): Promise<DeviationAssetStats[]>;
|
|
63
67
|
/**
|
|
64
68
|
* Compute BIM ↔ scan deviation for every loaded point cloud asset.
|
|
65
69
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviation-computer.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-computer.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"deviation-computer.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-computer.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AA2C5F,iEAAiE;AACjE,MAAM,WAAW,uBAAuB;IACpC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAChF,kBAAkB,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,eAAe,CAAmC;IAC1D;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAAuB;IAE7C;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAO7B,oEAAoE;IAC9D,cAAc,CAAC,GAAG,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAelF;;;;;;;;;;;;;;;;OAgBG;IACG,OAAO,CACT,IAAI,EAAE,uBAAuB,EAC7B,GAAG,EAAE,uBAAuB,GAC7B,OAAO,CAAC,sBAAsB,CAAC;IA2FlC;;;OAGG;IACH,OAAO,IAAI,IAAI;CAMlB"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { DeviationPipeline } from './deviation-pipeline.js';
|
|
18
18
|
import { buildTriangleBVH } from './triangle-bvh.js';
|
|
19
|
+
import { readDeviationAssetStats } from './deviation-readback.js';
|
|
19
20
|
/**
|
|
20
21
|
* Build a deterministic fingerprint of the BVH input mesh set so
|
|
21
22
|
* `Renderer.computeDeviations` can skip the rebuild when the source
|
|
@@ -64,6 +65,7 @@ function collectAllSceneMeshes(scene) {
|
|
|
64
65
|
*/
|
|
65
66
|
export class DeviationComputer {
|
|
66
67
|
pipeline = null;
|
|
68
|
+
computedBuffers = null;
|
|
67
69
|
/**
|
|
68
70
|
* Cache of which mesh-set the BVH was built from. We rebuild on
|
|
69
71
|
* `computeDeviations` only when the cached "fingerprint" misses,
|
|
@@ -90,6 +92,19 @@ export class DeviationComputer {
|
|
|
90
92
|
this.pipeline?.destroy();
|
|
91
93
|
this.pipeline = new DeviationPipeline(device);
|
|
92
94
|
this.bvhFingerprint = null;
|
|
95
|
+
this.computedBuffers = null;
|
|
96
|
+
}
|
|
97
|
+
/** Export-only GPU readback; each row belongs to one scan asset. */
|
|
98
|
+
async readAssetStats(ctx) {
|
|
99
|
+
const computed = this.computedBuffers;
|
|
100
|
+
if (!computed || !ctx.pointCloudRenderer) {
|
|
101
|
+
throw new Error('No completed deviation run to export.');
|
|
102
|
+
}
|
|
103
|
+
const rows = await readDeviationAssetStats(ctx.device.getDevice(), ctx.pointCloudRenderer.getInternalNodes(), (buffer) => computed.has(buffer));
|
|
104
|
+
if (this.computedBuffers !== computed) {
|
|
105
|
+
throw new Error('Deviation results changed during export. Recompute and try again.');
|
|
106
|
+
}
|
|
107
|
+
return rows;
|
|
93
108
|
}
|
|
94
109
|
/**
|
|
95
110
|
* Compute BIM ↔ scan deviation for every loaded point cloud asset.
|
|
@@ -112,6 +127,7 @@ export class DeviationComputer {
|
|
|
112
127
|
if (!this.pipeline || !ctx.pointCloudRenderer) {
|
|
113
128
|
throw new Error('Renderer not initialised — call init() first.');
|
|
114
129
|
}
|
|
130
|
+
this.computedBuffers = null;
|
|
115
131
|
const meshes = collectAllSceneMeshes(ctx.scene);
|
|
116
132
|
// Fingerprint folds in per-mesh expressId / modelIndex /
|
|
117
133
|
// positions length / triangle count, so two distinct meshes
|
|
@@ -134,6 +150,7 @@ export class DeviationComputer {
|
|
|
134
150
|
const encoder = ctx.device.getDevice().createCommandEncoder({ label: 'pointcloud-deviation' });
|
|
135
151
|
let chunksProcessed = 0;
|
|
136
152
|
let pointsProcessed = 0;
|
|
153
|
+
const computedBuffers = new WeakSet();
|
|
137
154
|
const nodes = ctx.pointCloudRenderer.getInternalNodes();
|
|
138
155
|
for (const node of nodes) {
|
|
139
156
|
for (const chunk of node.chunks) {
|
|
@@ -152,6 +169,7 @@ export class DeviationComputer {
|
|
|
152
169
|
if (ok) {
|
|
153
170
|
chunksProcessed++;
|
|
154
171
|
pointsProcessed += chunk.pointCount;
|
|
172
|
+
computedBuffers.add(chunk.deviationBuffer);
|
|
155
173
|
}
|
|
156
174
|
}
|
|
157
175
|
}
|
|
@@ -171,6 +189,7 @@ export class DeviationComputer {
|
|
|
171
189
|
// them.
|
|
172
190
|
this.pipeline.releaseTransientParams();
|
|
173
191
|
}
|
|
192
|
+
this.computedBuffers = computedBuffers;
|
|
174
193
|
ctx.requestRender();
|
|
175
194
|
// Suggest a default half-range = max(0.01m, max-extent / 1000).
|
|
176
195
|
// Tighter than the maxRange clip; gives the user a reasonable
|
|
@@ -196,6 +215,7 @@ export class DeviationComputer {
|
|
|
196
215
|
this.pipeline?.destroy();
|
|
197
216
|
this.pipeline = null;
|
|
198
217
|
this.bvhFingerprint = null;
|
|
218
|
+
this.computedBuffers = null;
|
|
199
219
|
}
|
|
200
220
|
}
|
|
201
221
|
//# sourceMappingURL=deviation-computer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviation-computer.js","sourceRoot":"","sources":["../../src/deviation/deviation-computer.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"deviation-computer.js","sourceRoot":"","sources":["../../src/deviation/deviation-computer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PointCloudNode } from '../pointcloud/point-cloud-node.js';
|
|
2
|
+
/** One scan asset's measured signed distances in metres. */
|
|
3
|
+
export interface DeviationAssetStats {
|
|
4
|
+
expressId: number;
|
|
5
|
+
modelIndex: number;
|
|
6
|
+
pointsProcessed: number;
|
|
7
|
+
finitePoints: number;
|
|
8
|
+
minimumDeviation: number | null;
|
|
9
|
+
maximumDeviation: number | null;
|
|
10
|
+
meanDeviation: number | null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Read signed distances only for an explicit export. One staging buffer is
|
|
14
|
+
* alive at a time, so a large scan never needs a second full copy in RAM or
|
|
15
|
+
* VRAM. The normal deviation compute and render path does no readback.
|
|
16
|
+
*/
|
|
17
|
+
export declare function readDeviationAssetStats(device: GPUDevice, nodes: Iterable<PointCloudNode>, wasComputed: (buffer: GPUBuffer) => boolean): Promise<DeviationAssetStats[]>;
|
|
18
|
+
//# sourceMappingURL=deviation-readback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviation-readback.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-readback.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CACzC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC/B,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,GAC5C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAmDhC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* Read signed distances only for an explicit export. One staging buffer is
|
|
6
|
+
* alive at a time, so a large scan never needs a second full copy in RAM or
|
|
7
|
+
* VRAM. The normal deviation compute and render path does no readback.
|
|
8
|
+
*/
|
|
9
|
+
export async function readDeviationAssetStats(device, nodes, wasComputed) {
|
|
10
|
+
const results = [];
|
|
11
|
+
for (const node of nodes) {
|
|
12
|
+
let count = 0;
|
|
13
|
+
let finiteCount = 0;
|
|
14
|
+
let sum = 0;
|
|
15
|
+
let min = Infinity;
|
|
16
|
+
let max = -Infinity;
|
|
17
|
+
for (const chunk of node.chunks) {
|
|
18
|
+
if (!wasComputed(chunk.deviationBuffer) || chunk.pointCount === 0)
|
|
19
|
+
continue;
|
|
20
|
+
const size = chunk.pointCount * Float32Array.BYTES_PER_ELEMENT;
|
|
21
|
+
const staging = device.createBuffer({
|
|
22
|
+
size,
|
|
23
|
+
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
|
|
24
|
+
});
|
|
25
|
+
let mapped = false;
|
|
26
|
+
try {
|
|
27
|
+
const encoder = device.createCommandEncoder({ label: 'deviation-csv-readback' });
|
|
28
|
+
encoder.copyBufferToBuffer(chunk.deviationBuffer, 0, staging, 0, size);
|
|
29
|
+
device.queue.submit([encoder.finish()]);
|
|
30
|
+
await staging.mapAsync(GPUMapMode.READ);
|
|
31
|
+
mapped = true;
|
|
32
|
+
const values = new Float32Array(staging.getMappedRange());
|
|
33
|
+
count += values.length;
|
|
34
|
+
for (const value of values) {
|
|
35
|
+
if (!Number.isFinite(value))
|
|
36
|
+
continue;
|
|
37
|
+
finiteCount++;
|
|
38
|
+
sum += value;
|
|
39
|
+
min = Math.min(min, value);
|
|
40
|
+
max = Math.max(max, value);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
try {
|
|
45
|
+
if (mapped)
|
|
46
|
+
staging.unmap();
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
staging.destroy();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (count === 0)
|
|
54
|
+
continue;
|
|
55
|
+
results.push({
|
|
56
|
+
expressId: node.meta.expressId,
|
|
57
|
+
modelIndex: node.meta.modelIndex ?? 0,
|
|
58
|
+
pointsProcessed: count,
|
|
59
|
+
finitePoints: finiteCount,
|
|
60
|
+
minimumDeviation: finiteCount > 0 ? min : null,
|
|
61
|
+
maximumDeviation: finiteCount > 0 ? max : null,
|
|
62
|
+
meanDeviation: finiteCount > 0 ? sum / finiteCount : null,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return results;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=deviation-readback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviation-readback.js","sourceRoot":"","sources":["../../src/deviation/deviation-readback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Mat4, SeparationLinesQuality } from './types.js';
|
|
2
|
+
export type EdgeQuality = Exclude<SeparationLinesQuality, 'off'>;
|
|
3
|
+
export interface EdgeQualityPreset {
|
|
4
|
+
/** Tap directions: 4 (cardinal) at low, 8 (+ diagonals) at high. */
|
|
5
|
+
directions: 4 | 8;
|
|
6
|
+
}
|
|
7
|
+
export declare const EDGE_QUALITY_PRESETS: Readonly<Record<EdgeQuality, EdgeQualityPreset>>;
|
|
8
|
+
/** Crease angle (degrees) above which two adjacent face normals draw an edge. */
|
|
9
|
+
export declare const EDGE_CREASE_ANGLE_DEG = 25;
|
|
10
|
+
export declare const EDGE_CREASE_COS: number;
|
|
11
|
+
/**
|
|
12
|
+
* Relative view-space depth jump (fraction of the nearer depth) above which
|
|
13
|
+
* a step reads as a silhouette rather than a coplanar seam. Linear (view
|
|
14
|
+
* space), unlike the old pass's threshold over raw reverse-Z depth, so it
|
|
15
|
+
* does not need a slope-aware fallback to avoid grazing-angle false edges.
|
|
16
|
+
*/
|
|
17
|
+
export declare const EDGE_SILHOUETTE_REL_THRESHOLD = 0.01;
|
|
18
|
+
/** Darkening never exceeds this, matching the old separation-line cap. */
|
|
19
|
+
export declare const EDGE_MAX_DARKEN = 0.35;
|
|
20
|
+
/** Float offsets of the `EdgeParams` struct fields in `shaders/edges.wgsl.ts`. */
|
|
21
|
+
export declare const EDGE_UNIFORM_LAYOUT: {
|
|
22
|
+
readonly depthParams: 0;
|
|
23
|
+
readonly xyParams: 4;
|
|
24
|
+
readonly viewport: 8;
|
|
25
|
+
readonly edge: 12;
|
|
26
|
+
};
|
|
27
|
+
/** Byte size of `EdgeParams` (4 vec4s). */
|
|
28
|
+
export declare const EDGE_UNIFORM_BYTES: number;
|
|
29
|
+
export interface EdgeFrameParams {
|
|
30
|
+
/** Camera projection the frame was drawn with (reverse-Z). */
|
|
31
|
+
projection: Mat4;
|
|
32
|
+
/** Drawing-buffer size in pixels. */
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
quality: EdgeQuality;
|
|
36
|
+
/** Tap distance in pixels, already scaled by device pixel ratio. */
|
|
37
|
+
radiusPx: number;
|
|
38
|
+
/** Darkening strength, already clamped to [0, 1]. */
|
|
39
|
+
intensity: number;
|
|
40
|
+
}
|
|
41
|
+
/** Pack one frame's `EdgeParams` into `out` (`EDGE_UNIFORM_BYTES / 4` floats). */
|
|
42
|
+
export declare function packEdgeUniforms(out: Float32Array, frame: EdgeFrameParams): void;
|
|
43
|
+
//# sourceMappingURL=edge-params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-params.d.ts","sourceRoot":"","sources":["../src/edge-params.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;CACnB;AAED,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAGjF,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,eAAe,QAAoD,CAAC;AAEjF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAElD,0EAA0E;AAC1E,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,kFAAkF;AAClF,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX,2CAA2C;AAC3C,eAAO,MAAM,kBAAkB,QAAqC,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,UAAU,EAAE,IAAI,CAAC;IACjB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAahF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* CPU side of the edge pass (#5385): quality presets and the uniform layout
|
|
6
|
+
* shared with `shaders/edges.wgsl.ts`. Pure functions, so the numbers the
|
|
7
|
+
* GPU sees are unit-tested. Reuses `depth-reconstruct.ts` for the projection
|
|
8
|
+
* params the shader needs to rebuild view-space position and normals from
|
|
9
|
+
* depth, the same way `ao-params.ts` does (#5384).
|
|
10
|
+
*
|
|
11
|
+
* The old separation-line pass fired only on an entity-id change, read raw
|
|
12
|
+
* (non-linear, reverse-Z) depth a fixed 1-3 px apart, and thresholded that
|
|
13
|
+
* difference as a hard boolean, which is why storey joints on a flat facade
|
|
14
|
+
* flickered into dashes (the per-pixel slope crosses the threshold, not the
|
|
15
|
+
* geometry). This pass instead:
|
|
16
|
+
* - also fires on a normal crease (a real angle, not a coplanar seam) and a
|
|
17
|
+
* depth silhouette, both in linear view-space units;
|
|
18
|
+
* - blends a coverage estimate over several tap directions (as the old pass
|
|
19
|
+
* already did for its id test, `edge4Count * 0.25`) instead of a single
|
|
20
|
+
* hard sample, so a line antialiases instead of dashing.
|
|
21
|
+
*/
|
|
22
|
+
import { depthReconstructParams } from './depth-reconstruct.js';
|
|
23
|
+
export const EDGE_QUALITY_PRESETS = {
|
|
24
|
+
low: { directions: 4 },
|
|
25
|
+
high: { directions: 8 },
|
|
26
|
+
};
|
|
27
|
+
/** Crease angle (degrees) above which two adjacent face normals draw an edge. */
|
|
28
|
+
export const EDGE_CREASE_ANGLE_DEG = 25;
|
|
29
|
+
export const EDGE_CREASE_COS = Math.cos((EDGE_CREASE_ANGLE_DEG * Math.PI) / 180);
|
|
30
|
+
/**
|
|
31
|
+
* Relative view-space depth jump (fraction of the nearer depth) above which
|
|
32
|
+
* a step reads as a silhouette rather than a coplanar seam. Linear (view
|
|
33
|
+
* space), unlike the old pass's threshold over raw reverse-Z depth, so it
|
|
34
|
+
* does not need a slope-aware fallback to avoid grazing-angle false edges.
|
|
35
|
+
*/
|
|
36
|
+
export const EDGE_SILHOUETTE_REL_THRESHOLD = 0.01;
|
|
37
|
+
/** Darkening never exceeds this, matching the old separation-line cap. */
|
|
38
|
+
export const EDGE_MAX_DARKEN = 0.35;
|
|
39
|
+
/** Float offsets of the `EdgeParams` struct fields in `shaders/edges.wgsl.ts`. */
|
|
40
|
+
export const EDGE_UNIFORM_LAYOUT = {
|
|
41
|
+
depthParams: 0,
|
|
42
|
+
xyParams: 4,
|
|
43
|
+
viewport: 8,
|
|
44
|
+
edge: 12,
|
|
45
|
+
};
|
|
46
|
+
/** Byte size of `EdgeParams` (4 vec4s). */
|
|
47
|
+
export const EDGE_UNIFORM_BYTES = (EDGE_UNIFORM_LAYOUT.edge + 4) * 4;
|
|
48
|
+
/** Pack one frame's `EdgeParams` into `out` (`EDGE_UNIFORM_BYTES / 4` floats). */
|
|
49
|
+
export function packEdgeUniforms(out, frame) {
|
|
50
|
+
const recon = depthReconstructParams(frame.projection);
|
|
51
|
+
const L = EDGE_UNIFORM_LAYOUT;
|
|
52
|
+
out.set(recon.depth, L.depthParams);
|
|
53
|
+
out.set(recon.xy, L.xyParams);
|
|
54
|
+
out[L.viewport] = frame.width;
|
|
55
|
+
out[L.viewport + 1] = frame.height;
|
|
56
|
+
out[L.viewport + 2] = 1 / frame.width;
|
|
57
|
+
out[L.viewport + 3] = 1 / frame.height;
|
|
58
|
+
out[L.edge] = Math.max(1, frame.radiusPx);
|
|
59
|
+
out[L.edge + 1] = frame.intensity;
|
|
60
|
+
out[L.edge + 2] = EDGE_QUALITY_PRESETS[frame.quality].directions === 8 ? 1 : 0;
|
|
61
|
+
out[L.edge + 3] = 0;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=edge-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-params.js","sourceRoot":"","sources":["../src/edge-params.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAUhE,MAAM,CAAC,MAAM,oBAAoB,GAAqD;IACpF,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;IACtB,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;CACxB,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,qBAAqB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAElD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,EAAE;CACA,CAAC;AAEX,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAerE,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,GAAiB,EAAE,KAAsB;IACxE,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,mBAAmB,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACnC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IACtC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC"}
|