@ifc-lite/parser 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.
- package/LICENSE +373 -0
- package/README.md +326 -0
- package/dist/classification-extractor.d.ts +73 -0
- package/dist/classification-extractor.d.ts.map +1 -0
- package/dist/classification-extractor.js +218 -0
- package/dist/classification-extractor.js.map +1 -0
- package/dist/columnar-parser.d.ts +43 -0
- package/dist/columnar-parser.d.ts.map +1 -0
- package/dist/columnar-parser.js +226 -0
- package/dist/columnar-parser.js.map +1 -0
- package/dist/entity-extractor.d.ts +15 -0
- package/dist/entity-extractor.d.ts.map +1 -0
- package/dist/entity-extractor.js +144 -0
- package/dist/entity-extractor.js.map +1 -0
- package/dist/entity-index.d.ts +11 -0
- package/dist/entity-index.d.ts.map +1 -0
- package/dist/entity-index.js +24 -0
- package/dist/entity-index.js.map +1 -0
- package/dist/examples/comprehensive-extraction.d.ts +76 -0
- package/dist/examples/comprehensive-extraction.d.ts.map +1 -0
- package/dist/examples/comprehensive-extraction.js +228 -0
- package/dist/examples/comprehensive-extraction.js.map +1 -0
- package/dist/generated/entities.d.ts +6198 -0
- package/dist/generated/entities.d.ts.map +1 -0
- package/dist/generated/entities.js +5 -0
- package/dist/generated/entities.js.map +1 -0
- package/dist/generated/enums.d.ts +2260 -0
- package/dist/generated/enums.d.ts.map +1 -0
- package/dist/generated/enums.js +2470 -0
- package/dist/generated/enums.js.map +1 -0
- package/dist/generated/index.d.ts +11 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +14 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/schema-registry.d.ts +50 -0
- package/dist/generated/schema-registry.d.ts.map +1 -0
- package/dist/generated/schema-registry.js +60518 -0
- package/dist/generated/schema-registry.js.map +1 -0
- package/dist/generated/selects.d.ts +127 -0
- package/dist/generated/selects.d.ts.map +1 -0
- package/dist/generated/selects.js +5 -0
- package/dist/generated/selects.js.map +1 -0
- package/dist/generated/test-compile.d.ts +7 -0
- package/dist/generated/test-compile.d.ts.map +1 -0
- package/dist/generated/test-compile.js +30 -0
- package/dist/generated/test-compile.js.map +1 -0
- package/dist/generated/types.d.ts +801 -0
- package/dist/generated/types.d.ts.map +1 -0
- package/dist/generated/types.js +499 -0
- package/dist/generated/types.js.map +1 -0
- package/dist/georef-extractor.d.ts +60 -0
- package/dist/georef-extractor.d.ts.map +1 -0
- package/dist/georef-extractor.js +200 -0
- package/dist/georef-extractor.js.map +1 -0
- package/dist/ifc-schema.d.ts +13 -0
- package/dist/ifc-schema.d.ts.map +1 -0
- package/dist/ifc-schema.js +203 -0
- package/dist/ifc-schema.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +150 -0
- package/dist/index.js.map +1 -0
- package/dist/material-extractor.d.ts +97 -0
- package/dist/material-extractor.d.ts.map +1 -0
- package/dist/material-extractor.js +283 -0
- package/dist/material-extractor.js.map +1 -0
- package/dist/property-extractor.d.ts +23 -0
- package/dist/property-extractor.d.ts.map +1 -0
- package/dist/property-extractor.js +102 -0
- package/dist/property-extractor.js.map +1 -0
- package/dist/quantity-extractor.d.ts +64 -0
- package/dist/quantity-extractor.d.ts.map +1 -0
- package/dist/quantity-extractor.js +202 -0
- package/dist/quantity-extractor.js.map +1 -0
- package/dist/relationship-extractor.d.ts +18 -0
- package/dist/relationship-extractor.d.ts.map +1 -0
- package/dist/relationship-extractor.js +91 -0
- package/dist/relationship-extractor.js.map +1 -0
- package/dist/spatial-hierarchy-builder.d.ts +21 -0
- package/dist/spatial-hierarchy-builder.d.ts.map +1 -0
- package/dist/spatial-hierarchy-builder.js +201 -0
- package/dist/spatial-hierarchy-builder.js.map +1 -0
- package/dist/style-extractor.d.ts +83 -0
- package/dist/style-extractor.d.ts.map +1 -0
- package/dist/style-extractor.js +327 -0
- package/dist/style-extractor.js.map +1 -0
- package/dist/tokenizer.d.ts +26 -0
- package/dist/tokenizer.d.ts.map +1 -0
- package/dist/tokenizer.js +181 -0
- package/dist/tokenizer.js.map +1 -0
- package/dist/types.d.ts +42 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,144 @@
|
|
|
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 EntityExtractor {
|
|
5
|
+
buffer;
|
|
6
|
+
constructor(buffer) {
|
|
7
|
+
this.buffer = buffer;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Extract full entity data from a reference
|
|
11
|
+
*/
|
|
12
|
+
extractEntity(ref) {
|
|
13
|
+
try {
|
|
14
|
+
const entityText = new TextDecoder().decode(this.buffer.subarray(ref.byteOffset, ref.byteOffset + ref.byteLength));
|
|
15
|
+
// Parse: #ID = TYPE(attr1, attr2, ...)
|
|
16
|
+
const match = entityText.match(/^#(\d+)\s*=\s*(\w+)\((.*)\)/);
|
|
17
|
+
if (!match)
|
|
18
|
+
return null;
|
|
19
|
+
const expressId = parseInt(match[1], 10);
|
|
20
|
+
const type = match[2];
|
|
21
|
+
const paramsText = match[3];
|
|
22
|
+
// Parse attributes (simplified - handles basic types)
|
|
23
|
+
const attributes = this.parseAttributes(paramsText);
|
|
24
|
+
return {
|
|
25
|
+
expressId,
|
|
26
|
+
type,
|
|
27
|
+
attributes,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.warn(`Failed to extract entity #${ref.expressId}:`, error);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
parseAttributes(paramsText) {
|
|
36
|
+
if (!paramsText.trim())
|
|
37
|
+
return [];
|
|
38
|
+
const attributes = [];
|
|
39
|
+
let depth = 0;
|
|
40
|
+
let current = '';
|
|
41
|
+
let inString = false;
|
|
42
|
+
let escapeNext = false;
|
|
43
|
+
for (let i = 0; i < paramsText.length; i++) {
|
|
44
|
+
const char = paramsText[i];
|
|
45
|
+
if (escapeNext) {
|
|
46
|
+
current += char;
|
|
47
|
+
escapeNext = false;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (char === "'") {
|
|
51
|
+
inString = !inString;
|
|
52
|
+
current += char;
|
|
53
|
+
}
|
|
54
|
+
else if (inString) {
|
|
55
|
+
if (char === '\\') {
|
|
56
|
+
escapeNext = true;
|
|
57
|
+
}
|
|
58
|
+
current += char;
|
|
59
|
+
}
|
|
60
|
+
else if (char === '(') {
|
|
61
|
+
depth++;
|
|
62
|
+
current += char;
|
|
63
|
+
}
|
|
64
|
+
else if (char === ')') {
|
|
65
|
+
depth--;
|
|
66
|
+
current += char;
|
|
67
|
+
}
|
|
68
|
+
else if (char === ',' && depth === 0) {
|
|
69
|
+
// End of attribute
|
|
70
|
+
attributes.push(this.parseAttributeValue(current.trim()));
|
|
71
|
+
current = '';
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
current += char;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Add last attribute
|
|
78
|
+
if (current.trim()) {
|
|
79
|
+
attributes.push(this.parseAttributeValue(current.trim()));
|
|
80
|
+
}
|
|
81
|
+
return attributes;
|
|
82
|
+
}
|
|
83
|
+
parseAttributeValue(value) {
|
|
84
|
+
value = value.trim();
|
|
85
|
+
if (!value || value === '$') {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
// List/Array: (#123) or (#123, #456) or ()
|
|
89
|
+
if (value.startsWith('(') && value.endsWith(')')) {
|
|
90
|
+
const listContent = value.slice(1, -1).trim();
|
|
91
|
+
if (!listContent) {
|
|
92
|
+
return []; // Empty list
|
|
93
|
+
}
|
|
94
|
+
// Parse list items (comma-separated)
|
|
95
|
+
const items = [];
|
|
96
|
+
let depth = 0;
|
|
97
|
+
let current = '';
|
|
98
|
+
for (let i = 0; i < listContent.length; i++) {
|
|
99
|
+
const char = listContent[i];
|
|
100
|
+
if (char === '(') {
|
|
101
|
+
depth++;
|
|
102
|
+
current += char;
|
|
103
|
+
}
|
|
104
|
+
else if (char === ')') {
|
|
105
|
+
depth--;
|
|
106
|
+
current += char;
|
|
107
|
+
}
|
|
108
|
+
else if (char === ',' && depth === 0) {
|
|
109
|
+
// End of item
|
|
110
|
+
const itemValue = current.trim();
|
|
111
|
+
if (itemValue) {
|
|
112
|
+
items.push(this.parseAttributeValue(itemValue));
|
|
113
|
+
}
|
|
114
|
+
current = '';
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
current += char;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Add last item
|
|
121
|
+
if (current.trim()) {
|
|
122
|
+
items.push(this.parseAttributeValue(current.trim()));
|
|
123
|
+
}
|
|
124
|
+
return items;
|
|
125
|
+
}
|
|
126
|
+
// Reference: #123
|
|
127
|
+
if (value.startsWith('#')) {
|
|
128
|
+
const id = parseInt(value.substring(1), 10);
|
|
129
|
+
return isNaN(id) ? null : id;
|
|
130
|
+
}
|
|
131
|
+
// String: 'text'
|
|
132
|
+
if (value.startsWith("'") && value.endsWith("'")) {
|
|
133
|
+
return value.slice(1, -1).replace(/\\'/g, "'").replace(/\\\\/g, '\\');
|
|
134
|
+
}
|
|
135
|
+
// Number
|
|
136
|
+
const num = parseFloat(value);
|
|
137
|
+
if (!isNaN(num)) {
|
|
138
|
+
return num;
|
|
139
|
+
}
|
|
140
|
+
// Enumeration or other identifier
|
|
141
|
+
return value;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=entity-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-extractor.js","sourceRoot":"","sources":["../src/entity-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity index builder - creates fast lookup structures
|
|
3
|
+
*/
|
|
4
|
+
import type { EntityRef, EntityIndex } from './types.js';
|
|
5
|
+
export declare class EntityIndexBuilder {
|
|
6
|
+
private byId;
|
|
7
|
+
private byType;
|
|
8
|
+
addEntity(ref: EntityRef): void;
|
|
9
|
+
build(): EntityIndex;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=entity-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-index.d.ts","sourceRoot":"","sources":["../src/entity-index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAqC;IACjD,OAAO,CAAC,MAAM,CAAoC;IAElD,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAY/B,KAAK,IAAI,WAAW;CAMrB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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 EntityIndexBuilder {
|
|
5
|
+
byId = new Map();
|
|
6
|
+
byType = new Map();
|
|
7
|
+
addEntity(ref) {
|
|
8
|
+
this.byId.set(ref.expressId, ref);
|
|
9
|
+
// Add to type index
|
|
10
|
+
let typeList = this.byType.get(ref.type);
|
|
11
|
+
if (!typeList) {
|
|
12
|
+
typeList = [];
|
|
13
|
+
this.byType.set(ref.type, typeList);
|
|
14
|
+
}
|
|
15
|
+
typeList.push(ref.expressId);
|
|
16
|
+
}
|
|
17
|
+
build() {
|
|
18
|
+
return {
|
|
19
|
+
byId: this.byId,
|
|
20
|
+
byType: this.byType,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=entity-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-index.js","sourceRoot":"","sources":["../src/entity-index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAQ/D,MAAM,OAAO,kBAAkB;IACrB,IAAI,GAA2B,IAAI,GAAG,EAAE,CAAC;IACzC,MAAM,GAA0B,IAAI,GAAG,EAAE,CAAC;IAElD,SAAS,CAAC,GAAc;QACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAElC,oBAAoB;QACpB,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive IFC Extraction Example
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates how to use all extractors together to get complete IFC data,
|
|
5
|
+
* leveraging the 100% schema coverage from code generation.
|
|
6
|
+
*/
|
|
7
|
+
import type { IfcEntity } from '../entity-extractor';
|
|
8
|
+
/**
|
|
9
|
+
* Complete IFC data with all extracted information
|
|
10
|
+
*/
|
|
11
|
+
export interface CompleteIfcData {
|
|
12
|
+
entities: Map<number, IfcEntity>;
|
|
13
|
+
entitiesByType: Map<string, number[]>;
|
|
14
|
+
propertySets: any[];
|
|
15
|
+
quantitySets: any[];
|
|
16
|
+
relationships: any[];
|
|
17
|
+
spatialHierarchy: any;
|
|
18
|
+
materials: any;
|
|
19
|
+
georeferencing: any;
|
|
20
|
+
classifications: any;
|
|
21
|
+
styles: any;
|
|
22
|
+
schemaVersion: string;
|
|
23
|
+
schemaName: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Extract all IFC data with 100% schema coverage
|
|
27
|
+
*/
|
|
28
|
+
export declare function extractCompleteIfcData(entities: Map<number, IfcEntity>, entitiesByType: Map<string, number[]>): CompleteIfcData;
|
|
29
|
+
/**
|
|
30
|
+
* Get enriched element information (with materials, classifications, georeferencing)
|
|
31
|
+
*/
|
|
32
|
+
export interface EnrichedElementInfo {
|
|
33
|
+
id: number;
|
|
34
|
+
type: string;
|
|
35
|
+
name?: string;
|
|
36
|
+
globalId?: string;
|
|
37
|
+
properties: Record<string, any>;
|
|
38
|
+
quantities: Record<string, any>;
|
|
39
|
+
material?: {
|
|
40
|
+
name: string;
|
|
41
|
+
type: string;
|
|
42
|
+
layers?: Array<{
|
|
43
|
+
material: string;
|
|
44
|
+
thickness: number;
|
|
45
|
+
}>;
|
|
46
|
+
};
|
|
47
|
+
classifications: Array<{
|
|
48
|
+
system: string;
|
|
49
|
+
code: string;
|
|
50
|
+
name: string;
|
|
51
|
+
path: string[];
|
|
52
|
+
}>;
|
|
53
|
+
worldCoordinates?: [number, number, number];
|
|
54
|
+
inheritanceChain: string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get enriched information for a single element
|
|
58
|
+
*/
|
|
59
|
+
export declare function getEnrichedElementInfo(elementId: number, data: CompleteIfcData): EnrichedElementInfo | null;
|
|
60
|
+
/**
|
|
61
|
+
* Example: Find all walls with specific material
|
|
62
|
+
*/
|
|
63
|
+
export declare function findWallsByMaterial(materialName: string, data: CompleteIfcData): number[];
|
|
64
|
+
/**
|
|
65
|
+
* Example: Find all elements with specific classification code
|
|
66
|
+
*/
|
|
67
|
+
export declare function findElementsByClassification(classificationCode: string, data: CompleteIfcData): number[];
|
|
68
|
+
/**
|
|
69
|
+
* Example: Generate material usage report
|
|
70
|
+
*/
|
|
71
|
+
export declare function generateMaterialReport(data: CompleteIfcData): string;
|
|
72
|
+
/**
|
|
73
|
+
* Example: Print schema coverage statistics
|
|
74
|
+
*/
|
|
75
|
+
export declare function printSchemaCoverage(): void;
|
|
76
|
+
//# sourceMappingURL=comprehensive-extraction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comprehensive-extraction.d.ts","sourceRoot":"","sources":["../../src/examples/comprehensive-extraction.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAYrD;;GAEG;AACH,MAAM,WAAW,eAAe;IAE9B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAGtC,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,YAAY,EAAE,GAAG,EAAE,CAAC;IAGpB,aAAa,EAAE,GAAG,EAAE,CAAC;IAGrB,gBAAgB,EAAE,GAAG,CAAC;IAGtB,SAAS,EAAE,GAAG,CAAC;IAGf,cAAc,EAAE,GAAG,CAAC;IAGpB,eAAe,EAAE,GAAG,CAAC;IAGrB,MAAM,EAAE,GAAG,CAAC;IAGZ,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACpC,eAAe,CA2DjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAGhC,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACzD,CAAC;IAGF,eAAe,EAAE,KAAK,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC,CAAC;IAGH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAG5C,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,GACpB,mBAAmB,GAAG,IAAI,CA+F5B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,eAAe,GACpB,MAAM,EAAE,CAYV;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,eAAe,GACpB,MAAM,EAAE,CAWV;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAyBpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAe1C"}
|
|
@@ -0,0 +1,228 @@
|
|
|
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
|
+
import { extractMaterials, getMaterialNameForElement } from '../material-extractor';
|
|
5
|
+
import { extractGeoreferencing, transformToWorld, getCoordinateSystemDescription } from '../georef-extractor';
|
|
6
|
+
import { extractClassifications, getClassificationsForElement, getClassificationPath } from '../classification-extractor';
|
|
7
|
+
import { extractPropertySets } from '../property-extractor';
|
|
8
|
+
import { extractRelationships } from '../relationship-extractor';
|
|
9
|
+
import { extractQuantitySets } from '../quantity-extractor';
|
|
10
|
+
import { extractStyles } from '../style-extractor';
|
|
11
|
+
import { buildSpatialHierarchy } from '../spatial-hierarchy-builder';
|
|
12
|
+
import { SCHEMA_REGISTRY, getEntityMetadata } from '../generated/schema-registry';
|
|
13
|
+
/**
|
|
14
|
+
* Extract all IFC data with 100% schema coverage
|
|
15
|
+
*/
|
|
16
|
+
export function extractCompleteIfcData(entities, entitiesByType) {
|
|
17
|
+
console.log('🔍 Extracting complete IFC data with 100% schema coverage...\n');
|
|
18
|
+
// Extract all data in parallel
|
|
19
|
+
const propertySets = extractPropertySets(entities);
|
|
20
|
+
const quantitySets = extractQuantitySets(entities);
|
|
21
|
+
const relationships = extractRelationships(entities);
|
|
22
|
+
const spatialHierarchy = buildSpatialHierarchy(entities, relationships);
|
|
23
|
+
const styles = extractStyles(entities);
|
|
24
|
+
// NEW: Extract materials (previously unavailable)
|
|
25
|
+
console.log('📦 Extracting materials (IfcMaterial, layers, profiles)...');
|
|
26
|
+
const materials = extractMaterials(entities, entitiesByType);
|
|
27
|
+
console.log(` ✓ Found ${materials.materials.size} materials`);
|
|
28
|
+
console.log(` ✓ Found ${materials.materialLayerSets.size} layer sets`);
|
|
29
|
+
console.log(` ✓ Found ${materials.materialProfileSets.size} profile sets`);
|
|
30
|
+
console.log(` ✓ Found ${materials.associations.length} material associations\n`);
|
|
31
|
+
// NEW: Extract georeferencing (previously unavailable)
|
|
32
|
+
console.log('🌍 Extracting georeferencing (coordinate systems)...');
|
|
33
|
+
const georeferencing = extractGeoreferencing(entities, entitiesByType);
|
|
34
|
+
if (georeferencing.hasGeoreference) {
|
|
35
|
+
console.log(` ✓ ${getCoordinateSystemDescription(georeferencing)}\n`);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.log(` ℹ No georeferencing found (using local coordinates)\n`);
|
|
39
|
+
}
|
|
40
|
+
// NEW: Extract classifications (previously unavailable)
|
|
41
|
+
console.log('🏷️ Extracting classifications (Uniclass, Omniclass, etc.)...');
|
|
42
|
+
const classifications = extractClassifications(entities, entitiesByType);
|
|
43
|
+
console.log(` ✓ Found ${classifications.classifications.size} classification systems`);
|
|
44
|
+
console.log(` ✓ Found ${classifications.classificationReferences.size} classification references`);
|
|
45
|
+
console.log(` ✓ Found ${classifications.associations.length} classification associations\n`);
|
|
46
|
+
// Get schema info
|
|
47
|
+
const projectIds = entitiesByType.get('IfcProject') || [];
|
|
48
|
+
let schemaVersion = 'UNKNOWN';
|
|
49
|
+
if (projectIds.length > 0) {
|
|
50
|
+
const project = entities.get(projectIds[0]);
|
|
51
|
+
// Would extract schema version from project entity
|
|
52
|
+
schemaVersion = 'IFC4';
|
|
53
|
+
}
|
|
54
|
+
console.log('✅ Extraction complete!\n');
|
|
55
|
+
return {
|
|
56
|
+
entities,
|
|
57
|
+
entitiesByType,
|
|
58
|
+
propertySets,
|
|
59
|
+
quantitySets,
|
|
60
|
+
relationships,
|
|
61
|
+
spatialHierarchy,
|
|
62
|
+
materials,
|
|
63
|
+
georeferencing,
|
|
64
|
+
classifications,
|
|
65
|
+
styles,
|
|
66
|
+
schemaVersion,
|
|
67
|
+
schemaName: SCHEMA_REGISTRY.name,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get enriched information for a single element
|
|
72
|
+
*/
|
|
73
|
+
export function getEnrichedElementInfo(elementId, data) {
|
|
74
|
+
const entity = data.entities.get(elementId);
|
|
75
|
+
if (!entity)
|
|
76
|
+
return null;
|
|
77
|
+
// Get basic info
|
|
78
|
+
const info = {
|
|
79
|
+
id: elementId,
|
|
80
|
+
type: entity.type,
|
|
81
|
+
name: entity.attributes[2], // Usually Name is attribute 2
|
|
82
|
+
globalId: entity.attributes[0], // GlobalId is attribute 0
|
|
83
|
+
properties: {},
|
|
84
|
+
quantities: {},
|
|
85
|
+
classifications: [],
|
|
86
|
+
inheritanceChain: [],
|
|
87
|
+
};
|
|
88
|
+
// Get inheritance chain from schema
|
|
89
|
+
const metadata = getEntityMetadata(entity.type);
|
|
90
|
+
if (metadata) {
|
|
91
|
+
info.inheritanceChain = metadata.inheritanceChain || [];
|
|
92
|
+
}
|
|
93
|
+
// Get properties
|
|
94
|
+
for (const pset of data.propertySets) {
|
|
95
|
+
if (pset.definesObjects?.includes(elementId)) {
|
|
96
|
+
info.properties[pset.name] = pset.properties;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Get quantities
|
|
100
|
+
for (const qset of data.quantitySets) {
|
|
101
|
+
if (qset.definesObjects?.includes(elementId)) {
|
|
102
|
+
info.quantities[qset.name] = qset.quantities;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// NEW: Get material info
|
|
106
|
+
const materialId = getMaterialForElement(elementId, data.materials);
|
|
107
|
+
if (materialId) {
|
|
108
|
+
const material = data.materials.materials.get(materialId);
|
|
109
|
+
const layerSet = data.materials.materialLayerSets.get(materialId);
|
|
110
|
+
const profileSet = data.materials.materialProfileSets.get(materialId);
|
|
111
|
+
if (material) {
|
|
112
|
+
info.material = {
|
|
113
|
+
name: material.name,
|
|
114
|
+
type: 'Material',
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
else if (layerSet) {
|
|
118
|
+
info.material = {
|
|
119
|
+
name: layerSet.name || 'LayerSet',
|
|
120
|
+
type: 'LayerSet',
|
|
121
|
+
layers: layerSet.layers.map(layerId => {
|
|
122
|
+
const layer = data.materials.materialLayers.get(layerId);
|
|
123
|
+
const layerMaterial = layer ? data.materials.materials.get(layer.material) : undefined;
|
|
124
|
+
return {
|
|
125
|
+
material: layerMaterial?.name || 'Unknown',
|
|
126
|
+
thickness: layer?.thickness || 0,
|
|
127
|
+
};
|
|
128
|
+
}),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
else if (profileSet) {
|
|
132
|
+
info.material = {
|
|
133
|
+
name: profileSet.name || 'ProfileSet',
|
|
134
|
+
type: 'ProfileSet',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// NEW: Get classifications
|
|
139
|
+
const classificationRefs = getClassificationsForElement(elementId, data.classifications);
|
|
140
|
+
for (const ref of classificationRefs) {
|
|
141
|
+
const path = getClassificationPath(ref.id, data.classifications);
|
|
142
|
+
const systemName = path[0] || 'Unknown';
|
|
143
|
+
info.classifications.push({
|
|
144
|
+
system: systemName,
|
|
145
|
+
code: ref.identification || '',
|
|
146
|
+
name: ref.name || '',
|
|
147
|
+
path,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// NEW: Get world coordinates (if georeferenced and if element has placement)
|
|
151
|
+
if (data.georeferencing.hasGeoreference) {
|
|
152
|
+
// Would extract local placement from entity and transform
|
|
153
|
+
// For demo, assume we have local coordinates [x, y, z]
|
|
154
|
+
const localCoords = [0, 0, 0]; // Would extract from entity
|
|
155
|
+
const worldCoords = transformToWorld(localCoords, data.georeferencing);
|
|
156
|
+
if (worldCoords) {
|
|
157
|
+
info.worldCoordinates = worldCoords;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return info;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Example: Find all walls with specific material
|
|
164
|
+
*/
|
|
165
|
+
export function findWallsByMaterial(materialName, data) {
|
|
166
|
+
const wallIds = data.entitiesByType.get('IfcWall') || [];
|
|
167
|
+
const results = [];
|
|
168
|
+
for (const wallId of wallIds) {
|
|
169
|
+
const materialForWall = getMaterialNameForElement(wallId, data.materials);
|
|
170
|
+
if (materialForWall?.toLowerCase().includes(materialName.toLowerCase())) {
|
|
171
|
+
results.push(wallId);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return results;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Example: Find all elements with specific classification code
|
|
178
|
+
*/
|
|
179
|
+
export function findElementsByClassification(classificationCode, data) {
|
|
180
|
+
const results = [];
|
|
181
|
+
for (const assoc of data.classifications.associations) {
|
|
182
|
+
const ref = data.classifications.classificationReferences.get(assoc.classificationId);
|
|
183
|
+
if (ref?.identification === classificationCode) {
|
|
184
|
+
results.push(...assoc.relatedObjects);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return results;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Example: Generate material usage report
|
|
191
|
+
*/
|
|
192
|
+
export function generateMaterialReport(data) {
|
|
193
|
+
let report = '# Material Usage Report\n\n';
|
|
194
|
+
// Count elements by material
|
|
195
|
+
const materialUsage = new Map();
|
|
196
|
+
for (const assoc of data.materials.associations) {
|
|
197
|
+
for (const elementId of assoc.relatedObjects) {
|
|
198
|
+
const materialName = getMaterialNameForElement(elementId, data.materials) || 'Unknown';
|
|
199
|
+
materialUsage.set(materialName, (materialUsage.get(materialName) || 0) + 1);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Sort by usage count
|
|
203
|
+
const sorted = Array.from(materialUsage.entries())
|
|
204
|
+
.sort((a, b) => b[1] - a[1]);
|
|
205
|
+
report += '| Material | Element Count |\n';
|
|
206
|
+
report += '|----------|---------------|\n';
|
|
207
|
+
for (const [material, count] of sorted) {
|
|
208
|
+
report += `| ${material} | ${count} |\n`;
|
|
209
|
+
}
|
|
210
|
+
return report;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Example: Print schema coverage statistics
|
|
214
|
+
*/
|
|
215
|
+
export function printSchemaCoverage() {
|
|
216
|
+
console.log('\n📊 IFC Schema Coverage Statistics\n');
|
|
217
|
+
console.log(`Schema: ${SCHEMA_REGISTRY.name}`);
|
|
218
|
+
console.log(`Entities: ${Object.keys(SCHEMA_REGISTRY.entities).length}`);
|
|
219
|
+
console.log(`Types: ${Object.keys(SCHEMA_REGISTRY.types).length}`);
|
|
220
|
+
console.log(`Enums: ${Object.keys(SCHEMA_REGISTRY.enums).length}`);
|
|
221
|
+
console.log(`Selects: ${Object.keys(SCHEMA_REGISTRY.selects).length}`);
|
|
222
|
+
console.log(`\nTotal definitions: ${Object.keys(SCHEMA_REGISTRY.entities).length +
|
|
223
|
+
Object.keys(SCHEMA_REGISTRY.types).length +
|
|
224
|
+
Object.keys(SCHEMA_REGISTRY.enums).length +
|
|
225
|
+
Object.keys(SCHEMA_REGISTRY.selects).length}`);
|
|
226
|
+
console.log('\n✅ 100% Schema Coverage - All IFC concepts supported!\n');
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=comprehensive-extraction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comprehensive-extraction.js","sourceRoot":"","sources":["../../src/examples/comprehensive-extraction.ts"],"names":[],"mappings":"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"}
|