babylon-ifc-loader 1.0.2 → 2.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/API.md +51 -31
- package/CHANGELOG.md +48 -0
- package/dist-npm/ifcInit.d.ts +2 -2
- package/dist-npm/ifcInit.d.ts.map +1 -1
- package/dist-npm/ifcInit.js +78 -84
- package/dist-npm/ifcInit.js.map +1 -1
- package/dist-npm/ifcModel.d.ts +7 -0
- package/dist-npm/ifcModel.d.ts.map +1 -1
- package/dist-npm/ifcModel.js +158 -91
- package/dist-npm/ifcModel.js.map +1 -1
- package/dist-npm/logging.d.ts +9 -0
- package/dist-npm/logging.d.ts.map +1 -0
- package/dist-npm/logging.js +39 -0
- package/dist-npm/logging.js.map +1 -0
- package/package.json +3 -2
- package/readme.md +40 -22
package/API.md
CHANGED
|
@@ -55,13 +55,13 @@ const ifcAPI = await initializeWebIFC("./");
|
|
|
55
55
|
|
|
56
56
|
// Initialize with custom log level
|
|
57
57
|
import * as WebIFC from "web-ifc";
|
|
58
|
-
const ifcAPI = await initializeWebIFC("./", WebIFC.LogLevel.
|
|
58
|
+
const ifcAPI = await initializeWebIFC("./", WebIFC.LogLevel.LOG_LEVEL_WARN);
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
#### Console Output
|
|
62
62
|
|
|
63
63
|
```
|
|
64
|
-
|
|
64
|
+
Web-IFC initialized in Xms
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
---
|
|
@@ -95,7 +95,7 @@ async function loadIfcModel(
|
|
|
95
95
|
|
|
96
96
|
#### Returns
|
|
97
97
|
|
|
98
|
-
`Promise<RawIfcModel>` - Raw IFC model data with geometry parts
|
|
98
|
+
`Promise<RawIfcModel>` - Raw IFC model data with geometry parts and statistics.
|
|
99
99
|
|
|
100
100
|
#### Example
|
|
101
101
|
|
|
@@ -123,18 +123,17 @@ console.log(model.rawStats); // Statistics
|
|
|
123
123
|
#### Console Output (verbose mode)
|
|
124
124
|
|
|
125
125
|
```
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
Fetching IFC from URL: /test.ifc
|
|
127
|
+
Received 2.45 MB
|
|
128
|
+
Opening IFC model (2.45 MB)...
|
|
129
|
+
OpenModel returned (modelID=0)
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
Collected 1234 geometry parts (modelID=0)
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
Parts extracted: 1234
|
|
135
|
-
Vertices: 156,789
|
|
136
|
-
Triangles: 52,263
|
|
137
|
-
Storey relationships: 5
|
|
133
|
+
Raw model statistics: (modelID=0)
|
|
134
|
+
Parts extracted: 1234 (modelID=0)
|
|
135
|
+
Vertices: 156,789 (modelID=0)
|
|
136
|
+
Triangles: 52,263 (modelID=0)
|
|
138
137
|
```
|
|
139
138
|
|
|
140
139
|
---
|
|
@@ -166,7 +165,7 @@ closeIfcModel(ifcAPI, model.modelID);
|
|
|
166
165
|
#### Console Output
|
|
167
166
|
|
|
168
167
|
```
|
|
169
|
-
|
|
168
|
+
Model closed and memory freed (modelID=0)
|
|
170
169
|
```
|
|
171
170
|
|
|
172
171
|
---
|
|
@@ -216,7 +215,6 @@ Complete raw model returned by `loadIfcModel`.
|
|
|
216
215
|
interface RawIfcModel {
|
|
217
216
|
modelID: number; // IFC model identifier
|
|
218
217
|
parts: RawGeometryPart[]; // Array of geometry parts
|
|
219
|
-
storeyMap: Map<number, number>; // Element ID to storey ID mapping
|
|
220
218
|
rawStats: {
|
|
221
219
|
partCount: number; // Number of geometry parts
|
|
222
220
|
vertexCount: number; // Total vertices
|
|
@@ -236,7 +234,7 @@ interface RawGeometryPart {
|
|
|
236
234
|
positions: Float32Array; // Vertex positions (x, y, z)
|
|
237
235
|
normals: Float32Array; // Vertex normals (nx, ny, nz)
|
|
238
236
|
indices: Uint32Array; // Triangle indices
|
|
239
|
-
flatTransform: number
|
|
237
|
+
flatTransform: ArrayLike<number>; // 4x4 transformation matrix (16 values)
|
|
240
238
|
color: {
|
|
241
239
|
// RGBA color (normalized 0-1)
|
|
242
240
|
x: number; // R
|
|
@@ -256,6 +254,7 @@ Configuration for IFC loader.
|
|
|
256
254
|
interface IfcInitOptions {
|
|
257
255
|
coordinateToOrigin?: boolean; // Move to origin (default: true)
|
|
258
256
|
verbose?: boolean; // Console logging (default: true)
|
|
257
|
+
signal?: AbortSignal; // Cancellation signal
|
|
259
258
|
}
|
|
260
259
|
```
|
|
261
260
|
|
|
@@ -305,6 +304,8 @@ function buildIfcModel(model: RawIfcModel, scene: Scene, options?: SceneBuildOpt
|
|
|
305
304
|
| `generateNormals` | `boolean` | `false` | Generate normals if missing. |
|
|
306
305
|
| `verbose` | `boolean` | `true` | Enable console logging during building. |
|
|
307
306
|
| `freezeAfterBuild` | `boolean` | `true` | Freeze meshes and materials for performance. |
|
|
307
|
+
| `usePBRMaterials` | `boolean` | `false` | Use `PBRMaterial` instead of `StandardMaterial`. |
|
|
308
|
+
| `releaseRawPartsAfterBuild` | `boolean` | `true` | Release `model.parts` after scene build. |
|
|
308
309
|
|
|
309
310
|
#### Returns
|
|
310
311
|
|
|
@@ -331,20 +332,19 @@ console.log(`Build time: ${stats.buildTimeMs}ms`);
|
|
|
331
332
|
#### Console Output (verbose mode)
|
|
332
333
|
|
|
333
334
|
```
|
|
334
|
-
|
|
335
|
-
Created 1234 initial meshes
|
|
336
|
-
Grouped into 567 unique (expressID + material) combinations
|
|
335
|
+
Building Babylon.js scene from 1234 raw parts... (modelID=0)
|
|
336
|
+
Created 1234 initial meshes (modelID=0)
|
|
337
|
+
Grouped into 567 unique (expressID + material) combinations (modelID=0)
|
|
338
|
+
Model auto-centered at origin (offset: 10.50, 0.00, -5.25) (modelID=0)
|
|
337
339
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
Build time: 234.56ms
|
|
347
|
-
IFC meshes and materials frozen for optimal performance
|
|
340
|
+
Model building complete: (modelID=0)
|
|
341
|
+
Original parts: 1234 (modelID=0)
|
|
342
|
+
Merged groups: 100 (modelID=0)
|
|
343
|
+
Skipped groups: 5 (modelID=0)
|
|
344
|
+
Final meshes: 1129 (modelID=0)
|
|
345
|
+
Materials created: 15 (modelID=0)
|
|
346
|
+
Build time: 234.56ms (modelID=0)
|
|
347
|
+
IFC meshes and materials frozen for optimal performance (modelID=0)
|
|
348
348
|
```
|
|
349
349
|
|
|
350
350
|
---
|
|
@@ -375,8 +375,8 @@ disposeIfcModel(scene);
|
|
|
375
375
|
#### Console Output
|
|
376
376
|
|
|
377
377
|
```
|
|
378
|
-
|
|
379
|
-
|
|
378
|
+
ifc-root node and all child meshes disposed
|
|
379
|
+
15 IFC materials disposed
|
|
380
380
|
```
|
|
381
381
|
|
|
382
382
|
---
|
|
@@ -463,6 +463,8 @@ interface SceneBuildOptions {
|
|
|
463
463
|
generateNormals?: boolean; // Generate normals if missing (default: false)
|
|
464
464
|
verbose?: boolean; // Console logging (default: true)
|
|
465
465
|
freezeAfterBuild?: boolean; // Freeze for performance (default: true)
|
|
466
|
+
usePBRMaterials?: boolean; // Use PBR materials (default: false)
|
|
467
|
+
releaseRawPartsAfterBuild?: boolean; // Release model.parts after build (default: true)
|
|
466
468
|
}
|
|
467
469
|
```
|
|
468
470
|
|
|
@@ -590,6 +592,23 @@ scene.onPointerDown = (evt, pickResult) => {
|
|
|
590
592
|
};
|
|
591
593
|
```
|
|
592
594
|
|
|
595
|
+
## Material Metadata
|
|
596
|
+
|
|
597
|
+
Materials created by `buildIfcModel` include metadata with IFC color information:
|
|
598
|
+
|
|
599
|
+
```typescript
|
|
600
|
+
material.metadata = {
|
|
601
|
+
color: {
|
|
602
|
+
r: number;
|
|
603
|
+
g: number;
|
|
604
|
+
b: number;
|
|
605
|
+
a: number;
|
|
606
|
+
} | null;
|
|
607
|
+
};
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
When an IFC part has no explicit color, `material.metadata.color` is `null`.
|
|
611
|
+
|
|
593
612
|
---
|
|
594
613
|
|
|
595
614
|
## Performance Notes
|
|
@@ -617,3 +636,4 @@ if (ifcAPI.IsModelOpen(modelID)) {
|
|
|
617
636
|
closeIfcModel(ifcAPI, modelID);
|
|
618
637
|
}
|
|
619
638
|
```
|
|
639
|
+
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
### Exposed API Changes
|
|
8
|
+
|
|
9
|
+
- `RawIfcModel`:
|
|
10
|
+
- Removed `storeyMap: Map<number, number>`.
|
|
11
|
+
- `IfcInitOptions` (used by `loadIfcModel`):
|
|
12
|
+
- Added `signal?: AbortSignal`.
|
|
13
|
+
- `SceneBuildOptions` (used by `buildIfcModel`):
|
|
14
|
+
- Added `usePBRMaterials?: boolean`.
|
|
15
|
+
- Added `releaseRawPartsAfterBuild?: boolean` (default is `true`).
|
|
16
|
+
|
|
17
|
+
### Behavior Changes With API Impact
|
|
18
|
+
|
|
19
|
+
- `buildIfcModel` now clears `model.parts` by default (`releaseRawPartsAfterBuild=true`) unless explicitly disabled.
|
|
20
|
+
- Storey-based merge restrictions were removed; merge strategy is now element/material-group based.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- Added PBR rendering support:
|
|
25
|
+
- `usePBRMaterials` scene option.
|
|
26
|
+
- PBR material defaults/handling (`metallic`, `roughness`).
|
|
27
|
+
- Viewer environment texture flow updates for PBR usage.
|
|
28
|
+
- Updated model build behavior:
|
|
29
|
+
- Added `releaseRawPartsAfterBuild` (default `true`).
|
|
30
|
+
- Removed storey-based merge blocking logic.
|
|
31
|
+
- Added stronger raw-part validation before mesh creation.
|
|
32
|
+
- Improved loader robustness:
|
|
33
|
+
- Added `AbortSignal` support in `loadIfcModel`/fetch/streaming paths.
|
|
34
|
+
- Added explicit abort helpers and safer geometry disposal.
|
|
35
|
+
- Removed `storeyMap` from `RawIfcModel`.
|
|
36
|
+
- Improved performance in geometry/build hot paths:
|
|
37
|
+
- Reduced array-copy allocations by using typed arrays directly where supported.
|
|
38
|
+
- Kept `flatTransform` as `ArrayLike<number>` instead of forcing new arrays.
|
|
39
|
+
- Updated tests and docs to align with branch behavior:
|
|
40
|
+
- Expanded/adjusted build and loader test coverage.
|
|
41
|
+
- Updated `readme.md` and `API.md`.
|
|
42
|
+
|
|
43
|
+
### Branch Commits
|
|
44
|
+
|
|
45
|
+
- `664a468` - `pbr`
|
|
46
|
+
- `cc68bb8` - `envTex`
|
|
47
|
+
- `a9db44c` - `small update`
|
|
48
|
+
- `4b0f0ec` - `types etc`
|
package/dist-npm/ifcInit.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface RawGeometryPart {
|
|
|
6
6
|
positions: Float32Array;
|
|
7
7
|
normals: Float32Array;
|
|
8
8
|
indices: Uint32Array;
|
|
9
|
-
flatTransform: number
|
|
9
|
+
flatTransform: ArrayLike<number>;
|
|
10
10
|
color: {
|
|
11
11
|
x: number;
|
|
12
12
|
y: number;
|
|
@@ -19,7 +19,6 @@ export interface RawGeometryPart {
|
|
|
19
19
|
export interface RawIfcModel {
|
|
20
20
|
modelID: number;
|
|
21
21
|
parts: RawGeometryPart[];
|
|
22
|
-
storeyMap: Map<number, number>;
|
|
23
22
|
rawStats: {
|
|
24
23
|
partCount: number;
|
|
25
24
|
vertexCount: number;
|
|
@@ -30,6 +29,7 @@ export interface RawIfcModel {
|
|
|
30
29
|
export interface IfcInitOptions {
|
|
31
30
|
coordinateToOrigin?: boolean;
|
|
32
31
|
verbose?: boolean;
|
|
32
|
+
signal?: AbortSignal;
|
|
33
33
|
}
|
|
34
34
|
/** projectInfo extracted from IFC file */
|
|
35
35
|
export interface ProjectInfoResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifcInit.d.ts","sourceRoot":"","sources":["../src/ifcInit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ifcInit.d.ts","sourceRoot":"","sources":["../src/ifcInit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAOlC,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAoDD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAM,CAAC,QAA0C,GAC1D,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAkBxB;AAMD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAsCtB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAK1E;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,CA8DxF"}
|
package/dist-npm/ifcInit.js
CHANGED
|
@@ -1,4 +1,34 @@
|
|
|
1
1
|
import * as WebIFC from "web-ifc";
|
|
2
|
+
import { logError, logInfo, logWarn } from "./logging";
|
|
3
|
+
class IfcGeometryProcessingError extends Error {
|
|
4
|
+
context;
|
|
5
|
+
cause;
|
|
6
|
+
constructor(context, cause) {
|
|
7
|
+
super(`Error processing geometry (modelID=${context.modelID}, expressID=${context.expressID}, geometryExpressID=${context.geometryExpressID})`);
|
|
8
|
+
this.name = "IfcGeometryProcessingError";
|
|
9
|
+
this.context = context;
|
|
10
|
+
this.cause = cause;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function createAbortError() {
|
|
14
|
+
if (typeof DOMException !== "undefined") {
|
|
15
|
+
return new DOMException("Operation was aborted", "AbortError");
|
|
16
|
+
}
|
|
17
|
+
const error = new Error("Operation was aborted");
|
|
18
|
+
error.name = "AbortError";
|
|
19
|
+
return error;
|
|
20
|
+
}
|
|
21
|
+
function throwIfAborted(signal) {
|
|
22
|
+
if (signal?.aborted) {
|
|
23
|
+
throw createAbortError();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function disposeGeometry(geometry) {
|
|
27
|
+
if (geometry && typeof geometry === "object" && "delete" in geometry) {
|
|
28
|
+
const disposable = geometry;
|
|
29
|
+
disposable.delete?.();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
2
32
|
// ============================================================================
|
|
3
33
|
// PUBLIC API - Initialization
|
|
4
34
|
// ============================================================================
|
|
@@ -17,7 +47,7 @@ export async function initializeWebIFC(wasmPath, logLevel = WebIFC.LogLevel.LOG_
|
|
|
17
47
|
await ifcAPI.Init();
|
|
18
48
|
// Set log level
|
|
19
49
|
ifcAPI.SetLogLevel(logLevel);
|
|
20
|
-
|
|
50
|
+
logInfo(`Web-IFC initialized in ${(performance.now() - startTime).toFixed(2)}ms`);
|
|
21
51
|
return ifcAPI;
|
|
22
52
|
}
|
|
23
53
|
// ============================================================================
|
|
@@ -33,25 +63,32 @@ export async function loadIfcModel(ifcAPI, source, options = {}) {
|
|
|
33
63
|
verbose: true,
|
|
34
64
|
...options,
|
|
35
65
|
};
|
|
66
|
+
throwIfAborted(opts.signal);
|
|
36
67
|
// Step 1: Open the model
|
|
37
68
|
const modelID = await openModel(ifcAPI, source, opts);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
69
|
+
try {
|
|
70
|
+
throwIfAborted(opts.signal);
|
|
71
|
+
// Step 2: Stream geometry and extract raw data
|
|
72
|
+
const { parts, rawStats } = streamGeometry(ifcAPI, modelID, opts);
|
|
73
|
+
throwIfAborted(opts.signal);
|
|
74
|
+
if (opts.verbose) {
|
|
75
|
+
logInfo(`\nRaw model statistics:`, { modelID });
|
|
76
|
+
logInfo(` Parts extracted: ${rawStats.partCount}`, { modelID });
|
|
77
|
+
logInfo(` Vertices: ${rawStats.vertexCount.toLocaleString()}`, { modelID });
|
|
78
|
+
logInfo(` Triangles: ${rawStats.triangleCount.toLocaleString()}`, { modelID });
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
modelID,
|
|
82
|
+
parts,
|
|
83
|
+
rawStats,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (ifcAPI.IsModelOpen(modelID)) {
|
|
88
|
+
ifcAPI.CloseModel(modelID);
|
|
89
|
+
}
|
|
90
|
+
throw error;
|
|
48
91
|
}
|
|
49
|
-
return {
|
|
50
|
-
modelID,
|
|
51
|
-
parts,
|
|
52
|
-
storeyMap,
|
|
53
|
-
rawStats,
|
|
54
|
-
};
|
|
55
92
|
}
|
|
56
93
|
/**
|
|
57
94
|
* Close IFC model and free memory
|
|
@@ -59,7 +96,7 @@ export async function loadIfcModel(ifcAPI, source, options = {}) {
|
|
|
59
96
|
export function closeIfcModel(ifcAPI, modelID) {
|
|
60
97
|
if (ifcAPI.IsModelOpen(modelID)) {
|
|
61
98
|
ifcAPI.CloseModel(modelID);
|
|
62
|
-
|
|
99
|
+
logInfo("Model closed and memory freed", { modelID });
|
|
63
100
|
}
|
|
64
101
|
}
|
|
65
102
|
// ============================================================================
|
|
@@ -119,7 +156,7 @@ export function getProjectInfo(ifcAPI, modelID) {
|
|
|
119
156
|
}
|
|
120
157
|
}
|
|
121
158
|
catch (error) {
|
|
122
|
-
|
|
159
|
+
logWarn("Error extracting IFC projectInfo", { modelID }, error);
|
|
123
160
|
}
|
|
124
161
|
return projectInfo;
|
|
125
162
|
}
|
|
@@ -131,20 +168,22 @@ export function getProjectInfo(ifcAPI, modelID) {
|
|
|
131
168
|
*/
|
|
132
169
|
async function openModel(ifcAPI, source, options) {
|
|
133
170
|
let data;
|
|
171
|
+
throwIfAborted(options.signal);
|
|
134
172
|
if (typeof source === "string") {
|
|
135
|
-
|
|
136
|
-
const response = await fetch(source);
|
|
137
|
-
|
|
173
|
+
logInfo(`Fetching IFC from URL: ${source}`);
|
|
174
|
+
const response = options.signal ? await fetch(source, { signal: options.signal }) : await fetch(source);
|
|
175
|
+
logInfo(`Fetch response: status=${response.status}, ok=${response.ok}, type=${response.headers.get("content-type")}`);
|
|
138
176
|
if (!response.ok) {
|
|
139
177
|
throw new Error(`Failed to fetch IFC file: HTTP ${response.status} ${response.statusText}`);
|
|
140
178
|
}
|
|
141
179
|
data = await response.arrayBuffer();
|
|
142
|
-
|
|
180
|
+
logInfo(`Received ${(data.byteLength / 1024 / 1024).toFixed(2)} MB`);
|
|
143
181
|
}
|
|
144
182
|
else {
|
|
145
|
-
|
|
183
|
+
logInfo(`Loading IFC file: ${source.name} (${(source.size / 1024 / 1024).toFixed(2)} MB)`);
|
|
146
184
|
data = await source.arrayBuffer();
|
|
147
185
|
}
|
|
186
|
+
throwIfAborted(options.signal);
|
|
148
187
|
// Configure loader settings
|
|
149
188
|
const settings = {
|
|
150
189
|
COORDINATE_TO_ORIGIN: options.coordinateToOrigin ?? true,
|
|
@@ -152,9 +191,9 @@ async function openModel(ifcAPI, source, options) {
|
|
|
152
191
|
MEMORY_LIMIT: 2147483648,
|
|
153
192
|
TAPE_SIZE: 67108864,
|
|
154
193
|
};
|
|
155
|
-
|
|
194
|
+
logInfo(`Opening IFC model (${(data.byteLength / 1024 / 1024).toFixed(2)} MB)...`);
|
|
156
195
|
const modelID = ifcAPI.OpenModel(new Uint8Array(data), settings);
|
|
157
|
-
|
|
196
|
+
logInfo("OpenModel returned", { modelID });
|
|
158
197
|
if (modelID === -1) {
|
|
159
198
|
throw new Error("Failed to open IFC model");
|
|
160
199
|
}
|
|
@@ -164,6 +203,7 @@ async function openModel(ifcAPI, source, options) {
|
|
|
164
203
|
* Stream geometry and extract raw data (no Babylon.js dependencies)
|
|
165
204
|
*/
|
|
166
205
|
function streamGeometry(ifcAPI, modelID, options) {
|
|
206
|
+
throwIfAborted(options.signal);
|
|
167
207
|
const parts = [];
|
|
168
208
|
let totalVertices = 0;
|
|
169
209
|
let totalTriangles = 0;
|
|
@@ -171,6 +211,7 @@ function streamGeometry(ifcAPI, modelID, options) {
|
|
|
171
211
|
ifcAPI.StreamAllMeshes(modelID, (flatMesh) => {
|
|
172
212
|
const placedGeometries = flatMesh.geometries;
|
|
173
213
|
for (let i = 0; i < placedGeometries.size(); i++) {
|
|
214
|
+
throwIfAborted(options.signal);
|
|
174
215
|
const placedGeometry = placedGeometries.get(i);
|
|
175
216
|
// Skip invalid geometries
|
|
176
217
|
if (!placedGeometry || placedGeometry.geometryExpressID === undefined)
|
|
@@ -183,7 +224,7 @@ function streamGeometry(ifcAPI, modelID, options) {
|
|
|
183
224
|
const verts = ifcAPI.GetVertexArray(geometry.GetVertexData(), geometry.GetVertexDataSize());
|
|
184
225
|
const indices = ifcAPI.GetIndexArray(geometry.GetIndexData(), geometry.GetIndexDataSize());
|
|
185
226
|
if (verts.length === 0 || indices.length === 0) {
|
|
186
|
-
geometry
|
|
227
|
+
disposeGeometry(geometry);
|
|
187
228
|
continue;
|
|
188
229
|
}
|
|
189
230
|
// Extract positions and normals
|
|
@@ -218,7 +259,7 @@ function streamGeometry(ifcAPI, modelID, options) {
|
|
|
218
259
|
positions,
|
|
219
260
|
normals,
|
|
220
261
|
indices: new Uint32Array(indices),
|
|
221
|
-
flatTransform:
|
|
262
|
+
flatTransform: placedGeometry.flatTransformation,
|
|
222
263
|
color,
|
|
223
264
|
colorId,
|
|
224
265
|
});
|
|
@@ -226,16 +267,21 @@ function streamGeometry(ifcAPI, modelID, options) {
|
|
|
226
267
|
totalVertices += numVertices;
|
|
227
268
|
totalTriangles += indices.length / 3;
|
|
228
269
|
// Clean up WASM memory
|
|
229
|
-
geometry
|
|
270
|
+
disposeGeometry(geometry);
|
|
230
271
|
}
|
|
231
272
|
catch (error) {
|
|
232
|
-
|
|
233
|
-
|
|
273
|
+
const context = {
|
|
274
|
+
modelID,
|
|
275
|
+
expressID: flatMesh.expressID,
|
|
276
|
+
geometryExpressID: placedGeometry.geometryExpressID,
|
|
277
|
+
};
|
|
278
|
+
logError("Error processing geometry", context, new IfcGeometryProcessingError(context, error));
|
|
279
|
+
disposeGeometry(geometry);
|
|
234
280
|
}
|
|
235
281
|
}
|
|
236
282
|
});
|
|
237
283
|
if (options.verbose) {
|
|
238
|
-
|
|
284
|
+
logInfo(`\nCollected ${parts.length} geometry parts`, { modelID });
|
|
239
285
|
}
|
|
240
286
|
return {
|
|
241
287
|
parts,
|
|
@@ -246,56 +292,4 @@ function streamGeometry(ifcAPI, modelID, options) {
|
|
|
246
292
|
},
|
|
247
293
|
};
|
|
248
294
|
}
|
|
249
|
-
/**
|
|
250
|
-
* Build storey map for spatial context checking
|
|
251
|
-
*/
|
|
252
|
-
function buildStoreyMap(ifcAPI, modelID) {
|
|
253
|
-
const elementToStorey = new Map();
|
|
254
|
-
try {
|
|
255
|
-
// Get all building storeys
|
|
256
|
-
const storeys = ifcAPI.GetLineIDsWithType(modelID, WebIFC.IFCBUILDINGSTOREY);
|
|
257
|
-
for (let i = 0; i < storeys.size(); i++) {
|
|
258
|
-
const storeyID = storeys.get(i);
|
|
259
|
-
try {
|
|
260
|
-
// Get all elements in this storey via spatial structure
|
|
261
|
-
const relAggregates = ifcAPI.GetLineIDsWithType(modelID, WebIFC.IFCRELAGGREGATES);
|
|
262
|
-
for (let j = 0; j < relAggregates.size(); j++) {
|
|
263
|
-
const relID = relAggregates.get(j);
|
|
264
|
-
const rel = ifcAPI.GetLine(modelID, relID);
|
|
265
|
-
if (rel.RelatingObject && rel.RelatingObject.value === storeyID) {
|
|
266
|
-
if (rel.RelatedObjects) {
|
|
267
|
-
rel.RelatedObjects.forEach((obj) => {
|
|
268
|
-
if (obj && obj.value) {
|
|
269
|
-
elementToStorey.set(obj.value, storeyID);
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
// Also check spatial containment
|
|
276
|
-
const relContained = ifcAPI.GetLineIDsWithType(modelID, WebIFC.IFCRELCONTAINEDINSPATIALSTRUCTURE);
|
|
277
|
-
for (let j = 0; j < relContained.size(); j++) {
|
|
278
|
-
const relID = relContained.get(j);
|
|
279
|
-
const rel = ifcAPI.GetLine(modelID, relID);
|
|
280
|
-
if (rel.RelatingStructure && rel.RelatingStructure.value === storeyID) {
|
|
281
|
-
if (rel.RelatedElements) {
|
|
282
|
-
rel.RelatedElements.forEach((elem) => {
|
|
283
|
-
if (elem && elem.value) {
|
|
284
|
-
elementToStorey.set(elem.value, storeyID);
|
|
285
|
-
}
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
catch (error) {
|
|
292
|
-
// Skip errors for individual storeys
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
catch (error) {
|
|
297
|
-
console.warn("Could not build storey map:", error);
|
|
298
|
-
}
|
|
299
|
-
return elementToStorey;
|
|
300
|
-
}
|
|
301
295
|
//# sourceMappingURL=ifcInit.js.map
|
package/dist-npm/ifcInit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifcInit.js","sourceRoot":"","sources":["../src/ifcInit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ifcInit.js","sourceRoot":"","sources":["../src/ifcInit.ts"],"names":[],"mappings":"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"}
|
package/dist-npm/ifcModel.d.ts
CHANGED
|
@@ -8,7 +8,14 @@ export interface SceneBuildOptions {
|
|
|
8
8
|
generateNormals?: boolean;
|
|
9
9
|
verbose?: boolean;
|
|
10
10
|
freezeAfterBuild?: boolean;
|
|
11
|
+
usePBRMaterials?: boolean;
|
|
12
|
+
releaseRawPartsAfterBuild?: boolean;
|
|
11
13
|
}
|
|
14
|
+
export declare const MATERIAL_Z_OFFSET_STEP = 0.05;
|
|
15
|
+
export declare const MATERIAL_Z_OFFSET_WRAP = 1;
|
|
16
|
+
export declare const DEFAULT_IFC_MATERIAL_GRAY = 0.8;
|
|
17
|
+
export declare const DEFAULT_PBR_METALLIC = 0;
|
|
18
|
+
export declare const DEFAULT_PBR_ROUGHNESS = 0.7;
|
|
12
19
|
/** Result of building a scene */
|
|
13
20
|
export interface SceneBuildResult {
|
|
14
21
|
meshes: AbstractMesh[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifcModel.d.ts","sourceRoot":"","sources":["../src/ifcModel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAIL,YAAY,EACZ,aAAa,EACb,OAAO,
|
|
1
|
+
{"version":3,"file":"ifcModel.d.ts","sourceRoot":"","sources":["../src/ifcModel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAIL,YAAY,EACZ,aAAa,EACb,OAAO,EAIR,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,WAAW,CAAC;AAO9D,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,sBAAsB,IAAM,CAAC;AAC1C,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,qCAAqC;AACrC,MAAM,WAAW,UAAU;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,yBAAyB;AACzB,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAyMjH;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAoBlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,GAAG,IAAI,CA6CxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAmB7F"}
|
package/dist-npm/ifcModel.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import { Scene, Mesh, VertexData, Matrix, AbstractMesh, TransformNode, Vector3, Color3, StandardMaterial, } from "@babylonjs/core";
|
|
1
|
+
import { Scene, Mesh, VertexData, Matrix, AbstractMesh, TransformNode, Vector3, Color3, StandardMaterial, PBRMaterial, } from "@babylonjs/core";
|
|
2
|
+
import { logInfo, logWarn } from "./logging";
|
|
3
|
+
export const MATERIAL_Z_OFFSET_STEP = 0.05;
|
|
4
|
+
export const MATERIAL_Z_OFFSET_WRAP = 1.0;
|
|
5
|
+
export const DEFAULT_IFC_MATERIAL_GRAY = 0.8;
|
|
6
|
+
export const DEFAULT_PBR_METALLIC = 0;
|
|
7
|
+
export const DEFAULT_PBR_ROUGHNESS = 0.7;
|
|
2
8
|
// ============================================================================
|
|
3
9
|
// PUBLIC API - Scene Building
|
|
4
10
|
// ============================================================================
|
|
@@ -14,24 +20,55 @@ export function buildIfcModel(model, scene, options = {}) {
|
|
|
14
20
|
generateNormals: false,
|
|
15
21
|
verbose: true,
|
|
16
22
|
freezeAfterBuild: true,
|
|
23
|
+
usePBRMaterials: false,
|
|
24
|
+
releaseRawPartsAfterBuild: true,
|
|
17
25
|
...options,
|
|
18
26
|
};
|
|
19
27
|
if (opts.verbose) {
|
|
20
|
-
|
|
28
|
+
logInfo(`\nBuilding Babylon.js scene from ${model.parts.length} raw parts...`, { modelID: model.modelID });
|
|
21
29
|
}
|
|
30
|
+
/*
|
|
31
|
+
const skybox = MeshBuilder.CreateBox("skyBox", { size: 10000 }, scene);
|
|
32
|
+
const skyboxMaterial = new PBRMaterial("skyBoxMaterial", scene);
|
|
33
|
+
skyboxMaterial.backFaceCulling = false;
|
|
34
|
+
skyboxMaterial.reflectionTexture = scene.environmentTexture;
|
|
35
|
+
skyboxMaterial.reflectionTexture!.coordinatesMode = Texture.SKYBOX_MODE;
|
|
36
|
+
skyboxMaterial.disableLighting = true;
|
|
37
|
+
skyboxMaterial.microSurface = 0.3;
|
|
38
|
+
// skybox.material = skyboxMaterial;
|
|
39
|
+
*/
|
|
22
40
|
// Create root transform node (without scaling yet)
|
|
23
41
|
const rootNode = new TransformNode("ifc-root", scene);
|
|
24
|
-
//
|
|
25
|
-
|
|
42
|
+
// Validate and create meshes from raw parts
|
|
43
|
+
let invalidPartCount = 0;
|
|
44
|
+
const validParts = model.parts.filter((part) => {
|
|
45
|
+
const error = validateRawPart(part);
|
|
46
|
+
if (error) {
|
|
47
|
+
invalidPartCount++;
|
|
48
|
+
if (opts.verbose) {
|
|
49
|
+
logWarn(`Skipping invalid part: ${error}`, {
|
|
50
|
+
modelID: model.modelID,
|
|
51
|
+
expressID: part.expressID,
|
|
52
|
+
geometryExpressID: part.geometryExpressID,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
});
|
|
59
|
+
const meshesWithColor = validParts.map((part) => {
|
|
26
60
|
return createMeshFromPart(part, model.modelID, scene, rootNode, opts);
|
|
27
61
|
});
|
|
28
62
|
if (opts.verbose) {
|
|
29
|
-
|
|
63
|
+
logInfo(` Created ${meshesWithColor.length} initial meshes`, { modelID: model.modelID });
|
|
64
|
+
if (invalidPartCount > 0) {
|
|
65
|
+
logInfo(` Skipped ${invalidPartCount} invalid geometry part(s)`, { modelID: model.modelID });
|
|
66
|
+
}
|
|
30
67
|
}
|
|
31
68
|
// Group by (expressID + colorId)
|
|
32
69
|
const meshGroups = groupMeshesByKey(meshesWithColor);
|
|
33
70
|
if (opts.verbose) {
|
|
34
|
-
|
|
71
|
+
logInfo(` Grouped into ${meshGroups.size} unique (expressID + material) combinations`, { modelID: model.modelID });
|
|
35
72
|
}
|
|
36
73
|
// Create materials and merge groups
|
|
37
74
|
const materialCache = new Map();
|
|
@@ -47,7 +84,7 @@ export function buildIfcModel(model, scene, options = {}) {
|
|
|
47
84
|
// Get or create material
|
|
48
85
|
const material = getMaterial(colorId, color, scene, materialCache, materialZOffset, opts);
|
|
49
86
|
// Increment z-offset with modulo to prevent infinite growth
|
|
50
|
-
materialZOffset = (materialZOffset +
|
|
87
|
+
materialZOffset = (materialZOffset + MATERIAL_Z_OFFSET_STEP) % MATERIAL_Z_OFFSET_WRAP;
|
|
51
88
|
if (meshes.length === 1) {
|
|
52
89
|
// Single mesh - no merging needed
|
|
53
90
|
const mesh = meshes[0];
|
|
@@ -56,48 +93,32 @@ export function buildIfcModel(model, scene, options = {}) {
|
|
|
56
93
|
finalMeshes.push(mesh);
|
|
57
94
|
}
|
|
58
95
|
else if (opts.mergeMeshes) {
|
|
59
|
-
// Multiple meshes -
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
mergedMesh.isVisible = true;
|
|
77
|
-
finalMeshes.push(mergedMesh);
|
|
78
|
-
mergedCount++;
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
// Merge failed - keep original meshes
|
|
82
|
-
meshes.forEach((mesh) => {
|
|
83
|
-
mesh.name = `ifc-${expressID}`;
|
|
84
|
-
mesh.material = material;
|
|
85
|
-
finalMeshes.push(mesh);
|
|
86
|
-
});
|
|
87
|
-
skippedCount++;
|
|
88
|
-
}
|
|
96
|
+
// Multiple meshes - merge parts belonging to the same element/material group.
|
|
97
|
+
const mergedMesh = Mesh.MergeMeshes(meshes, true, // disposeSource
|
|
98
|
+
true, // allow32BitsIndices
|
|
99
|
+
undefined, // meshSubclass
|
|
100
|
+
false, // subdivideWithSubMeshes
|
|
101
|
+
false);
|
|
102
|
+
if (mergedMesh) {
|
|
103
|
+
mergedMesh.name = `ifc-${expressID}`;
|
|
104
|
+
mergedMesh.parent = rootNode;
|
|
105
|
+
mergedMesh.material = material;
|
|
106
|
+
mergedMesh.metadata = {
|
|
107
|
+
expressID: expressID,
|
|
108
|
+
modelID: model.modelID,
|
|
109
|
+
};
|
|
110
|
+
mergedMesh.isVisible = true;
|
|
111
|
+
finalMeshes.push(mergedMesh);
|
|
112
|
+
mergedCount++;
|
|
89
113
|
}
|
|
90
114
|
else {
|
|
91
|
-
//
|
|
115
|
+
// Merge failed - keep original meshes
|
|
92
116
|
meshes.forEach((mesh) => {
|
|
93
117
|
mesh.name = `ifc-${expressID}`;
|
|
94
118
|
mesh.material = material;
|
|
95
119
|
finalMeshes.push(mesh);
|
|
96
120
|
});
|
|
97
121
|
skippedCount++;
|
|
98
|
-
if (opts.verbose) {
|
|
99
|
-
console.log(` ⚠ Skipped merging ${meshes.length} parts for expressID ${expressID} (different storeys)`);
|
|
100
|
-
}
|
|
101
122
|
}
|
|
102
123
|
}
|
|
103
124
|
else {
|
|
@@ -121,7 +142,7 @@ export function buildIfcModel(model, scene, options = {}) {
|
|
|
121
142
|
const centerOffset = bounds.center;
|
|
122
143
|
rootNode.position.subtractInPlace(centerOffset);
|
|
123
144
|
if (opts.verbose) {
|
|
124
|
-
|
|
145
|
+
logInfo(` Model auto-centered at origin (offset: ${centerOffset.x.toFixed(2)}, ${centerOffset.y.toFixed(2)}, ${centerOffset.z.toFixed(2)})`, { modelID: model.modelID });
|
|
125
146
|
}
|
|
126
147
|
}
|
|
127
148
|
}
|
|
@@ -135,22 +156,19 @@ export function buildIfcModel(model, scene, options = {}) {
|
|
|
135
156
|
buildTimeMs,
|
|
136
157
|
};
|
|
137
158
|
if (opts.verbose) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
159
|
+
logInfo(`\nModel building complete:`, { modelID: model.modelID });
|
|
160
|
+
logInfo(` Original parts: ${stats.originalPartCount}`, { modelID: model.modelID });
|
|
161
|
+
logInfo(` Merged groups: ${stats.mergedGroupCount}`, { modelID: model.modelID });
|
|
162
|
+
logInfo(` Skipped groups: ${stats.skippedGroupCount}`, { modelID: model.modelID });
|
|
163
|
+
logInfo(` Final meshes: ${stats.finalMeshCount}`, { modelID: model.modelID });
|
|
164
|
+
logInfo(` Materials created: ${stats.materialCount}`, { modelID: model.modelID });
|
|
165
|
+
logInfo(` Build time: ${stats.buildTimeMs.toFixed(2)}ms`, { modelID: model.modelID });
|
|
145
166
|
}
|
|
146
167
|
if (opts.freezeAfterBuild) {
|
|
147
168
|
// Freeze only IFC meshes that are children of ifc-root
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
mesh.freezeWorldMatrix();
|
|
152
|
-
});
|
|
153
|
-
}
|
|
169
|
+
rootNode.getChildMeshes().forEach((mesh) => {
|
|
170
|
+
mesh.freezeWorldMatrix();
|
|
171
|
+
});
|
|
154
172
|
// Freeze IFC materials only
|
|
155
173
|
scene.materials.forEach((material) => {
|
|
156
174
|
if (material.name.startsWith("ifc-material-")) {
|
|
@@ -158,9 +176,12 @@ export function buildIfcModel(model, scene, options = {}) {
|
|
|
158
176
|
}
|
|
159
177
|
});
|
|
160
178
|
if (opts.verbose) {
|
|
161
|
-
|
|
179
|
+
logInfo(` IFC meshes and materials frozen for optimal performance`, { modelID: model.modelID });
|
|
162
180
|
}
|
|
163
181
|
}
|
|
182
|
+
if (opts.releaseRawPartsAfterBuild) {
|
|
183
|
+
model.parts = [];
|
|
184
|
+
}
|
|
164
185
|
return {
|
|
165
186
|
meshes: finalMeshes,
|
|
166
187
|
rootNode,
|
|
@@ -183,10 +204,10 @@ export function disposeIfcModel(scene) {
|
|
|
183
204
|
const rootNode = scene.getTransformNodeByName("ifc-root");
|
|
184
205
|
if (rootNode) {
|
|
185
206
|
rootNode.dispose();
|
|
186
|
-
|
|
207
|
+
logInfo(`ifc-root node and all child meshes disposed`);
|
|
187
208
|
}
|
|
188
209
|
if (materialCount > 0) {
|
|
189
|
-
|
|
210
|
+
logInfo(`${materialCount} IFC materials disposed`);
|
|
190
211
|
}
|
|
191
212
|
}
|
|
192
213
|
/**
|
|
@@ -245,7 +266,7 @@ export function centerModelAtOrigin(meshes, rootNode) {
|
|
|
245
266
|
mesh.position.subtractInPlace(offset);
|
|
246
267
|
});
|
|
247
268
|
}
|
|
248
|
-
|
|
269
|
+
logInfo(`Model centered at origin, offset: (${offset.x.toFixed(2)}, ${offset.y.toFixed(2)}, ${offset.z.toFixed(2)})`);
|
|
249
270
|
return offset;
|
|
250
271
|
}
|
|
251
272
|
// ============================================================================
|
|
@@ -265,16 +286,18 @@ function createMeshFromPart(part, modelID, scene, rootNode, options) {
|
|
|
265
286
|
};
|
|
266
287
|
// Check if normals need to be generated
|
|
267
288
|
let normals = part.normals;
|
|
268
|
-
|
|
289
|
+
const hasInvalidNormalLength = normals.length !== part.positions.length;
|
|
290
|
+
const shouldGenerateNormals = (options.generateNormals && areAllNormalsZero(normals)) || hasInvalidNormalLength;
|
|
291
|
+
if (shouldGenerateNormals) {
|
|
269
292
|
const tempNormals = [];
|
|
270
|
-
VertexData.ComputeNormals(
|
|
293
|
+
VertexData.ComputeNormals(part.positions, part.indices, tempNormals);
|
|
271
294
|
normals = new Float32Array(tempNormals);
|
|
272
295
|
}
|
|
273
296
|
// Apply vertex data
|
|
274
297
|
const vertexData = new VertexData();
|
|
275
|
-
vertexData.positions =
|
|
276
|
-
vertexData.normals =
|
|
277
|
-
vertexData.indices =
|
|
298
|
+
vertexData.positions = part.positions;
|
|
299
|
+
vertexData.normals = normals;
|
|
300
|
+
vertexData.indices = part.indices;
|
|
278
301
|
vertexData.applyToMesh(mesh);
|
|
279
302
|
// Apply transformation
|
|
280
303
|
if (part.flatTransform && part.flatTransform.length === 16) {
|
|
@@ -288,6 +311,39 @@ function createMeshFromPart(part, modelID, scene, rootNode, options) {
|
|
|
288
311
|
color: part.color,
|
|
289
312
|
};
|
|
290
313
|
}
|
|
314
|
+
function areAllNormalsZero(normals) {
|
|
315
|
+
for (let i = 0; i < normals.length; i++) {
|
|
316
|
+
if (normals[i] !== 0) {
|
|
317
|
+
return false;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
function validateRawPart(part) {
|
|
323
|
+
const vertexCount = part.positions.length / 3;
|
|
324
|
+
if (part.positions.length === 0 || part.positions.length % 3 !== 0) {
|
|
325
|
+
return "positions must be a non-empty Float32Array with length divisible by 3";
|
|
326
|
+
}
|
|
327
|
+
if (part.indices.length === 0 || part.indices.length % 3 !== 0) {
|
|
328
|
+
return "indices must be a non-empty Uint32Array with length divisible by 3";
|
|
329
|
+
}
|
|
330
|
+
for (let i = 0; i < part.positions.length; i++) {
|
|
331
|
+
if (!Number.isFinite(part.positions[i])) {
|
|
332
|
+
return `positions contains non-finite value at index ${i}`;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
for (let i = 0; i < part.normals.length; i++) {
|
|
336
|
+
if (!Number.isFinite(part.normals[i])) {
|
|
337
|
+
return `normals contains non-finite value at index ${i}`;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
for (let i = 0; i < part.indices.length; i++) {
|
|
341
|
+
if (part.indices[i] >= vertexCount) {
|
|
342
|
+
return `indices contains out-of-range vertex index ${part.indices[i]} (vertexCount=${vertexCount})`;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
291
347
|
/**
|
|
292
348
|
* Group meshes by (expressID + colorId)
|
|
293
349
|
*/
|
|
@@ -311,37 +367,48 @@ function getMaterial(colorId, color, scene, materialCache, materialZOffset, opti
|
|
|
311
367
|
if (materialCache.has(colorId)) {
|
|
312
368
|
return materialCache.get(colorId);
|
|
313
369
|
}
|
|
314
|
-
|
|
315
|
-
if (
|
|
316
|
-
|
|
317
|
-
|
|
370
|
+
let material;
|
|
371
|
+
if (options.usePBRMaterials) {
|
|
372
|
+
// Create PBR material
|
|
373
|
+
const pbrMaterial = new PBRMaterial(`ifc-material-${colorId}`, scene);
|
|
374
|
+
if (color) {
|
|
375
|
+
pbrMaterial.albedoColor = new Color3(color.x, color.y, color.z);
|
|
376
|
+
pbrMaterial.alpha = color.w;
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
// Default gray color
|
|
380
|
+
pbrMaterial.albedoColor = new Color3(DEFAULT_IFC_MATERIAL_GRAY, DEFAULT_IFC_MATERIAL_GRAY, DEFAULT_IFC_MATERIAL_GRAY);
|
|
381
|
+
}
|
|
382
|
+
// Set PBR-specific properties for non-metallic surfaces (typical for building materials)
|
|
383
|
+
pbrMaterial.metallic = DEFAULT_PBR_METALLIC;
|
|
384
|
+
pbrMaterial.roughness = DEFAULT_PBR_ROUGHNESS;
|
|
385
|
+
// Add z-offset to prevent z-fighting
|
|
386
|
+
pbrMaterial.zOffset = materialZOffset;
|
|
387
|
+
// Set backface culling based on options
|
|
388
|
+
pbrMaterial.backFaceCulling = !options.doubleSided;
|
|
389
|
+
material = pbrMaterial;
|
|
318
390
|
}
|
|
319
391
|
else {
|
|
320
|
-
//
|
|
321
|
-
|
|
392
|
+
// Create Standard material (default)
|
|
393
|
+
const standardMaterial = new StandardMaterial(`ifc-material-${colorId}`, scene);
|
|
394
|
+
if (color) {
|
|
395
|
+
standardMaterial.diffuseColor = new Color3(color.x, color.y, color.z);
|
|
396
|
+
standardMaterial.alpha = color.w;
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
// Default gray color
|
|
400
|
+
standardMaterial.diffuseColor = new Color3(DEFAULT_IFC_MATERIAL_GRAY, DEFAULT_IFC_MATERIAL_GRAY, DEFAULT_IFC_MATERIAL_GRAY);
|
|
401
|
+
}
|
|
402
|
+
// Add z-offset to prevent z-fighting
|
|
403
|
+
standardMaterial.zOffset = materialZOffset;
|
|
404
|
+
// Set backface culling based on options
|
|
405
|
+
standardMaterial.backFaceCulling = !options.doubleSided;
|
|
406
|
+
material = standardMaterial;
|
|
322
407
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
material.backFaceCulling = !options.doubleSided;
|
|
408
|
+
material.metadata = {
|
|
409
|
+
color: color ? { r: color.x, g: color.y, b: color.z, a: color.w } : null,
|
|
410
|
+
};
|
|
327
411
|
materialCache.set(colorId, material);
|
|
328
412
|
return material;
|
|
329
413
|
}
|
|
330
|
-
/**
|
|
331
|
-
* Check if meshes can be safely merged based on spatial context
|
|
332
|
-
*/
|
|
333
|
-
function canMergeMeshes(meshes, storeyMap) {
|
|
334
|
-
const storeyIDs = new Set();
|
|
335
|
-
meshes.forEach((mesh) => {
|
|
336
|
-
const expressID = mesh.metadata?.expressID;
|
|
337
|
-
if (expressID !== undefined) {
|
|
338
|
-
const storeyID = storeyMap.get(expressID);
|
|
339
|
-
if (storeyID) {
|
|
340
|
-
storeyIDs.add(storeyID);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
// Allow merge ONLY if all parts belong to same storey OR no storey assignment
|
|
345
|
-
return storeyIDs.size <= 1;
|
|
346
|
-
}
|
|
347
414
|
//# sourceMappingURL=ifcModel.js.map
|
package/dist-npm/ifcModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifcModel.js","sourceRoot":"","sources":["../src/ifcModel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ifcModel.js","sourceRoot":"","sources":["../src/ifcModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface LogContext {
|
|
2
|
+
modelID?: number;
|
|
3
|
+
expressID?: number;
|
|
4
|
+
geometryExpressID?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function logInfo(message: string, context?: LogContext): void;
|
|
7
|
+
export declare function logWarn(message: string, context?: LogContext, detail?: unknown): void;
|
|
8
|
+
export declare function logError(message: string, context?: LogContext, detail?: unknown): void;
|
|
9
|
+
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAyBD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAEnE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAOrF;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAOtF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
function formatContext(context) {
|
|
2
|
+
if (!context) {
|
|
3
|
+
return "";
|
|
4
|
+
}
|
|
5
|
+
const contextParts = [];
|
|
6
|
+
if (context.modelID !== undefined) {
|
|
7
|
+
contextParts.push(`modelID=${context.modelID}`);
|
|
8
|
+
}
|
|
9
|
+
if (context.expressID !== undefined) {
|
|
10
|
+
contextParts.push(`expressID=${context.expressID}`);
|
|
11
|
+
}
|
|
12
|
+
if (context.geometryExpressID !== undefined) {
|
|
13
|
+
contextParts.push(`geometryExpressID=${context.geometryExpressID}`);
|
|
14
|
+
}
|
|
15
|
+
return contextParts.length > 0 ? ` (${contextParts.join(", ")})` : "";
|
|
16
|
+
}
|
|
17
|
+
function withContext(message, context) {
|
|
18
|
+
return `${message}${formatContext(context)}`;
|
|
19
|
+
}
|
|
20
|
+
export function logInfo(message, context) {
|
|
21
|
+
console.log(withContext(message, context));
|
|
22
|
+
}
|
|
23
|
+
export function logWarn(message, context, detail) {
|
|
24
|
+
const text = withContext(message, context);
|
|
25
|
+
if (detail !== undefined) {
|
|
26
|
+
console.warn(text, detail);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
console.warn(text);
|
|
30
|
+
}
|
|
31
|
+
export function logError(message, context, detail) {
|
|
32
|
+
const text = withContext(message, context);
|
|
33
|
+
if (detail !== undefined) {
|
|
34
|
+
console.error(text, detail);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
console.error(text);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAMA,SAAS,aAAa,CAAC,OAAoB;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,YAAY,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,YAAY,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5C,YAAY,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,OAAoB;IACxD,OAAO,GAAG,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,OAAoB;IAC3D,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,OAAoB,EAAE,MAAgB;IAC7E,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,OAAoB,EAAE,MAAgB;IAC9E,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "babylon-ifc-loader",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Babylon.js
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Babylon.js Loader for IFC files using web-ifc",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist-npm/index.js",
|
|
7
7
|
"module": "dist-npm/index.js",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"files": [
|
|
16
16
|
"dist-npm",
|
|
17
17
|
"LICENSE",
|
|
18
|
+
"CHANGELOG.md",
|
|
18
19
|
"readme.md",
|
|
19
20
|
"API.md"
|
|
20
21
|
],
|
package/readme.md
CHANGED
|
@@ -46,6 +46,7 @@ After running `npm run dev`, open:
|
|
|
46
46
|
- **Drag & Drop:** Drop `.ifc` files onto the canvas to load them
|
|
47
47
|
- **Element Picking:** Click on elements to view metadata and highlight them
|
|
48
48
|
- **Intelligent Merging:** Automatically merges meshes with same material while preserving metadata
|
|
49
|
+
- **Structured Logging:** Typed logging helpers with optional IFC context (`modelID`, `expressID`, `geometryExpressID`)
|
|
49
50
|
- **Camera Framing:** Automatically positions camera to view the entire model
|
|
50
51
|
- **Inspector:** Built-in Babylon.js Inspector for debugging
|
|
51
52
|
- **Keyboard Shortcuts:** Ctrl+I (or Cmd+I on Mac) toggles the inspector, works across all keyboard layouts
|
|
@@ -59,23 +60,31 @@ The codebase follows a strict layered architecture with clear separation of conc
|
|
|
59
60
|
|
|
60
61
|
All web-ifc interaction. **Zero Babylon.js dependencies.**
|
|
61
62
|
|
|
62
|
-
- `initializeWebIFC(wasmPath?, logLevel?)`
|
|
63
|
-
- `loadIfcModel(ifcAPI, source, options?)`
|
|
64
|
-
- `closeIfcModel(ifcAPI, modelID)`
|
|
65
|
-
- `getProjectInfo(ifcAPI, modelID)`
|
|
63
|
+
- `initializeWebIFC(wasmPath?, logLevel?)` - initialize web-ifc API
|
|
64
|
+
- `loadIfcModel(ifcAPI, source, options?)` - load and extract raw geometry data
|
|
65
|
+
- `closeIfcModel(ifcAPI, modelID)` - free IFC model memory
|
|
66
|
+
- `getProjectInfo(ifcAPI, modelID)` - extract project metadata
|
|
66
67
|
|
|
67
68
|
### Rendering Layer (`src/ifcModel.ts`)
|
|
68
69
|
|
|
69
70
|
All Babylon.js scene construction. **Zero web-ifc dependencies.**
|
|
70
71
|
|
|
71
|
-
- `buildIfcModel(model, scene, options?)`
|
|
72
|
-
- `disposeIfcModel(scene)`
|
|
73
|
-
- `getModelBounds(meshes)`
|
|
74
|
-
- `centerModelAtOrigin(meshes, rootNode?)`
|
|
72
|
+
- `buildIfcModel(model, scene, options?)` - create meshes, materials, merge, center
|
|
73
|
+
- `disposeIfcModel(scene)` - dispose all IFC meshes and materials
|
|
74
|
+
- `getModelBounds(meshes)` - calculate bounding box
|
|
75
|
+
- `centerModelAtOrigin(meshes, rootNode?)` - center model at origin
|
|
75
76
|
|
|
76
77
|
### Application Layer
|
|
77
78
|
|
|
78
|
-
- `src/main.ts`
|
|
79
|
+
- `src/main.ts` - uses low-level two-step API (ifcInit + ifcModel)
|
|
80
|
+
|
|
81
|
+
### Shared Utilities (`src/logging.ts`)
|
|
82
|
+
|
|
83
|
+
Structured logging helpers used across IFC loading and rendering:
|
|
84
|
+
|
|
85
|
+
- `logInfo(message, context?)`
|
|
86
|
+
- `logWarn(message, context?, detail?)`
|
|
87
|
+
- `logError(message, context?, detail?)`
|
|
79
88
|
|
|
80
89
|
## Usage
|
|
81
90
|
|
|
@@ -185,6 +194,8 @@ The project uses [Vitest](https://vitest.dev/) for unit testing with the followi
|
|
|
185
194
|
| `getProjectInfo.test.ts` | Tests for project metadata extraction |
|
|
186
195
|
| `buildIfcModel.test.ts` | Tests for Babylon.js scene building |
|
|
187
196
|
| `zOffset.test.ts` | Tests for z-offset material handling |
|
|
197
|
+
| `buildIfcModel.perf.test.ts` | Perf regression tests for synthetic large models |
|
|
198
|
+
| `logging.test.ts` | Unit tests for structured logging helpers |
|
|
188
199
|
|
|
189
200
|
### Running Tests
|
|
190
201
|
|
|
@@ -222,22 +233,22 @@ describe("myFunction", () => {
|
|
|
222
233
|
|
|
223
234
|
```
|
|
224
235
|
src/
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
236
|
+
|-- main.ts - app entry (two-step API: ifcInit + ifcModel)
|
|
237
|
+
|-- ifcInit.ts - IFC data layer (web-ifc only)
|
|
238
|
+
|-- ifcModel.ts - rendering layer (Babylon.js only)
|
|
239
|
+
|-- style.css - basic styling
|
|
240
|
+
`-- __tests__/ - unit tests
|
|
230
241
|
|
|
231
242
|
public/
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
243
|
+
|-- test.ifc - sample IFC file loaded at startup
|
|
244
|
+
|-- example.ifc - additional sample
|
|
245
|
+
`-- bplogo.svg - asset
|
|
235
246
|
|
|
236
247
|
Root
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
248
|
+
|-- index.html - HTML entry
|
|
249
|
+
|-- vite.config.ts - copies web-ifc.wasm to dist/, sets WASM handling
|
|
250
|
+
|-- tsconfig.json - TypeScript config
|
|
251
|
+
`-- package.json - scripts and deps
|
|
241
252
|
```
|
|
242
253
|
|
|
243
254
|
## Picking and Highlighting
|
|
@@ -249,8 +260,9 @@ Root
|
|
|
249
260
|
## Materials, Merging, and Performance
|
|
250
261
|
|
|
251
262
|
- Materials are `StandardMaterial` per unique RGBA color, configurable `backFaceCulling`, incremental `zOffset` to mitigate z-fighting
|
|
252
|
-
- Meshes are merged per (expressID + color)
|
|
263
|
+
- Meshes are merged per (expressID + color)
|
|
253
264
|
- Metadata (`expressID`, `modelID`) preserved on merged meshes
|
|
265
|
+
- Material metadata includes source color as `material.metadata.color` with `{ r, g, b, a }` (or `null`)
|
|
254
266
|
- Stats for counts, triangles, materials, and build time are computed
|
|
255
267
|
|
|
256
268
|
### Custom Merging Strategy
|
|
@@ -308,3 +320,9 @@ for (const mesh of meshes) {
|
|
|
308
320
|
## License
|
|
309
321
|
|
|
310
322
|
Apache-2.0 - See [LICENSE](./LICENSE) for details.
|
|
323
|
+
|
|
324
|
+
## Changelog
|
|
325
|
+
|
|
326
|
+
See [CHANGELOG.md](./CHANGELOG.md) for release notes and recent changes.
|
|
327
|
+
|
|
328
|
+
|