@pilotdev/pilot-bim-dataprovider 24.9.0 → 24.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +9 -9
  2. package/lib/index.d.ts +3 -3
  3. package/lib/index.js +2 -2
  4. package/lib/index.js.map +1 -1
  5. package/lib/src/file-system/IFileSystem.d.ts +47 -0
  6. package/lib/src/file-system/IFileSystem.js +179 -0
  7. package/lib/src/file-system/IFileSystem.js.map +1 -0
  8. package/lib/src/file-system/IFileSystemCache.d.ts +62 -0
  9. package/lib/src/file-system/IFileSystemCache.js +154 -0
  10. package/lib/src/file-system/IFileSystemCache.js.map +1 -0
  11. package/lib/src/file-system/OPFS.d.ts +35 -0
  12. package/lib/src/file-system/OPFS.js +182 -0
  13. package/lib/src/file-system/OPFS.js.map +1 -0
  14. package/lib/src/file-system/PATH.d.ts +8 -0
  15. package/lib/src/file-system/PATH.js +34 -0
  16. package/lib/src/file-system/PATH.js.map +1 -0
  17. package/lib/src/model/BimDataElement.d.ts +69 -3
  18. package/lib/src/model/BimDataElement.js +13 -4
  19. package/lib/src/model/BimDataElement.js.map +1 -1
  20. package/lib/src/model/BimDataElementPropertySet.js.map +1 -1
  21. package/lib/src/model/BimDataPart.d.ts +62 -0
  22. package/lib/src/model/BimDataPart.js +99 -0
  23. package/lib/src/model/BimDataPart.js.map +1 -0
  24. package/lib/src/model/BimDataProvider.d.ts +16 -0
  25. package/lib/src/model/BimDataProvider.js +29 -0
  26. package/lib/src/model/BimDataProvider.js.map +1 -0
  27. package/lib/src/model/Consts.d.ts +3 -0
  28. package/lib/src/model/Consts.js +3 -0
  29. package/lib/src/model/Consts.js.map +1 -1
  30. package/lib/src/utils/ViewerTools.d.ts +9 -9
  31. package/lib/src/utils/ViewerTools.js +73 -38
  32. package/lib/src/utils/ViewerTools.js.map +1 -1
  33. package/lib/src/utils/WasmTools.d.ts +10 -6
  34. package/lib/src/utils/WasmTools.js +66 -32
  35. package/lib/src/utils/WasmTools.js.map +1 -1
  36. package/lib/src/wasm/CorsWorker.d.ts +6 -0
  37. package/lib/src/wasm/CorsWorker.js +20 -0
  38. package/lib/src/wasm/CorsWorker.js.map +1 -0
  39. package/lib/src/wasm/pilot_bim_dataprovider.d.ts +136 -7
  40. package/lib/src/wasm/pilot_bim_dataprovider.js +1 -1
  41. package/lib/src/wasm/pilot_bim_dataprovider.wasm +0 -0
  42. package/lib/src/wasm/wasm.worker.d.ts +56 -0
  43. package/lib/src/wasm/wasm.worker.js +280 -0
  44. package/lib/src/wasm/wasm.worker.js.map +1 -0
  45. package/package.json +5 -12
  46. package/lib/src/model/BimDataModel.d.ts +0 -19
  47. package/lib/src/model/BimDataModel.js +0 -59
  48. package/lib/src/model/BimDataModel.js.map +0 -1
  49. package/lib/src/model/BimDataModelPart.d.ts +0 -40
  50. package/lib/src/model/BimDataModelPart.js +0 -144
  51. package/lib/src/model/BimDataModelPart.js.map +0 -1
  52. package/lib/src/model/BimNodeComparer.d.ts +0 -10
  53. package/lib/src/model/BimNodeComparer.js +0 -71
  54. package/lib/src/model/BimNodeComparer.js.map +0 -1
@@ -0,0 +1,56 @@
1
+ import { BimDataTessellation } from "../model/BimDataTessellation.js";
2
+ import { BimCloudHierarchyItem, BimCloudMetadata, BimDataElement } from "../model/BimDataElement.js";
3
+ import { BimDataElementPropertySet } from "../model/BimDataElementPropertySet.js";
4
+ interface IWasmWorker {
5
+ init(): Promise<void>;
6
+ open(modelPartId: string, buffer: ArrayBuffer): Promise<void>;
7
+ close(modelPartId: string): Promise<void>;
8
+ dispose(): void;
9
+ flushMemory(): Promise<void>;
10
+ auditModelPart(modelPartId: string): void;
11
+ updateModelPart(modelPartId: string, buffer: ArrayBuffer): Promise<void>;
12
+ getAllTessellations(modelPartId: string): Promise<Map<string, BimDataTessellation>>;
13
+ getTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint): Promise<Map<string, BimDataTessellation>>;
14
+ getAllElements(modelPartId: string): Promise<BimDataElement[]>;
15
+ getElements(modelPartId: string, versionFrom: bigint, versionTo: bigint): Promise<BimDataElement[]>;
16
+ getDiffElements(modelPartId: string, versionFrom: bigint, versionTo: bigint): Promise<BimDataElement[]>;
17
+ getElementTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint): Promise<Map<string, BimDataTessellation>>;
18
+ getElementProperties(modelPartId: string, elementId: string, version: bigint): Promise<BimDataElementPropertySet[]>;
19
+ getAllVersions(modelPartId: string): Promise<bigint[]>;
20
+ getLatestVersion(modelPartId: string): Promise<bigint>;
21
+ cacheCloudPart(modelPartId: string): Promise<void>;
22
+ getCloudPoints(modelPartId: string, index: number): Promise<Float32Array>;
23
+ getCloudHierarchy(modelPartId: string): Promise<BimCloudHierarchyItem[]>;
24
+ getCloudParameters(modelPartId: string): Promise<Map<string, string>>;
25
+ getCloudMetadata(modelPartId: string): Promise<BimCloudMetadata>;
26
+ }
27
+ export declare class WasmWorker implements IWasmWorker {
28
+ private readonly _isSecureContext;
29
+ private _module?;
30
+ private _cachedCloudReaders;
31
+ private _fs;
32
+ constructor();
33
+ init(): Promise<void>;
34
+ open(id: string, buffer: ArrayBuffer): Promise<void>;
35
+ close(modelPartId: string): Promise<void>;
36
+ dispose(): Promise<void>;
37
+ flushMemory(): Promise<void>;
38
+ auditModelPart(modelPartId: string): Promise<void>;
39
+ updateModelPart(modelPartId: string, buffer: ArrayBuffer): Promise<void>;
40
+ getAllTessellations(modelPartId: string): Promise<Map<string, BimDataTessellation>>;
41
+ getTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint): Promise<Map<string, BimDataTessellation>>;
42
+ getAllElements(modelPartId: string): Promise<BimDataElement[]>;
43
+ getElements(modelPartId: string, versionFrom: bigint, versionTo: bigint): Promise<BimDataElement[]>;
44
+ getDiffElements(modelPartId: string, versionFrom: bigint, versionTo: bigint): Promise<BimDataElement[]>;
45
+ getElementProperties(modelPartId: string, elementId: string, version: bigint): Promise<BimDataElementPropertySet[]>;
46
+ getElementTessellations(modelPartId: string, versionFrom: bigint, versionTo: bigint): Promise<Map<string, BimDataTessellation>>;
47
+ getAllVersions(modelPartId: string): Promise<bigint[]>;
48
+ getLatestVersion(modelPartId: string): Promise<bigint>;
49
+ cacheCloudPart(modelPartId: string): Promise<void>;
50
+ getCloudPoints(modelPartId: string, index: number): Promise<Float32Array>;
51
+ getCloudHierarchy(modelPartId: string): Promise<BimCloudHierarchyItem[]>;
52
+ getCloudParameters(modelPartId: string): Promise<Map<string, string>>;
53
+ getCloudMetadata(modelPartId: string): Promise<BimCloudMetadata>;
54
+ private runSyncFileOp;
55
+ }
56
+ export {};
@@ -0,0 +1,280 @@
1
+ import * as comlink from "comlink";
2
+ import BimDataProviderModule from "./pilot_bim_dataprovider.js";
3
+ import { WasmTools } from "../utils/WasmTools.js";
4
+ import { BimDataConverter } from "../utils/ViewerTools.js";
5
+ import { DATA_ROOT_FOLDER } from "../model/Consts.js";
6
+ import { AsyncFileSystem, ProxyFileSystem } from "../file-system/IFileSystem.js";
7
+ export class WasmWorker {
8
+ constructor() {
9
+ this._cachedCloudReaders = new Map();
10
+ this._isSecureContext = (self && Object.prototype.hasOwnProperty.call(self, 'isSecureContext ')) ? self.isSecureContext : false;
11
+ this._fs = this._isSecureContext ? new AsyncFileSystem() : new ProxyFileSystem();
12
+ }
13
+ async init() {
14
+ const moduleOverrides = {
15
+ print: (s) => console.log(s),
16
+ printErr: (e) => console.error(e)
17
+ };
18
+ this._module = await BimDataProviderModule(moduleOverrides);
19
+ this._module.FS.mkdir(DATA_ROOT_FOLDER);
20
+ const moduleFS = this._module.FS;
21
+ await this._fs.init();
22
+ this._fs.mountTo(moduleFS, DATA_ROOT_FOLDER);
23
+ }
24
+ async open(id, buffer) {
25
+ this._cachedCloudReaders.get(id)?.close();
26
+ this._cachedCloudReaders.delete(id);
27
+ if (!id)
28
+ id = "id_" + (0xffffffff * Math.random() >>> 0);
29
+ const data = new Uint8Array(buffer);
30
+ if (this._fs.isFileExists(id)) {
31
+ await this._fs.writeFile(id, data);
32
+ }
33
+ else {
34
+ await this._fs.makeFile(id, data);
35
+ }
36
+ }
37
+ async close(modelPartId) {
38
+ this._cachedCloudReaders.get(modelPartId)?.close();
39
+ this._cachedCloudReaders.delete(modelPartId);
40
+ if (this._fs.isFileExists(modelPartId)) {
41
+ await this._fs.remove(modelPartId);
42
+ }
43
+ }
44
+ async dispose() {
45
+ for (const [, reader] of this._cachedCloudReaders) {
46
+ await reader.close();
47
+ }
48
+ this._cachedCloudReaders.clear();
49
+ await this._fs.dispose();
50
+ }
51
+ async flushMemory() {
52
+ if (!this._module)
53
+ return;
54
+ const cloudParts = Array.from(this._cachedCloudReaders.keys());
55
+ for (const [, reader] of this._cachedCloudReaders) {
56
+ await reader.close();
57
+ }
58
+ this._cachedCloudReaders.clear();
59
+ await this.init();
60
+ const newModule = this._module;
61
+ for (const cloudId of cloudParts) {
62
+ const reader = new BimCloudPartAccessor(cloudId, newModule);
63
+ await reader.open();
64
+ this._cachedCloudReaders.set(cloudId, reader);
65
+ }
66
+ }
67
+ // ModelPart
68
+ auditModelPart(modelPartId) {
69
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
70
+ return this.runSyncFileOp(modelPartId, () => modelPart.auditModelDatabase());
71
+ }
72
+ async updateModelPart(modelPartId, buffer) {
73
+ const module = this._module;
74
+ const modelPart = new BimDataModelPartAccessor(modelPartId, module);
75
+ const origin = modelPart.path;
76
+ const data = new Uint8Array(buffer);
77
+ const diff = "tmp_" + (0xffffffff * Math.random() >>> 0);
78
+ module.FS.createDataFile("/", diff, data, true, true, true);
79
+ if (this._isSecureContext) { // Workaround to merge in secure context:
80
+ // read origin file
81
+ const originData = await this.runSyncFileOp(modelPartId, () => module.FS.readFile(origin));
82
+ // create temp file in MEMFS
83
+ const tmpOrigin = "tmp_" + (0xffffffff * Math.random() >>> 0);
84
+ module.FS.createDataFile("/", tmpOrigin, originData, true, true, true);
85
+ // merge files in MEMFS
86
+ modelPart.merge(tmpOrigin, diff);
87
+ // read merged data
88
+ const mergedData = module.FS.readFile(tmpOrigin);
89
+ // store merged data
90
+ this.runSyncFileOp(modelPartId, () => this._fs.writeFile(modelPartId, mergedData));
91
+ // delete temp file
92
+ module.FS.unlink(tmpOrigin);
93
+ }
94
+ else {
95
+ modelPart.merge(origin, diff);
96
+ }
97
+ module.FS.unlink(diff);
98
+ }
99
+ getAllTessellations(modelPartId) {
100
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
101
+ return this.runSyncFileOp(modelPartId, () => modelPart.getAllTessellations());
102
+ }
103
+ getTessellations(modelPartId, versionFrom, versionTo) {
104
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
105
+ return this.runSyncFileOp(modelPartId, () => modelPart.getTessellations(versionFrom, versionTo));
106
+ }
107
+ getAllElements(modelPartId) {
108
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
109
+ return this.runSyncFileOp(modelPartId, () => modelPart.getAllElements());
110
+ }
111
+ getElements(modelPartId, versionFrom, versionTo) {
112
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
113
+ return this.runSyncFileOp(modelPartId, () => modelPart.getElements(versionFrom, versionTo));
114
+ }
115
+ getDiffElements(modelPartId, versionFrom, versionTo) {
116
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
117
+ return this.runSyncFileOp(modelPartId, () => modelPart.getDiffElements(versionFrom, versionTo));
118
+ }
119
+ getElementProperties(modelPartId, elementId, version) {
120
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
121
+ return this.runSyncFileOp(modelPartId, () => modelPart.getElementProperties(elementId, version));
122
+ }
123
+ getElementTessellations(modelPartId, versionFrom, versionTo) {
124
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
125
+ return this.runSyncFileOp(modelPartId, () => modelPart.getElementTessellations(versionFrom, versionTo));
126
+ }
127
+ getAllVersions(modelPartId) {
128
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
129
+ return this.runSyncFileOp(modelPartId, () => modelPart.getAllVersions());
130
+ }
131
+ getLatestVersion(modelPartId) {
132
+ const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
133
+ return this.runSyncFileOp(modelPartId, () => modelPart.getLatestVersion());
134
+ }
135
+ // CloudPart
136
+ async cacheCloudPart(modelPartId) {
137
+ const reader = new BimCloudPartAccessor(modelPartId, this._module, () => this._fs.openSyncFileAccess(modelPartId), () => Promise.resolve(this._fs.closeSyncFileAccess(modelPartId)));
138
+ await this._cachedCloudReaders.get(modelPartId)?.close();
139
+ await reader.open();
140
+ this._cachedCloudReaders.set(modelPartId, reader);
141
+ }
142
+ getCloudPoints(modelPartId, index) {
143
+ const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
144
+ return this.runSyncFileOp(modelPartId, () => modelPart.getCloudPoints(index));
145
+ }
146
+ getCloudHierarchy(modelPartId) {
147
+ const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
148
+ return this.runSyncFileOp(modelPartId, () => modelPart.getCloudHierarchy());
149
+ }
150
+ getCloudParameters(modelPartId) {
151
+ const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
152
+ return this.runSyncFileOp(modelPartId, () => modelPart.getCloudParameters());
153
+ }
154
+ getCloudMetadata(modelPartId) {
155
+ const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
156
+ return this.runSyncFileOp(modelPartId, () => modelPart.getCloudMetadata());
157
+ }
158
+ async runSyncFileOp(path, opFunc) {
159
+ try {
160
+ await this._fs.openSyncFileAccess(path);
161
+ return opFunc();
162
+ }
163
+ catch (e) {
164
+ console.error(e);
165
+ throw e;
166
+ }
167
+ finally {
168
+ this._fs.closeSyncFileAccess(path);
169
+ }
170
+ }
171
+ }
172
+ comlink.expose(WasmWorker);
173
+ class BimDataPartAccessor {
174
+ constructor(id, module) {
175
+ this.id = id;
176
+ this._module = module;
177
+ }
178
+ get path() {
179
+ return '/' + DATA_ROOT_FOLDER + '/' + this.id;
180
+ }
181
+ }
182
+ class BimDataModelPartAccessor extends BimDataPartAccessor {
183
+ merge(targetPath, sourcePath) {
184
+ const targetVersion = this._module.getDatabaseVersion(targetPath);
185
+ const sourceVersion = this._module.getDatabaseVersion(sourcePath);
186
+ if (sourceVersion < 2) {
187
+ this._module.auditDatabase(sourcePath);
188
+ }
189
+ if (sourceVersion != targetVersion) {
190
+ this._module.manualMergeDatabases(targetPath, sourcePath);
191
+ }
192
+ else {
193
+ this._module.mergeDatabases(targetPath, sourcePath);
194
+ }
195
+ }
196
+ auditModelDatabase() {
197
+ const databaseVersion = this._module.getDatabaseVersion(this.path);
198
+ if (databaseVersion < 2) {
199
+ this._module.auditDatabase(this.path);
200
+ }
201
+ }
202
+ getAllTessellations() {
203
+ const vts = this._module.getAllTessellations(this.path);
204
+ return BimDataConverter.toBimDataTessellations(this._module, vts, true);
205
+ }
206
+ getTessellations(versionFrom, versionTo) {
207
+ const vts = this._module.getTessellations(this.path, versionFrom, versionTo);
208
+ return BimDataConverter.toBimDataTessellations(this._module, vts, true);
209
+ }
210
+ getAllElements() {
211
+ const nds = this._module.getAllNodes(this.path);
212
+ return BimDataConverter.toToBimDataElements(this._module, nds, true);
213
+ }
214
+ getElements(versionFrom, versionTo) {
215
+ const nds = this._module.getNodes(this.path, versionFrom, versionTo);
216
+ return BimDataConverter.toToBimDataElements(this._module, nds, true);
217
+ }
218
+ getDiffElements(versionFrom, versionTo) {
219
+ const result = this._module.getComparedNodes(this.path, versionFrom, versionTo);
220
+ return BimDataConverter.toToBimDataElements(this._module, result, true);
221
+ }
222
+ getElementTessellations(versionFrom, versionTo) {
223
+ const vts = this._module.getNodesTessellations(this.path, versionFrom, versionTo);
224
+ return BimDataConverter.toBimDataTessellations(this._module, vts, true);
225
+ }
226
+ getElementProperties(elementId, version) {
227
+ const set = this._module.getProperties(this.path, elementId, version);
228
+ return BimDataConverter.toModelElementPropertySet(set, true);
229
+ }
230
+ getAllVersions() {
231
+ const versions = new Array();
232
+ const bimVersions = this._module.getAllVersions(this.path);
233
+ for (let index = 0; index < bimVersions.size(); index++) {
234
+ const version = bimVersions.get(index);
235
+ versions.push(version);
236
+ }
237
+ bimVersions.delete();
238
+ return versions;
239
+ }
240
+ getLatestVersion() {
241
+ return this._module.getLatestVersion(this.path);
242
+ }
243
+ }
244
+ class BimCloudPartAccessor extends BimDataPartAccessor {
245
+ constructor(id, module, openFileFunc, closeFileFunc) {
246
+ super(id, module);
247
+ this.openFileFunc = openFileFunc;
248
+ this.closeFileFunc = closeFileFunc;
249
+ }
250
+ async open() {
251
+ if (this.openFileFunc)
252
+ await this.openFileFunc();
253
+ this._cloudReader = this._module.getCloudReader();
254
+ this._cloudReader.open(this.path);
255
+ }
256
+ async close() {
257
+ this._cloudReader?.close();
258
+ this._cloudReader?.delete();
259
+ this._cloudReader = undefined;
260
+ if (this.closeFileFunc)
261
+ await this.closeFileFunc();
262
+ }
263
+ getCloudPoints(index) {
264
+ const pointsData = this._cloudReader ? this._cloudReader.getCloudPoints(index, true) : this._module.getCloudPoints(this.path, index);
265
+ return BimDataConverter.toCloudPoints(this._module, pointsData, true);
266
+ }
267
+ getCloudHierarchy() {
268
+ const result = this._cloudReader ? this._cloudReader.getCloudHierarchy() : this._module.getCloudHierarchy(this.path);
269
+ return BimDataConverter.toBimCloudHierarchy(result, true);
270
+ }
271
+ getCloudParameters() {
272
+ const result = this._cloudReader ? this._cloudReader.getCloudParameters() : this._module.getCloudParameters(this.path);
273
+ return WasmTools.wasmMapToMap(result, true);
274
+ }
275
+ getCloudMetadata() {
276
+ const result = this._cloudReader ? this._cloudReader.getCloudMetadata() : this._module.getCloudMetadata(this.path);
277
+ return BimDataConverter.toCloudMetadata(result, true);
278
+ }
279
+ }
280
+ //# sourceMappingURL=wasm.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm.worker.js","sourceRoot":"","sources":["../../../src/wasm/wasm.worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pilotdev/pilot-bim-dataprovider",
3
- "version": "24.9.0",
4
- "description": "Package for reading data from information model data container.",
3
+ "version": "24.12.0",
4
+ "description": "The package for reading data from a information model data container.",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",
7
7
  "files": [
@@ -22,20 +22,13 @@
22
22
  ],
23
23
  "author": "JSC Ascon",
24
24
  "license": "MIT",
25
- "devDependencies": {
26
- "@types/emscripten": "1.39.6",
27
- "@types/jest": "28.1.3",
28
- "jest": "^29.7.0",
29
- "jest-environment-jsdom": "^29.7.0",
30
- "jest-mock-extended": "2.0.6",
31
- "jest-teamcity-reporter": "0.9.0",
32
- "ts-jest": "28.0.3",
33
- "typescript": "4.9.4"
25
+ "dependencies": {
26
+ "comlink": "4.2.0"
34
27
  },
35
28
  "exclude": [
36
29
  "node_modules",
37
30
  "lib",
38
31
  "build.js",
39
- "__test__"
32
+ "__tests__"
40
33
  ]
41
34
  }
@@ -1,19 +0,0 @@
1
- import { IBimDataModelPart } from './BimDataModelPart.js';
2
- export interface IBimDataModel {
3
- init(): Promise<void>;
4
- openModelPart(id: string, buffer: ArrayBuffer): IBimDataModelPart | undefined;
5
- closeModelPart(id: string): void;
6
- getModelPart(id: string): IBimDataModelPart | undefined;
7
- dispose(): void;
8
- }
9
- export declare class BimDataModel implements IBimDataModel {
10
- private _module?;
11
- private _modelParts;
12
- private _isDisposed;
13
- constructor();
14
- init(): Promise<void>;
15
- openModelPart(id: string, buffer: ArrayBuffer): IBimDataModelPart | undefined;
16
- closeModelPart(id: string): void;
17
- getModelPart(id: string): IBimDataModelPart | undefined;
18
- dispose(): void;
19
- }
@@ -1,59 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import BimDataProviderModule from '../wasm/pilot_bim_dataprovider.js';
11
- import { BimDataModelPart } from './BimDataModelPart.js';
12
- export class BimDataModel {
13
- constructor() {
14
- this._isDisposed = false;
15
- this._modelParts = new Map();
16
- }
17
- init() {
18
- return __awaiter(this, void 0, void 0, function* () {
19
- const moduleOverrides = {
20
- print: (s) => {
21
- console.log(s);
22
- },
23
- printErr: (e) => {
24
- console.error(e);
25
- }
26
- };
27
- this._module = yield BimDataProviderModule(moduleOverrides);
28
- });
29
- }
30
- openModelPart(id, buffer) {
31
- if (!buffer || this._isDisposed)
32
- return undefined;
33
- if (!id)
34
- id = "id_" + (0xffffffff * Math.random() >>> 0);
35
- const mp = new BimDataModelPart(id, this._module);
36
- mp.open(buffer);
37
- this._modelParts.set(id, mp);
38
- return mp;
39
- }
40
- closeModelPart(id) {
41
- // dispose model
42
- const mp = this._modelParts.get(id);
43
- mp === null || mp === void 0 ? void 0 : mp.dispose();
44
- this._modelParts.delete(id);
45
- }
46
- getModelPart(id) {
47
- return this._modelParts.get(id);
48
- }
49
- dispose() {
50
- // dispose module
51
- this._modelParts.forEach(p => {
52
- p.dispose();
53
- });
54
- this._modelParts.clear();
55
- this._isDisposed = true;
56
- this._module = undefined;
57
- }
58
- }
59
- //# sourceMappingURL=BimDataModel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BimDataModel.js","sourceRoot":"","sources":["../../../src/model/BimDataModel.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,qBAAqB,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAqB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAU5E,MAAM,OAAO,YAAY;IAMvB;QAFQ,gBAAW,GAAY,KAAK,CAAC;QAGnC,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC1D,CAAC;IAEK,IAAI;;YACR,MAAM,eAAe,GAA8B;gBACjD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;oBACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC;gBACD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,CAAC;aACF,CAAC;YAEF,IAAI,CAAC,OAAO,GAAG,MAAM,qBAAqB,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC;KAAA;IAED,aAAa,CAAC,EAAU,EAAE,MAAmB;QAC3C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;YAC7B,OAAO,SAAS,CAAC;QAEnB,IAAI,CAAC,EAAE;YACL,EAAE,GAAG,KAAK,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,cAAc,CAAC,EAAU;QACvB,iBAAiB;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,EAAE,CAAC;QACd,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,iBAAiB;QACjB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC3B,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;CACF"}
@@ -1,40 +0,0 @@
1
- import { IWasmBimModule } from "../wasm/pilot_bim_dataprovider.js";
2
- import { BimDataElement } from "./BimDataElement.js";
3
- import { BimDataElementPropertySet } from "./BimDataElementPropertySet.js";
4
- import { BimDataTessellation } from "./BimDataTessellation.js";
5
- export interface IBimDataModelPart {
6
- id: string;
7
- open(buffer: ArrayBuffer): void;
8
- update(buffer: ArrayBuffer): void;
9
- close(): void;
10
- dispose(): void;
11
- getAllTessellations(): Map<string, BimDataTessellation>;
12
- getTessellations(versionFrom: bigint, versionTo: bigint): Map<string, BimDataTessellation>;
13
- getAllElements(): BimDataElement[];
14
- getElements(versionFrom: bigint, versionTo: bigint): BimDataElement[];
15
- getElementsToCompare(versionFrom: bigint, versionTo: bigint): BimDataElement[];
16
- getElementProperties(elementId: string, version: bigint): BimDataElementPropertySet[];
17
- getAllVersions(): bigint[];
18
- getLatestVersion(): bigint;
19
- }
20
- export declare class BimDataModelPart implements IBimDataModelPart {
21
- readonly id: string;
22
- private _module;
23
- private _isOpen;
24
- private _isDisposed;
25
- constructor(id: string, module: IWasmBimModule);
26
- dispose(): void;
27
- open(buffer: ArrayBuffer): void;
28
- update(buffer: ArrayBuffer): void;
29
- close(): void;
30
- getAllTessellations(): Map<string, BimDataTessellation>;
31
- getTessellations(versionFrom: bigint, versionTo: bigint): Map<string, BimDataTessellation>;
32
- getAllElements(): BimDataElement[];
33
- getElements(versionFrom: bigint, versionTo: bigint): BimDataElement[];
34
- getElementsToCompare(versionFrom: bigint, versionTo: bigint): BimDataElement[];
35
- getElementProperties(elementId: string, version: bigint): BimDataElementPropertySet[];
36
- getAllVersions(): bigint[];
37
- getLatestVersion(): bigint;
38
- private get _path();
39
- private checkIsOpen;
40
- }
@@ -1,144 +0,0 @@
1
- import { BimDataConverter } from "../utils/ViewerTools.js";
2
- import { WasmTools } from "../utils/WasmTools.js";
3
- import { BimDataNodeState } from "./BimDataElement.js";
4
- import { BimNodeComparer } from "./BimNodeComparer.js";
5
- export class BimDataModelPart {
6
- constructor(id, module) {
7
- this.id = id;
8
- this._module = module;
9
- this._isOpen = false;
10
- this._isDisposed = false;
11
- }
12
- dispose() {
13
- this.close();
14
- this._isDisposed = true;
15
- }
16
- open(buffer) {
17
- if (this._isDisposed)
18
- return;
19
- const data = new Uint8Array(buffer);
20
- if (WasmTools.isFileExists(this._path, this._module)) {
21
- this._module.FS.writeFile(this._path, data);
22
- }
23
- else {
24
- this._module.FS.createDataFile("/", this.id, data, true, true, true);
25
- }
26
- this._isOpen = true;
27
- const databaseVersion = this._module.getDatabaseVersion(this.id);
28
- if (databaseVersion < 2) {
29
- this._module.auditDatabase(this.id);
30
- }
31
- }
32
- update(buffer) {
33
- if (this._isDisposed)
34
- return;
35
- const data = new Uint8Array(buffer);
36
- const tmpFileName = "tmp_" + (0xffffffff * Math.random() >>> 0);
37
- this._module.FS.createDataFile("/", tmpFileName, data, true, true, true);
38
- const targetVersion = this._module.getDatabaseVersion(this.id);
39
- const sourceVersion = this._module.getDatabaseVersion(tmpFileName);
40
- if (sourceVersion < 2) {
41
- this._module.auditDatabase(tmpFileName);
42
- }
43
- if (sourceVersion != targetVersion) {
44
- this._module.manualMergeDatabases(this.id, tmpFileName);
45
- }
46
- else {
47
- this._module.mergeDatabases(this.id, tmpFileName);
48
- }
49
- if (WasmTools.isFileExists(tmpFileName, this._module)) {
50
- this._module.FS.unlink(tmpFileName);
51
- }
52
- }
53
- close() {
54
- if (this._isDisposed)
55
- return;
56
- if (WasmTools.isFileExists(this._path, this._module)) {
57
- this._module.FS.unlink(this._path);
58
- }
59
- this._isOpen = false;
60
- }
61
- getAllTessellations() {
62
- this.checkIsOpen();
63
- const vts = this._module.getAllTessellations(this.id);
64
- return BimDataConverter.toBimDataTessellations(vts, true);
65
- }
66
- getTessellations(versionFrom, versionTo) {
67
- this.checkIsOpen();
68
- const vts = this._module.getTessellations(this.id, versionFrom, versionTo);
69
- return BimDataConverter.toBimDataTessellations(vts, true);
70
- }
71
- getAllElements() {
72
- this.checkIsOpen();
73
- const nds = this._module.getAllNodes(this.id);
74
- return BimDataConverter.toToBimDataElements(nds, true);
75
- }
76
- getElements(versionFrom, versionTo) {
77
- this.checkIsOpen();
78
- const nds = this._module.getNodes(this.id, versionFrom, versionTo);
79
- return BimDataConverter.toToBimDataElements(nds, true);
80
- }
81
- getElementsToCompare(versionFrom, versionTo) {
82
- this.checkIsOpen();
83
- const isReverse = versionTo < versionFrom;
84
- if (isReverse) {
85
- const tmp = versionFrom;
86
- versionFrom = versionTo;
87
- versionTo = tmp;
88
- }
89
- const pairsVector = this._module.getNodesToCompare(this.id, versionFrom, versionTo);
90
- const bimDataPairs = BimDataConverter.toToBimDataPairs(pairsVector, true);
91
- const result = new Array();
92
- for (let i = 0; i < bimDataPairs.length; i++) {
93
- const oldNode = isReverse ? bimDataPairs[i].newNode : bimDataPairs[i].oldNode;
94
- const newNode = isReverse ? bimDataPairs[i].oldNode : bimDataPairs[i].newNode;
95
- if (oldNode.objectState == BimDataNodeState.Removed && newNode.objectState == BimDataNodeState.Removed)
96
- continue;
97
- if (newNode.objectState == BimDataNodeState.Removed) {
98
- result.push(newNode);
99
- continue;
100
- }
101
- if (oldNode.objectState == BimDataNodeState.Removed) {
102
- newNode.objectState == BimDataNodeState.Added;
103
- result.push(newNode);
104
- continue;
105
- }
106
- if (versionFrom != versionTo) {
107
- const oldProps = this.getElementProperties(oldNode.guid, oldNode.revision);
108
- const newProps = this.getElementProperties(newNode.guid, newNode.revision);
109
- const nodeState = BimNodeComparer.compareNodes(oldNode, oldProps, newNode, newProps);
110
- newNode.objectState = nodeState;
111
- result.push(newNode);
112
- }
113
- }
114
- return result;
115
- }
116
- getElementProperties(elementId, version) {
117
- this.checkIsOpen();
118
- const set = this._module.getProperties(this.id, elementId, version);
119
- return BimDataConverter.toModelElementPropertySet(set, true);
120
- }
121
- getAllVersions() {
122
- this.checkIsOpen();
123
- const versions = new Array();
124
- const bimVersions = this._module.getAllVersions(this.id);
125
- for (let index = 0; index < bimVersions.size(); index++) {
126
- const version = bimVersions.get(index);
127
- versions.push(version);
128
- }
129
- bimVersions.delete();
130
- return versions;
131
- }
132
- getLatestVersion() {
133
- this.checkIsOpen();
134
- return this._module.getLatestVersion(this._path);
135
- }
136
- get _path() {
137
- return "/" + this.id;
138
- }
139
- checkIsOpen() {
140
- if (!this._isOpen)
141
- throw new Error("Model part is not open. Please call method open first.");
142
- }
143
- }
144
- //# sourceMappingURL=BimDataModelPart.js.map