diff --git a/web-ifc-three/src/IFC/BaseDefinitions.ts b/web-ifc-three/src/IFC/BaseDefinitions.ts index 69928d1..d28f057 100644 --- a/web-ifc-three/src/IFC/BaseDefinitions.ts +++ b/web-ifc-three/src/IFC/BaseDefinitions.ts @@ -222,4 +222,10 @@ export interface WebIfcAPI { GetFlatMesh(modelID: number, expressID: number): FlatMesh | Promise; SetWasmPath(path: string): void | Promise; + + /** + * Creates a map between element ExpressIDs and GlobalIDs. + * Each element has two entries, (ExpressID -> GlobalID) and (GlobalID -> ExpressID). + */ + CreateIfcGuidToExpressIdMapping(modelID: number): void | Promise; } diff --git a/web-ifc-three/src/IFC/web-workers/BaseDefinitions.ts b/web-ifc-three/src/IFC/web-workers/BaseDefinitions.ts index 5392390..2e6afd1 100644 --- a/web-ifc-three/src/IFC/web-workers/BaseDefinitions.ts +++ b/web-ifc-three/src/IFC/web-workers/BaseDefinitions.ts @@ -47,6 +47,7 @@ export enum WorkerActions { GetNameFromTypeCode = 'GetNameFromTypeCode', GetIfcEntityList = 'GetIfcEntityList', GetTypeCodeFromName ='GetTypeCodeFromName', + CreateIfcGuidToExpressIdMapping = 'CreateIfcGuidToExpressIdMapping', // Parser parse = 'parse', @@ -146,6 +147,7 @@ export interface WebIfcWorkerAPI extends BaseWorkerAPI { [WorkerActions.GetNameFromTypeCode]: IfcWorkerEventHandler; [WorkerActions.GetIfcEntityList]: IfcWorkerEventHandler; [WorkerActions.GetTypeCodeFromName]: IfcWorkerEventHandler; + [WorkerActions.CreateIfcGuidToExpressIdMapping]: IfcWorkerEventHandler; } export interface SerializedVector { @@ -171,4 +173,4 @@ export const ErrorRootStateNotAvailable = 'The root worker does not have any sta export const ErrorPropertiesNotAvailable = 'Error: Properties not available from web worker'; export const ErrorParserNotAvailable = 'Error: Parser not available from web worker'; export const ErrorBadJsonPath = 'Error: Model not available from web worker'; -export const ErrorBadJson = 'Error: The given Json could not be read as a JS object'; \ No newline at end of file +export const ErrorBadJson = 'Error: The given Json could not be read as a JS object'; diff --git a/web-ifc-three/src/IFC/web-workers/handlers/WebIfcHandler.ts b/web-ifc-three/src/IFC/web-workers/handlers/WebIfcHandler.ts index 41fe081..1032344 100644 --- a/web-ifc-three/src/IFC/web-workers/handlers/WebIfcHandler.ts +++ b/web-ifc-three/src/IFC/web-workers/handlers/WebIfcHandler.ts @@ -71,6 +71,10 @@ export class WebIfcHandler implements WebIfcAPI { return this.handler.request(this.API, WorkerActions.GetTypeCodeFromName, { typeName }); } + async CreateIfcGuidToExpressIdMapping(modelID: number): Promise { + return this.handler.request(this.API, WorkerActions.CreateIfcGuidToExpressIdMapping, { modelID }); + } + async WriteLine(modelID: number, lineObject: any): Promise { return this.handler.request(this.API, WorkerActions.WriteLine, { modelID, lineObject }); } @@ -165,4 +169,4 @@ export class WebIfcHandler implements WebIfcAPI { async SetWasmPath(path: string): Promise { return this.handler.request(this.API, WorkerActions.SetWasmPath, { path }); } -} \ No newline at end of file +} diff --git a/web-ifc-three/src/IFC/web-workers/workers/WebIfcWorker.ts b/web-ifc-three/src/IFC/web-workers/workers/WebIfcWorker.ts index a4362dc..cf7931b 100644 --- a/web-ifc-three/src/IFC/web-workers/workers/WebIfcWorker.ts +++ b/web-ifc-three/src/IFC/web-workers/workers/WebIfcWorker.ts @@ -191,8 +191,13 @@ export class WebIfcWorker implements WebIfcWorkerAPI { this.worker.post(data); } + CreateIfcGuidToExpressIdMapping(data: IfcEventData) { + this.webIFC.CreateIfcGuidToExpressIdMapping(data.args.modelID); + this.worker.post(data); + } + private nullifyWebIfc() { // @ts-ignore this.webIFC = null; } -} \ No newline at end of file +}