{"version":3,"file":"vendor.openbim-components-06022438.64616e14ee38d8bf.bundle.js","mappings":"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","sources":["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 { Component, Event } from \"../../base-types\";\r\nimport { IfcCategoryMap, IfcPropertiesUtils } from \"../../ifc\";\r\nimport { toCompositeID } from \"../../utils\";\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 const items = fragment.items;\r\n const hidden = Object.keys(fragment.hiddenInstances);\r\n result[id] = new Set(...items, ...hidden);\r\n }\r\n return result;\r\n }\r\n const size = 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] = {};\r\n }\r\n for (const id of found[guid]) {\r\n if (!models[guid][id]) {\r\n models[guid][id] = 1;\r\n }\r\n else {\r\n models[guid][id]++;\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 in model) {\r\n const numberOfMatches = model[id];\r\n if (numberOfMatches === size) {\r\n if (!result[guid]) {\r\n result[guid] = new Set();\r\n }\r\n result[guid].add(id);\r\n const fragment = fragments.list[guid];\r\n const composites = fragment.composites[id];\r\n if (composites) {\r\n const idNum = parseInt(id, 10);\r\n for (let i = 1; i < composites; i++) {\r\n const compositeID = toCompositeID(idNum, i);\r\n result[guid].add(compositeID);\r\n }\r\n }\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 in group.data) {\r\n const keys = group.data[expressID][0];\r\n for (const key of keys) {\r\n const fragID = group.keyFragments[key];\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 byPredefinedType(group) {\r\n var _a;\r\n if (!group.properties) {\r\n throw new Error(\"To group by predefined type, properties are needed\");\r\n }\r\n if (!this._groupSystems.predefinedTypes) {\r\n this._groupSystems.predefinedTypes = {};\r\n }\r\n const currentTypes = this._groupSystems.predefinedTypes;\r\n for (const expressID in group.data) {\r\n const entity = group.properties[parseInt(expressID, 10)];\r\n if (!entity)\r\n continue;\r\n const predefinedType = String((_a = entity.PredefinedType) === null || _a === void 0 ? void 0 : _a.value).toUpperCase();\r\n if (!currentTypes[predefinedType]) {\r\n currentTypes[predefinedType] = {};\r\n }\r\n const currentType = currentTypes[predefinedType];\r\n for (const expressID in group.data) {\r\n const keys = group.data[expressID][0];\r\n for (const key of keys) {\r\n const fragmentID = group.keyFragments[key];\r\n if (!currentType[fragmentID]) {\r\n currentType[fragmentID] = new Set();\r\n }\r\n const currentFragment = currentType[fragmentID];\r\n currentFragment.add(String(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 in group.data) {\r\n const rels = group.data[expressID][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 if (!group.properties) {\r\n throw new Error(\"To group by storey, properties are needed\");\r\n }\r\n for (const expressID in group.data) {\r\n const rels = group.data[expressID][1];\r\n const storeyID = rels[0];\r\n const storey = group.properties[storeyID];\r\n if (storey === undefined)\r\n continue;\r\n const storeyName = group.properties[storeyID].Name.value;\r\n this.saveItem(group, \"storeys\", storeyName, expressID);\r\n }\r\n }\r\n byIfcRel(group, ifcRel, systemName) {\r\n const properties = group.properties;\r\n if (!properties)\r\n throw new Error(\"To group by IFC Rel, properties are needed\");\r\n if (!IfcPropertiesUtils.isRel(ifcRel))\r\n return;\r\n IfcPropertiesUtils.getRelationMap(properties, ifcRel, (relatingID, relatedIDs) => {\r\n const { name: relatingName } = IfcPropertiesUtils.getEntityName(properties, relatingID);\r\n for (const expressID of relatedIDs) {\r\n this.saveItem(group, systemName, relatingName !== null && relatingName !== void 0 ? relatingName : \"NO REL NAME\", String(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[expressID];\r\n if (!keys)\r\n return;\r\n for (const key of keys[0]) {\r\n const fragmentID = group.keyFragments[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 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.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 { mesh } = fragments.list[fragID];\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