{"version":3,"file":"vendor.openbim-components-78e1d2a3.9debb73b3f192bbf.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentIfcLoader/src/data-converter.js","webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentIfcLoader/src/geometry-reader.js","webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentIfcLoader/index.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport * as WEBIFC from \"web-ifc\";\r\nimport * as FRAGS from \"bim-fragment\";\r\nimport { mergeGeometries } from \"three/examples/jsm/utils/BufferGeometryUtils\";\r\nimport { IfcAlignmentData } from \"bim-fragment\";\r\nimport { IfcCategories } from \"../../../ifc/ifc-categories\";\r\nimport { IfcJsonExporter } from \"../../../ifc/IfcJsonExporter\";\r\nimport { SpatialStructure } from \"./spatial-structure\";\r\nimport { IfcFragmentSettings } from \"./ifc-fragment-settings\";\r\nimport { toCompositeID } from \"../../../utils\";\r\nimport { FragmentBoundingBox } from \"../../FragmentBoundingBox\";\r\nexport class DataConverter {\r\n constructor(components) {\r\n this.settings = new IfcFragmentSettings();\r\n this.categories = {};\r\n this._model = new FRAGS.FragmentsGroup();\r\n this._ifcCategories = new IfcCategories();\r\n this._fragmentKey = 0;\r\n this._keyFragmentMap = {};\r\n this._itemKeyMap = {};\r\n this._propertyExporter = new IfcJsonExporter();\r\n this._spatialTree = new SpatialStructure();\r\n this.components = components;\r\n }\r\n cleanUp() {\r\n this._fragmentKey = 0;\r\n this._spatialTree.cleanUp();\r\n this.categories = {};\r\n this._model = new FRAGS.FragmentsGroup();\r\n this._ifcCategories = new IfcCategories();\r\n this._propertyExporter = new IfcJsonExporter();\r\n this._keyFragmentMap = {};\r\n this._itemKeyMap = {};\r\n }\r\n saveIfcCategories(webIfc) {\r\n this.categories = this._ifcCategories.getAll(webIfc, 0);\r\n }\r\n async generate(webIfc, geometries, civilItems) {\r\n await this._spatialTree.setUp(webIfc);\r\n this.createAllFragments(geometries, civilItems);\r\n await this.saveModelData(webIfc);\r\n return this._model;\r\n }\r\n async saveModelData(webIfc) {\r\n const itemsData = this.getFragmentsGroupData();\r\n this._model.keyFragments = this._keyFragmentMap;\r\n this._model.data = itemsData;\r\n this._model.coordinationMatrix = this.getCoordinationMatrix(webIfc);\r\n this._model.properties = await this.getModelProperties(webIfc);\r\n this._model.uuid = this.getProjectID(webIfc) || this._model.uuid;\r\n this._model.ifcMetadata = this.getIfcMetadata(webIfc);\r\n this._model.boundingBox = await this.getBoundingBox();\r\n }\r\n async getBoundingBox() {\r\n const bbox = await this.components.tools.get(FragmentBoundingBox);\r\n bbox.reset();\r\n bbox.add(this._model);\r\n return bbox.get();\r\n }\r\n getIfcMetadata(webIfc) {\r\n const { FILE_NAME, FILE_DESCRIPTION } = WEBIFC;\r\n const name = this.getMetadataEntry(webIfc, FILE_NAME);\r\n const description = this.getMetadataEntry(webIfc, FILE_DESCRIPTION);\r\n const schema = webIfc.GetModelSchema(0) || \"IFC2X3\";\r\n const maxExpressID = webIfc.GetMaxExpressID(0);\r\n return { name, description, schema, maxExpressID };\r\n }\r\n getMetadataEntry(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 if (!subArg)\r\n continue;\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 getProjectID(webIfc) {\r\n const projectsIDs = webIfc.GetLineIDsWithType(0, WEBIFC.IFCPROJECT);\r\n const projectID = projectsIDs.get(0);\r\n const project = webIfc.GetLine(0, projectID);\r\n return project.GlobalId.value;\r\n }\r\n getCoordinationMatrix(webIfc) {\r\n const coordArray = webIfc.GetCoordinationMatrix(0);\r\n return new THREE.Matrix4().fromArray(coordArray);\r\n }\r\n async getModelProperties(webIfc) {\r\n if (!this.settings.includeProperties) {\r\n return {};\r\n }\r\n return new Promise((resolve) => {\r\n this._propertyExporter.onPropertiesSerialized.add((properties) => {\r\n resolve(properties);\r\n });\r\n this._propertyExporter.export(webIfc, 0);\r\n });\r\n }\r\n createAllFragments(geometries, civilItems) {\r\n const uniqueItems = {};\r\n const matrix = new THREE.Matrix4();\r\n const color = new THREE.Color();\r\n // Add alignments data\r\n if (civilItems.IfcAlignment) {\r\n const horizontalAlignments = new IfcAlignmentData();\r\n const verticalAlignments = new IfcAlignmentData();\r\n const realAlignments = new IfcAlignmentData();\r\n let countH = 0;\r\n let countV = 0;\r\n let countR = 0;\r\n const valuesH = [];\r\n const valuesV = [];\r\n const valuesR = [];\r\n for (const alignment of civilItems.IfcAlignment) {\r\n horizontalAlignments.alignmentIndex.push(countH);\r\n verticalAlignments.alignmentIndex.push(countV);\r\n if (alignment.horizontal) {\r\n for (const hAlignment of alignment.horizontal) {\r\n horizontalAlignments.curveIndex.push(countH);\r\n for (const point of hAlignment.points) {\r\n valuesH.push(point.x);\r\n valuesH.push(point.y);\r\n countH++;\r\n }\r\n }\r\n }\r\n if (alignment.vertical) {\r\n for (const vAlignment of alignment.vertical) {\r\n verticalAlignments.curveIndex.push(countV);\r\n for (const point of vAlignment.points) {\r\n valuesV.push(point.x);\r\n valuesV.push(point.y);\r\n countV++;\r\n }\r\n }\r\n }\r\n if (alignment.curve3D) {\r\n for (const rAlignment of alignment.curve3D) {\r\n realAlignments.curveIndex.push(countR);\r\n for (const point of rAlignment.points) {\r\n valuesR.push(point.x);\r\n valuesR.push(point.y);\r\n valuesR.push(point.z);\r\n countR++;\r\n }\r\n }\r\n }\r\n }\r\n horizontalAlignments.coordinates = new Float32Array(valuesH);\r\n verticalAlignments.coordinates = new Float32Array(valuesV);\r\n realAlignments.coordinates = new Float32Array(valuesR);\r\n this._model.ifcCivil = {\r\n horizontalAlignments,\r\n verticalAlignments,\r\n realAlignments,\r\n };\r\n }\r\n for (const id in geometries) {\r\n const { buffer, instances } = geometries[id];\r\n const transparent = instances[0].color.w !== 1;\r\n const opacity = transparent ? 0.4 : 1;\r\n const material = new THREE.MeshLambertMaterial({ transparent, opacity });\r\n // This prevents z-fighting for ifc spaces\r\n if (opacity !== 1) {\r\n material.depthWrite = false;\r\n material.polygonOffset = true;\r\n material.polygonOffsetFactor = 5;\r\n material.polygonOffsetUnits = 1;\r\n }\r\n if (instances.length === 1) {\r\n const instance = instances[0];\r\n const { x, y, z, w } = instance.color;\r\n const matID = `${x}-${y}-${z}-${w}`;\r\n if (!uniqueItems[matID]) {\r\n material.color = new THREE.Color().setRGB(x, y, z, \"srgb\");\r\n uniqueItems[matID] = { material, geometries: [], expressIDs: [] };\r\n }\r\n matrix.fromArray(instance.matrix);\r\n buffer.applyMatrix4(matrix);\r\n uniqueItems[matID].geometries.push(buffer);\r\n uniqueItems[matID].expressIDs.push(instance.expressID.toString());\r\n continue;\r\n }\r\n const fragment = new FRAGS.Fragment(buffer, material, instances.length);\r\n this._keyFragmentMap[this._fragmentKey] = fragment.id;\r\n const previousIDs = new Set();\r\n for (let i = 0; i < instances.length; i++) {\r\n const instance = instances[i];\r\n matrix.fromArray(instance.matrix);\r\n const { expressID } = instance;\r\n let instanceID = expressID.toString();\r\n let isComposite = false;\r\n if (!previousIDs.has(expressID)) {\r\n previousIDs.add(expressID);\r\n }\r\n else {\r\n if (!fragment.composites[expressID]) {\r\n fragment.composites[expressID] = 1;\r\n }\r\n const count = fragment.composites[expressID];\r\n instanceID = toCompositeID(expressID, count);\r\n isComposite = true;\r\n fragment.composites[expressID]++;\r\n }\r\n fragment.setInstance(i, {\r\n ids: [instanceID],\r\n transform: matrix,\r\n });\r\n const { x, y, z } = instance.color;\r\n color.setRGB(x, y, z, \"srgb\");\r\n fragment.mesh.setColorAt(i, color);\r\n if (!isComposite) {\r\n this.saveExpressID(expressID.toString());\r\n }\r\n }\r\n fragment.mesh.updateMatrix();\r\n this._model.items.push(fragment);\r\n this._model.add(fragment.mesh);\r\n this._fragmentKey++;\r\n }\r\n const transform = new THREE.Matrix4();\r\n for (const matID in uniqueItems) {\r\n const { material, geometries, expressIDs } = uniqueItems[matID];\r\n const geometriesByItem = {};\r\n for (let i = 0; i < expressIDs.length; i++) {\r\n const id = expressIDs[i];\r\n if (!geometriesByItem[id]) {\r\n geometriesByItem[id] = [];\r\n }\r\n geometriesByItem[id].push(geometries[i]);\r\n }\r\n const sortedGeometries = [];\r\n const sortedIDs = [];\r\n for (const id in geometriesByItem) {\r\n sortedIDs.push(id);\r\n const geometries = geometriesByItem[id];\r\n if (geometries.length) {\r\n const merged = mergeGeometries(geometries);\r\n sortedGeometries.push(merged);\r\n }\r\n else {\r\n sortedGeometries.push(geometries[0]);\r\n }\r\n for (const geometry of geometries) {\r\n geometry.dispose();\r\n }\r\n }\r\n const geometry = FRAGS.GeometryUtils.merge([sortedGeometries], true);\r\n const fragment = new FRAGS.Fragment(geometry, material, 1);\r\n this._keyFragmentMap[this._fragmentKey] = fragment.id;\r\n for (const id of sortedIDs) {\r\n this.saveExpressID(id);\r\n }\r\n this._fragmentKey++;\r\n fragment.setInstance(0, { ids: sortedIDs, transform });\r\n this._model.items.push(fragment);\r\n this._model.add(fragment.mesh);\r\n }\r\n }\r\n saveExpressID(expressID) {\r\n if (!this._itemKeyMap[expressID]) {\r\n this._itemKeyMap[expressID] = [];\r\n }\r\n this._itemKeyMap[expressID].push(this._fragmentKey);\r\n }\r\n getFragmentsGroupData() {\r\n const itemsData = {};\r\n for (const id in this._itemKeyMap) {\r\n const keys = [];\r\n const rels = [];\r\n const idNum = parseInt(id, 10);\r\n const level = this._spatialTree.itemsByFloor[idNum] || 0;\r\n const category = this.categories[idNum] || 0;\r\n rels.push(level, category);\r\n for (const key of this._itemKeyMap[id]) {\r\n keys.push(key);\r\n }\r\n itemsData[idNum] = [keys, rels];\r\n }\r\n return itemsData;\r\n }\r\n}\r\n//# sourceMappingURL=data-converter.js.map","import * as THREE from \"three\";\r\nexport class GeometryReader {\r\n constructor() {\r\n this.saveLocations = false;\r\n this.items = {};\r\n this.locations = {};\r\n this.CivilItems = {\r\n IfcAlignment: [],\r\n IfcCrossSection2D: [],\r\n IfcCrossSection3D: [],\r\n };\r\n }\r\n get webIfc() {\r\n if (!this._webIfc) {\r\n throw new Error(\"web-ifc not found!\");\r\n }\r\n return this._webIfc;\r\n }\r\n cleanUp() {\r\n this.items = {};\r\n this.locations = {};\r\n this._webIfc = null;\r\n }\r\n streamMesh(webifc, mesh, forceTransparent = false) {\r\n this._webIfc = webifc;\r\n const size = mesh.geometries.size();\r\n const totalTransform = new THREE.Vector3();\r\n const tempMatrix = new THREE.Matrix4();\r\n const tempVector = new THREE.Vector3();\r\n for (let i = 0; i < size; i++) {\r\n const geometry = mesh.geometries.get(i);\r\n const geometryID = geometry.geometryExpressID;\r\n if (this.saveLocations) {\r\n tempVector.set(0, 0, 0);\r\n tempMatrix.fromArray(geometry.flatTransformation);\r\n tempVector.applyMatrix4(tempMatrix);\r\n totalTransform.add(tempVector);\r\n }\r\n // Transparent geometries need to be separated\r\n const isColorTransparent = geometry.color.w !== 1;\r\n const isTransparent = isColorTransparent || forceTransparent;\r\n const prefix = isTransparent ? \"-\" : \"+\";\r\n const idWithTransparency = prefix + geometryID;\r\n if (forceTransparent)\r\n geometry.color.w = 0.1;\r\n if (!this.items[idWithTransparency]) {\r\n const buffer = this.newBufferGeometry(geometryID);\r\n if (!buffer)\r\n continue;\r\n this.items[idWithTransparency] = { buffer, instances: [] };\r\n }\r\n this.items[idWithTransparency].instances.push({\r\n color: { ...geometry.color },\r\n matrix: geometry.flatTransformation,\r\n expressID: mesh.expressID,\r\n });\r\n }\r\n if (this.saveLocations) {\r\n const { x, y, z } = totalTransform.divideScalar(size);\r\n this.locations[mesh.expressID] = [x, y, z];\r\n }\r\n }\r\n streamAlignment(webifc) {\r\n this.CivilItems.IfcAlignment = webifc.GetAllAlignments(0);\r\n }\r\n streamCrossSection(webifc) {\r\n this.CivilItems.IfcCrossSection2D = webifc.GetAllCrossSections2D(0);\r\n this.CivilItems.IfcCrossSection3D = webifc.GetAllCrossSections3D(0);\r\n }\r\n newBufferGeometry(geometryID) {\r\n const geometry = this.webIfc.GetGeometry(0, geometryID);\r\n const verts = this.getVertices(geometry);\r\n if (!verts.length)\r\n return null;\r\n const indices = this.getIndices(geometry);\r\n if (!indices.length)\r\n return null;\r\n const buffer = this.constructBuffer(verts, indices);\r\n // @ts-ignore\r\n geometry.delete();\r\n return buffer;\r\n }\r\n getIndices(geometryData) {\r\n const indices = this.webIfc.GetIndexArray(geometryData.GetIndexData(), geometryData.GetIndexDataSize());\r\n return indices;\r\n }\r\n getVertices(geometryData) {\r\n const verts = this.webIfc.GetVertexArray(geometryData.GetVertexData(), geometryData.GetVertexDataSize());\r\n return verts;\r\n }\r\n constructBuffer(vertexData, indexData) {\r\n const geometry = new THREE.BufferGeometry();\r\n const posFloats = new Float32Array(vertexData.length / 2);\r\n const normFloats = new Float32Array(vertexData.length / 2);\r\n for (let i = 0; i < vertexData.length; i += 6) {\r\n posFloats[i / 2] = vertexData[i];\r\n posFloats[i / 2 + 1] = vertexData[i + 1];\r\n posFloats[i / 2 + 2] = vertexData[i + 2];\r\n normFloats[i / 2] = vertexData[i + 3];\r\n normFloats[i / 2 + 1] = vertexData[i + 4];\r\n normFloats[i / 2 + 2] = vertexData[i + 5];\r\n }\r\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(posFloats, 3));\r\n geometry.setAttribute(\"normal\", new THREE.BufferAttribute(normFloats, 3));\r\n geometry.setIndex(new THREE.BufferAttribute(indexData, 1));\r\n return geometry;\r\n }\r\n}\r\n//# sourceMappingURL=geometry-reader.js.map","import * as WEBIFC from \"web-ifc\";\r\nimport { Event, Component, UIElement, } from \"../../base-types\";\r\nimport { FragmentManager } from \"../FragmentManager\";\r\nimport { DataConverter } from \"./src/data-converter\";\r\nimport { GeometryReader } from \"./src/geometry-reader\";\r\nimport { Button, ToastNotification } from \"../../ui\";\r\nimport { Components, ToolComponent } from \"../../core\";\r\nexport * from \"./src/types\";\r\n/**\r\n * Reads all the geometry of the IFC file and generates a set of\r\n * [fragments](https://github.com/ifcjs/fragment). It can also return the\r\n * properties as a JSON file, as well as other sets of information within\r\n * the IFC file.\r\n */\r\nexport class FragmentIfcLoader extends Component {\r\n constructor(components) {\r\n super(components);\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.enabled = true;\r\n this.uiElement = new UIElement();\r\n this.onIfcLoaded = new Event();\r\n this.config = {\r\n autoSetWasm: true,\r\n };\r\n this.onSetup = new Event();\r\n // For debugging purposes\r\n // isolatedItems = new Set();\r\n this.onLocationsSaved = new Event();\r\n this._webIfc = new WEBIFC.IfcAPI();\r\n this._geometry = new GeometryReader();\r\n this._converter = new DataConverter(components);\r\n this.components.tools.add(FragmentIfcLoader.uuid, this);\r\n if (components.uiEnabled) {\r\n this.setupUI();\r\n }\r\n }\r\n async autoSetWasm() {\r\n var _a;\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 (!((_a = \"web-ifc\" in componentsPackageJSON.peerDependencies) !== null && _a !== void 0 ? _a : {})) {\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 componentsWebIfcVersion = componentsPackageJSON.peerDependencies[\"web-ifc\"];\r\n const path = `https://unpkg.com/web-ifc@${componentsWebIfcVersion}/`;\r\n this.settings.wasm = {\r\n path,\r\n absolute: true,\r\n };\r\n }\r\n }\r\n async setup(config) {\r\n this.config = { ...this.config, ...config };\r\n if (this.config.autoSetWasm)\r\n await this.autoSetWasm();\r\n await this.onSetup.trigger();\r\n }\r\n get() {\r\n return this._webIfc;\r\n }\r\n get settings() {\r\n return this._converter.settings;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n this._geometry.cleanUp();\r\n this._converter.cleanUp();\r\n this.onIfcLoaded.reset();\r\n this.onLocationsSaved.reset();\r\n this.onSetup.reset();\r\n this.uiElement.dispose();\r\n this._webIfc = null;\r\n this._geometry = null;\r\n this._converter = null;\r\n await this.onDisposed.trigger(FragmentIfcLoader.uuid);\r\n this.onDisposed.reset();\r\n }\r\n /** Loads the IFC file and converts it to a set of fragments. */\r\n async load(data, name) {\r\n if (this.settings.saveLocations) {\r\n this._geometry.saveLocations = true;\r\n }\r\n const before = performance.now();\r\n await this.readIfcFile(data);\r\n await this.readAllGeometries();\r\n this._geometry.streamAlignment(this._webIfc);\r\n this._geometry.streamCrossSection(this._webIfc);\r\n const items = this._geometry.items;\r\n const civItems = this._geometry.CivilItems;\r\n const model = await this._converter.generate(this._webIfc, items, civItems);\r\n model.name = name;\r\n if (this.settings.saveLocations) {\r\n await this.onLocationsSaved.trigger(this._geometry.locations);\r\n }\r\n const fragments = this.components.tools.get(FragmentManager);\r\n if (this.settings.coordinate) {\r\n const isFirstModel = fragments.groups.length === 0;\r\n if (isFirstModel) {\r\n fragments.baseCoordinationModel = model.uuid;\r\n }\r\n else {\r\n fragments.coordinate([model]);\r\n }\r\n }\r\n this.cleanUp();\r\n fragments.groups.push(model);\r\n for (const fragment of model.items) {\r\n fragment.group = model;\r\n fragments.list[fragment.id] = fragment;\r\n this.components.meshes.push(fragment.mesh);\r\n }\r\n await this.onIfcLoaded.trigger(model);\r\n console.log(`Loading the IFC took ${performance.now() - before} ms!`);\r\n return model;\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, file.name);\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 } = this.settings.wasm;\r\n this._webIfc.SetWasmPath(path, absolute);\r\n await this._webIfc.Init();\r\n return this._webIfc.OpenModel(data, this.settings.webIfc);\r\n }\r\n async readAllGeometries() {\r\n this._converter.saveIfcCategories(this._webIfc);\r\n // Some categories (like IfcSpace) need to be created explicitly\r\n const optionals = [...this.settings.optionalCategories];\r\n // Force IFC space to be transparent\r\n if (optionals.includes(WEBIFC.IFCSPACE)) {\r\n const index = optionals.indexOf(WEBIFC.IFCSPACE);\r\n optionals.splice(index, 1);\r\n this._webIfc.StreamAllMeshesWithTypes(0, [WEBIFC.IFCSPACE], (mesh) => {\r\n if (this.isExcluded(mesh.expressID)) {\r\n return;\r\n }\r\n this._geometry.streamMesh(this._webIfc, mesh, true);\r\n });\r\n }\r\n // Load rest of optional categories (if any)\r\n if (optionals.length) {\r\n this._webIfc.StreamAllMeshesWithTypes(0, optionals, (mesh) => {\r\n if (this.isExcluded(mesh.expressID)) {\r\n return;\r\n }\r\n this._geometry.streamMesh(this._webIfc, mesh);\r\n });\r\n }\r\n // Load common categories\r\n this._webIfc.StreamAllMeshes(0, (mesh) => {\r\n if (this.isExcluded(mesh.expressID)) {\r\n return;\r\n }\r\n this._geometry.streamMesh(this._webIfc, mesh);\r\n });\r\n // Load civil items\r\n this._geometry.streamAlignment(this._webIfc);\r\n this._geometry.streamCrossSection(this._webIfc);\r\n }\r\n cleanIfcApi() {\r\n this._webIfc = null;\r\n this._webIfc = new WEBIFC.IfcAPI();\r\n }\r\n cleanUp() {\r\n this.cleanIfcApi();\r\n this._geometry.cleanUp();\r\n this._converter.cleanUp();\r\n }\r\n isExcluded(id) {\r\n const category = this._converter.categories[id];\r\n return this.settings.excludedCategories.has(category);\r\n }\r\n}\r\nFragmentIfcLoader.uuid = \"a659add7-1418-4771-a0d6-7d4d438e4624\";\r\nToolComponent.libraryUUIDs.add(FragmentIfcLoader.uuid);\r\n//# sourceMappingURL=index.js.map"],"names":["DataConverter","constructor","components","this","settings","categories","_model","_ifcCategories","_fragmentKey","_keyFragmentMap","_itemKeyMap","_propertyExporter","IfcJsonExporter","_spatialTree","cleanUp","saveIfcCategories","webIfc","getAll","async","geometries","civilItems","setUp","createAllFragments","saveModelData","itemsData","getFragmentsGroupData","keyFragments","data","coordinationMatrix","getCoordinationMatrix","properties","getModelProperties","uuid","getProjectID","ifcMetadata","getIfcMetadata","boundingBox","getBoundingBox","bbox","tools","get","FragmentBoundingBox","reset","add","FILE_NAME","FILE_DESCRIPTION","name","getMetadataEntry","description","schema","GetModelSchema","maxExpressID","GetMaxExpressID","type","descriptionData","GetHeaderLine","arg","arguments","Array","isArray","subArg","value","projectID","GetLineIDsWithType","GetLine","GlobalId","coordArray","GetCoordinationMatrix","fromArray","includeProperties","Promise","resolve","onPropertiesSerialized","export","uniqueItems","matrix","color","IfcAlignment","horizontalAlignments","verticalAlignments","realAlignments","countH","countV","countR","valuesH","valuesV","valuesR","alignment","alignmentIndex","push","horizontal","hAlignment","curveIndex","point","points","x","y","vertical","vAlignment","curve3D","rAlignment","z","coordinates","Float32Array","ifcCivil","id","buffer","instances","transparent","w","opacity","material","depthWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","length","instance","matID","setRGB","expressIDs","applyMatrix4","expressID","toString","fragment","previousIDs","Set","i","instanceID","isComposite","has","composites","count","setInstance","ids","transform","mesh","setColorAt","saveExpressID","updateMatrix","items","geometriesByItem","sortedGeometries","sortedIDs","merged","geometry","dispose","keys","rels","idNum","parseInt","level","itemsByFloor","category","key","GeometryReader","saveLocations","locations","CivilItems","IfcCrossSection2D","IfcCrossSection3D","_webIfc","Error","streamMesh","webifc","forceTransparent","size","totalTransform","tempMatrix","tempVector","geometryID","geometryExpressID","set","flatTransformation","idWithTransparency","newBufferGeometry","divideScalar","streamAlignment","GetAllAlignments","streamCrossSection","GetAllCrossSections2D","GetAllCrossSections3D","GetGeometry","verts","getVertices","indices","getIndices","constructBuffer","delete","geometryData","GetIndexArray","GetIndexData","GetIndexDataSize","GetVertexArray","GetVertexData","GetVertexDataSize","vertexData","indexData","posFloats","normFloats","setAttribute","setIndex","FragmentIfcLoader","super","onDisposed","enabled","uiElement","onIfcLoaded","config","autoSetWasm","onSetup","onLocationsSaved","_geometry","_converter","uiEnabled","setupUI","_a","componentsPackage","fetch","ok","console","warn","componentsPackageJSON","json","peerDependencies","path","wasm","absolute","trigger","before","performance","now","readIfcFile","readAllGeometries","civItems","model","generate","fragments","FragmentManager","coordinate","groups","baseCoordinationModel","group","list","meshes","log","main","materialIcon","tooltip","toast","message","onClick","fileOpener","document","createElement","accept","style","display","onchange","files","file","arrayBuffer","Uint8Array","load","scene","visible","updateWindow","remove","click","ui","SetWasmPath","Init","OpenModel","optionals","optionalCategories","includes","index","indexOf","splice","StreamAllMeshesWithTypes","isExcluded","StreamAllMeshes","cleanIfcApi","excludedCategories"],"sourceRoot":""}