@ifc-lite/parser 2.4.2 → 3.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 (42) hide show
  1. package/README.md +5 -3
  2. package/dist/columnar-parser.d.ts.map +1 -1
  3. package/dist/columnar-parser.js +18 -11
  4. package/dist/columnar-parser.js.map +1 -1
  5. package/dist/entity-index.d.ts +3 -0
  6. package/dist/entity-index.d.ts.map +1 -1
  7. package/dist/entity-index.js.map +1 -1
  8. package/dist/entity-scanner.d.ts +30 -0
  9. package/dist/entity-scanner.d.ts.map +1 -0
  10. package/dist/entity-scanner.js +132 -0
  11. package/dist/entity-scanner.js.map +1 -0
  12. package/dist/ifc-schema.d.ts +10 -2
  13. package/dist/ifc-schema.d.ts.map +1 -1
  14. package/dist/ifc-schema.js +65 -2
  15. package/dist/ifc-schema.js.map +1 -1
  16. package/dist/index.d.ts +11 -20
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +16 -288
  19. package/dist/index.js.map +1 -1
  20. package/dist/parser.worker.d.ts.map +1 -1
  21. package/dist/parser.worker.js.map +1 -1
  22. package/dist/property-extractor.d.ts +3 -0
  23. package/dist/property-extractor.d.ts.map +1 -1
  24. package/dist/property-extractor.js.map +1 -1
  25. package/dist/quantity-extractor.d.ts +3 -0
  26. package/dist/quantity-extractor.d.ts.map +1 -1
  27. package/dist/quantity-extractor.js.map +1 -1
  28. package/dist/relationship-extractor.d.ts +3 -0
  29. package/dist/relationship-extractor.d.ts.map +1 -1
  30. package/dist/relationship-extractor.js.map +1 -1
  31. package/dist/spatial-hierarchy-builder.d.ts.map +1 -1
  32. package/dist/spatial-hierarchy-builder.js +9 -1
  33. package/dist/spatial-hierarchy-builder.js.map +1 -1
  34. package/package.json +4 -4
  35. package/dist/opfs-source-buffer.d.ts +0 -70
  36. package/dist/opfs-source-buffer.d.ts.map +0 -1
  37. package/dist/opfs-source-buffer.js +0 -166
  38. package/dist/opfs-source-buffer.js.map +0 -1
  39. package/dist/style-extractor.d.ts +0 -84
  40. package/dist/style-extractor.d.ts.map +0 -1
  41. package/dist/style-extractor.js +0 -345
  42. package/dist/style-extractor.js.map +0 -1
@@ -1,345 +0,0 @@
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
- * Extract IFC surface styles and create material mappings
6
- */
7
- export class StyleExtractor {
8
- entities;
9
- constructor(entities, _entityIndex) {
10
- this.entities = entities;
11
- // entityIndex reserved for future type-specific style lookups
12
- void _entityIndex;
13
- }
14
- /**
15
- * Extract all style mappings from IFC entities
16
- */
17
- extractStyles() {
18
- const styleMap = new Map();
19
- // Find all IfcStyledItem entities
20
- const styledItems = this.findEntitiesByType('IFCSTYLEDITEM');
21
- for (const styledItem of styledItems) {
22
- try {
23
- const material = this.extractMaterialFromStyledItem(styledItem);
24
- if (material) {
25
- // IfcStyledItem.Item references the geometry
26
- const itemRef = this.getAttributeValue(styledItem, 0);
27
- if (typeof itemRef === 'number') {
28
- styleMap.set(itemRef, material);
29
- }
30
- }
31
- }
32
- catch (e) {
33
- // Skip invalid styled items
34
- console.warn(`[StyleExtractor] Failed to extract style from #${styledItem.expressId}:`, e);
35
- }
36
- }
37
- return styleMap;
38
- }
39
- /**
40
- * Extract material from IfcStyledItem
41
- */
42
- extractMaterialFromStyledItem(styledItem) {
43
- // IfcStyledItem structure:
44
- // Item (0) - reference to geometry
45
- // Styles (1) - SET OF IfcPresentationStyleAssignment
46
- // Name (2) - optional
47
- const stylesRef = this.getAttributeValue(styledItem, 1);
48
- if (!stylesRef)
49
- return null;
50
- // Handle SET OF (array)
51
- const styleAssignments = Array.isArray(stylesRef) ? stylesRef : [stylesRef];
52
- for (const styleAssignmentRef of styleAssignments) {
53
- if (typeof styleAssignmentRef !== 'number')
54
- continue;
55
- const styleAssignment = this.entities.get(styleAssignmentRef);
56
- if (!styleAssignment)
57
- continue;
58
- const material = this.extractMaterialFromStyleAssignment(styleAssignment);
59
- if (material)
60
- return material;
61
- }
62
- return null;
63
- }
64
- /**
65
- * Extract material from IfcPresentationStyleAssignment
66
- */
67
- extractMaterialFromStyleAssignment(styleAssignment) {
68
- // IfcPresentationStyleAssignment structure:
69
- // Styles (0) - SET OF IfcSurfaceStyle
70
- const stylesRef = this.getAttributeValue(styleAssignment, 0);
71
- if (!stylesRef)
72
- return null;
73
- const styles = Array.isArray(stylesRef) ? stylesRef : [stylesRef];
74
- for (const styleRef of styles) {
75
- if (typeof styleRef !== 'number')
76
- continue;
77
- const style = this.entities.get(styleRef);
78
- if (!style)
79
- continue;
80
- const material = this.extractMaterialFromSurfaceStyle(style);
81
- if (material)
82
- return material;
83
- }
84
- return null;
85
- }
86
- /**
87
- * Extract material from IfcSurfaceStyle
88
- */
89
- extractMaterialFromSurfaceStyle(surfaceStyle) {
90
- // IfcSurfaceStyle structure:
91
- // Name (0) - optional
92
- // Side (1) - .POSITIVE., .NEGATIVE., .BOTH.
93
- // Styles (2) - SET OF IfcSurfaceStyleElement
94
- const sideAttr = this.getAttributeValue(surfaceStyle, 1);
95
- const doubleSided = sideAttr === '.BOTH.' || sideAttr === 'BOTH';
96
- const stylesRef = this.getAttributeValue(surfaceStyle, 2);
97
- if (!stylesRef)
98
- return null;
99
- const styles = Array.isArray(stylesRef) ? stylesRef : [stylesRef];
100
- // Look for IfcSurfaceStyleRendering (most common)
101
- for (const styleRef of styles) {
102
- if (typeof styleRef !== 'number')
103
- continue;
104
- const styleElement = this.entities.get(styleRef);
105
- if (!styleElement)
106
- continue;
107
- const typeUpper = styleElement.type.toUpperCase();
108
- if (typeUpper === 'IFCSURFACESTYLERENDERING') {
109
- return this.extractMaterialFromRendering(styleElement, doubleSided);
110
- }
111
- else if (typeUpper === 'IFCSURFACESTYLESHADING') {
112
- return this.extractMaterialFromShading(styleElement, doubleSided);
113
- }
114
- }
115
- return null;
116
- }
117
- /**
118
- * Extract material from IfcSurfaceStyleRendering
119
- */
120
- extractMaterialFromRendering(rendering, doubleSided) {
121
- // IfcSurfaceStyleRendering structure:
122
- // SurfaceColour (0) - IfcColourRgb
123
- // Transparency (1) - OPTIONAL IfcNormalisedRatioMeasure
124
- // DiffuseColour (2) - OPTIONAL IfcColourOrFactor
125
- // TransmissionColour (3) - OPTIONAL
126
- // DiffuseTransmissionColour (4) - OPTIONAL
127
- // ReflectionColour (5) - OPTIONAL
128
- // SpecularColour (6) - OPTIONAL
129
- // SpecularHighlight (7) - OPTIONAL IfcSpecularHighlightSelect
130
- // ReflectanceMethod (8) - IfcReflectanceMethodEnum
131
- const surfaceColor = this.extractColorRgb(this.getAttributeValue(rendering, 0));
132
- const transparency = this.extractTransparency(this.getAttributeValue(rendering, 1));
133
- const specularHighlight = this.extractSpecularHighlight(this.getAttributeValue(rendering, 7));
134
- const reflectanceMethod = this.extractReflectanceMethod(this.getAttributeValue(rendering, 8));
135
- // Extract specular color if available
136
- const specularColorRef = this.getAttributeValue(rendering, 6);
137
- const specularColor = specularColorRef ? this.extractColorRgb(specularColorRef) : undefined;
138
- // Map reflectance method to PBR properties
139
- const { metallic, roughness } = this.mapReflectanceToPBR(reflectanceMethod, specularHighlight);
140
- return {
141
- baseColor: [...surfaceColor, 1.0 - transparency],
142
- metallic,
143
- roughness,
144
- transparency,
145
- reflectanceMethod,
146
- specularColor,
147
- specularHighlight,
148
- doubleSided,
149
- alphaMode: transparency > 0.01 ? 'blend' : 'opaque',
150
- };
151
- }
152
- /**
153
- * Extract material from IfcSurfaceStyleShading (simpler fallback)
154
- */
155
- extractMaterialFromShading(shading, doubleSided) {
156
- // IfcSurfaceStyleShading structure:
157
- // SurfaceColour (0) - IfcColourRgb
158
- // Transparency (1) - OPTIONAL
159
- const surfaceColor = this.extractColorRgb(this.getAttributeValue(shading, 0));
160
- const transparency = this.extractTransparency(this.getAttributeValue(shading, 1));
161
- return {
162
- baseColor: [...surfaceColor, 1.0 - transparency],
163
- metallic: 0.0,
164
- roughness: 0.6,
165
- transparency,
166
- doubleSided,
167
- alphaMode: transparency > 0.01 ? 'blend' : 'opaque',
168
- };
169
- }
170
- /**
171
- * Extract RGB color from IfcColourRgb
172
- */
173
- extractColorRgb(colorRef) {
174
- if (!colorRef)
175
- return [0.8, 0.8, 0.8];
176
- // If it's a reference, resolve it
177
- if (typeof colorRef === 'number') {
178
- const colorEntity = this.entities.get(colorRef);
179
- if (colorEntity) {
180
- // IfcColourRgb structure: Name (0), Red (1), Green (2), Blue (3)
181
- const r = this.getNumericValue(colorEntity, 1) ?? 0.8;
182
- const g = this.getNumericValue(colorEntity, 2) ?? 0.8;
183
- const b = this.getNumericValue(colorEntity, 3) ?? 0.8;
184
- return [r, g, b];
185
- }
186
- }
187
- // If it's already an array or object
188
- if (Array.isArray(colorRef) && colorRef.length >= 3) {
189
- return [colorRef[0], colorRef[1], colorRef[2]];
190
- }
191
- return [0.8, 0.8, 0.8];
192
- }
193
- /**
194
- * Extract transparency value
195
- */
196
- extractTransparency(transparencyRef) {
197
- if (transparencyRef === null || transparencyRef === undefined)
198
- return 0.0;
199
- // If it's wrapped in IFCNORMALISEDRATIOMEASURE, extract the value
200
- if (typeof transparencyRef === 'number') {
201
- return Math.max(0.0, Math.min(1.0, transparencyRef));
202
- }
203
- // If it's an object with a value property
204
- if (typeof transparencyRef === 'object' && 'value' in transparencyRef) {
205
- return Math.max(0.0, Math.min(1.0, Number(transparencyRef.value) || 0.0));
206
- }
207
- return 0.0;
208
- }
209
- /**
210
- * Extract specular highlight value
211
- */
212
- extractSpecularHighlight(highlightRef) {
213
- if (highlightRef === null || highlightRef === undefined)
214
- return undefined;
215
- // If it's wrapped in IFCSPECULAREXPONENT, extract the value
216
- if (typeof highlightRef === 'number') {
217
- return highlightRef;
218
- }
219
- // If it's an object with a value property
220
- if (typeof highlightRef === 'object' && 'value' in highlightRef) {
221
- return Number(highlightRef.value) || undefined;
222
- }
223
- return undefined;
224
- }
225
- /**
226
- * Extract reflectance method enum
227
- */
228
- extractReflectanceMethod(methodRef) {
229
- if (!methodRef)
230
- return undefined;
231
- const methodStr = String(methodRef).toUpperCase().replace(/^\./, '').replace(/\.$/, '');
232
- const validMethods = ['BLINN', 'PHONG', 'METAL', 'GLASS', 'MATT', 'PLASTIC', 'STRAUSS', 'MIRROR'];
233
- if (validMethods.includes(methodStr)) {
234
- return methodStr;
235
- }
236
- return undefined;
237
- }
238
- /**
239
- * Map IFC reflectance method to PBR metallic/roughness
240
- */
241
- mapReflectanceToPBR(method, specularHighlight) {
242
- // Default values
243
- let metallic = 0.0;
244
- let roughness = 0.6;
245
- if (!method) {
246
- // Use specular highlight to estimate roughness if available
247
- if (specularHighlight !== undefined) {
248
- // Higher specular exponent = smoother surface = lower roughness
249
- roughness = Math.max(0.1, Math.min(1.0, 1.0 - (specularHighlight / 128.0)));
250
- }
251
- return { metallic, roughness };
252
- }
253
- const methodUpper = method.toUpperCase();
254
- switch (methodUpper) {
255
- case 'MATT':
256
- metallic = 0.0;
257
- roughness = 0.9;
258
- break;
259
- case 'PLASTIC':
260
- metallic = 0.0;
261
- roughness = 0.5;
262
- break;
263
- case 'PHONG':
264
- case 'BLINN':
265
- metallic = 0.0;
266
- roughness = specularHighlight ? Math.max(0.1, Math.min(0.8, 1.0 - (specularHighlight / 128.0))) : 0.4;
267
- break;
268
- case 'METAL':
269
- metallic = 0.9;
270
- roughness = 0.4;
271
- break;
272
- case 'MIRROR':
273
- metallic = 1.0;
274
- roughness = 0.1;
275
- break;
276
- case 'GLASS':
277
- metallic = 0.0;
278
- roughness = 0.05;
279
- break;
280
- case 'STRAUSS':
281
- metallic = 0.5;
282
- roughness = 0.5;
283
- break;
284
- default:
285
- metallic = 0.0;
286
- roughness = 0.6;
287
- }
288
- return { metallic, roughness };
289
- }
290
- /**
291
- * Find entities by type name (case-insensitive)
292
- */
293
- findEntitiesByType(typeName) {
294
- const result = [];
295
- const typeUpper = typeName.toUpperCase();
296
- for (const entity of this.entities.values()) {
297
- if (entity.type.toUpperCase() === typeUpper) {
298
- result.push(entity);
299
- }
300
- }
301
- return result;
302
- }
303
- /**
304
- * Get attribute value from entity
305
- */
306
- getAttributeValue(entity, index) {
307
- if (index < 0 || index >= entity.attributes.length) {
308
- return null;
309
- }
310
- return entity.attributes[index];
311
- }
312
- /**
313
- * Get numeric value from entity attribute
314
- * Also handles TypedValue wrappers like [typeName, numericValue]
315
- */
316
- getNumericValue(entity, index) {
317
- const value = this.getAttributeValue(entity, index);
318
- if (typeof value === 'number') {
319
- return value;
320
- }
321
- if (typeof value === 'string') {
322
- const parsed = parseFloat(value);
323
- return isNaN(parsed) ? null : parsed;
324
- }
325
- // Handle TypedValue wrappers: [typeName, numericValue]
326
- // e.g., ["IFCNORMALISEDRATIOMEASURE", 0.5]
327
- if (Array.isArray(value) && value.length >= 2) {
328
- if (typeof value[0] === 'string' && typeof value[1] === 'number') {
329
- return value[1];
330
- }
331
- // Nested case: recursively try to extract numeric from second element
332
- if (typeof value[0] === 'string') {
333
- if (typeof value[1] === 'number') {
334
- return value[1];
335
- }
336
- if (typeof value[1] === 'string') {
337
- const parsed = parseFloat(value[1]);
338
- return isNaN(parsed) ? null : parsed;
339
- }
340
- }
341
- }
342
- return null;
343
- }
344
- }
345
- //# sourceMappingURL=style-extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"style-extractor.js","sourceRoot":"","sources":["../src/style-extractor.ts"],"names":[],"mappings":"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"}