{"version":3,"file":"vendor.openbim-components-78e1d2a3.9ecef9bc0434424b.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentIfcLoader/index.js","webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentIfcLoader/src/civil-reader.js","webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentIfcLoader/src/ifc-metadata-reader.js","webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentIfcLoader/src/ifc-fragment-settings.js","webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentIfcLoader/src/units.js","webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentIfcLoader/src/spatial-structure.js"],"sourcesContent":["import * as WEBIFC from \"web-ifc\";\r\nimport * as THREE from \"three\";\r\nimport * as FRAGS from \"bim-fragment\";\r\nimport { SpatialStructure } from \"./src/spatial-structure\";\r\nimport { CivilReader, IfcFragmentSettings, IfcMetadataReader } from \"./src\";\r\nimport { Event, Component, UIElement } from \"../../base-types\";\r\nimport { FragmentManager } from \"../FragmentManager\";\r\nimport { Button, ToastNotification } from \"../../ui\";\r\nimport { Components, ToolComponent } from \"../../core\";\r\nimport { IfcJsonExporter } from \"../../ifc/IfcJsonExporter\";\r\nexport class FragmentIfcLoader extends Component {\r\n constructor(components) {\r\n super(components);\r\n this.onIfcLoaded = new Event();\r\n this.onIfcStartedLoading = new Event();\r\n this.onSetup = new Event();\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.settings = new IfcFragmentSettings();\r\n this.enabled = true;\r\n this.uiElement = new UIElement();\r\n this._material = new THREE.MeshLambertMaterial();\r\n this._spatialTree = new SpatialStructure();\r\n this._metaData = new IfcMetadataReader();\r\n this._fragmentInstances = new Map();\r\n this._webIfc = new WEBIFC.IfcAPI();\r\n this._civil = new CivilReader();\r\n this._propertyExporter = new IfcJsonExporter();\r\n this._visitedFragments = new Map();\r\n this._materialT = new THREE.MeshLambertMaterial({\r\n transparent: true,\r\n opacity: 0.5,\r\n });\r\n this.components.tools.add(FragmentIfcLoader.uuid, this);\r\n if (components.uiEnabled) {\r\n this.setupUI();\r\n }\r\n this.settings.excludedCategories.add(WEBIFC.IFCOPENINGELEMENT);\r\n }\r\n get() {\r\n return this._webIfc;\r\n }\r\n async dispose() {\r\n this.onIfcLoaded.reset();\r\n await this.uiElement.dispose();\r\n this._webIfc = null;\r\n await this.onDisposed.trigger(FragmentIfcLoader.uuid);\r\n this.onDisposed.reset();\r\n }\r\n async setup(config) {\r\n this.settings = { ...this.settings, ...config };\r\n if (this.settings.autoSetWasm) {\r\n await this.autoSetWasm();\r\n }\r\n await this.onSetup.trigger();\r\n }\r\n async load(data, coordinate = true) {\r\n const before = performance.now();\r\n await this.onIfcStartedLoading.trigger();\r\n await this.readIfcFile(data);\r\n const group = await this.getAllGeometries();\r\n const properties = await this._propertyExporter.export(this._webIfc, 0);\r\n group.setLocalProperties(properties);\r\n this.cleanUp();\r\n console.log(`Streaming the IFC took ${performance.now() - before} ms!`);\r\n const fragments = this.components.tools.get(FragmentManager);\r\n fragments.groups.push(group);\r\n for (const frag of group.items) {\r\n fragments.list[frag.id] = frag;\r\n frag.mesh.uuid = frag.id;\r\n frag.group = group;\r\n this.components.meshes.add(frag.mesh);\r\n }\r\n if (coordinate) {\r\n fragments.coordinate([group]);\r\n }\r\n await this.onIfcLoaded.trigger(group);\r\n return group;\r\n }\r\n setupUI() {\r\n const main = new Button(this.components);\r\n main.materialIcon = \"upload_file\";\r\n main.tooltip = \"Load IFC\";\r\n const toast = new ToastNotification(this.components, {\r\n message: \"IFC model successfully loaded!\",\r\n });\r\n main.onClick.add(() => {\r\n const fileOpener = document.createElement(\"input\");\r\n fileOpener.type = \"file\";\r\n fileOpener.accept = \".ifc\";\r\n fileOpener.style.display = \"none\";\r\n fileOpener.onchange = async () => {\r\n const fragments = this.components.tools.get(FragmentManager);\r\n if (fileOpener.files === null || fileOpener.files.length === 0)\r\n return;\r\n const file = fileOpener.files[0];\r\n const buffer = await file.arrayBuffer();\r\n const data = new Uint8Array(buffer);\r\n const model = await this.load(data);\r\n const scene = this.components.scene.get();\r\n scene.add(model);\r\n toast.visible = true;\r\n await fragments.updateWindow();\r\n fileOpener.remove();\r\n };\r\n fileOpener.click();\r\n });\r\n this.components.ui.add(toast);\r\n toast.visible = false;\r\n this.uiElement.set({ main, toast });\r\n }\r\n async readIfcFile(data) {\r\n const { path, absolute, logLevel } = this.settings.wasm;\r\n this._webIfc.SetWasmPath(path, absolute);\r\n await this._webIfc.Init();\r\n if (logLevel) {\r\n this._webIfc.SetLogLevel(logLevel);\r\n }\r\n return this._webIfc.OpenModel(data, this.settings.webIfc);\r\n }\r\n async getAllGeometries() {\r\n // Precompute the level and category to which each item belongs\r\n this._spatialTree.setUp(this._webIfc);\r\n const allIfcEntities = this._webIfc.GetIfcEntityList(0);\r\n const group = new FRAGS.FragmentsGroup();\r\n const { FILE_NAME, FILE_DESCRIPTION } = WEBIFC;\r\n group.ifcMetadata = {\r\n name: this._metaData.get(this._webIfc, FILE_NAME),\r\n description: this._metaData.get(this._webIfc, FILE_DESCRIPTION),\r\n schema: this._webIfc.GetModelSchema(0) || \"IFC2X3\",\r\n maxExpressID: this._webIfc.GetMaxExpressID(0),\r\n };\r\n const ids = [];\r\n for (const type of allIfcEntities) {\r\n if (!this._webIfc.IsIfcElement(type) && type !== WEBIFC.IFCSPACE) {\r\n continue;\r\n }\r\n if (this.settings.excludedCategories.has(type)) {\r\n continue;\r\n }\r\n const result = this._webIfc.GetLineIDsWithType(0, type);\r\n const size = result.size();\r\n for (let i = 0; i < size; i++) {\r\n const itemID = result.get(i);\r\n ids.push(itemID);\r\n const level = this._spatialTree.itemsByFloor[itemID] || 0;\r\n group.data.set(itemID, [[], [level, type]]);\r\n }\r\n }\r\n this._spatialTree.cleanUp();\r\n this._webIfc.StreamMeshes(0, ids, (mesh) => {\r\n this.getMesh(mesh, group);\r\n });\r\n for (const entry of this._visitedFragments) {\r\n const { index, fragment } = entry[1];\r\n group.keyFragments.set(index, fragment.id);\r\n }\r\n for (const fragment of group.items) {\r\n const fragmentData = this._fragmentInstances.get(fragment.id);\r\n if (!fragmentData) {\r\n throw new Error(\"Fragment not found!\");\r\n }\r\n const items = [];\r\n for (const [_geomID, item] of fragmentData) {\r\n items.push(item);\r\n }\r\n fragment.add(items);\r\n }\r\n const matrix = this._webIfc.GetCoordinationMatrix(0);\r\n group.coordinationMatrix.fromArray(matrix);\r\n group.civilData = this._civil.read(this._webIfc);\r\n return group;\r\n }\r\n cleanUp() {\r\n this._webIfc = null;\r\n this._webIfc = new WEBIFC.IfcAPI();\r\n this._visitedFragments.clear();\r\n this._fragmentInstances.clear();\r\n }\r\n getMesh(mesh, group) {\r\n const size = mesh.geometries.size();\r\n const id = mesh.expressID;\r\n for (let i = 0; i < size; i++) {\r\n const geometry = mesh.geometries.get(i);\r\n const { x, y, z, w } = geometry.color;\r\n const transparent = w !== 1;\r\n const { geometryExpressID } = geometry;\r\n const geometryID = `${geometryExpressID}-${transparent}`;\r\n // Create geometry if it doesn't exist\r\n if (!this._visitedFragments.has(geometryID)) {\r\n const bufferGeometry = this.getGeometry(this._webIfc, geometryExpressID);\r\n const material = transparent ? this._materialT : this._material;\r\n const fragment = new FRAGS.Fragment(bufferGeometry, material, 1);\r\n group.add(fragment.mesh);\r\n group.items.push(fragment);\r\n const index = this._visitedFragments.size;\r\n this._visitedFragments.set(geometryID, { index, fragment });\r\n }\r\n // Save this instance of this geometry\r\n const color = new THREE.Color().setRGB(x, y, z, \"srgb\");\r\n const transform = new THREE.Matrix4();\r\n transform.fromArray(geometry.flatTransformation);\r\n const fragmentData = this._visitedFragments.get(geometryID);\r\n if (fragmentData === undefined) {\r\n throw new Error(\"Error getting geometry data for streaming!\");\r\n }\r\n const data = group.data.get(id);\r\n if (!data) {\r\n throw new Error(\"Data not found!\");\r\n }\r\n data[0].push(fragmentData.index);\r\n const { fragment } = fragmentData;\r\n if (!this._fragmentInstances.has(fragment.id)) {\r\n this._fragmentInstances.set(fragment.id, new Map());\r\n }\r\n const instances = this._fragmentInstances.get(fragment.id);\r\n if (!instances) {\r\n throw new Error(\"Instances not found!\");\r\n }\r\n if (instances.has(id)) {\r\n // This item has more than one instance in this fragment\r\n const instance = instances.get(id);\r\n if (!instance) {\r\n throw new Error(\"Instance not found!\");\r\n }\r\n instance.transforms.push(transform);\r\n if (instance.colors) {\r\n instance.colors.push(color);\r\n }\r\n }\r\n else {\r\n instances.set(id, { id, transforms: [transform], colors: [color] });\r\n }\r\n }\r\n }\r\n getGeometry(webIfc, id) {\r\n const geometry = webIfc.GetGeometry(0, id);\r\n const index = webIfc.GetIndexArray(geometry.GetIndexData(), geometry.GetIndexDataSize());\r\n const vertexData = webIfc.GetVertexArray(geometry.GetVertexData(), geometry.GetVertexDataSize());\r\n const position = new Float32Array(vertexData.length / 2);\r\n const normal = new Float32Array(vertexData.length / 2);\r\n for (let i = 0; i < vertexData.length; i += 6) {\r\n position[i / 2] = vertexData[i];\r\n position[i / 2 + 1] = vertexData[i + 1];\r\n position[i / 2 + 2] = vertexData[i + 2];\r\n normal[i / 2] = vertexData[i + 3];\r\n normal[i / 2 + 1] = vertexData[i + 4];\r\n normal[i / 2 + 2] = vertexData[i + 5];\r\n }\r\n const bufferGeometry = new THREE.BufferGeometry();\r\n const posAttr = new THREE.BufferAttribute(position, 3);\r\n const norAttr = new THREE.BufferAttribute(normal, 3);\r\n bufferGeometry.setAttribute(\"position\", posAttr);\r\n bufferGeometry.setAttribute(\"normal\", norAttr);\r\n bufferGeometry.setIndex(Array.from(index));\r\n geometry.delete();\r\n return bufferGeometry;\r\n }\r\n async autoSetWasm() {\r\n const componentsPackage = await fetch(`https://unpkg.com/openbim-components@${Components.release}/package.json`);\r\n if (!componentsPackage.ok) {\r\n console.warn(\"Couldn't get openbim-components package.json. Set wasm settings manually.\");\r\n return;\r\n }\r\n const componentsPackageJSON = await componentsPackage.json();\r\n if (!(\"web-ifc\" in componentsPackageJSON.peerDependencies ?? {})) {\r\n console.warn(\"Couldn't get web-ifc from peer dependencies in openbim-components. Set wasm settings manually.\");\r\n }\r\n else {\r\n const webIfcVer = componentsPackageJSON.peerDependencies[\"web-ifc\"];\r\n this.settings.wasm.path = `https://unpkg.com/web-ifc@${webIfcVer}/`;\r\n this.settings.wasm.absolute = true;\r\n }\r\n }\r\n}\r\nFragmentIfcLoader.uuid = \"a659add7-1418-4771-a0d6-7d4d438e4624\";\r\nToolComponent.libraryUUIDs.add(FragmentIfcLoader.uuid);\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport * as FRAGS from \"bim-fragment\";\r\nimport { Alignment } from \"bim-fragment\";\r\nexport class CivilReader {\r\n constructor() {\r\n this.defLineMat = new THREE.LineBasicMaterial({ color: 0xffffff });\r\n }\r\n read(webIfc) {\r\n const IfcAlignment = webIfc.GetAllAlignments(0);\r\n const IfcCrossSection2D = webIfc.GetAllCrossSections2D(0);\r\n const IfcCrossSection3D = webIfc.GetAllCrossSections3D(0);\r\n const civilItems = {\r\n IfcAlignment,\r\n IfcCrossSection2D,\r\n IfcCrossSection3D,\r\n };\r\n return this.get(civilItems);\r\n }\r\n get(civilItems) {\r\n if (civilItems.IfcAlignment) {\r\n const alignments = new Map();\r\n for (const ifcAlign of civilItems.IfcAlignment) {\r\n const alignment = new Alignment();\r\n alignment.absolute = this.getCurves(ifcAlign.curve3D, alignment);\r\n alignment.horizontal = this.getCurves(ifcAlign.horizontal, alignment);\r\n alignment.vertical = this.getCurves(ifcAlign.vertical, alignment);\r\n alignments.set(alignments.size, alignment);\r\n }\r\n return { alignments, coordinationMatrix: new THREE.Matrix4() };\r\n }\r\n return undefined;\r\n }\r\n getCurves(ifcAlignData, alignment) {\r\n const curves = [];\r\n let index = 0;\r\n for (const curve of ifcAlignData) {\r\n const data = {};\r\n if (curve.data) {\r\n for (const entry of curve.data) {\r\n const [key, value] = entry.split(\": \");\r\n const numValue = parseFloat(value);\r\n data[key] = numValue || value;\r\n }\r\n }\r\n const { points } = curve;\r\n const array = new Float32Array(points.length * 3);\r\n for (let i = 0; i < points.length; i++) {\r\n const { x, y, z } = points[i];\r\n array[i * 3] = x;\r\n array[i * 3 + 1] = y;\r\n array[i * 3 + 2] = z || 0;\r\n }\r\n const attr = new THREE.BufferAttribute(array, 3);\r\n const geometry = new THREE.EdgesGeometry();\r\n geometry.setAttribute(\"position\", attr);\r\n const mesh = new FRAGS.CurveMesh(index, data, alignment, geometry, this.defLineMat);\r\n curves.push(mesh.curve);\r\n index++;\r\n }\r\n return curves;\r\n }\r\n}\r\n//# sourceMappingURL=civil-reader.js.map","export class IfcMetadataReader {\r\n get(webIfc, type) {\r\n let description = \"\";\r\n const descriptionData = webIfc.GetHeaderLine(0, type) || \"\";\r\n if (!descriptionData)\r\n return description;\r\n for (const arg of descriptionData.arguments) {\r\n if (arg === null || arg === undefined) {\r\n continue;\r\n }\r\n if (Array.isArray(arg)) {\r\n for (const subArg of arg) {\r\n description += `${subArg.value}|`;\r\n }\r\n }\r\n else {\r\n description += `${arg.value}|`;\r\n }\r\n }\r\n return description;\r\n }\r\n}\r\n//# sourceMappingURL=ifc-metadata-reader.js.map","import * as WEBIFC from \"web-ifc\";\r\n/** Configuration of the IFC-fragment conversion. */\r\nexport class IfcFragmentSettings {\r\n constructor() {\r\n /** Whether to extract the IFC properties into a JSON. */\r\n this.includeProperties = true;\r\n /**\r\n * Generate the geometry for categories that are not included by default,\r\n * like IFCSPACE.\r\n */\r\n this.optionalCategories = [WEBIFC.IFCSPACE];\r\n /** Whether to use the coordination data coming from the IFC files. */\r\n this.coordinate = true;\r\n /** Path of the WASM for [web-ifc](https://github.com/ThatOpen/engine_web-ifc). */\r\n this.wasm = {\r\n path: \"\",\r\n absolute: false,\r\n logLevel: WEBIFC.LogLevel.LOG_LEVEL_OFF,\r\n };\r\n /** List of categories that won't be converted to fragments. */\r\n this.excludedCategories = new Set();\r\n /** Whether to save the absolute location of all IFC items. */\r\n this.saveLocations = false;\r\n /** Loader settings for [web-ifc](https://github.com/ThatOpen/engine_web-ifc). */\r\n this.webIfc = {\r\n COORDINATE_TO_ORIGIN: true,\r\n OPTIMIZE_PROFILES: true,\r\n };\r\n this.autoSetWasm = true;\r\n this.customLocateFileHandler = null;\r\n }\r\n}\r\n//# sourceMappingURL=ifc-fragment-settings.js.map","import * as WEBIFC from \"web-ifc\";\r\nimport * as THREE from \"three\";\r\nexport class Units {\r\n constructor() {\r\n this.factor = 1;\r\n this.complement = 1;\r\n }\r\n apply(matrix) {\r\n const scale = this.getScaleMatrix();\r\n const result = scale.multiply(matrix);\r\n matrix.copy(result);\r\n }\r\n setUp(webIfc) {\r\n this.factor = 1;\r\n const length = this.getLengthUnits(webIfc);\r\n if (!length) {\r\n return;\r\n }\r\n const isLengthNull = length === undefined || length === null;\r\n const isValueNull = length.Name === undefined || length.Name === null;\r\n if (isLengthNull || isValueNull) {\r\n return;\r\n }\r\n if (length.Name.value === \"FOOT\") {\r\n this.factor = 0.3048;\r\n }\r\n else if (length.Prefix?.value === \"MILLI\") {\r\n this.complement = 0.001;\r\n }\r\n }\r\n getLengthUnits(webIfc) {\r\n try {\r\n const allUnitsAssigns = webIfc.GetLineIDsWithType(0, WEBIFC.IFCUNITASSIGNMENT);\r\n const unitsAssign = allUnitsAssigns.get(0);\r\n const unitsAssignProps = webIfc.GetLine(0, unitsAssign);\r\n for (const units of unitsAssignProps.Units) {\r\n if (!units || units.value === null || units.value === undefined) {\r\n continue;\r\n }\r\n const unitsProps = webIfc.GetLine(0, units.value);\r\n if (unitsProps.UnitType && unitsProps.UnitType.value === \"LENGTHUNIT\") {\r\n return unitsProps;\r\n }\r\n }\r\n return null;\r\n }\r\n catch (e) {\r\n console.log(\"Could not get units\");\r\n return null;\r\n }\r\n }\r\n getScaleMatrix() {\r\n const f = this.factor;\r\n // prettier-ignore\r\n return new THREE.Matrix4().fromArray([\r\n f, 0, 0, 0,\r\n 0, f, 0, 0,\r\n 0, 0, f, 0,\r\n 0, 0, 0, 1,\r\n ]);\r\n }\r\n}\r\n//# sourceMappingURL=units.js.map","import * as WEBIFC from \"web-ifc\";\r\nimport { Units } from \"./units\";\r\nexport class SpatialStructure {\r\n constructor() {\r\n this.itemsByFloor = {};\r\n this._units = new Units();\r\n }\r\n // TODO: Maybe make this more flexible so that it also support more exotic spatial structures?\r\n setUp(webIfc) {\r\n this._units.setUp(webIfc);\r\n this.cleanUp();\r\n try {\r\n const spatialRels = webIfc.GetLineIDsWithType(0, WEBIFC.IFCRELCONTAINEDINSPATIALSTRUCTURE);\r\n const allRooms = new Set();\r\n const rooms = webIfc.GetLineIDsWithType(0, WEBIFC.IFCSPACE);\r\n for (let i = 0; i < rooms.size(); i++) {\r\n allRooms.add(rooms.get(i));\r\n }\r\n // First add rooms (if any) to floors\r\n const aggregates = webIfc.GetLineIDsWithType(0, WEBIFC.IFCRELAGGREGATES);\r\n const aggregatesSize = aggregates.size();\r\n for (let i = 0; i < aggregatesSize; i++) {\r\n const id = aggregates.get(i);\r\n const properties = webIfc.GetLine(0, id);\r\n if (!properties ||\r\n !properties.RelatingObject ||\r\n !properties.RelatedObjects) {\r\n continue;\r\n }\r\n const parentID = properties.RelatingObject.value;\r\n const childsIDs = properties.RelatedObjects;\r\n for (const child of childsIDs) {\r\n const childID = child.value;\r\n if (allRooms.has(childID)) {\r\n this.itemsByFloor[childID] = parentID;\r\n }\r\n }\r\n }\r\n // Now add items contained in floors and rooms\r\n // If items contained in room, look for the floor where that room is and assign it to it\r\n const itemsContainedInRooms = {};\r\n const spatialRelsSize = spatialRels.size();\r\n for (let i = 0; i < spatialRelsSize; i++) {\r\n const id = spatialRels.get(i);\r\n const properties = webIfc.GetLine(0, id);\r\n if (!properties ||\r\n !properties.RelatingStructure ||\r\n !properties.RelatedElements) {\r\n continue;\r\n }\r\n const structureID = properties.RelatingStructure.value;\r\n const relatedItems = properties.RelatedElements;\r\n if (allRooms.has(structureID)) {\r\n for (const related of relatedItems) {\r\n if (!itemsContainedInRooms[structureID]) {\r\n itemsContainedInRooms[structureID] = [];\r\n }\r\n const id = related.value;\r\n itemsContainedInRooms[structureID].push(id);\r\n }\r\n }\r\n else {\r\n for (const related of relatedItems) {\r\n const id = related.value;\r\n this.itemsByFloor[id] = structureID;\r\n }\r\n }\r\n }\r\n for (const roomID in itemsContainedInRooms) {\r\n const roomFloor = this.itemsByFloor[roomID];\r\n if (roomFloor !== undefined) {\r\n const items = itemsContainedInRooms[roomID];\r\n for (const item of items) {\r\n this.itemsByFloor[item] = roomFloor;\r\n }\r\n }\r\n }\r\n // Finally, add nested items (e.g. elements of curtain walls)\r\n for (let i = 0; i < aggregatesSize; i++) {\r\n const id = aggregates.get(i);\r\n const properties = webIfc.GetLine(0, id);\r\n if (!properties ||\r\n !properties.RelatingObject ||\r\n !properties.RelatedObjects) {\r\n continue;\r\n }\r\n const parentID = properties.RelatingObject.value;\r\n const childsIDs = properties.RelatedObjects;\r\n for (const child of childsIDs) {\r\n const childID = child.value;\r\n const parentStructure = this.itemsByFloor[parentID];\r\n if (parentStructure !== undefined) {\r\n this.itemsByFloor[childID] = parentStructure;\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.log(\"Could not get floors.\");\r\n }\r\n }\r\n cleanUp() {\r\n this.itemsByFloor = {};\r\n }\r\n}\r\n//# sourceMappingURL=spatial-structure.js.map"],"names":["FragmentIfcLoader","constructor","components","super","this","onIfcLoaded","onIfcStartedLoading","onSetup","onDisposed","settings","enabled","uiElement","_material","_spatialTree","_metaData","_fragmentInstances","Map","_webIfc","_civil","_propertyExporter","_visitedFragments","_materialT","transparent","opacity","tools","add","uuid","uiEnabled","setupUI","excludedCategories","get","dispose","reset","trigger","setup","config","autoSetWasm","load","data","coordinate","before","performance","now","readIfcFile","group","getAllGeometries","properties","export","setLocalProperties","cleanUp","console","log","fragments","groups","push","frag","items","list","id","mesh","meshes","main","materialIcon","tooltip","toast","message","onClick","fileOpener","document","createElement","type","accept","style","display","onchange","async","files","length","file","buffer","arrayBuffer","Uint8Array","model","scene","visible","updateWindow","remove","click","ui","set","path","absolute","logLevel","wasm","SetWasmPath","Init","SetLogLevel","OpenModel","webIfc","setUp","allIfcEntities","GetIfcEntityList","FILE_NAME","FILE_DESCRIPTION","ifcMetadata","name","description","schema","GetModelSchema","maxExpressID","GetMaxExpressID","ids","IsIfcElement","has","result","GetLineIDsWithType","size","i","itemID","level","itemsByFloor","StreamMeshes","getMesh","entry","index","fragment","keyFragments","fragmentData","Error","_geomID","item","matrix","GetCoordinationMatrix","coordinationMatrix","fromArray","civilData","read","clear","geometries","expressID","geometry","x","y","z","w","color","geometryExpressID","geometryID","bufferGeometry","getGeometry","material","setRGB","transform","flatTransformation","undefined","instances","instance","transforms","colors","GetGeometry","GetIndexArray","GetIndexData","GetIndexDataSize","vertexData","GetVertexArray","GetVertexData","GetVertexDataSize","position","Float32Array","normal","posAttr","norAttr","setAttribute","setIndex","Array","from","delete","componentsPackage","fetch","release","ok","warn","componentsPackageJSON","json","peerDependencies","webIfcVer","libraryUUIDs","CivilReader","defLineMat","civilItems","IfcAlignment","GetAllAlignments","IfcCrossSection2D","GetAllCrossSections2D","IfcCrossSection3D","GetAllCrossSections3D","alignments","ifcAlign","alignment","getCurves","curve3D","horizontal","vertical","ifcAlignData","curves","curve","key","value","split","numValue","parseFloat","points","array","attr","IfcMetadataReader","descriptionData","GetHeaderLine","arg","arguments","isArray","subArg","IfcFragmentSettings","includeProperties","optionalCategories","LOG_LEVEL_OFF","Set","saveLocations","COORDINATE_TO_ORIGIN","OPTIMIZE_PROFILES","customLocateFileHandler","Units","factor","complement","apply","getScaleMatrix","multiply","copy","getLengthUnits","isLengthNull","isValueNull","Name","Prefix","unitsAssign","unitsAssignProps","GetLine","units","unitsProps","UnitType","e","f","SpatialStructure","_units","spatialRels","allRooms","rooms","aggregates","aggregatesSize","RelatingObject","RelatedObjects","parentID","childsIDs","child","childID","itemsContainedInRooms","spatialRelsSize","RelatingStructure","RelatedElements","structureID","relatedItems","related","roomID","roomFloor","parentStructure"],"sourceRoot":""}