@bldrs-ai/conway 1.427.1287 → 1.429.1291
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/compiled/examples/browser-bundled.cjs +1 -1
- package/compiled/examples/cli-bundled.cjs +1 -1
- package/compiled/examples/cli-step-bundled.cjs +15 -1
- package/compiled/examples/validator-bundled.cjs +1 -1
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.d.ts +8 -0
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.js +14 -0
- package/compiled/src/compat/web-ifc/ap214_streamed_open.test.js +40 -0
- package/compiled/src/compat/web-ifc/ifc_api.d.ts +17 -0
- package/compiled/src/compat/web-ifc/ifc_api.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api.js +23 -0
- package/compiled/src/compat/web-ifc/ifc_api_deferred_open.test.js +36 -0
- package/compiled/src/compat/web-ifc/ifc_api_model_passthrough.d.ts +3 -0
- package/compiled/src/compat/web-ifc/ifc_api_model_passthrough.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api_preview_channel.test.js +2 -2
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.d.ts +13 -0
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.js +70 -1
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts +18 -0
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.js +60 -2
- package/compiled/src/compat/web-ifc/streamed_preview_channel.d.ts +117 -38
- package/compiled/src/compat/web-ifc/streamed_preview_channel.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/streamed_preview_channel.js +224 -105
- package/compiled/src/version/version.js +1 -1
- package/compiled/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -11,7 +11,7 @@ import ParsingBuffer from "../../parsing/parsing_buffer.js";
|
|
|
11
11
|
import { BufferByteSource } from "../../step/parsing/byte_source.js";
|
|
12
12
|
import { buildIndexStreamingAsync, } from "../../step/parsing/streaming_index_builder.js";
|
|
13
13
|
import { ColumnarIndexSink } from "../../step/parsing/columnar_index.js";
|
|
14
|
-
import { StreamedPreviewChannel } from "./streamed_preview_channel.js";
|
|
14
|
+
import { ifcPreviewAdapter, StreamedPreviewChannel, } from "./streamed_preview_channel.js";
|
|
15
15
|
import { ExtractResult } from "../../index.js";
|
|
16
16
|
import { IfcGeometryExtraction } from "../../ifc/ifc_geometry_extraction.js";
|
|
17
17
|
import { ParseResult } from "../../index.js";
|
|
@@ -69,6 +69,9 @@ export class IfcApiProxyIfc {
|
|
|
69
69
|
* Contains all the logic and methods regarding properties, psets, qsets, etc.
|
|
70
70
|
*/
|
|
71
71
|
this.properties = new IfcProperties(this);
|
|
72
|
+
/** Native geometry freed (releaseGeometry) — scene walks would touch
|
|
73
|
+
* freed objects, so mesh serving degrades to the accumulated maps. */
|
|
74
|
+
this.released_ = false;
|
|
72
75
|
// The cooperative path (createAsync) parses/extracts before construction
|
|
73
76
|
// so it can await mid-load; the classic OpenModel path does it here,
|
|
74
77
|
// synchronously. Both share the tail below (mesh vectors, statistics).
|
|
@@ -467,7 +470,7 @@ export class IfcApiProxyIfc {
|
|
|
467
470
|
// and snapshot prefix models between the parse's cooperative yields.
|
|
468
471
|
const sink = new ColumnarIndexSink();
|
|
469
472
|
const previewChannel = deferGeometry && settings?.ON_PREVIEW_MESH !== void 0 ?
|
|
470
|
-
new StreamedPreviewChannel(data, conwaywasm, sink, settings.COORDINATE_TO_ORIGIN === true, settings.ON_PREVIEW_MESH) : void 0;
|
|
473
|
+
new StreamedPreviewChannel(data, conwaywasm, sink, ifcPreviewAdapter(), settings.COORDINATE_TO_ORIGIN === true, settings.ON_PREVIEW_MESH) : void 0;
|
|
471
474
|
previewChannel?.start();
|
|
472
475
|
let result;
|
|
473
476
|
try {
|
|
@@ -998,6 +1001,46 @@ export class IfcApiProxyIfc {
|
|
|
998
1001
|
closeModel() {
|
|
999
1002
|
// Null operation.
|
|
1000
1003
|
}
|
|
1004
|
+
/**
|
|
1005
|
+
* Free this model's native geometry (conway extension): every
|
|
1006
|
+
* canonical mesh the extraction produced plus the GetGeometry map.
|
|
1007
|
+
* Call AFTER the consumer has built its own scene from the meshes —
|
|
1008
|
+
* subsequent GetGeometry calls return an empty dummy. On a deferred
|
|
1009
|
+
* model whose pump has not drained, this is a no-op (releasing would
|
|
1010
|
+
* break the remaining extraction).
|
|
1011
|
+
*
|
|
1012
|
+
* The wasm heap never shrinks, but freed pages are reused: repeated
|
|
1013
|
+
* loads in one tab plateau instead of stacking whole model scenes
|
|
1014
|
+
* (the multi-load crash).
|
|
1015
|
+
*
|
|
1016
|
+
* @return {boolean} True when geometry was released.
|
|
1017
|
+
*/
|
|
1018
|
+
releaseGeometry() {
|
|
1019
|
+
if (this.deferredMode_ &&
|
|
1020
|
+
this.demandProducts_ !== void 0 &&
|
|
1021
|
+
this.demandCursor_ < this.demandProducts_.length) {
|
|
1022
|
+
Logger.warning("[ReleaseModelGeometry]: deferred pump not drained \u2014 not releasing");
|
|
1023
|
+
return false;
|
|
1024
|
+
}
|
|
1025
|
+
const model = this.model[0];
|
|
1026
|
+
const localIDs = [];
|
|
1027
|
+
for (const mesh of model.geometry) {
|
|
1028
|
+
localIDs.push(mesh.localID);
|
|
1029
|
+
}
|
|
1030
|
+
for (const localID of localIDs) {
|
|
1031
|
+
try {
|
|
1032
|
+
model.geometry.delete(localID);
|
|
1033
|
+
}
|
|
1034
|
+
catch {
|
|
1035
|
+
// Never let a free break a loaded model.
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
// The GetGeometry map holds references to the now-freed natives —
|
|
1039
|
+
// clear it so lookups degrade to the dummy instead of touching them.
|
|
1040
|
+
this.model[3].clear();
|
|
1041
|
+
this.released_ = true;
|
|
1042
|
+
return true;
|
|
1043
|
+
}
|
|
1001
1044
|
/**
|
|
1002
1045
|
* Deferred-mode batch pump (conway extension; Share demand/tiled
|
|
1003
1046
|
* rendering slice A): extract the next `batchSize` products (file
|
|
@@ -1067,6 +1110,11 @@ export class IfcApiProxyIfc {
|
|
|
1067
1110
|
* gained instances this call.
|
|
1068
1111
|
*/
|
|
1069
1112
|
streamNewMeshes_(meshCallback) {
|
|
1113
|
+
// Released models: the scene's natives are freed — nothing new can
|
|
1114
|
+
// exist to capture, and walking would touch freed objects.
|
|
1115
|
+
if (this.released_) {
|
|
1116
|
+
return;
|
|
1117
|
+
}
|
|
1070
1118
|
const [model, scene, meshMap, geometryMaterialTransformMap] = this.model;
|
|
1071
1119
|
let coordinationMatrix = this.demandCoordination_ ?? glmatrix.mat4.create();
|
|
1072
1120
|
const seenThisPass = new Map();
|
|
@@ -1198,6 +1246,16 @@ export class IfcApiProxyIfc {
|
|
|
1198
1246
|
* @param meshCallback
|
|
1199
1247
|
*/
|
|
1200
1248
|
streamAllMeshes(meshCallback) {
|
|
1249
|
+
// Released models: the natives behind the scene are freed — serve
|
|
1250
|
+
// the accumulated per-entity meshes instead of re-walking.
|
|
1251
|
+
if (this.released_ && !this.deferredMode_) {
|
|
1252
|
+
const [, , meshMap, , vectorFlatMesh] = this.model;
|
|
1253
|
+
meshMap.forEach((mesh) => {
|
|
1254
|
+
vectorFlatMesh.push(mesh[1]);
|
|
1255
|
+
meshCallback(mesh[1]);
|
|
1256
|
+
});
|
|
1257
|
+
return;
|
|
1258
|
+
}
|
|
1201
1259
|
// Deferred models: the delta capture has already populated (or will
|
|
1202
1260
|
// populate) the shared meshMap — re-running the classic walk would
|
|
1203
1261
|
// push every instance a second time. Pump any remainder to
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ConwayGeometry } from "../../index.js";
|
|
2
|
-
import EntityTypesIfc from "../../ifc/ifc4_gen/entity_types_ifc.gen.js";
|
|
3
2
|
import { ColumnarIndexSink } from "../../step/parsing/columnar_index.js";
|
|
4
3
|
import * as glmatrix from "gl-matrix";
|
|
5
4
|
/**
|
|
@@ -25,38 +24,115 @@ export interface PreviewMeshPayload {
|
|
|
25
24
|
indexData?: Uint32Array;
|
|
26
25
|
}
|
|
27
26
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
* A throwaway prefix extraction built by a {@link PreviewSchemaAdapter} —
|
|
28
|
+
* one preview "generation" over a snapshot of the growing columnar index.
|
|
29
|
+
*/
|
|
30
|
+
export interface PreviewPrefixGeneration {
|
|
31
|
+
/** Scene the capture walks (canonical placed-instance tuples — the
|
|
32
|
+
* exact tuple shape is schema-specific; the capture narrows it). */
|
|
33
|
+
scene: {
|
|
34
|
+
walk(): IterableIterator<unknown>;
|
|
35
|
+
};
|
|
36
|
+
/** Total pumpable units in this prefix. */
|
|
37
|
+
unitCount: number;
|
|
38
|
+
/** Scaling factor for the capture math. */
|
|
39
|
+
linearScalingFactor: number;
|
|
40
|
+
/**
|
|
41
|
+
* Execute units [from, from+count) — cheap per unit, exceptions per
|
|
42
|
+
* unit swallowed by the adapter (mid-parse forward references).
|
|
43
|
+
*
|
|
44
|
+
* @param from First unit ordinal to execute.
|
|
45
|
+
* @param count Max units.
|
|
46
|
+
* @return {number} Units actually executed.
|
|
47
|
+
*/
|
|
48
|
+
runUnits(from: number, count: number): number;
|
|
49
|
+
/**
|
|
50
|
+
* ExpressID identifying a walked geometry (payload identity / dedup).
|
|
51
|
+
*
|
|
52
|
+
* @param geometryLocalID The canonical mesh's localID.
|
|
53
|
+
* @return {number | undefined} The geometry's expressID.
|
|
54
|
+
*/
|
|
55
|
+
geometryExpressID(geometryLocalID: number): number | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Whether the capture math recenters geometry (IFC's classic
|
|
58
|
+
* normalize + center re-add) or uses bare coordination x placement
|
|
59
|
+
* composition (AP214 — instances share one geometry buffer, issue
|
|
60
|
+
* #308).
|
|
61
|
+
*/
|
|
62
|
+
recenter: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Free the generation's native geometry (payloads are copies, so a
|
|
65
|
+
* retired generation holds nothing anyone can reference). Called by
|
|
66
|
+
* the channel when a generation is replaced and at stop().
|
|
67
|
+
*/
|
|
68
|
+
dispose(): void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Builds throwaway prefix generations for one schema — the only piece of
|
|
72
|
+
* the preview channel that knows what a "model" or a "unit" is.
|
|
73
|
+
*/
|
|
74
|
+
export interface PreviewSchemaAdapter {
|
|
75
|
+
/**
|
|
76
|
+
* Build a generation over the given prefix columns.
|
|
77
|
+
*
|
|
78
|
+
* @param data The (fully resident) source buffer.
|
|
79
|
+
* @param conwaywasm The shared geometry wasm wrapper.
|
|
80
|
+
* @param columns A prefix snapshot of the columnar index.
|
|
81
|
+
* @return {PreviewPrefixGeneration | undefined} The generation, or
|
|
82
|
+
* undefined when the prefix cannot build one yet (throw is also
|
|
83
|
+
* tolerated — the channel retries on a later, larger prefix).
|
|
84
|
+
*/
|
|
85
|
+
buildGeneration(data: Uint8Array, conwaywasm: ConwayGeometry, columns: unknown): PreviewPrefixGeneration | undefined;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* IFC adapter: units are IfcProducts in localID order (stable across
|
|
89
|
+
* prefix growth), extracted through the per-product demand seam.
|
|
90
|
+
*
|
|
91
|
+
* @return {PreviewSchemaAdapter} The adapter.
|
|
92
|
+
*/
|
|
93
|
+
export declare function ifcPreviewAdapter(): PreviewSchemaAdapter;
|
|
94
|
+
/**
|
|
95
|
+
* AP214 adapter: units are assembly-tree units (see
|
|
96
|
+
* AP214GeometryExtraction.prepareDemandExtraction). Unit ordinals are
|
|
97
|
+
* only approximately stable across prefix growth (a root's child list
|
|
98
|
+
* can grow, shifting later ordinals) — for a preview that is
|
|
99
|
+
* acceptable: a shifted ordinal re-emits an instance at an identical
|
|
100
|
+
* placement (invisible overlap) or skips one (the durable pump renders
|
|
101
|
+
* it later).
|
|
34
102
|
*
|
|
35
|
-
*
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
103
|
+
* @return {PreviewSchemaAdapter} The adapter.
|
|
104
|
+
*/
|
|
105
|
+
export declare function ap214PreviewAdapter(): PreviewSchemaAdapter;
|
|
106
|
+
/**
|
|
107
|
+
* Parse-time preview channel (demand/tiled rendering slice A2): while a
|
|
108
|
+
* deferred streamed open is still parsing, periodically snapshot the
|
|
109
|
+
* growing columnar index into a PREFIX model, extract a bounded number of
|
|
110
|
+
* units through a throwaway extraction, and emit self-contained mesh
|
|
111
|
+
* payloads — first pixels within the first seconds of a large parse
|
|
112
|
+
* instead of after it. Schema knowledge lives in the
|
|
113
|
+
* {@link PreviewSchemaAdapter}; the channel owns scheduling, generations,
|
|
114
|
+
* watermarks, payload copies, caps and the coordination pin.
|
|
42
115
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
116
|
+
* Preview quality, by construction: relationship records (IFC voids,
|
|
117
|
+
* materials, styled items) spread to the very end of real files
|
|
118
|
+
* (measured ~92–97% depth), so a prefix extraction can miss
|
|
119
|
+
* openings and materials. That is why these extractions are throwaway:
|
|
120
|
+
* the durable batch pump after the parse re-extracts every unit with the
|
|
121
|
+
* full model and REPLACES the preview — final geometry parity is
|
|
122
|
+
* untouched by this channel.
|
|
46
123
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* Products whose extraction throws mid-parse (unparsed forward references)
|
|
51
|
-
* are skipped — the durable pump extracts them correctly later.
|
|
124
|
+
* Scheduling: the cooperative parse yields to the event loop via
|
|
125
|
+
* macrotasks every ~50ms; each pump tick runs in one of those gaps under
|
|
126
|
+
* a hard time budget, so the parse keeps the bulk of the main thread.
|
|
52
127
|
*/
|
|
53
128
|
export declare class StreamedPreviewChannel {
|
|
54
129
|
private readonly data;
|
|
55
130
|
private readonly conwaywasm;
|
|
56
131
|
private readonly sink;
|
|
132
|
+
private readonly adapter;
|
|
57
133
|
private readonly coordinateToOrigin;
|
|
58
134
|
private readonly onMesh;
|
|
59
|
-
private readonly
|
|
135
|
+
private readonly maxUnits;
|
|
60
136
|
private readonly maxBytes;
|
|
61
137
|
private readonly firstGenerationMinRecords;
|
|
62
138
|
/** Coordination matrix pinned from the first captured instance, exactly
|
|
@@ -65,10 +141,11 @@ export declare class StreamedPreviewChannel {
|
|
|
65
141
|
coordinationMatrix?: glmatrix.mat4;
|
|
66
142
|
private stopped_;
|
|
67
143
|
private timer_?;
|
|
68
|
-
private
|
|
144
|
+
private emittedUnits_;
|
|
69
145
|
private emittedBytes_;
|
|
70
|
-
/** Ordinal cursor into the (
|
|
71
|
-
|
|
146
|
+
/** Ordinal cursor into the unit list (see the adapter's stability
|
|
147
|
+
* notes). */
|
|
148
|
+
private unitOrdinal_;
|
|
72
149
|
/** Geometry expressIDs whose payload has been emitted (cross-generation
|
|
73
150
|
* dedup for mapped/shared geometry). */
|
|
74
151
|
private readonly emittedGeometry_;
|
|
@@ -80,14 +157,15 @@ export declare class StreamedPreviewChannel {
|
|
|
80
157
|
* — ticks run between parse yields, never concurrently with the durable
|
|
81
158
|
* extraction, which is created after the parse completes).
|
|
82
159
|
* @param sink The live columnar sink the streamed parse is filling.
|
|
160
|
+
* @param adapter The schema adapter building prefix generations.
|
|
83
161
|
* @param coordinateToOrigin The open's COORDINATE_TO_ORIGIN setting.
|
|
84
162
|
* @param onMesh Consumer callback for each preview payload.
|
|
85
|
-
* @param
|
|
163
|
+
* @param maxUnits Cap on units ever preview-extracted.
|
|
86
164
|
* @param maxBytes Cap on total payload bytes copied out.
|
|
87
165
|
* @param firstGenerationMinRecords Records required before the first
|
|
88
166
|
* snapshot (tests lower it for tiny fixtures).
|
|
89
167
|
*/
|
|
90
|
-
constructor(data: Uint8Array, conwaywasm: ConwayGeometry, sink: ColumnarIndexSink<
|
|
168
|
+
constructor(data: Uint8Array, conwaywasm: ConwayGeometry, sink: ColumnarIndexSink<number>, adapter: PreviewSchemaAdapter, coordinateToOrigin: boolean, onMesh: (mesh: PreviewMeshPayload) => void, maxUnits?: number, maxBytes?: number, firstGenerationMinRecords?: number);
|
|
91
169
|
/** Begin ticking (call just before awaiting the parse). */
|
|
92
170
|
start(): void;
|
|
93
171
|
/**
|
|
@@ -100,29 +178,30 @@ export declare class StreamedPreviewChannel {
|
|
|
100
178
|
get capped(): boolean;
|
|
101
179
|
private schedule_;
|
|
102
180
|
/**
|
|
103
|
-
* One pump tick: ensure a generation with pending
|
|
181
|
+
* One pump tick: ensure a generation with pending units exists, then
|
|
104
182
|
* extract + capture under the time budget.
|
|
105
183
|
*/
|
|
106
184
|
private tick_;
|
|
107
185
|
/**
|
|
108
|
-
* Ensure a generation with pending
|
|
109
|
-
* it has work; otherwise snapshot a fresh prefix model once the index
|
|
110
|
-
* grown enough to be worth the copy.
|
|
186
|
+
* Ensure a generation with pending units: keep the current one while
|
|
187
|
+
* it has work; otherwise snapshot a fresh prefix model once the index
|
|
188
|
+
* has grown enough to be worth the copy.
|
|
111
189
|
*
|
|
112
|
-
* @return {boolean} True when a generation with pending
|
|
190
|
+
* @return {boolean} True when a generation with pending units exists.
|
|
113
191
|
*/
|
|
114
192
|
private ensureGeneration_;
|
|
115
193
|
/**
|
|
116
194
|
* Walk the current generation's scene and emit every not-yet-captured
|
|
117
|
-
* placed instance as a payload — the preview twin of the
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* geometry OUT of the wasm heap
|
|
195
|
+
* placed instance as a payload — the preview twin of the durable delta
|
|
196
|
+
* captures, with the same placed-geometry math per schema (recentering
|
|
197
|
+
* for IFC, bare composition for AP214) so preview and durable
|
|
198
|
+
* placements coincide, but copying geometry OUT of the wasm heap
|
|
199
|
+
* instead of retaining native references.
|
|
121
200
|
*/
|
|
122
201
|
private captureNewInstances_;
|
|
123
202
|
/**
|
|
124
203
|
* Test seam: run generation building + extraction + capture synchronously
|
|
125
|
-
* until either every
|
|
204
|
+
* until either every unit currently in the sink is attempted or a cap
|
|
126
205
|
* is hit — what the timer-driven ticks do, without the timers.
|
|
127
206
|
*/
|
|
128
207
|
drainForTest(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamed_preview_channel.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/streamed_preview_channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"streamed_preview_channel.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/streamed_preview_channel.ts"],"names":[],"mappings":"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"}
|