@ifc-lite/geometry 1.16.3 → 1.16.5

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.
@@ -101,6 +101,15 @@ export declare class CoordinateHandler {
101
101
  * majority of meshes have small coordinates. If so, skips TypeScript shift.
102
102
  */
103
103
  processMeshesIncremental(batch: MeshData[]): void;
104
+ /**
105
+ * Fast incremental path for trusted native batches.
106
+ *
107
+ * Desktop native streaming already emits site-local coordinates, so the JS
108
+ * layer does not need to re-run RTC detection, outlier filtering, or
109
+ * position shifting for every vertex. We only need lightweight bounds
110
+ * accumulation so the viewport can fit the camera while streaming.
111
+ */
112
+ processTrustedMeshesIncremental(batch: MeshData[]): void;
104
113
  /**
105
114
  * Get current coordinate info (for incremental updates)
106
115
  */
@@ -1 +1 @@
1
- {"version":3,"file":"coordinate-handler.d.ts","sourceRoot":"","sources":["../src/coordinate-handler.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,IAAI;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,IAAI;IACjB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC3B,WAAW,EAAE,IAAI,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC;IACrB,aAAa,EAAE,IAAI,CAAC;IACpB,2HAA2H;IAC3H,mBAAmB,EAAE,OAAO,CAAC;IAC7B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,kIAAkI;IAClI,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAGnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IAG5C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAEhD,OAAO,CAAC,eAAe,CAAe;IAEtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;;;;OAMG;IACH,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAmD5D;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAwC3B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO;IAUjC;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI;IAQrC;;;;;;OAMG;IACH,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAwB9E;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI;IAe5C;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc;IAkGjD;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAQxC;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAQxC;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;;;;;OAMG;IACH,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAiGjD;;OAEG;IACH,wBAAwB,IAAI,cAAc,GAAG,IAAI;IA2BjD;;OAEG;IACH,sBAAsB,IAAI,cAAc;IAqBxC;;OAEG;IACH,KAAK,IAAI,IAAI;CAOhB"}
1
+ {"version":3,"file":"coordinate-handler.d.ts","sourceRoot":"","sources":["../src/coordinate-handler.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,IAAI;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,IAAI;IACjB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC3B,WAAW,EAAE,IAAI,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC;IACrB,aAAa,EAAE,IAAI,CAAC;IACpB,2HAA2H;IAC3H,mBAAmB,EAAE,OAAO,CAAC;IAC7B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,kIAAkI;IAClI,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAGnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;IAG5C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,eAAe,CAAkB;IAGzC,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAEhD,OAAO,CAAC,eAAe,CAAe;IAEtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;;;;OAMG;IACH,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAmD5D;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAwC3B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO;IAUjC;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI;IAQrC;;;;;;OAMG;IACH,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAwB9E;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI;IAe5C;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc;IA4EjD;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAQxC;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAQxC;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;;;;;OAMG;IACH,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAqFjD;;;;;;;OAOG;IACH,+BAA+B,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IA2BxD;;OAEG;IACH,wBAAwB,IAAI,cAAc,GAAG,IAAI;IA2BjD;;OAEG;IACH,sBAAsB,IAAI,cAAc;IAqBxC;;OAEG;IACH,KAAK,IAAI,IAAI;CAOhB"}
@@ -69,7 +69,7 @@ export class CoordinateHandler {
69
69
  }
70
70
  }
71
71
  if (corruptedVertexCount > 0) {
72
- console.log(`[CoordinateHandler] Filtered ${corruptedVertexCount} corrupted vertices, kept ${validVertexCount} valid`);
72
+ // Corrupted vertices filtered during bounds calculation
73
73
  }
74
74
  return bounds;
75
75
  }
@@ -224,17 +224,10 @@ export class CoordinateHandler {
224
224
  z: originalBounds.max.z - originalBounds.min.z,
225
225
  };
226
226
  const maxSize = Math.max(size.x, size.y, size.z);
227
- console.log('[CoordinateHandler] Original bounds:', {
228
- min: originalBounds.min,
229
- max: originalBounds.max,
230
- size,
231
- maxSize: maxSize.toFixed(2) + 'm',
232
- });
233
227
  // Check if shift is needed (>10km from origin)
234
228
  const needsShift = this.needsShift(originalBounds);
235
229
  if (!needsShift) {
236
230
  // No shift needed - just clean up corrupted values in-place
237
- console.log('[CoordinateHandler] Coordinates within normal range, no shift needed');
238
231
  // Still shift by 0 to clean up corrupted vertices
239
232
  const zeroShift = { x: 0, y: 0, z: 0 };
240
233
  for (const mesh of meshes) {
@@ -250,21 +243,12 @@ export class CoordinateHandler {
250
243
  // Calculate centroid as origin shift
251
244
  const centroid = this.calculateCentroid(originalBounds);
252
245
  this.originShift = centroid;
253
- console.log('[CoordinateHandler] Large coordinates detected, shifting to origin:', {
254
- centroid,
255
- maxCoord: Math.max(Math.abs(originalBounds.min.x), Math.abs(originalBounds.max.x), Math.abs(originalBounds.min.y), Math.abs(originalBounds.max.y), Math.abs(originalBounds.min.z), Math.abs(originalBounds.max.z)).toFixed(2) + 'm',
256
- });
257
246
  // Shift all mesh positions
258
247
  for (const mesh of meshes) {
259
248
  this.shiftPositions(mesh.positions, centroid);
260
249
  }
261
250
  // Calculate shifted bounds
262
251
  const shiftedBounds = this.shiftBounds(originalBounds, centroid);
263
- console.log('[CoordinateHandler] Shifted bounds:', {
264
- min: shiftedBounds.min,
265
- max: shiftedBounds.max,
266
- maxSize: maxSize.toFixed(2) + 'm',
267
- });
268
252
  return {
269
253
  originShift: centroid,
270
254
  originalBounds,
@@ -367,19 +351,6 @@ export class CoordinateHandler {
367
351
  // Check if shift is needed (>10km from origin) AND WASM didn't already apply RTC
368
352
  if ((distanceFromOrigin > this.THRESHOLD || maxSize > this.THRESHOLD) && !wasmRtcLikelyApplied) {
369
353
  this.originShift = centroid;
370
- console.log('[CoordinateHandler] Large coordinates detected, shifting to origin:', {
371
- distanceFromOrigin: distanceFromOrigin.toFixed(2) + 'm',
372
- maxSize: maxSize.toFixed(2) + 'm',
373
- shift: this.originShift,
374
- });
375
- }
376
- else if (wasmRtcLikelyApplied) {
377
- // Log that we're skipping because WASM already applied RTC
378
- console.log('[CoordinateHandler] Skipping shift - WASM RTC already applied:', {
379
- smallCoordCount,
380
- largeCoordCount,
381
- wasmRtcDetected: true,
382
- });
383
354
  }
384
355
  }
385
356
  this.shiftCalculated = true;
@@ -392,6 +363,37 @@ export class CoordinateHandler {
392
363
  }
393
364
  }
394
365
  }
366
+ /**
367
+ * Fast incremental path for trusted native batches.
368
+ *
369
+ * Desktop native streaming already emits site-local coordinates, so the JS
370
+ * layer does not need to re-run RTC detection, outlier filtering, or
371
+ * position shifting for every vertex. We only need lightweight bounds
372
+ * accumulation so the viewport can fit the camera while streaming.
373
+ */
374
+ processTrustedMeshesIncremental(batch) {
375
+ const batchBounds = this.calculateBoundsFast(batch);
376
+ const hasValidBounds = batchBounds.min.x !== Infinity &&
377
+ batchBounds.max.x !== -Infinity;
378
+ if (!hasValidBounds) {
379
+ return;
380
+ }
381
+ if (this.accumulatedBounds === null) {
382
+ this.accumulatedBounds = batchBounds;
383
+ }
384
+ else {
385
+ this.accumulatedBounds.min.x = Math.min(this.accumulatedBounds.min.x, batchBounds.min.x);
386
+ this.accumulatedBounds.min.y = Math.min(this.accumulatedBounds.min.y, batchBounds.min.y);
387
+ this.accumulatedBounds.min.z = Math.min(this.accumulatedBounds.min.z, batchBounds.min.z);
388
+ this.accumulatedBounds.max.x = Math.max(this.accumulatedBounds.max.x, batchBounds.max.x);
389
+ this.accumulatedBounds.max.y = Math.max(this.accumulatedBounds.max.y, batchBounds.max.y);
390
+ this.accumulatedBounds.max.z = Math.max(this.accumulatedBounds.max.z, batchBounds.max.z);
391
+ }
392
+ this.originShift = { x: 0, y: 0, z: 0 };
393
+ this.wasmRtcDetected = true;
394
+ this.shiftCalculated = true;
395
+ this.activeThreshold = this.NORMAL_COORD_THRESHOLD;
396
+ }
395
397
  /**
396
398
  * Get current coordinate info (for incremental updates)
397
399
  */
@@ -1 +1 @@
1
- {"version":3,"file":"coordinate-handler.js","sourceRoot":"","sources":["../src/coordinate-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coordinate-handler.js","sourceRoot":"","sources":["../src/coordinate-handler.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -16,9 +16,11 @@ export { WasmMemoryManager, type GpuGeometryHandle, type GpuMeshMetadataHandle,
16
16
  export { ZeroCopyMeshCollector, ZeroCopyInstancedCollector, type ZeroCopyStreamingProgress, type ZeroCopyBatchResult, type ZeroCopyCompleteStats, type ZeroCopyMeshMetadata, type ZeroCopyBatch, type ZeroCopyInstancedBatch, } from './zero-copy-collector.js';
17
17
  export { IfcLiteBridge as WebIfcBridge } from './ifc-lite-bridge.js';
18
18
  import { GeometryQuality } from './progressive-loader.js';
19
+ import { type GeometryStats as PlatformGeometryStats } from './platform-bridge.js';
19
20
  import type { GeometryResult, MeshData } from './types.js';
20
21
  export interface GeometryProcessorOptions {
21
22
  quality?: GeometryQuality;
23
+ preferNative?: boolean;
22
24
  }
23
25
  /**
24
26
  * Dynamic batch configuration for ramp-up streaming
@@ -47,6 +49,7 @@ export type StreamingGeometryEvent = {
47
49
  meshes: MeshData[];
48
50
  totalSoFar: number;
49
51
  coordinateInfo?: import('./types.js').CoordinateInfo;
52
+ nativeTelemetry?: import('./platform-bridge.js').NativeBatchTelemetry;
50
53
  } | {
51
54
  type: 'colorUpdate';
52
55
  updates: Map<number, [number, number, number, number]>;
@@ -87,6 +90,7 @@ export declare class GeometryProcessor {
87
90
  private bufferBuilder;
88
91
  private coordinateHandler;
89
92
  private isNative;
93
+ private lastNativeStats;
90
94
  constructor(options?: GeometryProcessorOptions);
91
95
  /**
92
96
  * Initialize the geometry processor
@@ -100,6 +104,12 @@ export declare class GeometryProcessor {
100
104
  * @param entityIndex Optional entity index for priority-based loading
101
105
  */
102
106
  process(buffer: Uint8Array, entityIndex?: Map<number, any>): Promise<GeometryResult>;
107
+ /**
108
+ * Process IFC geometry directly from a filesystem path in native desktop
109
+ * hosts. This avoids copying IFC content through JS when the host already
110
+ * has the file path.
111
+ */
112
+ processPath(path: string): Promise<GeometryResult>;
103
113
  /**
104
114
  * Collect meshes on main thread using IFC-Lite WASM
105
115
  */
@@ -118,6 +128,12 @@ export declare class GeometryProcessor {
118
128
  * @param batchConfig Dynamic batch configuration or fixed batch size
119
129
  */
120
130
  processStreaming(buffer: Uint8Array, _entityIndex?: Map<number, any>, batchConfig?: number | DynamicBatchConfig): AsyncGenerator<StreamingGeometryEvent>;
131
+ /**
132
+ * Stream geometry directly from a filesystem path in native desktop hosts.
133
+ * This avoids copying very large IFC files through JS and Tauri IPC.
134
+ */
135
+ processStreamingPath(path: string, estimatedBytes?: number, cacheKey?: string): AsyncGenerator<StreamingGeometryEvent>;
136
+ processStreamingCache(cacheKey: string): AsyncGenerator<StreamingGeometryEvent>;
121
137
  /**
122
138
  * Process IFC file with streaming instanced geometry output for progressive rendering
123
139
  * Groups identical geometries by hash (before transformation) for GPU instancing
@@ -153,6 +169,9 @@ export declare class GeometryProcessor {
153
169
  * Get the WASM API instance for advanced operations (e.g., entity scanning)
154
170
  */
155
171
  getApi(): import("@ifc-lite/wasm").IfcAPI | null;
172
+ getLastNativeStats(): PlatformGeometryStats | null;
173
+ private enqueueNativeStreamingEvent;
174
+ private streamNativeGeometry;
156
175
  /**
157
176
  * Parse symbolic representations (Plan, Annotation, FootPrint) from IFC content
158
177
  * These are pre-authored 2D curves for architectural drawings (door swings, window cuts, etc.)
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -42,6 +42,20 @@ export function calculateDynamicBatchSize(batchNumber, initialBatchSize = 50, ma
42
42
  return maxBatchSize; // Full throughput earlier
43
43
  }
44
44
  }
45
+ const MAX_NATIVE_STREAM_QUEUE_EVENTS = 8;
46
+ const MAX_NATIVE_STREAM_QUEUE_MESHES = 32768;
47
+ const MAX_NATIVE_STREAM_EVENTS_PER_TURN = 4;
48
+ const MAX_NATIVE_STREAM_MESHES_PER_TURN = 8192;
49
+ const MAX_NATIVE_STREAM_DRAIN_MS = 10;
50
+ function yieldToEventLoop() {
51
+ const maybeScheduler = globalThis.scheduler;
52
+ if (typeof maybeScheduler?.yield === 'function') {
53
+ return maybeScheduler.yield();
54
+ }
55
+ return new Promise((resolve) => {
56
+ globalThis.setTimeout(resolve, 0);
57
+ });
58
+ }
45
59
  export class GeometryProcessor {
46
60
  static largeFileByteStreamingThreshold = 256 * 1024 * 1024;
47
61
  bridge = null;
@@ -49,10 +63,11 @@ export class GeometryProcessor {
49
63
  bufferBuilder;
50
64
  coordinateHandler;
51
65
  isNative = false;
66
+ lastNativeStats = null;
52
67
  constructor(options = {}) {
53
68
  this.bufferBuilder = new BufferBuilder();
54
69
  this.coordinateHandler = new CoordinateHandler();
55
- this.isNative = isTauri();
70
+ this.isNative = options.preferNative !== false && isTauri();
56
71
  // Note: options accepted for API compatibility
57
72
  void options.quality;
58
73
  if (!this.isNative) {
@@ -131,6 +146,30 @@ export class GeometryProcessor {
131
146
  };
132
147
  return result;
133
148
  }
149
+ /**
150
+ * Process IFC geometry directly from a filesystem path in native desktop
151
+ * hosts. This avoids copying IFC content through JS when the host already
152
+ * has the file path.
153
+ */
154
+ async processPath(path) {
155
+ if (!this.isNative) {
156
+ throw new Error('Path-based geometry processing is only available in native desktop builds');
157
+ }
158
+ if (!this.platformBridge) {
159
+ await this.init();
160
+ }
161
+ if (!this.platformBridge?.processGeometryPath) {
162
+ throw new Error('Native platform bridge does not support file-path geometry processing');
163
+ }
164
+ const result = await this.platformBridge.processGeometryPath(path);
165
+ const coordinateInfo = this.coordinateHandler.processMeshes(result.meshes);
166
+ return {
167
+ meshes: result.meshes,
168
+ totalTriangles: result.totalTriangles,
169
+ totalVertices: result.totalVertices,
170
+ coordinateInfo,
171
+ };
172
+ }
134
173
  /**
135
174
  * Collect meshes on main thread using IFC-Lite WASM
136
175
  */
@@ -232,9 +271,12 @@ export class GeometryProcessor {
232
271
  return;
233
272
  }
234
273
  const batchSize = this.getStreamingBatchSize(buffer, batchConfig);
274
+ // Cap at ~30 batches max to avoid excessive per-batch overhead
275
+ const maxBatches = 30;
276
+ const effectiveBatchSize = Math.max(batchSize, Math.ceil(prePass.totalJobs / maxBatches));
235
277
  let totalMeshes = 0;
236
- for (let startJob = 0; startJob < prePass.totalJobs; startJob += batchSize) {
237
- const endJob = Math.min(startJob + batchSize, prePass.totalJobs);
278
+ for (let startJob = 0; startJob < prePass.totalJobs; startJob += effectiveBatchSize) {
279
+ const endJob = Math.min(startJob + effectiveBatchSize, prePass.totalJobs);
238
280
  const jobSlice = prePass.jobs.slice(startJob * 3, endJob * 3);
239
281
  const collection = api.processGeometryBatch(buffer, jobSlice, prePass.unitScale, prePass.rtcOffset?.[0] ?? 0, prePass.rtcOffset?.[1] ?? 0, prePass.rtcOffset?.[2] ?? 0, prePass.needsShift, prePass.voidKeys, prePass.voidCounts, prePass.voidValues, prePass.styleIds, prePass.styleColors);
240
282
  const batch = this.convertMeshCollectionToBatch(collection);
@@ -256,6 +298,7 @@ export class GeometryProcessor {
256
298
  };
257
299
  await new Promise(resolve => setTimeout(resolve, 0));
258
300
  }
301
+ api.clearPrePassCache?.();
259
302
  const coordinateInfo = this.withBuildingRotation(this.coordinateHandler.getFinalCoordinateInfo(), buildingRotation);
260
303
  yield { type: 'complete', totalMeshes, coordinateInfo };
261
304
  }
@@ -274,8 +317,11 @@ export class GeometryProcessor {
274
317
  }
275
318
  let totalGeometries = 0;
276
319
  let totalInstances = 0;
277
- for (let startJob = 0; startJob < prePass.totalJobs; startJob += batchSize) {
278
- const endJob = Math.min(startJob + batchSize, prePass.totalJobs);
320
+ // Cap at ~30 batches max to avoid excessive per-batch overhead
321
+ const maxBatches = 30;
322
+ const effectiveBatchSize = Math.max(batchSize, Math.ceil(prePass.totalJobs / maxBatches));
323
+ for (let startJob = 0; startJob < prePass.totalJobs; startJob += effectiveBatchSize) {
324
+ const endJob = Math.min(startJob + effectiveBatchSize, prePass.totalJobs);
279
325
  const jobSlice = prePass.jobs.slice(startJob * 3, endJob * 3);
280
326
  const collection = api.processInstancedGeometryBatch(buffer, jobSlice, prePass.unitScale, prePass.rtcOffset?.[0] ?? 0, prePass.rtcOffset?.[1] ?? 0, prePass.rtcOffset?.[2] ?? 0, prePass.needsShift, prePass.styleIds, prePass.styleColors);
281
327
  const batch = this.convertInstancedCollectionToBatch(collection);
@@ -319,6 +365,7 @@ export class GeometryProcessor {
319
365
  };
320
366
  await new Promise(resolve => setTimeout(resolve, 0));
321
367
  }
368
+ api.clearPrePassCache?.();
322
369
  const coordinateInfo = this.withBuildingRotation(this.coordinateHandler.getFinalCoordinateInfo(), buildingRotation);
323
370
  yield { type: 'complete', totalGeometries, totalInstances, coordinateInfo };
324
371
  }
@@ -349,14 +396,69 @@ export class GeometryProcessor {
349
396
  yield { type: 'model-open', modelID: 0 };
350
397
  // NATIVE PATH - Use Tauri streaming
351
398
  console.time('[GeometryProcessor] native-streaming');
352
- // For native, we do a single batch for now (streaming via events is complex)
353
- // TODO: Implement proper streaming with Tauri events
354
- const result = await this.platformBridge.processGeometry(buffer);
355
- const totalMeshes = result.meshes.length;
356
- this.coordinateHandler.processMeshesIncremental(result.meshes);
399
+ const queuedEvents = [];
400
+ let resolvePending = null;
401
+ let completed = false;
402
+ let streamError = null;
403
+ let completedTotalMeshes;
404
+ let totalMeshes = 0;
405
+ const wake = () => {
406
+ if (resolvePending) {
407
+ resolvePending();
408
+ resolvePending = null;
409
+ }
410
+ };
411
+ const streamingPromise = this.platformBridge.processGeometryStreaming(buffer, {
412
+ onBatch: (batch) => {
413
+ queuedEvents.push({ type: 'batch', meshes: batch.meshes, nativeTelemetry: batch.nativeTelemetry });
414
+ wake();
415
+ },
416
+ onColorUpdate: (updates) => {
417
+ queuedEvents.push({ type: 'colorUpdate', updates: new Map(updates) });
418
+ wake();
419
+ },
420
+ onComplete: (stats) => {
421
+ this.lastNativeStats = stats;
422
+ completedTotalMeshes = stats.totalMeshes;
423
+ completed = true;
424
+ wake();
425
+ },
426
+ onError: (error) => {
427
+ streamError = error;
428
+ completed = true;
429
+ wake();
430
+ },
431
+ });
432
+ while (!completed || queuedEvents.length > 0) {
433
+ while (queuedEvents.length > 0) {
434
+ const event = queuedEvents.shift();
435
+ if (event.type === 'colorUpdate') {
436
+ yield { type: 'colorUpdate', updates: event.updates };
437
+ continue;
438
+ }
439
+ this.coordinateHandler.processMeshesIncremental(event.meshes);
440
+ totalMeshes += event.meshes.length;
441
+ const coordinateInfo = this.coordinateHandler.getCurrentCoordinateInfo();
442
+ yield {
443
+ type: 'batch',
444
+ meshes: event.meshes,
445
+ totalSoFar: totalMeshes,
446
+ coordinateInfo: coordinateInfo || undefined,
447
+ nativeTelemetry: event.nativeTelemetry,
448
+ };
449
+ }
450
+ if (streamError) {
451
+ throw streamError;
452
+ }
453
+ if (!completed) {
454
+ await new Promise((resolve) => {
455
+ resolvePending = resolve;
456
+ });
457
+ }
458
+ }
459
+ await streamingPromise;
357
460
  const coordinateInfo = this.coordinateHandler.getFinalCoordinateInfo();
358
- yield { type: 'batch', meshes: result.meshes, totalSoFar: totalMeshes, coordinateInfo: coordinateInfo || undefined };
359
- yield { type: 'complete', totalMeshes, coordinateInfo };
461
+ yield { type: 'complete', totalMeshes: completedTotalMeshes ?? totalMeshes, coordinateInfo };
360
462
  console.timeEnd('[GeometryProcessor] native-streaming');
361
463
  }
362
464
  else {
@@ -410,6 +512,34 @@ export class GeometryProcessor {
410
512
  yield { type: 'complete', totalMeshes, coordinateInfo: finalCoordinateInfo };
411
513
  }
412
514
  }
515
+ /**
516
+ * Stream geometry directly from a filesystem path in native desktop hosts.
517
+ * This avoids copying very large IFC files through JS and Tauri IPC.
518
+ */
519
+ async *processStreamingPath(path, estimatedBytes = 0, cacheKey) {
520
+ if (!this.isNative) {
521
+ throw new Error('File-path geometry streaming is only available in native desktop builds');
522
+ }
523
+ if (!this.platformBridge) {
524
+ await this.init();
525
+ }
526
+ if (!this.platformBridge?.processGeometryStreamingPath) {
527
+ throw new Error('Native platform bridge does not support file-path streaming');
528
+ }
529
+ yield* this.streamNativeGeometry((options) => this.platformBridge.processGeometryStreamingPath(path, options, cacheKey), estimatedBytes > 0 ? estimatedBytes / 1000 : 0);
530
+ }
531
+ async *processStreamingCache(cacheKey) {
532
+ if (!this.isNative) {
533
+ throw new Error('Native cached geometry streaming is only available in native desktop builds');
534
+ }
535
+ if (!this.platformBridge) {
536
+ await this.init();
537
+ }
538
+ if (!this.platformBridge?.processGeometryStreamingCache) {
539
+ throw new Error('Native platform bridge does not support cached geometry streaming');
540
+ }
541
+ yield* this.streamNativeGeometry((options) => this.platformBridge.processGeometryStreamingCache(cacheKey, options), 0);
542
+ }
413
543
  /**
414
544
  * Process IFC file with streaming instanced geometry output for progressive rendering
415
545
  * Groups identical geometries by hash (before transformation) for GPU instancing
@@ -753,6 +883,128 @@ export class GeometryProcessor {
753
883
  }
754
884
  return this.bridge.getApi();
755
885
  }
886
+ getLastNativeStats() {
887
+ return this.lastNativeStats;
888
+ }
889
+ enqueueNativeStreamingEvent(queuedEvents, event, queueState) {
890
+ if (event.type === 'colorUpdate') {
891
+ const lastEvent = queuedEvents[queuedEvents.length - 1];
892
+ if (lastEvent?.type === 'colorUpdate') {
893
+ for (const [expressId, color] of event.updates) {
894
+ lastEvent.updates.set(expressId, color);
895
+ }
896
+ return;
897
+ }
898
+ queuedEvents.push(event);
899
+ return;
900
+ }
901
+ const lastEvent = queuedEvents[queuedEvents.length - 1];
902
+ const shouldCoalesce = lastEvent?.type === 'batch' &&
903
+ (queuedEvents.length >= MAX_NATIVE_STREAM_QUEUE_EVENTS || queueState.queuedMeshes >= MAX_NATIVE_STREAM_QUEUE_MESHES);
904
+ if (shouldCoalesce) {
905
+ for (let i = 0; i < event.meshes.length; i++) {
906
+ lastEvent.meshes.push(event.meshes[i]);
907
+ }
908
+ lastEvent.nativeTelemetry = event.nativeTelemetry;
909
+ queueState.coalescedBatchCount += 1;
910
+ }
911
+ else {
912
+ queuedEvents.push(event);
913
+ }
914
+ queueState.queuedMeshes += event.meshes.length;
915
+ }
916
+ async *streamNativeGeometry(startStream, totalEstimate) {
917
+ this.coordinateHandler.reset();
918
+ yield { type: 'start', totalEstimate };
919
+ await yieldToEventLoop();
920
+ yield { type: 'model-open', modelID: 0 };
921
+ const queuedEvents = [];
922
+ const queueState = { queuedMeshes: 0, coalescedBatchCount: 0 };
923
+ let resolvePending = null;
924
+ let completed = false;
925
+ let streamError = null;
926
+ let completedTotalMeshes;
927
+ let totalMeshes = 0;
928
+ const wake = () => {
929
+ if (resolvePending) {
930
+ resolvePending();
931
+ resolvePending = null;
932
+ }
933
+ };
934
+ const streamingPromise = startStream({
935
+ onBatch: (batch) => {
936
+ this.enqueueNativeStreamingEvent(queuedEvents, { type: 'batch', meshes: batch.meshes, nativeTelemetry: batch.nativeTelemetry }, queueState);
937
+ wake();
938
+ },
939
+ onColorUpdate: (updates) => {
940
+ this.enqueueNativeStreamingEvent(queuedEvents, { type: 'colorUpdate', updates: new Map(updates) }, queueState);
941
+ wake();
942
+ },
943
+ onComplete: (stats) => {
944
+ this.lastNativeStats = stats;
945
+ completedTotalMeshes = stats.totalMeshes;
946
+ completed = true;
947
+ wake();
948
+ },
949
+ onError: (error) => {
950
+ streamError = error;
951
+ completed = true;
952
+ wake();
953
+ },
954
+ });
955
+ while (!completed || queuedEvents.length > 0) {
956
+ let drainedEventCount = 0;
957
+ let drainedMeshCount = 0;
958
+ let drainStartedAt = performance.now();
959
+ while (queuedEvents.length > 0) {
960
+ const event = queuedEvents.shift();
961
+ if (event.type === 'colorUpdate') {
962
+ yield { type: 'colorUpdate', updates: event.updates };
963
+ continue;
964
+ }
965
+ queueState.queuedMeshes = Math.max(0, queueState.queuedMeshes - event.meshes.length);
966
+ // Native desktop streaming already produces site-local geometry, so
967
+ // avoid the generic JS RTC/outlier scan on every streamed batch.
968
+ this.coordinateHandler.processTrustedMeshesIncremental(event.meshes);
969
+ totalMeshes += event.meshes.length;
970
+ const coordinateInfo = this.coordinateHandler.getCurrentCoordinateInfo();
971
+ yield {
972
+ type: 'batch',
973
+ meshes: event.meshes,
974
+ totalSoFar: totalMeshes,
975
+ coordinateInfo: coordinateInfo || undefined,
976
+ nativeTelemetry: event.nativeTelemetry,
977
+ };
978
+ drainedEventCount += 1;
979
+ drainedMeshCount += event.meshes.length;
980
+ if (queuedEvents.length > 0) {
981
+ const shouldYield = drainedEventCount >= MAX_NATIVE_STREAM_EVENTS_PER_TURN ||
982
+ drainedMeshCount >= MAX_NATIVE_STREAM_MESHES_PER_TURN ||
983
+ performance.now() - drainStartedAt >= MAX_NATIVE_STREAM_DRAIN_MS;
984
+ if (shouldYield) {
985
+ await yieldToEventLoop();
986
+ drainedEventCount = 0;
987
+ drainedMeshCount = 0;
988
+ drainStartedAt = performance.now();
989
+ }
990
+ }
991
+ }
992
+ if (streamError) {
993
+ throw streamError;
994
+ }
995
+ if (!completed) {
996
+ await new Promise((resolve) => {
997
+ resolvePending = resolve;
998
+ });
999
+ }
1000
+ }
1001
+ await streamingPromise;
1002
+ if (queueState.coalescedBatchCount > 0) {
1003
+ console.info(`[GeometryProcessor] Coalesced ${queueState.coalescedBatchCount} native batches while JS drained the queue`);
1004
+ }
1005
+ const coordinateInfo = this.coordinateHandler.getFinalCoordinateInfo();
1006
+ yield { type: 'complete', totalMeshes: completedTotalMeshes ?? totalMeshes, coordinateInfo };
1007
+ }
756
1008
  /**
757
1009
  * Parse symbolic representations (Plan, Annotation, FootPrint) from IFC content
758
1010
  * These are pre-authored 2D curves for architectural drawings (door swings, window cuts, etc.)