@ifc-lite/geometry 7.6.0 → 7.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -0
- package/dist/domain-export-call.d.ts +4 -0
- package/dist/domain-export-call.d.ts.map +1 -0
- package/dist/domain-export-call.js +19 -0
- package/dist/domain-export-call.js.map +1 -0
- package/dist/geometry-parallel-options.d.ts +15 -0
- package/dist/geometry-parallel-options.d.ts.map +1 -1
- package/dist/geometry-parallel.d.ts +2 -47
- package/dist/geometry-parallel.d.ts.map +1 -1
- package/dist/geometry-parallel.js +50 -146
- package/dist/geometry-parallel.js.map +1 -1
- package/dist/geometry-worker-pool.d.ts +72 -0
- package/dist/geometry-worker-pool.d.ts.map +1 -0
- package/dist/geometry-worker-pool.js +176 -0
- package/dist/geometry-worker-pool.js.map +1 -0
- package/dist/geometry.worker.d.ts.map +1 -1
- package/dist/geometry.worker.js +34 -36
- package/dist/geometry.worker.js.map +1 -1
- package/dist/huge-file-error.d.ts +1 -2
- package/dist/huge-file-error.d.ts.map +1 -1
- package/dist/huge-file-error.js +4 -5
- package/dist/huge-file-error.js.map +1 -1
- package/dist/hung-job-recovery.d.ts +26 -2
- package/dist/hung-job-recovery.d.ts.map +1 -1
- package/dist/hung-job-recovery.js +42 -7
- package/dist/hung-job-recovery.js.map +1 -1
- package/dist/ifc-lite-bridge.d.ts +2 -0
- package/dist/ifc-lite-bridge.d.ts.map +1 -1
- package/dist/ifc-lite-bridge.js +19 -35
- package/dist/ifc-lite-bridge.js.map +1 -1
- package/dist/in-call-heartbeat.d.ts +20 -0
- package/dist/in-call-heartbeat.d.ts.map +1 -0
- package/dist/in-call-heartbeat.js +39 -0
- package/dist/in-call-heartbeat.js.map +1 -0
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -30
- package/dist/index.js.map +1 -1
- package/dist/main-engine-init.d.ts +5 -0
- package/dist/main-engine-init.d.ts.map +1 -0
- package/dist/main-engine-init.js +42 -0
- package/dist/main-engine-init.js.map +1 -0
- package/dist/map-normalization-capability.d.ts +7 -0
- package/dist/map-normalization-capability.d.ts.map +1 -0
- package/dist/map-normalization-capability.js +32 -0
- package/dist/map-normalization-capability.js.map +1 -0
- package/dist/native-bridge.d.ts +1 -0
- package/dist/native-bridge.d.ts.map +1 -1
- package/dist/native-bridge.js +1 -0
- package/dist/native-bridge.js.map +1 -1
- package/dist/perf-flags.d.ts +55 -0
- package/dist/perf-flags.d.ts.map +1 -0
- package/dist/perf-flags.js +66 -0
- package/dist/perf-flags.js.map +1 -0
- package/dist/platform-bridge.d.ts +2 -0
- package/dist/platform-bridge.d.ts.map +1 -1
- package/dist/platform-bridge.js.map +1 -1
- package/dist/prepass-routing.d.ts +53 -0
- package/dist/prepass-routing.d.ts.map +1 -0
- package/dist/prepass-routing.js +100 -0
- package/dist/prepass-routing.js.map +1 -0
- package/dist/remesh/remesh-client.d.ts.map +1 -1
- package/dist/remesh/remesh-client.js +5 -1
- package/dist/remesh/remesh-client.js.map +1 -1
- package/dist/remesh/remesh-core.d.ts.map +1 -1
- package/dist/remesh/remesh-core.js +29 -11
- package/dist/remesh/remesh-core.js.map +1 -1
- package/dist/remesh/remesh-protocol.d.ts +10 -4
- package/dist/remesh/remesh-protocol.d.ts.map +1 -1
- package/dist/remesh/remesh-protocol.js.map +1 -1
- package/dist/remesh/remesh.worker.js +25 -10
- package/dist/remesh/remesh.worker.js.map +1 -1
- package/dist/scan-proposals.d.ts +132 -0
- package/dist/scan-proposals.d.ts.map +1 -0
- package/dist/scan-proposals.js +12 -0
- package/dist/scan-proposals.js.map +1 -0
- package/dist/scan-segmentation.d.ts +205 -0
- package/dist/scan-segmentation.d.ts.map +1 -0
- package/dist/scan-segmentation.js +17 -0
- package/dist/scan-segmentation.js.map +1 -0
- package/dist/warm-pool.d.ts +27 -0
- package/dist/warm-pool.d.ts.map +1 -0
- package/dist/warm-pool.js +48 -0
- package/dist/warm-pool.js.map +1 -0
- package/dist/wasm-shared-module.d.ts +17 -19
- package/dist/wasm-shared-module.d.ts.map +1 -1
- package/dist/wasm-shared-module.js +90 -77
- package/dist/wasm-shared-module.js.map +1 -1
- package/dist/wasm-streaming-guard.d.ts +2 -0
- package/dist/wasm-streaming-guard.d.ts.map +1 -0
- package/dist/wasm-streaming-guard.js +22 -0
- package/dist/wasm-streaming-guard.js.map +1 -0
- package/dist/worker-count.d.ts +10 -0
- package/dist/worker-count.d.ts.map +1 -1
- package/dist/worker-count.js +19 -0
- package/dist/worker-count.js.map +1 -1
- package/dist/worker-trace.d.ts +16 -0
- package/dist/worker-trace.d.ts.map +1 -0
- package/dist/worker-trace.js +39 -0
- package/dist/worker-trace.js.map +1 -0
- package/package.json +17 -6
|
@@ -0,0 +1,100 @@
|
|
|
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
|
+
* Pure planning helpers of the parallel pipeline (moved out of
|
|
6
|
+
* `geometry-parallel.ts`, which re-exports them): the pre-pass class-byte span
|
|
7
|
+
* lists and content-affinity job routing.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Prepass class-byte layout, mirroring the `PREPASS_CLASS_*` definitions in
|
|
11
|
+
* `rust/processing/src/shard_classes.rs` (the source of truth — these are
|
|
12
|
+
* pinned to it by `prepass-class-spans.test.ts`).
|
|
13
|
+
*
|
|
14
|
+
* The producer packs a named code in the LOW bits and composes FLAG bits on
|
|
15
|
+
* top (`PREPASS_CLASS_FLAG_GEOMETRY_JOB` 0x80, `..._FLAG_TYPE_CANDIDATE`
|
|
16
|
+
* 0x40), so a consumer must mask before comparing — the Rust consumer does
|
|
17
|
+
* (`gpu_meshes/prepass_discovery.rs`), and so does {@link extractPrepassSpanLists}.
|
|
18
|
+
*/
|
|
19
|
+
export const PREPASS_CLASS_CODE_MASK = 0x3f;
|
|
20
|
+
/** `IFCSTYLEDITEM`. */
|
|
21
|
+
export const PREPASS_CLASS_STYLED_ITEM = 4;
|
|
22
|
+
/** `IFCINDEXEDCOLOURMAP`. */
|
|
23
|
+
export const PREPASS_CLASS_INDEXED_COLOUR_MAP = 5;
|
|
24
|
+
/** `IFCMATERIALDEFINITIONREPRESENTATION`. */
|
|
25
|
+
export const PREPASS_CLASS_MATERIAL_DEF_REPR = 6;
|
|
26
|
+
/** `IFCRELASSOCIATESMATERIAL`. */
|
|
27
|
+
export const PREPASS_CLASS_REL_ASSOCIATES_MATERIAL = 7;
|
|
28
|
+
/** `IFCRELVOIDSELEMENT`. */
|
|
29
|
+
export const PREPASS_CLASS_REL_VOIDS = 8;
|
|
30
|
+
/** `IFCRELFILLSELEMENT`. */
|
|
31
|
+
export const PREPASS_CLASS_REL_FILLS = 9;
|
|
32
|
+
/** `IFCRELAGGREGATES`. */
|
|
33
|
+
export const PREPASS_CLASS_REL_AGGREGATES = 10;
|
|
34
|
+
/** The classes the host builds span lists for (every other code is ignored). */
|
|
35
|
+
const HOST_SPAN_CLASSES = [
|
|
36
|
+
PREPASS_CLASS_STYLED_ITEM,
|
|
37
|
+
PREPASS_CLASS_INDEXED_COLOUR_MAP,
|
|
38
|
+
PREPASS_CLASS_MATERIAL_DEF_REPR,
|
|
39
|
+
PREPASS_CLASS_REL_ASSOCIATES_MATERIAL,
|
|
40
|
+
PREPASS_CLASS_REL_VOIDS,
|
|
41
|
+
PREPASS_CLASS_REL_FILLS,
|
|
42
|
+
PREPASS_CLASS_REL_AGGREGATES,
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* Build one `(id, start, length)` span list per host-consumed prepass class
|
|
46
|
+
* from the stitched shard columns, in FILE ORDER. Every comparison goes
|
|
47
|
+
* through {@link PREPASS_CLASS_CODE_MASK}, so a record that carries a flag bit
|
|
48
|
+
* alongside its named code still lands in its list instead of being dropped.
|
|
49
|
+
* Returns exact-size arrays (one entry per class in `HOST_SPAN_CLASSES`,
|
|
50
|
+
* empty when the file has none).
|
|
51
|
+
*/
|
|
52
|
+
export function extractPrepassSpanLists(classes, ids, starts, lengths) {
|
|
53
|
+
// Sized by the code mask rather than by the highest class the host consumes:
|
|
54
|
+
// a masked code is always < 64, so a class added on the Rust side cannot
|
|
55
|
+
// write out of bounds here (typed arrays discard such writes silently).
|
|
56
|
+
const counts = new Uint32Array(PREPASS_CLASS_CODE_MASK + 1);
|
|
57
|
+
for (let i = 0; i < classes.length; i++)
|
|
58
|
+
counts[classes[i] & PREPASS_CLASS_CODE_MASK]++;
|
|
59
|
+
const slots = new Map();
|
|
60
|
+
for (const k of HOST_SPAN_CLASSES)
|
|
61
|
+
slots.set(k, { arr: new Uint32Array(counts[k] * 3), w: 0 });
|
|
62
|
+
for (let i = 0; i < classes.length; i++) {
|
|
63
|
+
const slot = slots.get(classes[i] & PREPASS_CLASS_CODE_MASK);
|
|
64
|
+
if (!slot)
|
|
65
|
+
continue;
|
|
66
|
+
slot.arr[slot.w] = ids[i];
|
|
67
|
+
slot.arr[slot.w + 1] = starts[i];
|
|
68
|
+
slot.arr[slot.w + 2] = lengths[i];
|
|
69
|
+
slot.w += 3;
|
|
70
|
+
}
|
|
71
|
+
const spans = new Map();
|
|
72
|
+
for (const [k, slot] of slots)
|
|
73
|
+
spans.set(k, slot.arr);
|
|
74
|
+
return spans;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Plan content-affinity routing for one chunk: assign each job (by index) to a
|
|
78
|
+
* worker bucket so that every job sharing an affinity key lands on the SAME
|
|
79
|
+
* worker — across the whole stream, since `keyToWorker` is the caller's sticky
|
|
80
|
+
* map. New keys are handed out round-robin from `startWorker`, so each worker
|
|
81
|
+
* owns roughly `1/workerCount` of the distinct keys (≈ distinct geometries, the
|
|
82
|
+
* dominant meshing cost). Pure: mutates only the passed `keyToWorker` and returns
|
|
83
|
+
* the advanced round-robin cursor. (#1130 follow-up — see `affinity_key` in Rust.)
|
|
84
|
+
*/
|
|
85
|
+
export function planAffinityRouting(affinity, totalJobs, workerCount, keyToWorker, startWorker) {
|
|
86
|
+
const buckets = Array.from({ length: workerCount }, () => []);
|
|
87
|
+
let nextWorker = startWorker % workerCount;
|
|
88
|
+
for (let j = 0; j < totalJobs; j++) {
|
|
89
|
+
const key = affinity[j];
|
|
90
|
+
let w = keyToWorker.get(key);
|
|
91
|
+
if (w === undefined) {
|
|
92
|
+
w = nextWorker;
|
|
93
|
+
nextWorker = (nextWorker + 1) % workerCount;
|
|
94
|
+
keyToWorker.set(key, w);
|
|
95
|
+
}
|
|
96
|
+
buckets[w].push(j);
|
|
97
|
+
}
|
|
98
|
+
return { buckets, nextWorker };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=prepass-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepass-routing.js","sourceRoot":"","sources":["../src/prepass-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remesh-client.d.ts","sourceRoot":"","sources":["../../src/remesh/remesh-client.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"remesh-client.d.ts","sourceRoot":"","sources":["../../src/remesh/remesh-client.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAI7F,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;IAChC,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,qBAAa,YAAY;IAMH,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAU,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL/E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,aAAa,CAAK;IAC1B,yEAAyE;IACzE,OAAO,CAAC,IAAI,CAAsB;IAElC,OAAO;IAEP,+EAA+E;IAC/E,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,oEAAoE;WACvD,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;IAanG,OAAO,CAAC,KAAK;IAsBb;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IASrD;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAIjD,OAAO,CAAC,OAAO;IAoBf,8EAA8E;IAC9E,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAKrC,+EAA+E;IAC/E,OAAO,IAAI,IAAI;IAIf,4FAA4F;IAC5F,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,OAAO;CAIhB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { restashWasmPanicLocation } from '../wasm-panic-forward.js';
|
|
4
5
|
const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
|
|
5
6
|
export class RemeshClient {
|
|
6
7
|
worker;
|
|
@@ -40,6 +41,7 @@ export class RemeshClient {
|
|
|
40
41
|
resolve();
|
|
41
42
|
}
|
|
42
43
|
else if (message.type === 'init-error') {
|
|
44
|
+
restashWasmPanicLocation(globalThis, message.wasmPanicLocation, message.wasmPanicAt, message.message);
|
|
43
45
|
reject(new Error(`Re-mesh engine failed to start: ${message.message}`));
|
|
44
46
|
}
|
|
45
47
|
};
|
|
@@ -119,8 +121,10 @@ export class RemeshClient {
|
|
|
119
121
|
pending.resolve(message.result);
|
|
120
122
|
else if (message.type === 'style-wire')
|
|
121
123
|
pending.resolve(message.wire);
|
|
122
|
-
else
|
|
124
|
+
else {
|
|
125
|
+
restashWasmPanicLocation(globalThis, message.wasmPanicLocation, message.wasmPanicAt, message.message);
|
|
123
126
|
pending.reject(new Error(`Re-mesh failed: ${message.message}`));
|
|
127
|
+
}
|
|
124
128
|
}
|
|
125
129
|
failAll(error) {
|
|
126
130
|
for (const pending of this.pending.values())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remesh-client.js","sourceRoot":"","sources":["../../src/remesh/remesh-client.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"remesh-client.js","sourceRoot":"","sources":["../../src/remesh/remesh-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remesh-core.d.ts","sourceRoot":"","sources":["../../src/remesh/remesh-core.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"remesh-core.d.ts","sourceRoot":"","sources":["../../src/remesh/remesh-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { restashWasmPanicLocation, takeWasmPanicStash } from '../wasm-panic-forward.js';
|
|
4
5
|
import { convertMeshCollectionToBatch } from '../geometry-coordinate.js';
|
|
5
6
|
/** Apply every config field, so a changed field can never be left stale. */
|
|
6
7
|
export function applyRemeshConfig(api, config) {
|
|
@@ -37,6 +38,29 @@ export function filterStyleWire(styleIds, styleColors, keep) {
|
|
|
37
38
|
}
|
|
38
39
|
return { styleIds: Uint32Array.from(ids), styleColors: Uint8Array.from(colors) };
|
|
39
40
|
}
|
|
41
|
+
/** Always clear the cache, preserving a primary operation failure if cleanup also fails. */
|
|
42
|
+
function withPrepassCache(api, operation) {
|
|
43
|
+
let result;
|
|
44
|
+
try {
|
|
45
|
+
result = operation();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
const realm = typeof self === 'undefined' ? globalThis : self;
|
|
49
|
+
const panic = takeWasmPanicStash(realm);
|
|
50
|
+
try {
|
|
51
|
+
api.clearPrePassCache();
|
|
52
|
+
}
|
|
53
|
+
catch (cleanupError) {
|
|
54
|
+
console.warn('[remesh] clearing the failed pre-pass cache also failed:', cleanupError);
|
|
55
|
+
}
|
|
56
|
+
takeWasmPanicStash(realm);
|
|
57
|
+
if (panic)
|
|
58
|
+
restashWasmPanicLocation(realm, panic.location, panic.at, error instanceof Error ? error.message : String(error));
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
api.clearPrePassCache();
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
40
64
|
/**
|
|
41
65
|
* Pre-pass the subgraph, mesh the targets in the load frame, and release the
|
|
42
66
|
* pre-pass cache on every exit (the per-content caches are keyed to this
|
|
@@ -44,8 +68,8 @@ export function filterStyleWire(styleIds, styleColors, keep) {
|
|
|
44
68
|
*/
|
|
45
69
|
export function remeshOnApi(api, req, now = () => performance.now()) {
|
|
46
70
|
const start = now();
|
|
47
|
-
|
|
48
|
-
// Inside the
|
|
71
|
+
return withPrepassCache(api, () => {
|
|
72
|
+
// Inside the scope: a pre-pass that throws part-way may already have
|
|
49
73
|
// cached this buffer's index, which the next request must not inherit.
|
|
50
74
|
const prePass = api.buildPrePassOnce(req.buffer);
|
|
51
75
|
const prepassDone = now();
|
|
@@ -67,17 +91,14 @@ export function remeshOnApi(api, req, now = () => performance.now()) {
|
|
|
67
91
|
}
|
|
68
92
|
const meshes = convertMeshCollectionToBatch(collection);
|
|
69
93
|
return { meshes, csgFailures, ms: { prepass: prepassDone - start, produce: now() - prepassDone } };
|
|
70
|
-
}
|
|
71
|
-
finally {
|
|
72
|
-
api.clearPrePassCache();
|
|
73
|
-
}
|
|
94
|
+
});
|
|
74
95
|
}
|
|
75
96
|
/**
|
|
76
97
|
* Pre-pass a whole model once and keep only its style wire, releasing the
|
|
77
98
|
* pre-pass cache. Copies each array so nothing aliases the wasm heap.
|
|
78
99
|
*/
|
|
79
100
|
export function styleWireOnApi(api, source) {
|
|
80
|
-
|
|
101
|
+
return withPrepassCache(api, () => {
|
|
81
102
|
const prePass = api.buildPrePassOnce(source);
|
|
82
103
|
return {
|
|
83
104
|
styleIds: prePass.styleIds.slice(),
|
|
@@ -86,9 +107,6 @@ export function styleWireOnApi(api, source) {
|
|
|
86
107
|
materialColorCounts: prePass.materialColorCounts?.slice() ?? new Uint32Array(),
|
|
87
108
|
materialColors: prePass.materialColors?.slice() ?? new Uint8Array(),
|
|
88
109
|
};
|
|
89
|
-
}
|
|
90
|
-
finally {
|
|
91
|
-
api.clearPrePassCache();
|
|
92
|
-
}
|
|
110
|
+
});
|
|
93
111
|
}
|
|
94
112
|
//# sourceMappingURL=remesh-core.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remesh-core.js","sourceRoot":"","sources":["../../src/remesh/remesh-core.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAgB/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAuEzE,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,GAAc,EAAE,MAAoB;IACpE,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACvD,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC3C,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACrD,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,mBAAmB,CAAC,IAAiB,EAAE,OAAoB;IACzE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAqB,EACrB,WAAuB,EACvB,IAAyB;IAEzB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QACrC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAc,EAAE,GAAkB,EAAE,MAAoB,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;IACzG,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"remesh-core.js","sourceRoot":"","sources":["../../src/remesh/remesh-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,10 +20,10 @@ export type RemeshWorkerInbound = {
|
|
|
20
20
|
};
|
|
21
21
|
export type RemeshWorkerOutbound = {
|
|
22
22
|
type: 'ready';
|
|
23
|
-
} | {
|
|
23
|
+
} | ({
|
|
24
24
|
type: 'init-error';
|
|
25
25
|
message: string;
|
|
26
|
-
} | {
|
|
26
|
+
} & RemeshPanicDetails) | {
|
|
27
27
|
type: 'result';
|
|
28
28
|
requestId: number;
|
|
29
29
|
result: RemeshResult;
|
|
@@ -31,11 +31,16 @@ export type RemeshWorkerOutbound = {
|
|
|
31
31
|
type: 'style-wire';
|
|
32
32
|
requestId: number;
|
|
33
33
|
wire: StyleWire;
|
|
34
|
-
} | {
|
|
34
|
+
} | ({
|
|
35
35
|
type: 'error';
|
|
36
36
|
requestId: number;
|
|
37
37
|
message: string;
|
|
38
|
-
};
|
|
38
|
+
} & RemeshPanicDetails);
|
|
39
|
+
/** Source location only: Rust panic messages can contain confidential model data. */
|
|
40
|
+
interface RemeshPanicDetails {
|
|
41
|
+
wasmPanicLocation?: string;
|
|
42
|
+
wasmPanicAt?: number;
|
|
43
|
+
}
|
|
39
44
|
/** The large per-mesh buffers, moved rather than copied across the boundary. */
|
|
40
45
|
export declare function meshTransferables(meshes: readonly MeshData[]): ArrayBuffer[];
|
|
41
46
|
/** The wire's buffers, moved back to the caller. */
|
|
@@ -47,4 +52,5 @@ export declare function styleWireTransferables(wire: StyleWire): ArrayBuffer[];
|
|
|
47
52
|
* worker, so its callers would wait forever.
|
|
48
53
|
*/
|
|
49
54
|
export declare function serialQueue<T>(handle: (message: T) => Promise<void>, onError: (error: unknown) => void): (message: T) => void;
|
|
55
|
+
export {};
|
|
50
56
|
//# sourceMappingURL=remesh-protocol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remesh-protocol.d.ts","sourceRoot":"","sources":["../../src/remesh/remesh-protocol.ts"],"names":[],"mappings":"AAIA,0EAA0E;AAE1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7F,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"remesh-protocol.d.ts","sourceRoot":"","sources":["../../src/remesh/remesh-protocol.ts"],"names":[],"mappings":"AAIA,0EAA0E;AAE1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7F,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzF;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAAC,GAC9D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC1D,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAAC,CAAC;AAEjF,qFAAqF;AACrF,UAAU,kBAAkB;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,WAAW,EAAE,CAQ5E;AAED,oDAAoD;AACpD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,EAAE,CAGrE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EACrC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAChC,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAKtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remesh-protocol.js","sourceRoot":"","sources":["../../src/remesh/remesh-protocol.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"remesh-protocol.js","sourceRoot":"","sources":["../../src/remesh/remesh-protocol.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA0B/D,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,MAA2B;IAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1E,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,YAAY,WAAW;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,sBAAsB,CAAC,IAAe;IACpD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,cAAc,CAAC;SAC7G,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,YAAY,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,MAAqC,EACrC,OAAiC;IAEjC,IAAI,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5C,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -7,12 +7,13 @@
|
|
|
7
7
|
* handled strictly in order, so a `config` posted between two requests
|
|
8
8
|
* applies to the second and not the first.
|
|
9
9
|
*
|
|
10
|
-
* A
|
|
11
|
-
*
|
|
10
|
+
* A failed request drops its `IfcAPI`: cleanup may trap independently of
|
|
11
|
+
* the primary error. The next request gets a fresh handle with current config.
|
|
12
12
|
*/
|
|
13
13
|
import init, { initSync, IfcAPI } from '@ifc-lite/wasm';
|
|
14
14
|
import { initWasmWithRetry } from '../wasm-init-retry.js';
|
|
15
15
|
import { freeWasmInstanceQuietly } from '../wasm-instance-free.js';
|
|
16
|
+
import { restashWasmPanicLocation, takeWasmPanicStash } from '../wasm-panic-forward.js';
|
|
16
17
|
import { applyRemeshConfig, remeshOnApi, styleWireOnApi } from './remesh-core.js';
|
|
17
18
|
import { meshTransferables, serialQueue, styleWireTransferables, } from './remesh-protocol.js';
|
|
18
19
|
const scope = self;
|
|
@@ -24,6 +25,14 @@ function post(message, transfer = []) {
|
|
|
24
25
|
function errorMessage(error) {
|
|
25
26
|
return error instanceof Error ? error.message : String(error);
|
|
26
27
|
}
|
|
28
|
+
function errorDetails(error) {
|
|
29
|
+
const panic = takeWasmPanicStash(scope);
|
|
30
|
+
return { message: errorMessage(error), wasmPanicLocation: panic?.location, wasmPanicAt: panic?.at };
|
|
31
|
+
}
|
|
32
|
+
function freeFailedApi(instance) {
|
|
33
|
+
freeWasmInstanceQuietly(instance);
|
|
34
|
+
takeWasmPanicStash(scope); // A cleanup panic must not label the next operation.
|
|
35
|
+
}
|
|
27
36
|
function currentApi() {
|
|
28
37
|
if (!config)
|
|
29
38
|
throw new Error('remesh worker used before init');
|
|
@@ -34,7 +43,10 @@ function currentApi() {
|
|
|
34
43
|
applyRemeshConfig(fresh, config);
|
|
35
44
|
}
|
|
36
45
|
catch (error) {
|
|
37
|
-
|
|
46
|
+
const panic = takeWasmPanicStash(scope);
|
|
47
|
+
freeFailedApi(fresh);
|
|
48
|
+
if (panic)
|
|
49
|
+
restashWasmPanicLocation(scope, panic.location, panic.at, errorMessage(error));
|
|
38
50
|
throw error;
|
|
39
51
|
}
|
|
40
52
|
api = fresh;
|
|
@@ -53,7 +65,7 @@ async function handle(message) {
|
|
|
53
65
|
post({ type: 'ready' });
|
|
54
66
|
}
|
|
55
67
|
catch (error) {
|
|
56
|
-
post({ type: 'init-error',
|
|
68
|
+
post({ type: 'init-error', ...errorDetails(error) });
|
|
57
69
|
}
|
|
58
70
|
return;
|
|
59
71
|
}
|
|
@@ -67,7 +79,9 @@ async function handle(message) {
|
|
|
67
79
|
// No request to answer yet: drop the half-configured handle, so the
|
|
68
80
|
// next request rebuilds it and reports this same failure to its caller.
|
|
69
81
|
console.error('[remesh.worker] config rejected:', errorMessage(error));
|
|
70
|
-
|
|
82
|
+
// This failure has no request to capture; don't label a later trap.
|
|
83
|
+
takeWasmPanicStash(scope);
|
|
84
|
+
freeFailedApi(api);
|
|
71
85
|
api = null;
|
|
72
86
|
}
|
|
73
87
|
return;
|
|
@@ -85,11 +99,12 @@ async function handle(message) {
|
|
|
85
99
|
}
|
|
86
100
|
}
|
|
87
101
|
catch (error) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
102
|
+
// Capture before freeing: cleanup of a poisoned handle can trap too.
|
|
103
|
+
const details = errorDetails(error);
|
|
104
|
+
// A non-trap primary error may hide a secondary cleanup trap.
|
|
105
|
+
freeFailedApi(api);
|
|
106
|
+
api = null;
|
|
107
|
+
post({ type: 'error', requestId: message.requestId, ...details });
|
|
93
108
|
}
|
|
94
109
|
return;
|
|
95
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remesh.worker.js","sourceRoot":"","sources":["../../src/remesh/remesh.worker.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;GAQG;AAEH,OAAO,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AACrG,OAAO,EACL,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,GACvD,MAAM,sBAAsB,CAAC;AAE9B,MAAM,KAAK,GAAG,IAAyB,CAAC;AACxC,IAAI,MAAM,GAAwB,IAAI,CAAC;AACvC,IAAI,GAAG,GAAkB,IAAI,CAAC;AAE9B,SAAS,IAAI,CAAC,OAA6B,EAAE,WAA2B,EAAE;IACxE,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC/D,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,
|
|
1
|
+
{"version":3,"file":"remesh.worker.js","sourceRoot":"","sources":["../../src/remesh/remesh.worker.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;GAQG;AAEH,OAAO,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AACrG,OAAO,EACL,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,GACvD,MAAM,sBAAsB,CAAC;AAE9B,MAAM,KAAK,GAAG,IAAyB,CAAC;AACxC,IAAI,MAAM,GAAwB,IAAI,CAAC;AACvC,IAAI,GAAG,GAAkB,IAAI,CAAC;AAE9B,SAAS,IAAI,CAAC,OAA6B,EAAE,WAA2B,EAAE;IACxE,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtG,CAAC;AAED,SAAS,aAAa,CAAC,QAAuB;IAC5C,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAClC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,qDAAqD;AAClF,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC/D,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,KAAK;YAAE,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1F,MAAM,KAAK,CAAC;IACd,CAAC;IACD,GAAG,GAAG,KAAK,CAAC;IACZ,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,OAA4B;IAChD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC;gBACH,IAAI,OAAO,CAAC,UAAU;oBAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;;oBAC5D,MAAM,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;gBACtF,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC;gBACH,IAAI,GAAG;oBAAE,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,oEAAoE;gBACpE,wEAAwE;gBACxE,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvE,oEAAoE;gBACpE,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC1B,aAAa,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,GAAG,IAAI,CAAC;YACb,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC;gBACH,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC1D,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnG,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC1D,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjG,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,qEAAqE;gBACrE,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpC,8DAA8D;gBAC9D,aAAa,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,GAAG,IAAI,CAAC;gBACX,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjH,KAAK,CAAC,SAAS,GAAG,CAAC,KAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed entry to scan-to-BIM element proposals (#6894). The logic is Rust
|
|
3
|
+
* (`ifc_lite_processing::scan_proposals`): opposite wall faces pair into
|
|
4
|
+
* walls, floors and ceilings into slabs, vertical cylinders into columns and
|
|
5
|
+
* the rest into pipes. This module only types the JSON the wasm call takes
|
|
6
|
+
* and returns.
|
|
7
|
+
*
|
|
8
|
+
* Proposals are in the IFC model frame: Z up, metres. `scanToModel` maps the
|
|
9
|
+
* segmentation report's frame into it; for the viewer's Y-up, decode-relative
|
|
10
|
+
* scan sample that is the point cloud's placement composed with the Y-up to
|
|
11
|
+
* Z-up swap and the model's world offset.
|
|
12
|
+
*/
|
|
13
|
+
import type { IfcAPI } from '@ifc-lite/wasm';
|
|
14
|
+
import type { ScanSegmentationReport, ScanVec3 } from './scan-segmentation.js';
|
|
15
|
+
export type ProposalSchema = 'IFC2X3' | 'IFC4' | 'IFC4X3';
|
|
16
|
+
/** Every field is optional; omitted fields take the Rust defaults below. */
|
|
17
|
+
export interface ScanProposalOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Row-major 4x4 similarity (rotation, uniform scale, translation) from the
|
|
20
|
+
* report's frame to the IFC model frame. Default identity. Reflections and
|
|
21
|
+
* non-uniform scale are refused.
|
|
22
|
+
*/
|
|
23
|
+
scanToModel?: number[];
|
|
24
|
+
/** Decides the pipe class: IfcFlowSegment in IFC2X3, else IfcPipeSegment. Default IFC4. */
|
|
25
|
+
schema?: ProposalSchema;
|
|
26
|
+
/** Horizontal / vertical tolerance in the model frame. Default 10 degrees. */
|
|
27
|
+
classificationAngleDegrees?: number;
|
|
28
|
+
/** Wall faces pair when parallel within this. Default 5 degrees. */
|
|
29
|
+
pairingAngleDegrees?: number;
|
|
30
|
+
/** Paired wall faces lie this far apart or more. Default 0.05 m. */
|
|
31
|
+
minWallThicknessMetres?: number;
|
|
32
|
+
/** ... and at most this far. Default 0.6 m. */
|
|
33
|
+
maxWallThicknessMetres?: number;
|
|
34
|
+
/** Thickness of a wall seen from one side, placed behind the scanned side. Default 0.2 m. */
|
|
35
|
+
defaultWallThicknessMetres?: number;
|
|
36
|
+
/** Paired faces overlap along the wall by this share of the shorter one. Default 0.5. */
|
|
37
|
+
minWallOverlapFraction?: number;
|
|
38
|
+
/** Shorter vertical faces are not walls. Default 0.5 m. */
|
|
39
|
+
minWallLengthMetres?: number;
|
|
40
|
+
/** Lower vertical faces are not walls. Default 1 m. */
|
|
41
|
+
minWallHeightMetres?: number;
|
|
42
|
+
/** Smaller horizontal planes are not slabs. Default 1 m^2. */
|
|
43
|
+
minSlabAreaSquareMetres?: number;
|
|
44
|
+
/** Thickness of a slab seen from one side. Default 0.2 m. */
|
|
45
|
+
defaultSlabThicknessMetres?: number;
|
|
46
|
+
/** A ceiling and the floor above pair into one slab when this close (and at least `minWallThicknessMetres` apart). Default 0.6 m. */
|
|
47
|
+
maxSlabThicknessMetres?: number;
|
|
48
|
+
/** Wall and column ends within this of a floor or ceiling extend to it. Default 0.3 m. */
|
|
49
|
+
levelSnapMetres?: number;
|
|
50
|
+
/** A point inside the scanned space (model frame). Default: area-weighted plane centroid. */
|
|
51
|
+
interiorPoint?: ScanVec3 | null;
|
|
52
|
+
}
|
|
53
|
+
export type ProposalClass = 'IfcWall' | 'IfcSlab' | 'IfcColumn' | 'IfcPipeSegment' | 'IfcFlowSegment';
|
|
54
|
+
/** How the proposal was derived. */
|
|
55
|
+
export type ProposalBasis = 'pairedFaces' | 'singleFace' | 'floorCeilingPair' | 'floor' | 'ceiling' | 'cylinder';
|
|
56
|
+
/** An index into the segmentation report's `planes` or `cylinders`. */
|
|
57
|
+
export interface DetectionRef {
|
|
58
|
+
kind: 'plane' | 'cylinder';
|
|
59
|
+
index: number;
|
|
60
|
+
}
|
|
61
|
+
export interface ProposalFit {
|
|
62
|
+
/** Inlier-weighted RMS of the sources' residuals. */
|
|
63
|
+
rmsMetres: number;
|
|
64
|
+
inlierPoints: number;
|
|
65
|
+
inlierVoxels: number;
|
|
66
|
+
/** Measured area of the sources (cylinders: arc x radius x length). */
|
|
67
|
+
areaSquareMetres: number;
|
|
68
|
+
}
|
|
69
|
+
export type ProposalGeometry =
|
|
70
|
+
/** Axis line on the wall's centre plane, at its base elevation. */
|
|
71
|
+
{
|
|
72
|
+
kind: 'wall';
|
|
73
|
+
start: ScanVec3;
|
|
74
|
+
end: ScanVec3;
|
|
75
|
+
thicknessMetres: number;
|
|
76
|
+
heightMetres: number;
|
|
77
|
+
}
|
|
78
|
+
/** Top face outline, counter-clockwise from above; the slab extends `thicknessMetres` below. */
|
|
79
|
+
| {
|
|
80
|
+
kind: 'slab';
|
|
81
|
+
outline: ScanVec3[];
|
|
82
|
+
thicknessMetres: number;
|
|
83
|
+
}
|
|
84
|
+
/** `radiusMetres`: the fitted radius; a polygonal column gets the circle of equal cross-section area. */
|
|
85
|
+
| {
|
|
86
|
+
kind: 'column';
|
|
87
|
+
base: ScanVec3;
|
|
88
|
+
heightMetres: number;
|
|
89
|
+
radiusMetres: number;
|
|
90
|
+
} | {
|
|
91
|
+
kind: 'pipe';
|
|
92
|
+
start: ScanVec3;
|
|
93
|
+
end: ScanVec3;
|
|
94
|
+
radiusMetres: number;
|
|
95
|
+
};
|
|
96
|
+
export interface ScanElementProposal {
|
|
97
|
+
/** Stable within one report: `wall-0`, `slab-2`, `column-1`, `pipe-0`. */
|
|
98
|
+
id: string;
|
|
99
|
+
ifcClass: ProposalClass;
|
|
100
|
+
/** 0..1: prior(basis) x fit quality x coverage. */
|
|
101
|
+
confidence: number;
|
|
102
|
+
basis: ProposalBasis;
|
|
103
|
+
sources: DetectionRef[];
|
|
104
|
+
fit: ProposalFit;
|
|
105
|
+
geometry: ProposalGeometry;
|
|
106
|
+
}
|
|
107
|
+
export interface ScanProposalStats {
|
|
108
|
+
verticalPlanes: number;
|
|
109
|
+
horizontalPlanes: number;
|
|
110
|
+
slopedPlanes: number;
|
|
111
|
+
pairedWalls: number;
|
|
112
|
+
singleFaceWalls: number;
|
|
113
|
+
facesTooSmall: number;
|
|
114
|
+
pairedSlabs: number;
|
|
115
|
+
singleSlabs: number;
|
|
116
|
+
slabsTooSmall: number;
|
|
117
|
+
columns: number;
|
|
118
|
+
pipes: number;
|
|
119
|
+
}
|
|
120
|
+
export interface ScanProposalReport {
|
|
121
|
+
algorithm: string;
|
|
122
|
+
/** Walls, then slabs, columns and pipes; each class by descending support. */
|
|
123
|
+
proposals: ScanElementProposal[];
|
|
124
|
+
/** Uniform scale of `scanToModel`. */
|
|
125
|
+
transformScale: number;
|
|
126
|
+
stats: ScanProposalStats;
|
|
127
|
+
}
|
|
128
|
+
/** The wasm surface this needs: an initialised `IfcAPI` satisfies it. */
|
|
129
|
+
export type ScanProposalEngine = Pick<IfcAPI, 'proposeScanElements'>;
|
|
130
|
+
/** Propose IFC elements from `report`. Throws the Rust error message on invalid options. */
|
|
131
|
+
export declare function proposeScanElements(engine: ScanProposalEngine, report: ScanSegmentationReport, options?: ScanProposalOptions): ScanProposalReport;
|
|
132
|
+
//# sourceMappingURL=scan-proposals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-proposals.d.ts","sourceRoot":"","sources":["../src/scan-proposals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
/** Propose IFC elements from `report`. Throws the Rust error message on invalid options. */
|
|
5
|
+
export function proposeScanElements(engine, report, options = {}) {
|
|
6
|
+
if (options.scanToModel && options.scanToModel.length !== 16) {
|
|
7
|
+
throw new RangeError(`scanToModel needs 16 row-major values, got ${options.scanToModel.length}`);
|
|
8
|
+
}
|
|
9
|
+
const bytes = engine.proposeScanElements(JSON.stringify(report), JSON.stringify(options));
|
|
10
|
+
return JSON.parse(new TextDecoder().decode(bytes));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=scan-proposals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-proposals.js","sourceRoot":"","sources":["../src/scan-proposals.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA4H/D,4FAA4F;AAC5F,MAAM,UAAU,mBAAmB,CACjC,MAA0B,EAC1B,MAA8B,EAC9B,UAA+B,EAAE;IAEjC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7D,MAAM,IAAI,UAAU,CAAC,8CAA8C,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAuB,CAAC;AAC3E,CAAC"}
|