{"version":3,"file":"vendor.bim-fragment-3d844448.2a65c99c84c1b29a.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/bim-fragment/src/serializer.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport * as flatbuffers from \"flatbuffers\";\r\nimport * as FB from \"./flatbuffers/fragments\";\r\nimport { Fragment } from \"./fragment\";\r\nimport { FragmentsGroup } from \"./fragments-group\";\r\nimport { IfcAlignmentData } from \"./alignment\";\r\n/**\r\n * Object to export and import sets of fragments efficiently using the library\r\n * [flatbuffers](https://flatbuffers.dev/).\r\n */\r\nexport class Serializer {\r\n constructor() {\r\n this.fragmentIDSeparator = \"|\";\r\n }\r\n import(bytes) {\r\n const buffer = new flatbuffers.ByteBuffer(bytes);\r\n const fbFragmentsGroup = FB.FragmentsGroup.getRootAsFragmentsGroup(buffer);\r\n const fragmentsGroup = this.constructFragmentGroup(fbFragmentsGroup);\r\n const length = fbFragmentsGroup.itemsLength();\r\n for (let i = 0; i < length; i++) {\r\n const fbFragment = fbFragmentsGroup.items(i);\r\n if (!fbFragment)\r\n continue;\r\n const geometry = this.constructGeometry(fbFragment);\r\n const materials = this.constructMaterials(fbFragment);\r\n const { instances, colors } = this.constructInstances(fbFragment);\r\n const fragment = new Fragment(geometry, materials, instances.length);\r\n this.getComposites(fbFragment, fragment);\r\n this.setInstances(instances, colors, fragment);\r\n this.setID(fbFragment, fragment);\r\n fragmentsGroup.items.push(fragment);\r\n fragmentsGroup.add(fragment.mesh);\r\n }\r\n return fragmentsGroup;\r\n }\r\n export(group) {\r\n var _a;\r\n const builder = new flatbuffers.Builder(1024);\r\n const items = [];\r\n const G = FB.FragmentsGroup;\r\n const F = FB.Fragment;\r\n const C = FB.Civil;\r\n let exportedCivil = null;\r\n if ((_a = group.ifcCivil) === null || _a === void 0 ? void 0 : _a.horizontalAlignments) {\r\n const A = FB.Alignment;\r\n const resultH = group.ifcCivil.horizontalAlignments.exportData();\r\n const posVectorH = A.createPositionVector(builder, resultH.coordinates);\r\n const curveVectorH = A.createSegmentVector(builder, resultH.curveIndex);\r\n const alignVectorH = A.createCurveVector(builder, resultH.alignmentIndex);\r\n A.startAlignment(builder);\r\n A.addPosition(builder, posVectorH);\r\n A.addSegment(builder, curveVectorH);\r\n A.addCurve(builder, alignVectorH);\r\n const exportedH = FB.Alignment.endAlignment(builder);\r\n const resultV = group.ifcCivil.verticalAlignments.exportData();\r\n const posVectorV = A.createPositionVector(builder, resultV.coordinates);\r\n const curveVectorV = A.createSegmentVector(builder, resultV.curveIndex);\r\n const alignVectorV = A.createCurveVector(builder, resultV.alignmentIndex);\r\n A.startAlignment(builder);\r\n A.addPosition(builder, posVectorV);\r\n A.addSegment(builder, curveVectorV);\r\n A.addCurve(builder, alignVectorV);\r\n const exportedV = FB.Alignment.endAlignment(builder);\r\n const resultR = group.ifcCivil.realAlignments.exportData();\r\n const posVectorR = A.createPositionVector(builder, resultR.coordinates);\r\n const curveVectorR = A.createSegmentVector(builder, resultR.curveIndex);\r\n const alignVectorR = A.createCurveVector(builder, resultR.alignmentIndex);\r\n A.startAlignment(builder);\r\n A.addPosition(builder, posVectorR);\r\n A.addSegment(builder, curveVectorR);\r\n A.addCurve(builder, alignVectorR);\r\n const exportedR = FB.Alignment.endAlignment(builder);\r\n C.startCivil(builder);\r\n C.addAlignmentHorizontal(builder, exportedH);\r\n C.addAlignmentVertical(builder, exportedV);\r\n C.addAlignment3d(builder, exportedR);\r\n exportedCivil = FB.Civil.endCivil(builder);\r\n }\r\n for (const fragment of group.items) {\r\n const result = fragment.exportData();\r\n const posVector = F.createPositionVector(builder, result.position);\r\n const normalVector = F.createNormalVector(builder, result.normal);\r\n const blockVector = F.createBlockIdVector(builder, result.blockID);\r\n const indexVector = F.createIndexVector(builder, result.index);\r\n const groupsVector = F.createGroupsVector(builder, result.groups);\r\n const matsVector = F.createMaterialsVector(builder, result.materials);\r\n const matricesVector = F.createMatricesVector(builder, result.matrices);\r\n const colorsVector = F.createColorsVector(builder, result.colors);\r\n const idsStr = builder.createString(result.ids);\r\n const idStr = builder.createString(result.id);\r\n const compositeStr = builder.createString(JSON.stringify(fragment.composites));\r\n F.startFragment(builder);\r\n F.addPosition(builder, posVector);\r\n F.addNormal(builder, normalVector);\r\n F.addBlockId(builder, blockVector);\r\n F.addIndex(builder, indexVector);\r\n F.addGroups(builder, groupsVector);\r\n F.addMaterials(builder, matsVector);\r\n F.addMatrices(builder, matricesVector);\r\n F.addColors(builder, colorsVector);\r\n F.addIds(builder, idsStr);\r\n F.addId(builder, idStr);\r\n F.addComposites(builder, compositeStr);\r\n const exported = FB.Fragment.endFragment(builder);\r\n items.push(exported);\r\n }\r\n const itemsVector = G.createItemsVector(builder, items);\r\n const matrixVector = G.createCoordinationMatrixVector(builder, group.coordinationMatrix.elements);\r\n let fragmentKeys = \"\";\r\n for (const key in group.keyFragments) {\r\n const fragmentID = group.keyFragments[key];\r\n if (fragmentKeys.length)\r\n fragmentKeys += this.fragmentIDSeparator;\r\n fragmentKeys += fragmentID;\r\n }\r\n const fragmentKeysRef = builder.createString(fragmentKeys);\r\n const keyIndices = [];\r\n const itemsKeys = [];\r\n const relsIndices = [];\r\n const itemsRels = [];\r\n const ids = [];\r\n let keysCounter = 0;\r\n let relsCounter = 0;\r\n for (const expressID in group.data) {\r\n keyIndices.push(keysCounter);\r\n relsIndices.push(relsCounter);\r\n const [keys, rels] = group.data[expressID];\r\n const id = parseInt(expressID, 10);\r\n ids.push(id);\r\n for (const key of keys) {\r\n itemsKeys.push(key);\r\n }\r\n for (const rel of rels) {\r\n itemsRels.push(rel);\r\n }\r\n keysCounter += keys.length;\r\n relsCounter += rels.length;\r\n }\r\n const groupID = builder.createString(group.uuid);\r\n const groupName = builder.createString(group.name);\r\n const ifcName = builder.createString(group.ifcMetadata.name);\r\n const ifcDescription = builder.createString(group.ifcMetadata.description);\r\n const ifcSchema = builder.createString(group.ifcMetadata.schema);\r\n const keysIVector = G.createItemsKeysIndicesVector(builder, keyIndices);\r\n const keysVector = G.createItemsKeysVector(builder, itemsKeys);\r\n const relsIVector = G.createItemsRelsIndicesVector(builder, relsIndices);\r\n const relsVector = G.createItemsRelsVector(builder, itemsRels);\r\n const idsVector = G.createIdsVector(builder, ids);\r\n const { min, max } = group.boundingBox;\r\n const bbox = [min.x, min.y, min.z, max.x, max.y, max.z];\r\n const bboxVector = G.createBoundingBoxVector(builder, bbox);\r\n G.startFragmentsGroup(builder);\r\n if (exportedCivil !== null) {\r\n G.addCivil(builder, exportedCivil);\r\n }\r\n G.addId(builder, groupID);\r\n G.addName(builder, groupName);\r\n G.addIfcName(builder, ifcName);\r\n G.addIfcDescription(builder, ifcDescription);\r\n G.addIfcSchema(builder, ifcSchema);\r\n G.addMaxExpressId(builder, group.ifcMetadata.maxExpressID);\r\n G.addItems(builder, itemsVector);\r\n G.addFragmentKeys(builder, fragmentKeysRef);\r\n G.addIds(builder, idsVector);\r\n G.addItemsKeysIndices(builder, keysIVector);\r\n G.addItemsKeys(builder, keysVector);\r\n G.addItemsRelsIndices(builder, relsIVector);\r\n G.addItemsRels(builder, relsVector);\r\n G.addCoordinationMatrix(builder, matrixVector);\r\n G.addBoundingBox(builder, bboxVector);\r\n const result = FB.FragmentsGroup.endFragmentsGroup(builder);\r\n builder.finish(result);\r\n return builder.asUint8Array();\r\n }\r\n getComposites(fbFragment, fragment) {\r\n const composites = fbFragment.composites() || \"{}\";\r\n fragment.composites = JSON.parse(composites);\r\n }\r\n setID(fbFragment, fragment) {\r\n const id = fbFragment.id();\r\n if (id) {\r\n fragment.id = id;\r\n fragment.mesh.uuid = id;\r\n }\r\n }\r\n setInstances(instances, colors, fragment) {\r\n for (let i = 0; i < instances.length; i++) {\r\n fragment.setInstance(i, instances[i]);\r\n if (colors.length) {\r\n fragment.mesh.setColorAt(i, colors[i]);\r\n }\r\n }\r\n }\r\n constructInstances(fragment) {\r\n const matricesData = fragment.matricesArray();\r\n const colorData = fragment.colorsArray();\r\n const colors = [];\r\n const idsString = fragment.ids();\r\n const id = fragment.id();\r\n if (!matricesData || !idsString) {\r\n throw new Error(`Error: Can't load empty fragment: ${id}`);\r\n }\r\n const ids = idsString.split(\"|\");\r\n const singleInstance = matricesData.length === 16;\r\n const manyItems = ids.length > 1;\r\n const isMergedFragment = singleInstance && manyItems;\r\n if (isMergedFragment) {\r\n const transform = new THREE.Matrix4().fromArray(matricesData);\r\n const instances = [{ ids, transform }];\r\n return { instances, colors };\r\n }\r\n // Instanced fragment\r\n const instances = [];\r\n for (let i = 0; i < matricesData.length; i += 16) {\r\n const matrixArray = matricesData.subarray(i, i + 17);\r\n const transform = new THREE.Matrix4().fromArray(matrixArray);\r\n const id = ids[i / 16];\r\n instances.push({ ids: [id], transform });\r\n }\r\n if (colorData && colorData.length === instances.length * 3) {\r\n for (let i = 0; i < colorData.length; i += 3) {\r\n const [r, g, b] = colorData.subarray(i, i + 4);\r\n const color = new THREE.Color(r, g, b);\r\n colors.push(color);\r\n }\r\n }\r\n return { instances, colors };\r\n }\r\n constructMaterials(fragment) {\r\n const materials = fragment.materialsArray();\r\n const matArray = [];\r\n if (!materials)\r\n return matArray;\r\n for (let i = 0; i < materials.length; i += 5) {\r\n const opacity = materials[i];\r\n const transparent = Boolean(materials[i + 1]);\r\n const red = materials[i + 2];\r\n const green = materials[i + 3];\r\n const blue = materials[i + 4];\r\n const color = new THREE.Color(red, green, blue);\r\n const material = new THREE.MeshLambertMaterial({\r\n color,\r\n opacity,\r\n transparent,\r\n });\r\n matArray.push(material);\r\n }\r\n return matArray;\r\n }\r\n constructFragmentGroup(group) {\r\n const fragmentsGroup = new FragmentsGroup();\r\n const FBcivil = group.civil();\r\n const horizontalAlignments = new IfcAlignmentData();\r\n const verticalAlignments = new IfcAlignmentData();\r\n const realAlignments = new IfcAlignmentData();\r\n if (FBcivil) {\r\n const FBalignmentH = FBcivil.alignmentHorizontal();\r\n this.getAlignmentData(FBalignmentH, horizontalAlignments);\r\n const FBalignmentV = FBcivil.alignmentVertical();\r\n this.getAlignmentData(FBalignmentV, verticalAlignments);\r\n const FBalignment3D = FBcivil.alignment3d();\r\n this.getAlignmentData(FBalignment3D, realAlignments);\r\n fragmentsGroup.ifcCivil = {\r\n horizontalAlignments,\r\n verticalAlignments,\r\n realAlignments,\r\n };\r\n }\r\n // fragmentsGroup.ifcCivil?.horizontalAlignments\r\n fragmentsGroup.uuid = group.id() || fragmentsGroup.uuid;\r\n fragmentsGroup.name = group.name() || \"\";\r\n fragmentsGroup.ifcMetadata = {\r\n name: group.ifcName() || \"\",\r\n description: group.ifcDescription() || \"\",\r\n schema: group.ifcSchema() || \"IFC2X3\",\r\n maxExpressID: group.maxExpressId() || 0,\r\n };\r\n const defaultMatrix = new THREE.Matrix4().elements;\r\n const matrixArray = group.coordinationMatrixArray() || defaultMatrix;\r\n const ids = group.idsArray() || new Uint32Array();\r\n const keysIndices = group.itemsKeysIndicesArray() || new Uint32Array();\r\n const keysArray = group.itemsKeysArray() || new Uint32Array();\r\n const relsArray = group.itemsRelsArray() || new Uint32Array();\r\n const relsIndices = group.itemsRelsIndicesArray() || new Uint32Array();\r\n const keysIdsString = group.fragmentKeys() || \"\";\r\n const keysIdsArray = keysIdsString.split(this.fragmentIDSeparator);\r\n this.setGroupData(fragmentsGroup, ids, keysIndices, keysArray, 0);\r\n this.setGroupData(fragmentsGroup, ids, relsIndices, relsArray, 1);\r\n const bbox = group.boundingBoxArray() || [0, 0, 0, 0, 0, 0];\r\n const [minX, minY, minZ, maxX, maxY, maxZ] = bbox;\r\n fragmentsGroup.boundingBox.min.set(minX, minY, minZ);\r\n fragmentsGroup.boundingBox.max.set(maxX, maxY, maxZ);\r\n for (let i = 0; i < keysIdsArray.length; i++) {\r\n fragmentsGroup.keyFragments[i] = keysIdsArray[i];\r\n }\r\n if (matrixArray.length === 16) {\r\n fragmentsGroup.coordinationMatrix.fromArray(matrixArray);\r\n }\r\n return fragmentsGroup;\r\n }\r\n getAlignmentData(alignment, result) {\r\n if (alignment) {\r\n if (alignment.positionArray) {\r\n result.coordinates = alignment.positionArray();\r\n for (let j = 0; j < alignment.curveLength(); j++) {\r\n result.alignmentIndex.push(alignment.curve(j));\r\n }\r\n for (let j = 0; j < alignment.segmentLength(); j++) {\r\n result.curveIndex.push(alignment.segment(j));\r\n }\r\n }\r\n }\r\n }\r\n setGroupData(group, ids, indices, array, index) {\r\n for (let i = 0; i < indices.length; i++) {\r\n const expressID = ids[i];\r\n const currentIndex = indices[i];\r\n const nextIndex = indices[i + 1] || array.length;\r\n const keys = [];\r\n for (let j = currentIndex; j < nextIndex; j++) {\r\n keys.push(array[j]);\r\n }\r\n if (!group.data[expressID]) {\r\n group.data[expressID] = [[], []];\r\n }\r\n group.data[expressID][index] = keys;\r\n }\r\n }\r\n constructGeometry(fragment) {\r\n const position = fragment.positionArray();\r\n const normal = fragment.normalArray();\r\n const blockID = fragment.blockIdArray();\r\n const index = fragment.indexArray();\r\n const groups = fragment.groupsArray();\r\n if (!index)\r\n throw new Error(\"Index not found!\");\r\n const geometry = new THREE.BufferGeometry();\r\n geometry.setIndex(Array.from(index));\r\n this.loadAttribute(geometry, \"position\", position, 3);\r\n this.loadAttribute(geometry, \"normal\", normal, 3);\r\n this.loadAttribute(geometry, \"blockID\", blockID, 1);\r\n this.loadGeometryGroups(groups, geometry);\r\n return geometry;\r\n }\r\n loadGeometryGroups(groups, geometry) {\r\n if (!groups)\r\n return;\r\n for (let i = 0; i < groups.length; i += 3) {\r\n const start = groups[i];\r\n const count = groups[i + 1];\r\n const materialIndex = groups[i + 2];\r\n geometry.addGroup(start, count, materialIndex);\r\n }\r\n }\r\n loadAttribute(geometry, name, data, size) {\r\n if (!data)\r\n return;\r\n geometry.setAttribute(name, new THREE.BufferAttribute(data, size));\r\n }\r\n}\r\n//# sourceMappingURL=serializer.js.map"],"names":["Serializer","constructor","this","fragmentIDSeparator","import","bytes","buffer","fbFragmentsGroup","fragmentsGroup","constructFragmentGroup","length","itemsLength","i","fbFragment","items","geometry","constructGeometry","materials","constructMaterials","instances","colors","constructInstances","fragment","getComposites","setInstances","setID","push","add","mesh","export","group","_a","builder","G","F","C","exportedCivil","ifcCivil","horizontalAlignments","A","resultH","exportData","posVectorH","createPositionVector","coordinates","curveVectorH","createSegmentVector","curveIndex","alignVectorH","createCurveVector","alignmentIndex","startAlignment","addPosition","addSegment","addCurve","exportedH","resultV","verticalAlignments","posVectorV","curveVectorV","alignVectorV","exportedV","resultR","realAlignments","posVectorR","curveVectorR","alignVectorR","exportedR","startCivil","addAlignmentHorizontal","addAlignmentVertical","addAlignment3d","result","posVector","position","normalVector","createNormalVector","normal","blockVector","createBlockIdVector","blockID","indexVector","createIndexVector","index","groupsVector","createGroupsVector","groups","matsVector","createMaterialsVector","matricesVector","createMatricesVector","matrices","colorsVector","createColorsVector","idsStr","createString","ids","idStr","id","compositeStr","JSON","stringify","composites","startFragment","addNormal","addBlockId","addIndex","addGroups","addMaterials","addMatrices","addColors","addIds","addId","addComposites","exported","itemsVector","createItemsVector","matrixVector","createCoordinationMatrixVector","coordinationMatrix","elements","fragmentKeys","key","keyFragments","fragmentID","fragmentKeysRef","keyIndices","itemsKeys","relsIndices","itemsRels","keysCounter","relsCounter","expressID","data","keys","rels","parseInt","rel","groupID","uuid","groupName","name","ifcName","ifcMetadata","ifcDescription","description","ifcSchema","schema","keysIVector","createItemsKeysIndicesVector","keysVector","createItemsKeysVector","relsIVector","createItemsRelsIndicesVector","relsVector","createItemsRelsVector","idsVector","createIdsVector","min","max","boundingBox","bbox","x","y","z","bboxVector","createBoundingBoxVector","startFragmentsGroup","addCivil","addName","addIfcName","addIfcDescription","addIfcSchema","addMaxExpressId","maxExpressID","addItems","addFragmentKeys","addItemsKeysIndices","addItemsKeys","addItemsRelsIndices","addItemsRels","addCoordinationMatrix","addBoundingBox","finish","asUint8Array","parse","setInstance","setColorAt","matricesData","matricesArray","colorData","colorsArray","idsString","Error","split","singleInstance","manyItems","transform","fromArray","matrixArray","subarray","r","g","b","color","materialsArray","matArray","opacity","transparent","Boolean","red","green","blue","material","FBcivil","civil","FBalignmentH","alignmentHorizontal","getAlignmentData","FBalignmentV","alignmentVertical","FBalignment3D","alignment3d","maxExpressId","defaultMatrix","coordinationMatrixArray","idsArray","Uint32Array","keysIndices","itemsKeysIndicesArray","keysArray","itemsKeysArray","relsArray","itemsRelsArray","itemsRelsIndicesArray","keysIdsArray","setGroupData","boundingBoxArray","minX","minY","minZ","maxX","maxY","maxZ","set","alignment","positionArray","j","curveLength","curve","segmentLength","segment","indices","array","currentIndex","nextIndex","normalArray","blockIdArray","indexArray","groupsArray","setIndex","Array","from","loadAttribute","loadGeometryGroups","start","count","materialIndex","addGroup","size","setAttribute"],"sourceRoot":""}