@ifc-lite/query 1.0.0 → 1.1.1
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/dist/duckdb-integration.d.ts.map +1 -0
- package/dist/duckdb-integration.js.map +1 -0
- package/dist/entity-node.d.ts.map +1 -0
- package/dist/entity-node.js.map +1 -0
- package/dist/entity-query.d.ts.map +1 -0
- package/dist/entity-query.js.map +1 -0
- package/dist/entity-table.d.ts.map +1 -0
- package/dist/entity-table.js.map +1 -0
- package/dist/fluent-api.d.ts.map +1 -0
- package/dist/fluent-api.js.map +1 -0
- package/dist/ifc-query.d.ts.map +1 -0
- package/dist/ifc-query.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/property-table.d.ts.map +1 -0
- package/dist/property-table.js.map +1 -0
- package/dist/query-result-entity.d.ts.map +1 -0
- package/dist/query-result-entity.js.map +1 -0
- package/package.json +5 -5
- package/dist/parser/src/classification-extractor.d.ts +0 -73
- package/dist/parser/src/classification-extractor.d.ts.map +0 -1
- package/dist/parser/src/classification-extractor.js +0 -218
- package/dist/parser/src/classification-extractor.js.map +0 -1
- package/dist/parser/src/columnar-parser.d.ts +0 -43
- package/dist/parser/src/columnar-parser.d.ts.map +0 -1
- package/dist/parser/src/columnar-parser.js +0 -226
- package/dist/parser/src/columnar-parser.js.map +0 -1
- package/dist/parser/src/entity-extractor.d.ts +0 -15
- package/dist/parser/src/entity-extractor.d.ts.map +0 -1
- package/dist/parser/src/entity-extractor.js +0 -144
- package/dist/parser/src/entity-extractor.js.map +0 -1
- package/dist/parser/src/entity-index.d.ts +0 -11
- package/dist/parser/src/entity-index.d.ts.map +0 -1
- package/dist/parser/src/entity-index.js +0 -24
- package/dist/parser/src/entity-index.js.map +0 -1
- package/dist/parser/src/generated/entities.d.ts +0 -6198
- package/dist/parser/src/generated/entities.d.ts.map +0 -1
- package/dist/parser/src/generated/entities.js +0 -5
- package/dist/parser/src/generated/entities.js.map +0 -1
- package/dist/parser/src/generated/enums.d.ts +0 -2260
- package/dist/parser/src/generated/enums.d.ts.map +0 -1
- package/dist/parser/src/generated/enums.js +0 -2470
- package/dist/parser/src/generated/enums.js.map +0 -1
- package/dist/parser/src/generated/schema-registry.d.ts +0 -50
- package/dist/parser/src/generated/schema-registry.d.ts.map +0 -1
- package/dist/parser/src/generated/schema-registry.js +0 -60518
- package/dist/parser/src/generated/schema-registry.js.map +0 -1
- package/dist/parser/src/georef-extractor.d.ts +0 -60
- package/dist/parser/src/georef-extractor.d.ts.map +0 -1
- package/dist/parser/src/georef-extractor.js +0 -200
- package/dist/parser/src/georef-extractor.js.map +0 -1
- package/dist/parser/src/ifc-schema.d.ts +0 -13
- package/dist/parser/src/ifc-schema.d.ts.map +0 -1
- package/dist/parser/src/ifc-schema.js +0 -203
- package/dist/parser/src/ifc-schema.js.map +0 -1
- package/dist/parser/src/index.d.ts +0 -43
- package/dist/parser/src/index.d.ts.map +0 -1
- package/dist/parser/src/index.js +0 -150
- package/dist/parser/src/index.js.map +0 -1
- package/dist/parser/src/material-extractor.d.ts +0 -97
- package/dist/parser/src/material-extractor.d.ts.map +0 -1
- package/dist/parser/src/material-extractor.js +0 -283
- package/dist/parser/src/material-extractor.js.map +0 -1
- package/dist/parser/src/property-extractor.d.ts +0 -23
- package/dist/parser/src/property-extractor.d.ts.map +0 -1
- package/dist/parser/src/property-extractor.js +0 -102
- package/dist/parser/src/property-extractor.js.map +0 -1
- package/dist/parser/src/quantity-extractor.d.ts +0 -64
- package/dist/parser/src/quantity-extractor.d.ts.map +0 -1
- package/dist/parser/src/quantity-extractor.js +0 -202
- package/dist/parser/src/quantity-extractor.js.map +0 -1
- package/dist/parser/src/relationship-extractor.d.ts +0 -18
- package/dist/parser/src/relationship-extractor.d.ts.map +0 -1
- package/dist/parser/src/relationship-extractor.js +0 -91
- package/dist/parser/src/relationship-extractor.js.map +0 -1
- package/dist/parser/src/spatial-hierarchy-builder.d.ts +0 -21
- package/dist/parser/src/spatial-hierarchy-builder.d.ts.map +0 -1
- package/dist/parser/src/spatial-hierarchy-builder.js +0 -201
- package/dist/parser/src/spatial-hierarchy-builder.js.map +0 -1
- package/dist/parser/src/style-extractor.d.ts +0 -83
- package/dist/parser/src/style-extractor.d.ts.map +0 -1
- package/dist/parser/src/style-extractor.js +0 -327
- package/dist/parser/src/style-extractor.js.map +0 -1
- package/dist/parser/src/tokenizer.d.ts +0 -26
- package/dist/parser/src/tokenizer.d.ts.map +0 -1
- package/dist/parser/src/tokenizer.js +0 -181
- package/dist/parser/src/tokenizer.js.map +0 -1
- package/dist/parser/src/types.d.ts +0 -42
- package/dist/parser/src/types.d.ts.map +0 -1
- package/dist/parser/src/types.js +0 -5
- package/dist/parser/src/types.js.map +0 -1
- package/dist/query/src/duckdb-integration.d.ts.map +0 -1
- package/dist/query/src/duckdb-integration.js.map +0 -1
- package/dist/query/src/entity-node.d.ts.map +0 -1
- package/dist/query/src/entity-node.js.map +0 -1
- package/dist/query/src/entity-query.d.ts.map +0 -1
- package/dist/query/src/entity-query.js.map +0 -1
- package/dist/query/src/entity-table.d.ts.map +0 -1
- package/dist/query/src/entity-table.js.map +0 -1
- package/dist/query/src/fluent-api.d.ts.map +0 -1
- package/dist/query/src/fluent-api.js.map +0 -1
- package/dist/query/src/ifc-query.d.ts.map +0 -1
- package/dist/query/src/ifc-query.js.map +0 -1
- package/dist/query/src/index.d.ts.map +0 -1
- package/dist/query/src/index.js.map +0 -1
- package/dist/query/src/property-table.d.ts.map +0 -1
- package/dist/query/src/property-table.js.map +0 -1
- package/dist/query/src/query-result-entity.d.ts.map +0 -1
- package/dist/query/src/query-result-entity.js.map +0 -1
- /package/dist/{query/src/duckdb-integration.d.ts → duckdb-integration.d.ts} +0 -0
- /package/dist/{query/src/duckdb-integration.js → duckdb-integration.js} +0 -0
- /package/dist/{query/src/entity-node.d.ts → entity-node.d.ts} +0 -0
- /package/dist/{query/src/entity-node.js → entity-node.js} +0 -0
- /package/dist/{query/src/entity-query.d.ts → entity-query.d.ts} +0 -0
- /package/dist/{query/src/entity-query.js → entity-query.js} +0 -0
- /package/dist/{query/src/entity-table.d.ts → entity-table.d.ts} +0 -0
- /package/dist/{query/src/entity-table.js → entity-table.js} +0 -0
- /package/dist/{query/src/fluent-api.d.ts → fluent-api.d.ts} +0 -0
- /package/dist/{query/src/fluent-api.js → fluent-api.js} +0 -0
- /package/dist/{query/src/ifc-query.d.ts → ifc-query.d.ts} +0 -0
- /package/dist/{query/src/ifc-query.js → ifc-query.js} +0 -0
- /package/dist/{query/src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{query/src/index.js → index.js} +0 -0
- /package/dist/{query/src/property-table.d.ts → property-table.d.ts} +0 -0
- /package/dist/{query/src/property-table.js → property-table.js} +0 -0
- /package/dist/{query/src/query-result-entity.d.ts → query-result-entity.d.ts} +0 -0
- /package/dist/{query/src/query-result-entity.js → query-result-entity.js} +0 -0
|
@@ -1,201 +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
|
-
import { IfcTypeEnum, RelationshipType } from '@ifc-lite/data';
|
|
5
|
-
import { EntityExtractor } from './entity-extractor.js';
|
|
6
|
-
export class SpatialHierarchyBuilder {
|
|
7
|
-
/**
|
|
8
|
-
* Build spatial hierarchy from entities and relationships
|
|
9
|
-
*/
|
|
10
|
-
build(entities, relationships, strings, source, entityIndex) {
|
|
11
|
-
const byStorey = new Map();
|
|
12
|
-
const byBuilding = new Map();
|
|
13
|
-
const bySite = new Map();
|
|
14
|
-
const bySpace = new Map();
|
|
15
|
-
const storeyElevations = new Map();
|
|
16
|
-
const elementToStorey = new Map();
|
|
17
|
-
// Find IfcProject (should be only one)
|
|
18
|
-
const projectIds = entities.getByType(IfcTypeEnum.IfcProject);
|
|
19
|
-
if (projectIds.length === 0) {
|
|
20
|
-
console.warn('[SpatialHierarchyBuilder] No IfcProject found in IFC file');
|
|
21
|
-
throw new Error('No IfcProject found in IFC file');
|
|
22
|
-
}
|
|
23
|
-
const projectId = projectIds[0];
|
|
24
|
-
// Build project node
|
|
25
|
-
const projectNode = this.buildNode(projectId, entities, relationships, strings, source, entityIndex, byStorey, byBuilding, bySite, bySpace, storeyElevations, elementToStorey);
|
|
26
|
-
// Build reverse lookup map: elementId -> storeyId
|
|
27
|
-
for (const [storeyId, elementIds] of byStorey) {
|
|
28
|
-
for (const elementId of elementIds) {
|
|
29
|
-
elementToStorey.set(elementId, storeyId);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
// Validation: log warnings if maps are empty
|
|
33
|
-
if (byStorey.size === 0) {
|
|
34
|
-
console.warn('[SpatialHierarchyBuilder] No storeys found in spatial hierarchy');
|
|
35
|
-
}
|
|
36
|
-
if (byBuilding.size === 0) {
|
|
37
|
-
console.warn('[SpatialHierarchyBuilder] No buildings found in spatial hierarchy');
|
|
38
|
-
}
|
|
39
|
-
const hierarchy = {
|
|
40
|
-
project: projectNode,
|
|
41
|
-
byStorey,
|
|
42
|
-
byBuilding,
|
|
43
|
-
bySite,
|
|
44
|
-
bySpace,
|
|
45
|
-
storeyElevations,
|
|
46
|
-
elementToStorey,
|
|
47
|
-
getStoreyElements(storeyId) {
|
|
48
|
-
return byStorey.get(storeyId) ?? [];
|
|
49
|
-
},
|
|
50
|
-
getStoreyByElevation(z) {
|
|
51
|
-
let closestStorey = null;
|
|
52
|
-
let closestDistance = Infinity;
|
|
53
|
-
for (const [storeyId, elevation] of storeyElevations) {
|
|
54
|
-
const distance = Math.abs(elevation - z);
|
|
55
|
-
if (distance < closestDistance) {
|
|
56
|
-
closestDistance = distance;
|
|
57
|
-
closestStorey = storeyId;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// Only return if within reasonable distance (1 meter)
|
|
61
|
-
return closestDistance < 1.0 ? closestStorey : null;
|
|
62
|
-
},
|
|
63
|
-
getContainingSpace(elementId) {
|
|
64
|
-
// Check if element is directly contained in a space
|
|
65
|
-
for (const [spaceId, elementIds] of bySpace) {
|
|
66
|
-
if (elementIds.includes(elementId)) {
|
|
67
|
-
return spaceId;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
71
|
-
},
|
|
72
|
-
getPath(elementId) {
|
|
73
|
-
const path = [];
|
|
74
|
-
// Find which storey contains this element
|
|
75
|
-
const storeyId = elementToStorey.get(elementId);
|
|
76
|
-
if (!storeyId)
|
|
77
|
-
return path;
|
|
78
|
-
// Build path from project to element
|
|
79
|
-
const findPath = (node, targetId) => {
|
|
80
|
-
path.push(node);
|
|
81
|
-
// Check if this node contains the target
|
|
82
|
-
if (node.elements.includes(targetId)) {
|
|
83
|
-
return true;
|
|
84
|
-
}
|
|
85
|
-
// Recursively search children
|
|
86
|
-
for (const child of node.children) {
|
|
87
|
-
if (findPath(child, targetId)) {
|
|
88
|
-
return true;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
// Backtrack
|
|
92
|
-
path.pop();
|
|
93
|
-
return false;
|
|
94
|
-
};
|
|
95
|
-
findPath(projectNode, elementId);
|
|
96
|
-
return path;
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
return hierarchy;
|
|
100
|
-
}
|
|
101
|
-
buildNode(expressId, entities, relationships, strings, source, entityIndex, byStorey, byBuilding, bySite, bySpace, storeyElevations, elementToStorey) {
|
|
102
|
-
const typeEnum = this.getTypeEnum(expressId, entities);
|
|
103
|
-
const name = entities.getName(expressId);
|
|
104
|
-
// Extract elevation for storeys
|
|
105
|
-
let elevation;
|
|
106
|
-
if (typeEnum === IfcTypeEnum.IfcBuildingStorey) {
|
|
107
|
-
elevation = this.extractElevation(expressId, source, entityIndex);
|
|
108
|
-
if (elevation !== undefined) {
|
|
109
|
-
storeyElevations.set(expressId, elevation);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// Get direct contained elements via IfcRelContainedInSpatialStructure
|
|
113
|
-
const containedElements = relationships.getRelated(expressId, RelationshipType.ContainsElements, 'forward');
|
|
114
|
-
// Get child spatial elements via IfcRelAggregates (inverse - who aggregates this?)
|
|
115
|
-
// Actually, we want forward - what does this element aggregate?
|
|
116
|
-
const aggregatedChildren = relationships.getRelated(expressId, RelationshipType.Aggregates, 'forward');
|
|
117
|
-
// Filter to only spatial structure types
|
|
118
|
-
const childNodes = [];
|
|
119
|
-
for (const childId of aggregatedChildren) {
|
|
120
|
-
const childType = this.getTypeEnum(childId, entities);
|
|
121
|
-
if (childType === IfcTypeEnum.IfcSite ||
|
|
122
|
-
childType === IfcTypeEnum.IfcBuilding ||
|
|
123
|
-
childType === IfcTypeEnum.IfcBuildingStorey ||
|
|
124
|
-
childType === IfcTypeEnum.IfcSpace) {
|
|
125
|
-
const childNode = this.buildNode(childId, entities, relationships, strings, source, entityIndex, byStorey, byBuilding, bySite, bySpace, storeyElevations, elementToStorey);
|
|
126
|
-
childNodes.push(childNode);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
// Add elements to appropriate maps
|
|
130
|
-
if (typeEnum === IfcTypeEnum.IfcBuildingStorey) {
|
|
131
|
-
byStorey.set(expressId, containedElements);
|
|
132
|
-
}
|
|
133
|
-
else if (typeEnum === IfcTypeEnum.IfcBuilding) {
|
|
134
|
-
byBuilding.set(expressId, containedElements);
|
|
135
|
-
}
|
|
136
|
-
else if (typeEnum === IfcTypeEnum.IfcSite) {
|
|
137
|
-
bySite.set(expressId, containedElements);
|
|
138
|
-
}
|
|
139
|
-
else if (typeEnum === IfcTypeEnum.IfcSpace) {
|
|
140
|
-
bySpace.set(expressId, containedElements);
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
expressId,
|
|
144
|
-
type: typeEnum,
|
|
145
|
-
name,
|
|
146
|
-
elevation,
|
|
147
|
-
children: childNodes,
|
|
148
|
-
elements: containedElements,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
getTypeEnum(expressId, entities) {
|
|
152
|
-
// Linear search through expressId array
|
|
153
|
-
for (let i = 0; i < entities.count; i++) {
|
|
154
|
-
if (entities.expressId[i] === expressId) {
|
|
155
|
-
return entities.typeEnum[i];
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return IfcTypeEnum.Unknown;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Extract elevation from IfcBuildingStorey entity
|
|
162
|
-
* Elevation is typically in attribute index 8 (after GlobalId, OwnerHistory, Name, Description, ObjectType, etc.)
|
|
163
|
-
*/
|
|
164
|
-
extractElevation(expressId, source, entityIndex) {
|
|
165
|
-
const ref = entityIndex.byId.get(expressId);
|
|
166
|
-
if (!ref)
|
|
167
|
-
return undefined;
|
|
168
|
-
try {
|
|
169
|
-
const extractor = new EntityExtractor(source);
|
|
170
|
-
const entity = extractor.extractEntity(ref);
|
|
171
|
-
if (!entity)
|
|
172
|
-
return undefined;
|
|
173
|
-
// IfcBuildingStorey elevation is typically at index 8
|
|
174
|
-
// But it might vary, so try common indices
|
|
175
|
-
const attrs = entity.attributes || [];
|
|
176
|
-
// Try index 8 first (most common)
|
|
177
|
-
if (attrs.length > 8 && typeof attrs[8] === 'number') {
|
|
178
|
-
return attrs[8];
|
|
179
|
-
}
|
|
180
|
-
// Try index 7
|
|
181
|
-
if (attrs.length > 7 && typeof attrs[7] === 'number') {
|
|
182
|
-
return attrs[7];
|
|
183
|
-
}
|
|
184
|
-
// Try index 6
|
|
185
|
-
if (attrs.length > 6 && typeof attrs[6] === 'number') {
|
|
186
|
-
return attrs[6];
|
|
187
|
-
}
|
|
188
|
-
// Search for first numeric value that looks like an elevation
|
|
189
|
-
for (let i = 0; i < attrs.length; i++) {
|
|
190
|
-
if (typeof attrs[i] === 'number' && Math.abs(attrs[i]) < 10000) {
|
|
191
|
-
return attrs[i];
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
catch (error) {
|
|
196
|
-
// Silently fail - elevation is optional
|
|
197
|
-
}
|
|
198
|
-
return undefined;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
//# sourceMappingURL=spatial-hierarchy-builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spatial-hierarchy-builder.js","sourceRoot":"","sources":["../../../../parser/src/spatial-hierarchy-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Style extractor - extracts IfcSurfaceStyle and related appearance entities
|
|
3
|
-
*/
|
|
4
|
-
import type { IfcEntity, EntityIndex } from './types.js';
|
|
5
|
-
export interface IFCMaterial {
|
|
6
|
-
baseColor: [number, number, number, number];
|
|
7
|
-
metallic: number;
|
|
8
|
-
roughness: number;
|
|
9
|
-
transparency: number;
|
|
10
|
-
reflectanceMethod?: 'BLINN' | 'PHONG' | 'METAL' | 'GLASS' | 'MATT' | 'PLASTIC' | 'STRAUSS' | 'MIRROR';
|
|
11
|
-
specularColor?: [number, number, number];
|
|
12
|
-
specularHighlight?: number;
|
|
13
|
-
doubleSided: boolean;
|
|
14
|
-
alphaMode: 'opaque' | 'mask' | 'blend';
|
|
15
|
-
}
|
|
16
|
-
export interface StyleMapping {
|
|
17
|
-
geometryExpressId: number;
|
|
18
|
-
material: IFCMaterial;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Extract IFC surface styles and create material mappings
|
|
22
|
-
*/
|
|
23
|
-
export declare class StyleExtractor {
|
|
24
|
-
private entities;
|
|
25
|
-
constructor(entities: Map<number, IfcEntity>, _entityIndex: EntityIndex);
|
|
26
|
-
/**
|
|
27
|
-
* Extract all style mappings from IFC entities
|
|
28
|
-
*/
|
|
29
|
-
extractStyles(): Map<number, IFCMaterial>;
|
|
30
|
-
/**
|
|
31
|
-
* Extract material from IfcStyledItem
|
|
32
|
-
*/
|
|
33
|
-
private extractMaterialFromStyledItem;
|
|
34
|
-
/**
|
|
35
|
-
* Extract material from IfcPresentationStyleAssignment
|
|
36
|
-
*/
|
|
37
|
-
private extractMaterialFromStyleAssignment;
|
|
38
|
-
/**
|
|
39
|
-
* Extract material from IfcSurfaceStyle
|
|
40
|
-
*/
|
|
41
|
-
private extractMaterialFromSurfaceStyle;
|
|
42
|
-
/**
|
|
43
|
-
* Extract material from IfcSurfaceStyleRendering
|
|
44
|
-
*/
|
|
45
|
-
private extractMaterialFromRendering;
|
|
46
|
-
/**
|
|
47
|
-
* Extract material from IfcSurfaceStyleShading (simpler fallback)
|
|
48
|
-
*/
|
|
49
|
-
private extractMaterialFromShading;
|
|
50
|
-
/**
|
|
51
|
-
* Extract RGB color from IfcColourRgb
|
|
52
|
-
*/
|
|
53
|
-
private extractColorRgb;
|
|
54
|
-
/**
|
|
55
|
-
* Extract transparency value
|
|
56
|
-
*/
|
|
57
|
-
private extractTransparency;
|
|
58
|
-
/**
|
|
59
|
-
* Extract specular highlight value
|
|
60
|
-
*/
|
|
61
|
-
private extractSpecularHighlight;
|
|
62
|
-
/**
|
|
63
|
-
* Extract reflectance method enum
|
|
64
|
-
*/
|
|
65
|
-
private extractReflectanceMethod;
|
|
66
|
-
/**
|
|
67
|
-
* Map IFC reflectance method to PBR metallic/roughness
|
|
68
|
-
*/
|
|
69
|
-
private mapReflectanceToPBR;
|
|
70
|
-
/**
|
|
71
|
-
* Find entities by type name (case-insensitive)
|
|
72
|
-
*/
|
|
73
|
-
private findEntitiesByType;
|
|
74
|
-
/**
|
|
75
|
-
* Get attribute value from entity
|
|
76
|
-
*/
|
|
77
|
-
private getAttributeValue;
|
|
78
|
-
/**
|
|
79
|
-
* Get numeric value from entity attribute
|
|
80
|
-
*/
|
|
81
|
-
private getNumericValue;
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=style-extractor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"style-extractor.d.ts","sourceRoot":"","sources":["../../../../parser/src/style-extractor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,WAAW,WAAW;IAExB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAG5C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IAGrB,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtG,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,WAAW;IAMvE;;OAEG;IACH,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAyBzC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAyBrC;;OAEG;IACH,OAAO,CAAC,kCAAkC;IAsB1C;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAgCvC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAwCpC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyD3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAW1B"}
|
|
@@ -1,327 +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
|
-
*/
|
|
315
|
-
getNumericValue(entity, index) {
|
|
316
|
-
const value = this.getAttributeValue(entity, index);
|
|
317
|
-
if (typeof value === 'number') {
|
|
318
|
-
return value;
|
|
319
|
-
}
|
|
320
|
-
if (typeof value === 'string') {
|
|
321
|
-
const parsed = parseFloat(value);
|
|
322
|
-
return isNaN(parsed) ? null : parsed;
|
|
323
|
-
}
|
|
324
|
-
return null;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
//# sourceMappingURL=style-extractor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"style-extractor.js","sourceRoot":"","sources":["../../../../parser/src/style-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* STEP tokenizer - fast byte-level scanning for entity markers
|
|
3
|
-
* Leverages Spike 1 approach: ~1,259 MB/s throughput
|
|
4
|
-
*/
|
|
5
|
-
export declare class StepTokenizer {
|
|
6
|
-
private buffer;
|
|
7
|
-
private position;
|
|
8
|
-
private lineNumber;
|
|
9
|
-
constructor(buffer: Uint8Array);
|
|
10
|
-
/**
|
|
11
|
-
* Scan for all entity declarations (#EXPRESS_ID = TYPE(...))
|
|
12
|
-
* Returns entity references without parsing full content
|
|
13
|
-
*/
|
|
14
|
-
scanEntities(): Generator<{
|
|
15
|
-
expressId: number;
|
|
16
|
-
type: string;
|
|
17
|
-
offset: number;
|
|
18
|
-
length: number;
|
|
19
|
-
line: number;
|
|
20
|
-
}>;
|
|
21
|
-
private readExpressId;
|
|
22
|
-
private readTypeName;
|
|
23
|
-
private skipWhitespace;
|
|
24
|
-
private findEntityLength;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=tokenizer.d.ts.map
|