@ifc-lite/viewer 1.28.1 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/.turbo/turbo-build.log +36 -35
  2. package/CHANGELOG.md +114 -0
  3. package/dist/assets/{arrow-CXWhTnNT.js → arrow-fie-E7fe.js} +1 -1
  4. package/dist/assets/{basketViewActivator-Ce38DhXd.js → basketViewActivator-BHNb23Vw.js} +10 -10
  5. package/dist/assets/{bcf-Cv_O3JfD.js → bcf-C0XZ2DSl.js} +2 -2
  6. package/dist/assets/{cesium-CzZn5yVA.js → cesium-DezSO2mp.js} +658 -597
  7. package/dist/assets/{deflate-HbyMq59o.js → deflate-DvvFcUtV.js} +1 -1
  8. package/dist/assets/drawing-2d-CLn7Mtj8.js +257 -0
  9. package/dist/assets/{exporters-BuD3XRzB.js → exporters-CvORJOLn.js} +1560 -1505
  10. package/dist/assets/geometry.worker-B7X9DQQY.js +1 -0
  11. package/dist/assets/{geotiff-B2HA8Bwm.js → geotiff-fSD_sVw_.js} +12 -12
  12. package/dist/assets/{ids-DYUFMd5f.js → ids-BUOe5QQl.js} +951 -713
  13. package/dist/assets/idsValidation.worker-DEodXb0f.js +190468 -0
  14. package/dist/assets/ifc-lite_bg-CmMuB1zf.wasm +0 -0
  15. package/dist/assets/{index-n5O1QJMM.js → index-B6T42T86.js} +41695 -38118
  16. package/dist/assets/index-D0tqJL0X.css +1 -0
  17. package/dist/assets/{index.es-BKVIpZgL.js → index.es-YGMensDM.js} +11 -11
  18. package/dist/assets/{jpeg-C7hjKjPX.js → jpeg-0Sla88_N.js} +1 -1
  19. package/dist/assets/{jspdf.es.min-oWlFc42Y.js → jspdf.es.min-mnbLNj-p.js} +5 -5
  20. package/dist/assets/{lens-C4p1kQ0p.js → lens-DMnqMXpz.js} +1 -1
  21. package/dist/assets/{lerc-BfIOGhQz.js → lerc-C7xUDHpL.js} +1 -1
  22. package/dist/assets/{lzw-B0jRuuW5.js → lzw-CK480t0_.js} +1 -1
  23. package/dist/assets/{native-bridge-DpB-dtEn.js → native-bridge-sLWRanza.js} +2 -2
  24. package/dist/assets/{packbits-DVvBTC39.js → packbits-DcL4imYS.js} +1 -1
  25. package/dist/assets/parser.worker-BsGV6ml7.js +182 -0
  26. package/dist/assets/{pdf-dVIqI5ac.js → pdf-BARGfLmx.js} +12 -12
  27. package/dist/assets/raw-BMWh6mDy.js +1 -0
  28. package/dist/assets/{sandbox-qpJlrNN0.js → sandbox-BSiO04m8.js} +3852 -3095
  29. package/dist/assets/server-client-AlpWMVq9.js +741 -0
  30. package/dist/assets/{three-CQBzFWY2.js → three-SQm7uqwa.js} +1 -1
  31. package/dist/assets/{webimage-B394g0Tw.js → webimage-uy5DjZLk.js} +1 -1
  32. package/dist/assets/{xlsx-D-oHO76J.js → xlsx-D02ho69_.js} +10 -10
  33. package/dist/assets/{zstd-Bf38MwV2.js → zstd-DcR1TBwT.js} +1 -1
  34. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-Z2M4BF4E.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-35LM35A5.js} +2 -2
  35. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-I5NKQIWE.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-3R3BCVRR.js} +2 -2
  36. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-VCOHJNKB.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-44VKZ44M.js} +2 -2
  37. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-J6BM74AD.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-4LOVZYQ2.js} +2 -2
  38. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-LYLRYC4L.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-55KTRCCC.js} +2 -2
  39. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-Z4ERBZFB.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-5AJUPXGZ.js} +2 -2
  40. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-LBZ34MHQ.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-5EEMCPIO.js} +2 -2
  41. package/dist/cesium/node_modules/.pnpm/cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-5HZ2G332.js +26 -0
  42. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-5XHUDY37.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-6K4BWAPV.js} +1 -1
  43. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-FC6IYMYF.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-6LZUEMFX.js} +1 -1
  44. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-LOQDTQMX.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-6NPJZ3PS.js} +2 -2
  45. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-6WMLAJJP.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-A3K5FM7E.js} +2 -2
  46. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-FB7UV5BI.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-AP7AMWJA.js} +2 -2
  47. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-U3YGOX3C.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-AZCCS55A.js} +2 -2
  48. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-PPFUDJN4.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-BXPFAIYZ.js} +2 -2
  49. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-VXCJOT4W.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-C4NHPSO2.js} +2 -2
  50. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-DRBPXGI7.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-CJGWLCOV.js} +2 -2
  51. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-TSGIJVWH.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-E4MSZ45D.js} +2 -2
  52. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-XR7MN4PJ.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-FCRW2AGG.js} +2 -2
  53. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-2ZYB3DYT.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-FMWRN5G2.js} +2 -2
  54. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-5BC2Q3QW.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-FXWI4VL7.js} +2 -2
  55. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-XU6O4MRS.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-FYQCPFNB.js} +2 -2
  56. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-L7UE5MMF.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-G46AR6KP.js} +2 -2
  57. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-AXNBHUAG.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-GS4ZGDWD.js} +2 -2
  58. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-VXAZXMUX.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-GZABERXA.js} +2 -2
  59. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-EZSKHVA2.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-H6AHPUMX.js} +2 -2
  60. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-72KUXMWU.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-IPQQ2USK.js} +2 -2
  61. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-T3ZGSZKA.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-ITSDUOWL.js} +1 -1
  62. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-KG2GJUJT.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-J6WO2HA5.js} +1 -1
  63. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-IYRGNBSH.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-K3YIAZU7.js} +2 -2
  64. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-7NQYTTAU.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-K72DPWBT.js} +2 -2
  65. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-DC3K7YTH.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-LKQXJXNV.js} +1 -1
  66. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-MGPRMLLW.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-LTHJTGXC.js} +2 -2
  67. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-4M56RRIL.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-LUECBOIT.js} +2 -2
  68. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-236YIEYT.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-MUI5QV7K.js} +2 -2
  69. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-XEC656IT.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-OS2CBN2U.js} +2 -2
  70. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-IH7GXIUB.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-R5DFAOJG.js} +2 -2
  71. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-X4D5KUN5.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-R7QNYLFY.js} +2 -2
  72. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-WPD3MB6X.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-RH3WVPDR.js} +2 -2
  73. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-EYZUSGKM.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-RI3TXBVT.js} +2 -2
  74. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-ZY2KCIWI.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-RU2T2U4O.js} +2 -2
  75. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-XR53QRQS.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-SSYRCXAV.js} +2 -2
  76. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-TM6SYYHO.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-U4VWQPTS.js} +2 -2
  77. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-GXEQRH2R.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-UHTXIDKA.js} +2 -2
  78. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-XZBHEBLF.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-V74K6IQF.js} +2 -2
  79. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-OMUAZ3NM.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-VELRZYUL.js} +2 -2
  80. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-PQ3V63XF.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-VXS2FTO4.js} +2 -2
  81. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-PWBQN4GK.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-VZ4ER5HI.js} +2 -2
  82. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-EARRZPMO.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-WC7WZIXH.js} +2 -2
  83. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-GF67PEXE.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-WM6AKY6B.js} +2 -2
  84. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-VBYOXOSM.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-WTIPXHS3.js} +2 -2
  85. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-IPP3UFGH.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-WZYIA4NB.js} +2 -2
  86. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-A35GG5WJ.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-XEBZTQHW.js} +2 -2
  87. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-QOTMLO2T.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-XFWEZBPW.js} +2 -2
  88. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-NP26LKQA.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-YLWWFMFQ.js} +2 -2
  89. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-F3WJIFOO.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-YNBY2HFD.js} +1 -1
  90. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-EHC3BDVP.js → cesium@1.142.0/node_modules/cesium/Build/Cesium/Workers/chunk-ZQTDDQLY.js} +2 -2
  91. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/combineGeometry.js +2 -2
  92. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createBoxGeometry.js +2 -2
  93. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createBoxOutlineGeometry.js +2 -2
  94. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createCircleGeometry.js +2 -2
  95. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createCircleOutlineGeometry.js +2 -2
  96. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createCoplanarPolygonGeometry.js +2 -2
  97. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createCoplanarPolygonOutlineGeometry.js +2 -2
  98. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createCorridorGeometry.js +2 -2
  99. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createCorridorOutlineGeometry.js +2 -2
  100. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createCylinderGeometry.js +2 -2
  101. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createCylinderOutlineGeometry.js +2 -2
  102. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createEllipseGeometry.js +2 -2
  103. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createEllipseOutlineGeometry.js +2 -2
  104. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createEllipsoidGeometry.js +2 -2
  105. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createEllipsoidOutlineGeometry.js +2 -2
  106. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createFrustumGeometry.js +2 -2
  107. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createFrustumOutlineGeometry.js +2 -2
  108. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createGeometry.js +2 -2
  109. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createGroundPolylineGeometry.js +2 -2
  110. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createPlaneGeometry.js +2 -2
  111. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createPlaneOutlineGeometry.js +2 -2
  112. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createPolygonGeometry.js +2 -2
  113. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createPolygonOutlineGeometry.js +2 -2
  114. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createPolylineGeometry.js +2 -2
  115. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createPolylineVolumeGeometry.js +2 -2
  116. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createPolylineVolumeOutlineGeometry.js +2 -2
  117. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createRectangleGeometry.js +2 -2
  118. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createRectangleOutlineGeometry.js +2 -2
  119. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createSimplePolylineGeometry.js +2 -2
  120. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createSphereGeometry.js +2 -2
  121. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createSphereOutlineGeometry.js +2 -2
  122. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createTaskProcessorWorker.js +2 -2
  123. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createVectorTileClampedPolylines.js +2 -2
  124. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createVectorTileGeometries.js +2 -2
  125. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createVectorTilePoints.js +2 -2
  126. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createVectorTilePolygons.js +2 -2
  127. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createVectorTilePolylines.js +2 -2
  128. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createVerticesFromCesium3DTilesTerrain.js +2 -2
  129. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +2 -2
  130. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createVerticesFromHeightmap.js +2 -2
  131. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +2 -2
  132. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createWallGeometry.js +2 -2
  133. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/createWallOutlineGeometry.js +2 -2
  134. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/decodeDraco.js +2 -2
  135. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  136. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/decodeI3S.js +2 -2
  137. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/gaussianSplatSorter.js +2 -2
  138. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/gaussianSplatTextureGenerator.js +2 -2
  139. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/incrementallyBuildTerrainPicker.js +2 -2
  140. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/transcodeKTX2.js +2 -2
  141. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/transferTypedArrayTest.js +1 -1
  142. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/upsampleQuantizedTerrainMesh.js +2 -2
  143. package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +2 -2
  144. package/dist/index.html +11 -11
  145. package/package.json +50 -55
  146. package/src/components/viewer/CesiumOverlay.tsx +195 -8
  147. package/src/components/viewer/IDSPanel.tsx +23 -7
  148. package/src/components/viewer/MainToolbar.tsx +99 -41
  149. package/src/components/viewer/Section2DPanel.tsx +3 -3
  150. package/src/components/viewer/SunSkyPanel.tsx +363 -0
  151. package/src/components/viewer/ToolOverlays.tsx +5 -0
  152. package/src/components/viewer/Viewport.tsx +49 -1
  153. package/src/components/viewer/ViewportContainer.tsx +72 -6
  154. package/src/components/viewer/tools/SpaceSketchOverlay.tsx +872 -0
  155. package/src/components/viewer/useAnimationLoop.ts +19 -1
  156. package/src/disable-react-dev-perf-track.ts +38 -0
  157. package/src/hooks/has-entity-type.ts +33 -0
  158. package/src/hooks/ids/idsWorkerClient.ts +136 -0
  159. package/src/hooks/ingest/federationAlign.ts +1 -1
  160. package/src/hooks/ingest/pointCloudIngest.ts +22 -98
  161. package/src/hooks/ingest/viewerModelIngest.ts +8 -13
  162. package/src/hooks/useAlignmentLines3D.ts +5 -0
  163. package/src/hooks/useConstructionUnderlay.ts +94 -0
  164. package/src/hooks/useDrawingGeneration.ts +119 -24
  165. package/src/hooks/useGridLines3D.ts +4 -0
  166. package/src/hooks/useIDS.ts +77 -13
  167. package/src/hooks/useIfcCache.ts +1 -1
  168. package/src/hooks/useIfcFederation.ts +1 -1
  169. package/src/hooks/useIfcServer.ts +1 -1
  170. package/src/hooks/useModelSelection.ts +1 -1
  171. package/src/hooks/useSolarEnvironment.ts +114 -0
  172. package/src/hooks/useSolarSweep.ts +66 -0
  173. package/src/hooks/useSymbolicAnnotations.ts +10 -0
  174. package/src/hooks/useViewerSelectors.ts +1 -1
  175. package/src/lib/geo/cesium-sun.ts +277 -0
  176. package/src/lib/geo/solar-direction.test.ts +70 -0
  177. package/src/lib/geo/solar-direction.ts +94 -0
  178. package/src/lib/lighting-presets.ts +128 -0
  179. package/src/lib/recent-files.ts +4 -24
  180. package/src/lib/solar-time.ts +55 -0
  181. package/src/main.tsx +5 -0
  182. package/src/store/index.ts +8 -0
  183. package/src/store/slices/annotationsSlice.test.ts +0 -16
  184. package/src/store/slices/cesiumSlice.ts +3 -3
  185. package/src/store/slices/dataSlice.test.ts +0 -40
  186. package/src/store/slices/environmentSlice.ts +101 -0
  187. package/src/store/slices/idsSlice.ts +6 -1
  188. package/src/store/slices/mutationSlice.ts +21 -0
  189. package/src/store/slices/selectionSlice.test.ts +0 -43
  190. package/src/store/slices/solarSlice.ts +121 -0
  191. package/src/store/slices/uiSlice.ts +1 -0
  192. package/src/store/slices/visibilitySlice.test.ts +15 -45
  193. package/src/store/slices/visibilitySlice.ts +20 -0
  194. package/src/utils/loadingUtils.ts +1 -1
  195. package/src/workers/idsValidation.worker.ts +98 -0
  196. package/dist/assets/drawing-2d-DW98umlt.js +0 -257
  197. package/dist/assets/geometry.worker-TH3fCCoY.js +0 -1
  198. package/dist/assets/ifc-lite_bg-BEA5DLmg.wasm +0 -0
  199. package/dist/assets/index-E9wB0zWt.css +0 -1
  200. package/dist/assets/parser.worker-BDsWQ6rc.js +0 -182
  201. package/dist/assets/raw-C0ZJYGmN.js +0 -1
  202. package/dist/assets/server-client-DVZ2huNS.js +0 -719
  203. package/dist/cesium/node_modules/.pnpm/cesium@1.141.0/node_modules/cesium/Build/Cesium/Workers/chunk-SP35IT73.js +0 -26
  204. package/src/components/ui/context-menu.tsx +0 -174
  205. package/src/store.ts +0 -80
  206. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +0 -0
  207. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +0 -0
  208. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +0 -0
  209. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +0 -0
  210. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +0 -0
  211. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +0 -0
  212. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +0 -0
  213. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +0 -0
  214. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +0 -0
  215. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +0 -0
  216. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +0 -0
  217. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +0 -0
  218. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +0 -0
  219. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +0 -0
  220. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +0 -0
  221. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +0 -0
  222. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +0 -0
  223. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +0 -0
  224. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +0 -0
  225. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +0 -0
  226. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +0 -0
  227. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +0 -0
  228. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +0 -0
  229. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +0 -0
  230. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +0 -0
  231. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +0 -0
  232. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +0 -0
  233. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +0 -0
  234. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Images/bing_maps_credit.png +0 -0
  235. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Images/cesium_credit.png +0 -0
  236. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Images/google_earth_credit.png +0 -0
  237. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Images/ion-credit.png +0 -0
  238. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
  239. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
  240. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
  241. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
  242. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
  243. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
  244. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
  245. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
  246. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
  247. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
  248. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
  249. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
  250. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
  251. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
  252. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
  253. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
  254. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
  255. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
  256. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
  257. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
  258. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
  259. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
  260. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
  261. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
  262. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
  263. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
  264. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
  265. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
  266. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
  267. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
  268. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
  269. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
  270. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
  271. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
  272. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
  273. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
  274. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
  275. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
  276. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
  277. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
  278. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
  279. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
  280. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
  281. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
  282. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +0 -0
  283. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  284. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  285. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  286. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  287. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  288. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  289. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/airfield.png +0 -0
  290. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/airport.png +0 -0
  291. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/alcohol-shop.png +0 -0
  292. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/america-football.png +0 -0
  293. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/art-gallery.png +0 -0
  294. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/bakery.png +0 -0
  295. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/bank.png +0 -0
  296. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/bar.png +0 -0
  297. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/baseball.png +0 -0
  298. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/basketball.png +0 -0
  299. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/beer.png +0 -0
  300. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/bicycle.png +0 -0
  301. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/building.png +0 -0
  302. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/bus.png +0 -0
  303. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/cafe.png +0 -0
  304. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/camera.png +0 -0
  305. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/campsite.png +0 -0
  306. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/car.png +0 -0
  307. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/cemetery.png +0 -0
  308. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/cesium.png +0 -0
  309. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/chemist.png +0 -0
  310. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/cinema.png +0 -0
  311. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/circle-stroked.png +0 -0
  312. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/circle.png +0 -0
  313. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/city.png +0 -0
  314. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/clothing-store.png +0 -0
  315. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/college.png +0 -0
  316. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/commercial.png +0 -0
  317. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/cricket.png +0 -0
  318. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/cross.png +0 -0
  319. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/dam.png +0 -0
  320. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/danger.png +0 -0
  321. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/disability.png +0 -0
  322. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/dog-park.png +0 -0
  323. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/embassy.png +0 -0
  324. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/emergency-telephone.png +0 -0
  325. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/entrance.png +0 -0
  326. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/farm.png +0 -0
  327. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/fast-food.png +0 -0
  328. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/ferry.png +0 -0
  329. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/fire-station.png +0 -0
  330. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/fuel.png +0 -0
  331. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/garden.png +0 -0
  332. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/gift.png +0 -0
  333. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/golf.png +0 -0
  334. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/grocery.png +0 -0
  335. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/hairdresser.png +0 -0
  336. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/harbor.png +0 -0
  337. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/heart.png +0 -0
  338. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/heliport.png +0 -0
  339. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/hospital.png +0 -0
  340. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/ice-cream.png +0 -0
  341. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/industrial.png +0 -0
  342. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/land-use.png +0 -0
  343. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/laundry.png +0 -0
  344. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/library.png +0 -0
  345. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/lighthouse.png +0 -0
  346. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/lodging.png +0 -0
  347. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/logging.png +0 -0
  348. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/london-underground.png +0 -0
  349. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/marker-stroked.png +0 -0
  350. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/marker.png +0 -0
  351. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/minefield.png +0 -0
  352. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/mobilephone.png +0 -0
  353. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/monument.png +0 -0
  354. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/museum.png +0 -0
  355. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/music.png +0 -0
  356. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/oil-well.png +0 -0
  357. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/park.png +0 -0
  358. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/park2.png +0 -0
  359. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/parking-garage.png +0 -0
  360. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/parking.png +0 -0
  361. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/pharmacy.png +0 -0
  362. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/pitch.png +0 -0
  363. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/place-of-worship.png +0 -0
  364. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/playground.png +0 -0
  365. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/police.png +0 -0
  366. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/polling-place.png +0 -0
  367. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/post.png +0 -0
  368. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/prison.png +0 -0
  369. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/rail-above.png +0 -0
  370. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/rail-light.png +0 -0
  371. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/rail-metro.png +0 -0
  372. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/rail-underground.png +0 -0
  373. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/rail.png +0 -0
  374. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/religious-christian.png +0 -0
  375. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/religious-jewish.png +0 -0
  376. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/religious-muslim.png +0 -0
  377. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/restaurant.png +0 -0
  378. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/roadblock.png +0 -0
  379. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/rocket.png +0 -0
  380. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/school.png +0 -0
  381. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/scooter.png +0 -0
  382. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/shop.png +0 -0
  383. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/skiing.png +0 -0
  384. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/slaughterhouse.png +0 -0
  385. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/soccer.png +0 -0
  386. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/square-stroked.png +0 -0
  387. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/square.png +0 -0
  388. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/star-stroked.png +0 -0
  389. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/star.png +0 -0
  390. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/suitcase.png +0 -0
  391. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/swimming.png +0 -0
  392. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/telephone.png +0 -0
  393. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/tennis.png +0 -0
  394. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/theatre.png +0 -0
  395. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/toilets.png +0 -0
  396. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/town-hall.png +0 -0
  397. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/town.png +0 -0
  398. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/triangle-stroked.png +0 -0
  399. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/triangle.png +0 -0
  400. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/village.png +0 -0
  401. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/warehouse.png +0 -0
  402. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/waste-basket.png +0 -0
  403. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/water.png +0 -0
  404. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/wetland.png +0 -0
  405. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/maki/zoo.png +0 -0
  406. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/moonSmall.jpg +0 -0
  407. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/pin.svg +0 -0
  408. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/waterNormals.jpg +0 -0
  409. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/Textures/waterNormalsSmall.jpg +0 -0
  410. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Assets/approximateTerrainHeights.json +0 -0
  411. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/ThirdParty/Workers/package.json +0 -0
  412. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/ThirdParty/Workers/zip-web-worker.js +0 -0
  413. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/ThirdParty/basis_transcoder.wasm +0 -0
  414. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/ThirdParty/draco_decoder.wasm +0 -0
  415. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/ThirdParty/google-earth-dbroot-parser.js +0 -0
  416. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/ThirdParty/wasm_splats_bg.wasm +0 -0
  417. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/ThirdParty/zip-module.wasm +0 -0
  418. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Animation/Animation.css +0 -0
  419. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Animation/lighter.css +0 -0
  420. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +0 -0
  421. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/BaseLayerPicker/lighter.css +0 -0
  422. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +0 -0
  423. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/CesiumInspector/CesiumInspector.css +0 -0
  424. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/CesiumWidget/CesiumWidget.css +0 -0
  425. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/CesiumWidget/lighter.css +0 -0
  426. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/FullscreenButton/FullscreenButton.css +0 -0
  427. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Geocoder/Geocoder.css +0 -0
  428. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Geocoder/lighter.css +0 -0
  429. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +0 -0
  430. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
  431. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
  432. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
  433. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/azureAerial.png +0 -0
  434. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/azureRoads.png +0 -0
  435. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
  436. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
  437. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
  438. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
  439. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
  440. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/googleContour.png +0 -0
  441. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/googleRoadmap.png +0 -0
  442. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/googleSatellite.png +0 -0
  443. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/googleSatelliteLabels.png +0 -0
  444. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
  445. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
  446. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
  447. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
  448. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
  449. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
  450. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
  451. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
  452. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
  453. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
  454. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
  455. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/NavigationHelp/Mouse.svg +0 -0
  456. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +0 -0
  457. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +0 -0
  458. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/NavigationHelp/MouseRight.svg +0 -0
  459. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/NavigationHelp/Touch.svg +0 -0
  460. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +0 -0
  461. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +0 -0
  462. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +0 -0
  463. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +0 -0
  464. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
  465. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
  466. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/TimelineIcons.png +0 -0
  467. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Images/info-loading.gif +0 -0
  468. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/InfoBox/InfoBox.css +0 -0
  469. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/InfoBox/InfoBoxDescription.css +0 -0
  470. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css +0 -0
  471. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/NavigationHelpButton/lighter.css +0 -0
  472. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +0 -0
  473. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/ProjectionPicker/ProjectionPicker.css +0 -0
  474. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/SceneModePicker/SceneModePicker.css +0 -0
  475. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/SelectionIndicator/SelectionIndicator.css +0 -0
  476. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Timeline/Timeline.css +0 -0
  477. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Timeline/lighter.css +0 -0
  478. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/VRButton/VRButton.css +0 -0
  479. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/Viewer/Viewer.css +0 -0
  480. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/VoxelInspector/VoxelInspector.css +0 -0
  481. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/lighter.css +0 -0
  482. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/lighterShared.css +0 -0
  483. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/shared.css +0 -0
  484. /package/dist/cesium/node_modules/.pnpm/{cesium@1.141.0 → cesium@1.142.0}/node_modules/cesium/Build/Cesium/Widgets/widgets.css +0 -0
@@ -0,0 +1,98 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+
5
+ /**
6
+ * IDS validation worker.
7
+ *
8
+ * IDS validation is pure CPU work over the whole entity population — on
9
+ * the main thread it pins the UI (no progress paints, frame rate
10
+ * collapses) exactly like an unworkered parse would. Every other heavy
11
+ * stage in this viewer (STEP parse, geometry) already runs in a worker;
12
+ * this brings validation in line.
13
+ *
14
+ * The worker re-parses the IFC source bytes (~150ms for a 550k-entity
15
+ * model — negligible next to validation) into its own IfcDataStore so
16
+ * the main-thread store is never touched, then runs the shared
17
+ * `@ifc-lite/ids` validator with the canonical bridge accessor. The IDS
18
+ * XML is parsed on the main thread (workers have no DOMParser) and the
19
+ * plain IDSDocument is handed across; progress is streamed back as it
20
+ * happens.
21
+ */
22
+
23
+ import { IfcParser } from '@ifc-lite/parser';
24
+ import {
25
+ validateIDS,
26
+ createTranslationService,
27
+ type IDSDocument,
28
+ type IDSValidationReport,
29
+ type ValidationProgress,
30
+ } from '@ifc-lite/ids';
31
+ import { createDataAccessor } from '@ifc-lite/ids/bridge';
32
+
33
+ export interface IdsWorkerRequest {
34
+ type: 'validate';
35
+ id: number;
36
+ /** Raw IFC/STEP bytes — a SharedArrayBuffer is shared zero-copy. */
37
+ source: ArrayBuffer | SharedArrayBuffer;
38
+ /** IDS document already parsed on the main thread (no DOMParser here). */
39
+ document: IDSDocument;
40
+ schemaVersion: string;
41
+ modelId: string;
42
+ locale: 'en' | 'de' | 'fr';
43
+ includePassingEntities: boolean;
44
+ }
45
+
46
+ export type IdsWorkerResponse =
47
+ | { type: 'progress'; id: number; progress: ValidationProgress }
48
+ | { type: 'complete'; id: number; report: IDSValidationReport }
49
+ | { type: 'error'; id: number; message: string };
50
+
51
+ const post = (msg: IdsWorkerResponse) => {
52
+ (self as unknown as Worker).postMessage(msg);
53
+ };
54
+
55
+ self.onmessage = async (event: MessageEvent<IdsWorkerRequest>) => {
56
+ const req = event.data;
57
+ if (!req || req.type !== 'validate') return;
58
+
59
+ try {
60
+ const parser = new IfcParser();
61
+ // The worker owns this buffer; a SAB is shared by reference, a plain
62
+ // ArrayBuffer was copied by the caller, so parsing it here is safe.
63
+ const store = await parser.parseColumnar(req.source);
64
+ store.schemaVersion =
65
+ (req.schemaVersion as typeof store.schemaVersion) || store.schemaVersion;
66
+
67
+ const accessor = createDataAccessor(store);
68
+ const translator = createTranslationService(req.locale);
69
+
70
+ const report = await validateIDS(
71
+ req.document,
72
+ accessor,
73
+ {
74
+ modelId: req.modelId,
75
+ schemaVersion: store.schemaVersion,
76
+ entityCount: store.entityCount ?? accessor.getAllEntityIds().length,
77
+ },
78
+ {
79
+ translator,
80
+ includePassingEntities: req.includePassingEntities,
81
+ // Yield periodically so progress postMessages flush to the main
82
+ // thread incrementally instead of arriving in one burst at the
83
+ // end. The worker has no UI, but cross-thread message delivery
84
+ // still benefits from real event-loop turns.
85
+ yieldEveryMs: 30,
86
+ onProgress: (progress) => post({ type: 'progress', id: req.id, progress }),
87
+ }
88
+ );
89
+
90
+ post({ type: 'complete', id: req.id, report });
91
+ } catch (err) {
92
+ post({
93
+ type: 'error',
94
+ id: req.id,
95
+ message: err instanceof Error ? err.message : String(err),
96
+ });
97
+ }
98
+ };
@@ -1,257 +0,0 @@
1
- const Lt={projectionDepth:10,includeHiddenLines:!0,creaseAngle:30,scale:100};function U(n,t){return`${n}:${t}`}const S=1e-7;function Z(n,t,e){return{x:n,y:t,z:e}}function it(n,t){return{x:n.x-t.x,y:n.y-t.y,z:n.z-t.z}}function W(n,t){return n.x*t.x+n.y*t.y+n.z*t.z}function vt(n,t){return{x:n.y*t.z-n.z*t.y,y:n.z*t.x-n.x*t.z,z:n.x*t.y-n.y*t.x}}function kt(n){return Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)}function ot(n){const t=kt(n);return t<S?{x:0,y:0,z:0}:{x:n.x/t,y:n.y/t,z:n.z/t}}function j(n,t,e){return{x:n.x+e*(t.x-n.x),y:n.y+e*(t.y-n.y),z:n.z+e*(t.z-n.z)}}function z(n,t){return{x:n.x-t.x,y:n.y-t.y}}function Et(n,t){return n.x*t.x+n.y*t.y}function Tt(n){return Math.sqrt(n.x*n.x+n.y*n.y)}function D(n,t){const e=t.x-n.x,i=t.y-n.y;return Math.sqrt(e*e+i*i)}function st(n,t,e){return{x:n.x+e*(t.x-n.x),y:n.y+e*(t.y-n.y)}}function Dt(n){const t=Tt(n);return t<S?{x:0,y:0}:{x:n.x/t,y:n.y/t}}function rt(n,t){return n.x*t.y-n.y*t.x}function Rt(n){return D(n.start,n.end)}function J(n){return Dt(z(n.end,n.start))}function yt(){return{min:{x:1/0,y:1/0},max:{x:-1/0,y:-1/0}}}function G(n,t){return{min:{x:Math.min(n.min.x,t.x),y:Math.min(n.min.y,t.y)},max:{x:Math.max(n.max.x,t.x),y:Math.max(n.max.y,t.y)}}}function Wt(n,t){let e=G(n,t.start);return e=G(e,t.end),e}function zt(n){return{x:(n.min.x+n.max.x)/2,y:(n.min.y+n.max.y)/2}}function _t(n){return{x:n.max.x-n.min.x,y:n.max.y-n.min.y}}function N(n,t,e){return W(n,t)-e}function pt(n,t){switch(n){case"x":return{x:1,y:0,z:0};case"y":return{x:0,y:1,z:0};case"z":return{x:0,y:0,z:1}}}function mt(n){switch(n){case"x":return{u:"z",v:"y"};case"y":return{u:"x",v:"z"};case"z":return{u:"x",v:"y"}}}function V(n,t,e){const i=mt(t),s=n[i.u],o=n[i.v];return{x:e?-s:s,y:o}}function Y(n,t,e,i){const s=n.x-t.x,o=n.y-t.y,r=n.z-t.z;return{x:s*e.x+o*e.y+r*e.z,y:s*i.x+o*i.y+r*i.z}}function xt(n){if(n.length<3)return 0;let t=0;for(let e=0;e<n.length;e++){const i=(e+1)%n.length;t+=n[e].x*n[i].y,t-=n[i].x*n[e].y}return t/2}function bt(n){return xt(n)>0}function Ct(n){return[...n].reverse()}function Bt(n){return bt(n)?n:Ct(n)}function Nt(n){return bt(n)?Ct(n):n}class It{tolerance;constructor(t=1e-4){this.tolerance=t}buildPolygons(t){const e=new Map;for(const s of t){const o=U(s.modelIndex,s.entityId);e.has(o)||e.set(o,[]),e.get(o).push(s)}const i=[];for(const[s,o]of e){const r=this.buildEntityPolygons(o);i.push(r)}return i.flat()}buildEntityPolygons(t){if(t.length===0)return[];const e=t[0],{entityId:i,ifcType:s,modelIndex:o}=e,r=t.map(c=>({start:c.p0_2d,end:c.p1_2d,used:!1})),a=this.buildLoops(r);return a.length===0?[]:this.classifyLoops(a).map(c=>({polygon:{outer:c.outer,holes:c.holes},entityId:i,ifcType:s,modelIndex:o,isCut:!0}))}buildLoops(t){const e=[];for(;;){const i=t.findIndex(o=>!o.used);if(i===-1)break;const s=this.buildSingleLoop(t,i);if(s&&s.length>=3){const o=xt(s);e.push({points:s,area:o})}}return e}buildSingleLoop(t,e){const i=[],s=t[e];s.used=!0,i.push(s.start);let o=s.end;const r=s.start,a=t.length;let l=0;for(;l<a;){if(l++,D(o,r)<this.tolerance)return i;const c=this.findConnectingSegment(t,o);if(c===-1)break;const u=t[c];u.used=!0,D(u.start,o)<this.tolerance?(i.push(u.start),o=u.end):(i.push(u.end),o=u.start)}return i.length>=3?i:null}findConnectingSegment(t,e){let i=-1,s=this.tolerance;for(let o=0;o<t.length;o++){if(t[o].used)continue;const r=t[o],a=D(r.start,e);a<s&&(s=a,i=o);const l=D(r.end,e);l<s&&(s=l,i=o)}return i}classifyLoops(t){if(t.length===0)return[];const e=[...t].sort((o,r)=>Math.abs(r.area)-Math.abs(o.area)),i=[],s=new Set;for(let o=0;o<e.length;o++){if(s.has(o))continue;const r=e[o],a=Bt(r.points),l=[];for(let c=o+1;c<e.length;c++){if(s.has(c))continue;const u=e[c];this.isLoopContainedIn(u.points,a)&&(l.push(Nt(u.points)),s.add(c))}s.add(o),i.push({outer:a,holes:l})}return i}isLoopContainedIn(t,e){const i=t[0];return this.pointInPolygon(i,e)}pointInPolygon(t,e){let i=!1;const s=e.length;for(let o=0,r=s-1;o<s;r=o++){const a=e[o],l=e[r];a.y>t.y!=l.y>t.y&&t.x<(l.x-a.x)*(t.y-a.y)/(l.y-a.y)+a.x&&(i=!i)}return i}}class Ot{planeNormal;planeDistance;axis;flipped;customPlane;constructor(t){this.axis=t.axis,this.flipped=t.flipped,this.customPlane=t.customPlane,this.customPlane?(this.planeNormal=this.customPlane.normal,this.planeDistance=this.customPlane.distance):(this.planeNormal=pt(t.axis),this.planeDistance=t.position)}cutMeshes(t){const e=performance.now(),i=[];let s=0,o=0;for(const u of t){const h=this.cutSingleMesh(u);i.push(h.segments),s+=h.trianglesProcessed,o+=h.trianglesIntersected}const r=i.flat(),l=new It().buildPolygons(r),c=performance.now()-e;return{segments:r,polygons:l,stats:{totalTriangles:s,intersectedTriangles:o,segmentCount:r.length,polygonCount:l.length,processingTimeMs:c}}}cutSingleMesh(t){const e=[],{positions:i,indices:s,expressId:o,ifcType:r,modelIndex:a}=t,l=s.length/3;let c=0;for(let u=0;u<l;u++){const h=s[u*3],d=s[u*3+1],f=s[u*3+2],g=this.getVertex(i,h),p=this.getVertex(i,d),y=this.getVertex(i,f),m=N(g,this.planeNormal,this.planeDistance),C=N(p,this.planeNormal,this.planeDistance),x=N(y,this.planeNormal,this.planeDistance),w=this.intersectTrianglePlane(g,p,y,m,C,x);if(w){c++;const b=this.customPlane?Y(w.p0,this.customPlane.origin,this.customPlane.tangent,this.customPlane.bitangent):V(w.p0,this.axis,this.flipped),M=this.customPlane?Y(w.p1,this.customPlane.origin,this.customPlane.tangent,this.customPlane.bitangent):V(w.p1,this.axis,this.flipped),$=M.x-b.x,I=M.y-b.y;if($*$+I*I<S*S)continue;e.push({p0:w.p0,p1:w.p1,p0_2d:b,p1_2d:M,entityId:o,ifcType:r||"Unknown",modelIndex:a||0})}}return{segments:e,trianglesProcessed:l,trianglesIntersected:c}}getVertex(t,e){const i=e*3;return Z(t[i],t[i+1],t[i+2])}intersectTrianglePlane(t,e,i,s,o,r){const a=(s>S?1:0)+(o>S?1:0)+(r>S?1:0),l=(s<-S?1:0)+(o<-S?1:0)+(r<-S?1:0);if(a===3||l===3||a===0&&l===0)return null;const c=[],u=this.edgePlaneIntersection(t,e,s,o);u&&c.push(u);const h=this.edgePlaneIntersection(e,i,o,r);if(h&&c.push(h),c.length<2){const d=this.edgePlaneIntersection(i,t,r,s);d&&c.push(d)}return c.length>=2?{p0:c[0],p1:c[1]}:null}edgePlaneIntersection(t,e,i,s){if(Math.abs(i)<S&&Math.abs(s)<S)return null;if(Math.abs(i)<S)return t;if(Math.abs(s)<S)return e;if(i>0==s>0)return null;const o=i/(i-s);return j(t,e,o)}}const wt={angleTolerance:.01,distanceTolerance:.001,gapTolerance:.01};function Ht(n,t={}){const e={...wt,...t},i=new Map;for(const o of n){const r=`${o.modelIndex}:${o.entityId}:${o.category}:${o.visibility}`;i.has(r)||i.set(r,[]),i.get(r).push(o)}const s=[];for(const o of i.values()){const r=Ut(o,e);s.push(...r)}return s}function Ut(n,t){if(n.length<=1)return n;const e=n.map(o=>o.line),i=jt(e,t),s=n[0];return i.map(o=>({...s,line:o}))}function jt(n,t={}){const e={...wt,...t};if(n.length<=1)return n;const i=Gt(n,e.angleTolerance),s=[];for(const o of i.values()){const r=Vt(o,e.distanceTolerance);for(const a of r){const l=Xt(a,e.gapTolerance);s.push(...l)}}return s}function Gt(n,t){const e=new Map,i=t*2;for(const s of n){const o=J(s);let r=Math.atan2(o.y,o.x);r<0&&(r+=Math.PI),r>=Math.PI&&(r-=Math.PI);const a=Math.floor(r/i);e.has(a)||e.set(a,[]),e.get(a).push(s)}return e}function Vt(n,t){const e=[],i=new Set;for(let s=0;s<n.length;s++){if(i.has(s))continue;const o=[n[s]];i.add(s);for(let r=s+1;r<n.length;r++)i.has(r)||Yt(n[s],n[r],t)&&(o.push(n[r]),i.add(r));e.push(o)}return e}function Yt(n,t,e){const i=J(n),s=z(t.start,n.start);if(Math.abs(rt(i,s))>e)return!1;const r=z(t.end,n.start);return Math.abs(rt(i,r))<=e}function Xt(n,t){if(n.length<=1)return n;const e=n[0],i=J(e),s=e.start,o=n.map(l=>{const c=at(l.start,s,i),u=at(l.end,s,i);return{t0:Math.min(c,u),t1:Math.max(c,u)}});o.sort((l,c)=>l.t0-c.t0);const r=[];let a=o[0];for(let l=1;l<o.length;l++){const c=o[l];c.t0<=a.t1+t?a={t0:a.t0,t1:Math.max(a.t1,c.t1)}:(r.push(a),a=c)}return r.push(a),r.map(l=>({start:{x:s.x+i.x*l.t0,y:s.y+i.y*l.t0},end:{x:s.x+i.x*l.t1,y:s.y+i.y*l.t1}}))}function at(n,t,e){const i=z(n,t);return Et(i,e)}function qt(n){switch(n){case"x":return{x:1,y:0,z:0};case"y":return{x:0,y:1,z:0};case"z":return{x:0,y:0,z:1}}}function Zt(n){return n.customPlane?{normal:n.customPlane.normal,offset:n.customPlane.distance}:{normal:qt(n.axis),offset:n.position}}function lt(n,t,e){const i=n-t;return e?-i:i}function v(n,t){const{normal:e,offset:i}=Zt(t),s=n.x*e.x+n.y*e.y+n.z*e.z-i;return t.flipped?-s:s}function Jt(n){const t=n.flipped?1:-1;if(n.customPlane){const e=n.customPlane.normal;return{x:e.x*t,y:e.y*t,z:e.z*t}}switch(n.axis){case"x":return{x:t,y:0,z:0};case"y":return{x:0,y:t,z:0};case"z":return{x:0,y:0,z:t}}}function _(n,t){if(t.customPlane){const e=t.customPlane;return Y(n,e.origin,e.tangent,e.bitangent)}return V(n,t.axis,t.flipped)}function K(n,t,e){const i=Math.min(n,t),s=Math.max(n,t),o=i<0&&s>=-e.below,r=s>0&&i<=e.above;return o&&r?"spanning":o?"visible":r?"overhead":"cull"}function Kt(n,t,e,i){const s=v(n,e),o=v(t,e);return K(s,o,i)}function Q(n){switch(n){case"overhead":return"hidden";case"visible":case"spanning":return"visible";case"cull":return null}}function Qt(n,t,e,i){const s=e.customPlane?e.customPlane.distance:e.position,o=lt(n.axisMin,s,e.flipped),r=lt(n.axisMax,s,e.flipped),a=Q(K(o,r,i));if(a===null)return[];const l=[];for(const c of n.contours){const u=Math.floor(c.length/2);if(!(u<3))for(let h=0;h<u;h++){const d=(h+1)%u,f=c[h*2],g=c[h*2+1],p=c[d*2],y=c[d*2+1];Math.abs(f-p)<1e-7&&Math.abs(g-y)<1e-7||l.push({line:{start:{x:f,y:g},end:{x:p,y}},category:"projection",visibility:a,entityId:t.entityId,ifcType:t.ifcType,modelIndex:t.modelIndex,depth:0})}}return l}function te(n,t,e,i){const s=t-n;if(Math.abs(s)<1e-12)return n>=e&&n<=i?[0,1]:null;const o=(e-n)/s,r=(i-n)/s,a=Math.max(0,Math.min(o,r)),l=Math.min(1,Math.max(o,r));return a<=l?[a,l]:null}class ee{creaseAngle;constructor(t=30){this.creaseAngle=t*Math.PI/180}extractEdges(t){const{positions:e,indices:i,expressId:s,ifcType:o,modelIndex:r}=t,a=new Map,l=[],c=i.length/3;for(let h=0;h<c;h++){const d=i[h*3],f=i[h*3+1],g=i[h*3+2],p=this.getVertex(e,d),y=this.getVertex(e,f),m=this.getVertex(e,g),C=this.computeFaceNormal(p,y,m);l.push(C),this.registerEdge(a,d,f,h),this.registerEdge(a,f,g,h),this.registerEdge(a,g,d,h)}const u=[];for(const[,h]of a){const d=this.getVertex(e,h.v0Idx),f=this.getVertex(e,h.v1Idx);let g=null,p=null,y=0,m="smooth";if(h.faceIndices.length===1)m="boundary",g=l[h.faceIndices[0]];else if(h.faceIndices.length>=2){g=l[h.faceIndices[0]],p=l[h.faceIndices[1]];const C=Math.max(-1,Math.min(1,W(g,p)));y=Math.acos(C),y>this.creaseAngle&&(m="crease")}m!=="smooth"&&u.push({v0:d,v1:f,face0Normal:g,face1Normal:p,dihedralAngle:y,type:m,entityId:s,ifcType:o||"Unknown",modelIndex:r||0})}return u}extractSilhouettes(t,e){const i=ot(e);return t.filter(s=>{if(s.type==="boundary")return!0;if(!s.face0Normal||!s.face1Normal)return!1;const o=W(s.face0Normal,i),r=W(s.face1Normal,i),a=o<-1e-4,l=r<-1e-4;return a!==l})}edgesToProjectionLines(t,e,i){const s=[],o=-i.below,r=i.above;for(const a of t){const l=v(a.v0,e),c=v(a.v1,e),u=te(l,c,o,r);if(!u)continue;const h=j(a.v0,a.v1,u[0]),d=j(a.v0,a.v1,u[1]),f=Q(Kt(h,d,e,i));if(f===null)continue;const g=_(h,e),p=_(d,e);Math.abs(g.x-p.x)<S&&Math.abs(g.y-p.y)<S||s.push({line:{start:g,end:p},category:"projection",visibility:f,entityId:a.entityId,ifcType:a.ifcType,modelIndex:a.modelIndex,depth:0})}return s}getVertex(t,e){const i=e*3;return Z(t[i],t[i+1],t[i+2])}computeFaceNormal(t,e,i){const s=it(e,t),o=it(i,t),r=vt(s,o);return ot(r)}registerEdge(t,e,i,s){const o=Math.min(e,i),r=Math.max(e,i),a=`${o}:${r}`;t.has(a)||t.set(a,{v0Idx:o,v1Idx:r,faceIndices:[]}),t.get(a).faceIndices.push(s)}}function ne(n,t,e){const i=[];for(const s of n){const o=ie(s,t,e),r=Q(o);if(r===null)continue;ct(i,s,s.outerPoints,"projection",t,r);let a=0;for(let l=0;l<s.holeCounts.length;l++){const c=s.holeCounts[l];if(c<2||a+c*2>s.holePoints.length){a+=c*2;continue}const u=s.holePoints.subarray(a,a+c*2);ct(i,s,u,"projection",t,r),a+=c*2}}return i}function ie(n,t,e){const{min:i,max:s}=oe(n,t);return K(i,s,e)}function ct(n,t,e,i,s,o){const r=Math.floor(e.length/2);if(r<2)return;const a=t.transform;for(let l=0;l<r;l++){const c=(l+1)%r,u=e[l*2],h=e[l*2+1],d=e[c*2],f=e[c*2+1],g=X(u,h,a),p=X(d,f,a),y=_(g,s),m=_(p,s);Math.abs(y.x-m.x)<1e-7&&Math.abs(y.y-m.y)<1e-7||n.push({line:{start:y,end:m},category:i,visibility:o,entityId:t.expressId,ifcType:t.ifcType,modelIndex:t.modelIndex,depth:re(g,p,s)})}}function X(n,t,e){return{x:e[0]*n+e[4]*t+e[12],y:e[1]*n+e[5]*t+e[13],z:e[2]*n+e[6]*t+e[14]}}function O(n,t){return n[12+se(t)]}function oe(n,t){let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;const s=a=>{const l=v(a,t);l<e&&(e=l),l>i&&(i=l)},o={x:n.extrusionDir[0]*n.extrusionDepth,y:n.extrusionDir[1]*n.extrusionDepth,z:n.extrusionDir[2]*n.extrusionDepth},r=a=>{const l=Math.floor(a.length/2);for(let c=0;c<l;c++){const u=X(a[c*2],a[c*2+1],n.transform);s(u),s({x:u.x+o.x,y:u.y+o.y,z:u.z+o.z})}};if(r(n.outerPoints),r(n.holePoints),!Number.isFinite(e)||!Number.isFinite(i)){const a={x:O(n.transform,"x"),y:O(n.transform,"y"),z:O(n.transform,"z")},l=v(a,t),c=v({x:a.x+o.x,y:a.y+o.y,z:a.z+o.z},t);return{min:Math.min(l,c),max:Math.max(l,c)}}return{min:e,max:i}}function se(n){return n==="x"?0:n==="y"?1:2}function re(n,t,e){return(v(n,e)+v(t,e))/2}const ae={resolution:1024,samplesPerLine:10,depthBias:.001};class le{options;depthBuffer=null;width=0;height=0;bounds=null;constructor(t={}){this.options={...ae,...t}}buildDepthBuffer(t,e,i,s,o,r){r||(r=this.computeBounds(t,e,i,s,o)),this.bounds=r;const a=r.max.x-r.min.x,l=r.max.y-r.min.y;if(a<S||l<S){this.width=1,this.height=1,this.depthBuffer=new Float32Array([1/0]);return}const c=a/l;c>1?(this.width=this.options.resolution,this.height=Math.max(1,Math.floor(this.options.resolution/c))):(this.height=this.options.resolution,this.width=Math.max(1,Math.floor(this.options.resolution*c))),this.depthBuffer=new Float32Array(this.width*this.height),this.depthBuffer.fill(1/0);for(const u of t)this.rasterizeMesh(u,e,i,s,o)}classifyLines(t){if(!this.depthBuffer||!this.bounds)throw new Error("Depth buffer not built. Call buildDepthBuffer first.");const e=[];for(const i of t){const s=this.classifySingleLine(i);e.push(s)}return e}applyVisibility(t){const e=this.classifyLines(t),i=[];for(const s of e)if(s.overallVisibility==="visible")i.push({...s.line,visibility:"visible"});else if(s.overallVisibility==="hidden")i.push({...s.line,visibility:"hidden"});else for(const o of s.segments)i.push({...s.line,line:{start:o.start,end:o.end},visibility:o.visible?"visible":"hidden"});return i}computeBounds(t,e,i,s,o){let r=yt();const a=this.getProjectionAxes(e);for(const c of t){const{positions:u}=c,h=u.length/3;for(let d=0;d<h;d++){const f=u[d*3],g=u[d*3+1],p=u[d*3+2],y={x:f,y:g,z:p},m=y[e]-i;if(o?m<=0&&m>=-s:m>=0&&m<=s){const x=y[a.u],w=y[a.v],b={x:o?-x:x,y:w};r=G(r,b)}}}const l=Math.max(r.max.x-r.min.x,r.max.y-r.min.y)*.01;return r.min.x-=l,r.min.y-=l,r.max.x+=l,r.max.y+=l,r}getProjectionAxes(t){switch(t){case"x":return{u:"z",v:"y"};case"y":return{u:"x",v:"z"};case"z":return{u:"x",v:"y"}}}rasterizeMesh(t,e,i,s,o){const{positions:r,indices:a}=t,l=this.getProjectionAxes(e),c=a.length/3;for(let u=0;u<c;u++){const h=a[u*3],d=a[u*3+1],f=a[u*3+2],g=this.getVertex(r,h),p=this.getVertex(r,d),y=this.getVertex(r,f),m=g[e]-i,C=p[e]-i,x=y[e]-i,w=I=>o?I<=0&&I>=-s:I>=0&&I<=s;if(!w(m)&&!w(C)&&!w(x))continue;const b=this.projectVertex(g,l,o,i),M=this.projectVertex(p,l,o,i),$=this.projectVertex(y,l,o,i);this.rasterizeTriangle(b,M,$)}}getVertex(t,e){const i=e*3;return Z(t[i],t[i+1],t[i+2])}projectVertex(t,e,i,s){const o=t[e.u],r=t[e.v],l=["x","y","z"].find(u=>u!==e.u&&u!==e.v)??"z",c=t[l]-s;return{x:i?-o:o,y:r,depth:i?-c:c}}rasterizeTriangle(t,e,i){if(!this.bounds||!this.depthBuffer)return;const s=f=>(f-this.bounds.min.x)/(this.bounds.max.x-this.bounds.min.x)*(this.width-1),o=f=>(f-this.bounds.min.y)/(this.bounds.max.y-this.bounds.min.y)*(this.height-1),r={x:s(t.x),y:o(t.y),depth:t.depth},a={x:s(e.x),y:o(e.y),depth:e.depth},l={x:s(i.x),y:o(i.y),depth:i.depth},c=Math.max(0,Math.floor(Math.min(r.x,a.x,l.x))),u=Math.min(this.width-1,Math.ceil(Math.max(r.x,a.x,l.x))),h=Math.max(0,Math.floor(Math.min(r.y,a.y,l.y))),d=Math.min(this.height-1,Math.ceil(Math.max(r.y,a.y,l.y)));for(let f=h;f<=d;f++)for(let g=c;g<=u;g++){const p=this.barycentricCoords(g+.5,f+.5,r,a,l);if(p.u>=0&&p.v>=0&&p.w>=0){const y=p.u*r.depth+p.v*a.depth+p.w*l.depth,m=f*this.width+g;y<this.depthBuffer[m]&&(this.depthBuffer[m]=y)}}}barycentricCoords(t,e,i,s,o){const r=s.x-i.x,a=s.y-i.y,l=o.x-i.x,c=o.y-i.y,u=t-i.x,h=e-i.y,d=r*r+a*a,f=r*l+a*c,g=r*u+a*h,p=l*l+c*c,y=l*u+c*h,m=d*p-f*f;if(Math.abs(m)<1e-10)return{u:-1,v:-1,w:-1};const C=1/m,x=(p*g-f*y)*C,w=(d*y-f*g)*C;return{u:1-x-w,v:x,w}}classifySingleLine(t){if(!this.bounds||!this.depthBuffer)return{line:t,segments:[{start:t.line.start,end:t.line.end,visible:!0}],overallVisibility:"visible"};const{samplesPerLine:e,depthBias:i}=this.options,o=D(t.line.start,t.line.end)<S?1:Math.max(2,e),r=[];let a=t.line.start,l=this.sampleVisibility(t.line.start,t.depth,i),c=l?1:0;for(let h=1;h<=o;h++){const d=h/o,f=st(t.line.start,t.line.end,d),g=this.sampleVisibility(f,t.depth,i);if(g&&c++,g!==l&&h<o){const p=(h-.5)/o,y=st(t.line.start,t.line.end,p);r.push({start:a,end:y,visible:l}),a=y,l=g}}r.push({start:a,end:t.line.end,visible:l});let u;return c===o+1?u="visible":c===0?u="hidden":u="partial",{line:t,segments:r,overallVisibility:u}}sampleVisibility(t,e,i){if(!this.bounds||!this.depthBuffer)return!0;const s=(t.x-this.bounds.min.x)/(this.bounds.max.x-this.bounds.min.x)*(this.width-1),o=(t.y-this.bounds.min.y)/(this.bounds.max.y-this.bounds.min.y)*(this.height-1),r=Math.max(0,Math.min(this.width-1,Math.floor(s))),a=Math.max(0,Math.min(this.height-1,Math.floor(o))),l=this.depthBuffer[a*this.width+r];return e<=l+i}}const ht={IfcWall:{type:"diagonal",spacing:3,angle:45,lineWeight:.18,strokeColor:"#000000"},IfcWallStandardCase:{type:"diagonal",spacing:3,angle:45,lineWeight:.18,strokeColor:"#000000"},IfcCurtainWall:{type:"none",spacing:0,angle:0,lineWeight:.13,strokeColor:"#0066CC"},IfcSlab:{type:"concrete",spacing:2.5,angle:0,lineWeight:.13,strokeColor:"#666666"},IfcRoof:{type:"cross-hatch",spacing:4,angle:45,secondaryAngle:-45,lineWeight:.13,strokeColor:"#8B4513"},IfcCovering:{type:"horizontal",spacing:8,angle:0,lineWeight:.09,strokeColor:"#999999"},IfcColumn:{type:"steel",spacing:2,angle:45,lineWeight:.25,strokeColor:"#333333"},IfcBeam:{type:"steel",spacing:2,angle:45,lineWeight:.25,strokeColor:"#333333"},IfcMember:{type:"diagonal",spacing:2.5,angle:45,lineWeight:.18,strokeColor:"#444444"},IfcPlate:{type:"steel",spacing:1.5,angle:45,lineWeight:.18,strokeColor:"#555555"},IfcFooting:{type:"concrete",spacing:3,angle:0,lineWeight:.18,strokeColor:"#777777"},IfcPile:{type:"concrete",spacing:2.5,angle:0,lineWeight:.18,strokeColor:"#666666"},IfcWindow:{type:"glass",spacing:0,angle:0,lineWeight:.13,strokeColor:"#0099CC",fillColor:"rgba(200, 230, 255, 0.3)"},IfcDoor:{type:"none",spacing:0,angle:0,lineWeight:.25,strokeColor:"#000000"},IfcOpeningElement:{type:"none",spacing:0,angle:0,lineWeight:.13,strokeColor:"#CCCCCC"},IfcStair:{type:"horizontal",spacing:5,angle:0,lineWeight:.18,strokeColor:"#444444"},IfcStairFlight:{type:"horizontal",spacing:5,angle:0,lineWeight:.18,strokeColor:"#444444"},IfcRamp:{type:"diagonal",spacing:6,angle:30,lineWeight:.13,strokeColor:"#555555"},IfcRailing:{type:"none",spacing:0,angle:0,lineWeight:.13,strokeColor:"#666666"},IfcFlowTerminal:{type:"none",spacing:0,angle:0,lineWeight:.13,strokeColor:"#0066AA"},IfcFlowSegment:{type:"none",spacing:0,angle:0,lineWeight:.18,strokeColor:"#0066AA"},IfcDistributionElement:{type:"none",spacing:0,angle:0,lineWeight:.13,strokeColor:"#006688"},IfcSpace:{type:"none",spacing:0,angle:0,lineWeight:.09,strokeColor:"#CCCCCC"},IfcFurnishingElement:{type:"none",spacing:0,angle:0,lineWeight:.13,strokeColor:"#888888"},IfcFurniture:{type:"none",spacing:0,angle:0,lineWeight:.13,strokeColor:"#888888"},default:{type:"diagonal",spacing:4,angle:45,lineWeight:.13,strokeColor:"#666666"}};function Mt(n){return ht[n]||ht.default}const ce={cut:{weight:.5,color:"#000000",dashPattern:[],lineCap:"round",lineJoin:"round"},projection:{weight:.25,color:"#000000",dashPattern:[],lineCap:"round",lineJoin:"round"},hidden:{weight:.18,color:"#666666",dashPattern:[2,1],lineCap:"butt",lineJoin:"round"},silhouette:{weight:.35,color:"#000000",dashPattern:[],lineCap:"round",lineJoin:"round"},crease:{weight:.18,color:"#000000",dashPattern:[],lineCap:"round",lineJoin:"round"},boundary:{weight:.25,color:"#000000",dashPattern:[],lineCap:"round",lineJoin:"round"},annotation:{weight:.13,color:"#000000",dashPattern:[],lineCap:"butt",lineJoin:"miter"}},dt={IfcWall:{cut:.7,projection:.35},IfcWallStandardCase:{cut:.7,projection:.35},IfcSlab:{cut:.5,projection:.25},IfcColumn:{cut:.5,projection:.35},IfcBeam:{cut:.5,projection:.35},IfcWindow:{cut:.35,projection:.18},IfcDoor:{cut:.35,projection:.25},IfcStair:{cut:.35,projection:.25},IfcFurnishingElement:{cut:.18,projection:.13},IfcFurniture:{cut:.18,projection:.13},IfcSpace:{cut:.09,projection:.09}};function he(n,t){const e=ce[n];if(t&&dt[t]){const i=dt[t][n];if(i!==void 0)return{...e,weight:i}}return e}const H=[{name:"1:1",factor:1,useCase:"Full size details"},{name:"1:2",factor:2,useCase:"Large details"},{name:"1:5",factor:5,useCase:"Construction details"},{name:"1:10",factor:10,useCase:"Details"},{name:"1:20",factor:20,useCase:"Room plans, sections"},{name:"1:50",factor:50,useCase:"Floor plans, elevations"},{name:"1:100",factor:100,useCase:"Building plans"},{name:"1:200",factor:200,useCase:"Site plans"},{name:"1:500",factor:500,useCase:"Site context"},{name:"1:1000",factor:1e3,useCase:"Urban context"}],ut={A3_LANDSCAPE:{name:"A3 Landscape",width:420,height:297}};class Ft{generateHatch(t,e=100,i){const s=Mt(t.ifcType),o=i?{...s,type:i.type,spacing:i.spacing??s.spacing,angle:i.angle??s.angle,secondaryAngle:i.secondaryAngle??s.secondaryAngle}:s;if(o.type==="none"||o.type==="solid"||o.type==="glass")return{lines:[],pattern:o,polygon:t};const r=o.spacing*(e/100);let a=[];const l=this.generateParallelLines(t.polygon,r,o.angle,t.entityId,t.ifcType,t.modelIndex);if(a.push(...l),o.type==="cross-hatch"&&o.secondaryAngle!==void 0){const c=this.generateParallelLines(t.polygon,r,o.secondaryAngle,t.entityId,t.ifcType,t.modelIndex);a.push(...c)}if(o.type==="concrete"){const c=this.generateParallelLines(t.polygon,r*1.5,o.angle+90,t.entityId,t.ifcType,t.modelIndex);a.push(...c)}return{lines:a,pattern:o,polygon:t}}generateHatches(t,e=100,i){return t.map(s=>{const o=i?.(s);return this.generateHatch(s,e,o)})}generateParallelLines(t,e,i,s,o,r){if(e<S)return[];const a=i*Math.PI/180,l=Math.cos(a),c=Math.sin(a),u=-c,h=l,d=this.computePolygonBounds(t);if(!d)return[];const f=[{x:d.min.x,y:d.min.y},{x:d.max.x,y:d.min.y},{x:d.max.x,y:d.max.y},{x:d.min.x,y:d.max.y}];let g=1/0,p=-1/0;for(const C of f){const x=C.x*l+C.y*c;g=Math.min(g,x),p=Math.max(p,x)}const y=Math.sqrt(Math.pow(d.max.x-d.min.x,2)+Math.pow(d.max.y-d.min.y,2))*1.5,m=[];for(let C=g;C<=p;C+=e){const x=C*l,w=C*c,b={x:x-u*y,y:w-h*y},M={x:x+u*y,y:w+h*y},$=this.clipLineToPolygon({start:b,end:M},t);for(const I of $)m.push({line:I,entityId:s,ifcType:o,modelIndex:r})}return m}clipLineToPolygon(t,e){let i=this.clipLineToRing(t,e.outer,!0);for(const s of e.holes){const o=[];for(const r of i){const a=this.clipLineToRing(r,s,!1);o.push(...a)}i=o}return i}clipLineToRing(t,e,i){const s=[],o=t.end.x-t.start.x,r=t.end.y-t.start.y;for(let h=0;h<e.length;h++){const d=(h+1)%e.length,f=e[h],g=e[d],p=this.lineLineIntersection(t.start,t.end,f,g);if(p!==null&&p.t>=0&&p.t<=1){const y=-(g.y-f.y),m=g.x-f.x,C=o*y+r*m>0;s.push({t:p.t,entering:C})}}s.sort((h,d)=>h.t-d.t);const a=[];for(const h of s)(a.length===0||Math.abs(h.t-a[a.length-1].t)>S)&&a.push(h);if(a.length===0){const h={x:(t.start.x+t.end.x)/2,y:(t.start.y+t.end.y)/2};return this.pointInRing(h,e)===i?[t]:[]}const l=[];let c=this.pointInRing(t.start,e),u=0;for(const h of a)c===i&&l.push({start:{x:t.start.x+u*o,y:t.start.y+u*r},end:{x:t.start.x+h.t*o,y:t.start.y+h.t*r}}),u=h.t,c=!c;return c===i&&l.push({start:{x:t.start.x+u*o,y:t.start.y+u*r},end:t.end}),l.filter(h=>Math.abs(h.end.x-h.start.x)+Math.abs(h.end.y-h.start.y)>S)}lineLineIntersection(t,e,i,s){const o=e.x-t.x,r=e.y-t.y,a=s.x-i.x,l=s.y-i.y,c=o*l-r*a;if(Math.abs(c)<S)return null;const u=i.x-t.x,h=i.y-t.y,d=(u*l-h*a)/c,f=(u*r-h*o)/c;return f<0||f>1?null:{t:d,u:f}}pointInRing(t,e){let i=!1;const s=e.length;for(let o=0,r=s-1;o<s;r=o++){const a=e[o],l=e[r];a.y>t.y!=l.y>t.y&&t.x<(l.x-a.x)*(t.y-a.y)/(l.y-a.y)+a.x&&(i=!i)}return i}computePolygonBounds(t){if(t.outer.length===0)return null;let e=1/0,i=1/0,s=-1/0,o=-1/0;for(const r of t.outer)e=Math.min(e,r.x),i=Math.min(i,r.y),s=Math.max(s,r.x),o=Math.max(o,r.y);return{min:{x:e,y:i},max:{x:s,y:o}}}}class de{hatchGenerator=new Ft;export(t,e={}){const{paperSize:i=ut.A3_LANDSCAPE,scale:s=H.find(m=>m.factor===t.config.scale)||H[5],padding:o=20,showHiddenLines:r=!0,showHatching:a=!0,showTitleBlock:l=!1,title:c="Section",projectName:u="",backgroundColor:h="#FFFFFF"}=e,d=this.computeTransform(t.bounds,i,s,o);let f=this.createHeader(i,h);if(f+=this.createDefs(t,s.factor),a&&t.cutPolygons.length>0&&(f+=this.createHatchingLayer(t.cutPolygons,d,s.factor)),r){const m=t.lines.filter(C=>C.visibility==="hidden");m.length>0&&(f+=this.createLineLayer("hidden-lines",m,d,"Hidden Lines"))}const g=t.lines.filter(m=>m.category==="projection"&&m.visibility!=="hidden");g.length>0&&(f+=this.createLineLayer("projection-lines",g,d,"Projection"));const p=t.lines.filter(m=>(m.category==="silhouette"||m.category==="crease"||m.category==="boundary")&&m.visibility!=="hidden");p.length>0&&(f+=this.createLineLayer("feature-lines",p,d,"Feature Edges"));const y=t.lines.filter(m=>m.category==="cut");return y.length>0&&(f+=this.createLineLayer("cut-lines",y,d,"Cut Lines")),l&&(f+=this.createTitleBlock(i,c,u,s)),f+="</svg>",f}exportPolygons(t,e,i={}){const{paperSize:s=ut.A3_LANDSCAPE,scale:o=H[5],padding:r=20,backgroundColor:a="#FFFFFF"}=i,l=this.computeTransform(e,s,o,r);let c=this.createHeader(s,a);return c+=this.createPolygonDefs(o.factor),c+=this.createHatchingLayer(t,l,o.factor),c+="</svg>",c}computeTransform(t,e,i,s){_t(t);const o=zt(t);e.width-s*2,e.height-s*2;const r=1e3/i.factor,a=e.width/2-o.x*r,l=e.height/2+o.y*r;return{scale:r,offsetX:a,offsetY:l,flipY:!0}}transformPoint(t,e){return{x:t.x*e.scale+e.offsetX,y:e.flipY?-t.y*e.scale+e.offsetY:t.y*e.scale+e.offsetY}}createHeader(t,e){return`<?xml version="1.0" encoding="UTF-8"?>
2
- <svg xmlns="http://www.w3.org/2000/svg"
3
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
4
- width="${t.width}mm"
5
- height="${t.height}mm"
6
- viewBox="0 0 ${t.width} ${t.height}">
7
- <rect width="100%" height="100%" fill="${this.escapeXml(e)}"/>
8
- `}createDefs(t,e){let i=` <defs>
9
- `;return i+=this.createHatchPatternDefs(e),i+=` </defs>
10
- `,i}createPolygonDefs(t){let e=` <defs>
11
- `;return e+=this.createHatchPatternDefs(t),e+=` </defs>
12
- `,e}createHatchPatternDefs(t){const e=3*(t/100);let i="";return i+=` <pattern id="hatch-diagonal" patternUnits="userSpaceOnUse"
13
- width="${e}" height="${e}" patternTransform="rotate(45)">
14
- <line x1="0" y1="0" x2="0" y2="${e}" stroke="#000" stroke-width="0.15"/>
15
- </pattern>
16
- `,i+=` <pattern id="hatch-cross" patternUnits="userSpaceOnUse"
17
- width="${e}" height="${e}">
18
- <line x1="0" y1="0" x2="${e}" y2="${e}" stroke="#000" stroke-width="0.1"/>
19
- <line x1="${e}" y1="0" x2="0" y2="${e}" stroke="#000" stroke-width="0.1"/>
20
- </pattern>
21
- `,i+=` <pattern id="hatch-horizontal" patternUnits="userSpaceOnUse"
22
- width="${e}" height="${e}">
23
- <line x1="0" y1="${e/2}" x2="${e}" y2="${e/2}" stroke="#000" stroke-width="0.1"/>
24
- </pattern>
25
- `,i+=` <pattern id="hatch-concrete" patternUnits="userSpaceOnUse"
26
- width="${e*2}" height="${e*2}">
27
- <circle cx="${e*.3}" cy="${e*.3}" r="0.3" fill="#666"/>
28
- <circle cx="${e*1.3}" cy="${e*1.3}" r="0.3" fill="#666"/>
29
- <circle cx="${e*.8}" cy="${e*1.6}" r="0.2" fill="#888"/>
30
- </pattern>
31
- `,i+=` <pattern id="hatch-steel" patternUnits="userSpaceOnUse"
32
- width="${e*.7}" height="${e*.7}" patternTransform="rotate(45)">
33
- <line x1="0" y1="0" x2="0" y2="${e*.7}" stroke="#333" stroke-width="0.2"/>
34
- </pattern>
35
- `,i}createLineLayer(t,e,i,s){let o=` <g id="${t}" inkscape:label="${s}" inkscape:groupmode="layer">
36
- `;for(const r of e)o+=this.renderLine(r,i);return o+=` </g>
37
- `,o}renderLine(t,e){const i=he(t.category,t.ifcType),s=this.transformPoint(t.line.start,e),o=this.transformPoint(t.line.end,e),r=i.dashPattern.length>0?` stroke-dasharray="${i.dashPattern.join(" ")}"`:"";return` <line x1="${s.x.toFixed(3)}" y1="${s.y.toFixed(3)}" x2="${o.x.toFixed(3)}" y2="${o.y.toFixed(3)}"
38
- stroke="${i.color}" stroke-width="${i.weight}"
39
- stroke-linecap="${i.lineCap}"${r}
40
- data-entity-id="${t.entityId}" data-ifc-type="${this.escapeXml(t.ifcType)}"/>
41
- `}createHatchingLayer(t,e,i){let s=` <g id="hatching" inkscape:label="Hatching" inkscape:groupmode="layer">
42
- `;for(const o of t){const r=Mt(o.ifcType);if(r.type!=="none"&&(s+=this.renderPolygon(o,e,r),r.type!=="solid"&&r.type!=="glass")){const a=this.hatchGenerator.generateHatch(o,i);for(const l of a.lines)s+=this.renderHatchLine(l,e,r)}}return s+=` </g>
43
- `,s}renderPolygon(t,e,i){const s=this.polygonToPath(t.polygon,e);let o;return i.type==="solid"?o=i.fillColor||"#CCCCCC":i.type==="glass"?o=i.fillColor||"rgba(200, 230, 255, 0.3)":i.type==="none"?o="none":o=`url(#hatch-${i.type})`,` <path d="${s}" fill="${o}"
44
- stroke="${i.strokeColor}" stroke-width="${i.lineWeight}"
45
- data-entity-id="${t.entityId}" data-ifc-type="${this.escapeXml(t.ifcType)}"/>
46
- `}polygonToPath(t,e){let i="";if(t.outer.length>0){const s=this.transformPoint(t.outer[0],e);i+=`M ${s.x.toFixed(3)} ${s.y.toFixed(3)}`;for(let o=1;o<t.outer.length;o++){const r=this.transformPoint(t.outer[o],e);i+=` L ${r.x.toFixed(3)} ${r.y.toFixed(3)}`}i+=" Z"}for(const s of t.holes)if(s.length>0){const o=this.transformPoint(s[0],e);i+=` M ${o.x.toFixed(3)} ${o.y.toFixed(3)}`;for(let r=1;r<s.length;r++){const a=this.transformPoint(s[r],e);i+=` L ${a.x.toFixed(3)} ${a.y.toFixed(3)}`}i+=" Z"}return i}renderHatchLine(t,e,i){const s=this.transformPoint(t.line.start,e),o=this.transformPoint(t.line.end,e);return` <line x1="${s.x.toFixed(3)}" y1="${s.y.toFixed(3)}" x2="${o.x.toFixed(3)}" y2="${o.y.toFixed(3)}"
47
- stroke="${i.strokeColor}" stroke-width="${i.lineWeight}" stroke-linecap="butt"/>
48
- `}createTitleBlock(t,e,i,s){const a=t.width-180-10,l=t.height-50-10;return` <g id="title-block">
49
- <rect x="${a}" y="${l}" width="180" height="50"
50
- fill="white" stroke="black" stroke-width="0.5"/>
51
- <line x1="${a}" y1="${l+20}" x2="${a+180}" y2="${l+20}" stroke="black" stroke-width="0.3"/>
52
- <line x1="${a}" y1="${l+35}" x2="${a+180}" y2="${l+35}" stroke="black" stroke-width="0.3"/>
53
- <line x1="${a+100}" y1="${l+20}" x2="${a+100}" y2="${l+50}" stroke="black" stroke-width="0.3"/>
54
- <text x="${a+5}" y="${l+14}" font-family="Arial" font-size="10" font-weight="bold">${this.escapeXml(e)}</text>
55
- <text x="${a+5}" y="${l+30}" font-family="Arial" font-size="8">${this.escapeXml(i)}</text>
56
- <text x="${a+5}" y="${l+45}" font-family="Arial" font-size="8">Scale: ${s.name}</text>
57
- <text x="${a+105}" y="${l+30}" font-family="Arial" font-size="7">Date:</text>
58
- <text x="${a+105}" y="${l+45}" font-family="Arial" font-size="7">${new Date().toLocaleDateString()}</text>
59
- </g>
60
- `}escapeXml(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}}const ue=`
61
- struct Triangle {
62
- v0: vec3<f32>,
63
- v1: vec3<f32>,
64
- v2: vec3<f32>,
65
- entityId: u32,
66
- }
67
-
68
- struct Plane {
69
- normal: vec3<f32>,
70
- distance: f32,
71
- // Projection axes for 2D output
72
- axisU: u32, // 0=x, 1=y, 2=z
73
- axisV: u32,
74
- flipU: f32, // 1.0 or -1.0
75
- _padding: f32,
76
- }
77
-
78
- struct Segment {
79
- p0_3d: vec3<f32>,
80
- _pad0: f32,
81
- p1_3d: vec3<f32>,
82
- _pad1: f32,
83
- p0_2d: vec2<f32>,
84
- p1_2d: vec2<f32>,
85
- entityId: u32,
86
- valid: u32,
87
- }
88
-
89
- @group(0) @binding(0) var<storage, read> triangles: array<Triangle>;
90
- @group(0) @binding(1) var<uniform> plane: Plane;
91
- @group(0) @binding(2) var<storage, read_write> segments: array<Segment>;
92
- @group(0) @binding(3) var<storage, read_write> segmentCount: atomic<u32>;
93
-
94
- const EPSILON: f32 = 1e-7;
95
-
96
- fn signedDistance(point: vec3<f32>) -> f32 {
97
- return dot(point, plane.normal) - plane.distance;
98
- }
99
-
100
- fn edgeIntersection(v0: vec3<f32>, v1: vec3<f32>, d0: f32, d1: f32) -> vec3<f32> {
101
- let t = d0 / (d0 - d1);
102
- return mix(v0, v1, t);
103
- }
104
-
105
- fn projectTo2D(p: vec3<f32>) -> vec2<f32> {
106
- var coords: array<f32, 3>;
107
- coords[0] = p.x;
108
- coords[1] = p.y;
109
- coords[2] = p.z;
110
-
111
- let u = coords[plane.axisU] * plane.flipU;
112
- let v = coords[plane.axisV];
113
- return vec2<f32>(u, v);
114
- }
115
-
116
- @compute @workgroup_size(64)
117
- fn main(@builtin(global_invocation_id) id: vec3<u32>) {
118
- let triIdx = id.x;
119
- if (triIdx >= arrayLength(&triangles)) {
120
- return;
121
- }
122
-
123
- let tri = triangles[triIdx];
124
-
125
- // Signed distances from plane
126
- let d0 = signedDistance(tri.v0);
127
- let d1 = signedDistance(tri.v1);
128
- let d2 = signedDistance(tri.v2);
129
-
130
- // Check for intersection
131
- let pos = u32(d0 > EPSILON) + u32(d1 > EPSILON) + u32(d2 > EPSILON);
132
- let neg = u32(d0 < -EPSILON) + u32(d1 < -EPSILON) + u32(d2 < -EPSILON);
133
-
134
- // No intersection if all on same side
135
- if (pos == 3u || neg == 3u || (pos == 0u && neg == 0u)) {
136
- return;
137
- }
138
-
139
- // Find intersection points
140
- var points: array<vec3<f32>, 2>;
141
- var count: u32 = 0u;
142
-
143
- // Edge v0-v1
144
- if ((d0 > EPSILON) != (d1 > EPSILON)) {
145
- points[count] = edgeIntersection(tri.v0, tri.v1, d0, d1);
146
- count = count + 1u;
147
- } else if (abs(d0) < EPSILON) {
148
- points[count] = tri.v0;
149
- count = count + 1u;
150
- }
151
-
152
- // Edge v1-v2
153
- if ((d1 > EPSILON) != (d2 > EPSILON)) {
154
- points[count] = edgeIntersection(tri.v1, tri.v2, d1, d2);
155
- count = count + 1u;
156
- } else if (abs(d1) < EPSILON && count < 2u) {
157
- points[count] = tri.v1;
158
- count = count + 1u;
159
- }
160
-
161
- // Edge v2-v0
162
- if (count < 2u) {
163
- if ((d2 > EPSILON) != (d0 > EPSILON)) {
164
- points[count] = edgeIntersection(tri.v2, tri.v0, d2, d0);
165
- count = count + 1u;
166
- } else if (abs(d2) < EPSILON && count < 2u) {
167
- points[count] = tri.v2;
168
- count = count + 1u;
169
- }
170
- }
171
-
172
- if (count >= 2u) {
173
- // Project to 2D
174
- let p0_2d = projectTo2D(points[0]);
175
- let p1_2d = projectTo2D(points[1]);
176
-
177
- // Skip degenerate segments
178
- let diff = p1_2d - p0_2d;
179
- if (dot(diff, diff) < EPSILON * EPSILON) {
180
- return;
181
- }
182
-
183
- // Atomically allocate output slot
184
- let outIdx = atomicAdd(&segmentCount, 1u);
185
-
186
- segments[outIdx].p0_3d = points[0];
187
- segments[outIdx].p1_3d = points[1];
188
- segments[outIdx].p0_2d = p0_2d;
189
- segments[outIdx].p1_2d = p1_2d;
190
- segments[outIdx].entityId = tri.entityId;
191
- segments[outIdx].valid = 1u;
192
- }
193
- }
194
- `;class fe{device;resources=null;constructor(t){this.device=t}async initialize(t){this.resources&&(this.resources.triangleBuffer.destroy(),this.resources.planeBuffer.destroy(),this.resources.segmentBuffer.destroy(),this.resources.countBuffer.destroy(),this.resources.readbackBuffer.destroy(),this.resources.countReadbackBuffer.destroy(),this.resources=null);const e=t,i=this.device.createShaderModule({code:ue}),s=this.device.createComputePipeline({layout:"auto",compute:{module:i,entryPoint:"main"}}),o=t*48,r=this.device.createBuffer({size:o,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),a=this.device.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),l=e*64,c=this.device.createBuffer({size:l,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),u=this.device.createBuffer({size:4,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC}),h=this.device.createBuffer({size:l,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),d=this.device.createBuffer({size:4,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),f=this.device.createBindGroup({layout:s.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:r}},{binding:1,resource:{buffer:a}},{binding:2,resource:{buffer:c}},{binding:3,resource:{buffer:u}}]});this.resources={pipeline:s,triangleBuffer:r,planeBuffer:a,segmentBuffer:c,countBuffer:u,readbackBuffer:h,countReadbackBuffer:d,bindGroup:f,maxTriangles:t,maxSegments:e}}async cutMeshes(t,e){if(!this.resources)throw new Error("GPU resources not initialized. Call initialize() first.");const i=this.collectTriangles(t),s=i.count;if(s===0)return[];s>this.resources.maxTriangles&&await this.initialize(s*2);const o=this.resources;if(!o)throw new Error("GPU resources became unavailable after initialization");this.device.queue.writeBuffer(o.triangleBuffer,0,i.buffer.buffer,i.buffer.byteOffset,i.buffer.byteLength);const r=this.createPlaneData(e);this.device.queue.writeBuffer(o.planeBuffer,0,r.buffer,r.byteOffset,r.byteLength),this.device.queue.writeBuffer(o.countBuffer,0,new Uint32Array([0]));const a=this.device.createCommandEncoder(),l=a.beginComputePass();l.setPipeline(o.pipeline),l.setBindGroup(0,o.bindGroup);const c=Math.ceil(s/64);l.dispatchWorkgroups(c),l.end(),a.copyBufferToBuffer(o.countBuffer,0,o.countReadbackBuffer,0,4),this.device.queue.submit([a.finish()]),await o.countReadbackBuffer.mapAsync(GPUMapMode.READ);const h=new Uint32Array(o.countReadbackBuffer.getMappedRange())[0];if(o.countReadbackBuffer.unmap(),h===0)return[];const d=this.device.createCommandEncoder();d.copyBufferToBuffer(o.segmentBuffer,0,o.readbackBuffer,0,h*64),this.device.queue.submit([d.finish()]),await o.readbackBuffer.mapAsync(GPUMapMode.READ);const f=new Float32Array(o.readbackBuffer.getMappedRange(0,h*64)),g=this.parseSegments(f,h,i.entityMap);return o.readbackBuffer.unmap(),g}collectTriangles(t){let e=0;for(const a of t)e+=a.indices.length/3;const i=new Float32Array(e*12),s=new Map;let o=0,r=0;for(const a of t){const{positions:l,indices:c,expressId:u,ifcType:h,modelIndex:d}=a,f=c.length/3;s.set(r,{entityId:u,ifcType:h||"Unknown",modelIndex:d||0});for(let g=0;g<f;g++){const p=c[g*3],y=c[g*3+1],m=c[g*3+2],C=o*12;i[C+0]=l[p*3],i[C+1]=l[p*3+1],i[C+2]=l[p*3+2],i[C+4]=l[y*3],i[C+5]=l[y*3+1],i[C+6]=l[y*3+2],i[C+8]=l[m*3],i[C+9]=l[m*3+1],i[C+10]=l[m*3+2],new DataView(i.buffer,(C+11)*4,4).setUint32(0,r,!0),o++}r++}return{buffer:i,count:e,entityMap:s}}createPlaneData(t){const e=pt(t.axis),i=mt(t.axis),s={x:0,y:1,z:2},o=new Float32Array(8);o[0]=e.x,o[1]=e.y,o[2]=e.z,o[3]=t.position;const r=new DataView(o.buffer);return r.setUint32(16,s[i.u],!0),r.setUint32(20,s[i.v],!0),o[6]=t.flipped?-1:1,o[7]=0,o}parseSegments(t,e,i){const s=[];for(let o=0;o<e;o++){const r=o*16;if(new DataView(t.buffer,(r+13)*4,4).getUint32(0,!0)!==1)continue;const l=new DataView(t.buffer,(r+12)*4,4).getUint32(0,!0),c=i.get(l)||{entityId:0,ifcType:"Unknown",modelIndex:0};s.push({p0:{x:t[r+0],y:t[r+1],z:t[r+2]},p1:{x:t[r+4],y:t[r+5],z:t[r+6]},p0_2d:{x:t[r+8],y:t[r+9]},p1_2d:{x:t[r+10],y:t[r+11]},entityId:c.entityId,ifcType:c.ifcType,modelIndex:c.modelIndex})}return s}destroy(){this.resources&&(this.resources.triangleBuffer.destroy(),this.resources.planeBuffer.destroy(),this.resources.segmentBuffer.destroy(),this.resources.countBuffer.destroy(),this.resources.readbackBuffer.destroy(),this.resources.countReadbackBuffer.destroy(),this.resources=null)}}const ge={useGPU:!0,includeHiddenLines:!0,includeProjection:!0,includeEdges:!0,mergeLines:!0};class He{gpuCutter=null;cpuCutter=null;polygonBuilder=new It;edgeExtractor=new ee(30);hiddenLineClassifier=new le({resolution:1024});hatchGenerator=new Ft;svgExporter=new de;gpuDevice=null;initialized=!1;async initialize(t){t&&(this.gpuDevice=t,this.gpuCutter=new fe(t),await this.gpuCutter.initialize(1e5)),this.initialized=!0}async generate(t,e,i={},s){const o={...ge,...i},r=performance.now(),a=(x,w)=>{o.onProgress?.(x,w)};a("cutting",0);let l;o.useGPU&&this.gpuCutter&&this.gpuDevice&&!e.plane.customPlane?l=await this.gpuCutter.cutMeshes(t,e.plane):(this.cpuCutter=new Ot(e.plane),l=this.cpuCutter.cutMeshes(t).segments),a("cutting",1),a("polygons",0);const c=this.polygonBuilder.buildPolygons(l);a("polygons",1);const u=l.map(x=>({line:{start:x.p0_2d,end:x.p1_2d},category:"cut",visibility:"visible",entityId:x.entityId,ifcType:x.ifcType,modelIndex:x.modelIndex,depth:0}));let h=[];if(o.includeProjection){a("edges",0);const x={below:e.projectionBelowDepth??e.projectionDepth,above:e.projectionAboveDepth??e.projectionDepth},w=new Set;if(s&&s.length>0){for(const M of s)w.add(U(M.modelIndex,M.expressId));h.push(...ne(s,e.plane,x))}if(o.includeEdges){const M=w.size>0?t.filter(I=>!w.has(U(I.modelIndex??0,I.expressId))):t,$=Jt(e.plane);for(const I of M){const A=o.outlineProvider?o.outlineProvider(I,e.plane.axis,e.plane.flipped):null;if(A&&A.contours.length>0)h.push(...Qt(A,{entityId:I.expressId,ifcType:I.ifcType??"Unknown",modelIndex:I.modelIndex??0},e.plane,x));else{const L=this.edgeExtractor.extractEdges(I),R=this.edgeExtractor.extractSilhouettes(L,$);h.push(...this.edgeExtractor.edgesToProjectionLines(R,e.plane,x))}}}const b=this.computeBounds(u);if(b.min.x<b.max.x&&b.min.y<b.max.y){const M=b.max.x-b.min.x,$=b.max.y-b.min.y,A=Math.sqrt(M*M+$*$)*1.5;h=h.filter(L=>Rt(L.line)<=A)}a("edges",1)}let d=[...u,...h];if(o.includeHiddenLines&&h.length>0){a("hidden",0);const x=this.computeBounds(d),w=Math.max(e.projectionDepth,e.projectionBelowDepth??e.projectionDepth,e.projectionAboveDepth??e.projectionDepth);this.hiddenLineClassifier.buildDepthBuffer(t,e.plane.axis,e.plane.position,w,e.plane.flipped,x);const b=d.filter(I=>I.category!=="cut"&&I.visibility==="visible"),M=d.filter(I=>I.category!=="cut"&&I.visibility!=="visible"),$=this.hiddenLineClassifier.applyVisibility(b);d=[...u,...$,...M],a("hidden",1)}o.mergeLines&&(a("merging",0),d=Ht(d),a("merging",1));const f=this.computeBounds(d),g=performance.now()-r,p=d.filter(x=>x.category==="cut").length,y=d.filter(x=>x.category==="projection").length,m=d.filter(x=>x.visibility==="hidden").length,C=d.filter(x=>x.category==="silhouette").length;return a("complete",1),{config:e,lines:d,cutPolygons:c,projectionPolygons:[],bounds:f,stats:{cutLineCount:p,projectionLineCount:y,hiddenLineCount:m,silhouetteLineCount:C,polygonCount:c.length,totalTriangles:t.reduce((x,w)=>x+w.indices.length/3,0),processingTimeMs:g}}}exportSVG(t,e){return this.svgExporter.export(t,e)}generateHatching(t){const e=this.hatchGenerator.generateHatches(t.cutPolygons,t.config.scale),i=[];for(const s of e)for(const o of s.lines)i.push({line:o.line,category:"annotation",visibility:"visible",entityId:o.entityId,ifcType:o.ifcType,modelIndex:o.modelIndex,depth:0});return i}computeBounds(t){let e=yt();for(const i of t)e=Wt(e,i.line);return e}dispose(){this.gpuCutter&&(this.gpuCutter.destroy(),this.gpuCutter=null),this.gpuDevice=null,this.initialized=!1}}function Ue(n,t,e={}){return{plane:{axis:n,position:t,flipped:!1},...Lt,...e}}const ye={heavy:.5,medium:.35,light:.25,hairline:.18},ft={solid:[],dashed:[2,1],dotted:[.5,.5],dashdot:[3,1,.5,1],center:[6,1,1,1]},k={fillColor:"#CCCCCC",strokeColor:"#000000",backgroundColor:"#FFFFFF",lineWeight:.25,lineCap:"round",lineJoin:"round",dashPattern:[],hatchPattern:"none",hatchSpacing:3,hatchAngle:45,hatchSecondaryAngle:-45,hatchColor:"#000000",hatchLineWeight:.13,visible:!0,opacity:1,drawOrder:0},pe={IfcWall:["IfcWallStandardCase","IfcWallElementedCase"],IfcSlab:["IfcSlabStandardCase","IfcSlabElementedCase"],IfcBeam:["IfcBeamStandardCase"],IfcColumn:["IfcColumnStandardCase"],IfcDoor:["IfcDoorStandardCase"],IfcWindow:["IfcWindowStandardCase"],IfcMember:["IfcMemberStandardCase"],IfcPlate:["IfcPlateStandardCase"],IfcStair:["IfcStairFlight"],IfcRamp:["IfcRampFlight"],IfcBuildingElement:["IfcWall","IfcSlab","IfcBeam","IfcColumn","IfcDoor","IfcWindow","IfcStair","IfcRamp","IfcRoof","IfcRailing","IfcCovering"],IfcDistributionElement:["IfcDistributionFlowElement","IfcDistributionControlElement"],IfcFlowElement:["IfcFlowTerminal","IfcFlowSegment","IfcFlowFitting","IfcFlowController"]};function Pt(n){const t=pe[n]||[],e=[...t];for(const i of t)e.push(...Pt(i));return e}function me(n,t,e){switch(t){case"equals":return n===e;case"notEquals":return n!==e;case"contains":return typeof n=="string"&&typeof e=="string"?n.toLowerCase().includes(e.toLowerCase()):!1;case"notContains":return typeof n=="string"&&typeof e=="string"?!n.toLowerCase().includes(e.toLowerCase()):!0;case"startsWith":return typeof n=="string"&&typeof e=="string"?n.toLowerCase().startsWith(e.toLowerCase()):!1;case"endsWith":return typeof n=="string"&&typeof e=="string"?n.toLowerCase().endsWith(e.toLowerCase()):!1;case"greaterThan":return typeof n=="number"&&typeof e=="number"?n>e:!1;case"lessThan":return typeof n=="number"&&typeof e=="number"?n<e:!1;case"greaterOrEqual":return typeof n=="number"&&typeof e=="number"?n>=e:!1;case"lessOrEqual":return typeof n=="number"&&typeof e=="number"?n<=e:!1;case"exists":return n!=null;case"notExists":return n==null;case"in":return Array.isArray(e)?e.includes(n):!1;case"notIn":return Array.isArray(e)?!e.includes(n):!0;default:return!1}}function xe(n,t){switch(n.type){case"all":return!0;case"ifcType":return!n.ifcTypes||n.ifcTypes.length===0?!0:(n.includeSubtypes?n.ifcTypes.flatMap(i=>[i,...Pt(i)]):n.ifcTypes).some(i=>i.toLowerCase()===t.ifcType.toLowerCase());case"property":{if(!n.propertyName)return!1;const e=n.operator||"equals";let i;if(n.propertySet&&t.properties)i=t.properties[n.propertySet]?.[n.propertyName];else if(t.properties){for(const s of Object.values(t.properties))if(n.propertyName in s){i=s[n.propertyName];break}}return me(i,e,n.value)}case"propertySet":{if(!n.propertySet||!t.properties)return n.operator==="notExists";const e=n.propertySet in t.properties,i=n.operator||"exists";return i==="exists"?e:i==="notExists"?!e:e}case"material":return!n.materialNames||!t.materials?!1:n.materialNames.some(e=>t.materials.some(i=>i.toLowerCase().includes(e.toLowerCase())));case"layer":return!n.layerNames||!t.layers?!1:n.layerNames.some(e=>t.layers.some(i=>i.toLowerCase().includes(e.toLowerCase())));case"expressId":return n.expressIds?n.expressIds.includes(t.expressId):!1;case"modelId":return!n.modelIds||!t.modelId?!1:n.modelIds.includes(t.modelId);default:return!1}}function St(n){return"logic"in n&&"conditions"in n}function q(n,t){if(St(n)){const e=n.conditions.map(i=>q(i,t));return n.logic==="and"?e.every(Boolean):e.some(Boolean)}return xe(n,t)}function be(n){if(n===void 0)return k.lineWeight;if(typeof n=="number")return n;const t=ye[n];return t!==void 0?t:k.lineWeight}function Ce(n){return n===void 0?k.dashPattern:typeof n=="string"?ft[n]??k.dashPattern:n.custom?n.custom:n.preset?ft[n.preset]??k.dashPattern:k.dashPattern}function gt(n,t){return{fillColor:t.fillColor??n.fillColor,strokeColor:t.strokeColor??n.strokeColor,backgroundColor:t.backgroundColor??n.backgroundColor,lineWeight:t.lineWeight!==void 0?be(t.lineWeight):n.lineWeight,lineCap:t.lineCap??n.lineCap,lineJoin:t.lineJoin??n.lineJoin,dashPattern:t.lineStyle?Ce(t.lineStyle):n.dashPattern,hatchPattern:t.hatchPattern??n.hatchPattern,hatchSpacing:t.hatchSpacing??n.hatchSpacing,hatchAngle:t.hatchAngle??n.hatchAngle,hatchSecondaryAngle:t.hatchSecondaryAngle??n.hatchSecondaryAngle,hatchColor:t.hatchColor??n.hatchColor,hatchLineWeight:t.hatchLineWeight??n.hatchLineWeight,visible:t.visible??n.visible,opacity:t.opacity??n.opacity,drawOrder:t.drawOrder??n.drawOrder}}class $t{rules=[];constructor(t){t&&this.setRules(t)}setRules(t){this.rules=[...t].sort((e,i)=>e.priority-i.priority)}addRule(t){this.rules.push(t),this.rules.sort((e,i)=>e.priority-i.priority)}removeRule(t){this.rules=this.rules.filter(e=>e.id!==t)}getRules(){return[...this.rules]}applyOverrides(t,e){let i=e?gt(k,e):{...k};const s=[];for(const o of this.rules)o.enabled&&q(o.criteria,t)&&(i=gt(i,o.style),s.push(o));return{element:t,style:i,matchedRules:s}}applyOverridesToMany(t,e){const i=new Map;for(const s of t){const o=e?.get(s.expressId);i.set(s.expressId,this.applyOverrides(s,o))}return i}getMatchingRules(t){return this.rules.filter(e=>e.enabled&&q(e.criteria,t))}static validateCriteria(t){const e=[];if(St(t)){(!t.conditions||t.conditions.length===0)&&e.push("Compound criteria must have at least one condition");for(const i of t.conditions)e.push(...$t.validateCriteria(i))}else t.type||e.push("Criterion must have a type"),t.type==="property"&&!t.propertyName&&e.push("Property criterion requires propertyName"),t.type==="ifcType"&&(!t.ifcTypes||t.ifcTypes.length===0)&&e.push("IFC type criterion requires at least one type");return e}}function P(n,t=!0){return{type:"ifcType",ifcTypes:n,includeSubtypes:t}}function E(n,t,e,i){return{type:"property",propertyName:n,propertySet:i,operator:t,value:e}}function T(...n){return{logic:"and",conditions:n}}let Ie=0;function we(){return`builtin-rule-${++Ie}`}function F(n,t,e,i=100,s){return{id:we(),name:n,description:s,enabled:!0,priority:i,criteria:t,style:e}}const Me=[F("Walls - Heavy cut lines",P(["IfcWall"]),{lineWeight:"heavy",strokeColor:"#000000",hatchPattern:"diagonal",hatchSpacing:3,hatchAngle:45},100,"Standard wall representation"),F("Columns - Heavy cut lines",P(["IfcColumn"]),{lineWeight:"heavy",strokeColor:"#000000",hatchPattern:"cross-hatch",hatchSpacing:2},100),F("Slabs - Medium lines",P(["IfcSlab"]),{lineWeight:"medium",fillColor:"#E0E0E0",hatchPattern:"concrete"},90),F("Windows - Light blue tint",P(["IfcWindow"]),{lineWeight:"light",fillColor:"#E3F2FD",strokeColor:"#1976D2",hatchPattern:"none"},80),F("Doors - No fill",P(["IfcDoor"]),{lineWeight:"medium",fillColor:"#FFFFFF",strokeColor:"#000000",hatchPattern:"none"},80),F("Furniture - Hairline",P(["IfcFurnishingElement","IfcFurniture"]),{lineWeight:"hairline",strokeColor:"#666666",fillColor:"#F5F5F5",hatchPattern:"none"},60)],Fe={id:"preset-architectural",name:"Architectural Standards",description:"ISO 128 compliant architectural drawing standards",icon:"PenTool",rules:Me,builtIn:!0,category:"Standards"},Pe=[F("Fire Rated 2hr+ - Red",T(P(["IfcWall"]),E("FireRating","greaterOrEqual",120)),{fillColor:"#FFCDD2",strokeColor:"#C62828",lineWeight:"heavy",hatchPattern:"diagonal",hatchColor:"#C62828"},200,"2-hour or higher fire rating"),F("Fire Rated 1hr - Orange",T(P(["IfcWall"]),E("FireRating","greaterOrEqual",60)),{fillColor:"#FFE0B2",strokeColor:"#E65100",lineWeight:"heavy",hatchPattern:"diagonal",hatchColor:"#E65100"},190),F("Fire Rated 30min - Yellow",T(P(["IfcWall"]),E("FireRating","greaterOrEqual",30)),{fillColor:"#FFF9C4",strokeColor:"#F9A825",lineWeight:"medium",hatchPattern:"diagonal",hatchColor:"#F9A825"},180),F("Fire Doors - Red outline",T(P(["IfcDoor"]),E("FireRating","exists")),{strokeColor:"#C62828",lineWeight:"heavy"},200),F("Escape Routes - Green",T(P(["IfcSpace"]),E("OccupancyType","contains","CIRCULATION")),{fillColor:"#C8E6C9",strokeColor:"#2E7D32",lineWeight:"light"},150)],Se={id:"preset-fire-safety",name:"Fire Safety",description:"Highlight fire-rated elements and escape routes",icon:"Flame",rules:Pe,builtIn:!0,category:"Safety"},$e=[F("Load-bearing Walls - Blue",T(P(["IfcWall"]),E("LoadBearing","equals",!0)),{fillColor:"#BBDEFB",strokeColor:"#1565C0",lineWeight:"heavy",hatchPattern:"diagonal",hatchColor:"#1565C0"},200),F("Columns - Blue heavy",P(["IfcColumn"]),{fillColor:"#90CAF9",strokeColor:"#0D47A1",lineWeight:"heavy",hatchPattern:"cross-hatch",hatchColor:"#0D47A1"},190),F("Beams - Blue medium",P(["IfcBeam"]),{fillColor:"#64B5F6",strokeColor:"#1976D2",lineWeight:"medium",hatchPattern:"diagonal"},180),F("Slabs - Light blue",P(["IfcSlab"]),{fillColor:"#E3F2FD",strokeColor:"#42A5F5",lineWeight:"medium"},170),F("Footings - Dark blue",P(["IfcFooting","IfcPile"]),{fillColor:"#1976D2",strokeColor:"#0D47A1",lineWeight:"heavy",hatchPattern:"concrete"},200),F("Non-structural - Faded",P(["IfcFurnishingElement","IfcFurniture","IfcCovering"]),{opacity:.3,lineWeight:"hairline"},50)],Ae={id:"preset-structural",name:"Structural Highlight",description:"Emphasize structural elements, fade non-structural",icon:"Building2",rules:$e,builtIn:!0,category:"Discipline"},Le=[F("HVAC Ducts - Blue",P(["IfcDuctSegment","IfcDuctFitting"]),{fillColor:"#E3F2FD",strokeColor:"#1976D2",lineWeight:"medium"},150),F("Air Terminals - Blue",P(["IfcAirTerminal","IfcAirTerminalBox"]),{fillColor:"#BBDEFB",strokeColor:"#1565C0",lineWeight:"light"},140),F("Pipes - Green",P(["IfcPipeSegment","IfcPipeFitting"]),{fillColor:"#E8F5E9",strokeColor:"#388E3C",lineWeight:"medium"},150),F("Plumbing Fixtures - Green",P(["IfcSanitaryTerminal","IfcWasteTerminal"]),{fillColor:"#C8E6C9",strokeColor:"#2E7D32",lineWeight:"light"},140),F("Cable Trays - Orange",P(["IfcCableCarrierSegment","IfcCableCarrierFitting"]),{fillColor:"#FFF3E0",strokeColor:"#E65100",lineWeight:"light"},150),F("Electrical Equipment - Yellow",P(["IfcElectricDistributionBoard","IfcSwitchingDevice","IfcOutlet"]),{fillColor:"#FFFDE7",strokeColor:"#F9A825",lineWeight:"light"},140),F("Architectural - Faded",P(["IfcWall","IfcSlab","IfcDoor","IfcWindow"]),{opacity:.4,strokeColor:"#9E9E9E"},50)],ve={id:"preset-mep",name:"MEP Highlight",description:"Color-code mechanical, electrical, and plumbing systems",icon:"Wrench",rules:Le,builtIn:!0,category:"Discipline"},ke={id:"preset-3d-colors",name:"Default",description:"By material color",icon:"Palette",rules:[],builtIn:!0,category:"Standards"},Ee=[F("All elements - Black and white",{type:"all"},{strokeColor:"#000000",fillColor:"#FFFFFF",hatchColor:"#000000"},1),F("Cut elements - Gray fill",P(["IfcWall","IfcColumn","IfcSlab","IfcBeam"]),{fillColor:"#E0E0E0"},10)],Te={id:"preset-monochrome",name:"Monochrome",description:"Black and white print-ready output",icon:"Printer",rules:Ee,builtIn:!0,category:"Output"},je=[ke,Fe,Se,Ae,ve,Te],Ge={A0_LANDSCAPE:{id:"A0_LANDSCAPE",name:"A0 Landscape",category:"ISO",widthMm:1189,heightMm:841,orientation:"landscape",defaultMarginMm:20},A0_PORTRAIT:{id:"A0_PORTRAIT",name:"A0 Portrait",category:"ISO",widthMm:841,heightMm:1189,orientation:"portrait",defaultMarginMm:20},A1_LANDSCAPE:{id:"A1_LANDSCAPE",name:"A1 Landscape",category:"ISO",widthMm:841,heightMm:594,orientation:"landscape",defaultMarginMm:20},A1_PORTRAIT:{id:"A1_PORTRAIT",name:"A1 Portrait",category:"ISO",widthMm:594,heightMm:841,orientation:"portrait",defaultMarginMm:20},A2_LANDSCAPE:{id:"A2_LANDSCAPE",name:"A2 Landscape",category:"ISO",widthMm:594,heightMm:420,orientation:"landscape",defaultMarginMm:15},A2_PORTRAIT:{id:"A2_PORTRAIT",name:"A2 Portrait",category:"ISO",widthMm:420,heightMm:594,orientation:"portrait",defaultMarginMm:15},A3_LANDSCAPE:{id:"A3_LANDSCAPE",name:"A3 Landscape",category:"ISO",widthMm:420,heightMm:297,orientation:"landscape",defaultMarginMm:10},A3_PORTRAIT:{id:"A3_PORTRAIT",name:"A3 Portrait",category:"ISO",widthMm:297,heightMm:420,orientation:"portrait",defaultMarginMm:10},A4_LANDSCAPE:{id:"A4_LANDSCAPE",name:"A4 Landscape",category:"ISO",widthMm:297,heightMm:210,orientation:"landscape",defaultMarginMm:10},A4_PORTRAIT:{id:"A4_PORTRAIT",name:"A4 Portrait",category:"ISO",widthMm:210,heightMm:297,orientation:"portrait",defaultMarginMm:10},LETTER_LANDSCAPE:{id:"LETTER_LANDSCAPE",name:"US Letter Landscape",category:"ANSI",widthMm:279.4,heightMm:215.9,orientation:"landscape",defaultMarginMm:10},LETTER_PORTRAIT:{id:"LETTER_PORTRAIT",name:"US Letter Portrait",category:"ANSI",widthMm:215.9,heightMm:279.4,orientation:"portrait",defaultMarginMm:10},LEGAL_LANDSCAPE:{id:"LEGAL_LANDSCAPE",name:"US Legal Landscape",category:"ANSI",widthMm:355.6,heightMm:215.9,orientation:"landscape",defaultMarginMm:10},LEGAL_PORTRAIT:{id:"LEGAL_PORTRAIT",name:"US Legal Portrait",category:"ANSI",widthMm:215.9,heightMm:355.6,orientation:"portrait",defaultMarginMm:10},TABLOID_LANDSCAPE:{id:"TABLOID_LANDSCAPE",name:"US Tabloid Landscape",category:"ANSI",widthMm:431.8,heightMm:279.4,orientation:"landscape",defaultMarginMm:15},TABLOID_PORTRAIT:{id:"TABLOID_PORTRAIT",name:"US Tabloid Portrait",category:"ANSI",widthMm:279.4,heightMm:431.8,orientation:"portrait",defaultMarginMm:15},ANSI_C:{id:"ANSI_C",name:"ANSI C (17x22)",category:"ANSI",widthMm:558.8,heightMm:431.8,orientation:"landscape",defaultMarginMm:15},ANSI_D:{id:"ANSI_D",name:"ANSI D (22x34)",category:"ANSI",widthMm:863.6,heightMm:558.8,orientation:"landscape",defaultMarginMm:20},ANSI_E:{id:"ANSI_E",name:"ANSI E (34x44)",category:"ANSI",widthMm:1117.6,heightMm:863.6,orientation:"landscape",defaultMarginMm:20},ARCH_A:{id:"ARCH_A",name:"ARCH A (9x12)",category:"ARCH",widthMm:304.8,heightMm:228.6,orientation:"landscape",defaultMarginMm:10},ARCH_B:{id:"ARCH_B",name:"ARCH B (12x18)",category:"ARCH",widthMm:457.2,heightMm:304.8,orientation:"landscape",defaultMarginMm:15},ARCH_C:{id:"ARCH_C",name:"ARCH C (18x24)",category:"ARCH",widthMm:609.6,heightMm:457.2,orientation:"landscape",defaultMarginMm:15},ARCH_D:{id:"ARCH_D",name:"ARCH D (24x36)",category:"ARCH",widthMm:914.4,heightMm:609.6,orientation:"landscape",defaultMarginMm:20},ARCH_E:{id:"ARCH_E",name:"ARCH E (36x48)",category:"ARCH",widthMm:1219.2,heightMm:914.4,orientation:"landscape",defaultMarginMm:20},ARCH_E1:{id:"ARCH_E1",name:"ARCH E1 (30x42)",category:"ARCH",widthMm:1066.8,heightMm:762,orientation:"landscape",defaultMarginMm:20}},Ve={simple:{margins:{top:10,right:10,bottom:10,left:10,bindingMargin:0},border:{outerLineWeight:.7,innerLineWeight:.35,borderGap:0,showFoldMarks:!1,showTrimMarks:!1},showZoneReferences:!1,horizontalZones:0,verticalZones:0,zoneFontSize:3},professional:{margins:{top:10,right:10,bottom:10,left:20,bindingMargin:10},border:{outerLineWeight:.7,innerLineWeight:.35,borderGap:5,showFoldMarks:!0,showTrimMarks:!0},showZoneReferences:!0,horizontalZones:8,verticalZones:6,zoneFontSize:3.5},minimal:{margins:{top:5,right:5,bottom:5,left:5,bindingMargin:0},border:{outerLineWeight:.35,innerLineWeight:0,borderGap:0,showFoldMarks:!1,showTrimMarks:!1},showZoneReferences:!1,horizontalZones:0,verticalZones:0,zoneFontSize:3},iso:{margins:{top:10,right:10,bottom:10,left:20,bindingMargin:10},border:{outerLineWeight:.7,innerLineWeight:.35,borderGap:5,showFoldMarks:!0,showTrimMarks:!0},showZoneReferences:!0,horizontalZones:8,verticalZones:4,zoneFontSize:3.5},custom:{margins:{top:10,right:10,bottom:10,left:10,bindingMargin:0},border:{outerLineWeight:.5,innerLineWeight:.25,borderGap:3,showFoldMarks:!1,showTrimMarks:!1},showZoneReferences:!1,horizontalZones:0,verticalZones:0,zoneFontSize:3}},Ye=[{id:"project-name",label:"Project",value:"",editable:!0,autoPopulate:!0,autoPopulateSource:"project.name",fontSize:4.5,fontWeight:"bold",row:0,col:0,colSpan:2},{id:"drawing-title",label:"Drawing Title",value:"Section",editable:!0,autoPopulate:!1,fontSize:5,fontWeight:"bold",row:1,col:0,colSpan:2},{id:"drawing-number",label:"Drawing No.",value:"A-001",editable:!0,autoPopulate:!1,fontSize:4,fontWeight:"bold",row:2,col:0},{id:"revision",label:"Rev",value:"-",editable:!0,autoPopulate:!1,fontSize:3.5,fontWeight:"bold",row:2,col:1},{id:"scale",label:"Scale",value:"1:100",editable:!1,autoPopulate:!0,autoPopulateSource:"drawing.scale",fontSize:3.5,fontWeight:"normal",row:3,col:0},{id:"date",label:"Date",value:"",editable:!0,autoPopulate:!0,autoPopulateSource:"date.today",fontSize:3,fontWeight:"normal",row:3,col:1},{id:"drawn-by",label:"Drawn",value:"",editable:!0,autoPopulate:!1,fontSize:3,fontWeight:"normal",row:4,col:0},{id:"checked-by",label:"Checked",value:"",editable:!0,autoPopulate:!1,fontSize:3,fontWeight:"normal",row:4,col:1},{id:"sheet-number",label:"Sheet",value:"1 of 1",editable:!0,autoPopulate:!1,fontSize:3,fontWeight:"normal",row:5,col:0,colSpan:2}],Xe={compact:{layout:"compact",position:"bottom-right",widthMm:120,heightMm:35,borderWeight:.5,gridWeight:.25,showRevisionHistory:!1,maxRevisionEntries:0},standard:{layout:"standard",position:"bottom-right",widthMm:180,heightMm:55,borderWeight:.5,gridWeight:.25,showRevisionHistory:!0,maxRevisionEntries:3},extended:{layout:"extended",position:"bottom-full",widthMm:0,heightMm:70,borderWeight:.5,gridWeight:.25,showRevisionHistory:!0,maxRevisionEntries:5},custom:{layout:"custom",position:"bottom-right",widthMm:180,heightMm:55,borderWeight:.5,gridWeight:.25,showRevisionHistory:!1,maxRevisionEntries:0}},qe={visible:!0,style:"alternating",position:"below-viewport",units:"metric",totalLengthM:5,primaryDivisions:5,subdivisions:2,heightMm:3,labelFontSize:2.5,showUnitLabel:!0,fillColor:"#000000",strokeColor:"#000000",lineWeight:.25};function Ze(n,t){const i=Math.min(80,t*.8)*n/1e3,s=[.1,.2,.5,1,2,5,10,20,50,100,200,500,1e3];for(const o of s)if(o>=i*.5&&o<=i*1.5)return o;return Math.round(i)}const Je={style:"simple",rotation:0,positionMm:{x:30,y:30},sizeMm:15};function Ke(n,t,e){const i=t.margins.left+t.margins.bindingMargin+t.border.borderGap,s=n.widthMm-t.margins.right-t.border.borderGap,o=t.margins.top+t.border.borderGap,r=n.heightMm-t.margins.bottom-t.border.borderGap;let a=i,l=o,c=s-i,u=r-o;const h=5;switch(e.position){case"bottom-right":u=r-o-e.heightMm-h;break;case"bottom-full":u=r-o-e.heightMm-h;break;case"right-strip":c=s-i-e.widthMm-h;break}return{x:a,y:l,width:c,height:u}}function Qe(n,t,e){const i=n.maxX-n.minX,s=n.maxY-n.minY,o=1e3/e.factor,r=i*o,a=s*o,l=.95,c=t.width*l/r,u=t.height*l/a,h=Math.min(c,u,1),d=o*h,f=i*d,g=s*d,p=t.x+(t.width-f)/2-n.minX*d,y=t.y+(t.height-g)/2+n.maxY*d;return{translateX:p,translateY:y,scaleFactor:d}}function tn(n,t){let e=` <g id="drawing-frame">
195
- `;const i=t.margins.left+t.margins.bindingMargin,s=t.margins.top,o=n.widthMm-t.margins.left-t.margins.right-t.margins.bindingMargin,r=n.heightMm-t.margins.top-t.margins.bottom;e+=` <rect x="${i.toFixed(2)}" y="${s.toFixed(2)}" `,e+=`width="${o.toFixed(2)}" height="${r.toFixed(2)}" `,e+=`fill="none" stroke="#000000" stroke-width="${t.border.outerLineWeight}"/>
196
- `;let a=i,l=s,c=o,u=r;return t.border.borderGap>0&&t.border.innerLineWeight>0&&(a=i+t.border.borderGap,l=s+t.border.borderGap,c=o-2*t.border.borderGap,u=r-2*t.border.borderGap,e+=` <rect x="${a.toFixed(2)}" y="${l.toFixed(2)}" `,e+=`width="${c.toFixed(2)}" height="${u.toFixed(2)}" `,e+=`fill="none" stroke="#000000" stroke-width="${t.border.innerLineWeight}"/>
197
- `),t.showZoneReferences&&t.horizontalZones>0&&(e+=De(i,s,o,r,t.border.borderGap,t.horizontalZones,t.verticalZones,t.zoneFontSize,t.border.innerLineWeight)),t.border.showFoldMarks&&(e+=Re(n)),t.border.showTrimMarks&&(e+=We(n)),e+=` </g>
198
- `,{svgElements:e,innerBounds:{x:a,y:l,width:c,height:u}}}function De(n,t,e,i,s,o,r,a,l){let c=` <g id="zone-references">
199
- `;const u=e/o,h=i/r,d="ABCDEFGHIJKLMNOPQRSTUVWXYZ";for(let f=0;f<o;f++){const g=n+u*(f+.5),p=d[f%26];if(c+=` <text x="${g.toFixed(2)}" y="${(t-s/2).toFixed(2)}" `,c+=`font-family="Arial, sans-serif" font-size="${a}" `,c+=`text-anchor="middle" dominant-baseline="middle">${p}</text>
200
- `,c+=` <text x="${g.toFixed(2)}" y="${(t+i+s/2).toFixed(2)}" `,c+=`font-family="Arial, sans-serif" font-size="${a}" `,c+=`text-anchor="middle" dominant-baseline="middle">${p}</text>
201
- `,f>0){const y=n+u*f;c+=` <line x1="${y.toFixed(2)}" y1="${t.toFixed(2)}" `,c+=`x2="${y.toFixed(2)}" y2="${(t-s+2).toFixed(2)}" `,c+=`stroke="#000000" stroke-width="${l}"/>
202
- `,c+=` <line x1="${y.toFixed(2)}" y1="${(t+i).toFixed(2)}" `,c+=`x2="${y.toFixed(2)}" y2="${(t+i+s-2).toFixed(2)}" `,c+=`stroke="#000000" stroke-width="${l}"/>
203
- `}}for(let f=0;f<r;f++){const g=t+h*(f+.5),p=(f+1).toString();if(c+=` <text x="${(n-s/2).toFixed(2)}" y="${g.toFixed(2)}" `,c+=`font-family="Arial, sans-serif" font-size="${a}" `,c+=`text-anchor="middle" dominant-baseline="middle">${p}</text>
204
- `,c+=` <text x="${(n+e+s/2).toFixed(2)}" y="${g.toFixed(2)}" `,c+=`font-family="Arial, sans-serif" font-size="${a}" `,c+=`text-anchor="middle" dominant-baseline="middle">${p}</text>
205
- `,f>0){const y=t+h*f;c+=` <line x1="${n.toFixed(2)}" y1="${y.toFixed(2)}" `,c+=`x2="${(n-s+2).toFixed(2)}" y2="${y.toFixed(2)}" `,c+=`stroke="#000000" stroke-width="${l}"/>
206
- `,c+=` <line x1="${(n+e).toFixed(2)}" y1="${y.toFixed(2)}" `,c+=`x2="${(n+e+s-2).toFixed(2)}" y2="${y.toFixed(2)}" `,c+=`stroke="#000000" stroke-width="${l}"/>
207
- `}}return c+=` </g>
208
- `,c}function Re(n,t,e,i,s){let o=` <g id="fold-marks">
209
- `;if(n.heightMm>297){const u=Math.ceil(n.heightMm/297);for(let h=1;h<u;h++){const d=h*297;d<n.heightMm-20&&(o+=` <line x1="0" y1="${d.toFixed(2)}" x2="${5 .toFixed(2)}" y2="${d.toFixed(2)}" `,o+=`stroke="#000000" stroke-width="${.25}"/>
210
- `,o+=` <line x1="${(n.widthMm-5).toFixed(2)}" y1="${d.toFixed(2)}" `,o+=`x2="${n.widthMm.toFixed(2)}" y2="${d.toFixed(2)}" `,o+=`stroke="#000000" stroke-width="${.25}"/>
211
- `)}}if(n.widthMm>210){const u=Math.ceil(n.widthMm/210);for(let h=1;h<u;h++){const d=n.widthMm-h*210;d>20&&(o+=` <line x1="${d.toFixed(2)}" y1="0" x2="${d.toFixed(2)}" y2="${5 .toFixed(2)}" `,o+=`stroke="#000000" stroke-width="${.25}"/>
212
- `,o+=` <line x1="${d.toFixed(2)}" y1="${(n.heightMm-5).toFixed(2)}" `,o+=`x2="${d.toFixed(2)}" y2="${n.heightMm.toFixed(2)}" `,o+=`stroke="#000000" stroke-width="${.25}"/>
213
- `)}}return o+=` </g>
214
- `,o}function We(n){let t=` <g id="trim-marks">
215
- `;return t+=` <line x1="${3 .toFixed(2)}" y1="0" x2="${3 .toFixed(2)}" y2="${8 .toFixed(2)}" `,t+=`stroke="#000000" stroke-width="${.15}"/>
216
- `,t+=` <line x1="0" y1="${3 .toFixed(2)}" x2="${8 .toFixed(2)}" y2="${3 .toFixed(2)}" `,t+=`stroke="#000000" stroke-width="${.15}"/>
217
- `,t+=` <line x1="${(n.widthMm-3).toFixed(2)}" y1="0" `,t+=`x2="${(n.widthMm-3).toFixed(2)}" y2="${8 .toFixed(2)}" `,t+=`stroke="#000000" stroke-width="${.15}"/>
218
- `,t+=` <line x1="${(n.widthMm-8).toFixed(2)}" y1="${3 .toFixed(2)}" `,t+=`x2="${n.widthMm.toFixed(2)}" y2="${3 .toFixed(2)}" `,t+=`stroke="#000000" stroke-width="${.15}"/>
219
- `,t+=` <line x1="${3 .toFixed(2)}" y1="${(n.heightMm-8).toFixed(2)}" `,t+=`x2="${3 .toFixed(2)}" y2="${n.heightMm.toFixed(2)}" `,t+=`stroke="#000000" stroke-width="${.15}"/>
220
- `,t+=` <line x1="0" y1="${(n.heightMm-3).toFixed(2)}" `,t+=`x2="${8 .toFixed(2)}" y2="${(n.heightMm-3).toFixed(2)}" `,t+=`stroke="#000000" stroke-width="${.15}"/>
221
- `,t+=` <line x1="${(n.widthMm-3).toFixed(2)}" y1="${(n.heightMm-8).toFixed(2)}" `,t+=`x2="${(n.widthMm-3).toFixed(2)}" y2="${n.heightMm.toFixed(2)}" `,t+=`stroke="#000000" stroke-width="${.15}"/>
222
- `,t+=` <line x1="${(n.widthMm-8).toFixed(2)}" y1="${(n.heightMm-3).toFixed(2)}" `,t+=`x2="${n.widthMm.toFixed(2)}" y2="${(n.heightMm-3).toFixed(2)}" `,t+=`stroke="#000000" stroke-width="${.15}"/>
223
- `,t+=` </g>
224
- `,t}function en(n,t,e=[],i){let s,o,r,a;switch(n.position){case"bottom-right":r=n.widthMm,a=n.heightMm,s=t.x+t.width-r,o=t.y+t.height-a;break;case"bottom-full":r=t.width,a=n.heightMm,s=t.x,o=t.y+t.height-a;break;case"right-strip":r=n.widthMm,a=t.height,s=t.x+t.width-r,o=t.y;break;default:r=n.widthMm,a=n.heightMm,s=t.x+t.width-r,o=t.y+t.height-a}let l=` <g id="title-block">
225
- `;return n.backgroundColor&&(l+=` <rect x="${s.toFixed(2)}" y="${o.toFixed(2)}" `,l+=`width="${r.toFixed(2)}" height="${a.toFixed(2)}" `,l+=`fill="${n.backgroundColor}"/>
226
- `),l+=` <rect x="${s.toFixed(2)}" y="${o.toFixed(2)}" `,l+=`width="${r.toFixed(2)}" height="${a.toFixed(2)}" `,l+=`fill="none" stroke="#000000" stroke-width="${n.borderWeight}"/>
227
- `,l+=ze(n,s,o,r,a),n.logo?.source&&(l+=_e(n.logo,s,o,r,a)),i?.scaleBar?.visible&&i?.scale&&a>10&&(l+=Ne(i.scaleBar,i.scale,s,o,r,a,n.logo!=null,i.effectiveScaleFactor)),i?.northArrow&&i.northArrow.style!=="none"&&a>15&&(l+=Oe(i.northArrow,s,o,r,a,n.logo!=null,n.position)),n.showRevisionHistory&&e.length>0&&(l+=Be(e.slice(0,n.maxRevisionEntries),s,o,r,a,n)),l+=` </g>
228
- `,{svgElements:l,bounds:{x:s,y:o,width:r,height:a}}}function ze(n,t,e,i,s){let o=` <g id="title-block-fields">
229
- `;const a=n.logo?50:0,l=n.showRevisionHistory?20:0,c=i-a-5,u=s-l-4,h=new Map;for(const b of n.fields){const M=b.row??0;h.has(M)||h.set(M,[]),h.get(M).push(b)}const d=Math.max(...Array.from(h.keys()))+1,f=[];let g=0;for(let b=0;b<d;b++){const M=h.get(b)||[],$=M.length>0?Math.max(...M.map(L=>L.fontSize)):3,A=Math.min($*.5,2.2)+1+$+2;f.push(A),g+=A}const p=g>u?u/g:1,y=f.map(b=>b*p),m=t+a+2,C=e+2,x=c/2,w=[C];for(let b=0;b<y.length-1;b++)w.push(w[b]+y[b]);for(let b=1;b<d;b++){const M=w[b];o+=` <line x1="${m.toFixed(2)}" y1="${M.toFixed(2)}" `,o+=`x2="${(m+c-4).toFixed(2)}" y2="${M.toFixed(2)}" `,o+=`stroke="#000000" stroke-width="${n.gridWeight}"/>
230
- `}for(const[b,M]of h)if(M.some(I=>(I.colSpan??1)<2)){const I=m+x,A=w[b],L=w[b]+y[b];o+=` <line x1="${I.toFixed(2)}" y1="${A.toFixed(2)}" `,o+=`x2="${I.toFixed(2)}" y2="${L.toFixed(2)}" `,o+=`stroke="#000000" stroke-width="${n.gridWeight}"/>
231
- `}for(const[b,M]of h){const $=w[b];y[b];for(const I of M){const A=I.col??0;I.colSpan;const L=m+A*x+1.5,R=p<1?p:1,tt=Math.min(I.fontSize*.45,2.2)*Math.max(R,.7),et=I.fontSize*Math.max(R,.7),nt=$+.5+tt;o+=` <text x="${L.toFixed(2)}" y="${nt.toFixed(2)}" `,o+=`font-family="Arial, sans-serif" font-size="${tt.toFixed(2)}" `,o+=`fill="#666666">${B(I.label)}</text>
232
- `;const At=nt+.8+et*.8;o+=` <text x="${L.toFixed(2)}" y="${At.toFixed(2)}" `,o+=`font-family="Arial, sans-serif" font-size="${et.toFixed(2)}" `,o+=`font-weight="${I.fontWeight}" fill="#000000">${B(I.value)}</text>
233
- `}}return o+=` </g>
234
- `,o}function _e(n,t,e,i,s){let o=` <g id="title-block-logo">
235
- `,r,a;switch(n.position){case"top-left":r=t+3,a=e+3;break;case"top-right":r=t+i-n.widthMm-3,a=e+3;break;case"bottom-left":default:r=t+3,a=e+s-n.heightMm-3;break}return o+=` <image x="${r.toFixed(2)}" y="${a.toFixed(2)}" `,o+=`width="${n.widthMm.toFixed(2)}" height="${n.heightMm.toFixed(2)}" `,o+=`href="${B(n.source)}" preserveAspectRatio="xMidYMid meet"/>
236
- `,o+=` </g>
237
- `,o}function Be(n,t,e,i,s,o){let r=` <g id="revision-history">
238
- `;const l=e-18-2,c=4,u=2.2;r+=` <rect x="${t.toFixed(2)}" y="${l.toFixed(2)}" `,r+=`width="${i.toFixed(2)}" height="${18 .toFixed(2)}" `,r+=`fill="none" stroke="#000000" stroke-width="${o.gridWeight}"/>
239
- `;const h=[{label:"REV",width:i*.1},{label:"DESCRIPTION",width:i*.5},{label:"DATE",width:i*.2},{label:"BY",width:i*.2}];let d=t;for(const f of h)r+=` <text x="${(d+1).toFixed(2)}" y="${(l+3).toFixed(2)}" `,r+=`font-family="Arial, sans-serif" font-size="${u}" `,r+=`font-weight="bold" fill="#000000">${f.label}</text>
240
- `,d>t&&(r+=` <line x1="${d.toFixed(2)}" y1="${l.toFixed(2)}" `,r+=`x2="${d.toFixed(2)}" y2="${(l+18).toFixed(2)}" `,r+=`stroke="#000000" stroke-width="${o.gridWeight}"/>
241
- `),d+=f.width;r+=` <line x1="${t.toFixed(2)}" y1="${(l+c).toFixed(2)}" `,r+=`x2="${(t+i).toFixed(2)}" y2="${(l+c).toFixed(2)}" `,r+=`stroke="#000000" stroke-width="${o.gridWeight}"/>
242
- `;for(let f=0;f<n.length&&f<o.maxRevisionEntries;f++){const g=n[f],p=l+c*(f+1.5);d=t;const y=[g.revision,g.description,g.date,g.author];for(let m=0;m<h.length;m++){const C=Math.floor(h[m].width/2),x=y[m].length>C?y[m].substring(0,C-2)+"..":y[m];r+=` <text x="${(d+1).toFixed(2)}" y="${p.toFixed(2)}" `,r+=`font-family="Arial, sans-serif" font-size="${u}" `,r+=`fill="#000000">${B(x)}</text>
243
- `,d+=h[m].width}f<n.length-1&&(r+=` <line x1="${t.toFixed(2)}" y1="${(l+c*(f+2)).toFixed(2)}" `,r+=`x2="${(t+i).toFixed(2)}" y2="${(l+c*(f+2)).toFixed(2)}" `,r+=`stroke="#000000" stroke-width="${o.gridWeight*.5}"/>
244
- `)}return r+=` </g>
245
- `,r}function Ne(n,t,e,i,s,o,r,a){let l=` <g id="title-block-scale-bar">
246
- `;const c=a??t.factor,u=e+3,h=i+o-8,d=Math.min(s*.3,50),f=n.totalLengthM*1e3/c,g=Math.min(f,d),p=Math.min(n.heightMm,3),y=g*c/1e3,m=n.primaryDivisions,C=g/m;for(let M=0;M<m;M++){const $=u+M*C,I=M%2===0?n.fillColor:"#ffffff";l+=` <rect x="${$.toFixed(2)}" y="${h.toFixed(2)}" `,l+=`width="${C.toFixed(2)}" height="${p.toFixed(2)}" `,l+=`fill="${I}" stroke="${n.strokeColor}" stroke-width="${n.lineWeight}"/>
247
- `}const x=1.8,w=h+p+x+.3;l+=` <text x="${u.toFixed(2)}" y="${w.toFixed(2)}" `,l+=`font-family="Arial, sans-serif" font-size="${x}" `,l+=`text-anchor="start" fill="#000000">0</text>
248
- `;const b=y<1?`${(y*100).toFixed(0)}cm`:`${y.toFixed(0)}m`;return l+=` <text x="${(u+g).toFixed(2)}" y="${w.toFixed(2)}" `,l+=`font-family="Arial, sans-serif" font-size="${x}" `,l+=`text-anchor="end" fill="#000000">${b}</text>
249
- `,l+=` </g>
250
- `,l}function Oe(n,t,e,i,s,o,r){let a=` <g id="title-block-north-arrow">
251
- `;const l=Math.min(n.sizeMm,8,s*.6),c=t+i-l-5,u=e+s-l/2-3,h=n.rotation;a+=` <g transform="translate(${c.toFixed(2)}, ${u.toFixed(2)}) rotate(${h})">
252
- `;const d=l/2;a+=` <polygon points="0,${(-d).toFixed(2)} ${(-d/3).toFixed(2)},${(d/2).toFixed(2)} ${(d/3).toFixed(2)},${(d/2).toFixed(2)}" `,a+=`fill="#000000" stroke="none"/>
253
- `,a+=` <polygon points="0,${(d/3).toFixed(2)} ${(-d/3).toFixed(2)},${(d/2).toFixed(2)} ${(d/3).toFixed(2)},${(d/2).toFixed(2)}" `,a+=`fill="#ffffff" stroke="#000000" stroke-width="0.25"/>
254
- `;const f=l*.4;return a+=` <text x="0" y="${(-d-1).toFixed(2)}" `,a+=`font-family="Arial, sans-serif" font-size="${f.toFixed(2)}" font-weight="bold" `,a+=`text-anchor="middle" fill="#000000">N</text>
255
- `,a+=` </g>
256
- `,a+=` </g>
257
- `,a}function B(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}export{je as B,H as C,Je as D,Ve as F,$t as G,Ge as P,Xe as T,qe as a,Ye as b,He as c,Qe as d,Ze as e,Ke as f,Ue as g,en as h,tn as r};
@@ -1 +0,0 @@
1
- let n;function g(e){O===y.length&&y.push(y.length+1);const t=O;return O=y[t],y[t]=e,t}function $t(e){if(J==1)throw new Error("out of js stack");return y[--J]=e,J}const at=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>e.dtor(e.a,e.b));function qt(e){e<132||(y[e]=O,O=e)}function nt(e,t){return e=e>>>0,ee().subarray(e/4,e/4+t)}function Jt(e,t){return e=e>>>0,re().subarray(e/8,e/8+t)}function Ft(e,t){return e=e>>>0,jt().subarray(e/4,e/4+t)}function Nt(e,t){return e=e>>>0,te().subarray(e/8,e/8+t)}function Qt(e,t){return e=e>>>0,k().subarray(e/1,e/1+t)}let R=null;function te(){return(R===null||R.byteLength===0)&&(R=new BigUint64Array(n.memory.buffer)),R}let F=null;function a(){return(F===null||F.buffer.detached===!0||F.buffer.detached===void 0&&F.buffer!==n.memory.buffer)&&(F=new DataView(n.memory.buffer)),F}let T=null;function ee(){return(T===null||T.byteLength===0)&&(T=new Float32Array(n.memory.buffer)),T}let B=null;function re(){return(B===null||B.byteLength===0)&&(B=new Float64Array(n.memory.buffer)),B}function f(e,t){return e=e>>>0,se(e,t)}let E=null;function jt(){return(E===null||E.byteLength===0)&&(E=new Uint32Array(n.memory.buffer)),E}let P=null;function k(){return(P===null||P.byteLength===0)&&(P=new Uint8Array(n.memory.buffer)),P}function d(e){return y[e]}function et(e,t){try{return e.apply(this,t)}catch(r){n.__wbindgen_export(g(r))}}let y=new Array(128).fill(void 0);y.push(void 0,null,!0,!1);let O=y.length;function C(e){return e==null}function ne(e,t,r,_){const s={a:e,b:t,cnt:1,dtor:r},i=(...c)=>{s.cnt++;const o=s.a;s.a=0;try{return _(o,s.b,...c)}finally{s.a=o,i._wbg_cb_unref()}};return i._wbg_cb_unref=()=>{--s.cnt===0&&(s.dtor(s.a,s.b),s.a=0,at.unregister(s))},at.register(i,s,s),i}function v(e,t){const r=t(e.length*4,4)>>>0;return jt().set(e,r/4),p=e.length,r}function S(e,t){const r=t(e.length*1,1)>>>0;return k().set(e,r/1),p=e.length,r}function m(e,t,r){if(r===void 0){const o=z.encode(e),b=t(o.length,1)>>>0;return k().subarray(b,b+o.length).set(o),p=o.length,b}let _=e.length,s=t(_,1)>>>0;const i=k();let c=0;for(;c<_;c++){const o=e.charCodeAt(c);if(o>127)break;i[s+c]=o}if(c!==_){c!==0&&(e=e.slice(c)),s=r(s,_,_=c+e.length*3,1)>>>0;const o=k().subarray(s+c,s+_),b=z.encodeInto(e,o);c+=b.written,s=r(s,_,c,1)>>>0}return p=c,s}let J=128;function l(e){const t=d(e);return qt(e),t}let N=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});N.decode();const _e=2146435072;let rt=0;function se(e,t){return rt+=t,rt>=_e&&(N=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),N.decode(),rt=t),N.decode(k().subarray(e,e+t))}const z=new TextEncoder;"encodeInto"in z||(z.encodeInto=function(e,t){const r=z.encode(e);return t.set(r),{read:e.length,written:r.length}});let p=0;function ie(e,t,r){n.__wasm_bindgen_func_elem_675(e,t,g(r))}function oe(e,t,r,_){n.__wasm_bindgen_func_elem_709(e,t,g(r),g(_))}typeof FinalizationRegistry>"u"||new FinalizationRegistry(e=>n.__wbg_clashrunresult_free(e>>>0,1));typeof FinalizationRegistry>"u"||new FinalizationRegistry(e=>n.__wbg_clashsession_free(e>>>0,1));const ct=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_gridaxiscollection_free(e>>>0,1)),lt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_gridaxisjs_free(e>>>0,1)),gt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_ifcapi_free(e>>>0,1)),pt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_meshcollection_free(e>>>0,1)),dt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_meshdatajs_free(e>>>0,1));typeof FinalizationRegistry>"u"||new FinalizationRegistry(e=>n.__wbg_meshoutlinejs_free(e>>>0,1));const bt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_profilecollection_free(e>>>0,1)),ft=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_profileentryjs_free(e>>>0,1)),ut=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symboliccircle_free(e>>>0,1)),wt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symbolicfillarea_free(e>>>0,1)),yt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symbolicpolyline_free(e>>>0,1)),ht=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symbolicrepresentationcollection_free(e>>>0,1)),mt=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>n.__wbg_symbolictext_free(e>>>0,1));class L{static __wrap(t){t=t>>>0;const r=Object.create(L.prototype);return r.__wbg_ptr=t,ct.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,ct.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_gridaxiscollection_free(t,0)}get length(){return n.gridaxiscollection_length(this.__wbg_ptr)>>>0}getAxis(t){const r=n.gridaxiscollection_getAxis(this.__wbg_ptr,t);return r===0?void 0:W.__wrap(r)}get isEmpty(){return n.gridaxiscollection_isEmpty(this.__wbg_ptr)!==0}}Symbol.dispose&&(L.prototype[Symbol.dispose]=L.prototype.free);class W{static __wrap(t){t=t>>>0;const r=Object.create(W.prototype);return r.__wbg_ptr=t,lt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,lt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_gridaxisjs_free(t,0)}get end(){const t=n.gridaxisjs_end(this.__wbg_ptr);return l(t)}get tag(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.gridaxisjs_tag(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get start(){const t=n.gridaxisjs_start(this.__wbg_ptr);return l(t)}get axisId(){return n.gridaxisjs_axisId(this.__wbg_ptr)>>>0}get gridId(){return n.gridaxisjs_gridId(this.__wbg_ptr)>>>0}}Symbol.dispose&&(W.prototype[Symbol.dispose]=W.prototype.free);class tt{__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,gt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_ifcapi_free(t,0)}buildPrePassFast(t){const r=S(t,n.__wbindgen_export3),_=p,s=n.ifcapi_buildPrePassFast(this.__wbg_ptr,r,_);return l(s)}buildPrePassOnce(t){const r=S(t,n.__wbindgen_export3),_=p,s=n.ifcapi_buildPrePassOnce(this.__wbg_ptr,r,_);return l(s)}processGeometryBatch(t,r,_,s,i,c,o,b,h,x,I,A){const M=S(t,n.__wbindgen_export3),Pt=p,Ot=v(r,n.__wbindgen_export3),zt=p,Lt=v(b,n.__wbindgen_export3),Wt=p,Ut=v(h,n.__wbindgen_export3),Ht=p,Gt=v(x,n.__wbindgen_export3),Yt=p,Dt=v(I,n.__wbindgen_export3),Vt=p,Xt=S(A,n.__wbindgen_export3),Zt=p,Kt=n.ifcapi_processGeometryBatch(this.__wbg_ptr,M,Pt,Ot,zt,_,s,i,c,o,Lt,Wt,Ut,Ht,Gt,Yt,Dt,Vt,Xt,Zt);return U.__wrap(Kt)}buildPrePassStreaming(t,r,_){try{const o=n.__wbindgen_add_to_stack_pointer(-16),b=S(t,n.__wbindgen_export3),h=p;n.ifcapi_buildPrePassStreaming(o,this.__wbg_ptr,b,h,$t(r),_);var s=a().getInt32(o+0,!0),i=a().getInt32(o+4,!0),c=a().getInt32(o+8,!0);if(c)throw l(i);return l(s)}finally{n.__wbindgen_add_to_stack_pointer(16),y[J++]=void 0}}parseGridAxes(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=p,s=n.ifcapi_parseGridAxes(this.__wbg_ptr,r,_);return L.__wrap(s)}parseGridLines(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=p,s=n.ifcapi_parseGridLines(this.__wbg_ptr,r,_);return l(s)}parseAlignmentLines(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=p,s=n.ifcapi_parseAlignmentLines(this.__wbg_ptr,r,_);return l(s)}extractProfiles(t,r){const _=m(t,n.__wbindgen_export3,n.__wbindgen_export4),s=p,i=n.ifcapi_extractProfiles(this.__wbg_ptr,_,s,r);return G.__wrap(i)}getMemory(){const t=n.ifcapi_getMemory(this.__wbg_ptr);return l(t)}setEntityIndex(t,r,_){const s=v(t,n.__wbindgen_export3),i=p,c=v(r,n.__wbindgen_export3),o=p,b=v(_,n.__wbindgen_export3),h=p;n.ifcapi_setEntityIndex(this.__wbg_ptr,s,i,c,o,b,h)}setMergeLayers(t){n.ifcapi_setMergeLayers(this.__wbg_ptr,t)}clearPrePassCache(){n.ifcapi_clearPrePassCache(this.__wbg_ptr)}setComputeGeometryHashes(t){n.ifcapi_setComputeGeometryHashes(this.__wbg_ptr,!C(t),C(t)?0:t)}constructor(){const t=n.ifcapi_new();return this.__wbg_ptr=t>>>0,gt.register(this,this.__wbg_ptr,this),this}get version(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.ifcapi_version(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get is_ready(){return n.ifcapi_is_ready(this.__wbg_ptr)!==0}parseStreaming(t,r){const _=m(t,n.__wbindgen_export3,n.__wbindgen_export4),s=p,i=n.ifcapi_parseStreaming(this.__wbg_ptr,_,s,g(r));return l(i)}scanEntitiesFast(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=p,s=n.ifcapi_scanEntitiesFast(this.__wbg_ptr,r,_);return l(s)}scanEntitiesFastBytes(t){const r=S(t,n.__wbindgen_export3),_=p,s=n.ifcapi_scanEntitiesFastBytes(this.__wbg_ptr,r,_);return l(s)}scanGeometryEntitiesFast(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=p,s=n.ifcapi_scanGeometryEntitiesFast(this.__wbg_ptr,r,_);return l(s)}scanRelevantEntitiesFastBytes(t){const r=S(t,n.__wbindgen_export3),_=p,s=n.ifcapi_scanRelevantEntitiesFastBytes(this.__wbg_ptr,r,_);return l(s)}parse(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=p,s=n.ifcapi_parse(this.__wbg_ptr,r,_);return l(s)}parseSymbolicRepresentations(t){const r=m(t,n.__wbindgen_export3,n.__wbindgen_export4),_=p,s=n.ifcapi_parseSymbolicRepresentations(this.__wbg_ptr,r,_);return Z.__wrap(s)}}Symbol.dispose&&(tt.prototype[Symbol.dispose]=tt.prototype.free);class U{static __wrap(t){t=t>>>0;const r=Object.create(U.prototype);return r.__wbg_ptr=t,pt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,pt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_meshcollection_free(t,0)}get rtcOffsetX(){return n.meshcollection_rtcOffsetX(this.__wbg_ptr)}get rtcOffsetY(){return n.meshcollection_rtcOffsetY(this.__wbg_ptr)}get rtcOffsetZ(){return n.meshcollection_rtcOffsetZ(this.__wbg_ptr)}hasRtcOffset(){return n.meshcollection_hasRtcOffset(this.__wbg_ptr)!==0}localToWorld(t,r,_){try{const o=n.__wbindgen_add_to_stack_pointer(-16);n.meshcollection_localToWorld(o,this.__wbg_ptr,t,r,_);var s=a().getInt32(o+0,!0),i=a().getInt32(o+4,!0),c=Jt(s,i).slice();return n.__wbindgen_export2(s,i*8,8),c}finally{n.__wbindgen_add_to_stack_pointer(16)}}get totalVertices(){return n.meshcollection_totalVertices(this.__wbg_ptr)>>>0}get totalTriangles(){return n.meshcollection_totalTriangles(this.__wbg_ptr)>>>0}get buildingRotation(){try{const _=n.__wbindgen_add_to_stack_pointer(-16);n.meshcollection_buildingRotation(_,this.__wbg_ptr);var t=a().getInt32(_+0,!0),r=a().getFloat64(_+8,!0);return t===0?void 0:r}finally{n.__wbindgen_add_to_stack_pointer(16)}}get geometryHashIds(){const t=n.meshcollection_geometryHashIds(this.__wbg_ptr);return l(t)}get geometryHashCount(){return n.meshcollection_geometryHashCount(this.__wbg_ptr)>>>0}get geometryHashValues(){const t=n.meshcollection_geometryHashValues(this.__wbg_ptr);return l(t)}get(t){const r=n.meshcollection_get(this.__wbg_ptr,t);return r===0?void 0:H.__wrap(r)}get length(){return n.meshcollection_length(this.__wbg_ptr)>>>0}}Symbol.dispose&&(U.prototype[Symbol.dispose]=U.prototype.free);class H{static __wrap(t){t=t>>>0;const r=Object.create(H.prototype);return r.__wbg_ptr=t,dt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,dt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_meshdatajs_free(t,0)}get expressId(){return n.meshdatajs_expressId(this.__wbg_ptr)>>>0}get hasTexture(){return n.meshdatajs_hasTexture(this.__wbg_ptr)!==0}get textureRgba(){const t=n.meshdatajs_textureRgba(this.__wbg_ptr);return l(t)}get vertexCount(){return n.meshdatajs_vertexCount(this.__wbg_ptr)>>>0}get shadingColor(){try{const _=n.__wbindgen_add_to_stack_pointer(-16);n.meshdatajs_shadingColor(_,this.__wbg_ptr);var t=a().getInt32(_+0,!0),r=a().getInt32(_+4,!0);let s;return t!==0&&(s=nt(t,r).slice(),n.__wbindgen_export2(t,r*4,4)),s}finally{n.__wbindgen_add_to_stack_pointer(16)}}get textureWidth(){return n.meshdatajs_textureWidth(this.__wbg_ptr)>>>0}get geometryClass(){return n.meshdatajs_geometryClass(this.__wbg_ptr)}get textureHeight(){return n.meshdatajs_textureHeight(this.__wbg_ptr)>>>0}get triangleCount(){return n.meshdatajs_triangleCount(this.__wbg_ptr)>>>0}get textureRepeatS(){return n.meshdatajs_textureRepeatS(this.__wbg_ptr)!==0}get textureRepeatT(){return n.meshdatajs_textureRepeatT(this.__wbg_ptr)!==0}get uvs(){const t=n.meshdatajs_uvs(this.__wbg_ptr);return l(t)}get color(){try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.meshdatajs_color(s,this.__wbg_ptr);var t=a().getInt32(s+0,!0),r=a().getInt32(s+4,!0),_=nt(t,r).slice();return n.__wbindgen_export2(t,r*4,4),_}finally{n.__wbindgen_add_to_stack_pointer(16)}}get indices(){const t=n.meshdatajs_indices(this.__wbg_ptr);return l(t)}get normals(){const t=n.meshdatajs_normals(this.__wbg_ptr);return l(t)}get ifcType(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.meshdatajs_ifcType(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get positions(){const t=n.meshdatajs_positions(this.__wbg_ptr);return l(t)}}Symbol.dispose&&(H.prototype[Symbol.dispose]=H.prototype.free);class G{static __wrap(t){t=t>>>0;const r=Object.create(G.prototype);return r.__wbg_ptr=t,bt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,bt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_profilecollection_free(t,0)}get(t){const r=n.profilecollection_get(this.__wbg_ptr,t);return r===0?void 0:Y.__wrap(r)}get length(){return n.profilecollection_length(this.__wbg_ptr)>>>0}}Symbol.dispose&&(G.prototype[Symbol.dispose]=G.prototype.free);class Y{static __wrap(t){t=t>>>0;const r=Object.create(Y.prototype);return r.__wbg_ptr=t,ft.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,ft.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_profileentryjs_free(t,0)}get expressId(){return n.profileentryjs_expressId(this.__wbg_ptr)>>>0}get holeCounts(){const t=n.profileentryjs_holeCounts(this.__wbg_ptr);return l(t)}get holePoints(){const t=n.profileentryjs_holePoints(this.__wbg_ptr);return l(t)}get modelIndex(){return n.profileentryjs_modelIndex(this.__wbg_ptr)>>>0}get outerPoints(){const t=n.profileentryjs_outerPoints(this.__wbg_ptr);return l(t)}get extrusionDir(){const t=n.profileentryjs_extrusionDir(this.__wbg_ptr);return l(t)}get extrusionDepth(){return n.profileentryjs_extrusionDepth(this.__wbg_ptr)}get ifcType(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.profileentryjs_ifcType(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get transform(){const t=n.profileentryjs_transform(this.__wbg_ptr);return l(t)}}Symbol.dispose&&(Y.prototype[Symbol.dispose]=Y.prototype.free);class D{static __wrap(t){t=t>>>0;const r=Object.create(D.prototype);return r.__wbg_ptr=t,ut.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,ut.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symboliccircle_free(t,0)}get expressId(){return n.symboliccircle_expressId(this.__wbg_ptr)>>>0}get startAngle(){return n.symboliccircle_startAngle(this.__wbg_ptr)}get isFullCircle(){return n.symboliccircle_isFullCircle(this.__wbg_ptr)!==0}get repIdentifier(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symboliccircle_repIdentifier(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get radius(){return n.symboliccircle_radius(this.__wbg_ptr)}get worldY(){return n.symboliccircle_worldY(this.__wbg_ptr)}get centerX(){return n.symboliccircle_centerX(this.__wbg_ptr)}get centerY(){return n.symboliccircle_centerY(this.__wbg_ptr)}get ifcType(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symboliccircle_ifcType(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get endAngle(){return n.symboliccircle_endAngle(this.__wbg_ptr)}}Symbol.dispose&&(D.prototype[Symbol.dispose]=D.prototype.free);class V{static __wrap(t){t=t>>>0;const r=Object.create(V.prototype);return r.__wbg_ptr=t,wt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,wt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symbolicfillarea_free(t,0)}get expressId(){return n.profileentryjs_expressId(this.__wbg_ptr)>>>0}get holeCount(){return n.symbolicfillarea_holeCount(this.__wbg_ptr)>>>0}get hatchAngle(){return n.symbolicfillarea_hatchAngle(this.__wbg_ptr)}get pointCount(){return n.symbolicfillarea_pointCount(this.__wbg_ptr)>>>0}get hasHatching(){return n.symbolicfillarea_hasHatching(this.__wbg_ptr)!==0}get hatchSpacing(){return n.symbolicfillarea_hatchSpacing(this.__wbg_ptr)}get holesOffsets(){const t=n.symbolicfillarea_holesOffsets(this.__wbg_ptr);return l(t)}get repIdentifier(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicfillarea_repIdentifier(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get hatchLineWidth(){return n.symbolicfillarea_hatchLineWidth(this.__wbg_ptr)}get hatchAngleSecondary(){return n.symbolicfillarea_hatchAngleSecondary(this.__wbg_ptr)}get fillA(){return n.symbolicfillarea_fillA(this.__wbg_ptr)}get fillB(){return n.symbolicfillarea_fillB(this.__wbg_ptr)}get fillG(){return n.symbolicfillarea_fillG(this.__wbg_ptr)}get fillR(){return n.symbolicfillarea_fillR(this.__wbg_ptr)}get points(){const t=n.symbolicfillarea_points(this.__wbg_ptr);return l(t)}get worldY(){return n.symbolicfillarea_worldY(this.__wbg_ptr)}get ifcType(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicfillarea_ifcType(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}}Symbol.dispose&&(V.prototype[Symbol.dispose]=V.prototype.free);class X{static __wrap(t){t=t>>>0;const r=Object.create(X.prototype);return r.__wbg_ptr=t,yt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,yt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symbolicpolyline_free(t,0)}get expressId(){return n.symbolicpolyline_expressId(this.__wbg_ptr)>>>0}get pointCount(){return n.symbolicfillarea_pointCount(this.__wbg_ptr)>>>0}get repIdentifier(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicpolyline_repIdentifier(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get points(){const t=n.symbolicpolyline_points(this.__wbg_ptr);return l(t)}get worldY(){return n.symboliccircle_worldY(this.__wbg_ptr)}get ifcType(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicpolyline_ifcType(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get isClosed(){return n.symbolicpolyline_isClosed(this.__wbg_ptr)!==0}}Symbol.dispose&&(X.prototype[Symbol.dispose]=X.prototype.free);class Z{static __wrap(t){t=t>>>0;const r=Object.create(Z.prototype);return r.__wbg_ptr=t,ht.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,ht.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symbolicrepresentationcollection_free(t,0)}get fillCount(){return n.symbolicrepresentationcollection_fillCount(this.__wbg_ptr)>>>0}getCircle(t){const r=n.symbolicrepresentationcollection_getCircle(this.__wbg_ptr,t);return r===0?void 0:D.__wrap(r)}get textCount(){return n.symbolicrepresentationcollection_textCount(this.__wbg_ptr)>>>0}get totalCount(){return n.symbolicrepresentationcollection_totalCount(this.__wbg_ptr)>>>0}get circleCount(){return n.symbolicrepresentationcollection_circleCount(this.__wbg_ptr)>>>0}getPolyline(t){const r=n.symbolicrepresentationcollection_getPolyline(this.__wbg_ptr,t);return r===0?void 0:X.__wrap(r)}get polylineCount(){return n.symbolicrepresentationcollection_polylineCount(this.__wbg_ptr)>>>0}getExpressIds(){try{const s=n.__wbindgen_add_to_stack_pointer(-16);n.symbolicrepresentationcollection_getExpressIds(s,this.__wbg_ptr);var t=a().getInt32(s+0,!0),r=a().getInt32(s+4,!0),_=Ft(t,r).slice();return n.__wbindgen_export2(t,r*4,4),_}finally{n.__wbindgen_add_to_stack_pointer(16)}}getFill(t){const r=n.symbolicrepresentationcollection_getFill(this.__wbg_ptr,t);return r===0?void 0:V.__wrap(r)}getText(t){const r=n.symbolicrepresentationcollection_getText(this.__wbg_ptr,t);return r===0?void 0:K.__wrap(r)}get isEmpty(){return n.symbolicrepresentationcollection_isEmpty(this.__wbg_ptr)!==0}}Symbol.dispose&&(Z.prototype[Symbol.dispose]=Z.prototype.free);class K{static __wrap(t){t=t>>>0;const r=Object.create(K.prototype);return r.__wbg_ptr=t,mt.register(r,r.__wbg_ptr,r),r}__destroy_into_raw(){const t=this.__wbg_ptr;return this.__wbg_ptr=0,mt.unregister(this),t}free(){const t=this.__destroy_into_raw();n.__wbg_symbolictext_free(t,0)}get expressId(){return n.profileentryjs_expressId(this.__wbg_ptr)>>>0}get repIdentifier(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symbolictext_repIdentifier(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get x(){return n.symbolicfillarea_fillR(this.__wbg_ptr)}get y(){return n.symbolicfillarea_fillG(this.__wbg_ptr)}get dirX(){return n.symbolicfillarea_fillB(this.__wbg_ptr)}get dirY(){return n.symbolicfillarea_fillA(this.__wbg_ptr)}get height(){return n.symbolicfillarea_hatchSpacing(this.__wbg_ptr)}get colorA(){return n.symbolictext_colorA(this.__wbg_ptr)}get colorB(){return n.symbolicfillarea_worldY(this.__wbg_ptr)}get colorG(){return n.symbolicfillarea_hatchLineWidth(this.__wbg_ptr)}get colorR(){return n.symbolicfillarea_hatchAngleSecondary(this.__wbg_ptr)}get content(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symbolictext_content(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get worldY(){return n.symbolicfillarea_hatchAngle(this.__wbg_ptr)}get ifcType(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symbolictext_ifcType(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get alignment(){let t,r;try{const i=n.__wbindgen_add_to_stack_pointer(-16);n.symbolictext_alignment(i,this.__wbg_ptr);var _=a().getInt32(i+0,!0),s=a().getInt32(i+4,!0);return t=_,r=s,f(_,s)}finally{n.__wbindgen_add_to_stack_pointer(16),n.__wbindgen_export2(t,r,1)}}get targetPx(){return n.symbolictext_targetPx(this.__wbg_ptr)}}Symbol.dispose&&(K.prototype[Symbol.dispose]=K.prototype.free);const ae=new Set(["basic","cors","default"]);async function ce(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(_){if(e.ok&&ae.has(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",_);else throw _}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}}function Ct(){const e={};return e.wbg={},e.wbg.__wbg_Error_52673b7de5a0ca89=function(t,r){const _=Error(f(t,r));return g(_)},e.wbg.__wbg___wbindgen_is_function_8d400b8b1af978cd=function(t){return typeof d(t)=="function"},e.wbg.__wbg___wbindgen_is_undefined_f6b95eab589e0269=function(t){return d(t)===void 0},e.wbg.__wbg___wbindgen_memory_a342e963fbcabd68=function(){const t=n.memory;return g(t)},e.wbg.__wbg___wbindgen_throw_dd24417ed36fc46e=function(t,r){throw new Error(f(t,r))},e.wbg.__wbg__wbg_cb_unref_87dfb5aaa0cbcea7=function(t){d(t)._wbg_cb_unref()},e.wbg.__wbg_call_3020136f7a2d6e44=function(){return et(function(t,r,_){const s=d(t).call(d(r),d(_));return g(s)},arguments)},e.wbg.__wbg_call_abb4ff46ce38be40=function(){return et(function(t,r){const _=d(t).call(d(r));return g(_)},arguments)},e.wbg.__wbg_error_7534b8e9a36f1ab4=function(t,r){let _,s;try{_=t,s=r,console.error(f(t,r))}finally{n.__wbindgen_export2(_,s,1)}},e.wbg.__wbg_info_ce6bcc489c22f6f0=function(t){console.info(d(t))},e.wbg.__wbg_new_1ba21ce319a06297=function(){const t=new Object;return g(t)},e.wbg.__wbg_new_25f239778d6112b9=function(){const t=new Array;return g(t)},e.wbg.__wbg_new_8a6f238a6ece86ea=function(){const t=new Error;return g(t)},e.wbg.__wbg_new_ff12d2b041fb48f1=function(t,r){try{var _={a:t,b:r},s=(c,o)=>{const b=_.a;_.a=0;try{return oe(b,_.b,c,o)}finally{_.a=b}};const i=new Promise(s);return g(i)}finally{_.a=_.b=0}},e.wbg.__wbg_new_from_slice_41e2764a343e3cb1=function(t,r){const _=new Float32Array(nt(t,r));return g(_)},e.wbg.__wbg_new_from_slice_883d10a76ca46292=function(t,r){const _=new BigUint64Array(Nt(t,r));return g(_)},e.wbg.__wbg_new_from_slice_db0691b69e9d3891=function(t,r){const _=new Uint32Array(Ft(t,r));return g(_)},e.wbg.__wbg_new_from_slice_f9c22b9153b26992=function(t,r){const _=new Uint8Array(Qt(t,r));return g(_)},e.wbg.__wbg_new_no_args_cb138f77cf6151ee=function(t,r){const _=new Function(f(t,r));return g(_)},e.wbg.__wbg_new_with_length_202b3db94ba5fc86=function(t){const r=new Uint32Array(t>>>0);return g(r)},e.wbg.__wbg_new_with_length_806b9e5b8290af7c=function(t){const r=new Float64Array(t>>>0);return g(r)},e.wbg.__wbg_new_with_length_aa5eaf41d35235e5=function(t){const r=new Uint8Array(t>>>0);return g(r)},e.wbg.__wbg_queueMicrotask_9b549dfce8865860=function(t){const r=d(t).queueMicrotask;return g(r)},e.wbg.__wbg_queueMicrotask_fca69f5bfad613a5=function(t){queueMicrotask(d(t))},e.wbg.__wbg_resolve_fd5bfbaa4ce36e1e=function(t){const r=Promise.resolve(d(t));return g(r)},e.wbg.__wbg_set_3f1d0b984ed272ed=function(t,r,_){d(t)[l(r)]=l(_)},e.wbg.__wbg_set_781438a03c0c3c81=function(){return et(function(t,r,_){return Reflect.set(d(t),d(r),d(_))},arguments)},e.wbg.__wbg_set_7df433eea03a5c14=function(t,r,_){d(t)[r>>>0]=l(_)},e.wbg.__wbg_set_index_021489b2916af13e=function(t,r,_){d(t)[r>>>0]=_},e.wbg.__wbg_set_index_04c4b93e64d08a52=function(t,r,_){d(t)[r>>>0]=_},e.wbg.__wbg_set_index_42abe35f117e614e=function(t,r,_){d(t)[r>>>0]=_>>>0},e.wbg.__wbg_stack_0ed75d68575b0f3c=function(t,r){const _=d(r).stack,s=m(_,n.__wbindgen_export3,n.__wbindgen_export4),i=p;a().setInt32(t+4,i,!0),a().setInt32(t+0,s,!0)},e.wbg.__wbg_static_accessor_GLOBAL_769e6b65d6557335=function(){const t=typeof global>"u"?null:global;return C(t)?0:g(t)},e.wbg.__wbg_static_accessor_GLOBAL_THIS_60cf02db4de8e1c1=function(){const t=typeof globalThis>"u"?null:globalThis;return C(t)?0:g(t)},e.wbg.__wbg_static_accessor_SELF_08f5a74c69739274=function(){const t=typeof self>"u"?null:self;return C(t)?0:g(t)},e.wbg.__wbg_static_accessor_WINDOW_a8924b26aa92d024=function(){const t=typeof window>"u"?null:window;return C(t)?0:g(t)},e.wbg.__wbg_then_4f95312d68691235=function(t,r){const _=d(t).then(d(r));return g(_)},e.wbg.__wbg_warn_6e567d0d926ff881=function(t){console.warn(d(t))},e.wbg.__wbindgen_cast_0093e2d96a856a3b=function(t,r){const _=ne(t,r,n.__wasm_bindgen_func_elem_674,ie);return g(_)},e.wbg.__wbindgen_cast_2241b6af4c4b2941=function(t,r){const _=f(t,r);return g(_)},e.wbg.__wbindgen_cast_4625c577ab2ec9ee=function(t){const r=BigInt.asUintN(64,t);return g(r)},e.wbg.__wbindgen_cast_d6cd19b81560fd6e=function(t){return g(t)},e.wbg.__wbindgen_object_clone_ref=function(t){const r=d(t);return g(r)},e.wbg.__wbindgen_object_drop_ref=function(t){l(t)},e}function kt(e,t){return n=e.exports,Mt.__wbindgen_wasm_module=t,R=null,F=null,T=null,B=null,E=null,P=null,n.__wbindgen_start(),n}function le(e){if(n!==void 0)return n;typeof e<"u"&&(Object.getPrototypeOf(e)===Object.prototype?{module:e}=e:console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const t=Ct();e instanceof WebAssembly.Module||(e=new WebAssembly.Module(e));const r=new WebAssembly.Instance(e,t);return kt(r,e)}async function Mt(e){if(n!==void 0)return n;typeof e<"u"&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof e>"u"&&(e=new URL("/assets/ifc-lite_bg-BEA5DLmg.wasm",import.meta.url));const t=Ct();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:r,module:_}=await ce(await e,t);return kt(r,_)}let w=null,Rt;async function j(){return w||(await Mt(Rt),w=new tt,$=!1,_t(),q=!1,st(),w)}let Tt=!1,$=!1;function _t(){if(!w||$)return;const e=w;typeof e.setMergeLayers=="function"&&e.setMergeLayers(Tt),$=!0}let Bt=null,q=!1;function st(){if(!w||q)return;const e=w;typeof e.setComputeGeometryHashes=="function"&&e.setComputeGeometryHashes(Bt),q=!0}function it(e){return new Uint8Array(e)}function ot(e){const t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t}let u=null;const xt=1e6;function vt(e){return{sharedBuffer:e.sharedBuffer,localBytes:it(e.sharedBuffer),sabFallbackTaken:!1,unitScale:e.unitScale,rtcX:e.rtcX,rtcY:e.rtcY,rtcZ:e.rtcZ,needsShift:e.needsShift,voidKeys:e.voidKeys,voidCounts:e.voidCounts,voidValues:e.voidValues,styleIds:e.styleIds,styleColors:e.styleColors,pendingMeshes:[],pendingTransfers:[],totalMeshesEmitted:0,cumulativeMeshBytes:0}}function Et(e){if(e.pendingMeshes.length===0)return;const t=e.pendingMeshes,r=e.pendingTransfers;e.pendingMeshes=[],e.pendingTransfers=[],e.totalMeshesEmitted+=t.length,self.postMessage({type:"batch",meshes:t},r)}function ge(e,t){try{const r=pe(t);for(let _=0;_<t.length;_++){const s=t.get(_);if(s)try{const i=new Float32Array(s.positions),c=new Float32Array(s.normals),o=new Uint32Array(s.indices),b=s.color,h=r.get(s.expressId),x={expressId:s.expressId,ifcType:s.ifcType,positions:i,normals:c,indices:o,color:[b[0],b[1],b[2],b[3]],geometryClass:s.geometryClass??0};if(e.pendingTransfers.push(i.buffer,c.buffer,o.buffer),e.cumulativeMeshBytes+=i.byteLength+c.byteLength+o.byteLength,s.hasTexture){const I=new Float32Array(s.uvs),A=new Uint8Array(s.textureRgba);x.uvs=I,x.texture={rgba:A,width:s.textureWidth,height:s.textureHeight,repeatS:s.textureRepeatS,repeatT:s.textureRepeatT},e.pendingTransfers.push(I.buffer,A.buffer),e.cumulativeMeshBytes+=I.byteLength+A.byteLength}h!==void 0&&(x.geometryHash=h),e.pendingMeshes.push(x)}finally{s.free()}}}finally{t.free()}}function pe(e){const t=new Map,r=e;if((r.geometryHashCount??0)===0)return t;const s=r.geometryHashIds,i=r.geometryHashValues;if(!s||!i)return t;const c=Math.min(s.length,i.length);for(let o=0;o<c;o++)t.set(s[o],i[o]);return t}async function Q(e,t){const r=Math.floor(t.length/3);if(r!==0)try{const s=(await j()).processGeometryBatch(e.localBytes,t,e.unitScale,e.rtcX,e.rtcY,e.rtcZ,e.needsShift,e.voidKeys,e.voidCounts,e.voidValues,e.styleIds,e.styleColors);ge(e,s)}catch(_){const s=_.message;if(!e.sabFallbackTaken&&e.localBytes.buffer instanceof SharedArrayBuffer){e.sabFallbackTaken=!0,console.warn(`[Worker] processGeometryBatch rejected SAB view (${s}), falling back to copy`),e.localBytes=ot(e.sharedBuffer),await Q(e,t);return}if(r===1){console.warn(`[Worker] Skipping entity #${t[0]}: ${s}`),w=null;return}console.warn(`[Worker] Batch of ${r} entities failed (${s}), splitting…`),w=null;const i=Math.floor(r/2)*3;await Q(e,t.slice(0,i)),await Q(e,t.slice(i))}}async function It(e,t){const r=Math.floor(t.length/3);for(let _=0;_<r;_+=xt){const s=_*3,i=Math.min(s+xt*3,t.length);await Q(e,t.subarray(s,i)),Et(e)}}function At(e){Et(e);let t=0;try{t=w?.getMemory()?.buffer?.byteLength??0}catch{}self.postMessage({type:"memory",meshBytes:e.cumulativeMeshBytes,wasmHeapBytes:t}),self.postMessage({type:"complete",totalMeshes:e.totalMeshesEmitted})}let St=Promise.resolve();self.onmessage=e=>{St=St.then(()=>de(e)).catch(t=>{self.postMessage({type:"error",message:t instanceof Error?t.message:String(t)})})};async function de(e){try{if(e.data.type==="prepass-streaming"){const t=await j();self.postMessage({type:"prepass-progress",phase:"parsing"});const r=e.data.sharedBuffer,_=e.data.chunkSize??5e4;let s=it(r),i=!1;const c=o=>{self.postMessage({type:"prepass-stream",event:o})};try{t.buildPrePassStreaming(s,c,_)}catch(o){const b=o instanceof Error?o.message:String(o);if(!i)i=!0,console.warn(`[Worker] Streaming prepass with SAB view failed (${b}), retrying with copy`),s=ot(r),t.buildPrePassStreaming(s,c,_);else throw o}return}if(e.data.type==="prepass"||e.data.type==="prepass-fast"){const t=await j();self.postMessage({type:"prepass-progress",phase:"parsing"});const r=e.data.sharedBuffer,_=e.data.type==="prepass-fast";let s;try{const i=it(r);s=_?t.buildPrePassFast(i):t.buildPrePassOnce(i)}catch(i){const c=i instanceof Error?i.message:String(i);console.warn(`[Worker] Prepass with SAB view failed (${c}), retrying with copy`);const o=ot(r);s=_?t.buildPrePassFast(o):t.buildPrePassOnce(o)}self.postMessage({type:"prepass-result",result:s});return}if(e.data.type==="init"){e.data.wasmUrl&&(Rt=e.data.wasmUrl),e.data.wasmModule?(le({module_or_path:e.data.wasmModule}),w=new tt,$=!1,_t(),q=!1,st()):await j(),self.postMessage({type:"ready"});return}if(e.data.type==="process"){await j();const{sharedBuffer:t,jobsFlat:r,unitScale:_,rtcX:s,rtcY:i,rtcZ:c,needsShift:o,voidKeys:b,voidCounts:h,voidValues:x,styleIds:I,styleColors:A}=e.data,M=vt({sharedBuffer:t,unitScale:_,rtcX:s,rtcY:i,rtcZ:c,needsShift:o,voidKeys:b,voidCounts:h,voidValues:x,styleIds:I,styleColors:A});u=M,await It(M,r),At(M),u=null;return}if(e.data.type==="stream-start"){await j(),u=vt({sharedBuffer:e.data.sharedBuffer,unitScale:e.data.unitScale,rtcX:e.data.rtcX,rtcY:e.data.rtcY,rtcZ:e.data.rtcZ,needsShift:e.data.needsShift,voidKeys:e.data.voidKeys,voidCounts:e.data.voidCounts,voidValues:e.data.voidValues,styleIds:e.data.styleIds,styleColors:e.data.styleColors});return}if(e.data.type==="stream-chunk"){if(!u)throw new Error("stream-chunk received before stream-start");await It(u,e.data.jobsFlat);return}if(e.data.type==="set-styles"){if(!u)return;u.styleIds=e.data.styleIds,u.styleColors=e.data.styleColors,u.voidKeys=e.data.voidKeys,u.voidCounts=e.data.voidCounts,u.voidValues=e.data.voidValues;return}if(e.data.type==="set-entity-index"){(await j()).setEntityIndex(e.data.ids,e.data.starts,e.data.lengths);return}if(e.data.type==="set-merge-layers"){Tt=e.data.enabled===!0,$=!1,_t();return}if(e.data.type==="set-compute-geometry-hashes"){const t=e.data.tolerance;Bt=t!=null&&t>0?t:null,q=!1,st();return}if(e.data.type==="stream-end"){if(!u)throw new Error("stream-end received before stream-start");At(u),u=null;return}}catch(t){self.postMessage({type:"error",message:t instanceof Error?t.message:String(t)})}}