{"version":3,"file":"vendor.openbim-components-3256c836.366b1a5613e98d28.bundle.js","mappings":"wKAGO,MAAMA,EACT,WAAIC,GACA,OAA4B,OAArBC,KAAKC,KAAKC,MACrB,CACA,WAAIH,CAAQI,GACR,MAAMC,EAAQJ,KAAKK,WACfF,GACcH,KAAKM,YAAYC,MAAMC,MAC/BC,IAAIT,KAAKC,MACXG,GACAA,EAAMM,OAAOD,IAAIT,KAAKC,QAI1BD,KAAKC,KAAKU,mBACNP,GACAA,EAAMM,OAAOE,OAAOZ,KAAKC,MAGrC,CACA,YAAIY,CAASA,GACTb,KAAKc,UAAYD,EACjBb,KAAKC,KAAKY,SAASE,WAAWC,SAAWH,EAASE,WAAWC,QACjE,CACA,WAAAC,CAAYC,EAAYC,EAAON,EAAUO,GAErCpB,KAAKC,KAAO,IAAI,OAAW,IAAI,kBAC/BD,KAAKqB,YAAc,IACnBrB,KAAKsB,YAAc,IAAI,UAEvBtB,KAAKuB,yBAA2B,IAAI,UACpCvB,KAAKM,YAAcY,EACnBlB,KAAKC,KAAKmB,SAAWA,EACrBpB,KAAKC,KAAKuB,eAAgB,EAC1BxB,KAAKyB,OAASN,EACd,MAAM,EAAEO,EAAC,EAAEC,EAAC,EAAEC,GAAMT,EAAMU,OACN,IAAhBC,KAAKC,IAAIL,GACT1B,KAAKgC,WAAa,IAEG,IAAhBF,KAAKC,IAAIJ,GACd3B,KAAKgC,WAAa,IAEG,IAAhBF,KAAKC,IAAIH,KACd5B,KAAKgC,WAAa,KAEtBhC,KAAKc,UAAYD,EACjBb,KAAKC,KAAKY,SAASE,WAAWC,SAAWH,EAASE,WAAWC,SAE7D,MAAMiB,EAASd,EAAMU,OAAOK,QAAQC,eAAe,KACnDnC,KAAKC,KAAKe,SAASoB,KAAKH,GACxBjC,KAAKD,SAAU,CACnB,CACA,OAAAsC,GACI,MAAMjC,EAAQJ,KAAKK,WACfD,GACAA,EAAMM,OAAOE,OAAOZ,KAAKC,MAE7BD,KAAKC,KAAKY,SAASwB,UACnBrC,KAAKC,KAAKU,mBACVX,KAAKC,KAAKY,SAAW,KACrBb,KAAKC,KAAO,KACZD,KAAKyB,OAAS,KACdzB,KAAKc,UAAY,IACrB,CACA,MAAAwB,CAAOC,GACH,MAAMC,EAASxC,KAAKc,UAAUC,WAAWC,SAASyB,MAClD,IAAKD,EACD,OACJxC,KAAK0C,gCACL,MAAMC,EAAa,GACnB,IAAIC,EAAkB,EACtB,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAiBO,OAAQD,IAAK,CAC9C,MAAME,EAAeR,EAAiBM,GAChCG,EAAW,GACjB,IAAK,IAAIC,EAAIL,EAAiBK,EAAIF,EAAcE,GAAK,EACjDD,EAASE,KAAS,EAAJD,GAElB,MAAME,EAAUnD,KAAKoD,YAAYJ,EAAUR,GAC3C,IAAK,MAAMa,KAASF,EAChBR,EAAWO,KAAKG,GAEpBT,EAAkBG,CACtB,CACA/C,KAAKC,KAAKY,SAASyC,SAASX,EAChC,CACA,WAAAS,CAAYJ,EAAUR,GAClB,MAAMW,EAAU,IAAII,IACdC,EAAgB,CAAC,EACjBC,EAAS,IAAIF,IACnB,IAAIG,EAAc,EAClB,MAAMC,EAAa,IAAIJ,IACjBK,EAAe,IAAIL,IACnBM,EAAa,IAAIC,IACjBC,EAAI/D,KAAKqB,YACf,IAAK,IAAIwB,EAAI,EAAGA,EAAIG,EAASF,OAAQD,IAAK,CAEtC,MAAMmB,EAAmBhB,EAASH,GAClC,IAAIoB,EAAK,EACLC,EAAK,EACLC,EAAK,EACLC,EAAK,EACT,MAAMC,EAAW7B,EAAOwB,GAClBM,EAAW9B,EAAOwB,EAAmB,GACrCO,EAAW/B,EAAOwB,EAAmB,GACrCQ,EAAWhC,EAAOwB,EAAmB,GACrCS,EAAWjC,EAAOwB,EAAmB,GACrCU,EAAWlC,EAAOwB,EAAmB,GAS3C,GARAhE,KAAKsB,YAAYqD,IAAIN,EAAUC,EAAUC,GACzCvE,KAAKsB,YAAYsD,aAAa5E,KAAKuB,0BACnC0C,EAAKnC,KAAK+C,MAAM7E,KAAKsB,YAAYI,EAAIqC,GAAKA,EAC1CG,EAAKpC,KAAK+C,MAAM7E,KAAKsB,YAAYK,EAAIoC,GAAKA,EAC1C/D,KAAKsB,YAAYqD,IAAIH,EAAUC,EAAUC,GACzC1E,KAAKsB,YAAYsD,aAAa5E,KAAKuB,0BACnC4C,EAAKrC,KAAK+C,MAAM7E,KAAKsB,YAAYI,EAAIqC,GAAKA,EAC1CK,EAAKtC,KAAK+C,MAAM7E,KAAKsB,YAAYK,EAAIoC,GAAKA,EACtCE,IAAOE,GAAMD,IAAOE,EACpB,SAEJ,MAAMU,EAAY,GAAGb,KAAMC,IACrBa,EAAU,GAAGZ,KAAMC,IACpBjB,EAAQ6B,IAAIF,IACb3B,EAAQwB,IAAIG,EAAWd,EAAmB,GAEzCb,EAAQ6B,IAAID,IACb5B,EAAQwB,IAAII,EAASf,EAAmB,EAAI,GAEhD,MAAMiB,EAAQ9B,EAAQ3C,IAAIsE,GACpBI,EAAM/B,EAAQ3C,IAAIuE,GACxBvB,EAAcyB,GAAS,CAAChB,EAAIC,GAC5BV,EAAc0B,GAAO,CAACf,EAAIC,GAC1B,MAAMe,EAAoBvB,EAAaoB,IAAIC,GACrCG,EAAkBzB,EAAWqB,IAAIC,GACjCI,EAAkBzB,EAAaoB,IAAIE,GACnCI,EAAgB3B,EAAWqB,IAAIE,GAKrC,GAJmBC,GACdC,GACAC,GACAC,GASA,GAAIH,GAAqBG,EAAe,CAEzC,MAAMC,EAAa3B,EAAapD,IAAIyE,GAC9BO,EAAW7B,EAAWnD,IAAI0E,GAEhC,GADqBK,IAAeC,EAClB,CAEd,MAAMC,EAAWhC,EAAOjD,IAAIgF,GACtBE,EAAajC,EAAOjD,IAAI+E,GAC9B,IAAKE,IAAaC,EACd,SAEJjC,EAAO7C,OAAO2E,GACd1B,EAAWjD,OAAO2E,GAClB5B,EAAWgB,IAAIe,EAAWA,EAAW5C,OAAS,GAAI0C,GAClD7B,EAAW/C,OAAO6E,EAASA,EAAS3C,OAAS,IAC7C,IAAK,MAAMO,KAASqC,EAChBD,EAASvC,KAAKG,EAEtB,MAEIQ,EAAWjD,OAAO4E,GAEtB5B,EAAahD,OAAOqE,GACpBtB,EAAW/C,OAAOsE,EACtB,MACK,GAAIE,GAAmBC,EAAiB,CAEzC,MAAME,EAAa3B,EAAapD,IAAI0E,GAC9BM,EAAW7B,EAAWnD,IAAIyE,GAEhC,GADqBM,IAAeC,EAClB,CAEd,MAAMC,EAAWhC,EAAOjD,IAAIgF,GACtBE,EAAajC,EAAOjD,IAAI+E,GAC9B,IAAKE,IAAaC,EACd,SAEJjC,EAAO7C,OAAO2E,GACd1B,EAAWjD,OAAO2E,GAClB5B,EAAWgB,IAAIe,EAAWA,EAAW5C,OAAS,GAAI0C,GAClD7B,EAAW/C,OAAO6E,EAASA,EAAS3C,OAAS,IAC7C,IAAK,MAAMO,KAASqC,EAChBD,EAASvC,KAAKG,EAEtB,MAEIQ,EAAWjD,OAAO4E,GAEtB5B,EAAahD,OAAOsE,GACpBvB,EAAW/C,OAAOqE,EACtB,MACK,GAAIE,GAAqBE,EAAiB,CAE3C,MAAMM,EAAc/B,EAAapD,IAAI0E,GAC/BU,EAAchC,EAAapD,IAAIyE,GAE/BY,EAAcpC,EAAOjD,IAAIoF,GACzBE,EAAcrC,EAAOjD,IAAImF,GAC/B,IAAKE,IAAgBC,EACjB,SAEJrC,EAAO7C,OAAO+E,GACd9B,EAAWjD,OAAO+E,GAClB/B,EAAahD,OAAOiF,EAAY,IAChCjC,EAAahD,OAAOkF,EAAY,IAChCnC,EAAW/C,OAAOkF,EAAYA,EAAYhD,OAAS,IACnDc,EAAae,IAAImB,EAAYA,EAAYhD,OAAS,GAAI8C,GACtDE,EAAYC,UACZF,EAAYG,OAAO,EAAG,KAAMF,EAChC,MACK,GAAIV,GAAmBE,EAAe,CAEvC,MAAMW,EAAYtC,EAAWnD,IAAI0E,GAC3BgB,EAAYvC,EAAWnD,IAAIyE,GAE3BkB,EAAY1C,EAAOjD,IAAI0F,GACvBE,EAAY3C,EAAOjD,IAAIyF,GAC7B,IAAKE,IAAcC,EACf,SAEJ3C,EAAO7C,OAAOqF,GACdpC,EAAWjD,OAAOqF,GAClBtC,EAAW/C,OAAOuF,EAAUA,EAAUrD,OAAS,IAC/Ca,EAAW/C,OAAOwF,EAAUA,EAAUtD,OAAS,IAC/Cc,EAAahD,OAAOwF,EAAU,IAC9BzC,EAAWgB,IAAIyB,EAAU,GAAIF,GAC7BE,EAAUL,UACVI,EAAUjD,QAAQkD,EACtB,MACK,GAAIjB,EAAmB,CAExB,MAAMkB,EAAazC,EAAapD,IAAIyE,GAC9BqB,EAAQ7C,EAAOjD,IAAI6F,GACzB,IAAKC,EACD,SAEJA,EAAMC,QAAQrB,GACdtB,EAAahD,OAAOqE,GACpBrB,EAAae,IAAIO,EAAKmB,EAC1B,MACK,GAAIjB,EAAiB,CAEtB,MAAMiB,EAAa1C,EAAWnD,IAAIyE,GAC5BqB,EAAQ7C,EAAOjD,IAAI6F,GACzB,IAAKC,EACD,SAEJA,EAAMpD,KAAKgC,GACXvB,EAAW/C,OAAOqE,GAClBtB,EAAWgB,IAAIO,EAAKmB,EACxB,MACK,GAAIhB,EAAiB,CAEtB,MAAMgB,EAAazC,EAAapD,IAAI0E,GAC9BoB,EAAQ7C,EAAOjD,IAAI6F,GACzB,IAAKC,EACD,SAEJA,EAAMC,QAAQtB,GACdrB,EAAahD,OAAOsE,GACpBtB,EAAae,IAAIM,EAAOoB,EAC5B,MACK,GAAIf,EAAe,CAEpB,MAAMe,EAAa1C,EAAWnD,IAAI0E,GAC5BoB,EAAQ7C,EAAOjD,IAAI6F,GACzB,IAAKC,EACD,SAEJA,EAAMpD,KAAK+B,GACXtB,EAAW/C,OAAOsE,GAClBvB,EAAWgB,IAAIM,EAAOoB,EAC1B,OA3IIzC,EAAae,IAAIM,EAAOvB,GACxBC,EAAWgB,IAAIO,EAAKxB,GACpBG,EAAWpD,IAAIiD,GACfD,EAAOkB,IAAIjB,EAAa,CAACuB,EAAOC,IAChCxB,GAwIR,CACA,MAAM8C,EAAc,GACpB,IAAK,MAAOC,EAAIH,KAAU7C,EAAQ,CAC9B,GAAII,EAAWmB,IAAIyB,GACf,SAEJ,MAAMzD,EAAW,GACX0D,EAAW,IAAInD,IACrB,IAAIoD,EAAU,EACd,IAAK,MAAMtD,KAASiD,EAAO,CACvB,MAAMM,EAASpD,EAAcH,GAC7BL,EAASE,KAAK0D,EAAO,GAAIA,EAAO,IAChCF,EAAS/B,IAAIgC,IAAWtD,EAC5B,CACA,MAAMwD,EAAS,IAAO7D,GACtB,IAAK,MAAMK,KAASwD,EAAQ,CACxB,MAAMC,EAAYJ,EAASlG,IAAI6C,GAC/B,QAAkB0D,IAAdD,EACA,MAAM,IAAIE,MAAM,cAEpBR,EAAYtD,KAAK4D,EACrB,CACJ,CACA,OAAON,CACX,CACA,6BAAA9D,GAEI1C,KAAKuB,yBAA2B,IAAI,UACpC,MAAM0F,EAAQ,IAAI,UAAc,EAAG,EAAG,GAChCC,EAAQ,IAAI,UAAc,EAAG,EAAG,GAChCC,EAAQnH,KAAKyB,OAAOI,OACpBuF,EAAM,IAAI,UAChBpH,KAAKyB,OAAO4F,cAAcD,GACF,MAApBpH,KAAKgC,WACLiF,EAAMK,aAAaJ,EAAOC,GAED,MAApBnH,KAAKgC,WACVkF,EAAMI,aAAaH,EAAOF,GAED,MAApBjH,KAAKgC,aAKViF,EAAMK,aAAaJ,EAAOC,GAAOI,YACjCL,EAAMI,aAAaH,EAAOF,IAG9BjH,KAAKuB,yBAAyBiG,UAAU,CACpCP,EAAMvF,EAAGuF,EAAMtF,EAAGsF,EAAMrF,EAAG,EAC3BsF,EAAMxF,EAAGwF,EAAMvF,EAAGuF,EAAMtF,EAAG,EAC3BuF,EAAMzF,EAAGyF,EAAMxF,EAAGwF,EAAMvF,EAAG,EAC3BwF,EAAI1F,EAAG0F,EAAIzF,EAAGyF,EAAIxF,EAAG,IAEzB5B,KAAKuB,yBAAyBkG,QAClC,CACA,QAAApH,GACI,MAAMqH,EAAW1H,KAAKM,YAAYoH,SAClC,OAAI1H,KAAK2H,WAAaD,aAAoB,IACtBA,EAASE,eAAeC,cACzBC,eAAe9H,KAAK2H,WAEhC,IACX,E,4DCpVG,MAAMI,UAAmB,KAC5B,WAAA9G,CAAYC,EAAY8G,EAAQnG,EAAQT,EAAU6G,GAC9CC,MAAMhH,EAAY8G,EAAQnG,EAAQT,EAAU,GAAG,GAK/CpB,KAAKmI,mBAAqB,GAC1BnI,KAAKoI,YAAc,EACnBpI,KAAKqI,eAAiB,EACtBrI,KAAKsI,WAAaC,UACdvI,KAAKwI,MAAMC,iBAAkB,QACvBzI,KAAKwI,MAAMlG,SACbtC,KAAK0I,WACL1I,KAAKwI,MAAMG,aAAc,EAC7B,EAGJ3I,KAAKsC,OAASiG,UACV,IAAKvI,KAAK4I,QACN,OACJ5I,KAAKyB,OAAOoH,8BAA8B7I,KAAK6B,OAAQ7B,KAAK8I,QAAQ9H,UAEpE,MAAM+H,EAAMC,KAAKD,MACb/I,KAAKoI,WAAapI,KAAKmI,mBAAqBY,GAC5C/I,KAAKoI,WAAaW,QACZ/I,KAAKwI,MAAMlG,WAEY,IAAxBtC,KAAKqI,gBACVrI,KAAKqI,cAAgBY,OAAOC,YAAW,KACnClJ,KAAKsC,SACLtC,KAAKqI,eAAiB,CAAC,GACxBrI,KAAKmI,oBACZ,EAEJnI,KAAKmJ,UAAY,KACbnJ,KAAKwI,MAAMG,aAAc,CAAK,EAElC3I,KAAKwI,MAAQ,IAAI,IAActH,EAAYlB,KAAKyB,OAAQwG,GACxDjI,KAAKoJ,gBAAe,GACpBpJ,KAAKwI,MAAMa,YAAW,GACtBrJ,KAAKsJ,gBAAgB7I,IAAIT,KAAKsI,YAC9BtI,KAAKuJ,kBAAkB9I,IAAIT,KAAKmJ,UACpC,CAEA,WAAIP,CAAQY,GACRxJ,KAAKyJ,SAAWD,EAChBxJ,KAAKkB,WAAWwG,SAASgC,YAAYF,EAAOxJ,KAAKyB,OACrD,CAEA,WAAImH,GACA,OAAOV,MAAMU,OACjB,CAEA,aAAMvG,SACI6F,MAAM7F,gBACNrC,KAAKwI,MAAMnG,SACrB,CAEA,gBAAMsH,CAAWH,GACbtB,MAAMU,QAAUY,EACZA,SACMxJ,KAAKsC,QAEnB,CACA,gBAAM+G,CAAWG,GACbtB,MAAMnI,QAAUyJ,EAChBxJ,KAAKoJ,eAAeI,SACdxJ,KAAKwI,MAAMa,YAAW,EAChC,E,6DCzEG,MAAMO,UAAoB,KAC7B,WAAA3I,CAAYC,GACRgH,MAAMhH,GACNlB,KAAK6J,KAAO,cAEZ7J,KAAK8J,WAAa,IAAI,KACtB9J,KAAK4I,SAAU,EACf5I,KAAK+J,QAAU,CAAC,EAChB/J,KAAKgK,qBAAuB,IAAI,EAAAC,kBAAkB,CAC9CC,MAAO,EACPC,UAAW,OAEfnK,KAAKoK,cAAgB,IAAI,KACzBpK,KAAKqK,eAAiB,IAAI,IAC9B,CACA,GAAA7J,GACI,OAAOR,KAAK+J,OAChB,CACA,YAAMzH,CAAOgI,SACHtK,KAAKqK,eAAeE,QAAQvK,KAAK+J,eACjC/J,KAAKoK,cAAcG,QAAQvK,KAAK+J,QAC1C,CAEA,MAAAS,CAAOX,EAAMnJ,EAAQ+J,EAAezK,KAAKgK,qBAAsBU,EAAcC,GACzE,IAAK,MAAM1K,KAAQS,EACVT,EAAKY,SAAS+J,YACf3K,EAAKY,SAASgK,oBAEtB,MAAMnD,EAAW1H,KAAKkB,WAAWwG,SACjC+C,EAAaK,eAAiBpD,EAASoD,eACvC,MAAMC,EAAW,CACblB,OACAY,eACA/J,SACAgK,eACAC,kBACAK,UAAW,CAAC,GAGhB,OADAhL,KAAK+J,QAAQF,GAAQkB,EACdA,CACX,CACA,aAAM1I,GACF,MAAM4F,EAASgD,OAAOC,KAAKlL,KAAK+J,SAChC,IAAK,MAAM3J,KAAS6H,EAChBjI,KAAKmL,YAAY/K,GAErBJ,KAAK+J,QAAU,CAAC,QACV/J,KAAK8J,WAAWS,UACtBvK,KAAK8J,WAAWsB,OACpB,CACA,WAAAD,CAAY1E,EAAI4E,GAAmB,GAC/B,MAAMjL,EAAQJ,KAAK+J,QAAQtD,GACvBrG,IACAA,EAAMM,OAAO4K,QACTD,IACAjL,EAAMqK,aAAapI,UACnBjC,EAAMsK,cAAcrI,UACpBjC,EAAMuK,iBAAiBtI,mBAGxBrC,KAAK+J,QAAQtD,EACxB,E","sources":["webpack://client-app/./node_modules/openbim-components/src/navigation/EdgesClipper/src/clipping-fills.js","webpack://client-app/./node_modules/openbim-components/src/navigation/EdgesClipper/src/edges-plane.js","webpack://client-app/./node_modules/openbim-components/src/navigation/EdgesClipper/src/edges-styles.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport earcut from \"earcut\";\r\nimport { PostproductionRenderer } from \"../../PostproductionRenderer\";\r\nexport class ClippingFills {\r\n get visible() {\r\n return this.mesh.parent !== null;\r\n }\r\n set visible(value) {\r\n const style = this.getStyle();\r\n if (value) {\r\n const scene = this._components.scene.get();\r\n scene.add(this.mesh);\r\n if (style) {\r\n style.meshes.add(this.mesh);\r\n }\r\n }\r\n else {\r\n this.mesh.removeFromParent();\r\n if (style) {\r\n style.meshes.delete(this.mesh);\r\n }\r\n }\r\n }\r\n set geometry(geometry) {\r\n this._geometry = geometry;\r\n this.mesh.geometry.attributes.position = geometry.attributes.position;\r\n }\r\n constructor(components, plane, geometry, material) {\r\n // readonly worker: Worker;\r\n this.mesh = new THREE.Mesh(new THREE.BufferGeometry());\r\n this._precission = 10000;\r\n this._tempVector = new THREE.Vector3();\r\n // Used to work in the 2D coordinate system of the plane\r\n this._plane2DCoordinateSystem = new THREE.Matrix4();\r\n this._components = components;\r\n this.mesh.material = material;\r\n this.mesh.frustumCulled = false;\r\n this._plane = plane;\r\n const { x, y, z } = plane.normal;\r\n if (Math.abs(x) === 1) {\r\n this._planeAxis = \"x\";\r\n }\r\n else if (Math.abs(y) === 1) {\r\n this._planeAxis = \"y\";\r\n }\r\n else if (Math.abs(z) === 1) {\r\n this._planeAxis = \"z\";\r\n }\r\n this._geometry = geometry;\r\n this.mesh.geometry.attributes.position = geometry.attributes.position;\r\n // To prevent clipping plane overlapping the filling mesh\r\n const offset = plane.normal.clone().multiplyScalar(0.01);\r\n this.mesh.position.copy(offset);\r\n this.visible = true;\r\n }\r\n dispose() {\r\n const style = this.getStyle();\r\n if (style) {\r\n style.meshes.delete(this.mesh);\r\n }\r\n this.mesh.geometry.dispose();\r\n this.mesh.removeFromParent();\r\n this.mesh.geometry = null;\r\n this.mesh = null;\r\n this._plane = null;\r\n this._geometry = null;\r\n }\r\n update(trianglesIndices) {\r\n const buffer = this._geometry.attributes.position.array;\r\n if (!buffer)\r\n return;\r\n this.updatePlane2DCoordinateSystem();\r\n const allIndices = [];\r\n let currentTriangle = 0;\r\n for (let i = 0; i < trianglesIndices.length; i++) {\r\n const nextTriangle = trianglesIndices[i];\r\n const vertices = [];\r\n for (let j = currentTriangle; j < nextTriangle; j += 2) {\r\n vertices.push(j * 3);\r\n }\r\n const indices = this.computeFill(vertices, buffer);\r\n for (const index of indices) {\r\n allIndices.push(index);\r\n }\r\n currentTriangle = nextTriangle;\r\n }\r\n this.mesh.geometry.setIndex(allIndices);\r\n }\r\n computeFill(vertices, buffer) {\r\n const indices = new Map();\r\n const all2DVertices = {};\r\n const shapes = new Map();\r\n let nextShapeID = 0;\r\n const shapesEnds = new Map();\r\n const shapesStarts = new Map();\r\n const openShapes = new Set();\r\n const p = this._precission;\r\n for (let i = 0; i < vertices.length; i++) {\r\n // Convert vertices to indices\r\n const startVertexIndex = vertices[i];\r\n let x1 = 0;\r\n let y1 = 0;\r\n let x2 = 0;\r\n let y2 = 0;\r\n const globalX1 = buffer[startVertexIndex];\r\n const globalY1 = buffer[startVertexIndex + 1];\r\n const globalZ1 = buffer[startVertexIndex + 2];\r\n const globalX2 = buffer[startVertexIndex + 3];\r\n const globalY2 = buffer[startVertexIndex + 4];\r\n const globalZ2 = buffer[startVertexIndex + 5];\r\n this._tempVector.set(globalX1, globalY1, globalZ1);\r\n this._tempVector.applyMatrix4(this._plane2DCoordinateSystem);\r\n x1 = Math.trunc(this._tempVector.x * p) / p;\r\n y1 = Math.trunc(this._tempVector.y * p) / p;\r\n this._tempVector.set(globalX2, globalY2, globalZ2);\r\n this._tempVector.applyMatrix4(this._plane2DCoordinateSystem);\r\n x2 = Math.trunc(this._tempVector.x * p) / p;\r\n y2 = Math.trunc(this._tempVector.y * p) / p;\r\n if (x1 === x2 && y1 === y2) {\r\n continue;\r\n }\r\n const startCode = `${x1}|${y1}`;\r\n const endCode = `${x2}|${y2}`;\r\n if (!indices.has(startCode)) {\r\n indices.set(startCode, startVertexIndex / 3);\r\n }\r\n if (!indices.has(endCode)) {\r\n indices.set(endCode, startVertexIndex / 3 + 1);\r\n }\r\n const start = indices.get(startCode);\r\n const end = indices.get(endCode);\r\n all2DVertices[start] = [x1, y1];\r\n all2DVertices[end] = [x2, y2];\r\n const startMatchesStart = shapesStarts.has(start);\r\n const startMatchesEnd = shapesEnds.has(start);\r\n const endMatchesStart = shapesStarts.has(end);\r\n const endMatchesEnd = shapesEnds.has(end);\r\n const noMatches = !startMatchesStart &&\r\n !startMatchesEnd &&\r\n !endMatchesStart &&\r\n !endMatchesEnd;\r\n if (noMatches) {\r\n // New shape\r\n shapesStarts.set(start, nextShapeID);\r\n shapesEnds.set(end, nextShapeID);\r\n openShapes.add(nextShapeID);\r\n shapes.set(nextShapeID, [start, end]);\r\n nextShapeID++;\r\n }\r\n else if (startMatchesStart && endMatchesEnd) {\r\n // Close shape or merge 2 shapes\r\n const startIndex = shapesStarts.get(start);\r\n const endIndex = shapesEnds.get(end);\r\n const isShapeMerge = startIndex !== endIndex;\r\n if (isShapeMerge) {\r\n // merge start to end\r\n const endShape = shapes.get(endIndex);\r\n const startShape = shapes.get(startIndex);\r\n if (!endShape || !startShape) {\r\n continue;\r\n }\r\n shapes.delete(startIndex);\r\n openShapes.delete(startIndex);\r\n shapesEnds.set(startShape[startShape.length - 1], endIndex);\r\n shapesEnds.delete(endShape[endShape.length - 1]);\r\n for (const index of startShape) {\r\n endShape.push(index);\r\n }\r\n }\r\n else {\r\n openShapes.delete(endIndex);\r\n }\r\n shapesStarts.delete(start);\r\n shapesEnds.delete(end);\r\n }\r\n else if (startMatchesEnd && endMatchesStart) {\r\n // Close shape or merge 2 shapes\r\n const startIndex = shapesStarts.get(end);\r\n const endIndex = shapesEnds.get(start);\r\n const isShapeMerge = startIndex !== endIndex;\r\n if (isShapeMerge) {\r\n // merge start to end\r\n const endShape = shapes.get(endIndex);\r\n const startShape = shapes.get(startIndex);\r\n if (!endShape || !startShape) {\r\n continue;\r\n }\r\n shapes.delete(startIndex);\r\n openShapes.delete(startIndex);\r\n shapesEnds.set(startShape[startShape.length - 1], endIndex);\r\n shapesEnds.delete(endShape[endShape.length - 1]);\r\n for (const index of startShape) {\r\n endShape.push(index);\r\n }\r\n }\r\n else {\r\n openShapes.delete(endIndex);\r\n }\r\n shapesStarts.delete(end);\r\n shapesEnds.delete(start);\r\n }\r\n else if (startMatchesStart && endMatchesStart) {\r\n // Merge 2 shapes, mirroring one of them\r\n const startIndex1 = shapesStarts.get(end);\r\n const startIndex2 = shapesStarts.get(start);\r\n // merge start to end\r\n const startShape2 = shapes.get(startIndex2);\r\n const startShape1 = shapes.get(startIndex1);\r\n if (!startShape2 || !startShape1) {\r\n continue;\r\n }\r\n shapes.delete(startIndex1);\r\n openShapes.delete(startIndex1);\r\n shapesStarts.delete(startShape2[0]);\r\n shapesStarts.delete(startShape1[0]);\r\n shapesEnds.delete(startShape1[startShape1.length - 1]);\r\n shapesStarts.set(startShape1[startShape1.length - 1], startIndex2);\r\n startShape1.reverse();\r\n startShape2.splice(0, 0, ...startShape1);\r\n }\r\n else if (startMatchesEnd && endMatchesEnd) {\r\n // Merge 2 shapes, mirroring one of them\r\n const endIndex1 = shapesEnds.get(end);\r\n const endIndex2 = shapesEnds.get(start);\r\n // merge start to end\r\n const endShape2 = shapes.get(endIndex2);\r\n const endShape1 = shapes.get(endIndex1);\r\n if (!endShape2 || !endShape1) {\r\n continue;\r\n }\r\n shapes.delete(endIndex1);\r\n openShapes.delete(endIndex1);\r\n shapesEnds.delete(endShape2[endShape2.length - 1]);\r\n shapesEnds.delete(endShape1[endShape1.length - 1]);\r\n shapesStarts.delete(endShape1[0]);\r\n shapesEnds.set(endShape1[0], endIndex2);\r\n endShape1.reverse();\r\n endShape2.push(...endShape1);\r\n }\r\n else if (startMatchesStart) {\r\n // existing contour on start - start\r\n const shapeIndex = shapesStarts.get(start);\r\n const shape = shapes.get(shapeIndex);\r\n if (!shape) {\r\n continue;\r\n }\r\n shape.unshift(end);\r\n shapesStarts.delete(start);\r\n shapesStarts.set(end, shapeIndex);\r\n }\r\n else if (startMatchesEnd) {\r\n // existing contour on start - end\r\n const shapeIndex = shapesEnds.get(start);\r\n const shape = shapes.get(shapeIndex);\r\n if (!shape) {\r\n continue;\r\n }\r\n shape.push(end);\r\n shapesEnds.delete(start);\r\n shapesEnds.set(end, shapeIndex);\r\n }\r\n else if (endMatchesStart) {\r\n // existing contour on end - start\r\n const shapeIndex = shapesStarts.get(end);\r\n const shape = shapes.get(shapeIndex);\r\n if (!shape) {\r\n continue;\r\n }\r\n shape.unshift(start);\r\n shapesStarts.delete(end);\r\n shapesStarts.set(start, shapeIndex);\r\n }\r\n else if (endMatchesEnd) {\r\n // existing contour on end - end\r\n const shapeIndex = shapesEnds.get(end);\r\n const shape = shapes.get(shapeIndex);\r\n if (!shape) {\r\n continue;\r\n }\r\n shape.push(start);\r\n shapesEnds.delete(end);\r\n shapesEnds.set(start, shapeIndex);\r\n }\r\n }\r\n const trueIndices = [];\r\n for (const [id, shape] of shapes) {\r\n if (openShapes.has(id)) {\r\n continue;\r\n }\r\n const vertices = [];\r\n const indexMap = new Map();\r\n let counter = 0;\r\n for (const index of shape) {\r\n const vertex = all2DVertices[index];\r\n vertices.push(vertex[0], vertex[1]);\r\n indexMap.set(counter++, index);\r\n }\r\n const result = earcut(vertices);\r\n for (const index of result) {\r\n const trueIndex = indexMap.get(index);\r\n if (trueIndex === undefined) {\r\n throw new Error(\"Map error!\");\r\n }\r\n trueIndices.push(trueIndex);\r\n }\r\n }\r\n return trueIndices;\r\n }\r\n updatePlane2DCoordinateSystem() {\r\n // Assuming the normal of the plane is called Z\r\n this._plane2DCoordinateSystem = new THREE.Matrix4();\r\n const xAxis = new THREE.Vector3(1, 0, 0);\r\n const yAxis = new THREE.Vector3(0, 1, 0);\r\n const zAxis = this._plane.normal;\r\n const pos = new THREE.Vector3();\r\n this._plane.coplanarPoint(pos);\r\n if (this._planeAxis === \"x\") {\r\n xAxis.crossVectors(yAxis, zAxis);\r\n }\r\n else if (this._planeAxis === \"y\") {\r\n yAxis.crossVectors(zAxis, xAxis);\r\n }\r\n else if (this._planeAxis === \"z\") {\r\n // Axes XYZ stay the same\r\n }\r\n else {\r\n // Non-orthogonal to cardinal axis\r\n xAxis.crossVectors(yAxis, zAxis).normalize();\r\n yAxis.crossVectors(zAxis, xAxis);\r\n }\r\n // prettier-ignore\r\n this._plane2DCoordinateSystem.fromArray([\r\n xAxis.x, xAxis.y, xAxis.z, 0,\r\n yAxis.x, yAxis.y, yAxis.z, 0,\r\n zAxis.x, zAxis.y, zAxis.z, 0,\r\n pos.x, pos.y, pos.z, 1,\r\n ]);\r\n this._plane2DCoordinateSystem.invert();\r\n }\r\n getStyle() {\r\n const renderer = this._components.renderer;\r\n if (this.styleName && renderer instanceof PostproductionRenderer) {\r\n const effects = renderer.postproduction.customEffects;\r\n return effects.outlinedMeshes[this.styleName];\r\n }\r\n return null;\r\n }\r\n}\r\n//# sourceMappingURL=clipping-fills.js.map","import { SimplePlane } from \"../../../core\";\r\nimport { ClippingEdges } from \"./clipping-edges\";\r\n/**\r\n * A more advanced version of {@link SimpleClipper} that also includes\r\n * {@link ClippingEdges} with customizable lines.\r\n */\r\nexport class EdgesPlane extends SimplePlane {\r\n constructor(components, origin, normal, material, styles) {\r\n super(components, origin, normal, material, 5, false);\r\n /**\r\n * The max rate in milliseconds at which edges can be regenerated.\r\n * To disable this behaviour set this to 0.\r\n */\r\n this.edgesMaxUpdateRate = 50;\r\n this.lastUpdate = -1;\r\n this.updateTimeout = -1;\r\n this.updateFill = async () => {\r\n this.edges.fillNeedsUpdate = true;\r\n await this.edges.update();\r\n if (this._visible) {\r\n this.edges.fillVisible = true;\r\n }\r\n };\r\n /** {@link Updateable.update} */\r\n this.update = async () => {\r\n if (!this.enabled)\r\n return;\r\n this._plane.setFromNormalAndCoplanarPoint(this.normal, this._helper.position);\r\n // Rate limited edges update\r\n const now = Date.now();\r\n if (this.lastUpdate + this.edgesMaxUpdateRate < now) {\r\n this.lastUpdate = now;\r\n await this.edges.update();\r\n }\r\n else if (this.updateTimeout === -1) {\r\n this.updateTimeout = window.setTimeout(() => {\r\n this.update();\r\n this.updateTimeout = -1;\r\n }, this.edgesMaxUpdateRate);\r\n }\r\n };\r\n this.hideFills = () => {\r\n this.edges.fillVisible = false;\r\n };\r\n this.edges = new ClippingEdges(components, this._plane, styles);\r\n this.toggleControls(true);\r\n this.edges.setVisible(true);\r\n this.onDraggingEnded.add(this.updateFill);\r\n this.onDraggingStarted.add(this.hideFills);\r\n }\r\n /** {@link Component.enabled} */\r\n set enabled(state) {\r\n this._enabled = state;\r\n this.components.renderer.togglePlane(state, this._plane);\r\n }\r\n /** {@link Component.enabled} */\r\n get enabled() {\r\n return super.enabled;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n await super.dispose();\r\n await this.edges.dispose();\r\n }\r\n /** {@link Component.enabled} */\r\n async setEnabled(state) {\r\n super.enabled = state;\r\n if (state) {\r\n await this.update();\r\n }\r\n }\r\n async setVisible(state) {\r\n super.visible = state;\r\n this.toggleControls(state);\r\n await this.edges.setVisible(true);\r\n }\r\n}\r\n//# sourceMappingURL=edges-plane.js.map","import { LineBasicMaterial } from \"three\";\r\nimport { Component, Event } from \"../../../base-types\";\r\nexport class EdgesStyles extends Component {\r\n constructor(components) {\r\n super(components);\r\n this.name = \"EdgesStyles\";\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.enabled = true;\r\n this._styles = {};\r\n this._defaultLineMaterial = new LineBasicMaterial({\r\n color: 0x000000,\r\n linewidth: 0.001,\r\n });\r\n this.onAfterUpdate = new Event();\r\n this.onBeforeUpdate = new Event();\r\n }\r\n get() {\r\n return this._styles;\r\n }\r\n async update(_delta) {\r\n await this.onBeforeUpdate.trigger(this._styles);\r\n await this.onAfterUpdate.trigger(this._styles);\r\n }\r\n // Creates a new style that applies to all clipping edges for generic models\r\n create(name, meshes, lineMaterial = this._defaultLineMaterial, fillMaterial, outlineMaterial) {\r\n for (const mesh of meshes) {\r\n if (!mesh.geometry.boundsTree)\r\n mesh.geometry.computeBoundsTree();\r\n }\r\n const renderer = this.components.renderer;\r\n lineMaterial.clippingPlanes = renderer.clippingPlanes;\r\n const newStyle = {\r\n name,\r\n lineMaterial,\r\n meshes,\r\n fillMaterial,\r\n outlineMaterial,\r\n fragments: {},\r\n };\r\n this._styles[name] = newStyle;\r\n return newStyle;\r\n }\r\n async dispose() {\r\n const styles = Object.keys(this._styles);\r\n for (const style of styles) {\r\n this.deleteStyle(style);\r\n }\r\n this._styles = {};\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n deleteStyle(id, disposeMaterials = true) {\r\n const style = this._styles[id];\r\n if (style) {\r\n style.meshes.clear();\r\n if (disposeMaterials) {\r\n style.lineMaterial.dispose();\r\n style.fillMaterial?.dispose();\r\n style.outlineMaterial?.dispose();\r\n }\r\n }\r\n delete this._styles[id];\r\n }\r\n}\r\n//# sourceMappingURL=edges-styles.js.map"],"names":["ClippingFills","visible","this","mesh","parent","value","style","getStyle","_components","scene","get","add","meshes","removeFromParent","delete","geometry","_geometry","attributes","position","constructor","components","plane","material","_precission","_tempVector","_plane2DCoordinateSystem","frustumCulled","_plane","x","y","z","normal","Math","abs","_planeAxis","offset","clone","multiplyScalar","copy","dispose","update","trianglesIndices","buffer","array","updatePlane2DCoordinateSystem","allIndices","currentTriangle","i","length","nextTriangle","vertices","j","push","indices","computeFill","index","setIndex","Map","all2DVertices","shapes","nextShapeID","shapesEnds","shapesStarts","openShapes","Set","p","startVertexIndex","x1","y1","x2","y2","globalX1","globalY1","globalZ1","globalX2","globalY2","globalZ2","set","applyMatrix4","trunc","startCode","endCode","has","start","end","startMatchesStart","startMatchesEnd","endMatchesStart","endMatchesEnd","startIndex","endIndex","endShape","startShape","startIndex1","startIndex2","startShape2","startShape1","reverse","splice","endIndex1","endIndex2","endShape2","endShape1","shapeIndex","shape","unshift","trueIndices","id","indexMap","counter","vertex","result","trueIndex","undefined","Error","xAxis","yAxis","zAxis","pos","coplanarPoint","crossVectors","normalize","fromArray","invert","renderer","styleName","postproduction","customEffects","outlinedMeshes","EdgesPlane","origin","styles","super","edgesMaxUpdateRate","lastUpdate","updateTimeout","updateFill","async","edges","fillNeedsUpdate","_visible","fillVisible","enabled","setFromNormalAndCoplanarPoint","_helper","now","Date","window","setTimeout","hideFills","toggleControls","setVisible","onDraggingEnded","onDraggingStarted","state","_enabled","togglePlane","setEnabled","EdgesStyles","name","onDisposed","_styles","_defaultLineMaterial","LineBasicMaterial","color","linewidth","onAfterUpdate","onBeforeUpdate","_delta","trigger","create","lineMaterial","fillMaterial","outlineMaterial","boundsTree","computeBoundsTree","clippingPlanes","newStyle","fragments","Object","keys","deleteStyle","reset","disposeMaterials","clear"],"sourceRoot":""}