@realsee/dnalogel 2.0.0-alpha.1 → 2.0.0-alpha.12

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 (388) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +45 -5
  3. package/TERMS.txt +56 -0
  4. package/dist/CSS3DRenderPlugin/index.d.ts +49 -0
  5. package/dist/CSS3DRenderPlugin/index.js +231 -0
  6. package/dist/CSS3DRenderPlugin/utils/createResizeObserver.d.ts +7 -0
  7. package/dist/CameraMovementPlugin/index.d.ts +7 -0
  8. package/dist/CameraMovementPlugin/index.js +302 -0
  9. package/dist/CameraMovementPlugin/typing.d.ts +68 -0
  10. package/dist/ModelChassisCompassPlugin/index.d.ts +19 -0
  11. package/dist/ModelChassisCompassPlugin/index.js +142 -0
  12. package/dist/ModelEntryDoorGuidePlugin/index.d.ts +26 -0
  13. package/dist/ModelEntryDoorGuidePlugin/index.js +196 -0
  14. package/dist/ModelItemLabelPlugin/events.type.d.ts +9 -0
  15. package/dist/ModelItemLabelPlugin/index.d.ts +4 -0
  16. package/dist/ModelItemLabelPlugin/index.js +678 -0
  17. package/dist/ModelItemLabelPlugin/typings.d.ts +55 -0
  18. package/dist/ModelItemLabelPlugin/utils/parseData.d.ts +3 -0
  19. package/dist/ModelRoomLabelPlugin/Assets/roomLabelBg.d.ts +1 -0
  20. package/dist/ModelRoomLabelPlugin/Controller.d.ts +36 -0
  21. package/dist/ModelRoomLabelPlugin/index.d.ts +12 -0
  22. package/dist/ModelRoomLabelPlugin/index.js +463 -0
  23. package/dist/ModelRoomLabelPlugin/typings.d.ts +35 -0
  24. package/dist/ModelRoomLabelPlugin/utils/parseData.d.ts +3 -0
  25. package/dist/ModelViewPlugin/index.d.ts +17 -0
  26. package/dist/ModelViewPlugin/index.js +187 -0
  27. package/dist/PanoCompassPlugin/Assets/roomInfoIcon.d.ts +1 -0
  28. package/dist/PanoCompassPlugin/getRoomInfoInstance.d.ts +8 -0
  29. package/dist/PanoCompassPlugin/index.d.ts +51 -0
  30. package/dist/PanoCompassPlugin/index.js +521 -0
  31. package/dist/PanoCursorRaycasterPlugin/index.d.ts +48 -0
  32. package/dist/PanoCursorRaycasterPlugin/index.js +88 -0
  33. package/dist/PanoMeasurePlugin/Controller/BaseController.d.ts +36 -0
  34. package/dist/PanoMeasurePlugin/Controller/EditController.d.ts +52 -0
  35. package/dist/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +12 -0
  36. package/dist/PanoMeasurePlugin/Controller/WatchController.d.ts +25 -0
  37. package/dist/PanoMeasurePlugin/Controller/index.d.ts +61 -0
  38. package/dist/PanoMeasurePlugin/Model/index.d.ts +38 -0
  39. package/dist/PanoMeasurePlugin/Model/line.d.ts +30 -0
  40. package/dist/PanoMeasurePlugin/Model/point.d.ts +16 -0
  41. package/dist/PanoMeasurePlugin/Model/polyline.d.ts +16 -0
  42. package/dist/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.d.ts +2 -0
  43. package/dist/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +2 -0
  44. package/dist/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +2 -0
  45. package/dist/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +22 -0
  46. package/dist/PanoMeasurePlugin/Modules/FiveHelper.d.ts +11 -0
  47. package/dist/PanoMeasurePlugin/Modules/GuideController.d.ts +18 -0
  48. package/dist/PanoMeasurePlugin/Modules/Magnifier.d.ts +24 -0
  49. package/dist/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +6 -0
  50. package/dist/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +18 -0
  51. package/dist/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +12 -0
  52. package/dist/PanoMeasurePlugin/Modules/UIController/index.d.ts +16 -0
  53. package/dist/PanoMeasurePlugin/Modules/UIController/style.d.ts +17 -0
  54. package/dist/PanoMeasurePlugin/index.d.ts +7 -0
  55. package/dist/PanoMeasurePlugin/index.js +4789 -0
  56. package/dist/PanoMeasurePlugin/typings/data.d.ts +28 -0
  57. package/dist/PanoMeasurePlugin/typings/event.type.d.ts +28 -0
  58. package/dist/PanoMeasurePlugin/typings/utils.type.d.ts +1 -0
  59. package/dist/PanoMeasurePlugin/utils/clearGroup.d.ts +2 -0
  60. package/dist/PanoMeasurePlugin/utils/constants.d.ts +4 -0
  61. package/dist/PanoMeasurePlugin/utils/distanceDom.d.ts +28 -0
  62. package/dist/PanoMeasurePlugin/utils/findAssociatedLines.d.ts +2 -0
  63. package/dist/PanoMeasurePlugin/utils/findClosestPoint.d.ts +10 -0
  64. package/dist/PanoMeasurePlugin/utils/getIntersectionFromEvent.d.ts +4 -0
  65. package/dist/PanoMeasurePlugin/utils/getPointFromHammerEvent.d.ts +10 -0
  66. package/dist/PanoMeasurePlugin/utils/ironbox.d.ts +1 -0
  67. package/dist/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +2 -0
  68. package/dist/PanoMeasurePlugin/utils/line.d.ts +17 -0
  69. package/dist/PanoMeasurePlugin/utils/math.d.ts +17 -0
  70. package/dist/PanoMeasurePlugin/utils/mouseGroup.d.ts +2 -0
  71. package/dist/PanoMeasurePlugin/utils/ndc2Screen.d.ts +5 -0
  72. package/dist/PanoRulerPlugin/index.d.ts +31 -0
  73. package/dist/PanoRulerPlugin/index.js +610 -0
  74. package/dist/PanoRulerPlugin/style.d.ts +2 -0
  75. package/dist/PanoRulerPlugin/typings.d.ts +21 -0
  76. package/dist/PanoSpatialTagPlugin/index.d.ts +33 -0
  77. package/dist/PanoSpatialTagPlugin/index.js +1259 -0
  78. package/dist/PanoSpatialTagPlugin/store.d.ts +1 -0
  79. package/dist/PanoSpatialTagPlugin/style.d.ts +1 -0
  80. package/dist/PanoSpatialTagPlugin/typings.d.ts +40 -0
  81. package/dist/floorplan/Assets/camera.d.ts +1 -0
  82. package/dist/floorplan/Assets/floorplanExtraObject.d.ts +1 -0
  83. package/dist/floorplan/ModelFloorplanPlugin/Assets/compass.d.ts +1 -0
  84. package/dist/floorplan/ModelFloorplanPlugin/Controller.d.ts +105 -0
  85. package/dist/floorplan/ModelFloorplanPlugin/index.d.ts +9 -0
  86. package/dist/floorplan/ModelFloorplanPlugin/index.js +3842 -0
  87. package/dist/floorplan/ModelFloorplanPlugin/typings/events.type.d.ts +23 -0
  88. package/dist/floorplan/ModelFloorplanPlugin/utils/constant.d.ts +15 -0
  89. package/dist/floorplan/ModelFloorplanPlugin/utils/correctFiveState.d.ts +14 -0
  90. package/dist/floorplan/PanoFloorplanRadarPlugin/Controller.d.ts +28 -0
  91. package/dist/floorplan/PanoFloorplanRadarPlugin/index.d.ts +8 -0
  92. package/dist/floorplan/PanoFloorplanRadarPlugin/index.js +1673 -0
  93. package/dist/floorplan/TopviewFloorplanPlugin/Controller.d.ts +62 -0
  94. package/dist/floorplan/TopviewFloorplanPlugin/index.d.ts +5 -0
  95. package/dist/floorplan/TopviewFloorplanPlugin/index.js +3481 -0
  96. package/dist/floorplan/TopviewFloorplanPlugin/style.d.ts +1 -0
  97. package/dist/floorplan/constant.d.ts +5 -0
  98. package/dist/floorplan/typings/floorplanData.d.ts +137 -0
  99. package/dist/floorplan/typings/floorplanServerData.d.ts +131 -0
  100. package/dist/floorplan/typings/utility.d.ts +2 -0
  101. package/dist/floorplan/utils/formatData.d.ts +5 -0
  102. package/dist/floorplan/utils/formatPosition.d.ts +36 -0
  103. package/dist/index.d.ts +27 -0
  104. package/dist/index.es.js +13572 -0
  105. package/dist/index.js +13613 -0
  106. package/dist/index.umd.js +13606 -0
  107. package/dist/shared-utils/Preloader.d.ts +6 -0
  108. package/dist/shared-utils/Subscribe.d.ts +45 -0
  109. package/dist/shared-utils/animationFrame/BetterTween.d.ts +11 -0
  110. package/dist/shared-utils/animationFrame/calculateProgress.d.ts +8 -0
  111. package/dist/shared-utils/animationFrame/formatRad.d.ts +15 -0
  112. package/dist/shared-utils/animationFrame/index.d.ts +15 -0
  113. package/dist/shared-utils/animationFrame/tween.d.ts +75 -0
  114. package/dist/shared-utils/changeModelCanvasOpacity.d.ts +2 -0
  115. package/dist/shared-utils/createCanvasTextTexture.d.ts +8 -0
  116. package/dist/shared-utils/createLine/index.d.ts +3 -0
  117. package/dist/shared-utils/debounce.d.ts +6 -0
  118. package/dist/shared-utils/equal.d.ts +11 -0
  119. package/dist/shared-utils/filter.d.ts +27 -0
  120. package/dist/shared-utils/five/changeMode.d.ts +2 -0
  121. package/dist/shared-utils/five/useFivePlugin.d.ts +1 -0
  122. package/dist/shared-utils/formatRad.d.ts +7 -0
  123. package/dist/shared-utils/getPxmm.d.ts +11 -0
  124. package/dist/shared-utils/getRandomColor.d.ts +1 -0
  125. package/dist/shared-utils/isNil.d.ts +10 -0
  126. package/dist/shared-utils/isTruelyObject.d.ts +18 -0
  127. package/dist/shared-utils/math/evenNumber.d.ts +3 -0
  128. package/dist/shared-utils/math/planimetry.d.ts +116 -0
  129. package/dist/shared-utils/math/rad2Deg.d.ts +1 -0
  130. package/dist/shared-utils/nearlyEqual.d.ts +7 -0
  131. package/dist/shared-utils/nextFrame.d.ts +1 -0
  132. package/dist/shared-utils/noop.d.ts +5 -0
  133. package/dist/shared-utils/object3d2LocalMatrix.d.ts +12 -0
  134. package/dist/shared-utils/px2rem.d.ts +1 -0
  135. package/dist/shared-utils/removeArrayItem.d.ts +7 -0
  136. package/dist/shared-utils/tap.d.ts +8 -0
  137. package/dist/shared-utils/three/centerPoint.d.ts +2 -0
  138. package/dist/shared-utils/three/getExtraModelLoader.d.ts +6 -0
  139. package/dist/shared-utils/three/getNormal.d.ts +2 -0
  140. package/dist/shared-utils/three/getTextureLoader.d.ts +6 -0
  141. package/dist/shared-utils/three/loadFbxObj.d.ts +2 -0
  142. package/dist/shared-utils/three/loadTexture.d.ts +2 -0
  143. package/dist/shared-utils/three/transformPositionToVector3.d.ts +7 -0
  144. package/dist/shared-utils/three/transfromToMeshBasicMaterial.d.ts +2 -0
  145. package/dist/shared-utils/throttle.d.ts +7 -0
  146. package/dist/shared-utils/tinyEJSrender.d.ts +5 -0
  147. package/dist/shared-utils/to.d.ts +8 -0
  148. package/dist/shared-utils/useDebounce.d.ts +8 -0
  149. package/dist/shared-utils/useThrottle.d.ts +8 -0
  150. package/dist/shared-utils/uuid.d.ts +4 -0
  151. package/dist/shared-utils/vectorTocoordinates.d.ts +7 -0
  152. package/dist/typings/math.type.d.ts +44 -0
  153. package/dist/typings/utils.type.d.ts +2 -0
  154. package/docs/.nojekyll +1 -0
  155. package/docs/assets/highlight.css +78 -0
  156. package/docs/assets/icons.css +1043 -0
  157. package/docs/assets/icons.png +0 -0
  158. package/docs/assets/icons@2x.png +0 -0
  159. package/docs/assets/main.js +52 -0
  160. package/docs/assets/search.js +1 -0
  161. package/docs/assets/style.css +1413 -0
  162. package/docs/assets/widgets.png +0 -0
  163. package/docs/assets/widgets@2x.png +0 -0
  164. package/docs/classes/ModelRoomLabelController.html +20 -0
  165. package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +1 -0
  166. package/docs/enums/ModelFloorplanErrorType.html +1 -0
  167. package/docs/index.html +43 -0
  168. package/docs/interfaces/LineJson.html +1 -0
  169. package/docs/interfaces/ModelChassisCompassPluginData.html +1 -0
  170. package/docs/interfaces/ModelChassisCompassPluginExportType.html +1 -0
  171. package/docs/interfaces/ModelChassisCompassPluginParameterType.html +1 -0
  172. package/docs/interfaces/ModelEntryDoorGuidePluginData.html +1 -0
  173. package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +1 -0
  174. package/docs/interfaces/ModelFloorplanParameterType.html +1 -0
  175. package/docs/interfaces/ModelFloorplanViewEvent.html +5 -0
  176. package/docs/interfaces/ModelRoomLabelPluginData.html +1 -0
  177. package/docs/interfaces/PanoCompassPluginData.html +1 -0
  178. package/docs/interfaces/PanoCompassPluginParameterType.html +1 -0
  179. package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +11 -0
  180. package/docs/interfaces/PanoRulerPluginExportType.html +1 -0
  181. package/docs/interfaces/PanoRulerPluginOptions.html +1 -0
  182. package/docs/interfaces/PanoRulerPluginParameterType.html +1 -0
  183. package/docs/interfaces/PanoSpatialTagPluginData.html +1 -0
  184. package/docs/interfaces/PanoSpatialTagPluginExportType.html +1 -0
  185. package/docs/interfaces/PanoSpatialTagPluginParameterType.html +1 -0
  186. package/docs/interfaces/PointJson.html +1 -0
  187. package/docs/interfaces/RoomLabel.html +13 -0
  188. package/docs/interfaces/TopviewFloorplanPluginParameterType.html +1 -0
  189. package/docs/modules.html +28 -0
  190. package/libs/CSS3DRenderPlugin/index.js +11 -13
  191. package/libs/ModelEntryDoorGuidePlugin/index.js +1 -0
  192. package/libs/ModelItemLabelPlugin/ItemLabelComponent.js +420 -0
  193. package/libs/ModelItemLabelPlugin/ItemLabelItem.js +133 -0
  194. package/libs/ModelItemLabelPlugin/events.type.d.ts +9 -0
  195. package/libs/ModelItemLabelPlugin/events.type.js +1 -0
  196. package/libs/ModelItemLabelPlugin/index.d.ts +4 -0
  197. package/libs/ModelItemLabelPlugin/index.js +170 -0
  198. package/libs/ModelItemLabelPlugin/typings.d.ts +55 -0
  199. package/libs/ModelItemLabelPlugin/typings.js +6 -0
  200. package/libs/ModelItemLabelPlugin/utils/parseData.d.ts +3 -0
  201. package/libs/ModelItemLabelPlugin/utils/parseData.js +7 -0
  202. package/libs/ModelRoomLabelPlugin/Controller.js +2 -2
  203. package/libs/ModelRoomLabelPlugin/RoomLabelItem.js +121 -0
  204. package/libs/ModelRoomLabelPlugin/RoomLabelItems.js +255 -0
  205. package/libs/ModelViewPlugin/index.js +6 -6
  206. package/libs/PanoCompassPlugin/Assets/roomInfoIcon.d.ts +1 -0
  207. package/libs/PanoCompassPlugin/Assets/roomInfoIcon.js +1 -0
  208. package/libs/PanoCompassPlugin/getRoomInfoInstance.d.ts +8 -0
  209. package/libs/PanoCompassPlugin/getRoomInfoInstance.js +48 -0
  210. package/libs/PanoCompassPlugin/index.d.ts +51 -0
  211. package/libs/PanoCompassPlugin/index.js +171 -0
  212. package/libs/PanoMeasurePlugin/Controller/BaseController.d.ts +36 -0
  213. package/libs/PanoMeasurePlugin/Controller/BaseController.js +69 -0
  214. package/libs/PanoMeasurePlugin/Controller/EditController.d.ts +52 -0
  215. package/libs/PanoMeasurePlugin/Controller/EditController.js +216 -0
  216. package/libs/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +12 -0
  217. package/libs/PanoMeasurePlugin/Controller/ShortcutKeyController.js +44 -0
  218. package/libs/PanoMeasurePlugin/Controller/WatchController.d.ts +25 -0
  219. package/libs/PanoMeasurePlugin/Controller/WatchController.js +223 -0
  220. package/libs/PanoMeasurePlugin/Controller/index.d.ts +61 -0
  221. package/libs/PanoMeasurePlugin/Controller/index.js +176 -0
  222. package/libs/PanoMeasurePlugin/Model/index.d.ts +38 -0
  223. package/libs/PanoMeasurePlugin/Model/index.js +114 -0
  224. package/libs/PanoMeasurePlugin/Model/line.d.ts +30 -0
  225. package/libs/PanoMeasurePlugin/Model/line.js +64 -0
  226. package/libs/PanoMeasurePlugin/Model/point.d.ts +16 -0
  227. package/libs/PanoMeasurePlugin/Model/point.js +28 -0
  228. package/libs/PanoMeasurePlugin/Model/polyline.d.ts +16 -0
  229. package/libs/PanoMeasurePlugin/Model/polyline.js +48 -0
  230. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.d.ts +2 -0
  231. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.js +15 -0
  232. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +2 -0
  233. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.js +2 -0
  234. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +2 -0
  235. package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.js +2 -0
  236. package/libs/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +22 -0
  237. package/libs/PanoMeasurePlugin/Modules/DeleteDom/index.js +108 -0
  238. package/libs/PanoMeasurePlugin/Modules/FiveHelper.d.ts +11 -0
  239. package/libs/PanoMeasurePlugin/Modules/FiveHelper.js +33 -0
  240. package/libs/PanoMeasurePlugin/Modules/GuideController.d.ts +18 -0
  241. package/libs/PanoMeasurePlugin/Modules/GuideController.js +75 -0
  242. package/libs/PanoMeasurePlugin/Modules/Magnifier.d.ts +24 -0
  243. package/libs/PanoMeasurePlugin/Modules/Magnifier.js +103 -0
  244. package/libs/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +6 -0
  245. package/libs/PanoMeasurePlugin/Modules/UIController/HTML.js +117 -0
  246. package/libs/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +18 -0
  247. package/libs/PanoMeasurePlugin/Modules/UIController/MainBtnController.js +102 -0
  248. package/libs/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +12 -0
  249. package/libs/PanoMeasurePlugin/Modules/UIController/Revoke/index.js +35 -0
  250. package/libs/PanoMeasurePlugin/Modules/UIController/index.d.ts +16 -0
  251. package/libs/PanoMeasurePlugin/Modules/UIController/index.js +69 -0
  252. package/libs/PanoMeasurePlugin/Modules/UIController/style.d.ts +17 -0
  253. package/libs/PanoMeasurePlugin/Modules/UIController/style.js +78 -0
  254. package/libs/PanoMeasurePlugin/index.d.ts +7 -0
  255. package/libs/PanoMeasurePlugin/index.js +5 -0
  256. package/libs/PanoMeasurePlugin/typings/data.d.ts +28 -0
  257. package/libs/PanoMeasurePlugin/typings/data.js +1 -0
  258. package/libs/PanoMeasurePlugin/typings/event.type.d.ts +28 -0
  259. package/libs/PanoMeasurePlugin/typings/event.type.js +1 -0
  260. package/libs/PanoMeasurePlugin/typings/utils.type.d.ts +1 -0
  261. package/libs/PanoMeasurePlugin/typings/utils.type.js +1 -0
  262. package/libs/PanoMeasurePlugin/utils/clearGroup.d.ts +2 -0
  263. package/libs/PanoMeasurePlugin/utils/clearGroup.js +3 -0
  264. package/libs/PanoMeasurePlugin/utils/constants.d.ts +4 -0
  265. package/libs/PanoMeasurePlugin/utils/constants.js +31 -0
  266. package/libs/PanoMeasurePlugin/utils/distanceDom.d.ts +28 -0
  267. package/libs/PanoMeasurePlugin/utils/distanceDom.js +114 -0
  268. package/libs/PanoMeasurePlugin/utils/findAssociatedLines.d.ts +2 -0
  269. package/libs/PanoMeasurePlugin/utils/findAssociatedLines.js +21 -0
  270. package/libs/PanoMeasurePlugin/utils/findClosestPoint.d.ts +10 -0
  271. package/libs/PanoMeasurePlugin/utils/findClosestPoint.js +27 -0
  272. package/libs/PanoMeasurePlugin/utils/getIntersectionFromEvent.d.ts +4 -0
  273. package/libs/PanoMeasurePlugin/utils/getIntersectionFromEvent.js +9 -0
  274. package/libs/PanoMeasurePlugin/utils/getPointFromHammerEvent.d.ts +10 -0
  275. package/libs/PanoMeasurePlugin/utils/getPointFromHammerEvent.js +14 -0
  276. package/libs/PanoMeasurePlugin/utils/ironbox.d.ts +1 -0
  277. package/libs/PanoMeasurePlugin/utils/ironbox.js +1 -0
  278. package/libs/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +2 -0
  279. package/libs/PanoMeasurePlugin/utils/isNDCPointInScreen.js +6 -0
  280. package/libs/PanoMeasurePlugin/utils/line.d.ts +17 -0
  281. package/libs/PanoMeasurePlugin/utils/line.js +32 -0
  282. package/libs/PanoMeasurePlugin/utils/math.d.ts +17 -0
  283. package/libs/PanoMeasurePlugin/utils/math.js +44 -0
  284. package/libs/PanoMeasurePlugin/utils/mouseGroup.d.ts +2 -0
  285. package/libs/PanoMeasurePlugin/utils/mouseGroup.js +21 -0
  286. package/libs/PanoMeasurePlugin/utils/ndc2Screen.d.ts +5 -0
  287. package/libs/PanoMeasurePlugin/utils/ndc2Screen.js +6 -0
  288. package/libs/PanoRulerPlugin/index.d.ts +31 -0
  289. package/libs/PanoRulerPlugin/index.js +398 -0
  290. package/libs/PanoRulerPlugin/style.d.ts +2 -0
  291. package/libs/PanoRulerPlugin/style.js +88 -0
  292. package/libs/PanoRulerPlugin/typings.d.ts +21 -0
  293. package/libs/PanoRulerPlugin/typings.js +1 -0
  294. package/libs/PanoSpatialTagPlugin/Components/origins.js +168 -0
  295. package/libs/PanoSpatialTagPlugin/Components/tag.js +302 -0
  296. package/libs/PanoSpatialTagPlugin/index.d.ts +33 -0
  297. package/libs/PanoSpatialTagPlugin/index.js +411 -0
  298. package/libs/PanoSpatialTagPlugin/store.d.ts +1 -0
  299. package/libs/PanoSpatialTagPlugin/store.js +2 -0
  300. package/libs/PanoSpatialTagPlugin/style.d.ts +1 -0
  301. package/libs/PanoSpatialTagPlugin/style.js +8 -0
  302. package/libs/PanoSpatialTagPlugin/typings.d.ts +40 -0
  303. package/libs/PanoSpatialTagPlugin/typings.js +1 -0
  304. package/libs/floorplan/Components/BaseImage.js +217 -0
  305. package/libs/floorplan/Components/Normalmage.js +63 -0
  306. package/libs/floorplan/Components/RoomHighlight/Room.js +70 -0
  307. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.js +289 -0
  308. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.js +328 -0
  309. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.js +64 -0
  310. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.js +103 -0
  311. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.js +140 -0
  312. package/libs/floorplan/Components/SvgImage.js +83 -0
  313. package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.js +120 -0
  314. package/libs/floorplan/ModelFloorplanPlugin/Components/Compass.js +114 -0
  315. package/libs/floorplan/ModelFloorplanPlugin/Components/CurrentFloor/CurrentFloor.js +463 -0
  316. package/libs/floorplan/ModelFloorplanPlugin/Components/Main.js +383 -0
  317. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabel.js +171 -0
  318. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabels.js +265 -0
  319. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleItem.js +301 -0
  320. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleLabels.js +219 -0
  321. package/libs/floorplan/ModelFloorplanPlugin/Controller.d.ts +3 -0
  322. package/libs/floorplan/ModelFloorplanPlugin/Controller.js +6 -4
  323. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.js +152 -0
  324. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.js +248 -0
  325. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.js +154 -0
  326. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.js +312 -0
  327. package/libs/floorplan/PanoFloorplanRadarPlugin/Controller.js +1 -1
  328. package/libs/floorplan/TopviewFloorplanPlugin/Controller.d.ts +3 -0
  329. package/libs/floorplan/TopviewFloorplanPlugin/Controller.js +7 -5
  330. package/libs/floorplan/constant.d.ts +5 -0
  331. package/libs/floorplan/constant.js +6 -0
  332. package/libs/floorplan/typings/floorplanServerData.d.ts +4 -0
  333. package/libs/index.d.ts +19 -9
  334. package/libs/index.js +11 -3
  335. package/libs/shared-utils/getPxmm.d.ts +6 -1
  336. package/libs/shared-utils/getPxmm.js +26 -12
  337. package/libs/shared-utils/tinyEJSrender.d.ts +5 -0
  338. package/libs/shared-utils/tinyEJSrender.js +180 -0
  339. package/package.json +23 -13
  340. package/dist/dnalogel.es.js +0 -37145
  341. package/dist/dnalogel.umd.js +0 -2
  342. package/dist/style.css +0 -1
  343. package/libs/ModelRoomLabelPlugin/RoomLabelItem.svelte +0 -63
  344. package/libs/ModelRoomLabelPlugin/RoomLabelItem.svelte.map +0 -1
  345. package/libs/ModelRoomLabelPlugin/RoomLabelItems.svelte +0 -80
  346. package/libs/ModelRoomLabelPlugin/RoomLabelItems.svelte.map +0 -1
  347. package/libs/floorplan/Components/BaseImage.svelte +0 -25
  348. package/libs/floorplan/Components/BaseImage.svelte.map +0 -1
  349. package/libs/floorplan/Components/Normalmage.svelte +0 -11
  350. package/libs/floorplan/Components/Normalmage.svelte.map +0 -1
  351. package/libs/floorplan/Components/RoomHighlight/Room.svelte +0 -21
  352. package/libs/floorplan/Components/RoomHighlight/Room.svelte.map +0 -1
  353. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.svelte +0 -60
  354. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.svelte.map +0 -1
  355. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.svelte +0 -35
  356. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.svelte.map +0 -1
  357. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte +0 -7
  358. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte.map +0 -1
  359. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte +0 -16
  360. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte.map +0 -1
  361. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte +0 -17
  362. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte.map +0 -1
  363. package/libs/floorplan/Components/SvgImage.svelte +0 -25
  364. package/libs/floorplan/Components/SvgImage.svelte.map +0 -1
  365. package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.svelte +0 -46
  366. package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.svelte.map +0 -1
  367. package/libs/floorplan/ModelFloorplanPlugin/Components/Compass.svelte +0 -48
  368. package/libs/floorplan/ModelFloorplanPlugin/Components/Compass.svelte.map +0 -1
  369. package/libs/floorplan/ModelFloorplanPlugin/Components/CurrentFloor/CurrentFloor.svelte +0 -37
  370. package/libs/floorplan/ModelFloorplanPlugin/Components/CurrentFloor/CurrentFloor.svelte.map +0 -1
  371. package/libs/floorplan/ModelFloorplanPlugin/Components/Main.svelte +0 -50
  372. package/libs/floorplan/ModelFloorplanPlugin/Components/Main.svelte.map +0 -1
  373. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabel.svelte +0 -41
  374. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabel.svelte.map +0 -1
  375. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabels.svelte +0 -25
  376. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabels.svelte.map +0 -1
  377. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleItem.svelte +0 -148
  378. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleItem.svelte.map +0 -1
  379. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleLabels.svelte +0 -15
  380. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleLabels.svelte.map +0 -1
  381. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte +0 -84
  382. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte.map +0 -1
  383. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte +0 -18
  384. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte.map +0 -1
  385. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte +0 -40
  386. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte.map +0 -1
  387. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte +0 -61
  388. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte.map +0 -1
@@ -0,0 +1,32 @@
1
+ import { Line as FiveLine } from '@realsee/five/line';
2
+ import { lightLineOpts, normalLineOpts } from './constants';
3
+ import { Color } from 'three';
4
+ export function creatLine(start, end, opts) {
5
+ const lineWidth = opts?.lineWidth ?? 2;
6
+ const lineColor = opts?.lineColor ?? new Color(0xffffff);
7
+ const pointSize = opts?.pointSize ?? 5;
8
+ const lineRenderOrder = opts?.lineRenderOrder ?? 10;
9
+ const pointsRenderOrder = opts?.lineRenderOrder ?? 20;
10
+ const line = new FiveLine(start, end);
11
+ // set line
12
+ line.setMaterial({ linewidth: lineWidth, color: lineColor });
13
+ line.line.material.depthTest = false;
14
+ line.line.material.transparent = true;
15
+ line.line.renderOrder = lineRenderOrder;
16
+ // set point
17
+ line.points.renderOrder = pointsRenderOrder;
18
+ const pointMaterial = line.points.material;
19
+ pointMaterial.depthTest = false;
20
+ pointMaterial.size = pointSize;
21
+ opts?.pointColor && pointMaterial.color.set(opts.pointColor).convertSRGBToLinear();
22
+ if (opts?.pointTexture)
23
+ pointMaterial.map = opts.pointTexture;
24
+ return line;
25
+ }
26
+ export function creatLineMesh(line, type) {
27
+ const [point, anotherPoint] = line.points;
28
+ const opts = type === 'light' ? lightLineOpts : normalLineOpts;
29
+ const fiveLine = creatLine(point.position, anotherPoint.position, opts);
30
+ fiveLine.name = 'normalLine_' + line.id;
31
+ return fiveLine;
32
+ }
@@ -0,0 +1,17 @@
1
+ import { Vector2 } from 'three';
2
+ /**
3
+ * 获取一点对于线段上最近的一点,
4
+ * 如果可以是过直线垂线的垂足,不行的话取线段的两端
5
+ * @param point
6
+ * @param linePoints
7
+ * @return
8
+ */
9
+ export declare function closestPointOnLine(point: Vector2, linePoints: Vector2[]): Vector2;
10
+ /**
11
+ * 检查两个点是否位置相同
12
+ * point: { x: number, y: number }
13
+ * @param point1
14
+ * @param point2
15
+ * @return
16
+ */
17
+ export declare function samePointAt(point1: Vector2, point2: Vector2): boolean;
@@ -0,0 +1,44 @@
1
+ import { Vector2 } from 'three';
2
+ /**
3
+ * 获取一点对于线段上最近的一点,
4
+ * 如果可以是过直线垂线的垂足,不行的话取线段的两端
5
+ * @param point
6
+ * @param linePoints
7
+ * @return
8
+ */
9
+ export function closestPointOnLine(point, linePoints) {
10
+ const tA = point.x - linePoints[0].x;
11
+ const tB = point.y - linePoints[0].y;
12
+ const tC = linePoints[1].x - linePoints[0].x;
13
+ const tD = linePoints[1].y - linePoints[0].y;
14
+ // 设线段为 AB 线段,线段外一点为 P
15
+ // tDot = AP 向量与 AB 向量乘积,tLenSq 为 |AB|平方。
16
+ // tParam 是 AP 向量在 AB 向量投影向量 AC 与 AB 向量的比。
17
+ const tDot = tA * tC + tB * tD;
18
+ const tLenSq = tC * tC + tD * tD;
19
+ const tParam = tDot / tLenSq;
20
+ let tXx, tYy;
21
+ if (tParam < 0 || samePointAt(linePoints[0], linePoints[1])) {
22
+ tXx = linePoints[0].x;
23
+ tYy = linePoints[0].y;
24
+ }
25
+ else if (tParam > 1) {
26
+ tXx = linePoints[1].x;
27
+ tYy = linePoints[1].y;
28
+ }
29
+ else {
30
+ tXx = linePoints[0].x + tParam * tC;
31
+ tYy = linePoints[0].y + tParam * tD;
32
+ }
33
+ return new Vector2(tXx, tYy);
34
+ }
35
+ /**
36
+ * 检查两个点是否位置相同
37
+ * point: { x: number, y: number }
38
+ * @param point1
39
+ * @param point2
40
+ * @return
41
+ */
42
+ export function samePointAt(point1, point2) {
43
+ return point1.x === point2.x && point1.y === point2.y;
44
+ }
@@ -0,0 +1,2 @@
1
+ import * as THREE from 'three';
2
+ export declare function getMouseGroup(): THREE.Group;
@@ -0,0 +1,21 @@
1
+ import { CurvePath, DoubleSide, Group, LineCurve3, Mesh, MeshBasicMaterial, PlaneGeometry, SphereGeometry, sRGBEncoding, TextureLoader, TubeGeometry, Vector3, } from 'three';
2
+ const planTextureUrl = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjoAAAI6CAMAAAAZlhLyAAACB1BMVEUAAAD+/v6qqqqgoKCLi4t7e3u4uLhvb29MTExZWVlCQkJgYGBqamo4ODi9vb3///9FRUXPz887Ozv///9QUFBWVlZdXV38/Pzj4+Pn5+f8/Pz5+fn9/f329vZoaGje3t78/Pz////x8fH8/Pzs7OyBgYHd3d39/f319fX+/v79/f2Kior6+vr////+/v76+vr+/v7////8/Pz9/f3+/v7m5ub7+/v+/v7+/v7j4+P////+/v79/f3d3d3h4eH4+Pj+/v79/f12dnbc3Nz9/f3w8PD9/f34+Pj9/f3+/v5jY2P8/Pz9/f2ioqJubm7v7+/+/v76+vr5+fnv7+/09PSDg4P////t7e3+/v7+/v7+/v7///+ZmZl7e3v7+/vy8vL+/v7+/v7p6en19fX////s7Oz+/v6lpaX+/v7r6+vg4OD9/f3q6ur///////+UlJTt7e329vbz8/Pg4OD///+wsLCdnZ2QkJDe3t77+/vz8/Pw8PD+/v7c3Nyqqqrw8PD4+Pj+/v7////4+Pj////s7Oyurq7f39/p6en8/Pz////8/Pz19fVycnK0tLT////q6ure3t7o6Oj////s7Oz39/fd3d3h4eH+/v7j4+P////+/v7n5+f///////////////+ysrLe3t7////////8/PzHx8fl5eX////39/fv7+/d3d3///8S/hbOAAAArHRSTlMAzhATFhkNGyEfIx4dJQ/OKwoozS4wMh3Uy4SPbjs34kJ9EAkGP+8Snk1nRRo5JYl2eDQiA88wY3PXRDYN6dyTX0s751SxPJdhPjRdV1M4ti0XFa+pQiq5aShQSE09IKJwWMilWr9SVzLC3wvFwplKvKKY9spfUEjge6yqnexaLpqQakgBtVz1wQe9i4s6ZaG788fGKIXx95TZzKbSuKu1s2LlsJb7dqiu/cSWYhzVwQAALl1JREFUeNrs0jFqalEUheE9C9ugAQloCg0WmuIJIbxHUsQUQhQEQUTINNI463fvqU2xT3G5xfetNYQ/+M3PT7SDfDo/T0/SIe+pCJAOt0mHvrgvAqRDUn061/vrNSDrOhqNpEOFURGQNfqWDlW+i4CadJ6lQ95zESAdbpMOfTEcPg+Hw4CsphvpUGM4bsoZB2SNW9JB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`;
3
+ export function getMouseGroup() {
4
+ const group = new Group();
5
+ const planGeometry = new PlaneGeometry(0.3, 0.3);
6
+ const planTexture = new TextureLoader().load(planTextureUrl);
7
+ planTexture.encoding = sRGBEncoding;
8
+ const planMaterial = new MeshBasicMaterial({ map: planTexture, transparent: true, depthTest: false });
9
+ const planMesh = new Mesh(planGeometry, planMaterial);
10
+ const zPath = new CurvePath();
11
+ zPath.add(new LineCurve3(new Vector3(0, 0, 0), new Vector3(0, 0, 0.1)));
12
+ const zGeometry = new TubeGeometry(zPath, 10, 0.005);
13
+ const zMaterial = new MeshBasicMaterial({ color: 0x33f1ef, depthTest: false, side: DoubleSide });
14
+ const zMesh = new Mesh(zGeometry, zMaterial);
15
+ const ballGeometry = new SphereGeometry(0.01, 32, 32);
16
+ const ballMesh = new Mesh(ballGeometry, zMaterial);
17
+ ballMesh.position.set(0, 0, 0.1);
18
+ group.name = 'mouse-current';
19
+ group.add(planMesh, zMesh, ballMesh);
20
+ return group;
21
+ }
@@ -0,0 +1,5 @@
1
+ import { Vector2, Vector3 } from 'three';
2
+ export default function ndc2Screen(ndcPosition: Vector3, containerSize: {
3
+ width: number;
4
+ height: number;
5
+ }): Vector2;
@@ -0,0 +1,6 @@
1
+ import { Vector2 } from 'three';
2
+ export default function ndc2Screen(ndcPosition, containerSize) {
3
+ const left = ((ndcPosition.x + 1) / 2) * containerSize.width;
4
+ const top = (-(ndcPosition.y - 1) / 2) * containerSize.height;
5
+ return new Vector2(left, top);
6
+ }
@@ -0,0 +1,31 @@
1
+ import type { FivePlugin } from '@realsee/five';
2
+ import { RoomInfo, RoomRules } from './typings';
3
+ export interface PanoRulerPluginOptions {
4
+ distanceText?: (distance: number) => string;
5
+ className?: string;
6
+ }
7
+ interface PanoRulerPluginPluginState {
8
+ enable: boolean;
9
+ loaded: boolean;
10
+ options: PanoRulerPluginOptions;
11
+ }
12
+ export interface PanoRulerPluginParameterType {
13
+ roomInfo?: RoomInfo;
14
+ roomRules?: RoomRules;
15
+ options?: PanoRulerPluginOptions;
16
+ }
17
+ export interface PanoRulerPluginExportType {
18
+ enable: () => void;
19
+ disable: () => void;
20
+ load: (roomInfo?: RoomInfo, roomRules?: RoomRules, options?: PanoRulerPluginOptions) => Promise<boolean>;
21
+ state: PanoRulerPluginPluginState;
22
+ }
23
+ /**
24
+ * 全景标尺插件
25
+ */
26
+ export declare const PanoRulerPlugin: FivePlugin<PanoRulerPluginParameterType, PanoRulerPluginExportType>;
27
+ export declare const panoRulerPluginServerParams: {
28
+ name: string;
29
+ version: number;
30
+ };
31
+ export default PanoRulerPlugin;
@@ -0,0 +1,398 @@
1
+ import { Five } from '@realsee/five';
2
+ import { Raycaster, Vector3 } from 'three';
3
+ import { intersectionOfLine } from '../shared-utils/math/planimetry';
4
+ import { nextFrame } from '../shared-utils/nextFrame';
5
+ import throttle from '../shared-utils/throttle';
6
+ import PanoRulerStyle from './style';
7
+ const getDistance = (p1, p2) => {
8
+ return Math.sqrt(Math.pow(p1.z - p2.z, 2) + Math.pow(p1.x - p2.x, 2));
9
+ };
10
+ const getRoomHeightInfo = (roomInfo, five) => {
11
+ const roomHeightInfo = {};
12
+ const raycaster = new Raycaster();
13
+ const work = five.work;
14
+ if (!work)
15
+ return roomHeightInfo;
16
+ const observers = roomInfo.observers;
17
+ work.observers.forEach((observer, index) => {
18
+ const { standingPosition: position } = observer;
19
+ const point = new Vector3(position.x, position.y, position.z);
20
+ raycaster.set(point, new Vector3(0, 1, 0));
21
+ const [intersection] = five.model.intersectRaycaster(raycaster);
22
+ // 虚景 VR 没有天花板碰撞射线无相交,默认固定层高2.7m
23
+ const verticalY = intersection ? intersection.point.y : 2.7;
24
+ const id = observers[index];
25
+ if (!id)
26
+ return roomHeightInfo;
27
+ const observerRoomName = roomInfo.rooms[id].name;
28
+ if (roomHeightInfo[observerRoomName] === undefined) {
29
+ roomHeightInfo[observerRoomName] = {
30
+ __roof: [verticalY],
31
+ __floor: [point.y],
32
+ };
33
+ }
34
+ else {
35
+ roomHeightInfo[observerRoomName].__roof.push(verticalY);
36
+ roomHeightInfo[observerRoomName].__floor.push(point.y);
37
+ }
38
+ });
39
+ // 地板高度求中位数,屋顶高度取最高
40
+ for (const roomName in roomHeightInfo) {
41
+ const room = roomHeightInfo[roomName];
42
+ room.__roof.sort();
43
+ room.__floor.sort();
44
+ room.floor = room.__floor[~~(room.__floor.length / 2)];
45
+ room.roof = room.__roof[room.__roof.length - 1];
46
+ }
47
+ return roomHeightInfo;
48
+ };
49
+ /**
50
+ * 全景标尺插件
51
+ */
52
+ export const PanoRulerPlugin = (five, params) => {
53
+ const state = {
54
+ enable: false,
55
+ loaded: false,
56
+ options: params.options || {
57
+ distanceText: (distance) => `${distance.toFixed(1)}m`,
58
+ },
59
+ };
60
+ const tpl = (name, distance) => {
61
+ const domStr = `
62
+ <div class="PanoRulerPlugin-rule-line">
63
+ <em></em>
64
+ <div class="PanoRulerPlugin-rule-label">
65
+ <div class="PanoRulerPlugin-rule-label-name">${state.options.distanceText(distance)}</div>
66
+ </div>
67
+ </div>
68
+ `;
69
+ const res = document.createElement('div');
70
+ res.setAttribute('class', 'PanoRulerPlugin-rule');
71
+ res.setAttribute('data-name', name);
72
+ res.setAttribute('style', 'display: none');
73
+ res.innerHTML = domStr;
74
+ return res;
75
+ };
76
+ const $rule = document.createElement('div');
77
+ $rule.setAttribute('style', `position: absolute;pointer-events: none;width: 100%;height: 100%;left: 0;top: 0;overflow: hidden;`);
78
+ // 添加标尺样式
79
+ const style = document.createElement('div');
80
+ style.innerHTML = PanoRulerStyle;
81
+ $rule.appendChild(style);
82
+ const __rule = {};
83
+ const _load = (roomInfo, roomRules) => {
84
+ if (state.loaded) {
85
+ throw new Error('标尺被重复初始化!');
86
+ }
87
+ const roomHeightInfo = getRoomHeightInfo(roomInfo, five);
88
+ const work = five.work;
89
+ if (!work)
90
+ return false;
91
+ for (const obKey in roomRules) {
92
+ const points = roomRules[obKey];
93
+ const { standingPosition: defaultPosition } = work.observers[0];
94
+ const roomPoints = points.map(({ x, z, observers }) => {
95
+ const pointRoomName = observers.length > 0 ? roomInfo.rooms[roomInfo.observers[observers[0]]].name : '';
96
+ const medianFloorHeight = roomHeightInfo[pointRoomName] ? roomHeightInfo[pointRoomName].floor : null;
97
+ let minDistance = Infinity;
98
+ let nearestPoint = {
99
+ index: 0,
100
+ x: defaultPosition.x,
101
+ y: defaultPosition.y,
102
+ z: defaultPosition.z,
103
+ };
104
+ observers.forEach((index) => {
105
+ if (!work.observers[index])
106
+ return;
107
+ const { standingPosition: position } = work.observers[index];
108
+ const observerPoint = {
109
+ index,
110
+ x: position.x,
111
+ y: position.y,
112
+ z: position.z,
113
+ };
114
+ const distance = getDistance({ x, z }, observerPoint);
115
+ if (medianFloorHeight) {
116
+ // 取最近点时排除高度与房间平均高度差大于0.3米的点
117
+ if (distance < minDistance && Math.abs(observerPoint.y - medianFloorHeight) < 0.3) {
118
+ minDistance = distance;
119
+ nearestPoint = observerPoint;
120
+ }
121
+ }
122
+ else {
123
+ if (distance < minDistance) {
124
+ minDistance = distance;
125
+ nearestPoint = observerPoint;
126
+ }
127
+ }
128
+ });
129
+ const _origin = new Vector3(x, nearestPoint.y, z);
130
+ Object.assign(_origin, { observers });
131
+ const verticalY = roomHeightInfo[pointRoomName] ? roomHeightInfo[pointRoomName].roof : null;
132
+ const _vertical = !verticalY ? null : new Vector3(x, verticalY, z);
133
+ if (_vertical)
134
+ Object.assign(_vertical, { observers });
135
+ const origin = _origin;
136
+ const vertical = _vertical;
137
+ return { origin, vertical };
138
+ });
139
+ __rule[obKey] = {
140
+ origins: roomPoints.map((roomPoint) => roomPoint.origin),
141
+ rules: [],
142
+ };
143
+ for (const { origin, vertical } of roomPoints) {
144
+ if (!vertical)
145
+ continue;
146
+ const $element = tpl(obKey, origin.distanceTo(vertical));
147
+ $rule.append($element);
148
+ __rule[obKey].rules.push({ vertical: true, rule: [origin, vertical], $element });
149
+ }
150
+ for (let index = 0; index < roomPoints.length; index++) {
151
+ let nextIndex = index + 1;
152
+ if (nextIndex >= roomPoints.length)
153
+ nextIndex = 0;
154
+ const { origin } = roomPoints[index];
155
+ const { origin: next } = roomPoints[nextIndex];
156
+ const $element = tpl(obKey, origin.distanceTo(next));
157
+ $rule.append($element);
158
+ __rule[obKey].rules.push({ vertical: false, rule: [origin, next], $element });
159
+ }
160
+ }
161
+ state.loaded = true;
162
+ return true;
163
+ };
164
+ const load = async (_roomInfo, _roomRules, options) => {
165
+ const roomInfo = _roomInfo || params.roomInfo;
166
+ const roomRules = _roomRules || params.roomRules;
167
+ if (!roomInfo || !roomRules) {
168
+ throw new Error('标尺数据依赖不齐全!');
169
+ }
170
+ state.options = Object.assign({}, state.options, options || {});
171
+ if (five.model.loaded) {
172
+ return _load(roomInfo, roomRules);
173
+ }
174
+ else {
175
+ return await new Promise((resolve) => five.once('modelLoaded', () => resolve(_load(roomInfo, roomRules))));
176
+ }
177
+ };
178
+ if (params.roomInfo && params.roomRules) {
179
+ load(params.roomInfo, params.roomRules);
180
+ }
181
+ const getRuleScreenIntr = (startPoint, endPoint, canvasWidth, canvasHeight) => {
182
+ const screenLines = [
183
+ [
184
+ { x: 0, y: 0 },
185
+ { x: canvasWidth, y: 0 },
186
+ ],
187
+ [
188
+ { x: 0, y: 0 },
189
+ { x: 0, y: canvasHeight },
190
+ ],
191
+ [
192
+ { x: canvasWidth, y: 0 },
193
+ { x: canvasWidth, y: canvasHeight },
194
+ ],
195
+ [
196
+ { x: 0, y: canvasHeight },
197
+ { x: canvasWidth, y: canvasHeight },
198
+ ],
199
+ ];
200
+ const intr = [];
201
+ for (let i = 0; i < screenLines.length; i++) {
202
+ const result = intersectionOfLine([startPoint, endPoint], [screenLines[i][0], screenLines[i][1]], true);
203
+ if (result)
204
+ intr.push(result);
205
+ }
206
+ if (intr.length === 0)
207
+ return false;
208
+ else {
209
+ return intr;
210
+ }
211
+ };
212
+ const freshRule = () => {
213
+ const element = five.getElement()?.parentElement;
214
+ if (!element)
215
+ return;
216
+ if (!state.loaded)
217
+ return;
218
+ if (Object.keys(__rule).length <= 0)
219
+ return;
220
+ const { panoIndex, camera, currentMode } = five;
221
+ if (panoIndex === undefined)
222
+ return;
223
+ let name;
224
+ for (const _name in __rule) {
225
+ if (_name.split(',').indexOf(panoIndex.toString()) >= 0)
226
+ name = _name;
227
+ }
228
+ if (!name)
229
+ return;
230
+ const cameraPosition = camera.position;
231
+ const cameraDirection = camera.getWorldDirection(new Vector3());
232
+ const width = element.clientWidth;
233
+ const height = element.clientHeight;
234
+ // 非全景模式下隐藏所有标尺
235
+ if (currentMode !== Five.Mode.Panorama) {
236
+ for (const _name in __rule) {
237
+ for (const { $element } of __rule[_name].rules) {
238
+ $element.style.display = 'none';
239
+ }
240
+ }
241
+ return;
242
+ }
243
+ // 隐藏非当前点位的标尺
244
+ for (const _name in __rule) {
245
+ for (const { $element } of __rule[_name].rules) {
246
+ $element.style.display = _name === name ? 'block' : 'none';
247
+ }
248
+ }
249
+ const verticalLines = [];
250
+ // 可以看到的角度最小的拐点
251
+ const [visibleOrigin] = __rule[name].origins
252
+ .slice()
253
+ .filter((point) => point.observers.indexOf(panoIndex) >= 0)
254
+ .sort((pointA, pointB) => {
255
+ const angleA = pointA.clone().setY(0).sub(cameraPosition).normalize().angleTo(cameraDirection.clone().setY(0));
256
+ const angleB = pointB.clone().setY(0).sub(cameraPosition).normalize().angleTo(cameraDirection.clone().setY(0));
257
+ return angleA - angleB;
258
+ });
259
+ const shownNotVerticalRules = [];
260
+ for (const { rule, vertical, $element } of __rule[name].rules) {
261
+ const [start, end] = rule;
262
+ const $line = $element.querySelector('.PanoRulerPlugin-rule-line');
263
+ if (!$line)
264
+ return;
265
+ if (!visibleOrigin) {
266
+ $element.style.display = 'none';
267
+ continue;
268
+ }
269
+ if (start !== visibleOrigin && end !== visibleOrigin) {
270
+ $element.style.display = 'none';
271
+ continue;
272
+ }
273
+ if (start.distanceTo(end) < 0.5) {
274
+ $element.style.display = 'none';
275
+ continue;
276
+ }
277
+ if (start.observers.indexOf(panoIndex) === -1 || end.observers.indexOf(panoIndex) === -1) {
278
+ $element.style.display = 'none';
279
+ continue;
280
+ }
281
+ const startAngle = start.clone().sub(cameraPosition).normalize().angleTo(cameraDirection);
282
+ if (startAngle > Math.PI / 2) {
283
+ $element.style.display = 'none';
284
+ continue;
285
+ }
286
+ const endAngle = end.clone().sub(cameraPosition).normalize().angleTo(cameraDirection);
287
+ if (endAngle > Math.PI / 2) {
288
+ $element.style.display = 'none';
289
+ continue;
290
+ }
291
+ const ruleLength = start.distanceTo(end);
292
+ const midPoint = end.clone().sub(end.clone().sub(start).divide(new Vector3(2, 2, 2)));
293
+ const disFromCameraToMid = midPoint.distanceTo(cameraPosition);
294
+ if (disFromCameraToMid / ruleLength > 8) {
295
+ $element.style.display = 'none';
296
+ continue;
297
+ }
298
+ if (!vertical)
299
+ shownNotVerticalRules.push(rule);
300
+ if (vertical)
301
+ verticalLines.push({ $element, startAngle });
302
+ const mouseStart = start.clone().project(camera);
303
+ const startLeft = ((mouseStart.x + 1) / 2) * width;
304
+ const startTop = ((-mouseStart.y + 1) / 2) * height;
305
+ const mouseEnd = end.clone().project(camera);
306
+ const endLeft = ((mouseEnd.x + 1) / 2) * width;
307
+ const endTop = ((-mouseEnd.y + 1) / 2) * height;
308
+ const distance = Math.sqrt(Math.pow(endLeft - startLeft, 2) + Math.pow(endTop - startTop, 2));
309
+ let visibleLength = distance;
310
+ let labelOffset = 50;
311
+ const intr = getRuleScreenIntr({ x: ~~startLeft, y: ~~startTop }, {
312
+ x: ~~endLeft,
313
+ y: ~~endTop
314
+ }, width, height);
315
+ if (intr && intr.length === 1) {
316
+ if (visibleOrigin === start) {
317
+ visibleLength = Math.sqrt(Math.pow(intr[0].x - startLeft, 2) + Math.pow(intr[0].y - startTop, 2));
318
+ labelOffset = (visibleLength / distance) * 50;
319
+ }
320
+ else if (visibleOrigin === end) {
321
+ visibleLength = Math.sqrt(Math.pow(intr[0].x - endLeft, 2) + Math.pow(intr[0].y - endTop, 2));
322
+ labelOffset = 100 - (visibleLength / distance) * 50;
323
+ }
324
+ }
325
+ if (intr && intr.length === 2) {
326
+ const middlePoint = {
327
+ x: (intr[0].x + intr[1].x) / 2,
328
+ y: (intr[0].y + intr[1].y) / 2,
329
+ };
330
+ const distanceFromStart = Math.sqrt(Math.pow(middlePoint.x - startLeft, 2) + Math.pow(middlePoint.y - startTop, 2));
331
+ labelOffset = (distanceFromStart / distance) * 100;
332
+ }
333
+ const rad = Math.PI / 2 - Math.atan2(endLeft - startLeft, startTop - endTop);
334
+ const deg = (rad / Math.PI) * 180;
335
+ const $label = $line.querySelector('.PanoRulerPlugin-rule-label');
336
+ // 线的长度小于标签时或者标签与线两端点重合时隐藏,
337
+ const labelWidth = $label.children[0].clientWidth;
338
+ if (labelWidth >= distance ||
339
+ labelWidth / 2 >= (labelOffset / 100) * distance ||
340
+ labelWidth / 2 >= (1 - labelOffset / 100) * distance) {
341
+ $line.style.display = 'none';
342
+ }
343
+ else {
344
+ $line.style.display = 'block';
345
+ $line.style.width = distance + 'px';
346
+ $line.style.left = startLeft + 'px';
347
+ $line.style.top = startTop + 'px';
348
+ $line.style.transform = `rotate(${-deg}deg)`;
349
+ $label.style.left = `${labelOffset}%`;
350
+ }
351
+ }
352
+ };
353
+ const nextFrameFreshRule = () => nextFrame(freshRule);
354
+ const throttleFreshRule = throttle(freshRule, 80);
355
+ const enable = () => {
356
+ if (!state.loaded)
357
+ return false;
358
+ if (state.enable)
359
+ return true;
360
+ $rule.setAttribute('class', 'PanoRulerPlugin' + (state.options.className ? ' ' + state.options.className : ''));
361
+ five.getElement()?.parentElement?.append($rule);
362
+ freshRule();
363
+ five.on('panoArrived', freshRule);
364
+ five.on('modeChange', freshRule);
365
+ five.on('cameraDirectionUpdate', nextFrameFreshRule);
366
+ five.on('movingToPano', nextFrameFreshRule);
367
+ five.on('mouseWheel', throttleFreshRule);
368
+ five.on('pinchGesture', throttleFreshRule);
369
+ state.enable = true;
370
+ return true;
371
+ };
372
+ const disable = () => {
373
+ if (!state.enable)
374
+ return true;
375
+ five.off('panoArrived', freshRule);
376
+ five.off('modeChange', freshRule);
377
+ five.off('cameraDirectionUpdate', nextFrameFreshRule);
378
+ five.off('movingToPano', nextFrameFreshRule);
379
+ five.off('mouseWheel', throttleFreshRule);
380
+ five.off('pinchGesture', throttleFreshRule);
381
+ if ($rule) {
382
+ $rule.remove();
383
+ }
384
+ state.enable = false;
385
+ return true;
386
+ };
387
+ return {
388
+ enable,
389
+ disable,
390
+ load,
391
+ state,
392
+ };
393
+ };
394
+ export const panoRulerPluginServerParams = {
395
+ name: 'PanoRulerPlugin',
396
+ version: 0,
397
+ };
398
+ export default PanoRulerPlugin;
@@ -0,0 +1,2 @@
1
+ declare const PanoRulerStyle = "<style type=\"text/css\">\n.PanoRulerPlugin-rule-line {\n position: absolute;\n transform-origin: left center;\n width: 0;\n height: 0.0625rem;\n}\n\n.PanoRulerPlugin-rule-line::after {\n content: '';\n position: absolute;\n left: -0.125rem;\n top: -0.1rem;\n width: 0.25rem;\n height: 0.25rem;\n border-radius: 50%;\n background: #FFFFFF;\n z-index: 1;\n animation: viewport-rule-point 0.1s 1s;\n animation-fill-mode: both;\n}\n\n.PanoRulerPlugin-rule-line::before {\n content: '';\n position: absolute;\n right: -0.125rem;\n top: -0.1rem;\n width: 0.25rem;\n height: 0.25rem;\n border-radius: 50%;\n background: #FFFFFF;\n animation: viewport-rule-point 0.1s 1.5s;\n animation-fill-mode: both;\n}\n\n.PanoRulerPlugin-rule-line em {\n background: #fff;\n display: block;\n height: 100%;\n animation: viewport-rule-line 0.5s ease 1s;\n animation-fill-mode: both;\n box-shadow: 0 0 0.25rem rgb(0 0 0 / 40%);\n}\n\n.PanoRulerPlugin-rule-label {\n position: absolute;\n width: 0;\n height: 0;\n top: 0.0625rem;\n}\n\n.PanoRulerPlugin-rule-label-name {\n position: absolute;\n padding: 0.1875rem 0.375rem;\n background: rgba(195,195,195,0.30);\n backdrop-filter: blur(0.25rem);\n -webkit-backdrop-filter: blur(0.25rem);\n border-radius: 6.25rem;\n border: 0.0625rem solid rgba(255,255,255,0.6);\n white-space: nowrap;\n overflow: hidden;\n color: #FFFFFF;\n font-weight: 500;\n font-size: 0.75rem;\n line-height: 1;\n -webkit-animation: viewport-rule-label 0.25s ease 1s;\n animation: viewport-rule-label 0.25s ease 1s;\n animation-fill-mode: both;\n box-shadow: inset 0 0 0.625rem 0 rgba(255,255,255,0.30);\n}\n\n@keyframes viewport-rule-line {\n 0% { width: 0% }\n 100% { width: 100% }\n}\n\n@keyframes viewport-rule-label {\n 0% { opacity: 0; transform: scaleX(0); }\n 100% { opacity: 1; transform: translate(-50%, -50%) scaleX(1); }\n}\n\n@keyframes viewport-rule-point {\n 0% { transform: scaleX(0); }\n 100% { transform: scaleX(1); }\n}\n</style>\n";
2
+ export default PanoRulerStyle;