@aibee/owlly 1.0.25

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 (500) hide show
  1. package/README.external.md +75 -0
  2. package/README.md +28 -0
  3. package/lib/src/external/lines/line-geometry.d.ts +9 -0
  4. package/lib/src/external/lines/line-geometry.js +52 -0
  5. package/lib/src/external/lines/line-geometry.js.map +1 -0
  6. package/lib/src/external/lines/line-material.d.ts +10 -0
  7. package/lib/src/external/lines/line-material.js +377 -0
  8. package/lib/src/external/lines/line-material.js.map +1 -0
  9. package/lib/src/external/lines/line-segments-2.d.ts +7 -0
  10. package/lib/src/external/lines/line-segments-2.js +144 -0
  11. package/lib/src/external/lines/line-segments-2.js.map +1 -0
  12. package/lib/src/external/lines/line-segments-geometry.d.ts +15 -0
  13. package/lib/src/external/lines/line-segments-geometry.js +141 -0
  14. package/lib/src/external/lines/line-segments-geometry.js.map +1 -0
  15. package/lib/src/external/loaders/gltf-loader.d.ts +77 -0
  16. package/lib/src/external/loaders/gltf-loader.js +2319 -0
  17. package/lib/src/external/loaders/gltf-loader.js.map +1 -0
  18. package/lib/src/external/orbit-controls.d.ts +44 -0
  19. package/lib/src/external/orbit-controls.js +746 -0
  20. package/lib/src/external/orbit-controls.js.map +1 -0
  21. package/lib/src/external/renderers/css-2d-renderer.d.ts +16 -0
  22. package/lib/src/external/renderers/css-2d-renderer.js +122 -0
  23. package/lib/src/external/renderers/css-2d-renderer.js.map +1 -0
  24. package/lib/src/external/renderers/css-3d-renderer.d.ts +18 -0
  25. package/lib/src/external/renderers/css-3d-renderer.js +139 -0
  26. package/lib/src/external/renderers/css-3d-renderer.js.map +1 -0
  27. package/lib/src/external/transform-controls.d.ts +106 -0
  28. package/lib/src/external/transform-controls.js +1113 -0
  29. package/lib/src/external/transform-controls.js.map +1 -0
  30. package/lib/src/external/util/buffer-geometry-utils.d.ts +45 -0
  31. package/lib/src/external/util/buffer-geometry-utils.js +569 -0
  32. package/lib/src/external/util/buffer-geometry-utils.js.map +1 -0
  33. package/lib/src/owlly/controller/aerial-element-controller.d.ts +65 -0
  34. package/lib/src/owlly/controller/aerial-element-controller.js +236 -0
  35. package/lib/src/owlly/controller/aerial-element-controller.js.map +1 -0
  36. package/lib/src/owlly/controller/basic-controller.d.ts +324 -0
  37. package/lib/src/owlly/controller/basic-controller.js +1239 -0
  38. package/lib/src/owlly/controller/basic-controller.js.map +1 -0
  39. package/lib/src/owlly/controller/camera-controller.d.ts +37 -0
  40. package/lib/src/owlly/controller/camera-controller.js +138 -0
  41. package/lib/src/owlly/controller/camera-controller.js.map +1 -0
  42. package/lib/src/owlly/controller/controller.d.ts +61 -0
  43. package/lib/src/owlly/controller/controller.js +24 -0
  44. package/lib/src/owlly/controller/controller.js.map +1 -0
  45. package/lib/src/owlly/controller/index.d.ts +2 -0
  46. package/lib/src/owlly/controller/index.js +14 -0
  47. package/lib/src/owlly/controller/index.js.map +1 -0
  48. package/lib/src/owlly/controller/mouse-indicator-controller.d.ts +34 -0
  49. package/lib/src/owlly/controller/mouse-indicator-controller.js +119 -0
  50. package/lib/src/owlly/controller/mouse-indicator-controller.js.map +1 -0
  51. package/lib/src/owlly/controller/orbit-control.d.ts +147 -0
  52. package/lib/src/owlly/controller/orbit-control.js +265 -0
  53. package/lib/src/owlly/controller/orbit-control.js.map +1 -0
  54. package/lib/src/owlly/controller/panorama-adjust-controller.d.ts +45 -0
  55. package/lib/src/owlly/controller/panorama-adjust-controller.js +158 -0
  56. package/lib/src/owlly/controller/panorama-adjust-controller.js.map +1 -0
  57. package/lib/src/owlly/controller/panorama-controller.d.ts +441 -0
  58. package/lib/src/owlly/controller/panorama-controller.js +1944 -0
  59. package/lib/src/owlly/controller/panorama-controller.js.map +1 -0
  60. package/lib/src/owlly/controller/panorama-transform-controller.d.ts +66 -0
  61. package/lib/src/owlly/controller/panorama-transform-controller.js +137 -0
  62. package/lib/src/owlly/controller/panorama-transform-controller.js.map +1 -0
  63. package/lib/src/owlly/controller/plane-controller.d.ts +43 -0
  64. package/lib/src/owlly/controller/plane-controller.js +174 -0
  65. package/lib/src/owlly/controller/plane-controller.js.map +1 -0
  66. package/lib/src/owlly/controller/texture-controller.d.ts +181 -0
  67. package/lib/src/owlly/controller/texture-controller.js +876 -0
  68. package/lib/src/owlly/controller/texture-controller.js.map +1 -0
  69. package/lib/src/owlly/controller/tile-panorama-controller.d.ts +308 -0
  70. package/lib/src/owlly/controller/tile-panorama-controller.js +1354 -0
  71. package/lib/src/owlly/controller/tile-panorama-controller.js.map +1 -0
  72. package/lib/src/owlly/controller/transform-controller.d.ts +106 -0
  73. package/lib/src/owlly/controller/transform-controller.js +546 -0
  74. package/lib/src/owlly/controller/transform-controller.js.map +1 -0
  75. package/lib/src/owlly/element/bottom-nav-element.d.ts +65 -0
  76. package/lib/src/owlly/element/bottom-nav-element.js +258 -0
  77. package/lib/src/owlly/element/bottom-nav-element.js.map +1 -0
  78. package/lib/src/owlly/element/camera.d.ts +82 -0
  79. package/lib/src/owlly/element/camera.js +284 -0
  80. package/lib/src/owlly/element/camera.js.map +1 -0
  81. package/lib/src/owlly/element/dom-2d-element.d.ts +35 -0
  82. package/lib/src/owlly/element/dom-2d-element.js +49 -0
  83. package/lib/src/owlly/element/dom-2d-element.js.map +1 -0
  84. package/lib/src/owlly/element/dom-3d-element.d.ts +27 -0
  85. package/lib/src/owlly/element/dom-3d-element.js +34 -0
  86. package/lib/src/owlly/element/dom-3d-element.js.map +1 -0
  87. package/lib/src/owlly/element/dom-label-2d.d.ts +116 -0
  88. package/lib/src/owlly/element/dom-label-2d.js +383 -0
  89. package/lib/src/owlly/element/dom-label-2d.js.map +1 -0
  90. package/lib/src/owlly/element/element.d.ts +53 -0
  91. package/lib/src/owlly/element/element.js +76 -0
  92. package/lib/src/owlly/element/element.js.map +1 -0
  93. package/lib/src/owlly/element/floor-model.d.ts +83 -0
  94. package/lib/src/owlly/element/floor-model.js +228 -0
  95. package/lib/src/owlly/element/floor-model.js.map +1 -0
  96. package/lib/src/owlly/element/gif-kit/Gif.d.ts +96 -0
  97. package/lib/src/owlly/element/gif-kit/Gif.js +433 -0
  98. package/lib/src/owlly/element/gif-kit/Gif.js.map +1 -0
  99. package/lib/src/owlly/element/gif-kit/GifColor.d.ts +21 -0
  100. package/lib/src/owlly/element/gif-kit/GifColor.js +38 -0
  101. package/lib/src/owlly/element/gif-kit/GifColor.js.map +1 -0
  102. package/lib/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.d.ts +20 -0
  103. package/lib/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.js +51 -0
  104. package/lib/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.js.map +1 -0
  105. package/lib/src/owlly/element/gif-kit/GifFrame.d.ts +31 -0
  106. package/lib/src/owlly/element/gif-kit/GifFrame.js +97 -0
  107. package/lib/src/owlly/element/gif-kit/GifFrame.js.map +1 -0
  108. package/lib/src/owlly/element/gif-kit/GifImage.d.ts +23 -0
  109. package/lib/src/owlly/element/gif-kit/GifImage.js +8 -0
  110. package/lib/src/owlly/element/gif-kit/GifImage.js.map +1 -0
  111. package/lib/src/owlly/element/gif-kit/GifParser.d.ts +17 -0
  112. package/lib/src/owlly/element/gif-kit/GifParser.js +197 -0
  113. package/lib/src/owlly/element/gif-kit/GifParser.js.map +1 -0
  114. package/lib/src/owlly/element/gif-kit/GifPresenter.d.ts +20 -0
  115. package/lib/src/owlly/element/gif-kit/GifPresenter.js +44 -0
  116. package/lib/src/owlly/element/gif-kit/GifPresenter.js.map +1 -0
  117. package/lib/src/owlly/element/gif-kit/GifVersion.d.ts +10 -0
  118. package/lib/src/owlly/element/gif-kit/GifVersion.js +13 -0
  119. package/lib/src/owlly/element/gif-kit/GifVersion.js.map +1 -0
  120. package/lib/src/owlly/element/gltf-mesh-element.d.ts +31 -0
  121. package/lib/src/owlly/element/gltf-mesh-element.js +137 -0
  122. package/lib/src/owlly/element/gltf-mesh-element.js.map +1 -0
  123. package/lib/src/owlly/element/index.d.ts +20 -0
  124. package/lib/src/owlly/element/index.js +25 -0
  125. package/lib/src/owlly/element/index.js.map +1 -0
  126. package/lib/src/owlly/element/map-kit/area.d.ts +24 -0
  127. package/lib/src/owlly/element/map-kit/area.js +218 -0
  128. package/lib/src/owlly/element/map-kit/area.js.map +1 -0
  129. package/lib/src/owlly/element/map-kit/block-set.d.ts +39 -0
  130. package/lib/src/owlly/element/map-kit/block-set.js +91 -0
  131. package/lib/src/owlly/element/map-kit/block-set.js.map +1 -0
  132. package/lib/src/owlly/element/map-kit/block.d.ts +77 -0
  133. package/lib/src/owlly/element/map-kit/block.js +339 -0
  134. package/lib/src/owlly/element/map-kit/block.js.map +1 -0
  135. package/lib/src/owlly/element/map-kit/index.d.ts +4 -0
  136. package/lib/src/owlly/element/map-kit/index.js +7 -0
  137. package/lib/src/owlly/element/map-kit/index.js.map +1 -0
  138. package/lib/src/owlly/element/map-kit/shape.d.ts +131 -0
  139. package/lib/src/owlly/element/map-kit/shape.js +190 -0
  140. package/lib/src/owlly/element/map-kit/shape.js.map +1 -0
  141. package/lib/src/owlly/element/mesh-element.d.ts +22 -0
  142. package/lib/src/owlly/element/mesh-element.js +64 -0
  143. package/lib/src/owlly/element/mesh-element.js.map +1 -0
  144. package/lib/src/owlly/element/mesh-line-2d.d.ts +82 -0
  145. package/lib/src/owlly/element/mesh-line-2d.js +888 -0
  146. package/lib/src/owlly/element/mesh-line-2d.js.map +1 -0
  147. package/lib/src/owlly/element/meshline-o.d.ts +64 -0
  148. package/lib/src/owlly/element/meshline-o.js +679 -0
  149. package/lib/src/owlly/element/meshline-o.js.map +1 -0
  150. package/lib/src/owlly/element/panorama-group.d.ts +241 -0
  151. package/lib/src/owlly/element/panorama-group.js +967 -0
  152. package/lib/src/owlly/element/panorama-group.js.map +1 -0
  153. package/lib/src/owlly/element/panorama.d.ts +132 -0
  154. package/lib/src/owlly/element/panorama.js +813 -0
  155. package/lib/src/owlly/element/panorama.js.map +1 -0
  156. package/lib/src/owlly/element/path-group.d.ts +69 -0
  157. package/lib/src/owlly/element/path-group.js +172 -0
  158. package/lib/src/owlly/element/path-group.js.map +1 -0
  159. package/lib/src/owlly/element/path.d.ts +99 -0
  160. package/lib/src/owlly/element/path.js +532 -0
  161. package/lib/src/owlly/element/path.js.map +1 -0
  162. package/lib/src/owlly/element/placeable-2d.d.ts +158 -0
  163. package/lib/src/owlly/element/placeable-2d.js +471 -0
  164. package/lib/src/owlly/element/placeable-2d.js.map +1 -0
  165. package/lib/src/owlly/element/polygon-mesh.d.ts +107 -0
  166. package/lib/src/owlly/element/polygon-mesh.js +308 -0
  167. package/lib/src/owlly/element/polygon-mesh.js.map +1 -0
  168. package/lib/src/owlly/element/ring-element.d.ts +79 -0
  169. package/lib/src/owlly/element/ring-element.js +384 -0
  170. package/lib/src/owlly/element/ring-element.js.map +1 -0
  171. package/lib/src/owlly/element/sphere-mesh.d.ts +28 -0
  172. package/lib/src/owlly/element/sphere-mesh.js +70 -0
  173. package/lib/src/owlly/element/sphere-mesh.js.map +1 -0
  174. package/lib/src/owlly/element/svg-floor-model.d.ts +22 -0
  175. package/lib/src/owlly/element/svg-floor-model.js +185 -0
  176. package/lib/src/owlly/element/svg-floor-model.js.map +1 -0
  177. package/lib/src/owlly/element/svg-floors.d.ts +27 -0
  178. package/lib/src/owlly/element/svg-floors.js +110 -0
  179. package/lib/src/owlly/element/svg-floors.js.map +1 -0
  180. package/lib/src/owlly/element/tile-panorama-group.d.ts +335 -0
  181. package/lib/src/owlly/element/tile-panorama-group.js +1007 -0
  182. package/lib/src/owlly/element/tile-panorama-group.js.map +1 -0
  183. package/lib/src/owlly/element/tile-panorama.d.ts +161 -0
  184. package/lib/src/owlly/element/tile-panorama.js +511 -0
  185. package/lib/src/owlly/element/tile-panorama.js.map +1 -0
  186. package/lib/src/owlly/element/tile-plane.d.ts +105 -0
  187. package/lib/src/owlly/element/tile-plane.js +361 -0
  188. package/lib/src/owlly/element/tile-plane.js.map +1 -0
  189. package/lib/src/owlly/element/video-element.d.ts +33 -0
  190. package/lib/src/owlly/element/video-element.js +160 -0
  191. package/lib/src/owlly/element/video-element.js.map +1 -0
  192. package/lib/src/owlly/geometries/ExtrudeGeometry2.d.ts +15 -0
  193. package/lib/src/owlly/geometries/ExtrudeGeometry2.js +211 -0
  194. package/lib/src/owlly/geometries/ExtrudeGeometry2.js.map +1 -0
  195. package/lib/src/owlly/index.d.ts +13 -0
  196. package/lib/src/owlly/index.js +17 -0
  197. package/lib/src/owlly/index.js.map +1 -0
  198. package/lib/src/owlly/overlay/canvas-overlay.d.ts +96 -0
  199. package/lib/src/owlly/overlay/canvas-overlay.js +511 -0
  200. package/lib/src/owlly/overlay/canvas-overlay.js.map +1 -0
  201. package/lib/src/owlly/overlay/css-2d-overlay.d.ts +14 -0
  202. package/lib/src/owlly/overlay/css-2d-overlay.js +36 -0
  203. package/lib/src/owlly/overlay/css-2d-overlay.js.map +1 -0
  204. package/lib/src/owlly/overlay/css-3d-overlay.d.ts +16 -0
  205. package/lib/src/owlly/overlay/css-3d-overlay.js +37 -0
  206. package/lib/src/owlly/overlay/css-3d-overlay.js.map +1 -0
  207. package/lib/src/owlly/overlay/index.d.ts +6 -0
  208. package/lib/src/owlly/overlay/index.js +12 -0
  209. package/lib/src/owlly/overlay/index.js.map +1 -0
  210. package/lib/src/owlly/overlay/label-overlay.d.ts +62 -0
  211. package/lib/src/owlly/overlay/label-overlay.js +329 -0
  212. package/lib/src/owlly/overlay/label-overlay.js.map +1 -0
  213. package/lib/src/owlly/overlay/overlay.d.ts +14 -0
  214. package/lib/src/owlly/overlay/overlay.js +5 -0
  215. package/lib/src/owlly/overlay/overlay.js.map +1 -0
  216. package/lib/src/owlly/overlay/path-overlay.d.ts +39 -0
  217. package/lib/src/owlly/overlay/path-overlay.js +125 -0
  218. package/lib/src/owlly/overlay/path-overlay.js.map +1 -0
  219. package/lib/src/owlly/overlay/path-overlay2.d.ts +35 -0
  220. package/lib/src/owlly/overlay/path-overlay2.js +119 -0
  221. package/lib/src/owlly/overlay/path-overlay2.js.map +1 -0
  222. package/lib/src/owlly/overlay/poi-overlay-3d.d.ts +278 -0
  223. package/lib/src/owlly/overlay/poi-overlay-3d.js +1433 -0
  224. package/lib/src/owlly/overlay/poi-overlay-3d.js.map +1 -0
  225. package/lib/src/owlly/overlay/poi-overlay.d.ts +277 -0
  226. package/lib/src/owlly/overlay/poi-overlay.js +1412 -0
  227. package/lib/src/owlly/overlay/poi-overlay.js.map +1 -0
  228. package/lib/src/owlly/owlly-2d/index.d.ts +28 -0
  229. package/lib/src/owlly/owlly-2d/index.js +93 -0
  230. package/lib/src/owlly/owlly-2d/index.js.map +1 -0
  231. package/lib/src/owlly/screen/index.d.ts +1 -0
  232. package/lib/src/owlly/screen/index.js +2 -0
  233. package/lib/src/owlly/screen/index.js.map +1 -0
  234. package/lib/src/owlly/screen/screen.d.ts +73 -0
  235. package/lib/src/owlly/screen/screen.js +237 -0
  236. package/lib/src/owlly/screen/screen.js.map +1 -0
  237. package/lib/src/owlly/stage/__test__/stage.spec.d.ts +1 -0
  238. package/lib/src/owlly/stage/__test__/stage.spec.js +15 -0
  239. package/lib/src/owlly/stage/__test__/stage.spec.js.map +1 -0
  240. package/lib/src/owlly/stage/externals.d.ts +19 -0
  241. package/lib/src/owlly/stage/externals.js +25 -0
  242. package/lib/src/owlly/stage/externals.js.map +1 -0
  243. package/lib/src/owlly/stage/index.d.ts +4 -0
  244. package/lib/src/owlly/stage/index.js +7 -0
  245. package/lib/src/owlly/stage/index.js.map +1 -0
  246. package/lib/src/owlly/stage/owlly.d.ts +38 -0
  247. package/lib/src/owlly/stage/owlly.js +168 -0
  248. package/lib/src/owlly/stage/owlly.js.map +1 -0
  249. package/lib/src/owlly/stage/stage.d.ts +108 -0
  250. package/lib/src/owlly/stage/stage.js +235 -0
  251. package/lib/src/owlly/stage/stage.js.map +1 -0
  252. package/lib/src/owlly/utils/alignment-utils.d.ts +20 -0
  253. package/lib/src/owlly/utils/alignment-utils.js +64 -0
  254. package/lib/src/owlly/utils/alignment-utils.js.map +1 -0
  255. package/lib/src/owlly/utils/basic-calc.d.ts +18 -0
  256. package/lib/src/owlly/utils/basic-calc.js +130 -0
  257. package/lib/src/owlly/utils/basic-calc.js.map +1 -0
  258. package/lib/src/owlly/utils/basic-tools.d.ts +71 -0
  259. package/lib/src/owlly/utils/basic-tools.js +236 -0
  260. package/lib/src/owlly/utils/basic-tools.js.map +1 -0
  261. package/lib/src/owlly/utils/bvh-tree.d.ts +105 -0
  262. package/lib/src/owlly/utils/bvh-tree.js +540 -0
  263. package/lib/src/owlly/utils/bvh-tree.js.map +1 -0
  264. package/lib/src/owlly/utils/camera.d.ts +37 -0
  265. package/lib/src/owlly/utils/camera.js +51 -0
  266. package/lib/src/owlly/utils/camera.js.map +1 -0
  267. package/lib/src/owlly/utils/cube-texture-cache.d.ts +25 -0
  268. package/lib/src/owlly/utils/cube-texture-cache.js +144 -0
  269. package/lib/src/owlly/utils/cube-texture-cache.js.map +1 -0
  270. package/lib/src/owlly/utils/device-utils.d.ts +18 -0
  271. package/lib/src/owlly/utils/device-utils.js +42 -0
  272. package/lib/src/owlly/utils/device-utils.js.map +1 -0
  273. package/lib/src/owlly/utils/environment-utils.d.ts +37 -0
  274. package/lib/src/owlly/utils/environment-utils.js +74 -0
  275. package/lib/src/owlly/utils/environment-utils.js.map +1 -0
  276. package/lib/src/owlly/utils/event-hub.d.ts +50 -0
  277. package/lib/src/owlly/utils/event-hub.js +107 -0
  278. package/lib/src/owlly/utils/event-hub.js.map +1 -0
  279. package/lib/src/owlly/utils/events.d.ts +219 -0
  280. package/lib/src/owlly/utils/events.js +220 -0
  281. package/lib/src/owlly/utils/events.js.map +1 -0
  282. package/lib/src/owlly/utils/geometry-utils.d.ts +119 -0
  283. package/lib/src/owlly/utils/geometry-utils.js +623 -0
  284. package/lib/src/owlly/utils/geometry-utils.js.map +1 -0
  285. package/lib/src/owlly/utils/helper.d.ts +6 -0
  286. package/lib/src/owlly/utils/helper.js +25 -0
  287. package/lib/src/owlly/utils/helper.js.map +1 -0
  288. package/lib/src/owlly/utils/index.d.ts +14 -0
  289. package/lib/src/owlly/utils/index.js +18 -0
  290. package/lib/src/owlly/utils/index.js.map +1 -0
  291. package/lib/src/owlly/utils/lru-cache.d.ts +26 -0
  292. package/lib/src/owlly/utils/lru-cache.js +110 -0
  293. package/lib/src/owlly/utils/lru-cache.js.map +1 -0
  294. package/lib/src/owlly/utils/map-utils.d.ts +7 -0
  295. package/lib/src/owlly/utils/map-utils.js +53 -0
  296. package/lib/src/owlly/utils/map-utils.js.map +1 -0
  297. package/lib/src/owlly/utils/number-utils.d.ts +8 -0
  298. package/lib/src/owlly/utils/number-utils.js +73 -0
  299. package/lib/src/owlly/utils/number-utils.js.map +1 -0
  300. package/lib/src/owlly/utils/panorama-model-util.d.ts +46 -0
  301. package/lib/src/owlly/utils/panorama-model-util.js +246 -0
  302. package/lib/src/owlly/utils/panorama-model-util.js.map +1 -0
  303. package/lib/src/owlly/utils/path-utils.d.ts +80 -0
  304. package/lib/src/owlly/utils/path-utils.js +729 -0
  305. package/lib/src/owlly/utils/path-utils.js.map +1 -0
  306. package/lib/src/owlly/utils/svgutils.d.ts +138 -0
  307. package/lib/src/owlly/utils/svgutils.js +562 -0
  308. package/lib/src/owlly/utils/svgutils.js.map +1 -0
  309. package/lib/src/owlly/utils/texture-cache.d.ts +29 -0
  310. package/lib/src/owlly/utils/texture-cache.js +116 -0
  311. package/lib/src/owlly/utils/texture-cache.js.map +1 -0
  312. package/lib/src/owlly/utils/tile-util.d.ts +187 -0
  313. package/lib/src/owlly/utils/tile-util.js +457 -0
  314. package/lib/src/owlly/utils/tile-util.js.map +1 -0
  315. package/lib/src/owlly/utils/time-profiler.d.ts +21 -0
  316. package/lib/src/owlly/utils/time-profiler.js +49 -0
  317. package/lib/src/owlly/utils/time-profiler.js.map +1 -0
  318. package/lib/src/owlly/view/__test__/perspective-view.spec.d.ts +0 -0
  319. package/lib/src/owlly/view/__test__/perspective-view.spec.js +22 -0
  320. package/lib/src/owlly/view/__test__/perspective-view.spec.js.map +1 -0
  321. package/lib/src/owlly/view/camera-view.d.ts +35 -0
  322. package/lib/src/owlly/view/camera-view.js +102 -0
  323. package/lib/src/owlly/view/camera-view.js.map +1 -0
  324. package/lib/src/owlly/view/index.d.ts +3 -0
  325. package/lib/src/owlly/view/index.js +6 -0
  326. package/lib/src/owlly/view/index.js.map +1 -0
  327. package/lib/src/owlly/view/orthographic-view.d.ts +40 -0
  328. package/lib/src/owlly/view/orthographic-view.js +95 -0
  329. package/lib/src/owlly/view/orthographic-view.js.map +1 -0
  330. package/lib/src/owlly/view/perspective-view.d.ts +40 -0
  331. package/lib/src/owlly/view/perspective-view.js +96 -0
  332. package/lib/src/owlly/view/perspective-view.js.map +1 -0
  333. package/lib/src/owlly/view/svg-map-view.d.ts +46 -0
  334. package/lib/src/owlly/view/svg-map-view.js +145 -0
  335. package/lib/src/owlly/view/svg-map-view.js.map +1 -0
  336. package/lib/src/owlly/view/view.d.ts +146 -0
  337. package/lib/src/owlly/view/view.js +318 -0
  338. package/lib/src/owlly/view/view.js.map +1 -0
  339. package/lib/src/web/main.centroid.d.ts +0 -0
  340. package/lib/src/web/main.centroid.js +74 -0
  341. package/lib/src/web/main.centroid.js.map +1 -0
  342. package/lib/src/web/main.hyma.meshline2d.d.ts +1 -0
  343. package/lib/src/web/main.hyma.meshline2d.js +76 -0
  344. package/lib/src/web/main.hyma.meshline2d.js.map +1 -0
  345. package/lib/src/web/main.jyfang.sample.d.ts +0 -0
  346. package/lib/src/web/main.jyfang.sample.js +122 -0
  347. package/lib/src/web/main.jyfang.sample.js.map +1 -0
  348. package/lib/src/web/main.rpeng.extrude.d.ts +1 -0
  349. package/lib/src/web/main.rpeng.extrude.js +180 -0
  350. package/lib/src/web/main.rpeng.extrude.js.map +1 -0
  351. package/lib/src/web/main.rpeng.mes.plane.d.ts +1 -0
  352. package/lib/src/web/main.rpeng.mes.plane.js +135 -0
  353. package/lib/src/web/main.rpeng.mes.plane.js.map +1 -0
  354. package/lib/src/web/main.rpeng.sample.d.ts +0 -0
  355. package/lib/src/web/main.rpeng.sample.js +318 -0
  356. package/lib/src/web/main.rpeng.sample.js.map +1 -0
  357. package/lib/src/web/main.rpeng.vr.d.ts +1 -0
  358. package/lib/src/web/main.rpeng.vr.js +141 -0
  359. package/lib/src/web/main.rpeng.vr.js.map +1 -0
  360. package/lib/src/web/main.sample.d.ts +1 -0
  361. package/lib/src/web/main.sample.js +52 -0
  362. package/lib/src/web/main.sample.js.map +1 -0
  363. package/lib/src/web/quattree.hyma.d.ts +0 -0
  364. package/lib/src/web/quattree.hyma.js +150 -0
  365. package/lib/src/web/quattree.hyma.js.map +1 -0
  366. package/lib/src/web/sensor-vr-plugin.d.ts +0 -0
  367. package/lib/src/web/sensor-vr-plugin.js +166 -0
  368. package/lib/src/web/sensor-vr-plugin.js.map +1 -0
  369. package/package.json +142 -0
  370. package/src/@types/SceneUtils.d.ts +9 -0
  371. package/src/@types/chaikin-smooth.d.ts +5 -0
  372. package/src/@types/global.d.ts +3 -0
  373. package/src/@types/snapsvg.d.ts +11 -0
  374. package/src/@types/svgson.d.ts +30 -0
  375. package/src/assets/favicon.ico +0 -0
  376. package/src/external/lines/line-geometry.ts +70 -0
  377. package/src/external/lines/line-material.ts +453 -0
  378. package/src/external/lines/line-segments-2.ts +194 -0
  379. package/src/external/lines/line-segments-geometry.ts +197 -0
  380. package/src/external/loaders/gltf-loader.ts +3004 -0
  381. package/src/external/orbit-controls.ts +1070 -0
  382. package/src/external/renderers/css-2d-renderer.ts +185 -0
  383. package/src/external/renderers/css-3d-renderer.ts +245 -0
  384. package/src/external/transform-controls.ts +1532 -0
  385. package/src/external/util/buffer-geometry-utils.ts +783 -0
  386. package/src/owlly/controller/aerial-element-controller.ts +277 -0
  387. package/src/owlly/controller/basic-controller.ts +1509 -0
  388. package/src/owlly/controller/camera-controller.ts +155 -0
  389. package/src/owlly/controller/controller.ts +76 -0
  390. package/src/owlly/controller/index.ts +15 -0
  391. package/src/owlly/controller/mouse-indicator-controller.ts +157 -0
  392. package/src/owlly/controller/orbit-control.ts +310 -0
  393. package/src/owlly/controller/panorama-adjust-controller.ts +183 -0
  394. package/src/owlly/controller/panorama-controller.ts +2234 -0
  395. package/src/owlly/controller/panorama-transform-controller.ts +151 -0
  396. package/src/owlly/controller/plane-controller.ts +222 -0
  397. package/src/owlly/controller/texture-controller.ts +949 -0
  398. package/src/owlly/controller/tile-panorama-controller.ts +1633 -0
  399. package/src/owlly/controller/transform-controller.ts +684 -0
  400. package/src/owlly/element/bottom-nav-element.ts +352 -0
  401. package/src/owlly/element/camera.ts +389 -0
  402. package/src/owlly/element/dom-2d-element.ts +88 -0
  403. package/src/owlly/element/dom-3d-element.ts +87 -0
  404. package/src/owlly/element/dom-label-2d.ts +497 -0
  405. package/src/owlly/element/element.ts +117 -0
  406. package/src/owlly/element/floor-model.ts +290 -0
  407. package/src/owlly/element/gif-kit/Gif.ts +509 -0
  408. package/src/owlly/element/gif-kit/GifColor.ts +44 -0
  409. package/src/owlly/element/gif-kit/GifCompressedCodesToByteArrayConverter.ts +56 -0
  410. package/src/owlly/element/gif-kit/GifFrame.ts +207 -0
  411. package/src/owlly/element/gif-kit/GifImage.ts +26 -0
  412. package/src/owlly/element/gif-kit/GifParser.ts +254 -0
  413. package/src/owlly/element/gif-kit/GifPresenter.ts +46 -0
  414. package/src/owlly/element/gif-kit/GifVersion.ts +12 -0
  415. package/src/owlly/element/gltf-mesh-element.ts +184 -0
  416. package/src/owlly/element/index.ts +25 -0
  417. package/src/owlly/element/map-kit/area.ts +232 -0
  418. package/src/owlly/element/map-kit/block-set.ts +102 -0
  419. package/src/owlly/element/map-kit/block.ts +417 -0
  420. package/src/owlly/element/map-kit/index.ts +6 -0
  421. package/src/owlly/element/map-kit/shape.ts +285 -0
  422. package/src/owlly/element/mesh-element.ts +94 -0
  423. package/src/owlly/element/mesh-line-2d.ts +1032 -0
  424. package/src/owlly/element/meshline-o.ts +802 -0
  425. package/src/owlly/element/panorama-group.ts +1250 -0
  426. package/src/owlly/element/panorama.ts +1044 -0
  427. package/src/owlly/element/path-group.ts +212 -0
  428. package/src/owlly/element/path.ts +727 -0
  429. package/src/owlly/element/placeable-2d.ts +627 -0
  430. package/src/owlly/element/polygon-mesh.ts +344 -0
  431. package/src/owlly/element/ring-element.ts +517 -0
  432. package/src/owlly/element/sphere-mesh.ts +96 -0
  433. package/src/owlly/element/svg-floor-model.ts +200 -0
  434. package/src/owlly/element/svg-floors.ts +121 -0
  435. package/src/owlly/element/tile-panorama-group.ts +1314 -0
  436. package/src/owlly/element/tile-panorama.ts +636 -0
  437. package/src/owlly/element/tile-plane.ts +430 -0
  438. package/src/owlly/element/video-element.ts +190 -0
  439. package/src/owlly/geometries/ExtrudeGeometry2.ts +255 -0
  440. package/src/owlly/index.ts +19 -0
  441. package/src/owlly/overlay/canvas-overlay.ts +642 -0
  442. package/src/owlly/overlay/css-2d-overlay.ts +48 -0
  443. package/src/owlly/overlay/css-3d-overlay.ts +50 -0
  444. package/src/owlly/overlay/index.ts +11 -0
  445. package/src/owlly/overlay/label-overlay.ts +419 -0
  446. package/src/owlly/overlay/overlay.ts +17 -0
  447. package/src/owlly/overlay/path-overlay.ts +170 -0
  448. package/src/owlly/overlay/path-overlay2.ts +149 -0
  449. package/src/owlly/overlay/poi-overlay-3d.ts +1759 -0
  450. package/src/owlly/overlay/poi-overlay.ts +1739 -0
  451. package/src/owlly/owlly-2d/index.ts +108 -0
  452. package/src/owlly/screen/index.ts +1 -0
  453. package/src/owlly/screen/screen.ts +323 -0
  454. package/src/owlly/stage/__test__/stage.spec.ts +15 -0
  455. package/src/owlly/stage/externals.ts +45 -0
  456. package/src/owlly/stage/index.ts +12 -0
  457. package/src/owlly/stage/owlly.ts +223 -0
  458. package/src/owlly/stage/stage.ts +274 -0
  459. package/src/owlly/utils/alignment-utils.ts +84 -0
  460. package/src/owlly/utils/basic-calc.ts +141 -0
  461. package/src/owlly/utils/basic-tools.ts +286 -0
  462. package/src/owlly/utils/bvh-tree.ts +695 -0
  463. package/src/owlly/utils/camera.ts +72 -0
  464. package/src/owlly/utils/cube-texture-cache.ts +155 -0
  465. package/src/owlly/utils/device-utils.ts +53 -0
  466. package/src/owlly/utils/environment-utils.ts +81 -0
  467. package/src/owlly/utils/event-hub.ts +120 -0
  468. package/src/owlly/utils/events.ts +266 -0
  469. package/src/owlly/utils/geometry-utils.ts +749 -0
  470. package/src/owlly/utils/helper.ts +33 -0
  471. package/src/owlly/utils/index.ts +17 -0
  472. package/src/owlly/utils/lru-cache.ts +126 -0
  473. package/src/owlly/utils/map-utils.ts +55 -0
  474. package/src/owlly/utils/number-utils.ts +75 -0
  475. package/src/owlly/utils/panorama-model-util.ts +255 -0
  476. package/src/owlly/utils/path-utils.ts +837 -0
  477. package/src/owlly/utils/svgutils.ts +732 -0
  478. package/src/owlly/utils/texture-cache.ts +132 -0
  479. package/src/owlly/utils/tile-util.ts +563 -0
  480. package/src/owlly/utils/time-profiler.ts +57 -0
  481. package/src/owlly/view/__test__/perspective-view.spec.ts +23 -0
  482. package/src/owlly/view/camera-view.ts +114 -0
  483. package/src/owlly/view/index.ts +5 -0
  484. package/src/owlly/view/orthographic-view.ts +124 -0
  485. package/src/owlly/view/perspective-view.ts +125 -0
  486. package/src/owlly/view/svg-map-view.ts +187 -0
  487. package/src/owlly/view/view.ts +409 -0
  488. package/src/public/js/jsmpeg.min.js +3129 -0
  489. package/src/web/index.html +52 -0
  490. package/src/web/main.centroid.ts +85 -0
  491. package/src/web/main.hyma.meshline2d.ts +84 -0
  492. package/src/web/main.jyfang.sample.ts +139 -0
  493. package/src/web/main.rpeng.extrude.ts +194 -0
  494. package/src/web/main.rpeng.mes.plane.ts +161 -0
  495. package/src/web/main.rpeng.sample.ts +345 -0
  496. package/src/web/main.rpeng.vr.ts +159 -0
  497. package/src/web/main.sample.ts +59 -0
  498. package/src/web/quattree.hyma.ts +163 -0
  499. package/src/web/sensor-vr-plugin.ts +201 -0
  500. package/src/web/testPixel.png +0 -0
@@ -0,0 +1,695 @@
1
+ /**
2
+ * bvh-tree
3
+ * A Bounding Volume Hierarchy data structure implementation.
4
+ * https://github.com/benraziel/bvh-tree
5
+ *
6
+ * 该文件是外部引入的类, 用于创建 FloorModel 的 BVH 树
7
+ *
8
+ * @author Ben Raziel
9
+ * @ignore
10
+ */
11
+ import { Externals, NS_THREE } from '../stage/externals';
12
+
13
+ interface IntersectResult {
14
+ triangle?: NS_THREE.Vector3[];
15
+ triangleIndex?: number;
16
+ intersectionPoint: NS_THREE.Vector3;
17
+ }
18
+
19
+ /**
20
+ * A node in the [[BVHTree]] structure
21
+ *
22
+ */
23
+ class BVHNode {
24
+ public extentsMin: NS_THREE.Vector3;
25
+
26
+ public extentsMax: NS_THREE.Vector3;
27
+
28
+ public startIndex: number;
29
+
30
+ public endIndex: number;
31
+
32
+ public level: number;
33
+
34
+ public node0: BVHNode|null;
35
+
36
+ public node1: BVHNode|null;
37
+
38
+ /**
39
+ * Constructor of BVHNode
40
+ * @param {Point} extentsMin the min coords of this node's bounding box ({x,y,z})
41
+ * @param {Point} extentsMax the max coords of this node's bounding box ({x,y,z})
42
+ * @param {number} startIndex an index in the bbox array, where the first element of this node is located
43
+ * @param {number} endIndex an index in the bbox array, where the last of this node is located,
44
+ * plus 1 (meaning that its non-inclusive).
45
+ * @param {number} the distance of this node from the root for the bvh tree. root node has level=0,
46
+ * its children have level=1 etc.
47
+ */
48
+ constructor(
49
+ extentsMin: NS_THREE.Vector3,
50
+ extentsMax: NS_THREE.Vector3,
51
+ startIndex: number,
52
+ endIndex: number,
53
+ level: number,
54
+ ) {
55
+ this.extentsMin = extentsMin;
56
+ this.extentsMax = extentsMax;
57
+ this.startIndex = startIndex;
58
+ this.endIndex = endIndex;
59
+ this.level = level;
60
+ this.node0 = null;
61
+ this.node1 = null;
62
+ }
63
+
64
+ public elementCount(): number {
65
+ return this.endIndex - this.startIndex;
66
+ }
67
+
68
+ public centerX(): number {
69
+ return (this.extentsMin.x + this.extentsMax.x) * 0.5;
70
+ }
71
+
72
+ public centerY(): number {
73
+ return (this.extentsMin.y + this.extentsMax.y) * 0.5;
74
+ }
75
+
76
+ public centerZ(): number {
77
+ return (this.extentsMin.z + this.extentsMax.z) * 0.5;
78
+ }
79
+
80
+ public clearShapes(): void {
81
+ this.startIndex = -1;
82
+ this.endIndex = -1;
83
+ }
84
+
85
+ public calcBoundingSphereRadius(extentsMin: NS_THREE.Vector3, extentsMax: NS_THREE.Vector3): number {
86
+ const centerX = (extentsMin.x + extentsMax.x) * 0.5;
87
+ const centerY = (extentsMin.y + extentsMax.y) * 0.5;
88
+ const centerZ = (extentsMin.z + extentsMax.z) * 0.5;
89
+
90
+ const extentsMinDistSqr = (centerX - extentsMin.x) * (centerX - extentsMin.x)
91
+ + (centerY - extentsMin.y) * (centerY - extentsMin.y)
92
+ + (centerZ - extentsMin.z) * (centerZ - extentsMin.z);
93
+
94
+ const extentsMaxDistSqr = (centerX - extentsMax.x) * (centerX - extentsMax.x)
95
+ + (centerY - extentsMax.y) * (centerY - extentsMax.y)
96
+ + (centerZ - extentsMax.z) * (centerZ - extentsMax.z);
97
+
98
+ return Math.sqrt(Math.max(extentsMinDistSqr, extentsMaxDistSqr));
99
+ }
100
+ }
101
+
102
+ /**
103
+ * BVH树
104
+ */
105
+ class BVHTree {
106
+ private static EPSILON = 1e-6;
107
+
108
+ private trianglesArray: number[];
109
+
110
+ private maxTrianglesPerNode: number;
111
+
112
+ private bboxArray: Float32Array;
113
+
114
+ private bboxHelper: Float32Array;
115
+
116
+ private rootNode: BVHNode;
117
+
118
+ private nodesToSplit: BVHNode[];
119
+
120
+ /**
121
+ * 创建BVH树对象
122
+ * @param {Vector3[][]} triangles 三角形数组,BVH树基于此构建
123
+ * @param {number} maxTrianglesPerNode 每个树结点包含的最多三角形数量
124
+ */
125
+ constructor(triangles: NS_THREE.Vector3[][], maxTrianglesPerNode: number) {
126
+ const trianglesArray = [];
127
+ trianglesArray.length = triangles.length * 9;
128
+
129
+ for (let i = 0; i < triangles.length; i += 1) {
130
+ const p0 = triangles[i][0];
131
+ const p1 = triangles[i][1];
132
+ const p2 = triangles[i][2];
133
+
134
+ trianglesArray[i * 9] = p0.x;
135
+ trianglesArray[i * 9 + 1] = p0.y;
136
+ trianglesArray[i * 9 + 2] = p0.z;
137
+
138
+ trianglesArray[i * 9 + 3] = p1.x;
139
+ trianglesArray[i * 9 + 4] = p1.y;
140
+ trianglesArray[i * 9 + 5] = p1.z;
141
+
142
+ trianglesArray[i * 9 + 6] = p2.x;
143
+ trianglesArray[i * 9 + 7] = p2.y;
144
+ trianglesArray[i * 9 + 8] = p2.z;
145
+ }
146
+
147
+ this.trianglesArray = trianglesArray;
148
+ this.maxTrianglesPerNode = maxTrianglesPerNode || 10;
149
+ this.bboxArray = this.calcBoundingBoxes(trianglesArray);
150
+
151
+ // clone a helper array
152
+ this.bboxHelper = new Float32Array(this.bboxArray.length);
153
+ this.bboxHelper.set(this.bboxArray);
154
+
155
+ // create the root node, add all the triangles to it
156
+ const triangleCount = trianglesArray.length / 9;
157
+ const extents = this.calcExtents(0, triangleCount, BVHTree.EPSILON);
158
+ this.rootNode = new BVHNode(extents[0], extents[1], 0, triangleCount, 0);
159
+
160
+ this.nodesToSplit = [this.rootNode];
161
+
162
+ while (this.nodesToSplit.length > 0) {
163
+ const node = this.nodesToSplit.pop();
164
+ if (node) {
165
+ this.splitNode(node);
166
+ }
167
+ }
168
+ }
169
+
170
+ private vector3SetFromArray(v: NS_THREE.Vector3, array: number[], firstElementPos: number): void {
171
+ v.set(array[firstElementPos], array[firstElementPos + 1], array[firstElementPos + 2]);
172
+ }
173
+
174
+ /**
175
+ * Returns a list of all the triangles in the BVH which interected a specific node.
176
+ * We use the BVH node structure to first cull out nodes which do not intereset the ray.
177
+ * For rays that did intersect, we test intersection of the ray with each triangle
178
+ * @param {Vector3} rayOrigin the origin position of the ray.
179
+ * @param {Vector3} rayDirection the direction vector of the ray.
180
+ * @param {boolean} backfaceCulling if 'true', only intersections with front-faces of the mesh will be performed.
181
+ * @return {{}[]} IntersectionResult an array of intersection result, one for each triangle which intersected the BVH,
182
+ * each item in the form of:
183
+ * {
184
+ * triangle: Vector3[];
185
+ * triangleIndex: number;
186
+ * intersectionPoint: Vector3;
187
+ * }
188
+ */
189
+ public intersectRay(rayOrigin: NS_THREE.Vector3, rayDirection: NS_THREE.Vector3, backfaceCulling?: boolean):
190
+ IntersectResult[] {
191
+ const nodesToIntersect = [this.rootNode];
192
+ const trianglesInIntersectingNodes = []; // a list of nodes that intersect the ray (according to their bounding box)
193
+ const intersectingTriangles = [];
194
+ let i;
195
+
196
+ const { THREE } = Externals.getInstance();
197
+
198
+ const invRayDirection = new THREE.Vector3(
199
+ 1.0 / rayDirection.x,
200
+ 1.0 / rayDirection.y,
201
+ 1.0 / rayDirection.z,
202
+ );
203
+
204
+ // go over the BVH tree, and extract the list of triangles that lie in nodes that intersect the ray.
205
+ // note: these triangles may not intersect the ray themselves
206
+ while (nodesToIntersect.length > 0) {
207
+ const node = nodesToIntersect.pop();
208
+ if (node) {
209
+ if (this.intersectNodeBox(rayOrigin, invRayDirection, node)) {
210
+ if (node.node0) {
211
+ nodesToIntersect.push(node.node0);
212
+ }
213
+
214
+ if (node.node1) {
215
+ nodesToIntersect.push(node.node1);
216
+ }
217
+
218
+ for (i = node.startIndex; i < node.endIndex; i += 1) {
219
+ trianglesInIntersectingNodes.push(this.bboxArray[i * 7]);
220
+ }
221
+ }
222
+ }
223
+ }
224
+
225
+ // go over the list of candidate triangles, and check each of them using ray triangle intersection
226
+ const a = new THREE.Vector3();
227
+ const b = new THREE.Vector3();
228
+ const c = new THREE.Vector3();
229
+ const rayOriginVec3 = new THREE.Vector3(rayOrigin.x, rayOrigin.y, rayOrigin.z);
230
+ const rayDirectionVec3 = new THREE.Vector3(rayDirection.x, rayDirection.y, rayDirection.z);
231
+
232
+ for (i = 0; i < trianglesInIntersectingNodes.length; i += 1) {
233
+ const triIndex = trianglesInIntersectingNodes[i];
234
+
235
+ this.vector3SetFromArray(a, this.trianglesArray, triIndex * 9);
236
+ this.vector3SetFromArray(b, this.trianglesArray, triIndex * 9 + 3);
237
+ this.vector3SetFromArray(c, this.trianglesArray, triIndex * 9 + 6);
238
+
239
+ const intersectionPoint = this.intersectRayTriangle(
240
+ a, b, c, rayOriginVec3, rayDirectionVec3, backfaceCulling || false,
241
+ );
242
+ if (intersectionPoint) {
243
+ intersectingTriangles.push({
244
+ triangle: [a.clone(), b.clone(), c.clone()],
245
+ triangleIndex: triIndex,
246
+ intersectionPoint,
247
+ });
248
+ }
249
+ }
250
+
251
+ return intersectingTriangles;
252
+ }
253
+
254
+ /**
255
+ * 获得与指定射线方向相交的最接近射线起点的相交结果
256
+ * @param rayOrigin 射线起点
257
+ * @param rayDirection 射线方向
258
+ * @param backfaceCulling 可选,是否忽略背面
259
+ */
260
+ public nearestIntersection(
261
+ rayOrigin: NS_THREE.Vector3,
262
+ rayDirection: NS_THREE.Vector3,
263
+ backfaceCulling?: boolean,
264
+ ): IntersectResult|null {
265
+ const direction = rayDirection.clone().normalize();
266
+ const results = this.intersectRay(rayOrigin, direction, backfaceCulling);
267
+ if (results.length === 0) return null;
268
+ let ret = null;
269
+ let minDist = Number.MAX_VALUE;
270
+ for (let i = 0; i < results.length; i += 1) {
271
+ const item = results[i];
272
+ const dist = item.intersectionPoint.clone().sub(rayOrigin).dot(direction);
273
+ if (dist >= 0.0 && dist < minDist) {
274
+ ret = item;
275
+ minDist = dist;
276
+ }
277
+ }
278
+ return ret;
279
+ }
280
+
281
+ private calcBoundingBoxes(trianglesArray: number[]): Float32Array {
282
+ let p0x; let p0y; let p0z;
283
+ let p1x; let p1y; let p1z;
284
+ let p2x; let p2y; let p2z;
285
+ let minX; let minY; let minZ;
286
+ let maxX; let maxY; let maxZ;
287
+
288
+ const triangleCount = trianglesArray.length / 9;
289
+ const bboxArray = new Float32Array(triangleCount * 7);
290
+
291
+ for (let i = 0; i < triangleCount; i += 1) {
292
+ p0x = trianglesArray[i * 9];
293
+ p0y = trianglesArray[i * 9 + 1];
294
+ p0z = trianglesArray[i * 9 + 2];
295
+ p1x = trianglesArray[i * 9 + 3];
296
+ p1y = trianglesArray[i * 9 + 4];
297
+ p1z = trianglesArray[i * 9 + 5];
298
+ p2x = trianglesArray[i * 9 + 6];
299
+ p2y = trianglesArray[i * 9 + 7];
300
+ p2z = trianglesArray[i * 9 + 8];
301
+
302
+ minX = Math.min(Math.min(p0x, p1x), p2x);
303
+ minY = Math.min(Math.min(p0y, p1y), p2y);
304
+ minZ = Math.min(Math.min(p0z, p1z), p2z);
305
+ maxX = Math.max(Math.max(p0x, p1x), p2x);
306
+ maxY = Math.max(Math.max(p0y, p1y), p2y);
307
+ maxZ = Math.max(Math.max(p0z, p1z), p2z);
308
+
309
+ this.setBox(bboxArray, i, i, minX, minY, minZ, maxX, maxY, maxZ);
310
+ }
311
+
312
+ return bboxArray;
313
+ }
314
+
315
+ private setBox(bboxArray: Float32Array, pos: number, triangleId: number,
316
+ minX: number, minY: number, minZ: number,
317
+ maxX: number, maxY: number, maxZ: number): void {
318
+ bboxArray[pos * 7] = triangleId;
319
+ bboxArray[pos * 7 + 1] = minX;
320
+ bboxArray[pos * 7 + 2] = minY;
321
+ bboxArray[pos * 7 + 3] = minZ;
322
+ bboxArray[pos * 7 + 4] = maxX;
323
+ bboxArray[pos * 7 + 5] = maxY;
324
+ bboxArray[pos * 7 + 6] = maxZ;
325
+ }
326
+
327
+ private copyBox(sourceArray: Float32Array, sourcePos: number, destArray: Float32Array, destPos: number): void {
328
+ destArray[destPos * 7] = sourceArray[sourcePos * 7];
329
+ destArray[destPos * 7 + 1] = sourceArray[sourcePos * 7 + 1];
330
+ destArray[destPos * 7 + 2] = sourceArray[sourcePos * 7 + 2];
331
+ destArray[destPos * 7 + 3] = sourceArray[sourcePos * 7 + 3];
332
+ destArray[destPos * 7 + 4] = sourceArray[sourcePos * 7 + 4];
333
+ destArray[destPos * 7 + 5] = sourceArray[sourcePos * 7 + 5];
334
+ destArray[destPos * 7 + 6] = sourceArray[sourcePos * 7 + 6];
335
+ }
336
+
337
+ // private getBox(bboxArray: Float32Array, pos: number,
338
+ // outputBox: {triangleId: number;
339
+ // minX: number; minY: number; minZ: number;
340
+ // maxX: number; maxY: number; maxZ: number;
341
+ // }): void {
342
+ // outputBox.triangleId = bboxArray[pos * 7];
343
+ // outputBox.minX = bboxArray[pos * 7 + 1];
344
+ // outputBox.minY = bboxArray[pos * 7 + 2];
345
+ // outputBox.minZ = bboxArray[pos * 7 + 3];
346
+ // outputBox.maxX = bboxArray[pos * 7 + 4];
347
+ // outputBox.maxY = bboxArray[pos * 7 + 5];
348
+ // outputBox.maxZ = bboxArray[pos * 7 + 6];
349
+ // }
350
+
351
+ private calcExtents(startIndex: number, endIndex: number, _expandBy: number): NS_THREE.Vector3[] {
352
+ const expandBy = _expandBy || 0.0;
353
+ const { THREE } = Externals.getInstance();
354
+
355
+ if (startIndex >= endIndex) {
356
+ return [new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, 0)];
357
+ }
358
+
359
+ let minX = Number.MAX_VALUE;
360
+ let minY = Number.MAX_VALUE;
361
+ let minZ = Number.MAX_VALUE;
362
+ let maxX = -Number.MAX_VALUE;
363
+ let maxY = -Number.MAX_VALUE;
364
+ let maxZ = -Number.MAX_VALUE;
365
+
366
+ for (let i = startIndex; i < endIndex; i += 1) {
367
+ minX = Math.min(this.bboxArray[i * 7 + 1], minX);
368
+ minY = Math.min(this.bboxArray[i * 7 + 2], minY);
369
+ minZ = Math.min(this.bboxArray[i * 7 + 3], minZ);
370
+ maxX = Math.max(this.bboxArray[i * 7 + 4], maxX);
371
+ maxY = Math.max(this.bboxArray[i * 7 + 5], maxY);
372
+ maxZ = Math.max(this.bboxArray[i * 7 + 6], maxZ);
373
+ }
374
+
375
+ return [
376
+ new THREE.Vector3(minX - expandBy, minY - expandBy, minZ - expandBy),
377
+ new THREE.Vector3(maxX + expandBy, maxY + expandBy, maxZ + expandBy),
378
+ ];
379
+ }
380
+
381
+ private splitNode(node: BVHNode): void {
382
+ if ((node.elementCount() <= this.maxTrianglesPerNode) || (node.elementCount() === 0)) {
383
+ return;
384
+ }
385
+
386
+ const { startIndex, endIndex } = node;
387
+
388
+ const leftNode = [new Array<number>(), new Array<number>(), new Array<number>()];
389
+ const rightNode = [new Array<number>(), new Array<number>(), new Array<number>()];
390
+ const extentCenters = [node.centerX(), node.centerY(), node.centerZ()];
391
+
392
+ const extentsLength = [
393
+ node.extentsMax.x - node.extentsMin.x,
394
+ node.extentsMax.y - node.extentsMin.y,
395
+ node.extentsMax.z - node.extentsMin.z,
396
+ ];
397
+
398
+ const objectCenter = [];
399
+ objectCenter.length = 3;
400
+
401
+ for (let i = startIndex; i < endIndex; i += 1) {
402
+ objectCenter[0] = (this.bboxArray[i * 7 + 1] + this.bboxArray[i * 7 + 4]) * 0.5; // center = (min + max) / 2
403
+ objectCenter[1] = (this.bboxArray[i * 7 + 2] + this.bboxArray[i * 7 + 5]) * 0.5; // center = (min + max) / 2
404
+ objectCenter[2] = (this.bboxArray[i * 7 + 3] + this.bboxArray[i * 7 + 6]) * 0.5; // center = (min + max) / 2
405
+
406
+ for (let j = 0; j < 3; j += 1) {
407
+ if (objectCenter[j] < extentCenters[j]) {
408
+ leftNode[j].push(i);
409
+ } else {
410
+ rightNode[j].push(i);
411
+ }
412
+ }
413
+ }
414
+
415
+ // check if we couldn't split the node by any of the axes (x, y or z). halt here,
416
+ // dont try to split any more (cause it will always fail, and we'll enter an infinite loop
417
+ const splitFailed = [];
418
+ splitFailed.length = 3;
419
+
420
+ splitFailed[0] = (leftNode[0].length === 0) || (rightNode[0].length === 0);
421
+ splitFailed[1] = (leftNode[1].length === 0) || (rightNode[1].length === 0);
422
+ splitFailed[2] = (leftNode[2].length === 0) || (rightNode[2].length === 0);
423
+
424
+ if (splitFailed[0] && splitFailed[1] && splitFailed[2]) {
425
+ return;
426
+ }
427
+
428
+ // choose the longest split axis. if we can't split by it, choose next best one.
429
+ const splitOrder = [0, 1, 2];
430
+
431
+ splitOrder.sort((axis0, axis1) => (extentsLength[axis1] - extentsLength[axis0]));
432
+
433
+ let leftElements: number[] | undefined;
434
+ let rightElements: number[] | undefined;
435
+
436
+ for (let j = 0; j < 3; j += 1) {
437
+ const candidateIndex = splitOrder[j];
438
+
439
+ if (!splitFailed[candidateIndex]) {
440
+ leftElements = leftNode[candidateIndex];
441
+ rightElements = rightNode[candidateIndex];
442
+
443
+ break;
444
+ }
445
+ }
446
+
447
+ // sort the elements in range (startIndex, endIndex) according to which node they should be at
448
+ const node0Start = startIndex;
449
+ const node0End = node0Start + (leftElements !== undefined ? leftElements.length : 0);
450
+ const node1Start = node0End;
451
+ const node1End = endIndex;
452
+ let currElement;
453
+
454
+ let helperPos = node.startIndex;
455
+ let concatenatedElements: number[] = [];
456
+ if (leftElements) {
457
+ concatenatedElements = leftElements;
458
+ }
459
+ if (rightElements) {
460
+ concatenatedElements = concatenatedElements.concat(rightElements);
461
+ }
462
+
463
+ for (let i = 0; i < concatenatedElements.length; i += 1) {
464
+ currElement = concatenatedElements[i];
465
+ this.copyBox(this.bboxArray, currElement, this.bboxHelper, helperPos);
466
+ helperPos += 1;
467
+ }
468
+
469
+ // copy results back to main array
470
+ const subArr = this.bboxHelper.subarray(node.startIndex * 7, node.endIndex * 7);
471
+ this.bboxArray.set(subArr, node.startIndex * 7);
472
+
473
+ // create 2 new nodes for the node we just split, and add links to them from the parent node
474
+ const node0Extents = this.calcExtents(node0Start, node0End, BVHTree.EPSILON);
475
+ const node1Extents = this.calcExtents(node1Start, node1End, BVHTree.EPSILON);
476
+
477
+ const node0 = new BVHNode(node0Extents[0], node0Extents[1], node0Start, node0End, node.level + 1);
478
+ const node1 = new BVHNode(node1Extents[0], node1Extents[1], node1Start, node1End, node.level + 1);
479
+
480
+ node.node0 = node0;
481
+ node.node1 = node1;
482
+ node.clearShapes();
483
+
484
+ // add new nodes to the split queue
485
+ this.nodesToSplit.push(node0);
486
+ this.nodesToSplit.push(node1);
487
+ }
488
+
489
+ private calcTValues(minVal: number, maxVal: number, rayOriginCoord: number, invdir: number):
490
+ {min: number; max: number} {
491
+ const res = { min: 0, max: 0 };
492
+
493
+ if (invdir >= 0) {
494
+ res.min = (minVal - rayOriginCoord) * invdir;
495
+ res.max = (maxVal - rayOriginCoord) * invdir;
496
+ } else {
497
+ res.min = (maxVal - rayOriginCoord) * invdir;
498
+ res.max = (minVal - rayOriginCoord) * invdir;
499
+ }
500
+
501
+ return res;
502
+ }
503
+
504
+ private intersectNodeBox(
505
+ rayOrigin: NS_THREE.Vector3,
506
+ invRayDirection: NS_THREE.Vector3,
507
+ node: BVHNode,
508
+ ): boolean {
509
+ const t = this.calcTValues(node.extentsMin.x, node.extentsMax.x, rayOrigin.x, invRayDirection.x);
510
+ const ty = this.calcTValues(node.extentsMin.y, node.extentsMax.y, rayOrigin.y, invRayDirection.y);
511
+
512
+ if ((t.min > ty.max) || (ty.min > t.max)) {
513
+ return false;
514
+ }
515
+
516
+ // These lines also handle the case where tmin or tmax is NaN
517
+ // (result of 0 * Infinity). x !== x returns true if x is NaN
518
+ if (ty.min > t.min || Number.isNaN(t.min)) {
519
+ t.min = ty.min;
520
+ }
521
+
522
+ if (ty.max < t.max || Number.isNaN(t.max)) {
523
+ t.max = ty.max;
524
+ }
525
+
526
+ const tz = this.calcTValues(node.extentsMin.z, node.extentsMax.z, rayOrigin.z, invRayDirection.z);
527
+
528
+ if ((t.min > tz.max) || (tz.min > t.max)) {
529
+ return false;
530
+ }
531
+
532
+ if (tz.min > t.min || Number.isNaN(t.min)) {
533
+ t.min = tz.min;
534
+ }
535
+
536
+ if (tz.max < t.max || Number.isNaN(t.max)) {
537
+ t.max = tz.max;
538
+ }
539
+
540
+ // return point closest to the ray (positive side)
541
+ if (t.max < 0) {
542
+ return false;
543
+ }
544
+
545
+ return true;
546
+ }
547
+
548
+ private intersectRayTriangle(
549
+ a: NS_THREE.Vector3,
550
+ b: NS_THREE.Vector3,
551
+ c: NS_THREE.Vector3,
552
+ rayOrigin: NS_THREE.Vector3,
553
+ rayDirection: NS_THREE.Vector3,
554
+ backfaceCulling: boolean,
555
+ ): NS_THREE.Vector3|null {
556
+ const { THREE } = Externals.getInstance();
557
+ // Compute the offset origin, edges, and normal.
558
+ const diff = new THREE.Vector3();
559
+ const edge1 = new THREE.Vector3();
560
+ const edge2 = new THREE.Vector3();
561
+ const normal = new THREE.Vector3();
562
+
563
+ // from http://www.geometrictools.com/LibMathematics/Intersection/Wm5IntrRay3Triangle3.cpp
564
+
565
+ edge1.subVectors(b, a);
566
+ edge2.subVectors(c, a);
567
+ normal.crossVectors(edge1, edge2);
568
+
569
+ // Solve Q + t*D = b1*E1 + bL*E2 (Q = kDiff, D = ray direction,
570
+ // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by
571
+ // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))
572
+ // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))
573
+ // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)
574
+ let DdN = rayDirection.dot(normal);
575
+ let sign;
576
+
577
+ if (DdN > 0) {
578
+ if (backfaceCulling) {
579
+ return null;
580
+ }
581
+
582
+ sign = 1;
583
+ } else if (DdN < 0) {
584
+ sign = -1;
585
+ DdN = -DdN;
586
+ } else {
587
+ return null;
588
+ }
589
+
590
+ diff.subVectors(rayOrigin, a);
591
+ const DdQxE2 = sign * rayDirection.dot(edge2.crossVectors(diff, edge2));
592
+
593
+ // b1 < 0, no intersection
594
+ if (DdQxE2 < 0) {
595
+ return null;
596
+ }
597
+
598
+ const DdE1xQ = sign * rayDirection.dot(edge1.cross(diff));
599
+
600
+ // b2 < 0, no intersection
601
+ if (DdE1xQ < 0) {
602
+ return null;
603
+ }
604
+
605
+ // b1+b2 > 1, no intersection
606
+ if (DdQxE2 + DdE1xQ > DdN) {
607
+ return null;
608
+ }
609
+
610
+ // Line intersects triangle, check if ray does.
611
+ const QdN = -sign * diff.dot(normal);
612
+
613
+ // t < 0, no intersection
614
+ if (QdN < 0) {
615
+ return null;
616
+ }
617
+
618
+ // Ray intersects triangle.
619
+ const t = QdN / DdN;
620
+ const result = new THREE.Vector3();
621
+ return result.copy(rayDirection).multiplyScalar(t).add(rayOrigin);
622
+ }
623
+
624
+ private static addTriangles(triangles: NS_THREE.Vector3[][], threeObj: NS_THREE.Object3D): void {
625
+ // threeObj.children.forEach((child: Object3D) => {
626
+ // // console.info('#BVHTree# addTriangles child:', child);
627
+ // this.addTriangles(triangles, child);
628
+ // });
629
+ const { THREE } = Externals.getInstance();
630
+ if (!(threeObj instanceof THREE.Mesh)) {
631
+ // console.log('#BVHTree# addTriangles returns');
632
+ return;
633
+ }
634
+ const threeMesh = threeObj as NS_THREE.Mesh;
635
+
636
+ const geometry = threeMesh.geometry as NS_THREE.BufferGeometry;
637
+ // 获得顶点数组
638
+ const vertexArr = geometry.attributes.position.array;
639
+ // console.info('#BVHTree# vertexArray:', vertexArr);
640
+ // 获得索引数组
641
+ const indexArr = geometry.index ? geometry.index.array : null;
642
+ let triangleCount = 0;
643
+ if (indexArr) {
644
+ // 如果索引数组存在,利用索引数组和顶点数组构建bvhtree
645
+ triangleCount = indexArr.length / 3;
646
+ // console.log(`#BVHTree# addTriangles #0 triangleCount=${triangleCount}`);
647
+ // triangles.length = triangleCount;
648
+ for (let i = 0; i < triangleCount; i += 1) {
649
+ triangles.push([
650
+ new THREE.Vector3(vertexArr[3 * indexArr[3 * i]],
651
+ vertexArr[3 * indexArr[3 * i] + 1],
652
+ vertexArr[3 * indexArr[3 * i] + 2]),
653
+ new THREE.Vector3(vertexArr[3 * indexArr[3 * i + 1]],
654
+ vertexArr[3 * indexArr[3 * i + 1] + 1],
655
+ vertexArr[3 * indexArr[3 * i + 1] + 2]),
656
+ new THREE.Vector3(vertexArr[3 * indexArr[3 * i + 2]],
657
+ vertexArr[3 * indexArr[3 * i + 2] + 1],
658
+ vertexArr[3 * indexArr[3 * i + 2] + 2]),
659
+ ]);
660
+ }
661
+ } else {
662
+ // 如果索引数组不存在,通过顶点数组构建bvhtree
663
+ triangleCount = vertexArr.length / 9;
664
+ // console.log(`#BVHTree# addTriangles #1 triangleCount=${triangleCount}`);
665
+ // triangles.length = triangleCount;
666
+ for (let i = 0; i < triangleCount; i += 1) {
667
+ triangles.push([
668
+ new THREE.Vector3(vertexArr[i * 9], vertexArr[i * 9 + 1], vertexArr[i * 9 + 2]),
669
+ new THREE.Vector3(vertexArr[i * 9 + 3], vertexArr[i * 9 + 4], vertexArr[i * 9 + 5]),
670
+ new THREE.Vector3(vertexArr[i * 9 + 6], vertexArr[i * 9 + 7], vertexArr[i * 9 + 8]),
671
+ ]);
672
+ }
673
+ }
674
+ }
675
+
676
+ /**
677
+ * 构建bvhtree
678
+ * @ignore
679
+ * @param {Object3D} threeObj 需要创建BVH树的Object3D根对象
680
+ * @returns {BVHTree}
681
+ */
682
+ public static createBVHTree(threeObj: NS_THREE.Object3D): BVHTree {
683
+ // threeObj.updateWorldMatrix(false, true);
684
+ const triangles: NS_THREE.Vector3[][] = [];
685
+ // this.addTriangles(triangles, threeObj);
686
+ threeObj.traverse((obj: NS_THREE.Object3D) => {
687
+ this.addTriangles(triangles, obj);
688
+ });
689
+ // console.info('#BVHTree# triangles:', triangles);
690
+ const bvh = new BVHTree(triangles, 7);
691
+ return bvh;
692
+ }
693
+ }
694
+
695
+ export { BVHTree, BVHNode, IntersectResult };