From 03c70f422ba64ad024b54bc353029ce2264740b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Gonz=C3=A1lez=20Viegas?= Date: Thu, 29 Feb 2024 12:50:15 +0100 Subject: [PATCH] fix: various corrections --- package.json | 2 +- resources/openbim-components.js | 15 ++++++++++----- src/fragments/FragmentHighlighter/index.ts | 10 +++++----- src/fragments/FragmentIfcLoader/index.ts | 6 ++++++ .../src/ifc-fragment-settings.ts | 8 ++++++-- src/fragments/FragmentIfcStreamer/index.html | 18 ++++++++++++++++++ src/fragments/FragmentTree/index.html | 14 ++------------ src/ifc/IfcPropertiesManager/index.html | 14 +++----------- src/ifc/IfcPropertiesProcessor/index.html | 14 +++----------- 9 files changed, 54 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index 42b7ce665..821d91b7e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openbim-components", - "version": "1.4.5", + "version": "1.4.9", "main": "src/index.js", "author": "harry collin, antonio gonzalez viegas", "license": "MIT", diff --git a/resources/openbim-components.js b/resources/openbim-components.js index bc3d7eadf..ad39b785d 100644 --- a/resources/openbim-components.js +++ b/resources/openbim-components.js @@ -101522,6 +101522,11 @@ class FragmentIfcLoader extends Component { console.log(`Streaming the IFC took ${performance.now() - before} ms!`); const fragments = this.components.tools.get(FragmentManager); fragments.groups.push(group); + for (const frag of group.items) { + fragments.list[frag.id] = frag; + frag.mesh.uuid = frag.id; + frag.group = group; + } await this.onIfcLoaded.trigger(group); return group; } @@ -102107,16 +102112,16 @@ class FragmentHighlighter extends Component { if (removePrevious) { await this.clear(name); } - if (!this.selection[name][mesh.uuid]) { - this.selection[name][mesh.uuid] = new Set(); + if (!this.selection[name][mesh.fragment.id]) { + this.selection[name][mesh.fragment.id] = new Set(); } fragList.push(mesh.fragment); const itemID = mesh.fragment.getItemID(instanceID); if (itemID === null) { throw new Error("Item ID not found!"); } - this.selection[name][mesh.uuid].add(itemID); - await this.regenerate(name, mesh.uuid); + this.selection[name][mesh.fragment.id].add(itemID); + await this.regenerate(name, mesh.fragment.id); const group = mesh.fragment.group; if (group) { const data = group.data.get(itemID); @@ -102130,7 +102135,7 @@ class FragmentHighlighter extends Component { if (!fragID) { throw new Error("Fragment ID not found!"); } - if (fragID === mesh.uuid) + if (fragID === mesh.fragment.id) continue; const fragment = fragments.list[fragID]; fragList.push(fragment); diff --git a/src/fragments/FragmentHighlighter/index.ts b/src/fragments/FragmentHighlighter/index.ts index d5d1f1c92..abf29b51f 100644 --- a/src/fragments/FragmentHighlighter/index.ts +++ b/src/fragments/FragmentHighlighter/index.ts @@ -259,8 +259,8 @@ export class FragmentHighlighter await this.clear(name); } - if (!this.selection[name][mesh.uuid]) { - this.selection[name][mesh.uuid] = new Set(); + if (!this.selection[name][mesh.fragment.id]) { + this.selection[name][mesh.fragment.id] = new Set(); } fragList.push(mesh.fragment); @@ -270,8 +270,8 @@ export class FragmentHighlighter throw new Error("Item ID not found!"); } - this.selection[name][mesh.uuid].add(itemID); - await this.regenerate(name, mesh.uuid); + this.selection[name][mesh.fragment.id].add(itemID); + await this.regenerate(name, mesh.fragment.id); const group = mesh.fragment.group; if (group) { @@ -288,7 +288,7 @@ export class FragmentHighlighter throw new Error("Fragment ID not found!"); } - if (fragID === mesh.uuid) continue; + if (fragID === mesh.fragment.id) continue; const fragment = fragments.list[fragID]; fragList.push(fragment); diff --git a/src/fragments/FragmentIfcLoader/index.ts b/src/fragments/FragmentIfcLoader/index.ts index e076d43f6..835af65f2 100644 --- a/src/fragments/FragmentIfcLoader/index.ts +++ b/src/fragments/FragmentIfcLoader/index.ts @@ -92,6 +92,12 @@ export class FragmentIfcLoader const fragments = this.components.tools.get(FragmentManager); fragments.groups.push(group); + for (const frag of group.items) { + fragments.list[frag.id] = frag; + frag.mesh.uuid = frag.id; + frag.group = group; + } + await this.onIfcLoaded.trigger(group); return group; diff --git a/src/fragments/FragmentIfcLoader/src/ifc-fragment-settings.ts b/src/fragments/FragmentIfcLoader/src/ifc-fragment-settings.ts index 26e10455f..2d3ac6a0b 100644 --- a/src/fragments/FragmentIfcLoader/src/ifc-fragment-settings.ts +++ b/src/fragments/FragmentIfcLoader/src/ifc-fragment-settings.ts @@ -15,10 +15,14 @@ export class IfcFragmentSettings { coordinate = true; /** Path of the WASM for [web-ifc](https://github.com/ThatOpen/engine_web-ifc). */ - wasm = { + wasm: { + path: string; + absolute: boolean; + logLevel?: WEBIFC.LogLevel; + } = { path: "", absolute: false, - logLevel: WEBIFC.LogLevel.LOG_LEVEL_OFF as WEBIFC.LogLevel | undefined, + logLevel: WEBIFC.LogLevel.LOG_LEVEL_OFF, }; /** List of categories that won't be converted to fragments. */ diff --git a/src/fragments/FragmentIfcStreamer/index.html b/src/fragments/FragmentIfcStreamer/index.html index 6df8e6a85..ff3336a69 100644 --- a/src/fragments/FragmentIfcStreamer/index.html +++ b/src/fragments/FragmentIfcStreamer/index.html @@ -73,6 +73,24 @@ const customEffects = components.renderer.postproduction.customEffects; customEffects.excludedMeshes.push(grid.get()); + /*MD + ### 🔥🚀 Let's go BIG + ___ + Some BIM models are really heavy, so displaying them using normal methods is not possible. + Luckily for you, we have created a system that can load gigabytes of IFC even in modest + devices: BIM Tiles! 🧩 + + :::info Are you using a library/framework like React, Angular or vue? + + Then probably you have other mechanisms for getting a reference to the + HTML div element. However you do it, as long as you get a reference + in your code, you are good to go! + + ::: + + + */ + // GEOMETRY STREAMING - OK // const streamer = new OBC.FragmentIfcStreamConverter(components); diff --git a/src/fragments/FragmentTree/index.html b/src/fragments/FragmentTree/index.html index f54371eab..6dccfdcba 100644 --- a/src/fragments/FragmentTree/index.html +++ b/src/fragments/FragmentTree/index.html @@ -100,11 +100,6 @@ const buffer = new Uint8Array(data); const model = await fragments.load(buffer); - const file2 = await fetch("../../../resources/small2.frag"); - const data2 = await file2.arrayBuffer(); - const buffer2 = new Uint8Array(data2); - const model2 = await fragments.load(buffer2); - /*MD ### 🕹 Selection of Fragments @@ -163,9 +158,6 @@ const properties = await fetch("../../../resources/small.json"); model.setLocalProperties(await properties.json()); - const properties2 = await fetch("../../../resources/small2.json"); - model2.setLocalProperties(await properties2.json()); - /*MD Now that we have the properties, we will pass the model to classifier and use `classifier.byStorey()` which will group the Fragments according to Floors. @@ -174,11 +166,9 @@ */ - // classifier.byStorey(model); - // classifier.byEntity(model); + classifier.byStorey(model); + classifier.byEntity(model); - classifier.byStorey(model2); - classifier.byEntity(model2); /*MD diff --git a/src/ifc/IfcPropertiesManager/index.html b/src/ifc/IfcPropertiesManager/index.html index 4dff748ce..dca23f3f6 100644 --- a/src/ifc/IfcPropertiesManager/index.html +++ b/src/ifc/IfcPropertiesManager/index.html @@ -148,17 +148,9 @@ (selection) => { const fragmentID = Object.keys(selection)[0]; const expressID = [...selection[fragmentID]][0]; - let model - for (const group of fragments.groups) { - for(const [_key, value] of group.keyFragments) { - if(value === fragmentID) { - model = group; - break; - } - } - } - if(model) { - propsProcessor.renderProperties(model, expressID); + const fragment = fragments.list[fragmentID]; + if(fragment.group) { + propsProcessor.renderProperties(fragment.group, expressID); } } ); diff --git a/src/ifc/IfcPropertiesProcessor/index.html b/src/ifc/IfcPropertiesProcessor/index.html index 5d321ef77..5816dec05 100644 --- a/src/ifc/IfcPropertiesProcessor/index.html +++ b/src/ifc/IfcPropertiesProcessor/index.html @@ -117,17 +117,9 @@ (selection) => { const fragmentID = Object.keys(selection)[0]; const expressID = [...selection[fragmentID]][0]; - let model - for (const group of fragments.groups) { - for(const [_key, value] of group.keyFragments) { - if(value === fragmentID) { - model = group; - break; - } - } - } - if(model) { - propsProcessor.renderProperties(model, expressID); + const fragment = fragments.list[fragmentID]; + if(fragment.group) { + propsProcessor.renderProperties(fragment.group, expressID); } } );