@collabdt/core 0.0.41 → 0.0.43

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 (265) hide show
  1. package/README.md +1 -1
  2. package/dist/core/components/Toolbar.d.ts.map +1 -1
  3. package/dist/core/components/Toolbar.js.map +1 -1
  4. package/dist/core/components/ToolbarBody.js.map +1 -1
  5. package/dist/core/components/TopNavigationBar.js.map +1 -1
  6. package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
  7. package/dist/core/components/authentication/Signin.js.map +1 -1
  8. package/dist/core/components/authentication/Signup.js.map +1 -1
  9. package/dist/core/components/settings/src/OrganizationSkeleton.js.map +1 -1
  10. package/dist/core/components/settings/src/SettingsSkeleton.js.map +1 -1
  11. package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
  12. package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
  13. package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
  14. package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
  15. package/dist/core/components/ui/DataTable.d.ts.map +1 -1
  16. package/dist/core/components/ui/DataTable.js +7 -0
  17. package/dist/core/components/ui/DataTable.js.map +1 -1
  18. package/dist/core/components/ui/FilesManager/src/FileItemComponent.d.ts.map +1 -1
  19. package/dist/core/components/ui/FilesManager/src/FileItemComponent.js.map +1 -1
  20. package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts +5 -2
  21. package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts.map +1 -1
  22. package/dist/core/components/ui/FilesManager/src/FileMarker.js +84 -21
  23. package/dist/core/components/ui/FilesManager/src/FileMarker.js.map +1 -1
  24. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.d.ts.map +1 -1
  25. package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.js.map +1 -1
  26. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.d.ts.map +1 -1
  27. package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js.map +1 -1
  28. package/dist/core/components/ui/Icons/IfcIcon.d.ts.map +1 -1
  29. package/dist/core/components/ui/Icons/IfcIcon.js.map +1 -1
  30. package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
  31. package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
  32. package/dist/core/components/ui/Navbar.d.ts.map +1 -1
  33. package/dist/core/components/ui/Navbar.js.map +1 -1
  34. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
  35. package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
  36. package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
  37. package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
  38. package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
  39. package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
  40. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
  41. package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
  42. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js +2 -2
  43. package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
  44. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js +2 -2
  45. package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
  46. package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
  47. package/dist/core/components/viewers/Viewer.js +5 -1
  48. package/dist/core/components/viewers/Viewer.js.map +1 -1
  49. package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
  50. package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
  51. package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
  52. package/dist/core/components/viewers/bim/BimViewer.js +14 -5
  53. package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
  54. package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
  55. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js +6 -0
  56. package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
  57. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  58. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js +168 -39
  59. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  60. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  61. package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  62. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
  63. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js +1 -1
  64. package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
  65. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts +14 -37
  66. package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
  67. package/dist/core/components/viewers/bim/src/DXFLoader/index.js +31 -318
  68. package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
  69. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts +66 -7
  70. package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
  71. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js +253 -21
  72. package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
  73. package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
  74. package/dist/core/components/viewers/bim/src/ModelManager/index.js +9 -0
  75. package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
  76. package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
  77. package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
  78. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts +3 -2
  79. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
  80. package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
  81. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.d.ts.map +1 -1
  82. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js +3 -4
  83. package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
  84. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
  85. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +40 -18
  86. package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
  87. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts +2 -5
  88. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
  89. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js +45 -59
  90. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
  91. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js +1 -0
  92. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
  93. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts +10 -1
  94. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
  95. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js +25 -73
  96. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
  97. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts +7 -3
  98. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
  99. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js +42 -78
  100. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
  101. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
  102. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js +52 -75
  103. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js.map +1 -1
  104. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts +15 -3
  105. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
  106. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js +165 -105
  107. package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -1
  108. package/dist/core/components/viewers/index.d.ts.map +1 -1
  109. package/dist/core/components/viewers/index.js.map +1 -1
  110. package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
  111. package/dist/core/components/viewers/map/MapViewer.js +1 -0
  112. package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
  113. package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
  114. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js +4 -3
  115. package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
  116. package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
  117. package/dist/core/components/viewers/map/datasets/RowActions.js +148 -0
  118. package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
  119. package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
  120. package/dist/core/components/viewers/map/datasets/index.js +32 -15
  121. package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
  122. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts +4 -0
  123. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -0
  124. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js +43 -0
  125. package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -0
  126. package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
  127. package/dist/core/components/viewers/map/datasets/src/localDatasets.js +39 -3
  128. package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
  129. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts +1 -1
  130. package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
  131. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js +2 -1
  132. package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
  133. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts +47 -0
  134. package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -0
  135. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js +114 -0
  136. package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -0
  137. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts +49 -0
  138. package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts.map +1 -0
  139. package/dist/core/components/viewers/map/datasets/src/wmsTime.js +100 -0
  140. package/dist/core/components/viewers/map/datasets/src/wmsTime.js.map +1 -0
  141. package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
  142. package/dist/core/components/viewers/map/src/Geocoder.js +9 -9
  143. package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
  144. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
  145. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js +25 -43
  146. package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
  147. package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
  148. package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
  149. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
  150. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js +19 -2
  151. package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
  152. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts +9 -0
  153. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts.map +1 -0
  154. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js +28 -0
  155. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js.map +1 -0
  156. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
  157. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +1 -16
  158. package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
  159. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
  160. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
  161. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
  162. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js +31 -2
  163. package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
  164. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts +21 -0
  165. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -0
  166. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js +111 -0
  167. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -0
  168. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
  169. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js +77 -2
  170. package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
  171. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  172. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  173. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
  174. package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
  175. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
  176. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +10 -3
  177. package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
  178. package/dist/core/components/viewers/map/utils/geocoder.d.ts +6 -2
  179. package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
  180. package/dist/core/components/viewers/map/utils/geocoder.js +10 -62
  181. package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
  182. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts +5 -0
  183. package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -0
  184. package/dist/core/components/viewers/map/utils/geocoding/adapters.js +192 -0
  185. package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -0
  186. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts +6 -0
  187. package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -0
  188. package/dist/core/components/viewers/map/utils/geocoding/config.js +14 -0
  189. package/dist/core/components/viewers/map/utils/geocoding/config.js.map +1 -0
  190. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts +8 -0
  191. package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -0
  192. package/dist/core/components/viewers/map/utils/geocoding/index.js +44 -0
  193. package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -0
  194. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts +6 -0
  195. package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -0
  196. package/dist/core/components/viewers/map/utils/geocoding/osm.js +39 -0
  197. package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -0
  198. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts +8 -0
  199. package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -0
  200. package/dist/core/components/viewers/map/utils/geocoding/pelias.js +35 -0
  201. package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -0
  202. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +1 -1
  203. package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
  204. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +1 -3
  205. package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
  206. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
  207. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +2 -3
  208. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
  209. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
  210. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js +8 -2
  211. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
  212. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
  213. package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
  214. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js +9 -9
  215. package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
  216. package/dist/core/hooks/provider.js.map +1 -1
  217. package/dist/core/plugins/host/provider.d.ts.map +1 -1
  218. package/dist/core/plugins/host/provider.js.map +1 -1
  219. package/dist/core/store/AppConfig/context.d.ts.map +1 -1
  220. package/dist/core/store/AppConfig/context.js.map +1 -1
  221. package/dist/core/store/BIM/context.d.ts.map +1 -1
  222. package/dist/core/store/BIM/context.js.map +1 -1
  223. package/dist/core/store/BIM/reducer.d.ts +0 -1
  224. package/dist/core/store/BIM/reducer.d.ts.map +1 -1
  225. package/dist/core/store/BIM/reducer.js +0 -4
  226. package/dist/core/store/BIM/reducer.js.map +1 -1
  227. package/dist/core/store/Buildings/context.d.ts.map +1 -1
  228. package/dist/core/store/Buildings/context.js.map +1 -1
  229. package/dist/core/store/Content/context.d.ts.map +1 -1
  230. package/dist/core/store/Content/context.js.map +1 -1
  231. package/dist/core/store/Datasets/context.d.ts.map +1 -1
  232. package/dist/core/store/Datasets/context.js +2 -1
  233. package/dist/core/store/Datasets/context.js.map +1 -1
  234. package/dist/core/store/Datasets/reducer.d.ts +2 -0
  235. package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
  236. package/dist/core/store/Datasets/reducer.js +9 -4
  237. package/dist/core/store/Datasets/reducer.js.map +1 -1
  238. package/dist/core/store/Files/context.d.ts.map +1 -1
  239. package/dist/core/store/Files/context.js.map +1 -1
  240. package/dist/core/store/Map/context.d.ts.map +1 -1
  241. package/dist/core/store/Map/context.js.map +1 -1
  242. package/dist/core/store/Menus/context.d.ts.map +1 -1
  243. package/dist/core/store/Menus/context.js.map +1 -1
  244. package/dist/core/store/Permissions/context.d.ts.map +1 -1
  245. package/dist/core/store/Permissions/context.js.map +1 -1
  246. package/dist/core/store/PointCloud/context.d.ts.map +1 -1
  247. package/dist/core/store/PointCloud/context.js.map +1 -1
  248. package/dist/core/store/Tools/context.d.ts.map +1 -1
  249. package/dist/core/store/Tools/context.js.map +1 -1
  250. package/dist/core/types/datasetTypes.d.ts +8 -1
  251. package/dist/core/types/datasetTypes.d.ts.map +1 -1
  252. package/dist/core/types/dbTypes.d.ts +13 -13
  253. package/dist/core/types/dbTypes.d.ts.map +1 -1
  254. package/dist/core/types/dbTypes.js +13 -13
  255. package/dist/core/types/dbTypes.js.map +1 -1
  256. package/dist/core/types/index.d.ts +1 -1
  257. package/dist/core/types/index.d.ts.map +1 -1
  258. package/dist/core/types/index.js.map +1 -1
  259. package/dist/core/utils/imageUtils.js +1 -1
  260. package/dist/core/utils/imageUtils.js.map +1 -1
  261. package/package.json +2 -1
  262. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts +0 -3
  263. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts.map +0 -1
  264. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js +0 -173
  265. package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js.map +0 -1
@@ -2,61 +2,50 @@ import * as THREE from "three";
2
2
  import * as OBC from "@thatopen/components";
3
3
  import { DXFManager } from "../../../DXFLoader";
4
4
  import { GizmoController } from "../../../../utils/GizmoController";
5
+ const DEFAULT_SCALE = 1e-3;
5
6
  class AddDxf {
6
7
  constructor(bimComponents, world) {
7
- this._dxfManager = null;
8
8
  this._loadedDxfs = /* @__PURE__ */ new Map();
9
9
  this.onDxfLoaded = new OBC.Event();
10
10
  this.onDxfTransformed = new OBC.Event();
11
- this._bimComponents = bimComponents;
12
11
  this._world = world;
13
12
  this._dxfManager = bimComponents.get(DXFManager);
14
13
  }
15
14
  async loadDxf(file, id, options) {
15
+ var _a, _b;
16
16
  if (!this._dxfManager) {
17
17
  console.error("DXFManager not available in BIM components");
18
18
  return null;
19
19
  }
20
+ const fileUrl = URL.createObjectURL(file);
20
21
  try {
21
- const fileUrl = URL.createObjectURL(file);
22
- this._dxfManager.scale = options.scale || 1e-3;
23
- this._dxfManager.rotation = options.rotation || 0;
24
- const dxfGroup = await this._dxfManager.load(
25
- fileUrl,
26
- id,
27
- file.name,
28
- {
29
- x: options.position.x,
30
- y: options.position.z,
31
- // Y and Z swapped for DXF coordinate system
32
- z: -options.position.y
33
- }
34
- );
35
- if (!dxfGroup) {
36
- console.error("Failed to load DXF file");
37
- URL.revokeObjectURL(fileUrl);
38
- return null;
39
- }
40
- dxfGroup.position.copy(options.position);
41
- let gizmoController;
42
- if (options.enableGizmo) {
43
- gizmoController = this.setupGizmo(dxfGroup, id);
44
- }
22
+ const group = await this._dxfManager.parse(fileUrl);
23
+ const scale = (_a = options.scale) != null ? _a : DEFAULT_SCALE;
24
+ const rotation = (_b = options.rotation) != null ? _b : 0;
25
+ group.name = id;
26
+ group.position.copy(options.position);
27
+ group.scale.setScalar(scale);
28
+ group.rotation.y = THREE.MathUtils.degToRad(rotation);
29
+ this._world.scene.three.add(group);
45
30
  const dxfInfo = {
46
31
  id,
47
32
  name: file.name,
48
33
  file,
49
- group: dxfGroup,
34
+ group,
50
35
  position: options.position.clone(),
51
- scale: options.scale || 1e-3,
52
- rotation: options.rotation || 0,
53
- gizmoController
36
+ scale,
37
+ rotation,
38
+ fileUrl
54
39
  };
40
+ if (options.enableGizmo) {
41
+ dxfInfo.gizmoController = this.setupGizmo(group, id);
42
+ }
55
43
  this._loadedDxfs.set(id, dxfInfo);
56
44
  this.onDxfLoaded.trigger(dxfInfo);
57
45
  return dxfInfo;
58
46
  } catch (error) {
59
47
  console.error("Error loading DXF file:", error);
48
+ URL.revokeObjectURL(fileUrl);
60
49
  return null;
61
50
  }
62
51
  }
@@ -64,7 +53,7 @@ class AddDxf {
64
53
  const dxfInfo = this._loadedDxfs.get(id);
65
54
  if (!dxfInfo) return false;
66
55
  dxfInfo.scale = scale;
67
- dxfInfo.group.scale.set(scale, scale, scale);
56
+ dxfInfo.group.scale.setScalar(scale);
68
57
  this.onDxfTransformed.trigger(dxfInfo);
69
58
  return true;
70
59
  }
@@ -72,7 +61,7 @@ class AddDxf {
72
61
  const dxfInfo = this._loadedDxfs.get(id);
73
62
  if (!dxfInfo) return false;
74
63
  dxfInfo.rotation = rotation;
75
- dxfInfo.group.rotation.z = THREE.MathUtils.degToRad(rotation);
64
+ dxfInfo.group.rotation.y = THREE.MathUtils.degToRad(rotation);
76
65
  this.onDxfTransformed.trigger(dxfInfo);
77
66
  return true;
78
67
  }
@@ -90,32 +79,33 @@ class AddDxf {
90
79
  if (enable && !dxfInfo.gizmoController) {
91
80
  dxfInfo.gizmoController = this.setupGizmo(dxfInfo.group, id);
92
81
  return true;
93
- } else if (!enable && dxfInfo.gizmoController) {
82
+ }
83
+ if (!enable && dxfInfo.gizmoController) {
94
84
  dxfInfo.gizmoController.dispose();
95
85
  dxfInfo.gizmoController = void 0;
96
86
  return true;
97
87
  }
98
88
  return false;
99
89
  }
90
+ setGizmoMode(id, mode) {
91
+ var _a, _b;
92
+ (_b = (_a = this._loadedDxfs.get(id)) == null ? void 0 : _a.gizmoController) == null ? void 0 : _b.setMode(mode);
93
+ }
100
94
  confirmPlacement(id) {
95
+ var _a;
101
96
  const dxfInfo = this._loadedDxfs.get(id);
102
97
  if (!dxfInfo) return false;
103
- if (dxfInfo.gizmoController) {
104
- dxfInfo.gizmoController.dispose();
105
- dxfInfo.gizmoController = void 0;
106
- }
107
- if (this._dxfManager) {
108
- this._dxfManager.removeTransformControls(dxfInfo.name);
109
- }
98
+ (_a = dxfInfo.gizmoController) == null ? void 0 : _a.dispose();
99
+ dxfInfo.gizmoController = void 0;
110
100
  return true;
111
101
  }
112
102
  removeDxf(id) {
103
+ var _a;
113
104
  const dxfInfo = this._loadedDxfs.get(id);
114
105
  if (!dxfInfo) return false;
115
106
  this._world.scene.three.remove(dxfInfo.group);
116
- if (dxfInfo.gizmoController) {
117
- dxfInfo.gizmoController.dispose();
118
- }
107
+ (_a = dxfInfo.gizmoController) == null ? void 0 : _a.dispose();
108
+ URL.revokeObjectURL(dxfInfo.fileUrl);
119
109
  this._loadedDxfs.delete(id);
120
110
  return true;
121
111
  }
@@ -127,15 +117,17 @@ class AddDxf {
127
117
  }
128
118
  setupGizmo(group, dxfId) {
129
119
  const gizmoController = new GizmoController(this._world);
130
- const notifyTransform = () => {
120
+ const endEditing = () => {
131
121
  const dxfInfo = this._loadedDxfs.get(dxfId);
132
- if (dxfInfo) {
133
- dxfInfo.position.copy(group.position);
134
- this.onDxfTransformed.trigger(dxfInfo);
135
- }
122
+ if (!dxfInfo) return;
123
+ dxfInfo.position.copy(group.position);
124
+ dxfInfo.scale = group.scale.x;
125
+ dxfInfo.rotation = THREE.MathUtils.radToDeg(group.rotation.y);
126
+ dxfInfo.gizmoController = void 0;
127
+ this.onDxfTransformed.trigger(dxfInfo);
136
128
  };
137
- gizmoController.onAccept = notifyTransform;
138
- gizmoController.onCancel = notifyTransform;
129
+ gizmoController.onAccept = endEditing;
130
+ gizmoController.onCancel = endEditing;
139
131
  gizmoController.setMode("translate");
140
132
  gizmoController.attach(group);
141
133
  return gizmoController;
@@ -143,18 +135,12 @@ class AddDxf {
143
135
  static isDxfFile(file) {
144
136
  return file.name.toLowerCase().endsWith(".dxf");
145
137
  }
146
- static validateDxfFile(file) {
147
- if (!this.isDxfFile(file)) {
148
- return { valid: false, error: "File is not a DXF file" };
149
- }
150
- return { valid: true };
151
- }
152
138
  dispose() {
139
+ var _a;
153
140
  for (const dxfInfo of this._loadedDxfs.values()) {
154
141
  this._world.scene.three.remove(dxfInfo.group);
155
- if (dxfInfo.gizmoController) {
156
- dxfInfo.gizmoController.dispose();
157
- }
142
+ (_a = dxfInfo.gizmoController) == null ? void 0 : _a.dispose();
143
+ URL.revokeObjectURL(dxfInfo.fileUrl);
158
144
  }
159
145
  this._loadedDxfs.clear();
160
146
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.ts"],"sourcesContent":["import * as THREE from 'three'\r\nimport * as OBC from '@thatopen/components'\r\nimport { DXFManager } from '../../../DXFLoader'\r\nimport { GizmoController } from '../../../../utils/GizmoController'\r\n\r\nexport interface DxfInfo {\r\n id: string\r\n name: string\r\n file: File\r\n group: THREE.Group\r\n position: THREE.Vector3\r\n scale: number\r\n rotation: number\r\n gizmoController?: GizmoController\r\n}\r\n\r\nexport interface DxfLoadOptions {\r\n position: THREE.Vector3\r\n scale?: number\r\n rotation?: number\r\n enableGizmo?: boolean\r\n}\r\n\r\nexport class AddDxf {\r\n private _bimComponents: OBC.Components\r\n private _world: OBC.World\r\n private _dxfManager: DXFManager | null = null\r\n private _loadedDxfs: Map<string, DxfInfo> = new Map()\r\n\r\n onDxfLoaded = new OBC.Event<DxfInfo>()\r\n onDxfTransformed = new OBC.Event<DxfInfo>()\r\n\r\n constructor(bimComponents: OBC.Components, world: OBC.World) {\r\n this._bimComponents = bimComponents\r\n this._world = world\r\n this._dxfManager = bimComponents.get(DXFManager)\r\n }\r\n\r\n async loadDxf(\r\n file: File,\r\n id: string,\r\n options: DxfLoadOptions,\r\n ): Promise<DxfInfo | null> {\r\n if (!this._dxfManager) {\r\n console.error('DXFManager not available in BIM components')\r\n return null\r\n }\r\n\r\n try {\r\n const fileUrl = URL.createObjectURL(file)\r\n\r\n this._dxfManager.scale = options.scale || 0.001\r\n this._dxfManager.rotation = options.rotation || 0\r\n\r\n const dxfGroup = await this._dxfManager.load(\r\n fileUrl,\r\n id,\r\n file.name,\r\n {\r\n x: options.position.x,\r\n y: options.position.z, // Y and Z swapped for DXF coordinate system\r\n z: -options.position.y,\r\n },\r\n )\r\n\r\n if (!dxfGroup) {\r\n console.error('Failed to load DXF file')\r\n URL.revokeObjectURL(fileUrl)\r\n return null\r\n }\r\n\r\n dxfGroup.position.copy(options.position)\r\n\r\n let gizmoController: GizmoController | undefined\r\n if (options.enableGizmo) {\r\n gizmoController = this.setupGizmo(dxfGroup, id)\r\n }\r\n\r\n const dxfInfo: DxfInfo = {\r\n id,\r\n name: file.name,\r\n file,\r\n group: dxfGroup,\r\n position: options.position.clone(),\r\n scale: options.scale || 0.001,\r\n rotation: options.rotation || 0,\r\n gizmoController,\r\n }\r\n\r\n this._loadedDxfs.set(id, dxfInfo)\r\n\r\n this.onDxfLoaded.trigger(dxfInfo)\r\n\r\n return dxfInfo\r\n }\r\n catch (error) {\r\n console.error('Error loading DXF file:', error)\r\n return null\r\n }\r\n }\r\n\r\n updateScale(id: string, scale: number): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n\r\n dxfInfo.scale = scale\r\n dxfInfo.group.scale.set(scale, scale, scale)\r\n\r\n this.onDxfTransformed.trigger(dxfInfo)\r\n return true\r\n }\r\n\r\n updateRotation(id: string, rotation: number): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n\r\n dxfInfo.rotation = rotation\r\n dxfInfo.group.rotation.z = THREE.MathUtils.degToRad(rotation)\r\n\r\n this.onDxfTransformed.trigger(dxfInfo)\r\n return true\r\n }\r\n\r\n updatePosition(id: string, position: THREE.Vector3): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n\r\n dxfInfo.position.copy(position)\r\n dxfInfo.group.position.copy(position)\r\n\r\n this.onDxfTransformed.trigger(dxfInfo)\r\n return true\r\n }\r\n\r\n toggleGizmo(id: string, enable: boolean): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n\r\n if (enable && !dxfInfo.gizmoController) {\r\n dxfInfo.gizmoController = this.setupGizmo(dxfInfo.group, id)\r\n return true\r\n }\r\n else if (!enable && dxfInfo.gizmoController) {\r\n dxfInfo.gizmoController.dispose()\r\n dxfInfo.gizmoController = undefined\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n confirmPlacement(id: string): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n\r\n if (dxfInfo.gizmoController) {\r\n dxfInfo.gizmoController.dispose()\r\n dxfInfo.gizmoController = undefined\r\n }\r\n\r\n if (this._dxfManager) {\r\n this._dxfManager.removeTransformControls(dxfInfo.name)\r\n }\r\n\r\n return true\r\n }\r\n\r\n removeDxf(id: string): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n\r\n this._world.scene.three.remove(dxfInfo.group)\r\n\r\n if (dxfInfo.gizmoController) {\r\n dxfInfo.gizmoController.dispose()\r\n }\r\n\r\n this._loadedDxfs.delete(id)\r\n\r\n return true\r\n }\r\n\r\n getDxf(id: string): DxfInfo | undefined {\r\n return this._loadedDxfs.get(id)\r\n }\r\n\r\n getAllDxfs(): DxfInfo[] {\r\n return [...this._loadedDxfs.values()]\r\n }\r\n\r\n private setupGizmo(group: THREE.Group, dxfId: string): GizmoController {\r\n const gizmoController = new GizmoController(this._world)\r\n\r\n const notifyTransform = () => {\r\n const dxfInfo = this._loadedDxfs.get(dxfId)\r\n if (dxfInfo) {\r\n dxfInfo.position.copy(group.position)\r\n this.onDxfTransformed.trigger(dxfInfo)\r\n }\r\n }\r\n\r\n gizmoController.onAccept = notifyTransform\r\n gizmoController.onCancel = notifyTransform\r\n gizmoController.setMode('translate')\r\n\r\n gizmoController.attach(group)\r\n return gizmoController\r\n }\r\n\r\n static isDxfFile(file: File): boolean {\r\n return file.name.toLowerCase().endsWith('.dxf')\r\n }\r\n\r\n static validateDxfFile(file: File): { valid: boolean, error?: string } {\r\n if (!this.isDxfFile(file)) {\r\n return { valid: false, error: 'File is not a DXF file' }\r\n }\r\n\r\n return { valid: true }\r\n }\r\n\r\n dispose(): void {\r\n for (const dxfInfo of this._loadedDxfs.values()) {\r\n this._world.scene.three.remove(dxfInfo.group)\r\n\r\n if (dxfInfo.gizmoController) {\r\n dxfInfo.gizmoController.dispose()\r\n }\r\n }\r\n\r\n this._loadedDxfs.clear()\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.ts"],"sourcesContent":["import * as THREE from 'three'\r\nimport * as OBC from '@thatopen/components'\r\nimport { DXFManager } from '../../../DXFLoader'\r\nimport { GizmoController } from '../../../../utils/GizmoController'\r\n\r\nexport interface DxfInfo {\r\n id: string\r\n name: string\r\n file: File\r\n group: THREE.Group\r\n position: THREE.Vector3\r\n scale: number\r\n rotation: number\r\n fileUrl: string\r\n gizmoController?: GizmoController\r\n}\r\n\r\nexport interface DxfLoadOptions {\r\n position: THREE.Vector3\r\n scale?: number\r\n rotation?: number\r\n enableGizmo?: boolean\r\n}\r\n\r\nconst DEFAULT_SCALE = 0.001 // DXF authored in millimetres → metres\r\n\r\nexport class AddDxf {\r\n private _world: OBC.World\r\n private _dxfManager: DXFManager | null\r\n private _loadedDxfs: Map<string, DxfInfo> = new Map()\r\n\r\n onDxfLoaded = new OBC.Event<DxfInfo>()\r\n onDxfTransformed = new OBC.Event<DxfInfo>()\r\n\r\n constructor(bimComponents: OBC.Components, world: OBC.World) {\r\n this._world = world\r\n this._dxfManager = bimComponents.get(DXFManager)\r\n }\r\n\r\n async loadDxf(file: File, id: string, options: DxfLoadOptions): Promise<DxfInfo | null> {\r\n if (!this._dxfManager) {\r\n console.error('DXFManager not available in BIM components')\r\n return null\r\n }\r\n\r\n const fileUrl = URL.createObjectURL(file)\r\n try {\r\n const group = await this._dxfManager.parse(fileUrl)\r\n const scale = options.scale ?? DEFAULT_SCALE\r\n const rotation = options.rotation ?? 0\r\n\r\n group.name = id\r\n group.position.copy(options.position)\r\n group.scale.setScalar(scale)\r\n group.rotation.y = THREE.MathUtils.degToRad(rotation)\r\n this._world.scene.three.add(group)\r\n\r\n const dxfInfo: DxfInfo = {\r\n id,\r\n name: file.name,\r\n file,\r\n group,\r\n position: options.position.clone(),\r\n scale,\r\n rotation,\r\n fileUrl,\r\n }\r\n\r\n if (options.enableGizmo) {\r\n dxfInfo.gizmoController = this.setupGizmo(group, id)\r\n }\r\n\r\n this._loadedDxfs.set(id, dxfInfo)\r\n this.onDxfLoaded.trigger(dxfInfo)\r\n return dxfInfo\r\n }\r\n catch (error) {\r\n console.error('Error loading DXF file:', error)\r\n URL.revokeObjectURL(fileUrl)\r\n return null\r\n }\r\n }\r\n\r\n updateScale(id: string, scale: number): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n dxfInfo.scale = scale\r\n dxfInfo.group.scale.setScalar(scale)\r\n this.onDxfTransformed.trigger(dxfInfo)\r\n return true\r\n }\r\n\r\n updateRotation(id: string, rotation: number): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n dxfInfo.rotation = rotation\r\n dxfInfo.group.rotation.y = THREE.MathUtils.degToRad(rotation)\r\n this.onDxfTransformed.trigger(dxfInfo)\r\n return true\r\n }\r\n\r\n updatePosition(id: string, position: THREE.Vector3): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n dxfInfo.position.copy(position)\r\n dxfInfo.group.position.copy(position)\r\n this.onDxfTransformed.trigger(dxfInfo)\r\n return true\r\n }\r\n\r\n toggleGizmo(id: string, enable: boolean): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n\r\n if (enable && !dxfInfo.gizmoController) {\r\n dxfInfo.gizmoController = this.setupGizmo(dxfInfo.group, id)\r\n return true\r\n }\r\n if (!enable && dxfInfo.gizmoController) {\r\n dxfInfo.gizmoController.dispose()\r\n dxfInfo.gizmoController = undefined\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n setGizmoMode(id: string, mode: 'translate' | 'rotate' | 'scale'): void {\r\n this._loadedDxfs.get(id)?.gizmoController?.setMode(mode)\r\n }\r\n\r\n confirmPlacement(id: string): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n dxfInfo.gizmoController?.dispose()\r\n dxfInfo.gizmoController = undefined\r\n return true\r\n }\r\n\r\n removeDxf(id: string): boolean {\r\n const dxfInfo = this._loadedDxfs.get(id)\r\n if (!dxfInfo) return false\r\n this._world.scene.three.remove(dxfInfo.group)\r\n dxfInfo.gizmoController?.dispose()\r\n URL.revokeObjectURL(dxfInfo.fileUrl)\r\n this._loadedDxfs.delete(id)\r\n return true\r\n }\r\n\r\n getDxf(id: string): DxfInfo | undefined {\r\n return this._loadedDxfs.get(id)\r\n }\r\n\r\n getAllDxfs(): DxfInfo[] {\r\n return [...this._loadedDxfs.values()]\r\n }\r\n\r\n private setupGizmo(group: THREE.Group, dxfId: string): GizmoController {\r\n const gizmoController = new GizmoController(this._world)\r\n\r\n // Enter/Esc detach the gizmo internally; clear our reference so callers\r\n // (and the marker visibility check) know editing has ended.\r\n const endEditing = () => {\r\n const dxfInfo = this._loadedDxfs.get(dxfId)\r\n if (!dxfInfo) return\r\n dxfInfo.position.copy(group.position)\r\n dxfInfo.scale = group.scale.x\r\n dxfInfo.rotation = THREE.MathUtils.radToDeg(group.rotation.y)\r\n dxfInfo.gizmoController = undefined\r\n this.onDxfTransformed.trigger(dxfInfo)\r\n }\r\n\r\n gizmoController.onAccept = endEditing\r\n gizmoController.onCancel = endEditing\r\n gizmoController.setMode('translate')\r\n gizmoController.attach(group)\r\n return gizmoController\r\n }\r\n\r\n static isDxfFile(file: File): boolean {\r\n return file.name.toLowerCase().endsWith('.dxf')\r\n }\r\n\r\n dispose(): void {\r\n for (const dxfInfo of this._loadedDxfs.values()) {\r\n this._world.scene.three.remove(dxfInfo.group)\r\n dxfInfo.gizmoController?.dispose()\r\n URL.revokeObjectURL(dxfInfo.fileUrl)\r\n }\r\n this._loadedDxfs.clear()\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
@@ -33,6 +33,7 @@ function BimSensor({
33
33
  dataFormat,
34
34
  updateFrequency,
35
35
  createdAt: timestamp,
36
+ onRemove,
36
37
  onClose,
37
38
  enableCollapse: true,
38
39
  defaultCollapsed: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.tsx"],"sourcesContent":["'use client'\r\nimport * as React from \"react\";\r\nimport * as THREE from 'three'\r\nimport Sensor from '../../../../../../ui/Sensors/Sensor'\r\nimport { SensorDataFormat, SensorType } from '../../../../../../../types/dbTypes';\r\nimport { markerStyle, markerStyleHighlight } from './markerUtils'\r\n\r\ninterface SensorProps {\r\n sensorName: string\r\n sensorType: SensorType\r\n dataUrl: string\r\n dataFormat: SensorDataFormat\r\n updateFrequency: number\r\n tags?: string[]\r\n worldCamera: THREE.Camera\r\n targetPoint: THREE.Vector3 \r\n onRemove?: () => void\r\n onEdit?: () => void\r\n onClose: () => void\r\n buildingId?: number\r\n timestamp: Date\r\n sphere: THREE.Object3D\r\n highlight?: boolean\r\n}\r\n\r\nexport default function BimSensor({\r\n sensorName,\r\n sensorType,\r\n tags,\r\n dataUrl,\r\n dataFormat,\r\n updateFrequency,\r\n onRemove,\r\n onEdit,\r\n onClose,\r\n buildingId,\r\n timestamp,\r\n sphere,\r\n highlight = false,\r\n}: SensorProps): React.ReactElement {\r\n return (\r\n <div\r\n className={highlight ? markerStyleHighlight : markerStyle}\r\n >\r\n <Sensor\r\n buildingId={buildingId}\r\n sensorName={sensorName}\r\n sensorType={sensorType}\r\n tags={tags}\r\n tagsVariant=\"read-only\"\r\n dataUrl={dataUrl}\r\n dataFormat={dataFormat}\r\n updateFrequency={updateFrequency}\r\n createdAt={timestamp}\r\n // onRemove={onRemove} // Remove is disabled because the card is not clickable for now\r\n onClose={onClose}\r\n enableCollapse\r\n defaultCollapsed\r\n size=\"sm\"\r\n highlight={highlight}\r\n />\r\n </div>\r\n )\r\n}"],"mappings":";AA4CM;AAzCN,OAAO,YAAY;AAEnB,SAAS,aAAa,4BAA4B;AAoBnC,SAAR,UAA2B;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAAoC;AAClC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,YAAY,uBAAuB;AAAA,MAE9C;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,aAAY;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UAEX;AAAA,UACA,gBAAc;AAAA,UACd,kBAAgB;AAAA,UAChB,MAAK;AAAA,UACL;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.tsx"],"sourcesContent":["'use client'\r\nimport * as React from \"react\";\r\nimport * as THREE from 'three'\r\nimport Sensor from '../../../../../../ui/Sensors/Sensor'\r\nimport { SensorDataFormat, SensorType } from '../../../../../../../types/dbTypes';\r\nimport { markerStyle, markerStyleHighlight } from './markerUtils'\r\n\r\ninterface SensorProps {\r\n sensorName: string\r\n sensorType: SensorType\r\n dataUrl: string\r\n dataFormat: SensorDataFormat\r\n updateFrequency: number\r\n tags?: string[]\r\n worldCamera: THREE.Camera\r\n targetPoint: THREE.Vector3 \r\n onRemove?: () => void\r\n onEdit?: () => void\r\n onClose: () => void\r\n buildingId?: number\r\n timestamp: Date\r\n sphere: THREE.Object3D\r\n highlight?: boolean\r\n}\r\n\r\nexport default function BimSensor({\r\n sensorName,\r\n sensorType,\r\n tags,\r\n dataUrl,\r\n dataFormat,\r\n updateFrequency,\r\n onRemove,\r\n onEdit,\r\n onClose,\r\n buildingId,\r\n timestamp,\r\n sphere,\r\n highlight = false,\r\n}: SensorProps): React.ReactElement {\r\n return (\r\n <div\r\n className={highlight ? markerStyleHighlight : markerStyle}\r\n >\r\n <Sensor\r\n buildingId={buildingId}\r\n sensorName={sensorName}\r\n sensorType={sensorType}\r\n tags={tags}\r\n tagsVariant=\"read-only\"\r\n dataUrl={dataUrl}\r\n dataFormat={dataFormat}\r\n updateFrequency={updateFrequency}\r\n createdAt={timestamp}\r\n onRemove={onRemove}\r\n onClose={onClose}\r\n enableCollapse\r\n defaultCollapsed\r\n size=\"sm\"\r\n highlight={highlight}\r\n />\r\n </div>\r\n )\r\n}"],"mappings":";AA4CM;AAzCN,OAAO,YAAY;AAEnB,SAAS,aAAa,4BAA4B;AAoBnC,SAAR,UAA2B;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAAoC;AAClC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,YAAY,uBAAuB;AAAA,MAE9C;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,aAAY;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA,gBAAc;AAAA,UACd,kBAAgB;AAAA,UAChB,MAAK;AAAA,UACL;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1,6 +1,15 @@
1
+ import * as THREE from 'three';
1
2
  import * as OBC from '@thatopen/components';
3
+ import { CSS2DObject } from 'three/addons/renderers/CSS2DRenderer.js';
2
4
  import { ModelManager } from '../../../ModelManager';
3
5
  import { AddDxf } from './AddDxf';
4
6
  import { AddedFile } from './FileMarkerUtils';
5
- export declare const addFileToScene: (addedFile: AddedFile, fileScale: number, fileRotation: number, world: OBC.World | null, modelManager: ModelManager | null, addDxf: AddDxf | null, toolsDispatch: any, setCurrent3DFileId: (id: string | null) => void, onMarkerContextMenu?: (event: MouseEvent) => void) => Promise<void>;
7
+ import type { FileMarkerAction } from '../../../../../../ui/FilesManager/src/FileMarker';
8
+ export type PlacedKind = 'dxf' | 'model' | 'generic';
9
+ export interface PlacedResult {
10
+ kind: PlacedKind;
11
+ marker: CSS2DObject | null;
12
+ object3D: THREE.Object3D;
13
+ }
14
+ export declare const addFileToScene: (addedFile: AddedFile, fileScale: number, fileRotation: number, world: OBC.World | null, modelManager: ModelManager | null, addDxf: AddDxf | null, setCurrent3DFileId: (id: string | null) => void, onAction?: (action: FileMarkerAction) => void) => Promise<PlacedResult | null>;
6
15
  //# sourceMappingURL=FileHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileHandler.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EACL,SAAS,EAIV,MAAM,mBAAmB,CAAA;AAqB1B,eAAO,MAAM,cAAc,GACzB,WAAW,SAAS,EACpB,WAAW,MAAM,EACjB,cAAc,MAAM,EACpB,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,EACvB,cAAc,YAAY,GAAG,IAAI,EACjC,QAAQ,MAAM,GAAG,IAAI,EACrB,eAAe,GAAG,EAClB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,EAC/C,sBAAsB,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,kBA4FlD,CAAA"}
1
+ {"version":3,"file":"FileHandler.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EACL,SAAS,EAGV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAA;AAExF,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAA;AAEpD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;IAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAA;CACzB;AAED,eAAO,MAAM,cAAc,GACzB,WAAW,SAAS,EACpB,WAAW,MAAM,EACjB,cAAc,MAAM,EACpB,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,EACvB,cAAc,YAAY,GAAG,IAAI,EACjC,QAAQ,MAAM,GAAG,IAAI,EACrB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,EAC/C,WAAW,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,KAC5C,OAAO,CAAC,YAAY,GAAG,IAAI,CAoC7B,CAAA"}
@@ -1,86 +1,38 @@
1
1
  import * as THREE from "three";
2
2
  import {
3
3
  createFileMarker,
4
- updateMarkerPosition,
5
4
  createGenericFileMarker
6
5
  } from "./FileMarkerUtils";
7
- const subscribeToGizmoTransformEnd = (gizmoController, callback) => {
8
- if (!gizmoController)
9
- return;
10
- const controller = gizmoController;
11
- const eventKeys = ["onTransformEnd", "onAfterTransform", "onChange", "onUpdated"];
12
- for (const key of eventKeys) {
13
- const eventCandidate = controller[key];
14
- if (eventCandidate && typeof eventCandidate.add === "function") {
15
- eventCandidate.add(callback);
16
- return;
17
- }
18
- }
19
- };
20
- const addFileToScene = async (addedFile, fileScale, fileRotation, world, modelManager, addDxf, toolsDispatch, setCurrent3DFileId, onMarkerContextMenu) => {
21
- if (!world || !modelManager || !addDxf) return;
6
+ const addFileToScene = async (addedFile, fileScale, fileRotation, world, modelManager, addDxf, setCurrent3DFileId, onAction) => {
7
+ if (!world || !modelManager || !addDxf) return null;
22
8
  const fileName = addedFile.file.name.toLowerCase();
23
9
  if (fileName.endsWith(".glb") || fileName.endsWith(".gltf")) {
24
- try {
25
- const modelInfo = await modelManager.load(
26
- addedFile.file,
27
- addedFile.id,
28
- addedFile.file.name,
29
- {
30
- position: addedFile.position,
31
- scale: fileScale,
32
- rotation: new THREE.Euler(0, THREE.MathUtils.degToRad(fileRotation), 0),
33
- enableGizmo: true,
34
- enableAnimations: true
35
- }
36
- );
37
- if (modelInfo) {
38
- setCurrent3DFileId(addedFile.id);
39
- const markerObj = createFileMarker(addedFile, modelInfo.model, () => {
40
- }, world, onMarkerContextMenu);
41
- subscribeToGizmoTransformEnd(modelInfo.gizmoController, () => {
42
- updateMarkerPosition(markerObj, modelInfo.model);
43
- });
44
- setTimeout(() => {
45
- updateMarkerPosition(markerObj, modelInfo.model);
46
- }, 100);
47
- }
48
- } catch (error) {
49
- console.error("Error loading 3D model:", error);
50
- }
51
- return;
10
+ const modelInfo = await modelManager.load(addedFile.file, addedFile.id, addedFile.file.name, {
11
+ position: addedFile.position,
12
+ scale: fileScale,
13
+ rotation: new THREE.Euler(0, THREE.MathUtils.degToRad(fileRotation), 0),
14
+ enableGizmo: true,
15
+ enableAnimations: true
16
+ });
17
+ if (!modelInfo) return null;
18
+ setCurrent3DFileId(addedFile.id);
19
+ const marker2 = createFileMarker(addedFile, modelInfo.model, world, onAction);
20
+ return { kind: "model", marker: marker2, object3D: modelInfo.model };
52
21
  }
53
22
  if (fileName.endsWith(".dxf")) {
54
- try {
55
- const dxfInfo = await addDxf.loadDxf(
56
- addedFile.file,
57
- addedFile.id,
58
- {
59
- position: addedFile.position,
60
- scale: fileScale,
61
- rotation: fileRotation,
62
- enableGizmo: true
63
- }
64
- );
65
- if (dxfInfo) {
66
- setCurrent3DFileId(addedFile.id);
67
- const markerObj = createFileMarker(addedFile, dxfInfo.group, () => {
68
- }, world, onMarkerContextMenu);
69
- addDxf.onDxfTransformed.add((transformedDxfInfo) => {
70
- if (transformedDxfInfo.id === addedFile.id) {
71
- updateMarkerPosition(markerObj, dxfInfo.group);
72
- }
73
- });
74
- setTimeout(() => {
75
- updateMarkerPosition(markerObj, dxfInfo.group);
76
- }, 100);
77
- }
78
- } catch (error) {
79
- console.error("Error loading DXF file:", error);
80
- }
81
- return;
23
+ const dxfInfo = await addDxf.loadDxf(addedFile.file, addedFile.id, {
24
+ position: addedFile.position,
25
+ scale: fileScale,
26
+ rotation: fileRotation,
27
+ enableGizmo: true
28
+ });
29
+ if (!dxfInfo) return null;
30
+ setCurrent3DFileId(addedFile.id);
31
+ const marker2 = createFileMarker(addedFile, dxfInfo.group, world, onAction);
32
+ return { kind: "dxf", marker: marker2, object3D: dxfInfo.group };
82
33
  }
83
- createGenericFileMarker(addedFile, world, toolsDispatch, onMarkerContextMenu);
34
+ const { marker, object3D } = createGenericFileMarker(addedFile, world, onAction);
35
+ return { kind: "generic", marker, object3D };
84
36
  };
85
37
  export {
86
38
  addFileToScene
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.ts"],"sourcesContent":["import * as THREE from 'three'\r\nimport * as OBC from '@thatopen/components'\r\nimport { ModelManager } from '../../../ModelManager'\r\nimport { AddDxf } from './AddDxf'\r\nimport {\r\n AddedFile,\r\n createFileMarker,\r\n updateMarkerPosition,\r\n createGenericFileMarker,\r\n} from './FileMarkerUtils'\r\n\r\nconst subscribeToGizmoTransformEnd = (\r\n gizmoController: THREE.GizmoController | null | undefined,\r\n callback: () => void,\r\n) => {\r\n if (!gizmoController)\r\n return\r\n\r\n const controller = gizmoController as unknown as Record<string, unknown>\r\n const eventKeys = ['onTransformEnd', 'onAfterTransform', 'onChange', 'onUpdated']\r\n\r\n for (const key of eventKeys) {\r\n const eventCandidate = controller[key] as { add?: (fn: () => void) => void } | undefined\r\n if (eventCandidate && typeof eventCandidate.add === 'function') {\r\n eventCandidate.add(callback)\r\n return\r\n }\r\n }\r\n}\r\n\r\nexport const addFileToScene = async (\r\n addedFile: AddedFile,\r\n fileScale: number,\r\n fileRotation: number,\r\n world: OBC.World | null,\r\n modelManager: ModelManager | null,\r\n addDxf: AddDxf | null,\r\n toolsDispatch: any,\r\n setCurrent3DFileId: (id: string | null) => void,\r\n onMarkerContextMenu?: (event: MouseEvent) => void,\r\n) => {\r\n if (!world || !modelManager || !addDxf) return\r\n\r\n const fileName = addedFile.file.name.toLowerCase()\r\n\r\n // Handle 3D models (GLB/GLTF)\r\n if (fileName.endsWith('.glb') || fileName.endsWith('.gltf')) {\r\n try {\r\n const modelInfo = await modelManager.load(\r\n addedFile.file,\r\n addedFile.id,\r\n addedFile.file.name,\r\n {\r\n position: addedFile.position,\r\n scale: fileScale,\r\n rotation: new THREE.Euler(0, THREE.MathUtils.degToRad(fileRotation), 0),\r\n enableGizmo: true,\r\n enableAnimations: true,\r\n },\r\n )\r\n\r\n if (modelInfo) {\r\n // Store current 3D file ID for real-time updates\r\n setCurrent3DFileId(addedFile.id)\r\n\r\n // Create CSS2D label for the 3D model\r\n const markerObj = createFileMarker(addedFile, modelInfo.model, () => {\r\n // Click on marker — no-op (actions handled via sidebar/context menu)\r\n }, world, onMarkerContextMenu)\r\n\r\n // Set up transform listener to update marker position\r\n subscribeToGizmoTransformEnd(modelInfo.gizmoController, () => {\r\n updateMarkerPosition(markerObj, modelInfo.model)\r\n })\r\n\r\n // Initial marker position update after model is loaded\r\n setTimeout(() => {\r\n updateMarkerPosition(markerObj, modelInfo.model)\r\n }, 100)\r\n }\r\n }\r\n catch (error) {\r\n console.error('Error loading 3D model:', error)\r\n }\r\n return\r\n }\r\n\r\n // Handle DXF files\r\n if (fileName.endsWith('.dxf')) {\r\n try {\r\n const dxfInfo = await addDxf.loadDxf(\r\n addedFile.file,\r\n addedFile.id,\r\n {\r\n position: addedFile.position,\r\n scale: fileScale,\r\n rotation: fileRotation,\r\n enableGizmo: true,\r\n },\r\n )\r\n\r\n if (dxfInfo) {\r\n // Store current 3D file ID for real-time updates\r\n setCurrent3DFileId(addedFile.id)\r\n\r\n // Create CSS2D label for the DXF\r\n const markerObj = createFileMarker(addedFile, dxfInfo.group, () => {\r\n // Click on marker — no-op (actions handled via sidebar/context menu)\r\n }, world, onMarkerContextMenu)\r\n\r\n // Set up transform listener to update marker position\r\n addDxf.onDxfTransformed.add((transformedDxfInfo) => {\r\n if (transformedDxfInfo.id === addedFile.id) {\r\n updateMarkerPosition(markerObj, dxfInfo.group)\r\n }\r\n })\r\n\r\n // Initial marker position update after DXF is loaded\r\n setTimeout(() => {\r\n updateMarkerPosition(markerObj, dxfInfo.group)\r\n }, 100)\r\n }\r\n }\r\n catch (error) {\r\n console.error('Error loading DXF file:', error)\r\n }\r\n return\r\n }\r\n\r\n // Handle other files (create sphere marker)\r\n createGenericFileMarker(addedFile, world, toolsDispatch, onMarkerContextMenu)\r\n}\r\n"],"mappings":"AAAA,YAAY,WAAW;AAIvB;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,MAAM,+BAA+B,CACnC,iBACA,aACG;AACH,MAAI,CAAC;AACH;AAEF,QAAM,aAAa;AACnB,QAAM,YAAY,CAAC,kBAAkB,oBAAoB,YAAY,WAAW;AAEhF,aAAW,OAAO,WAAW;AAC3B,UAAM,iBAAiB,WAAW,GAAG;AACrC,QAAI,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AAC9D,qBAAe,IAAI,QAAQ;AAC3B;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,iBAAiB,OAC5B,WACA,WACA,cACA,OACA,cACA,QACA,eACA,oBACA,wBACG;AACH,MAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAQ;AAExC,QAAM,WAAW,UAAU,KAAK,KAAK,YAAY;AAGjD,MAAI,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,OAAO,GAAG;AAC3D,QAAI;AACF,YAAM,YAAY,MAAM,aAAa;AAAA,QACnC,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU,KAAK;AAAA,QACf;AAAA,UACE,UAAU,UAAU;AAAA,UACpB,OAAO;AAAA,UACP,UAAU,IAAI,MAAM,MAAM,GAAG,MAAM,UAAU,SAAS,YAAY,GAAG,CAAC;AAAA,UACtE,aAAa;AAAA,UACb,kBAAkB;AAAA,QACpB;AAAA,MACF;AAEA,UAAI,WAAW;AAEb,2BAAmB,UAAU,EAAE;AAG/B,cAAM,YAAY,iBAAiB,WAAW,UAAU,OAAO,MAAM;AAAA,QAErE,GAAG,OAAO,mBAAmB;AAG7B,qCAA6B,UAAU,iBAAiB,MAAM;AAC5D,+BAAqB,WAAW,UAAU,KAAK;AAAA,QACjD,CAAC;AAGD,mBAAW,MAAM;AACf,+BAAqB,WAAW,UAAU,KAAK;AAAA,QACjD,GAAG,GAAG;AAAA,MACR;AAAA,IACF,SACO,OAAO;AACZ,cAAQ,MAAM,2BAA2B,KAAK;AAAA,IAChD;AACA;AAAA,EACF;AAGA,MAAI,SAAS,SAAS,MAAM,GAAG;AAC7B,QAAI;AACF,YAAM,UAAU,MAAM,OAAO;AAAA,QAC3B,UAAU;AAAA,QACV,UAAU;AAAA,QACV;AAAA,UACE,UAAU,UAAU;AAAA,UACpB,OAAO;AAAA,UACP,UAAU;AAAA,UACV,aAAa;AAAA,QACf;AAAA,MACF;AAEA,UAAI,SAAS;AAEX,2BAAmB,UAAU,EAAE;AAG/B,cAAM,YAAY,iBAAiB,WAAW,QAAQ,OAAO,MAAM;AAAA,QAEnE,GAAG,OAAO,mBAAmB;AAG7B,eAAO,iBAAiB,IAAI,CAAC,uBAAuB;AAClD,cAAI,mBAAmB,OAAO,UAAU,IAAI;AAC1C,iCAAqB,WAAW,QAAQ,KAAK;AAAA,UAC/C;AAAA,QACF,CAAC;AAGD,mBAAW,MAAM;AACf,+BAAqB,WAAW,QAAQ,KAAK;AAAA,QAC/C,GAAG,GAAG;AAAA,MACR;AAAA,IACF,SACO,OAAO;AACZ,cAAQ,MAAM,2BAA2B,KAAK;AAAA,IAChD;AACA;AAAA,EACF;AAGA,0BAAwB,WAAW,OAAO,eAAe,mBAAmB;AAC9E;","names":[]}
1
+ {"version":3,"sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.ts"],"sourcesContent":["import * as THREE from 'three'\r\nimport * as OBC from '@thatopen/components'\r\nimport { CSS2DObject } from 'three/addons/renderers/CSS2DRenderer.js'\r\nimport { ModelManager } from '../../../ModelManager'\r\nimport { AddDxf } from './AddDxf'\r\nimport {\r\n AddedFile,\r\n createFileMarker,\r\n createGenericFileMarker,\r\n} from './FileMarkerUtils'\r\nimport type { FileMarkerAction } from '../../../../../../ui/FilesManager/src/FileMarker'\r\n\r\nexport type PlacedKind = 'dxf' | 'model' | 'generic'\r\n\r\nexport interface PlacedResult {\r\n kind: PlacedKind\r\n marker: CSS2DObject | null\r\n object3D: THREE.Object3D\r\n}\r\n\r\nexport const addFileToScene = async (\r\n addedFile: AddedFile,\r\n fileScale: number,\r\n fileRotation: number,\r\n world: OBC.World | null,\r\n modelManager: ModelManager | null,\r\n addDxf: AddDxf | null,\r\n setCurrent3DFileId: (id: string | null) => void,\r\n onAction?: (action: FileMarkerAction) => void,\r\n): Promise<PlacedResult | null> => {\r\n if (!world || !modelManager || !addDxf) return null\r\n\r\n const fileName = addedFile.file.name.toLowerCase()\r\n\r\n if (fileName.endsWith('.glb') || fileName.endsWith('.gltf')) {\r\n const modelInfo = await modelManager.load(addedFile.file, addedFile.id, addedFile.file.name, {\r\n position: addedFile.position,\r\n scale: fileScale,\r\n rotation: new THREE.Euler(0, THREE.MathUtils.degToRad(fileRotation), 0),\r\n enableGizmo: true,\r\n enableAnimations: true,\r\n })\r\n if (!modelInfo) return null\r\n\r\n setCurrent3DFileId(addedFile.id)\r\n const marker = createFileMarker(addedFile, modelInfo.model, world, onAction)\r\n return { kind: 'model', marker, object3D: modelInfo.model }\r\n }\r\n\r\n if (fileName.endsWith('.dxf')) {\r\n const dxfInfo = await addDxf.loadDxf(addedFile.file, addedFile.id, {\r\n position: addedFile.position,\r\n scale: fileScale,\r\n rotation: fileRotation,\r\n enableGizmo: true,\r\n })\r\n if (!dxfInfo) return null\r\n\r\n setCurrent3DFileId(addedFile.id)\r\n const marker = createFileMarker(addedFile, dxfInfo.group, world, onAction)\r\n return { kind: 'dxf', marker, object3D: dxfInfo.group }\r\n }\r\n\r\n const { marker, object3D } = createGenericFileMarker(addedFile, world, onAction)\r\n return { kind: 'generic', marker, object3D }\r\n}\r\n"],"mappings":"AAAA,YAAY,WAAW;AAKvB;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AAWA,MAAM,iBAAiB,OAC5B,WACA,WACA,cACA,OACA,cACA,QACA,oBACA,aACiC;AACjC,MAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAQ,QAAO;AAE/C,QAAM,WAAW,UAAU,KAAK,KAAK,YAAY;AAEjD,MAAI,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,OAAO,GAAG;AAC3D,UAAM,YAAY,MAAM,aAAa,KAAK,UAAU,MAAM,UAAU,IAAI,UAAU,KAAK,MAAM;AAAA,MAC3F,UAAU,UAAU;AAAA,MACpB,OAAO;AAAA,MACP,UAAU,IAAI,MAAM,MAAM,GAAG,MAAM,UAAU,SAAS,YAAY,GAAG,CAAC;AAAA,MACtE,aAAa;AAAA,MACb,kBAAkB;AAAA,IACpB,CAAC;AACD,QAAI,CAAC,UAAW,QAAO;AAEvB,uBAAmB,UAAU,EAAE;AAC/B,UAAMA,UAAS,iBAAiB,WAAW,UAAU,OAAO,OAAO,QAAQ;AAC3E,WAAO,EAAE,MAAM,SAAS,QAAAA,SAAQ,UAAU,UAAU,MAAM;AAAA,EAC5D;AAEA,MAAI,SAAS,SAAS,MAAM,GAAG;AAC7B,UAAM,UAAU,MAAM,OAAO,QAAQ,UAAU,MAAM,UAAU,IAAI;AAAA,MACjE,UAAU,UAAU;AAAA,MACpB,OAAO;AAAA,MACP,UAAU;AAAA,MACV,aAAa;AAAA,IACf,CAAC;AACD,QAAI,CAAC,QAAS,QAAO;AAErB,uBAAmB,UAAU,EAAE;AAC/B,UAAMA,UAAS,iBAAiB,WAAW,QAAQ,OAAO,OAAO,QAAQ;AACzE,WAAO,EAAE,MAAM,OAAO,QAAAA,SAAQ,UAAU,QAAQ,MAAM;AAAA,EACxD;AAEA,QAAM,EAAE,QAAQ,SAAS,IAAI,wBAAwB,WAAW,OAAO,QAAQ;AAC/E,SAAO,EAAE,MAAM,WAAW,QAAQ,SAAS;AAC7C;","names":["marker"]}
@@ -1,5 +1,6 @@
1
1
  import * as THREE from 'three';
2
2
  import { CSS2DObject } from 'three/addons/renderers/CSS2DRenderer.js';
3
+ import { type FileMarkerAction } from '../../../../../../ui/FilesManager/src/FileMarker';
3
4
  export interface AddedFile {
4
5
  id: string;
5
6
  file: File;
@@ -7,7 +8,10 @@ export interface AddedFile {
7
8
  imageUrl?: string;
8
9
  }
9
10
  export declare const initializeCSS2DRenderer: (world: any) => any;
10
- export declare const createFileMarker: (addedFile: AddedFile, object3D: THREE.Object3D, onClick: () => void, world: any, onContextMenu?: (event: MouseEvent) => void) => CSS2DObject | null;
11
- export declare const updateMarkerPosition: (marker: CSS2DObject | null, object3D: THREE.Object3D) => void;
12
- export declare const createGenericFileMarker: (addedFile: AddedFile, world: any, toolsDispatch: any, onContextMenu?: (event: MouseEvent) => void) => void;
11
+ export declare const createFileMarker: (addedFile: AddedFile, object3D: THREE.Object3D, world: any, onAction?: (action: FileMarkerAction) => void) => CSS2DObject | null;
12
+ export declare const createGenericFileMarker: (addedFile: AddedFile, world: any, onAction?: (action: FileMarkerAction) => void) => {
13
+ marker: CSS2DObject | null;
14
+ object3D: THREE.Object3D;
15
+ };
16
+ export declare const removeMarker: (marker: CSS2DObject | null, world?: any) => void;
13
17
  //# sourceMappingURL=FileMarkerUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileMarkerUtils.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAEL,WAAW,EACZ,MAAM,yCAAyC,CAAA;AAKhD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,uBAAuB,GAAI,OAAO,GAAG,QA0CjD,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,WAAW,SAAS,EACpB,UAAU,KAAK,CAAC,QAAQ,EACxB,SAAS,MAAM,IAAI,EACnB,OAAO,GAAG,EACV,gBAAgB,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,KAC1C,WAAW,GAAG,IA2EhB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,QAAQ,WAAW,GAAG,IAAI,EAAE,UAAU,KAAK,CAAC,QAAQ,SAQxF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,WAAW,SAAS,EACpB,OAAO,GAAG,EACV,eAAe,GAAG,EAClB,gBAAgB,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,SAe5C,CAAA"}
1
+ {"version":3,"file":"FileMarkerUtils.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAEL,WAAW,EACZ,MAAM,yCAAyC,CAAA;AAEhD,OAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kDAAkD,CAAA;AAGpG,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,uBAAuB,GAAI,OAAO,GAAG,QA4BjD,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,WAAW,SAAS,EACpB,UAAU,KAAK,CAAC,QAAQ,EACxB,OAAO,GAAG,EACV,WAAW,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,KAC5C,WAAW,GAAG,IA8BhB,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,WAAW,SAAS,EACpB,OAAO,GAAG,EACV,WAAW,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,KAC5C;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAA;CAWxD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,QAAQ,WAAW,GAAG,IAAI,EAAE,QAAQ,GAAG,SAKnE,CAAA"}
@@ -8,113 +8,77 @@ import { createRoot } from "react-dom/client";
8
8
  import FileMarker from "../../../../../../ui/FilesManager/src/FileMarker";
9
9
  const initializeCSS2DRenderer = (world) => {
10
10
  if (!world) return null;
11
- let css2dRenderer = world.css2dRenderer;
12
- if (css2dRenderer) {
13
- console.log("CSS2D Renderer already exists", css2dRenderer);
14
- } else {
15
- css2dRenderer = new CSS2DRenderer();
16
- css2dRenderer.setSize(
17
- world.renderer.three.domElement.clientWidth,
18
- world.renderer.three.domElement.clientHeight
19
- );
20
- css2dRenderer.domElement.style.position = "absolute";
21
- css2dRenderer.domElement.style.top = "0";
22
- css2dRenderer.domElement.style.left = "0";
23
- css2dRenderer.domElement.style.pointerEvents = "none";
24
- css2dRenderer.domElement.style.zIndex = "1000";
25
- css2dRenderer.domElement.classList.add("css2d-renderer");
26
- const container = world.renderer.three.domElement.parentElement;
27
- container.append(css2dRenderer.domElement);
28
- world.css2dRenderer = css2dRenderer;
29
- const originalRender = world.renderer.three.render;
30
- world.renderer.three.render = function(scene, camera) {
31
- originalRender.call(this, scene, camera);
32
- css2dRenderer.render(scene, camera);
33
- };
34
- }
11
+ if (world.css2dRenderer) return world.css2dRenderer;
12
+ const css2dRenderer = new CSS2DRenderer();
13
+ css2dRenderer.setSize(
14
+ world.renderer.three.domElement.clientWidth,
15
+ world.renderer.three.domElement.clientHeight
16
+ );
17
+ css2dRenderer.domElement.style.position = "absolute";
18
+ css2dRenderer.domElement.style.top = "0";
19
+ css2dRenderer.domElement.style.left = "0";
20
+ css2dRenderer.domElement.style.pointerEvents = "none";
21
+ css2dRenderer.domElement.style.zIndex = "1000";
22
+ css2dRenderer.domElement.classList.add("css2d-renderer");
23
+ const container = world.renderer.three.domElement.parentElement;
24
+ container.append(css2dRenderer.domElement);
25
+ world.css2dRenderer = css2dRenderer;
26
+ const originalRender = world.renderer.three.render;
27
+ world.renderer.three.render = function(scene, camera) {
28
+ originalRender.call(this, scene, camera);
29
+ css2dRenderer.render(scene, camera);
30
+ };
35
31
  return css2dRenderer;
36
32
  };
37
- const createFileMarker = (addedFile, object3D, onClick, world, onContextMenu) => {
33
+ const createFileMarker = (addedFile, object3D, world, onAction) => {
38
34
  var _a;
39
35
  if (!world) return null;
40
- console.log("Creating FileMarker for:", addedFile.file.name, "at position:", addedFile.position);
41
36
  const markerFile = {
42
37
  id: Number.parseInt(addedFile.id, 10) || 0,
43
38
  name: addedFile.file.name,
44
39
  type: addedFile.file.type || "application/octet-stream",
45
- url: (_a = addedFile.imageUrl) != null ? _a : URL.createObjectURL(addedFile.file),
40
+ url: (_a = addedFile.imageUrl) != null ? _a : "",
46
41
  assetId: addedFile.id,
47
42
  uploadedAt: (/* @__PURE__ */ new Date()).toISOString(),
48
43
  fileOrganizationId: 0
49
44
  };
50
45
  const labelDiv = document.createElement("div");
51
- labelDiv.style.display = "block";
52
- labelDiv.style.visibility = "visible";
53
46
  labelDiv.style.pointerEvents = "auto";
54
47
  labelDiv.style.zIndex = "1001";
55
- if (onContextMenu) {
56
- labelDiv.addEventListener("contextmenu", (e) => {
57
- e.preventDefault();
58
- e.stopPropagation();
59
- onContextMenu(e);
60
- });
61
- }
62
- const root = createRoot(labelDiv);
63
- root.render(
64
- React.createElement(FileMarker, {
65
- file: markerFile,
66
- onClick
67
- })
48
+ labelDiv.addEventListener("contextmenu", (e) => e.preventDefault());
49
+ createRoot(labelDiv).render(
50
+ React.createElement(FileMarker, { file: markerFile, onAction })
68
51
  );
69
52
  const css2dObject = new CSS2DObject(labelDiv);
70
53
  css2dObject.position.copy(addedFile.position);
71
54
  css2dObject.position.y += 0.2;
72
- css2dObject.visible = true;
73
- css2dObject.layers.set(0);
74
- world.scene.three.add(css2dObject);
75
55
  css2dObject.fileId = addedFile.id;
76
56
  css2dObject.object3D = object3D;
77
- const forceRender = () => {
78
- if (world.css2dRenderer) {
79
- world.css2dRenderer.render(world.scene.three, world.camera.three);
80
- }
81
- };
82
- forceRender();
83
- setTimeout(forceRender, 0);
84
- setTimeout(forceRender, 100);
85
- setTimeout(forceRender, 500);
86
- console.log("FileMarker created and added to scene", {
87
- position: css2dObject.position,
88
- fileId: addedFile.id,
89
- objectPosition: object3D.position,
90
- visible: css2dObject.visible,
91
- element: labelDiv,
92
- renderer: world.css2dRenderer
93
- });
57
+ world.scene.three.add(css2dObject);
94
58
  return css2dObject;
95
59
  };
96
- const updateMarkerPosition = (marker, object3D) => {
97
- if (!marker || !object3D) return;
98
- const worldPosition = new THREE.Vector3();
99
- object3D.getWorldPosition(worldPosition);
100
- marker.position.copy(worldPosition);
101
- marker.position.y += 0.2;
102
- };
103
- const createGenericFileMarker = (addedFile, world, toolsDispatch, onContextMenu) => {
104
- if (!world) return;
105
- const sphereGeometry = new THREE.SphereGeometry(0.025, 10, 10);
106
- const sphereMaterial = new THREE.MeshBasicMaterial({ color: 16777215 });
107
- const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
60
+ const createGenericFileMarker = (addedFile, world, onAction) => {
61
+ const sphere = new THREE.Mesh(
62
+ new THREE.SphereGeometry(0.025, 10, 10),
63
+ new THREE.MeshBasicMaterial({ color: 16777215 })
64
+ );
108
65
  sphere.position.copy(addedFile.position);
109
- world.scene.three.add(sphere);
110
- createFileMarker(addedFile, sphere, () => {
111
- }, world, onContextMenu);
112
66
  sphere.fileId = addedFile.id;
67
+ if (world) world.scene.three.add(sphere);
68
+ const marker = createFileMarker(addedFile, sphere, world, onAction);
69
+ return { marker, object3D: sphere };
70
+ };
71
+ const removeMarker = (marker, world) => {
72
+ var _a;
73
+ if (!marker) return;
74
+ if (world) world.scene.three.remove(marker);
75
+ const el = marker.element;
76
+ (_a = el == null ? void 0 : el.parentElement) == null ? void 0 : _a.removeChild(el);
113
77
  };
114
78
  export {
115
79
  createFileMarker,
116
80
  createGenericFileMarker,
117
81
  initializeCSS2DRenderer,
118
- updateMarkerPosition
82
+ removeMarker
119
83
  };
120
84
  //# sourceMappingURL=FileMarkerUtils.js.map