{"version":3,"file":"vendor.openbim-components-29b6b19b.cad6b3b166bc7181.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentBoundingBox/index.js","webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentClassifier/index.js","webpack://client-app/./node_modules/openbim-components/src/fragments/FragmentClipStyler/index.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport { Component, Event } from \"../../base-types\";\r\nimport { Disposer } from \"../../core/Disposer\";\r\nimport { ToolComponent } from \"../../core/ToolsComponent\";\r\n/**\r\n * A simple implementation of bounding box that works for fragments. The resulting bbox is not 100% precise, but\r\n * it's fast, and should suffice for general use cases such as camera zooming or general boundary determination.\r\n */\r\nexport class FragmentBoundingBox extends Component {\r\n constructor(components) {\r\n super(components);\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this._meshes = [];\r\n this.components.tools.add(FragmentBoundingBox.uuid, this);\r\n this._absoluteMin = FragmentBoundingBox.newBound(true);\r\n this._absoluteMax = FragmentBoundingBox.newBound(false);\r\n }\r\n static getDimensions(bbox) {\r\n const { min, max } = bbox;\r\n const width = Math.abs(max.x - min.x);\r\n const height = Math.abs(max.y - min.y);\r\n const depth = Math.abs(max.z - min.z);\r\n const center = new THREE.Vector3();\r\n center.subVectors(max, min).divideScalar(2).add(min);\r\n return { width, height, depth, center };\r\n }\r\n static newBound(positive) {\r\n const factor = positive ? 1 : -1;\r\n return new THREE.Vector3(factor * Number.MAX_VALUE, factor * Number.MAX_VALUE, factor * Number.MAX_VALUE);\r\n }\r\n static getBounds(points, min, max) {\r\n const maxPoint = max || this.newBound(false);\r\n const minPoint = min || this.newBound(true);\r\n for (const point of points) {\r\n if (point.x < minPoint.x)\r\n minPoint.x = point.x;\r\n if (point.y < minPoint.y)\r\n minPoint.y = point.y;\r\n if (point.z < minPoint.z)\r\n minPoint.z = point.z;\r\n if (point.x > maxPoint.x)\r\n maxPoint.x = point.x;\r\n if (point.y > maxPoint.y)\r\n maxPoint.y = point.y;\r\n if (point.z > maxPoint.z)\r\n maxPoint.z = point.z;\r\n }\r\n return new THREE.Box3(min, max);\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n const disposer = this.components.tools.get(Disposer);\r\n for (const mesh of this._meshes) {\r\n disposer.destroy(mesh);\r\n }\r\n this._meshes = [];\r\n await this.onDisposed.trigger(FragmentBoundingBox.uuid);\r\n this.onDisposed.reset();\r\n }\r\n get() {\r\n const min = this._absoluteMin.clone();\r\n const max = this._absoluteMax.clone();\r\n return new THREE.Box3(min, max);\r\n }\r\n getSphere() {\r\n const min = this._absoluteMin.clone();\r\n const max = this._absoluteMax.clone();\r\n const dx = Math.abs((max.x - min.x) / 2);\r\n const dy = Math.abs((max.y - min.y) / 2);\r\n const dz = Math.abs((max.z - min.z) / 2);\r\n const center = new THREE.Vector3(min.x + dx, min.y + dy, min.z + dz);\r\n const radius = center.distanceTo(min);\r\n return new THREE.Sphere(center, radius);\r\n }\r\n getMesh() {\r\n const bbox = new THREE.Box3(this._absoluteMin, this._absoluteMax);\r\n const dimensions = FragmentBoundingBox.getDimensions(bbox);\r\n const { width, height, depth, center } = dimensions;\r\n const box = new THREE.BoxGeometry(width, height, depth);\r\n const mesh = new THREE.Mesh(box);\r\n this._meshes.push(mesh);\r\n mesh.position.copy(center);\r\n return mesh;\r\n }\r\n reset() {\r\n this._absoluteMin = FragmentBoundingBox.newBound(true);\r\n this._absoluteMax = FragmentBoundingBox.newBound(false);\r\n }\r\n add(group) {\r\n for (const frag of group.items) {\r\n this.addMesh(frag.mesh);\r\n }\r\n }\r\n addMesh(mesh) {\r\n if (!mesh.geometry.index) {\r\n return;\r\n }\r\n const bbox = FragmentBoundingBox.getFragmentBounds(mesh);\r\n mesh.updateMatrixWorld();\r\n const meshTransform = mesh.matrixWorld;\r\n const instanceTransform = new THREE.Matrix4();\r\n const isInstanced = mesh instanceof THREE.InstancedMesh;\r\n const count = isInstanced ? mesh.count : 1;\r\n for (let i = 0; i < count; i++) {\r\n const min = bbox.min.clone();\r\n const max = bbox.max.clone();\r\n if (isInstanced) {\r\n mesh.getMatrixAt(i, instanceTransform);\r\n min.applyMatrix4(instanceTransform);\r\n max.applyMatrix4(instanceTransform);\r\n }\r\n min.applyMatrix4(meshTransform);\r\n max.applyMatrix4(meshTransform);\r\n if (min.x < this._absoluteMin.x)\r\n this._absoluteMin.x = min.x;\r\n if (min.y < this._absoluteMin.y)\r\n this._absoluteMin.y = min.y;\r\n if (min.z < this._absoluteMin.z)\r\n this._absoluteMin.z = min.z;\r\n if (min.x > this._absoluteMax.x)\r\n this._absoluteMax.x = min.x;\r\n if (min.y > this._absoluteMax.y)\r\n this._absoluteMax.y = min.y;\r\n if (min.z > this._absoluteMax.z)\r\n this._absoluteMax.z = min.z;\r\n if (max.x > this._absoluteMax.x)\r\n this._absoluteMax.x = max.x;\r\n if (max.y > this._absoluteMax.y)\r\n this._absoluteMax.y = max.y;\r\n if (max.z > this._absoluteMax.z)\r\n this._absoluteMax.z = max.z;\r\n if (max.x < this._absoluteMin.x)\r\n this._absoluteMin.x = max.x;\r\n if (max.y < this._absoluteMin.y)\r\n this._absoluteMin.y = max.y;\r\n if (max.z < this._absoluteMin.z)\r\n this._absoluteMin.z = max.z;\r\n }\r\n }\r\n static getFragmentBounds(mesh) {\r\n const position = mesh.geometry.attributes.position;\r\n const maxNum = Number.MAX_VALUE;\r\n const minNum = -maxNum;\r\n const min = new THREE.Vector3(maxNum, maxNum, maxNum);\r\n const max = new THREE.Vector3(minNum, minNum, minNum);\r\n if (!mesh.geometry.index) {\r\n throw new Error(\"Geometry must be indexed!\");\r\n }\r\n const indices = Array.from(mesh.geometry.index.array);\r\n for (let i = 0; i < indices.length; i++) {\r\n if (i % 3 === 0) {\r\n if (indices[i] === 0 && indices[i + 1] === 0 && indices[i + 2] === 0) {\r\n i += 2;\r\n continue;\r\n }\r\n }\r\n const index = indices[i];\r\n const x = position.getX(index);\r\n const y = position.getY(index);\r\n const z = position.getZ(index);\r\n if (x < min.x)\r\n min.x = x;\r\n if (y < min.y)\r\n min.y = y;\r\n if (z < min.z)\r\n min.z = z;\r\n if (x > max.x)\r\n max.x = x;\r\n if (y > max.y)\r\n max.y = y;\r\n if (z > max.z)\r\n max.z = z;\r\n }\r\n return new THREE.Box3(min, max);\r\n }\r\n}\r\nFragmentBoundingBox.uuid = \"d1444724-dba6-4cdd-a0c7-68ee1450d166\";\r\nToolComponent.libraryUUIDs.add(FragmentBoundingBox.uuid);\r\n//# sourceMappingURL=index.js.map","import { Component, Event } from \"../../base-types\";\r\nimport { IfcCategoryMap, IfcPropertiesUtils } from \"../../ifc\";\r\nimport { ToolComponent } from \"../../core\";\r\nimport { FragmentManager } from \"../FragmentManager\";\r\nexport class FragmentClassifier extends Component {\r\n constructor(components) {\r\n super(components);\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n this._groupSystems = {};\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.onFragmentsDisposed = (data) => {\r\n const { groupID, fragmentIDs } = data;\r\n for (const systemName in this._groupSystems) {\r\n const system = this._groupSystems[systemName];\r\n const groupNames = Object.keys(system);\r\n if (groupNames.includes(groupID)) {\r\n delete system[groupID];\r\n if (Object.values(system).length === 0) {\r\n delete this._groupSystems[systemName];\r\n }\r\n }\r\n else {\r\n for (const groupName of groupNames) {\r\n const group = system[groupName];\r\n for (const fragmentID of fragmentIDs) {\r\n delete group[fragmentID];\r\n }\r\n if (Object.values(group).length === 0) {\r\n delete system[groupName];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n components.tools.add(FragmentClassifier.uuid, this);\r\n const fragmentManager = components.tools.get(FragmentManager);\r\n fragmentManager.onFragmentsDisposed.add(this.onFragmentsDisposed);\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this._groupSystems;\r\n }\r\n async dispose() {\r\n this._groupSystems = {};\r\n const fragmentManager = this.components.tools.get(FragmentManager);\r\n fragmentManager.onFragmentsDisposed.remove(this.onFragmentsDisposed);\r\n await this.onDisposed.trigger(FragmentClassifier.uuid);\r\n this.onDisposed.reset();\r\n }\r\n remove(guid) {\r\n for (const systemName in this._groupSystems) {\r\n const system = this._groupSystems[systemName];\r\n for (const groupName in system) {\r\n const group = system[groupName];\r\n delete group[guid];\r\n }\r\n }\r\n }\r\n find(filter) {\r\n const fragments = this.components.tools.get(FragmentManager);\r\n if (!filter) {\r\n const result = {};\r\n const fragList = fragments.list;\r\n for (const id in fragList) {\r\n const fragment = fragList[id];\r\n result[id] = new Set(fragment.ids);\r\n }\r\n return result;\r\n }\r\n // There must be as many matches as conditions.\r\n // E.g.: if the filter is \"floor 1 and category wall\",\r\n // this gets the items with 2 matches (1 match per condition)\r\n const filterCount = Object.keys(filter).length;\r\n const models = {};\r\n for (const name in filter) {\r\n const values = filter[name];\r\n if (!this._groupSystems[name]) {\r\n console.warn(`Classification ${name} does not exist.`);\r\n continue;\r\n }\r\n for (const value of values) {\r\n const found = this._groupSystems[name][value];\r\n if (found) {\r\n for (const guid in found) {\r\n if (!models[guid]) {\r\n models[guid] = new Map();\r\n }\r\n for (const id of found[guid]) {\r\n const matchCount = models[guid].get(id);\r\n if (matchCount === undefined) {\r\n models[guid].set(id, 1);\r\n }\r\n else {\r\n models[guid].set(id, matchCount + 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const result = {};\r\n for (const guid in models) {\r\n const model = models[guid];\r\n for (const [id, numberOfMatches] of model) {\r\n if (numberOfMatches === undefined) {\r\n throw new Error(\"Malformed fragments map!\");\r\n }\r\n if (numberOfMatches === filterCount) {\r\n if (!result[guid]) {\r\n result[guid] = new Set();\r\n }\r\n result[guid].add(id);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n byModel(modelID, group) {\r\n if (!this._groupSystems.model) {\r\n this._groupSystems.model = {};\r\n }\r\n const modelsClassification = this._groupSystems.model;\r\n if (!modelsClassification[modelID]) {\r\n modelsClassification[modelID] = {};\r\n }\r\n const currentModel = modelsClassification[modelID];\r\n for (const [expressID, data] of group.data) {\r\n const keys = data[0];\r\n for (const key of keys) {\r\n const fragID = group.keyFragments.get(key);\r\n if (!fragID)\r\n continue;\r\n if (!currentModel[fragID]) {\r\n currentModel[fragID] = new Set();\r\n }\r\n currentModel[fragID].add(expressID);\r\n }\r\n }\r\n }\r\n async byPredefinedType(group) {\r\n if (!this._groupSystems.predefinedTypes) {\r\n this._groupSystems.predefinedTypes = {};\r\n }\r\n const currentTypes = this._groupSystems.predefinedTypes;\r\n const ids = group.getAllPropertiesIDs();\r\n for (const id of ids) {\r\n const entity = await group.getProperties(id);\r\n if (!entity)\r\n continue;\r\n const predefinedType = String(entity.PredefinedType?.value).toUpperCase();\r\n if (!currentTypes[predefinedType]) {\r\n currentTypes[predefinedType] = {};\r\n }\r\n const currentType = currentTypes[predefinedType];\r\n for (const [_expressID, data] of group.data) {\r\n const keys = data[0];\r\n for (const key of keys) {\r\n const fragmentID = group.keyFragments.get(key);\r\n if (!fragmentID) {\r\n throw new Error(\"Fragment ID not found!\");\r\n }\r\n if (!currentType[fragmentID]) {\r\n currentType[fragmentID] = new Set();\r\n }\r\n const currentFragment = currentType[fragmentID];\r\n currentFragment.add(entity.expressID);\r\n }\r\n }\r\n }\r\n }\r\n byEntity(group) {\r\n if (!this._groupSystems.entities) {\r\n this._groupSystems.entities = {};\r\n }\r\n for (const [expressID, data] of group.data) {\r\n const rels = data[1];\r\n const type = rels[1];\r\n const entity = IfcCategoryMap[type];\r\n this.saveItem(group, \"entities\", entity, expressID);\r\n }\r\n }\r\n byStorey(group) {\r\n for (const [expressID, data] of group.data) {\r\n const rels = data[1];\r\n const storeyID = rels[0];\r\n const storeyName = storeyID.toString();\r\n this.saveItem(group, \"storeys\", storeyName, expressID);\r\n }\r\n }\r\n async byIfcRel(group, ifcRel, systemName) {\r\n if (!IfcPropertiesUtils.isRel(ifcRel))\r\n return;\r\n await IfcPropertiesUtils.getRelationMap(group, ifcRel, async (relatingID, relatedIDs) => {\r\n const { name: relatingName } = await IfcPropertiesUtils.getEntityName(group, relatingID);\r\n for (const expressID of relatedIDs) {\r\n this.saveItem(group, systemName, relatingName ?? \"NO REL NAME\", expressID);\r\n }\r\n });\r\n }\r\n saveItem(group, systemName, className, expressID) {\r\n if (!this._groupSystems[systemName]) {\r\n this._groupSystems[systemName] = {};\r\n }\r\n const keys = group.data.get(expressID);\r\n if (!keys)\r\n return;\r\n for (const key of keys[0]) {\r\n const fragmentID = group.keyFragments.get(key);\r\n if (fragmentID) {\r\n const system = this._groupSystems[systemName];\r\n if (!system[className]) {\r\n system[className] = {};\r\n }\r\n if (!system[className][fragmentID]) {\r\n system[className][fragmentID] = new Set();\r\n }\r\n system[className][fragmentID].add(expressID);\r\n }\r\n }\r\n }\r\n}\r\nFragmentClassifier.uuid = \"e25a7f3c-46c4-4a14-9d3d-5115f24ebeb7\";\r\nToolComponent.libraryUUIDs.add(FragmentClassifier.uuid);\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport { Component, Event, UIElement, } from \"../../base-types\";\r\nimport { Button, ColorInput, FloatingWindow, RangeInput, SimpleUIComponent, TextInput, } from \"../../ui\";\r\nimport { ToolComponent } from \"../../core\";\r\nimport { EdgesClipper } from \"../../navigation/EdgesClipper\";\r\nimport { FragmentManager } from \"../FragmentManager\";\r\nimport { FragmentClassifier } from \"../FragmentClassifier\";\r\nexport class FragmentClipStyler extends Component {\r\n constructor(components) {\r\n super(components);\r\n this.onChange = new Event();\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n /** {@link Configurable.isSetup} */\r\n this.isSetup = false;\r\n this.enabled = true;\r\n this.localStorageID = \"FragmentClipStyler\";\r\n this.styleCards = {};\r\n this.uiElement = new UIElement();\r\n this._defaultStyles = `\r\n {\r\n \"B0ebxzZQvZ\": {\r\n \"name\": \"thick\",\r\n \"lineColor\": \"#36593e\",\r\n \"lineThickness\": 0.5,\r\n \"fillColor\": \"#ccdb9a\",\r\n \"categories\": \"IFCWALLSTANDARDCASE, IFCWALL,IFCSLAB, IFCROOF\"\r\n },\r\n \"kG9B1Ojv08\": {\r\n \"name\": \"thin\",\r\n \"lineColor\": \"#92a59b\",\r\n \"lineThickness\": 0.25,\r\n \"fillColor\": \"#e6ffdb\",\r\n \"categories\": \"IFCWINDOW, IFCDOOR, IFCBUILDINGELEMENTPROXY\"\r\n }\r\n }\r\n `;\r\n this.config = {\r\n force: false,\r\n };\r\n this.onSetup = new Event();\r\n this.components.tools.add(FragmentClipStyler.uuid, this);\r\n if (components.uiEnabled) {\r\n this.setupUI(components);\r\n }\r\n }\r\n async setup(config) {\r\n this.config = { ...this.config, ...config };\r\n const { force } = this.config;\r\n const noCards = Object.keys(this.styleCards).length === 0;\r\n if (force || noCards) {\r\n localStorage.setItem(this.localStorageID, this._defaultStyles);\r\n await this.loadCachedStyles();\r\n }\r\n this.isSetup = true;\r\n await this.onSetup.trigger(this);\r\n }\r\n get() {\r\n const saved = localStorage.getItem(this.localStorageID);\r\n if (saved) {\r\n const parsed = JSON.parse(saved);\r\n return Object.values(parsed);\r\n }\r\n return [];\r\n }\r\n async dispose() {\r\n for (const id in this.styleCards) {\r\n await this.deleteStyleCard(id, false);\r\n }\r\n await this.uiElement.dispose();\r\n this.onChange.reset();\r\n await this.onDisposed.trigger(FragmentClipStyler.uuid);\r\n this.onDisposed.reset();\r\n }\r\n async update(ids = Object.keys(this.styleCards)) {\r\n const clipper = this.components.tools.get(EdgesClipper);\r\n const fragments = this.components.tools.get(FragmentManager);\r\n const classifier = this.components.tools.get(FragmentClassifier);\r\n for (const id of ids) {\r\n const card = this.styleCards[id];\r\n if (!card)\r\n return;\r\n const allStyles = clipper.styles.get();\r\n const style = allStyles[id];\r\n if (!style)\r\n return;\r\n style.meshes.clear();\r\n const categoryList = card.categories.value.split(\",\");\r\n const entities = categoryList.map((item) => item.replace(\" \", \"\"));\r\n const found = classifier.find({ entities });\r\n for (const fragID in found) {\r\n const frag = fragments.list[fragID];\r\n if (!frag)\r\n continue;\r\n const { mesh } = frag;\r\n style.fragments[fragID] = new Set(found[fragID]);\r\n style.meshes.add(mesh);\r\n }\r\n }\r\n await clipper.updateEdges(true);\r\n this.cacheStyles();\r\n }\r\n async loadCachedStyles() {\r\n const savedData = localStorage.getItem(this.localStorageID);\r\n if (savedData) {\r\n const savedStyles = JSON.parse(savedData);\r\n for (const id in savedStyles) {\r\n const savedStyle = savedStyles[id];\r\n await this.createStyleCard(savedStyle);\r\n }\r\n }\r\n }\r\n setupUI(components) {\r\n const mainWindow = new FloatingWindow(components);\r\n mainWindow.title = \"Clipping styles\";\r\n mainWindow.visible = false;\r\n components.ui.add(mainWindow);\r\n mainWindow.domElement.style.width = \"530px\";\r\n mainWindow.domElement.style.height = \"400px\";\r\n const mainButton = new Button(components, {\r\n materialIconName: \"format_paint\",\r\n tooltip: \"Clipping styles\",\r\n });\r\n mainButton.onClick.add(() => {\r\n mainWindow.visible = !mainWindow.visible;\r\n });\r\n const topButtonContainerHtml = `
`;\r\n const topButtonContainer = new SimpleUIComponent(components, topButtonContainerHtml);\r\n const createButton = new Button(components, {\r\n materialIconName: \"add\",\r\n });\r\n createButton.onClick.add(() => this.createStyleCard());\r\n topButtonContainer.addChild(createButton);\r\n mainWindow.addChild(topButtonContainer);\r\n this.uiElement.set({ mainWindow, mainButton });\r\n }\r\n cacheStyles() {\r\n const styles = {};\r\n for (const id in this.styleCards) {\r\n const styleCard = this.styleCards[id];\r\n styles[id] = {\r\n name: styleCard.name.value,\r\n lineColor: styleCard.lineColor.value,\r\n lineThickness: styleCard.lineThickness.value,\r\n fillColor: styleCard.fillColor.value,\r\n categories: styleCard.categories.value,\r\n };\r\n }\r\n const serialized = JSON.stringify(styles);\r\n localStorage.setItem(this.localStorageID, serialized);\r\n }\r\n async deleteStyleCard(id, updateCache = true) {\r\n const found = this.styleCards[id];\r\n const clipper = this.components.tools.get(EdgesClipper);\r\n clipper.styles.deleteStyle(id, true);\r\n if (found) {\r\n await found.styleCard.dispose();\r\n await found.deleteButton.dispose();\r\n await found.name.dispose();\r\n await found.categories.dispose();\r\n await found.lineThickness.dispose();\r\n await found.lineColor.dispose();\r\n await found.fillColor.dispose();\r\n }\r\n delete this.styleCards[id];\r\n await clipper.updateEdges(true);\r\n if (updateCache) {\r\n this.cacheStyles();\r\n }\r\n }\r\n async createStyleCard(config) {\r\n const styleCard = new SimpleUIComponent(this.components);\r\n const { id } = styleCard;\r\n const styleRowClass = `flex gap-4`;\r\n styleCard.domElement.className = `m-4 p-4 border-1 border-solid border-[#3A444E] rounded-md flex flex-col gap-4`;\r\n styleCard.domElement.innerHTML = `\r\n