@aibee/owlly 1.0.25 → 1.0.29

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 (359) hide show
  1. package/lib/external/lines/line-geometry.d.ts +9 -0
  2. package/lib/external/lines/line-geometry.js +51 -0
  3. package/lib/external/lines/line-material.d.ts +10 -0
  4. package/lib/external/lines/line-material.js +376 -0
  5. package/lib/external/lines/line-segments-2.d.ts +7 -0
  6. package/lib/external/lines/line-segments-2.js +143 -0
  7. package/lib/external/lines/line-segments-geometry.d.ts +15 -0
  8. package/lib/external/lines/line-segments-geometry.js +140 -0
  9. package/lib/external/loaders/gltf-loader.d.ts +77 -0
  10. package/lib/external/loaders/gltf-loader.js +2318 -0
  11. package/lib/external/orbit-controls.d.ts +44 -0
  12. package/lib/external/orbit-controls.js +745 -0
  13. package/lib/external/renderers/css-2d-renderer.d.ts +16 -0
  14. package/lib/external/renderers/css-2d-renderer.js +121 -0
  15. package/lib/external/renderers/css-3d-renderer.d.ts +18 -0
  16. package/lib/external/renderers/css-3d-renderer.js +138 -0
  17. package/lib/external/transform-controls.d.ts +106 -0
  18. package/lib/external/transform-controls.js +1112 -0
  19. package/lib/owlly/controller/aerial-element-controller.d.ts +65 -0
  20. package/lib/owlly/controller/aerial-element-controller.js +235 -0
  21. package/lib/owlly/controller/basic-controller.d.ts +324 -0
  22. package/lib/owlly/controller/basic-controller.js +1238 -0
  23. package/lib/owlly/controller/camera-controller.d.ts +37 -0
  24. package/lib/owlly/controller/camera-controller.js +137 -0
  25. package/lib/owlly/controller/controller.d.ts +61 -0
  26. package/lib/owlly/controller/controller.js +23 -0
  27. package/lib/owlly/controller/index.d.ts +2 -0
  28. package/lib/owlly/controller/index.js +13 -0
  29. package/lib/owlly/controller/mouse-indicator-controller.d.ts +34 -0
  30. package/lib/owlly/controller/mouse-indicator-controller.js +118 -0
  31. package/lib/owlly/controller/orbit-control.d.ts +147 -0
  32. package/lib/owlly/controller/orbit-control.js +264 -0
  33. package/lib/owlly/controller/panorama-adjust-controller.d.ts +45 -0
  34. package/lib/owlly/controller/panorama-adjust-controller.js +157 -0
  35. package/lib/owlly/controller/panorama-controller.d.ts +441 -0
  36. package/lib/owlly/controller/panorama-controller.js +1943 -0
  37. package/lib/owlly/controller/panorama-transform-controller.d.ts +66 -0
  38. package/lib/owlly/controller/panorama-transform-controller.js +136 -0
  39. package/lib/owlly/controller/plane-controller.d.ts +43 -0
  40. package/lib/owlly/controller/plane-controller.js +173 -0
  41. package/lib/owlly/controller/texture-controller.d.ts +181 -0
  42. package/lib/owlly/controller/texture-controller.js +875 -0
  43. package/lib/owlly/controller/tile-panorama-controller.d.ts +308 -0
  44. package/lib/owlly/controller/tile-panorama-controller.js +1353 -0
  45. package/lib/owlly/controller/transform-controller.d.ts +106 -0
  46. package/lib/owlly/controller/transform-controller.js +545 -0
  47. package/lib/owlly/element/bottom-nav-element.d.ts +65 -0
  48. package/lib/owlly/element/bottom-nav-element.js +257 -0
  49. package/lib/owlly/element/camera.d.ts +82 -0
  50. package/lib/owlly/element/camera.js +283 -0
  51. package/lib/owlly/element/dom-2d-element.d.ts +35 -0
  52. package/lib/owlly/element/dom-2d-element.js +48 -0
  53. package/lib/owlly/element/dom-3d-element.d.ts +27 -0
  54. package/lib/owlly/element/dom-3d-element.js +33 -0
  55. package/lib/owlly/element/dom-label-2d.d.ts +116 -0
  56. package/lib/owlly/element/dom-label-2d.js +382 -0
  57. package/lib/owlly/element/element.d.ts +53 -0
  58. package/lib/owlly/element/element.js +75 -0
  59. package/lib/owlly/element/floor-model.d.ts +83 -0
  60. package/lib/owlly/element/floor-model.js +227 -0
  61. package/lib/owlly/element/gif-kit/Gif.d.ts +96 -0
  62. package/lib/owlly/element/gif-kit/Gif.js +432 -0
  63. package/lib/owlly/element/gif-kit/GifColor.d.ts +21 -0
  64. package/lib/owlly/element/gif-kit/GifColor.js +37 -0
  65. package/lib/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.d.ts +20 -0
  66. package/lib/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.js +50 -0
  67. package/lib/owlly/element/gif-kit/GifFrame.d.ts +31 -0
  68. package/lib/owlly/element/gif-kit/GifFrame.js +96 -0
  69. package/lib/owlly/element/gif-kit/GifImage.d.ts +23 -0
  70. package/lib/owlly/element/gif-kit/GifImage.js +7 -0
  71. package/lib/owlly/element/gif-kit/GifParser.d.ts +17 -0
  72. package/lib/owlly/element/gif-kit/GifParser.js +196 -0
  73. package/lib/owlly/element/gif-kit/GifPresenter.d.ts +20 -0
  74. package/lib/owlly/element/gif-kit/GifPresenter.js +43 -0
  75. package/lib/owlly/element/gif-kit/GifVersion.d.ts +10 -0
  76. package/lib/owlly/element/gif-kit/GifVersion.js +12 -0
  77. package/lib/owlly/element/gltf-mesh-element.d.ts +31 -0
  78. package/lib/owlly/element/gltf-mesh-element.js +136 -0
  79. package/lib/owlly/element/index.d.ts +20 -0
  80. package/lib/owlly/element/index.js +24 -0
  81. package/lib/owlly/element/map-kit/shape.d.ts +131 -0
  82. package/lib/owlly/element/map-kit/shape.js +189 -0
  83. package/lib/owlly/element/mesh-element.d.ts +22 -0
  84. package/lib/owlly/element/mesh-element.js +63 -0
  85. package/lib/owlly/element/mesh-line-2d.d.ts +82 -0
  86. package/lib/owlly/element/mesh-line-2d.js +887 -0
  87. package/lib/owlly/element/meshline-o.d.ts +64 -0
  88. package/lib/owlly/element/meshline-o.js +678 -0
  89. package/lib/owlly/element/panorama-group.d.ts +241 -0
  90. package/lib/owlly/element/panorama-group.js +966 -0
  91. package/lib/owlly/element/panorama.d.ts +132 -0
  92. package/lib/owlly/element/panorama.js +812 -0
  93. package/lib/owlly/element/path-group.d.ts +69 -0
  94. package/lib/owlly/element/path-group.js +171 -0
  95. package/lib/owlly/element/path.d.ts +99 -0
  96. package/lib/owlly/element/path.js +531 -0
  97. package/lib/owlly/element/placeable-2d.d.ts +158 -0
  98. package/lib/owlly/element/placeable-2d.js +470 -0
  99. package/lib/owlly/element/polygon-mesh.d.ts +107 -0
  100. package/lib/owlly/element/polygon-mesh.js +307 -0
  101. package/lib/owlly/element/ring-element.d.ts +79 -0
  102. package/lib/owlly/element/ring-element.js +383 -0
  103. package/lib/owlly/element/sphere-mesh.d.ts +28 -0
  104. package/lib/owlly/element/sphere-mesh.js +69 -0
  105. package/lib/owlly/element/svg-floor-model.d.ts +22 -0
  106. package/lib/owlly/element/svg-floor-model.js +184 -0
  107. package/lib/owlly/element/svg-floors.d.ts +27 -0
  108. package/lib/owlly/element/svg-floors.js +109 -0
  109. package/lib/owlly/element/tile-panorama-group.d.ts +335 -0
  110. package/lib/owlly/element/tile-panorama-group.js +1006 -0
  111. package/lib/owlly/element/tile-panorama.d.ts +161 -0
  112. package/lib/owlly/element/tile-panorama.js +509 -0
  113. package/lib/owlly/element/tile-plane.d.ts +105 -0
  114. package/lib/owlly/element/tile-plane.js +360 -0
  115. package/lib/owlly/element/video-element.d.ts +33 -0
  116. package/lib/owlly/element/video-element.js +159 -0
  117. package/lib/owlly/geometries/ExtrudeGeometry2.d.ts +15 -0
  118. package/lib/owlly/geometries/ExtrudeGeometry2.js +210 -0
  119. package/lib/owlly/index.d.ts +13 -0
  120. package/lib/owlly/index.js +16 -0
  121. package/lib/owlly/overlay/canvas-overlay.d.ts +96 -0
  122. package/lib/owlly/overlay/canvas-overlay.js +510 -0
  123. package/lib/owlly/overlay/css-2d-overlay.d.ts +14 -0
  124. package/lib/owlly/overlay/css-2d-overlay.js +35 -0
  125. package/lib/owlly/overlay/css-3d-overlay.d.ts +16 -0
  126. package/lib/owlly/overlay/css-3d-overlay.js +36 -0
  127. package/lib/owlly/overlay/index.d.ts +6 -0
  128. package/lib/owlly/overlay/index.js +11 -0
  129. package/lib/owlly/overlay/label-overlay.d.ts +62 -0
  130. package/lib/owlly/overlay/label-overlay.js +328 -0
  131. package/lib/owlly/overlay/overlay.d.ts +14 -0
  132. package/lib/owlly/overlay/overlay.js +4 -0
  133. package/lib/owlly/overlay/path-overlay.d.ts +39 -0
  134. package/lib/owlly/overlay/path-overlay.js +124 -0
  135. package/lib/owlly/overlay/path-overlay2.d.ts +35 -0
  136. package/lib/owlly/overlay/path-overlay2.js +118 -0
  137. package/lib/owlly/overlay/poi-overlay-3d.d.ts +278 -0
  138. package/lib/owlly/overlay/poi-overlay-3d.js +1432 -0
  139. package/lib/owlly/overlay/poi-overlay.d.ts +277 -0
  140. package/lib/owlly/overlay/poi-overlay.js +1411 -0
  141. package/lib/owlly/owlly-2d/index.d.ts +28 -0
  142. package/lib/owlly/owlly-2d/index.js +92 -0
  143. package/lib/owlly/screen/index.d.ts +1 -0
  144. package/lib/owlly/screen/index.js +1 -0
  145. package/lib/owlly/screen/screen.d.ts +73 -0
  146. package/lib/owlly/screen/screen.js +236 -0
  147. package/lib/owlly/stage/externals.d.ts +19 -0
  148. package/lib/owlly/stage/externals.js +24 -0
  149. package/lib/owlly/stage/index.d.ts +4 -0
  150. package/lib/owlly/stage/index.js +6 -0
  151. package/lib/owlly/stage/owlly.d.ts +38 -0
  152. package/lib/owlly/stage/owlly.js +168 -0
  153. package/lib/owlly/stage/stage.d.ts +108 -0
  154. package/lib/owlly/stage/stage.js +234 -0
  155. package/lib/owlly/utils/alignment-utils.d.ts +20 -0
  156. package/lib/owlly/utils/alignment-utils.js +63 -0
  157. package/lib/owlly/utils/basic-calc.d.ts +18 -0
  158. package/lib/owlly/utils/basic-calc.js +129 -0
  159. package/lib/owlly/utils/basic-tools.d.ts +71 -0
  160. package/lib/owlly/utils/basic-tools.js +235 -0
  161. package/lib/owlly/utils/bvh-tree.d.ts +105 -0
  162. package/lib/owlly/utils/bvh-tree.js +539 -0
  163. package/lib/owlly/utils/camera.d.ts +37 -0
  164. package/lib/owlly/utils/camera.js +50 -0
  165. package/lib/owlly/utils/cube-texture-cache.d.ts +25 -0
  166. package/lib/owlly/utils/cube-texture-cache.js +143 -0
  167. package/lib/owlly/utils/device-utils.d.ts +18 -0
  168. package/lib/owlly/utils/device-utils.js +41 -0
  169. package/lib/owlly/utils/environment-utils.d.ts +37 -0
  170. package/lib/owlly/utils/environment-utils.js +73 -0
  171. package/lib/owlly/utils/event-hub.d.ts +50 -0
  172. package/lib/owlly/utils/event-hub.js +106 -0
  173. package/lib/owlly/utils/events.d.ts +219 -0
  174. package/lib/owlly/utils/events.js +219 -0
  175. package/lib/owlly/utils/geometry-utils.d.ts +119 -0
  176. package/lib/owlly/utils/geometry-utils.js +622 -0
  177. package/lib/owlly/utils/helper.d.ts +6 -0
  178. package/lib/owlly/utils/helper.js +24 -0
  179. package/lib/owlly/utils/index.d.ts +14 -0
  180. package/lib/owlly/utils/index.js +17 -0
  181. package/lib/owlly/utils/lru-cache.d.ts +26 -0
  182. package/lib/owlly/utils/lru-cache.js +109 -0
  183. package/lib/owlly/utils/map-utils.d.ts +7 -0
  184. package/lib/owlly/utils/map-utils.js +52 -0
  185. package/lib/owlly/utils/number-utils.d.ts +8 -0
  186. package/lib/owlly/utils/number-utils.js +72 -0
  187. package/lib/owlly/utils/panorama-model-util.d.ts +46 -0
  188. package/lib/owlly/utils/panorama-model-util.js +245 -0
  189. package/lib/owlly/utils/path-utils.d.ts +80 -0
  190. package/lib/owlly/utils/path-utils.js +728 -0
  191. package/lib/owlly/utils/svgutils.d.ts +138 -0
  192. package/lib/owlly/utils/svgutils.js +561 -0
  193. package/lib/owlly/utils/texture-cache.d.ts +29 -0
  194. package/lib/owlly/utils/texture-cache.js +115 -0
  195. package/lib/owlly/utils/tile-util.d.ts +187 -0
  196. package/lib/owlly/utils/tile-util.js +456 -0
  197. package/lib/owlly/utils/time-profiler.d.ts +21 -0
  198. package/lib/owlly/utils/time-profiler.js +48 -0
  199. package/lib/owlly/view/camera-view.d.ts +35 -0
  200. package/lib/owlly/view/camera-view.js +101 -0
  201. package/lib/owlly/view/index.d.ts +3 -0
  202. package/lib/owlly/view/index.js +5 -0
  203. package/lib/owlly/view/orthographic-view.d.ts +40 -0
  204. package/lib/owlly/view/orthographic-view.js +94 -0
  205. package/lib/owlly/view/perspective-view.d.ts +40 -0
  206. package/lib/owlly/view/perspective-view.js +95 -0
  207. package/lib/owlly/view/svg-map-view.d.ts +46 -0
  208. package/lib/owlly/view/svg-map-view.js +144 -0
  209. package/lib/owlly/view/view.d.ts +146 -0
  210. package/lib/owlly/view/view.js +317 -0
  211. package/lib/prod/owlly.esm.js +93462 -0
  212. package/lib/prod/owlly.esm.js.map +1 -0
  213. package/lib/prod/owlly.esm.min.js +54 -0
  214. package/lib/prod/owlly.iife.js +93560 -0
  215. package/lib/prod/owlly.iife.js.map +1 -0
  216. package/lib/prod/owlly.iife.min.js +69 -0
  217. package/lib/prod/owlly.miniapp.js +73845 -0
  218. package/lib/prod/owlly.miniapp.js.map +1 -0
  219. package/lib/prod/owlly.miniapp.min.js +63 -0
  220. package/lib/prod/src/external/lines/line-geometry.d.ts +9 -0
  221. package/lib/prod/src/external/lines/line-material.d.ts +10 -0
  222. package/lib/prod/src/external/lines/line-segments-2.d.ts +7 -0
  223. package/lib/prod/src/external/lines/line-segments-geometry.d.ts +15 -0
  224. package/lib/prod/src/external/loaders/gltf-loader.d.ts +77 -0
  225. package/lib/prod/src/external/orbit-controls.d.ts +44 -0
  226. package/lib/prod/src/external/renderers/css-2d-renderer.d.ts +16 -0
  227. package/lib/prod/src/external/renderers/css-3d-renderer.d.ts +18 -0
  228. package/lib/prod/src/external/transform-controls.d.ts +106 -0
  229. package/lib/prod/src/external/util/buffer-geometry-utils.d.ts +45 -0
  230. package/lib/prod/src/owlly/controller/aerial-element-controller.d.ts +65 -0
  231. package/lib/prod/src/owlly/controller/basic-controller.d.ts +324 -0
  232. package/lib/prod/src/owlly/controller/camera-controller.d.ts +37 -0
  233. package/lib/prod/src/owlly/controller/controller.d.ts +61 -0
  234. package/lib/prod/src/owlly/controller/index.d.ts +2 -0
  235. package/lib/prod/src/owlly/controller/mouse-indicator-controller.d.ts +34 -0
  236. package/lib/prod/src/owlly/controller/orbit-control.d.ts +147 -0
  237. package/lib/prod/src/owlly/controller/panorama-adjust-controller.d.ts +45 -0
  238. package/lib/prod/src/owlly/controller/panorama-controller.d.ts +441 -0
  239. package/lib/prod/src/owlly/controller/panorama-transform-controller.d.ts +66 -0
  240. package/lib/prod/src/owlly/controller/plane-controller.d.ts +43 -0
  241. package/lib/prod/src/owlly/controller/texture-controller.d.ts +183 -0
  242. package/lib/prod/src/owlly/controller/tile-panorama-controller.d.ts +308 -0
  243. package/lib/prod/src/owlly/controller/transform-controller.d.ts +106 -0
  244. package/lib/prod/src/owlly/element/bottom-nav-element.d.ts +65 -0
  245. package/lib/prod/src/owlly/element/camera.d.ts +82 -0
  246. package/lib/prod/src/owlly/element/dom-2d-element.d.ts +35 -0
  247. package/lib/prod/src/owlly/element/dom-3d-element.d.ts +27 -0
  248. package/lib/prod/src/owlly/element/dom-label-2d.d.ts +116 -0
  249. package/lib/prod/src/owlly/element/element.d.ts +53 -0
  250. package/lib/prod/src/owlly/element/floor-model.d.ts +83 -0
  251. package/lib/prod/src/owlly/element/gif-kit/Gif.d.ts +96 -0
  252. package/lib/prod/src/owlly/element/gif-kit/GifColor.d.ts +21 -0
  253. package/lib/prod/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.d.ts +20 -0
  254. package/lib/prod/src/owlly/element/gif-kit/GifFrame.d.ts +31 -0
  255. package/lib/prod/src/owlly/element/gif-kit/GifImage.d.ts +23 -0
  256. package/lib/prod/src/owlly/element/gif-kit/GifParser.d.ts +17 -0
  257. package/lib/prod/src/owlly/element/gif-kit/GifPresenter.d.ts +20 -0
  258. package/lib/prod/src/owlly/element/gif-kit/GifVersion.d.ts +10 -0
  259. package/lib/prod/src/owlly/element/gltf-mesh-element.d.ts +31 -0
  260. package/lib/prod/src/owlly/element/index.d.ts +6 -0
  261. package/lib/prod/src/owlly/element/map-kit/area.d.ts +24 -0
  262. package/lib/prod/src/owlly/element/map-kit/block-set.d.ts +39 -0
  263. package/lib/prod/src/owlly/element/map-kit/block.d.ts +77 -0
  264. package/lib/prod/src/owlly/element/map-kit/index.d.ts +3 -0
  265. package/lib/prod/src/owlly/element/map-kit/shape.d.ts +131 -0
  266. package/lib/prod/src/owlly/element/mesh-element.d.ts +22 -0
  267. package/lib/prod/src/owlly/element/mesh-line-2d.d.ts +82 -0
  268. package/lib/prod/src/owlly/element/meshline-o.d.ts +64 -0
  269. package/lib/prod/src/owlly/element/panorama-group.d.ts +241 -0
  270. package/lib/prod/src/owlly/element/panorama.d.ts +132 -0
  271. package/lib/prod/src/owlly/element/path-group.d.ts +69 -0
  272. package/lib/prod/src/owlly/element/path.d.ts +99 -0
  273. package/lib/prod/src/owlly/element/placeable-2d.d.ts +158 -0
  274. package/lib/prod/src/owlly/element/polygon-mesh.d.ts +107 -0
  275. package/lib/prod/src/owlly/element/ring-element.d.ts +79 -0
  276. package/lib/prod/src/owlly/element/sphere-mesh.d.ts +28 -0
  277. package/lib/prod/src/owlly/element/svg-floor-model.d.ts +22 -0
  278. package/lib/prod/src/owlly/element/svg-floors.d.ts +27 -0
  279. package/lib/prod/src/owlly/element/tile-panorama-group.d.ts +335 -0
  280. package/lib/prod/src/owlly/element/tile-panorama.d.ts +162 -0
  281. package/lib/prod/src/owlly/element/tile-plane.d.ts +114 -0
  282. package/lib/prod/src/owlly/element/video-element.d.ts +33 -0
  283. package/lib/prod/src/owlly/geometries/ExtrudeGeometry2.d.ts +15 -0
  284. package/lib/prod/src/owlly/index.d.ts +13 -0
  285. package/lib/prod/src/owlly/overlay/canvas-overlay.d.ts +96 -0
  286. package/lib/prod/src/owlly/overlay/css-2d-overlay.d.ts +14 -0
  287. package/lib/prod/src/owlly/overlay/css-3d-overlay.d.ts +16 -0
  288. package/lib/prod/src/owlly/overlay/index.d.ts +5 -0
  289. package/lib/prod/src/owlly/overlay/label-overlay.d.ts +62 -0
  290. package/lib/prod/src/owlly/overlay/overlay.d.ts +14 -0
  291. package/lib/prod/src/owlly/overlay/path-overlay.d.ts +39 -0
  292. package/lib/prod/src/owlly/overlay/path-overlay2.d.ts +35 -0
  293. package/lib/prod/src/owlly/overlay/poi-overlay-3d.d.ts +278 -0
  294. package/lib/prod/src/owlly/overlay/poi-overlay.d.ts +277 -0
  295. package/lib/prod/src/owlly/owlly-2d/index.d.ts +28 -0
  296. package/lib/prod/src/owlly/screen/index.d.ts +1 -0
  297. package/lib/prod/src/owlly/screen/screen.d.ts +73 -0
  298. package/lib/prod/src/owlly/stage/__test__/stage.spec.d.ts +1 -0
  299. package/lib/prod/src/owlly/stage/externals.d.ts +19 -0
  300. package/lib/prod/src/owlly/stage/index.d.ts +3 -0
  301. package/lib/prod/src/owlly/stage/owlly.d.ts +38 -0
  302. package/lib/prod/src/owlly/stage/stage.d.ts +108 -0
  303. package/lib/prod/src/owlly/utils/alignment-utils.d.ts +20 -0
  304. package/lib/prod/src/owlly/utils/basic-calc.d.ts +18 -0
  305. package/lib/prod/src/owlly/utils/basic-tools.d.ts +71 -0
  306. package/lib/prod/src/owlly/utils/bvh-tree.d.ts +105 -0
  307. package/lib/prod/src/owlly/utils/camera.d.ts +37 -0
  308. package/lib/prod/src/owlly/utils/cube-texture-cache.d.ts +25 -0
  309. package/lib/prod/src/owlly/utils/device-utils.d.ts +18 -0
  310. package/lib/prod/src/owlly/utils/environment-utils.d.ts +37 -0
  311. package/lib/prod/src/owlly/utils/event-hub.d.ts +50 -0
  312. package/lib/prod/src/owlly/utils/events.d.ts +219 -0
  313. package/lib/prod/src/owlly/utils/geometry-utils.d.ts +119 -0
  314. package/lib/prod/src/owlly/utils/helper.d.ts +6 -0
  315. package/lib/prod/src/owlly/utils/index.d.ts +13 -0
  316. package/lib/prod/src/owlly/utils/lru-cache.d.ts +26 -0
  317. package/lib/prod/src/owlly/utils/map-utils.d.ts +7 -0
  318. package/lib/prod/src/owlly/utils/number-utils.d.ts +8 -0
  319. package/lib/prod/src/owlly/utils/panorama-model-util.d.ts +46 -0
  320. package/lib/prod/src/owlly/utils/path-utils.d.ts +80 -0
  321. package/lib/prod/src/owlly/utils/svgutils.d.ts +138 -0
  322. package/lib/prod/src/owlly/utils/texture-cache.d.ts +29 -0
  323. package/lib/prod/src/owlly/utils/tile-util.d.ts +187 -0
  324. package/lib/prod/src/owlly/utils/time-profiler.d.ts +21 -0
  325. package/lib/prod/src/owlly/view/__test__/perspective-view.spec.d.ts +0 -0
  326. package/lib/prod/src/owlly/view/camera-view.d.ts +35 -0
  327. package/lib/prod/src/owlly/view/index.d.ts +3 -0
  328. package/lib/prod/src/owlly/view/orthographic-view.d.ts +40 -0
  329. package/lib/prod/src/owlly/view/perspective-view.d.ts +40 -0
  330. package/lib/prod/src/owlly/view/svg-map-view.d.ts +46 -0
  331. package/lib/prod/src/owlly/view/view.d.ts +146 -0
  332. package/lib/src/owlly/controller/texture-controller.d.ts +3 -1
  333. package/lib/src/owlly/controller/texture-controller.js +16 -1
  334. package/lib/src/owlly/controller/texture-controller.js.map +1 -1
  335. package/lib/src/owlly/controller/tile-panorama-controller.js +4 -0
  336. package/lib/src/owlly/controller/tile-panorama-controller.js.map +1 -1
  337. package/lib/src/owlly/element/tile-panorama.d.ts +1 -0
  338. package/lib/src/owlly/element/tile-panorama.js +16 -3
  339. package/lib/src/owlly/element/tile-panorama.js.map +1 -1
  340. package/lib/src/owlly/element/tile-plane.d.ts +9 -0
  341. package/lib/src/owlly/element/tile-plane.js +27 -0
  342. package/lib/src/owlly/element/tile-plane.js.map +1 -1
  343. package/lib/src/owlly/overlay/poi-overlay-3d.js.map +1 -1
  344. package/lib/src/owlly/overlay/poi-overlay.js.map +1 -1
  345. package/lib/src/owlly/stage/owlly.js +7 -1
  346. package/lib/src/owlly/stage/owlly.js.map +1 -1
  347. package/lib/src/owlly/stage/stage.js +2 -0
  348. package/lib/src/owlly/stage/stage.js.map +1 -1
  349. package/lib/src/web/main.rpeng.mes.plane.js.map +1 -1
  350. package/package.json +16 -7
  351. package/src/owlly/controller/texture-controller.ts +18 -1
  352. package/src/owlly/controller/tile-panorama-controller.ts +3 -1
  353. package/src/owlly/element/tile-panorama.ts +14 -0
  354. package/src/owlly/element/tile-plane.ts +26 -0
  355. package/src/owlly/overlay/poi-overlay-3d.ts +0 -4
  356. package/src/owlly/overlay/poi-overlay.ts +0 -4
  357. package/src/owlly/stage/owlly.ts +6 -1
  358. package/src/owlly/stage/stage.ts +2 -0
  359. package/src/web/main.rpeng.mes.plane.ts +0 -6
@@ -0,0 +1,887 @@
1
+ /* eslint-disable max-len */
2
+ import Color from 'color';
3
+ import * as turf from '@turf/turf';
4
+ import { Externals, NS_THREE } from '../stage/externals';
5
+ import { Element, ElementFrameContext } from './element';
6
+ import { Env, EnvironmentUtils } from '../utils/environment-utils';
7
+ import { BasicCalcTool } from '../utils';
8
+ // import { BasicCalcTool, TurningInfo, Helper } from '../utils';
9
+ class MeshLine2D extends Element {
10
+ constructor(points, options = { width: 0.3 }) {
11
+ super();
12
+ this.initialized = false;
13
+ this.ready = true;
14
+ this.points = [];
15
+ this.distances = [];
16
+ this.currentMoveIndex = 0;
17
+ this.options = Object.assign({ textureMode: 'repeat' }, options);
18
+ if (!options.animateSpeed) {
19
+ this.options.animateSpeed = 0.01;
20
+ }
21
+ if (options.textureMode === 'tail') {
22
+ this.createTailArrow();
23
+ }
24
+ this.renderPixelLine = options.renderPixelLine || false;
25
+ this.init(points);
26
+ }
27
+ calcPoints(points, scale = 0.30) {
28
+ const { THREE } = Externals.getInstance();
29
+ const len = points.length;
30
+ if (len < 2)
31
+ return [];
32
+ const res = [];
33
+ const linePoints = points.map((v) => [v[0], v[1]]);
34
+ for (let i = 0; i < len; i++) {
35
+ const cur = new THREE.Vector2(...linePoints[i]);
36
+ const prev = i === 0 ? null : new THREE.Vector2(...linePoints[i - 1]);
37
+ const next = i === len - 1 ? null : new THREE.Vector2(...linePoints[i + 1]);
38
+ const formP2C = prev ? new THREE.Vector2().subVectors(cur, prev).normalize() : null;
39
+ const formC2N = next ? new THREE.Vector2().subVectors(next, cur).normalize() : null;
40
+ const fromP2N = formC2N && formP2C ? new THREE.Vector2().addVectors(formC2N, formP2C).normalize() : null;
41
+ // eslint-disable-next-line no-nested-ternary
42
+ const normal = i === 0 ? new THREE.Vector2(-formC2N.y, formC2N.x)
43
+ : (i === len - 1 ? new THREE.Vector2(-formP2C.y, formP2C.x)
44
+ : new THREE.Vector2(-fromP2N.y, fromP2N.x));
45
+ const n1 = new THREE.Vector2().addVectors(cur, normal.clone().multiplyScalar(-scale));
46
+ const n2 = new THREE.Vector2().addVectors(cur, normal.clone().multiplyScalar(scale));
47
+ res.push([n1.x, n1.y, 0], [n2.x, n2.y, 0], [normal.x, normal.y, 0]);
48
+ }
49
+ return res;
50
+ }
51
+ createTailArrow() {
52
+ const { THREE } = Externals.getInstance();
53
+ const textureUrl = this.options.textureUrl;
54
+ new NS_THREE.TextureLoader().load(textureUrl, (texture) => {
55
+ const fWidth = this.options.width || 0.3;
56
+ const renderPathWidth = this.options.strokeWidth ? fWidth + this.options.strokeWidth * 2 : this.options.width;
57
+ const width = this.options.textureSize ? this.options.textureSize[0] : renderPathWidth;
58
+ const height = this.options.textureSize ? this.options.textureSize[1] : width;
59
+ const planeG = new THREE.PlaneGeometry(width, height);
60
+ const color = this.options.color ? this.options.color : 0xffffff;
61
+ const material = new THREE.MeshBasicMaterial({
62
+ color: color,
63
+ map: texture,
64
+ transparent: true,
65
+ opacity: 1.0,
66
+ depthTest: false,
67
+ });
68
+ material.needsUpdate = true;
69
+ const plane = new THREE.Mesh(planeG, material);
70
+ plane.renderOrder = 2;
71
+ this.tailArrow = plane;
72
+ this.tailArrow.visible = false;
73
+ this.add(this.tailArrow);
74
+ });
75
+ }
76
+ // 返回 {point, normal: 法向量, scale: 沿着法向量增加/减少得到端点的 scale} 的格式、
77
+ orgPoints(points, nScale = 0.3) {
78
+ const normalScale = nScale > 1 ? 0.01 : nScale;
79
+ const { THREE } = Externals.getInstance();
80
+ // this.testLines = [];
81
+ // 得到路径上的拐点信息
82
+ const pLength = points.length;
83
+ const orgedPoints = this.calcPoints(points, normalScale); // 传入的一个点拓展为3个信息: 法向量 起 终
84
+ const vec3orgedPoint = orgedPoints.map((pt) => new THREE.Vector3(...pt));
85
+ const vec3Chunk = BasicCalcTool.chunk(vec3orgedPoint, 3);
86
+ const res = points.map((v, i) => ({
87
+ point: v,
88
+ normal: [vec3Chunk[i][2].x, vec3Chunk[i][2].y],
89
+ scale: 1.0,
90
+ }));
91
+ const v2Pts = points.map((v) => [v[0], v[1]]);
92
+ const turningPoints = BasicCalcTool.calcTurning(v2Pts);
93
+ if (!turningPoints.length)
94
+ return res;
95
+ const turningAreas = turningPoints.map((v) => {
96
+ const { startIndex, endIndex, angle } = v;
97
+ // angle < 180 右转 angle > 180 左转
98
+ const pickIndex = angle > 180 ? 1 : 0;
99
+ const line10 = startIndex > 0 ? vec3Chunk[startIndex - 1][pickIndex] : vec3Chunk[startIndex - 1][pickIndex];
100
+ const line11 = vec3Chunk[startIndex - 1][pickIndex];
101
+ const line1NormalizeVec = new THREE.Vector3().subVectors(line11, line10).normalize().multiplyScalar(normalScale);
102
+ const line12 = new THREE.Vector3().addVectors(line11, line1NormalizeVec);
103
+ const line13 = new THREE.Vector3().subVectors(line10, line1NormalizeVec);
104
+ const line20 = vec3Chunk[endIndex + 1][pickIndex];
105
+ const line21 = pLength > endIndex + 2 ? vec3Chunk[endIndex + 2][pickIndex] : vec3Chunk[endIndex][pickIndex];
106
+ const line2NormalizeVec = new THREE.Vector3().subVectors(line21, line20).normalize().multiplyScalar(normalScale);
107
+ const line22 = new THREE.Vector3().addVectors(line21, line2NormalizeVec);
108
+ const line23 = new THREE.Vector3().subVectors(line20, line2NormalizeVec);
109
+ const line1 = turf.lineString([[line13.x, line13.y], [line10.x, line10.y], [line11.x, line11.y], [line12.x, line12.y]]);
110
+ const line2 = turf.lineString([[line23.x, line23.y], [line20.x, line20.y], [line21.x, line21.y], [line22.x, line22.y]]);
111
+ const intersects = turf.lineIntersect(line1, line2);
112
+ if (!intersects.features[0]) {
113
+ // console.log('有拐角 但无相交');
114
+ // const lin01 = Helper.createLine([[line13.x, line13.y, 0], [line10.x, line10.y, 0], [line11.x, line11.y, 0], [line12.x, line12.y, 0]], '#ff0000', 3000);
115
+ // const lin02 = Helper.createLine([[p3[0], p3[1], 0], [p4[0], p4[1], 0]], '#00ff00', 3000);
116
+ // const lin3 = Helper.createLine([[p0[0], p0[1], 0], [p4[0], p4[1], 0], [p2[0], p2[1], 0], [p3[0], p3[1], 0]], '#0000ff', 3000);
117
+ // this.testLines.push(lin01);
118
+ // this.testLines.push(lin2);
119
+ // this.testLines.push(lin3);
120
+ return null;
121
+ }
122
+ const intersectCrd = intersects.features[0].geometry.coordinates;
123
+ // console.log('有交点', line1, line2, intersects, intersectCrd);
124
+ // 根据 endCrd 和 startCrd 取 向量作延长线s
125
+ const vecFromStE = new THREE.Vector2(points[endIndex][0] - points[startIndex - 1][0], points[endIndex][1] - points[startIndex - 1][1]).normalize().multiplyScalar(normalScale);
126
+ const p0 = [intersectCrd[0] - vecFromStE.x, intersectCrd[1] - vecFromStE.y];
127
+ const p2 = [intersectCrd[0] + vecFromStE.x, intersectCrd[1] + vecFromStE.y];
128
+ const normal = angle > 180 ? vecFromStE.normalize().multiplyScalar(-1) : vecFromStE.normalize().multiplyScalar(1);
129
+ // [p0, p2] 的连线中点就是intersectCrd
130
+ const p3 = [intersectCrd[0] - normal.y * normalScale, intersectCrd[1] + normal.x * normalScale];
131
+ const p4 = [intersectCrd[0] + normal.y * normalScale, intersectCrd[1] - normal.x * normalScale];
132
+ const poly = turf.featureCollection([
133
+ turf.point(p0),
134
+ turf.point(p4),
135
+ turf.point(p2),
136
+ turf.point(p3),
137
+ turf.point(p0),
138
+ ]);
139
+ // const lin1 = Helper.createLine([[p0[0], p0[1], 0], [p2[0], p2[1], 0]], '#ff0000', 3000);
140
+ // const lin2 = Helper.createLine([[p3[0], p3[1], 0], [p4[0], p4[1], 0]], '#00ff00', 3000);
141
+ // const lin3 = Helper.createLine([[p0[0], p0[1], 0], [p4[0], p4[1], 0], [p2[0], p2[1], 0], [p3[0], p3[1], 0]], '#0000ff', 3000);
142
+ // this.testLines.push(lin1);
143
+ // this.testLines.push(lin2);
144
+ // this.testLines.push(lin3);
145
+ const hull = turf.convex(poly);
146
+ return {
147
+ hull,
148
+ intersectCrd,
149
+ startIndex,
150
+ endIndex,
151
+ };
152
+ });
153
+ let inCurrentArea = 0;
154
+ let l = 0;
155
+ let ifInTuring = false;
156
+ while (l < pLength && turningAreas[inCurrentArea]) {
157
+ const [ls, le] = vec3Chunk[l];
158
+ const curHull = turningAreas[inCurrentArea].hull;
159
+ const curIntersectCrd = turningAreas[inCurrentArea].intersectCrd;
160
+ const nextIntersectCrd = turningAreas[inCurrentArea + 1] ? turningAreas[inCurrentArea + 1].intersectCrd : null;
161
+ const nextHull = turningAreas[inCurrentArea + 1] ? turningAreas[inCurrentArea + 1].hull : null;
162
+ const ifBoolinLs = turf.booleanWithin(turf.point([ls.x, ls.y]), curHull);
163
+ const ifBoolinLe = turf.booleanWithin(turf.point([le.x, le.y]), curHull);
164
+ const ifBoolin = ifBoolinLs || ifBoolinLe;
165
+ if (ifBoolin && ifBoolinLs) {
166
+ // 右转
167
+ ifInTuring = true;
168
+ const startCoord = new THREE.Vector3(...curIntersectCrd, 0);
169
+ let end = le;
170
+ // 判断 end 是否在 下一个 area
171
+ if (nextIntersectCrd && nextHull && turf.booleanWithin(turf.point([le.x, le.y]), nextHull)) {
172
+ end = new THREE.Vector3(nextIntersectCrd[0], nextIntersectCrd[1], nextIntersectCrd[2]);
173
+ }
174
+ // 缩放比例是: V<ls.x - le.x, ls.y - le.y> 的length
175
+ const oL = new THREE.Vector3().subVectors(le, ls).length();
176
+ const newL = new THREE.Vector3().subVectors(end, new THREE.Vector3(startCoord.x, startCoord.y, 0)).length();
177
+ const nv = new THREE.Vector3().subVectors(end, new THREE.Vector3(startCoord.x, startCoord.y, 0)).normalize();
178
+ res.splice(l, 1, {
179
+ point: [(startCoord.x + end.x) / 2, (startCoord.y + end.y) / 2, 0],
180
+ scale: newL / oL,
181
+ normal: [nv.x, nv.y],
182
+ });
183
+ }
184
+ else if (ifBoolin && ifBoolinLe) {
185
+ // 左转
186
+ // console.log('ifBoolin && ifBoolinLe', ifBoolinLs, ifBoolinLe);
187
+ ifInTuring = true;
188
+ const endCoord = new THREE.Vector3(...curIntersectCrd, 0);
189
+ let start = ls;
190
+ if (nextIntersectCrd && nextHull && turf.booleanWithin(turf.point([ls.x, ls.y]), nextHull)) {
191
+ start = new THREE.Vector3(nextIntersectCrd[0], nextIntersectCrd[1], nextIntersectCrd[2]);
192
+ }
193
+ const oL = new THREE.Vector3().subVectors(le, ls).length();
194
+ const newL = new THREE.Vector3().subVectors(start, new THREE.Vector3(endCoord.x, endCoord.y, 0)).length();
195
+ const nv = new THREE.Vector3().subVectors(new THREE.Vector3(endCoord.x, endCoord.y, 0), start).normalize();
196
+ res.splice(l, 1, {
197
+ point: [(endCoord.x + start.x) / 2, (endCoord.y + start.y) / 2, 0],
198
+ scale: newL / oL,
199
+ normal: [nv.x, nv.y],
200
+ });
201
+ }
202
+ else if (ifInTuring) {
203
+ l--; // 当前点需要再判断一次
204
+ ifInTuring = false;
205
+ inCurrentArea++;
206
+ }
207
+ l++;
208
+ }
209
+ return res;
210
+ }
211
+ init(pts) {
212
+ const { THREE } = Externals.getInstance();
213
+ const points = pts;
214
+ const sWidth = this.options.strokeWidth || 0;
215
+ const fWidth = this.options.width ? this.options.width : 0.3;
216
+ const normalScale = sWidth + fWidth / 2;
217
+ const res = this.orgPoints(points, normalScale);
218
+ this.orgedPoints = res;
219
+ this.points = [];
220
+ const firstDis = 0.1;
221
+ if (points.length > 1) {
222
+ const [first, second, secondLast, last] = [
223
+ points[0],
224
+ points[1],
225
+ points[points.length - 2],
226
+ points[points.length - 1],
227
+ ];
228
+ const firstVec = new THREE.Vector3(...first);
229
+ const secondVec = new THREE.Vector3(...second);
230
+ const dirFirst = new THREE.Vector3().subVectors(firstVec, secondVec)
231
+ .normalize().multiplyScalar(firstVec.distanceTo(secondVec) * 0.05);
232
+ const head = firstVec.clone().add(dirFirst);
233
+ const secondLastVec = new THREE.Vector3(...secondLast);
234
+ const lastVec = new THREE.Vector3(...last);
235
+ const dirLast = new THREE.Vector3().subVectors(secondLastVec, lastVec)
236
+ .normalize().multiplyScalar(firstVec.distanceTo(secondVec) * 0.05);
237
+ const tail = lastVec.clone().sub(dirLast); // 增加端点[尾巴]
238
+ const originH = this.orgedPoints[0];
239
+ const originT = this.orgedPoints[this.orgedPoints.length - 1];
240
+ this.orgedPoints.unshift({
241
+ point: [head.x, head.y, head.z],
242
+ normal: originH.normal,
243
+ scale: 1.0,
244
+ });
245
+ this.orgedPoints.push({
246
+ point: [tail.x, tail.y, tail.z],
247
+ normal: originT.normal,
248
+ scale: 1.0,
249
+ });
250
+ this.points.push([head.x, head.y, head.z]);
251
+ this.points.push(...points);
252
+ this.points.push([tail.x, tail.y, tail.z]);
253
+ }
254
+ this.distances = [-firstDis];
255
+ for (let i = 1, l = this.points.length, prevVec = new THREE.Vector3(...this.points[0]), currentVec = new THREE.Vector3(); i < l; i += 1) {
256
+ currentVec.set(...this.points[i]);
257
+ this.distances.push(i === 1 ? 0 : this.distances[i - 1] + currentVec.distanceTo(prevVec));
258
+ prevVec.copy(currentVec);
259
+ }
260
+ this.bufferGeometry = new THREE.BufferGeometry();
261
+ const components = 9;
262
+ let [lx, ly, lz] = this.points[0];
263
+ let d = 0;
264
+ const vertices = [];
265
+ for (let i = 0; i < this.orgedPoints.length; i += 1) {
266
+ const [x, y, z] = this.orgedPoints[i].point;
267
+ const [normalX, normalY] = this.orgedPoints[i].normal;
268
+ const scale = this.orgedPoints[i].scale;
269
+ let nx = x - lx;
270
+ let ny = y - ly;
271
+ let nz = z - lz;
272
+ const l = Math.sqrt(nx * nx + ny * ny + nz * nz);
273
+ nx /= l;
274
+ ny /= l;
275
+ nz /= l;
276
+ d += l * 3;
277
+ if (this.options.strokeWidth) {
278
+ vertices.push(x, y, z, -2, d, this.distances[i], normalX, normalY, scale);
279
+ vertices.push(x, y, z, -1, d, this.distances[i], normalX, normalY, scale);
280
+ vertices.push(x, y, z, 1, d, this.distances[i], normalX, normalY, scale);
281
+ vertices.push(x, y, z, 2, d, this.distances[i], normalX, normalY, scale);
282
+ }
283
+ else {
284
+ vertices.push(x, y, z, -1, d, this.distances[i], normalX, normalY, scale);
285
+ vertices.push(x, y, z, 1, d, this.distances[i], normalX, normalY, scale);
286
+ }
287
+ lx = x;
288
+ ly = y;
289
+ lz = z;
290
+ }
291
+ const vertexBuffer = new Float32Array(vertices);
292
+ const pointToCrdsNum = this.options.strokeWidth ? 4 : 2; // 路线上的一个顶点会生成几个点
293
+ const verticesBuffer = new THREE.InterleavedBuffer(vertexBuffer, components); // 交叉存储, 表明多个类型的attributes(例如,顶点位置、法向量、UV 和颜色值)被存储到一个队列中。
294
+ // InterleavedBuffer( array : TypedArray 一个基于共享缓存的类型化队列, stride : Integer 每个顶点占用类型化队列的多少个元素 )
295
+ const lastAttrib = new THREE.InterleavedBufferAttribute(verticesBuffer, 4, 0, false);
296
+ this.bufferGeometry.setAttribute('last', lastAttrib);
297
+ const currentAttrib = new THREE.InterleavedBufferAttribute(verticesBuffer, 4, components * pointToCrdsNum, false);
298
+ this.bufferGeometry.setAttribute('current', currentAttrib);
299
+ const nextAttrib = new THREE.InterleavedBufferAttribute(verticesBuffer, 4, components * pointToCrdsNum * 2, false);
300
+ this.bufferGeometry.setAttribute('next', nextAttrib);
301
+ const texoffAttrib = new THREE.InterleavedBufferAttribute(verticesBuffer, 1, components * pointToCrdsNum + 4, false);
302
+ this.bufferGeometry.setAttribute('texoff', texoffAttrib);
303
+ const progressAttrib = new THREE.InterleavedBufferAttribute(verticesBuffer, 1, components * pointToCrdsNum + 5, false);
304
+ this.bufferGeometry.setAttribute('progress', progressAttrib);
305
+ const normalAttrib = new THREE.InterleavedBufferAttribute(verticesBuffer, 2, components * pointToCrdsNum + 6, false);
306
+ this.bufferGeometry.setAttribute('normalVec', normalAttrib);
307
+ const scaleAttrib = new THREE.InterleavedBufferAttribute(verticesBuffer, 1, components * pointToCrdsNum + 8, false);
308
+ this.bufferGeometry.setAttribute('normalScale', scaleAttrib);
309
+ const positionVertBuffer = new THREE.InterleavedBuffer(vertexBuffer.slice(components * pointToCrdsNum, vertices.length - components * pointToCrdsNum), components);
310
+ const positionAttrib = new THREE.InterleavedBufferAttribute(positionVertBuffer, 4, 0);
311
+ this.bufferGeometry.setAttribute('position', positionAttrib);
312
+ this.bufferGeometry.computeBoundingBox();
313
+ this.bufferGeometry.computeBoundingSphere();
314
+ this.bufferGeometry.computeVertexNormals();
315
+ let indices = [];
316
+ if (this.options.strokeWidth) {
317
+ const arr = [
318
+ 0, 1, 4,
319
+ 1, 4, 5,
320
+ 1, 2, 5,
321
+ 2, 5, 6,
322
+ 2, 3, 6,
323
+ 3, 6, 7,
324
+ ];
325
+ for (let i = 4; i < vertices.length / components - 8; i += 4) {
326
+ const curLineNum = i / 4 - 1;
327
+ const curInds = arr.map((v) => v + curLineNum * 4);
328
+ indices = [...indices, ...curInds];
329
+ }
330
+ }
331
+ else {
332
+ for (let i = 2; i < vertices.length / components - 4; i += 2) {
333
+ indices.push(i - 2, i - 1, i);
334
+ indices.push(i, i - 1, i + 1);
335
+ }
336
+ }
337
+ this.bufferGeometry.setIndex(indices);
338
+ // const resolution = new THREE.Vector2(window.innerWidth, window.innerHeight);
339
+ const resolution = new THREE.Vector2(1, 1);
340
+ const fillColor = this.options.color ? new Color(this.options.color) : new Color('rgb(255, 255, 255)').alpha(0.0);
341
+ const strokeColor = this.options.strokeColor ? new Color(this.options.strokeColor) : new Color('rgb(255, 255, 255)').alpha(0.0);
342
+ this.uniforms = {
343
+ stripTexture: {
344
+ type: 't',
345
+ value: null,
346
+ },
347
+ fillColor: {
348
+ type: 'v4',
349
+ value: new THREE.Vector4(fillColor.red() / 255, fillColor.green() / 255, fillColor.blue() / 255, fillColor.alpha()),
350
+ },
351
+ strokeColor: {
352
+ type: 'v4',
353
+ // eslint-disable-next-line max-len
354
+ value: new THREE.Vector4(strokeColor.red() / 255, strokeColor.green() / 255, strokeColor.blue() / 255, strokeColor.alpha()),
355
+ },
356
+ width: {
357
+ type: 'f',
358
+ value: this.options.width || 0.3,
359
+ },
360
+ strokeWidth: {
361
+ type: 'f',
362
+ value: this.options.strokeWidth || 0.1,
363
+ },
364
+ renderPixelLine: {
365
+ type: 'f',
366
+ value: this.renderPixelLine ? 1.0 : 0.0,
367
+ },
368
+ fillOpacity: {
369
+ type: 'f',
370
+ value: this.options.fillOpacity || 0.8,
371
+ },
372
+ resolution: {
373
+ type: 'v2',
374
+ value: resolution,
375
+ },
376
+ currentDistance: { type: 'f', value: this.options.current || 0 },
377
+ texOffset: { type: 'f', value: 0 },
378
+ fullLength: { type: 'f', value: this.distances[this.distances.length - 1] },
379
+ viewDistance: { type: 'f', value: this.options.viewDistance === null || typeof (this.options.viewDistance) === 'undefined' ? 15 : this.options.viewDistance },
380
+ gradientDistance: { type: 'f', value: this.options.gradientDistance || 4 },
381
+ gradientEnabled: { value: this.options.gradientEnabled || false },
382
+ };
383
+ this.material = new THREE.ShaderMaterial({
384
+ fragmentShader: MeshLine2D.FragmentShader,
385
+ vertexShader: MeshLine2D.VertexShader,
386
+ uniforms: this.uniforms,
387
+ depthTest: false,
388
+ side: THREE.DoubleSide,
389
+ wireframe: false,
390
+ transparent: true,
391
+ opacity: 1.0,
392
+ blending: THREE.NormalBlending,
393
+ blendEquation: THREE.AddEquation,
394
+ blendSrc: THREE.SrcAlphaFactor,
395
+ blendDst: THREE.OneMinusSrcAlphaFactor,
396
+ });
397
+ if (this.options.textureUrl && this.options.textureMode === 'repeat') {
398
+ new THREE.TextureLoader().load(this.options.textureUrl, (texture) => {
399
+ texture.wrapS = THREE.RepeatWrapping;
400
+ texture.wrapT = THREE.RepeatWrapping;
401
+ texture.generateMipmaps = true;
402
+ this.uniforms.stripTexture.value = texture;
403
+ this.needsUpdate = true;
404
+ });
405
+ }
406
+ else if (this.options.textureUrl && this.options.textureMode === 'tail') {
407
+ const lastDistance = this.distances[this.distances.length - 1];
408
+ this.updateTailArrowPos(lastDistance);
409
+ }
410
+ this.mesh = new THREE.Mesh(this.bufferGeometry, this.material);
411
+ this.mesh.renderOrder = 1000;
412
+ this.add(this.mesh);
413
+ }
414
+ setContainer(container) {
415
+ if (EnvironmentUtils.GetEnv() === Env.Miniapp)
416
+ return;
417
+ this.resize(container.clientWidth, container.clientHeight);
418
+ }
419
+ resize(containerWidth, containerHeight) {
420
+ if (this.viewWidth === containerWidth && this.viewHeight === containerHeight)
421
+ return;
422
+ const resolution = new NS_THREE.Vector2(containerWidth, containerHeight);
423
+ this.uniforms.resolution.value = resolution;
424
+ this.needsUpdate = true;
425
+ this.viewWidth = containerWidth;
426
+ this.viewHeight = containerHeight;
427
+ }
428
+ getBestView(currentPoint, fromDistance, toDistance) {
429
+ let nearPoint = this.getPointOnDistance(fromDistance + 0.2).point;
430
+ let curPoint = currentPoint;
431
+ const { THREE } = Externals.getInstance();
432
+ // 过滤0.5米转角
433
+ let f = fromDistance + 1;
434
+ for (; f < (fromDistance + 10); f += 1) {
435
+ const scan = this.getPointOnDistance(f);
436
+ const dir1 = new THREE.Vector3().subVectors(scan.point, nearPoint);
437
+ const dir2 = new THREE.Vector3().subVectors(nearPoint, curPoint);
438
+ const rad = THREE.MathUtils.radToDeg(dir1.angleTo(dir2));
439
+ if (rad > 30) {
440
+ nearPoint = this.getPointOnDistance(f + 0.5).point;
441
+ curPoint = scan.point;
442
+ break;
443
+ }
444
+ }
445
+ let maxDistance = 0;
446
+ for (let i = f; i < toDistance; i++) {
447
+ const scan = this.getPointOnDistance(i);
448
+ const dir1 = new THREE.Vector3().subVectors(scan.point, nearPoint);
449
+ const dir2 = new THREE.Vector3().subVectors(nearPoint, curPoint);
450
+ const rad = THREE.MathUtils.radToDeg(dir1.angleTo(dir2));
451
+ if (rad > 32 && (i - fromDistance) > 10) {
452
+ maxDistance = i;
453
+ break;
454
+ }
455
+ if (rad > 20 && (i - fromDistance) > 15) {
456
+ maxDistance = i;
457
+ break;
458
+ }
459
+ }
460
+ return (maxDistance - fromDistance);
461
+ }
462
+ getPointOnDistance(distance) {
463
+ const { THREE } = Externals.getInstance();
464
+ let left = 0;
465
+ const { distances, points } = this;
466
+ let right = points.length - 1;
467
+ let p = -1;
468
+ while (left < right - 1) {
469
+ p = Math.floor((left + right) / 2);
470
+ if (distances[p] > distance)
471
+ right = p;
472
+ else if (distances[p] < distance)
473
+ left = p;
474
+ else {
475
+ left = p;
476
+ break;
477
+ }
478
+ }
479
+ p = left;
480
+ if (p > -1) {
481
+ const from = new THREE.Vector3(...this.points[p]);
482
+ if (p === this.points.length - 1 || distance <= 0) {
483
+ return {
484
+ point: from,
485
+ index: p + 1,
486
+ };
487
+ }
488
+ const fromDist = this.distances[p];
489
+ const to = new THREE.Vector3(...this.points[p + 1]);
490
+ const toDist = this.distances[p + 1];
491
+ const distDiff = toDist - fromDist;
492
+ const vecDiff = to.clone().sub(from);
493
+ return {
494
+ point: from.clone().add(vecDiff.multiplyScalar((distance - fromDist) / distDiff)),
495
+ index: p + 1,
496
+ };
497
+ }
498
+ throw new Error(`Cannot find point on distance ${distance}`);
499
+ }
500
+ getNearestPoint(position, startDistance = 0) {
501
+ const { THREE } = Externals.getInstance();
502
+ const pathLength = this.distances[this.distances.length - 1];
503
+ let precision = 8;
504
+ let best = new THREE.Vector3();
505
+ let bestLength = 0;
506
+ let bestDistance = Infinity;
507
+ let bestIndex = -1;
508
+ for (let scan, scanLength = startDistance, scanDistance; scanLength <= pathLength; scanLength += precision) {
509
+ scan = this.getPointOnDistance(scanLength);
510
+ scanDistance = position.distanceTo(scan.point);
511
+ if (scanDistance < bestDistance) {
512
+ best = scan.point;
513
+ bestLength = scanLength;
514
+ bestDistance = scanDistance;
515
+ bestIndex = scan.index;
516
+ }
517
+ }
518
+ let before;
519
+ let after;
520
+ let beforeLength;
521
+ let afterLength;
522
+ let beforeDistance;
523
+ let afterDistance;
524
+ precision /= 2;
525
+ while (precision > 0.1) {
526
+ beforeLength = bestLength - precision;
527
+ beforeDistance = position.distanceTo(before = this.getPointOnDistance(beforeLength).point);
528
+ afterLength = bestLength + precision;
529
+ afterDistance = position.distanceTo(after = this.getPointOnDistance(afterLength).point);
530
+ if (beforeLength >= 0 && beforeDistance < bestDistance) {
531
+ best = before;
532
+ bestLength = beforeLength;
533
+ bestDistance = beforeDistance;
534
+ }
535
+ else if (afterLength <= pathLength && afterDistance < bestDistance) {
536
+ best = after;
537
+ bestLength = afterLength;
538
+ bestDistance = afterDistance;
539
+ }
540
+ else {
541
+ precision /= 2;
542
+ }
543
+ }
544
+ return {
545
+ point: best,
546
+ distance: bestLength,
547
+ index: bestIndex,
548
+ };
549
+ }
550
+ getPathWithScope(startDistance, endDistance) {
551
+ if (startDistance >= endDistance) {
552
+ const endPoint = this.getPointOnDistance(endDistance).point;
553
+ return [
554
+ [endPoint.x, endPoint.y, 0],
555
+ ];
556
+ }
557
+ let i = this.distances.length - 1;
558
+ let j = 0;
559
+ while (i >= 0 && this.distances[i] > startDistance)
560
+ i -= 1;
561
+ while (j < this.distances.length && this.distances[j] < endDistance)
562
+ j += 1;
563
+ const startPoint = this.getPointOnDistance(startDistance).point;
564
+ const endPoint = this.getPointOnDistance(endDistance).point;
565
+ return [
566
+ [startPoint.x, startPoint.y, 0],
567
+ ...this.points.slice(i + 1, j - i - 1),
568
+ [endPoint.x, endPoint.y, 0],
569
+ ];
570
+ }
571
+ getPathBaseStartPoint(distance) {
572
+ const startPoint = this.getPointOnDistance(distance).point;
573
+ for (let i = 0; i < this.distances.length; i += 1) {
574
+ if (this.distances[i] > distance) {
575
+ return [
576
+ [startPoint.x, startPoint.y, 0],
577
+ ...this.points.slice(i),
578
+ ];
579
+ }
580
+ }
581
+ return this.points.slice(this.distances.length - 1);
582
+ }
583
+ update() {
584
+ const frameContext = new ElementFrameContext(this);
585
+ if (!this.initialized && this.ready) {
586
+ this.initialized = true;
587
+ frameContext.needUpdate = true;
588
+ }
589
+ else if (this.needsUpdate) {
590
+ frameContext.needUpdate = true;
591
+ this.needsUpdate = false;
592
+ }
593
+ if (this.options.animateEnabled) {
594
+ this.uniforms.texOffset.value -= this.options.animateSpeed;
595
+ // this.uniforms.texOffset.value -= this.options.animateSpeed!;
596
+ frameContext.needUpdate = true;
597
+ }
598
+ if (this.initialized && !this.parent) {
599
+ frameContext.shouldPlaceElement = true;
600
+ }
601
+ return frameContext;
602
+ }
603
+ dispose() {
604
+ if (this.parentOverlay) {
605
+ this.parentOverlay.removePath(this);
606
+ }
607
+ super.dispose();
608
+ this.remove(this.mesh);
609
+ this.material.dispose();
610
+ this.bufferGeometry.dispose();
611
+ }
612
+ setCurrent(current) {
613
+ this.uniforms.currentDistance.value = current;
614
+ this.needsUpdate = true;
615
+ }
616
+ getLength() {
617
+ return this.distances[this.distances.length - 1];
618
+ }
619
+ setCurrentIndex(currentIndex) {
620
+ this.currentMoveIndex = currentIndex;
621
+ const current = this.distances[currentIndex + 1];
622
+ this.uniforms.currentDistance.value = current;
623
+ this.needsUpdate = true;
624
+ }
625
+ getCurrent() {
626
+ return this.uniforms.currentDistance.value;
627
+ }
628
+ getCurrentIndex() {
629
+ return this.currentMoveIndex;
630
+ // return this.uniforms.currentDistance.value as number;
631
+ }
632
+ setViewDistance(value) {
633
+ this.uniforms.viewDistance.value = value;
634
+ const distance = value + this.uniforms.currentDistance.value;
635
+ if (this.options.textureUrl && this.options.textureMode === 'tail') {
636
+ if (!this.tailArrow) {
637
+ setTimeout(() => {
638
+ this.setViewDistance(value);
639
+ }, 1000);
640
+ return;
641
+ }
642
+ this.updateTailArrowPos(distance);
643
+ }
644
+ }
645
+ updateTailArrowPos(distance) {
646
+ if (!this.tailArrow) {
647
+ setTimeout(() => {
648
+ this.updateTailArrowPos(distance);
649
+ }, 1000);
650
+ return;
651
+ }
652
+ this.tailArrow.visible = true;
653
+ const { index } = this.getPointOnDistance(distance);
654
+ const orgedPoint = this.orgedPoints[index];
655
+ const x = orgedPoint.point[0];
656
+ const y = orgedPoint.point[1];
657
+ const z = orgedPoint.point[2];
658
+ const normal2 = [-orgedPoint.normal[1], orgedPoint.normal[0]];
659
+ const atan3 = Math.atan2(normal2[1], normal2[0]);
660
+ const rotationZ = atan3 + Math.PI / 2;
661
+ this.tailArrow.position.set(x, y, z);
662
+ this.tailArrow.rotation.z = rotationZ;
663
+ this.needsUpdate = true;
664
+ }
665
+ setWidth(width) {
666
+ if (this.uniforms.width.value !== width) {
667
+ this.uniforms.width.value = width;
668
+ this.needsUpdate = true;
669
+ }
670
+ }
671
+ setColor(color) {
672
+ if (color == null)
673
+ return;
674
+ const c = new Color(color);
675
+ const v = this.uniforms.fillColor.value;
676
+ const { THREE } = Externals.getInstance();
677
+ const cv = new THREE.Vector4(c.red(), c.green(), c.blue(), c.alpha());
678
+ if (cv.equals(v))
679
+ return;
680
+ this.uniforms.fillColor.value = cv;
681
+ this.needsUpdate = true;
682
+ }
683
+ getViewDistance() {
684
+ return this.uniforms.viewDistance.value;
685
+ }
686
+ setParentOverlay(parent) {
687
+ this.parentOverlay = parent;
688
+ }
689
+ }
690
+ MeshLine2D.VertexShader = `
691
+ attribute vec4 last, current, next;
692
+ attribute vec2 normalVec;
693
+ attribute float normalScale;
694
+ attribute float texoff;
695
+ attribute float progress;
696
+
697
+ varying vec2 texcoord;
698
+ varying float vProgress;
699
+ varying float isBorder;
700
+
701
+ uniform float width;
702
+ uniform float texOffset;
703
+ uniform float strokeWidth;
704
+ uniform float renderPixelLine;
705
+ uniform vec2 resolution;
706
+
707
+ float pi = 3.141592653589793;
708
+ float fwidth = width;
709
+ float swidth = strokeWidth;
710
+
711
+ vec4 transform(vec3 coord){
712
+ return projectionMatrix * modelViewMatrix * vec4(coord, 1.0);
713
+ }
714
+
715
+ vec2 project(vec4 device) {
716
+ vec3 device_normal = device.xyz / device.w;
717
+ vec2 clip_pos = (device_normal * 0.5 + 0.5).xy;
718
+ return clip_pos * resolution;
719
+ }
720
+
721
+ vec4 unproject(vec2 screen, float z, float w) {
722
+ vec2 clip_pos = screen / resolution;
723
+ vec2 device_normal = clip_pos * 2.0 - 1.0;
724
+ return vec4(device_normal * w, z, w);
725
+ }
726
+
727
+ // 计算系数: 0,0,0 到 0,1,0 对应的屏幕坐标距离 越大, coefficient越大
728
+ float calcCoefficient() {
729
+ vec3 p1 = vec3(0, 0, 0);
730
+ vec2 sp1 = project(transform(p1.xyz));
731
+ vec3 p2 = vec3(0, 1, 0);
732
+ vec2 sp2 = project(transform(p2.xyz));
733
+ // 计算屏幕坐标的距离
734
+ float dist = distance(sp1, sp2);
735
+ return dist * 10.0 / width;
736
+ }
737
+
738
+ void main(){
739
+ vec2 sLast; // screenLast
740
+ vec2 sNext; // screenNext
741
+ vec2 sCurrent; // screenCurrent
742
+ vec2 normal1; // normal1
743
+ vec2 normal2; // normal2
744
+ vec2 normal; // 当前normal
745
+ vec4 dCurrent; //
746
+
747
+ float coefficient = 10.0;
748
+ float off = 1.0;
749
+ if (current.w < 0.0 ) {
750
+ off = -1.0;
751
+ }
752
+ vec4 position = vec4(0, 0, 0, 0);
753
+ vec3 pos;
754
+
755
+ float offsetW = fwidth / 2.0 * normalScale;
756
+ isBorder = -1.0;
757
+ if (abs(current.w) > 1.0) {
758
+ offsetW = swidth + (fwidth / 2.0) * normalScale;
759
+ isBorder = 1.0;
760
+ }
761
+ if (renderPixelLine < 1.0) {
762
+ // 3d 中
763
+ vec2 dir = vec2(normalVec.x, normalVec.y)*off;
764
+ float factor = 0.6 / fwidth * 0.2;
765
+ pos = vec3(current.xy + dir * offsetW, 0.0);
766
+ texcoord = vec2(off*0.5+0.5, texoff * factor + texOffset);
767
+ vProgress = progress;
768
+ gl_Position = transform(pos);
769
+ } else {
770
+ // vec2 dir = vec2(normalVec.x, normalVec.y)*off;
771
+ // pos = vec3(current.xy + dir * offsetW, 0.0);
772
+ // texcoord = vec2(off*0.5+0.5, texoff*0.2 + texOffset);
773
+ // vProgress = progress;
774
+ // gl_Position = transform(pos);
775
+
776
+ coefficient = calcCoefficient();
777
+ sLast = project(transform(last.xyz)); // last的屏幕坐标
778
+ sNext = project(transform(next.xyz)); // next的屏幕坐标
779
+
780
+ dCurrent = transform(current.xyz);
781
+ sCurrent = project(dCurrent); // current的屏幕坐标
782
+
783
+ normal1 = normalize(sLast - sCurrent);
784
+ vec2 normal2 = normalize(sCurrent - sNext);
785
+ normal = normalize(normal1 + normal2);
786
+ texcoord = vec2(off*0.5+0.5, texoff* 0.03 * coefficient + texOffset);
787
+ vProgress = progress;
788
+
789
+ vec2 dir = vec2(-normal.y, normal.x) * off;
790
+ float cosAngle = abs(dot(dir, -normal1)); // cos 45 基本 为 0.79 得到的是弧度值
791
+ float x = 90.0 - acos(cosAngle) * 180.0 / pi; // 得到角度 90 - x 则为需要 20 / length = cos(x)
792
+ float divideBy = cos(x / 180.0 * pi);
793
+ if (abs(divideBy) < 0.6) {
794
+ float positiveNum = divideBy > 0.0 ? 1.0 : -1.0;
795
+ divideBy = 0.6 * positiveNum;
796
+ }
797
+ pos = vec3((sCurrent + offsetW / divideBy * dir).xy, 0.0);
798
+ position = unproject(pos.xy, 0.0, 1.0);
799
+ gl_Position = position;
800
+ }
801
+
802
+ // texcoord = vec2(off*0.5+0.5, texoff* 0.03 * coefficient + texOffset);
803
+ // vProgress = progress;
804
+
805
+ // vec2 dir = vec2(-normal.y, normal.x) * off;
806
+ // float cosAngle = abs(dot(dir, -normal1)); // cos 45 基本 为 0.79 得到的是弧度值
807
+ // float x = 90.0 - acos(cosAngle) * 180.0 / pi; // 得到角度 90 - x 则为需要 20 / length = cos(x)
808
+ // float divideBy = cos(x / 180.0 * pi);
809
+
810
+ // vec4 position = vec4(0, 0, 0, 0);
811
+ // vec3 pos;
812
+
813
+ // if (renderPixelLine < 1.0) {
814
+ // pos = current.xyz + vec3(dir * offsetW, 0.0);
815
+ // position = transform(pos);
816
+ // } else {
817
+ // // 计算 dir 和 normal1 的夹角 , 要 叠加的长度 是 offsetW * dir
818
+ // pos = vec3((sCurrent + offsetW / divideBy * dir).xy, 0.0);
819
+ // position = unproject(pos.xy, 0.0, 1.0);
820
+ // }
821
+
822
+ // gl_Position = position;
823
+ }
824
+ `;
825
+ MeshLine2D.FragmentShader = `
826
+ uniform sampler2D stripTexture;
827
+ uniform float currentDistance;
828
+ uniform float fullLength;
829
+ uniform float viewDistance;
830
+ uniform float gradientDistance;
831
+ uniform vec4 fillColor;
832
+ uniform vec4 strokeColor;
833
+ uniform bool gradientEnabled;
834
+ uniform float renderPixelLine;
835
+ uniform float fillOpacity;
836
+
837
+ varying vec2 texcoord;
838
+ varying float vProgress;
839
+ varying float isBorder;
840
+
841
+ float opacity = 1.0;
842
+
843
+ void main(){
844
+ vec4 texColor = texture2D(stripTexture, texcoord);
845
+
846
+ float alpha = fillOpacity;
847
+ float cur = currentDistance;
848
+ float grad = gradientDistance;
849
+ float view = viewDistance;
850
+
851
+ if (gradientEnabled) {
852
+ if (vProgress < cur) {
853
+ alpha = 0.0;
854
+ } else {
855
+ if (vProgress > cur + view) {
856
+ alpha = 0.0;
857
+ } else {
858
+ if (fullLength <= cur + view) {
859
+ view = fullLength - cur;
860
+ if (view < 2.0 * grad) {
861
+ grad = view * 0.5;
862
+ }
863
+ }
864
+
865
+ if (vProgress > cur + grad) {
866
+ alpha = fillOpacity;
867
+ if (vProgress > cur + view - grad) {
868
+ alpha = abs(cur + view - vProgress) / grad * fillOpacity;
869
+ }
870
+ } else {
871
+ alpha = abs(vProgress - cur) / grad * fillOpacity;
872
+ }
873
+ }
874
+ }
875
+ } else if (renderPixelLine == 1.0) {
876
+ if (vProgress < cur) {
877
+ alpha = 0.0;
878
+ }
879
+ }
880
+ if (isBorder > -0.99) {
881
+ gl_FragColor = vec4(strokeColor.rgb, opacity * alpha * strokeColor.a);
882
+ } else {
883
+ gl_FragColor = vec4((fillColor * (1.0 - texColor.a) + texColor * texColor.a).rgb, opacity * alpha * (fillColor.a * (1.0 - texColor.a) + texColor.a));
884
+ }
885
+ }
886
+ `;
887
+ export { MeshLine2D };