@ifc-lite/geometry 1.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.
Files changed (50) hide show
  1. package/LICENSE +373 -0
  2. package/dist/buffer-builder.d.ts +21 -0
  3. package/dist/buffer-builder.d.ts.map +1 -0
  4. package/dist/buffer-builder.js +44 -0
  5. package/dist/buffer-builder.js.map +1 -0
  6. package/dist/coordinate-handler.d.ts +91 -0
  7. package/dist/coordinate-handler.d.ts.map +1 -0
  8. package/dist/coordinate-handler.js +324 -0
  9. package/dist/coordinate-handler.js.map +1 -0
  10. package/dist/default-materials.d.ts +22 -0
  11. package/dist/default-materials.d.ts.map +1 -0
  12. package/dist/default-materials.js +113 -0
  13. package/dist/default-materials.js.map +1 -0
  14. package/dist/geometry.worker.d.ts +2 -0
  15. package/dist/geometry.worker.d.ts.map +1 -0
  16. package/dist/geometry.worker.js +118 -0
  17. package/dist/geometry.worker.js.map +1 -0
  18. package/dist/ifc-lite-bridge.d.ts +32 -0
  19. package/dist/ifc-lite-bridge.d.ts.map +1 -0
  20. package/dist/ifc-lite-bridge.js +58 -0
  21. package/dist/ifc-lite-bridge.js.map +1 -0
  22. package/dist/ifc-lite-mesh-collector.d.ts +28 -0
  23. package/dist/ifc-lite-mesh-collector.d.ts.map +1 -0
  24. package/dist/ifc-lite-mesh-collector.js +131 -0
  25. package/dist/ifc-lite-mesh-collector.js.map +1 -0
  26. package/dist/index.d.ts +72 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +172 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/lod.d.ts +60 -0
  31. package/dist/lod.d.ts.map +1 -0
  32. package/dist/lod.js +113 -0
  33. package/dist/lod.js.map +1 -0
  34. package/dist/progressive-loader.d.ts +48 -0
  35. package/dist/progressive-loader.d.ts.map +1 -0
  36. package/dist/progressive-loader.js +143 -0
  37. package/dist/progressive-loader.js.map +1 -0
  38. package/dist/style-cache.d.ts +36 -0
  39. package/dist/style-cache.d.ts.map +1 -0
  40. package/dist/style-cache.js +127 -0
  41. package/dist/style-cache.js.map +1 -0
  42. package/dist/types.d.ts +32 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +5 -0
  45. package/dist/types.js.map +1 -0
  46. package/dist/worker-pool.d.ts +56 -0
  47. package/dist/worker-pool.d.ts.map +1 -0
  48. package/dist/worker-pool.js +160 -0
  49. package/dist/worker-pool.js.map +1 -0
  50. package/package.json +47 -0
@@ -0,0 +1,324 @@
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
+ export class CoordinateHandler {
5
+ originShift = { x: 0, y: 0, z: 0 };
6
+ THRESHOLD = 10000; // 10km - threshold for large coordinates
7
+ // Maximum reasonable coordinate - 10,000 km covers any georeferenced building on Earth
8
+ // Values beyond this are garbage/corrupted data (safety net)
9
+ MAX_REASONABLE_COORD = 1e7;
10
+ // For incremental processing
11
+ accumulatedBounds = null;
12
+ shiftCalculated = false;
13
+ /**
14
+ * Check if a coordinate value is reasonable (not corrupted garbage)
15
+ */
16
+ isReasonableValue(value) {
17
+ return Number.isFinite(value) && Math.abs(value) < this.MAX_REASONABLE_COORD;
18
+ }
19
+ /**
20
+ * Calculate bounding box from all meshes (filtering out corrupted values)
21
+ */
22
+ calculateBounds(meshes) {
23
+ const bounds = {
24
+ min: { x: Infinity, y: Infinity, z: Infinity },
25
+ max: { x: -Infinity, y: -Infinity, z: -Infinity },
26
+ };
27
+ let validVertexCount = 0;
28
+ let corruptedVertexCount = 0;
29
+ for (const mesh of meshes) {
30
+ const positions = mesh.positions;
31
+ for (let i = 0; i < positions.length; i += 3) {
32
+ const x = positions[i];
33
+ const y = positions[i + 1];
34
+ const z = positions[i + 2];
35
+ // Only include reasonable values (filter out corrupted garbage)
36
+ if (this.isReasonableValue(x) && this.isReasonableValue(y) && this.isReasonableValue(z)) {
37
+ bounds.min.x = Math.min(bounds.min.x, x);
38
+ bounds.min.y = Math.min(bounds.min.y, y);
39
+ bounds.min.z = Math.min(bounds.min.z, z);
40
+ bounds.max.x = Math.max(bounds.max.x, x);
41
+ bounds.max.y = Math.max(bounds.max.y, y);
42
+ bounds.max.z = Math.max(bounds.max.z, z);
43
+ validVertexCount++;
44
+ }
45
+ else {
46
+ corruptedVertexCount++;
47
+ }
48
+ }
49
+ }
50
+ if (corruptedVertexCount > 0) {
51
+ console.log(`[CoordinateHandler] Filtered ${corruptedVertexCount} corrupted vertices, kept ${validVertexCount} valid`);
52
+ }
53
+ return bounds;
54
+ }
55
+ /**
56
+ * Check if coordinate shift is needed
57
+ */
58
+ needsShift(bounds) {
59
+ const maxCoord = Math.max(Math.abs(bounds.min.x), Math.abs(bounds.max.x), Math.abs(bounds.min.y), Math.abs(bounds.max.y), Math.abs(bounds.min.z), Math.abs(bounds.max.z));
60
+ return maxCoord > this.THRESHOLD;
61
+ }
62
+ /**
63
+ * Calculate centroid (center point) from bounds
64
+ */
65
+ calculateCentroid(bounds) {
66
+ return {
67
+ x: (bounds.min.x + bounds.max.x) / 2,
68
+ y: (bounds.min.y + bounds.max.y) / 2,
69
+ z: (bounds.min.z + bounds.max.z) / 2,
70
+ };
71
+ }
72
+ /**
73
+ * Shift positions in-place by subtracting origin shift
74
+ * Corrupted values are set to 0 (center of shifted coordinate system)
75
+ */
76
+ shiftPositions(positions, shift) {
77
+ for (let i = 0; i < positions.length; i += 3) {
78
+ const x = positions[i];
79
+ const y = positions[i + 1];
80
+ const z = positions[i + 2];
81
+ // For corrupted values, set to center (0) in shifted space
82
+ if (this.isReasonableValue(x) && this.isReasonableValue(y) && this.isReasonableValue(z)) {
83
+ positions[i] = x - shift.x;
84
+ positions[i + 1] = y - shift.y;
85
+ positions[i + 2] = z - shift.z;
86
+ }
87
+ else {
88
+ // Corrupted vertex - set to origin to avoid visual artifacts
89
+ positions[i] = 0;
90
+ positions[i + 1] = 0;
91
+ positions[i + 2] = 0;
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Shift bounds by subtracting origin shift
97
+ */
98
+ shiftBounds(bounds, shift) {
99
+ return {
100
+ min: {
101
+ x: bounds.min.x - shift.x,
102
+ y: bounds.min.y - shift.y,
103
+ z: bounds.min.z - shift.z,
104
+ },
105
+ max: {
106
+ x: bounds.max.x - shift.x,
107
+ y: bounds.max.y - shift.y,
108
+ z: bounds.max.z - shift.z,
109
+ },
110
+ };
111
+ }
112
+ /**
113
+ * Process meshes: detect large coordinates and shift if needed
114
+ */
115
+ processMeshes(meshes) {
116
+ const emptyResult = {
117
+ originShift: { x: 0, y: 0, z: 0 },
118
+ originalBounds: {
119
+ min: { x: 0, y: 0, z: 0 },
120
+ max: { x: 0, y: 0, z: 0 },
121
+ },
122
+ shiftedBounds: {
123
+ min: { x: 0, y: 0, z: 0 },
124
+ max: { x: 0, y: 0, z: 0 },
125
+ },
126
+ isGeoReferenced: false,
127
+ };
128
+ if (meshes.length === 0) {
129
+ return emptyResult;
130
+ }
131
+ // Calculate original bounds (filtering corrupted values)
132
+ const originalBounds = this.calculateBounds(meshes);
133
+ // Check if we got valid bounds
134
+ const hasValidBounds = originalBounds.min.x !== Infinity && originalBounds.max.x !== -Infinity;
135
+ if (!hasValidBounds) {
136
+ console.warn('[CoordinateHandler] No valid coordinates found in geometry');
137
+ return emptyResult;
138
+ }
139
+ const size = {
140
+ x: originalBounds.max.x - originalBounds.min.x,
141
+ y: originalBounds.max.y - originalBounds.min.y,
142
+ z: originalBounds.max.z - originalBounds.min.z,
143
+ };
144
+ const maxSize = Math.max(size.x, size.y, size.z);
145
+ console.log('[CoordinateHandler] Original bounds:', {
146
+ min: originalBounds.min,
147
+ max: originalBounds.max,
148
+ size,
149
+ maxSize: maxSize.toFixed(2) + 'm',
150
+ });
151
+ // Check if shift is needed (>10km from origin)
152
+ const needsShift = this.needsShift(originalBounds);
153
+ if (!needsShift) {
154
+ // No shift needed - just clean up corrupted values in-place
155
+ console.log('[CoordinateHandler] Coordinates within normal range, no shift needed');
156
+ // Still shift by 0 to clean up corrupted vertices
157
+ const zeroShift = { x: 0, y: 0, z: 0 };
158
+ for (const mesh of meshes) {
159
+ this.shiftPositions(mesh.positions, zeroShift);
160
+ }
161
+ return {
162
+ originShift: zeroShift,
163
+ originalBounds,
164
+ shiftedBounds: originalBounds,
165
+ isGeoReferenced: false,
166
+ };
167
+ }
168
+ // Calculate centroid as origin shift
169
+ const centroid = this.calculateCentroid(originalBounds);
170
+ this.originShift = centroid;
171
+ console.log('[CoordinateHandler] Large coordinates detected, shifting to origin:', {
172
+ centroid,
173
+ 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',
174
+ });
175
+ // Shift all mesh positions
176
+ for (const mesh of meshes) {
177
+ this.shiftPositions(mesh.positions, centroid);
178
+ }
179
+ // Calculate shifted bounds
180
+ const shiftedBounds = this.shiftBounds(originalBounds, centroid);
181
+ console.log('[CoordinateHandler] Shifted bounds:', {
182
+ min: shiftedBounds.min,
183
+ max: shiftedBounds.max,
184
+ maxSize: maxSize.toFixed(2) + 'm',
185
+ });
186
+ return {
187
+ originShift: centroid,
188
+ originalBounds,
189
+ shiftedBounds,
190
+ isGeoReferenced: true,
191
+ };
192
+ }
193
+ /**
194
+ * Convert local (shifted) coordinates back to world coordinates
195
+ */
196
+ toWorldCoordinates(localPos) {
197
+ return {
198
+ x: localPos.x + this.originShift.x,
199
+ y: localPos.y + this.originShift.y,
200
+ z: localPos.z + this.originShift.z,
201
+ };
202
+ }
203
+ /**
204
+ * Convert world coordinates to local (shifted) coordinates
205
+ */
206
+ toLocalCoordinates(worldPos) {
207
+ return {
208
+ x: worldPos.x - this.originShift.x,
209
+ y: worldPos.y - this.originShift.y,
210
+ z: worldPos.z - this.originShift.z,
211
+ };
212
+ }
213
+ /**
214
+ * Get current origin shift
215
+ */
216
+ getOriginShift() {
217
+ return { ...this.originShift };
218
+ }
219
+ /**
220
+ * Process meshes incrementally for streaming
221
+ * Accumulates bounds and applies shift once calculated
222
+ */
223
+ processMeshesIncremental(batch) {
224
+ // Accumulate bounds from this batch
225
+ const batchBounds = this.calculateBounds(batch);
226
+ if (this.accumulatedBounds === null) {
227
+ this.accumulatedBounds = batchBounds;
228
+ }
229
+ else {
230
+ // Expand accumulated bounds
231
+ this.accumulatedBounds.min.x = Math.min(this.accumulatedBounds.min.x, batchBounds.min.x);
232
+ this.accumulatedBounds.min.y = Math.min(this.accumulatedBounds.min.y, batchBounds.min.y);
233
+ this.accumulatedBounds.min.z = Math.min(this.accumulatedBounds.min.z, batchBounds.min.z);
234
+ this.accumulatedBounds.max.x = Math.max(this.accumulatedBounds.max.x, batchBounds.max.x);
235
+ this.accumulatedBounds.max.y = Math.max(this.accumulatedBounds.max.y, batchBounds.max.y);
236
+ this.accumulatedBounds.max.z = Math.max(this.accumulatedBounds.max.z, batchBounds.max.z);
237
+ }
238
+ // Calculate shift on first batch if needed
239
+ if (!this.shiftCalculated && this.accumulatedBounds) {
240
+ const hasValidBounds = this.accumulatedBounds.min.x !== Infinity &&
241
+ this.accumulatedBounds.max.x !== -Infinity;
242
+ if (hasValidBounds) {
243
+ const size = {
244
+ x: this.accumulatedBounds.max.x - this.accumulatedBounds.min.x,
245
+ y: this.accumulatedBounds.max.y - this.accumulatedBounds.min.y,
246
+ z: this.accumulatedBounds.max.z - this.accumulatedBounds.min.z,
247
+ };
248
+ const maxSize = Math.max(size.x, size.y, size.z);
249
+ const centroid = this.calculateCentroid(this.accumulatedBounds);
250
+ const distanceFromOrigin = Math.sqrt(centroid.x ** 2 + centroid.y ** 2 + centroid.z ** 2);
251
+ // Check if shift is needed (>10km from origin)
252
+ if (distanceFromOrigin > this.THRESHOLD || maxSize > this.THRESHOLD) {
253
+ this.originShift = centroid;
254
+ console.log('[CoordinateHandler] Large coordinates detected, shifting to origin:', {
255
+ distanceFromOrigin: distanceFromOrigin.toFixed(2) + 'm',
256
+ maxSize: maxSize.toFixed(2) + 'm',
257
+ shift: this.originShift,
258
+ });
259
+ }
260
+ }
261
+ this.shiftCalculated = true;
262
+ }
263
+ // Apply shift to this batch
264
+ if (this.originShift.x !== 0 || this.originShift.y !== 0 || this.originShift.z !== 0) {
265
+ for (const mesh of batch) {
266
+ this.shiftPositions(mesh.positions, this.originShift);
267
+ }
268
+ }
269
+ }
270
+ /**
271
+ * Get current coordinate info (for incremental updates)
272
+ */
273
+ getCurrentCoordinateInfo() {
274
+ if (!this.accumulatedBounds) {
275
+ return null;
276
+ }
277
+ const hasValidBounds = this.accumulatedBounds.min.x !== Infinity &&
278
+ this.accumulatedBounds.max.x !== -Infinity;
279
+ if (!hasValidBounds) {
280
+ return null;
281
+ }
282
+ const shiftedBounds = this.shiftBounds(this.accumulatedBounds, this.originShift);
283
+ const isGeoReferenced = this.originShift.x !== 0 ||
284
+ this.originShift.y !== 0 ||
285
+ this.originShift.z !== 0;
286
+ return {
287
+ originShift: { ...this.originShift },
288
+ originalBounds: { ...this.accumulatedBounds },
289
+ shiftedBounds,
290
+ isGeoReferenced,
291
+ };
292
+ }
293
+ /**
294
+ * Get final coordinate info after incremental processing
295
+ */
296
+ getFinalCoordinateInfo() {
297
+ const current = this.getCurrentCoordinateInfo();
298
+ if (current) {
299
+ return current;
300
+ }
301
+ // Fallback to zero bounds if no valid bounds found
302
+ return {
303
+ originShift: { x: 0, y: 0, z: 0 },
304
+ originalBounds: {
305
+ min: { x: 0, y: 0, z: 0 },
306
+ max: { x: 0, y: 0, z: 0 },
307
+ },
308
+ shiftedBounds: {
309
+ min: { x: 0, y: 0, z: 0 },
310
+ max: { x: 0, y: 0, z: 0 },
311
+ },
312
+ isGeoReferenced: false,
313
+ };
314
+ }
315
+ /**
316
+ * Reset incremental state (for new file)
317
+ */
318
+ reset() {
319
+ this.accumulatedBounds = null;
320
+ this.shiftCalculated = false;
321
+ this.originShift = { x: 0, y: 0, z: 0 };
322
+ }
323
+ }
324
+ //# sourceMappingURL=coordinate-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinate-handler.js","sourceRoot":"","sources":["../src/coordinate-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Default material colors for IFC entity types
3
+ * Provides beautiful architectural colors when IFC surface styles are not available
4
+ */
5
+ export interface MaterialColor {
6
+ baseColor: [number, number, number, number];
7
+ metallic: number;
8
+ roughness: number;
9
+ }
10
+ /**
11
+ * Default material palette inspired by architectural visualization
12
+ */
13
+ export declare const DEFAULT_MATERIALS: Record<string, MaterialColor>;
14
+ /**
15
+ * Get default material color for an IFC entity type
16
+ */
17
+ export declare function getDefaultMaterialColor(entityType: string | null | undefined): MaterialColor;
18
+ /**
19
+ * Get default color array for an IFC entity type (for backward compatibility)
20
+ */
21
+ export declare function getDefaultColor(entityType: string | null | undefined): [number, number, number, number];
22
+ //# sourceMappingURL=default-materials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-materials.d.ts","sourceRoot":"","sources":["../src/default-materials.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CA4F3D,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,CAU5F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEvG"}
@@ -0,0 +1,113 @@
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
+ * Default material palette inspired by architectural visualization
6
+ */
7
+ export const DEFAULT_MATERIALS = {
8
+ // Structural elements
9
+ 'IfcWall': {
10
+ baseColor: [0.95, 0.93, 0.88, 1.0], // Warm white (matte plaster)
11
+ metallic: 0.0,
12
+ roughness: 0.8,
13
+ },
14
+ 'IfcSlab': {
15
+ baseColor: [0.75, 0.75, 0.78, 1.0], // Cool gray (concrete)
16
+ metallic: 0.0,
17
+ roughness: 0.9,
18
+ },
19
+ 'IfcColumn': {
20
+ baseColor: [0.7, 0.7, 0.7, 1.0], // Light gray (concrete/steel)
21
+ metallic: 0.0,
22
+ roughness: 0.5,
23
+ },
24
+ 'IfcBeam': {
25
+ baseColor: [0.55, 0.55, 0.6, 1.0], // Steel blue
26
+ metallic: 0.8,
27
+ roughness: 0.4,
28
+ },
29
+ // Openings
30
+ 'IfcWindow': {
31
+ baseColor: [0.6, 0.8, 0.95, 0.3], // Sky blue (glass, transparent)
32
+ metallic: 0.0,
33
+ roughness: 0.1,
34
+ },
35
+ 'IfcDoor': {
36
+ baseColor: [0.6, 0.45, 0.3, 1.0], // Warm wood
37
+ metallic: 0.0,
38
+ roughness: 0.6,
39
+ },
40
+ 'IfcOpeningElement': {
41
+ baseColor: [0.5, 0.5, 0.5, 0.5], // Gray (generic opening)
42
+ metallic: 0.0,
43
+ roughness: 0.5,
44
+ },
45
+ // Roof and stairs
46
+ 'IfcRoof': {
47
+ baseColor: [0.7, 0.5, 0.4, 1.0], // Terra cotta (tiles)
48
+ metallic: 0.0,
49
+ roughness: 0.7,
50
+ },
51
+ 'IfcStair': {
52
+ baseColor: [0.8, 0.75, 0.65, 1.0], // Sandstone
53
+ metallic: 0.0,
54
+ roughness: 0.6,
55
+ },
56
+ 'IfcRailing': {
57
+ baseColor: [0.3, 0.3, 0.35, 1.0], // Dark metal
58
+ metallic: 0.9,
59
+ roughness: 0.3,
60
+ },
61
+ // Furniture and fixtures
62
+ 'IfcFurniture': {
63
+ baseColor: [0.7, 0.6, 0.5, 1.0], // Natural wood
64
+ metallic: 0.0,
65
+ roughness: 0.5,
66
+ },
67
+ 'IfcSanitaryTerminal': {
68
+ baseColor: [0.9, 0.9, 0.95, 1.0], // White porcelain
69
+ metallic: 0.0,
70
+ roughness: 0.3,
71
+ },
72
+ // MEP elements
73
+ 'IfcPipeSegment': {
74
+ baseColor: [0.4, 0.5, 0.6, 1.0], // Blue-gray (pipe)
75
+ metallic: 0.7,
76
+ roughness: 0.4,
77
+ },
78
+ 'IfcDuctSegment': {
79
+ baseColor: [0.6, 0.6, 0.65, 1.0], // Light gray (duct)
80
+ metallic: 0.3,
81
+ roughness: 0.5,
82
+ },
83
+ 'IfcCableSegment': {
84
+ baseColor: [0.3, 0.3, 0.3, 1.0], // Dark gray (cable)
85
+ metallic: 0.0,
86
+ roughness: 0.8,
87
+ },
88
+ // Default fallback
89
+ 'default': {
90
+ baseColor: [0.8, 0.8, 0.8, 1.0], // Neutral gray
91
+ metallic: 0.0,
92
+ roughness: 0.6,
93
+ },
94
+ };
95
+ /**
96
+ * Get default material color for an IFC entity type
97
+ */
98
+ export function getDefaultMaterialColor(entityType) {
99
+ if (!entityType) {
100
+ return DEFAULT_MATERIALS['default'];
101
+ }
102
+ // Normalize type name (remove 'IFC' prefix, handle case)
103
+ const normalizedType = entityType.replace(/^IFC/, '').replace(/^Ifc/, '');
104
+ const ifcType = `Ifc${normalizedType}`;
105
+ return DEFAULT_MATERIALS[ifcType] || DEFAULT_MATERIALS[entityType] || DEFAULT_MATERIALS['default'];
106
+ }
107
+ /**
108
+ * Get default color array for an IFC entity type (for backward compatibility)
109
+ */
110
+ export function getDefaultColor(entityType) {
111
+ return getDefaultMaterialColor(entityType).baseColor;
112
+ }
113
+ //# sourceMappingURL=default-materials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-materials.js","sourceRoot":"","sources":["../src/default-materials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=geometry.worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.worker.d.ts","sourceRoot":"","sources":["../src/geometry.worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
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
+ * Geometry Worker - Handles mesh collection in a Web Worker
6
+ * Uses IFC-Lite for native Rust geometry processing (1.9x faster than web-ifc)
7
+ */
8
+ import init, { IfcAPI } from '@ifc-lite/wasm';
9
+ import { IfcLiteMeshCollector } from './ifc-lite-mesh-collector.js';
10
+ // Global IFC-Lite API instance (initialized once per worker)
11
+ let ifcApi = null;
12
+ let ifcApiInitialized = false;
13
+ /**
14
+ * Initialize IFC-Lite API in worker context
15
+ */
16
+ async function initIfcApi(wasmPath = '/') {
17
+ if (ifcApi && ifcApiInitialized) {
18
+ return ifcApi;
19
+ }
20
+ const initStart = performance.now();
21
+ console.log('[Worker] Initializing IFC-Lite...');
22
+ // Initialize WASM module
23
+ const wasmUrl = wasmPath.endsWith('/')
24
+ ? `${wasmPath}ifc_lite_wasm_bg.wasm`
25
+ : `${wasmPath}/ifc_lite_wasm_bg.wasm`;
26
+ await init(wasmUrl);
27
+ ifcApi = new IfcAPI();
28
+ ifcApiInitialized = true;
29
+ const initTime = performance.now() - initStart;
30
+ console.log(`[Worker] IFC-Lite initialized in ${initTime.toFixed(2)}ms`);
31
+ return ifcApi;
32
+ }
33
+ /**
34
+ * Handle mesh collection task
35
+ */
36
+ async function handleMeshCollection(data) {
37
+ const taskStart = performance.now();
38
+ const { buffer, wasmPath = '/' } = data;
39
+ // Initialize IFC-Lite if needed
40
+ const apiInitStart = performance.now();
41
+ const api = await initIfcApi(wasmPath);
42
+ const apiInitTime = performance.now() - apiInitStart;
43
+ if (apiInitTime > 10) {
44
+ console.log(`[Worker] IFC-Lite init took ${apiInitTime.toFixed(2)}ms`);
45
+ }
46
+ // Convert buffer to string (IFC files are text)
47
+ const decoder = new TextDecoder();
48
+ const content = decoder.decode(new Uint8Array(buffer));
49
+ // Collect meshes using IFC-Lite
50
+ const collectStart = performance.now();
51
+ const collector = new IfcLiteMeshCollector(api, content);
52
+ const meshes = collector.collectMeshes();
53
+ const collectTime = performance.now() - collectStart;
54
+ const totalTime = performance.now() - taskStart;
55
+ console.log(`[Worker] Mesh collection: ${collectTime.toFixed(2)}ms, total: ${totalTime.toFixed(2)}ms, meshes: ${meshes.length}`);
56
+ return meshes;
57
+ }
58
+ /**
59
+ * Process task and send result back to main thread
60
+ */
61
+ async function processTask(task) {
62
+ try {
63
+ let result;
64
+ switch (task.type) {
65
+ case 'mesh-collection':
66
+ result = await handleMeshCollection(task.data);
67
+ break;
68
+ case 'generate-lod':
69
+ case 'build-bvh':
70
+ throw new Error(`Task type '${task.type}' not yet implemented`);
71
+ default:
72
+ throw new Error(`Unknown task type: ${task.type}`);
73
+ }
74
+ // Extract transferable buffers for zero-copy transfer
75
+ const transferables = [];
76
+ if (Array.isArray(result)) {
77
+ // MeshData[] - extract all typed array buffers
78
+ for (const mesh of result) {
79
+ if (mesh.positions?.buffer) {
80
+ transferables.push(mesh.positions.buffer);
81
+ }
82
+ if (mesh.normals?.buffer) {
83
+ transferables.push(mesh.normals.buffer);
84
+ }
85
+ if (mesh.indices?.buffer) {
86
+ transferables.push(mesh.indices.buffer);
87
+ }
88
+ }
89
+ }
90
+ // Send result with transferables
91
+ const response = {
92
+ id: task.id,
93
+ type: 'task-result',
94
+ result,
95
+ };
96
+ self.postMessage(response, { transfer: transferables });
97
+ }
98
+ catch (error) {
99
+ // Send error back
100
+ const response = {
101
+ id: task.id,
102
+ type: 'task-error',
103
+ error: error instanceof Error ? error.message : String(error),
104
+ };
105
+ self.postMessage(response);
106
+ }
107
+ }
108
+ // Signal that worker is ready (send immediately on load)
109
+ const readyMessage = {
110
+ id: '',
111
+ type: 'ready',
112
+ };
113
+ self.postMessage(readyMessage);
114
+ // Listen for messages from main thread
115
+ self.onmessage = async (e) => {
116
+ await processTask(e.data);
117
+ };
118
+ //# sourceMappingURL=geometry.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.worker.js","sourceRoot":"","sources":["../src/geometry.worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * IFC-Lite bridge - initializes and manages IFC-Lite WASM for geometry processing
3
+ * Replaces web-ifc-bridge.ts with native IFC-Lite implementation (1.9x faster)
4
+ */
5
+ import { IfcAPI, MeshCollection } from '@ifc-lite/wasm';
6
+ export type { MeshCollection };
7
+ export declare class IfcLiteBridge {
8
+ private ifcApi;
9
+ private initialized;
10
+ /**
11
+ * Initialize IFC-Lite WASM
12
+ */
13
+ init(wasmPath?: string): Promise<void>;
14
+ /**
15
+ * Parse IFC content and return mesh collection
16
+ * Returns individual meshes with express IDs and colors
17
+ */
18
+ parseMeshes(content: string): MeshCollection;
19
+ /**
20
+ * Get IFC-Lite API instance
21
+ */
22
+ getApi(): IfcAPI;
23
+ /**
24
+ * Check if initialized
25
+ */
26
+ isInitialized(): boolean;
27
+ /**
28
+ * Get version
29
+ */
30
+ getVersion(): string;
31
+ }
32
+ //# sourceMappingURL=ifc-lite-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc-lite-bridge.d.ts","sourceRoot":"","sources":["../src/ifc-lite-bridge.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAkB;IAErC;;OAEG;IACG,IAAI,CAAC,QAAQ,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAajD;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;IAO5C;;OAEG;IACH,MAAM,IAAI,MAAM;IAOhB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,UAAU,IAAI,MAAM;CAGrB"}