angular-three-soba 2.0.0-beta.9 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/README.md +62 -4
  2. package/abstractions/README.md +279 -2
  3. package/abstractions/index.d.ts +13 -6
  4. package/abstractions/lib/billboard.d.ts +19 -0
  5. package/abstractions/lib/catmull-rom-line.d.ts +617 -0
  6. package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
  7. package/abstractions/lib/edges.d.ts +800 -0
  8. package/abstractions/lib/gradient-texture.d.ts +24 -0
  9. package/abstractions/lib/grid.d.ts +315 -0
  10. package/abstractions/lib/helper.d.ts +25 -0
  11. package/abstractions/lib/line.d.ts +41 -0
  12. package/abstractions/lib/prism-geometry.d.ts +32 -0
  13. package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
  14. package/abstractions/lib/rounded-box.d.ts +41 -0
  15. package/abstractions/lib/text-3d.d.ts +314 -0
  16. package/abstractions/lib/text.d.ts +54 -0
  17. package/cameras/README.md +91 -2
  18. package/cameras/index.d.ts +4 -4
  19. package/cameras/lib/camera-content.d.ts +10 -0
  20. package/cameras/lib/cube-camera.d.ts +38 -0
  21. package/cameras/lib/orthographic-camera.d.ts +40 -0
  22. package/cameras/lib/perspective-camera.d.ts +36 -0
  23. package/controls/README.md +96 -2
  24. package/controls/index.d.ts +4 -1
  25. package/controls/lib/camera-controls.d.ts +31 -0
  26. package/controls/lib/orbit-controls.d.ts +38 -0
  27. package/controls/lib/pivot-controls/axis-arrow.d.ts +31 -0
  28. package/controls/lib/pivot-controls/axis-rotator.d.ts +30 -0
  29. package/controls/lib/pivot-controls/pivot-controls.d.ts +110 -0
  30. package/controls/lib/pivot-controls/plane-slider.d.ts +32 -0
  31. package/controls/lib/pivot-controls/scaling-sphere.d.ts +32 -0
  32. package/controls/lib/scroll-controls.d.ts +78 -0
  33. package/esm2022/abstractions/index.mjs +14 -7
  34. package/esm2022/abstractions/lib/billboard.mjs +69 -0
  35. package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
  36. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
  37. package/esm2022/abstractions/lib/edges.mjs +70 -0
  38. package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
  39. package/esm2022/abstractions/lib/grid.mjs +103 -0
  40. package/esm2022/abstractions/lib/helper.mjs +76 -0
  41. package/esm2022/abstractions/lib/line.mjs +126 -0
  42. package/esm2022/abstractions/lib/prism-geometry.mjs +46 -0
  43. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
  44. package/esm2022/abstractions/lib/rounded-box.mjs +111 -0
  45. package/esm2022/abstractions/lib/text-3d.mjs +98 -0
  46. package/esm2022/abstractions/lib/text.mjs +91 -0
  47. package/esm2022/cameras/index.mjs +5 -5
  48. package/esm2022/cameras/lib/camera-content.mjs +14 -0
  49. package/esm2022/cameras/lib/cube-camera.mjs +111 -0
  50. package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
  51. package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
  52. package/esm2022/controls/index.mjs +5 -2
  53. package/esm2022/controls/lib/camera-controls.mjs +127 -0
  54. package/esm2022/controls/lib/orbit-controls.mjs +132 -0
  55. package/esm2022/controls/lib/pivot-controls/axis-arrow.mjs +263 -0
  56. package/esm2022/controls/lib/pivot-controls/axis-rotator.mjs +264 -0
  57. package/esm2022/controls/lib/pivot-controls/pivot-controls.mjs +340 -0
  58. package/esm2022/controls/lib/pivot-controls/plane-slider.mjs +266 -0
  59. package/esm2022/controls/lib/pivot-controls/scaling-sphere.mjs +232 -0
  60. package/esm2022/controls/lib/scroll-controls.mjs +268 -0
  61. package/esm2022/loaders/index.mjs +6 -5
  62. package/esm2022/loaders/lib/font-loader.mjs +49 -0
  63. package/esm2022/loaders/lib/gltf-loader.mjs +51 -0
  64. package/esm2022/loaders/lib/loader.mjs +109 -0
  65. package/esm2022/loaders/lib/progress.mjs +51 -0
  66. package/esm2022/loaders/lib/texture-loader.mjs +32 -0
  67. package/esm2022/materials/index.mjs +8 -7
  68. package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
  69. package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
  70. package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
  71. package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
  72. package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
  73. package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
  74. package/esm2022/materials/lib/point-material.mjs +33 -0
  75. package/esm2022/misc/index.mjs +14 -14
  76. package/esm2022/misc/lib/animations.mjs +71 -0
  77. package/esm2022/misc/lib/bake-shadows.mjs +26 -0
  78. package/esm2022/misc/lib/computed-attribute.mjs +55 -0
  79. package/esm2022/misc/lib/constants.mjs +5 -0
  80. package/esm2022/misc/lib/decal.mjs +139 -0
  81. package/esm2022/misc/lib/deprecated.mjs +15 -0
  82. package/esm2022/misc/lib/depth-buffer.mjs +39 -0
  83. package/esm2022/misc/lib/fbo.mjs +86 -0
  84. package/esm2022/misc/lib/html/html-content.mjs +327 -0
  85. package/esm2022/misc/lib/html/html.mjs +129 -0
  86. package/esm2022/misc/lib/html/utils.mjs +74 -0
  87. package/esm2022/misc/lib/intersect.mjs +52 -0
  88. package/esm2022/misc/lib/sampler.mjs +122 -0
  89. package/esm2022/misc/lib/scale-factor.mjs +29 -0
  90. package/esm2022/performances/index.mjs +7 -6
  91. package/esm2022/performances/lib/adaptive-dpr.mjs +52 -0
  92. package/esm2022/performances/lib/adaptive-events.mjs +28 -0
  93. package/esm2022/performances/lib/detailed.mjs +57 -0
  94. package/esm2022/performances/lib/instances/instances.mjs +183 -0
  95. package/esm2022/performances/lib/instances/position-mesh.mjs +51 -0
  96. package/esm2022/performances/lib/points/points.mjs +278 -0
  97. package/esm2022/performances/lib/points/position-point.mjs +53 -0
  98. package/esm2022/performances/lib/segments/segment-object.mjs +9 -0
  99. package/esm2022/performances/lib/segments/segments.mjs +129 -0
  100. package/esm2022/shaders/index.mjs +4 -18
  101. package/esm2022/shaders/lib/grid-material.mjs +81 -0
  102. package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
  103. package/esm2022/shaders/lib/point-material.mjs +24 -0
  104. package/esm2022/staging/index.mjs +20 -22
  105. package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
  106. package/esm2022/staging/lib/backdrop.mjs +73 -0
  107. package/esm2022/staging/lib/bb-anchor.mjs +58 -0
  108. package/esm2022/staging/lib/bounds.mjs +286 -0
  109. package/esm2022/staging/lib/camera-shake.mjs +69 -0
  110. package/esm2022/staging/lib/caustics.mjs +188 -0
  111. package/esm2022/staging/lib/center.mjs +118 -0
  112. package/esm2022/staging/lib/contact-shadows.mjs +214 -0
  113. package/esm2022/staging/lib/environment.mjs +481 -0
  114. package/esm2022/staging/lib/float.mjs +70 -0
  115. package/esm2022/staging/lib/lightformer.mjs +107 -0
  116. package/esm2022/staging/lib/mask.mjs +78 -0
  117. package/esm2022/staging/lib/matcap-texture.mjs +81 -0
  118. package/esm2022/staging/lib/normal-texture.mjs +81 -0
  119. package/esm2022/staging/lib/randomized-lights.mjs +104 -0
  120. package/esm2022/staging/lib/render-texture.mjs +203 -0
  121. package/esm2022/staging/lib/sky.mjs +86 -0
  122. package/esm2022/staging/lib/spot-light.mjs +453 -0
  123. package/esm2022/staging/lib/stage.mjs +236 -0
  124. package/esm2022/{utils/angular-three-soba-utils.mjs → stats/angular-three-soba-stats.mjs} +1 -1
  125. package/esm2022/stats/index.mjs +2 -0
  126. package/esm2022/stats/lib/stats.mjs +63 -0
  127. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
  128. package/esm2022/vanilla-exports/index.mjs +3 -0
  129. package/fesm2022/angular-three-soba-abstractions.mjs +884 -697
  130. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  131. package/fesm2022/angular-three-soba-cameras.mjs +261 -308
  132. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  133. package/fesm2022/angular-three-soba-controls.mjs +1776 -109
  134. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  135. package/fesm2022/angular-three-soba-loaders.mjs +191 -145
  136. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  137. package/fesm2022/angular-three-soba-materials.mjs +527 -748
  138. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  139. package/fesm2022/angular-three-soba-misc.mjs +783 -1935
  140. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  141. package/fesm2022/angular-three-soba-performances.mjs +591 -475
  142. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  143. package/fesm2022/angular-three-soba-shaders.mjs +51 -1369
  144. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  145. package/fesm2022/angular-three-soba-staging.mjs +2421 -3521
  146. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  147. package/fesm2022/angular-three-soba-stats.mjs +70 -0
  148. package/fesm2022/angular-three-soba-stats.mjs.map +1 -0
  149. package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
  150. package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
  151. package/loaders/README.md +130 -2
  152. package/loaders/index.d.ts +5 -4
  153. package/loaders/lib/font-loader.d.ts +27 -0
  154. package/loaders/lib/gltf-loader.d.ts +24 -0
  155. package/loaders/lib/loader.d.ts +29 -0
  156. package/loaders/lib/progress.d.ts +9 -0
  157. package/loaders/lib/texture-loader.d.ts +13 -0
  158. package/materials/README.md +160 -2
  159. package/materials/index.d.ts +7 -6
  160. package/materials/lib/custom-shader-material.d.ts +20 -0
  161. package/materials/lib/mesh-distort-material.d.ts +17 -0
  162. package/materials/lib/mesh-reflector-material.d.ts +51 -0
  163. package/materials/lib/mesh-refraction-material.d.ts +42 -0
  164. package/materials/lib/mesh-transmission-material.d.ts +77 -0
  165. package/materials/lib/mesh-wobble-material.d.ts +15 -0
  166. package/materials/lib/point-material.d.ts +11 -0
  167. package/metadata.json +1 -1
  168. package/misc/README.md +217 -2
  169. package/misc/index.d.ts +13 -13
  170. package/misc/lib/animations.d.ts +17 -0
  171. package/misc/lib/computed-attribute.d.ts +64 -0
  172. package/misc/lib/constants.d.ts +1 -0
  173. package/misc/lib/decal.d.ts +27 -0
  174. package/misc/lib/deprecated.d.ts +14 -0
  175. package/misc/lib/depth-buffer.d.ts +8 -0
  176. package/misc/lib/fbo.d.ts +46 -0
  177. package/misc/lib/html/html-content.d.ts +47 -0
  178. package/misc/lib/html/html.d.ts +30 -0
  179. package/misc/lib/html/utils.d.ts +14 -0
  180. package/misc/lib/intersect.d.ts +13 -0
  181. package/misc/lib/sampler.d.ts +73 -0
  182. package/misc/lib/scale-factor.d.ts +3 -0
  183. package/package.json +90 -50
  184. package/performances/index.d.ts +6 -5
  185. package/performances/lib/adaptive-dpr.d.ts +7 -0
  186. package/performances/{adaptive-events → lib}/adaptive-events.d.ts +0 -3
  187. package/performances/lib/detailed.d.ts +17 -0
  188. package/performances/lib/instances/instances.d.ts +122 -0
  189. package/performances/lib/instances/position-mesh.d.ts +20 -0
  190. package/performances/lib/points/points.d.ts +224 -0
  191. package/performances/lib/points/position-point.d.ts +21 -0
  192. package/performances/lib/segments/segment-object.d.ts +17 -0
  193. package/performances/lib/segments/segments.d.ts +97 -0
  194. package/shaders/index.d.ts +3 -17
  195. package/shaders/lib/grid-material.d.ts +69 -0
  196. package/shaders/lib/mesh-refraction-material.d.ts +11 -0
  197. package/shaders/lib/point-material.d.ts +14 -0
  198. package/staging/README.md +473 -2
  199. package/staging/index.d.ts +19 -21
  200. package/staging/lib/accumulative-shadows.d.ts +75 -0
  201. package/staging/lib/backdrop.d.ts +22 -0
  202. package/staging/lib/bb-anchor.d.ts +17 -0
  203. package/staging/lib/bounds.d.ts +47 -0
  204. package/staging/lib/camera-shake.d.ts +29 -0
  205. package/staging/lib/caustics.d.ts +53 -0
  206. package/staging/lib/center.d.ts +390 -0
  207. package/staging/lib/contact-shadows.d.ts +55 -0
  208. package/staging/lib/environment.d.ts +132 -0
  209. package/staging/lib/float.d.ts +20 -0
  210. package/staging/lib/lightformer.d.ts +310 -0
  211. package/staging/lib/mask.d.ts +30 -0
  212. package/staging/lib/matcap-texture.d.ts +32 -0
  213. package/staging/lib/normal-texture.d.ts +37 -0
  214. package/staging/lib/randomized-lights.d.ts +54 -0
  215. package/staging/lib/render-texture.d.ts +64 -0
  216. package/staging/lib/sky.d.ts +32 -0
  217. package/staging/lib/spot-light.d.ts +119 -0
  218. package/staging/lib/stage.d.ts +352 -0
  219. package/stats/README.md +3 -0
  220. package/stats/index.d.ts +1 -0
  221. package/stats/lib/stats.d.ts +14 -0
  222. package/vanilla-exports/README.md +3 -0
  223. package/vanilla-exports/index.d.ts +27 -0
  224. package/web-types.json +1 -1
  225. package/abstractions/billboard/billboard.d.ts +0 -28
  226. package/abstractions/detailed/detailed.d.ts +0 -26
  227. package/abstractions/edges/edges.d.ts +0 -34
  228. package/abstractions/grid/grid.d.ts +0 -50
  229. package/abstractions/text/text.d.ts +0 -82
  230. package/abstractions/text-3d/text-3d.d.ts +0 -81
  231. package/assets/distort.vert.glsl +0 -1
  232. package/cameras/camera/camera-content.d.ts +0 -13
  233. package/cameras/camera/camera.d.ts +0 -26
  234. package/cameras/cube-camera/cube-camera.d.ts +0 -69
  235. package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
  236. package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
  237. package/controls/orbit-controls/orbit-controls.d.ts +0 -54
  238. package/esm2022/abstractions/billboard/billboard.mjs +0 -74
  239. package/esm2022/abstractions/detailed/detailed.mjs +0 -64
  240. package/esm2022/abstractions/edges/edges.mjs +0 -88
  241. package/esm2022/abstractions/grid/grid.mjs +0 -180
  242. package/esm2022/abstractions/text/text.mjs +0 -274
  243. package/esm2022/abstractions/text-3d/text-3d.mjs +0 -165
  244. package/esm2022/cameras/camera/camera-content.mjs +0 -20
  245. package/esm2022/cameras/camera/camera.mjs +0 -77
  246. package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
  247. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
  248. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
  249. package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -181
  250. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
  251. package/esm2022/loaders/loader/loader.mjs +0 -138
  252. package/esm2022/loaders/progress/progress.mjs +0 -45
  253. package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
  254. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
  255. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
  256. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
  257. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
  258. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  259. package/esm2022/materials/point-material/point-material.mjs +0 -46
  260. package/esm2022/misc/animations/animations.mjs +0 -59
  261. package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
  262. package/esm2022/misc/caustics/caustics.mjs +0 -387
  263. package/esm2022/misc/decal/decal.mjs +0 -187
  264. package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
  265. package/esm2022/misc/example/example.mjs +0 -160
  266. package/esm2022/misc/fbo/fbo.mjs +0 -47
  267. package/esm2022/misc/html/html-wrapper.mjs +0 -478
  268. package/esm2022/misc/html/html.mjs +0 -304
  269. package/esm2022/misc/sampler/sampler.mjs +0 -142
  270. package/esm2022/misc/shadow/shadow.mjs +0 -111
  271. package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
  272. package/esm2022/misc/trail/trail.mjs +0 -209
  273. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
  274. package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
  275. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
  276. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
  277. package/esm2022/modifiers/index.mjs +0 -2
  278. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
  279. package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
  280. package/esm2022/performances/points/points-input.mjs +0 -64
  281. package/esm2022/performances/points/points.mjs +0 -329
  282. package/esm2022/performances/points/position-point.mjs +0 -54
  283. package/esm2022/performances/segments/segment-object.mjs +0 -9
  284. package/esm2022/performances/segments/segments.mjs +0 -182
  285. package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
  286. package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
  287. package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
  288. package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
  289. package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
  290. package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
  291. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
  292. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  293. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
  294. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  295. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  296. package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
  297. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
  298. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
  299. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
  300. package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
  301. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
  302. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
  303. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
  304. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
  305. package/esm2022/staging/backdrop/backdrop.mjs +0 -77
  306. package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -70
  307. package/esm2022/staging/bounds/bounds.mjs +0 -308
  308. package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
  309. package/esm2022/staging/center/center.mjs +0 -163
  310. package/esm2022/staging/cloud/cloud.mjs +0 -158
  311. package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
  312. package/esm2022/staging/environment/assets.mjs +0 -13
  313. package/esm2022/staging/environment/environment-cube.mjs +0 -47
  314. package/esm2022/staging/environment/environment-ground.mjs +0 -41
  315. package/esm2022/staging/environment/environment-input.mjs +0 -119
  316. package/esm2022/staging/environment/environment-map.mjs +0 -53
  317. package/esm2022/staging/environment/environment-portal.mjs +0 -113
  318. package/esm2022/staging/environment/environment.mjs +0 -61
  319. package/esm2022/staging/environment/utils.mjs +0 -105
  320. package/esm2022/staging/float/float.mjs +0 -94
  321. package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
  322. package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
  323. package/esm2022/staging/sky/sky.mjs +0 -119
  324. package/esm2022/staging/sparkles/sparkles.mjs +0 -164
  325. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
  326. package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
  327. package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
  328. package/esm2022/staging/spot-light/spot-light.mjs +0 -81
  329. package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
  330. package/esm2022/staging/stage/stage.mjs +0 -388
  331. package/esm2022/staging/stars/stars.mjs +0 -147
  332. package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
  333. package/esm2022/staging/wireframe/wireframe.mjs +0 -224
  334. package/esm2022/utils/content/content.mjs +0 -15
  335. package/esm2022/utils/index.mjs +0 -2
  336. package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
  337. package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
  338. package/fesm2022/angular-three-soba-utils.mjs +0 -22
  339. package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
  340. package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
  341. package/loaders/loader/loader.d.ts +0 -33
  342. package/loaders/progress/progress.d.ts +0 -9
  343. package/loaders/texture-loader/texture-loader.d.ts +0 -7
  344. package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
  345. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
  346. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
  347. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
  348. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
  349. package/materials/point-material/point-material.d.ts +0 -24
  350. package/misc/animations/animations.d.ts +0 -15
  351. package/misc/caustics/caustics.d.ts +0 -87
  352. package/misc/decal/decal.d.ts +0 -49
  353. package/misc/depth-buffer/depth-buffer.d.ts +0 -9
  354. package/misc/example/example.d.ts +0 -81
  355. package/misc/fbo/fbo.d.ts +0 -17
  356. package/misc/html/html-wrapper.d.ts +0 -559
  357. package/misc/html/html.d.ts +0 -214
  358. package/misc/sampler/sampler.d.ts +0 -67
  359. package/misc/shadow/shadow.d.ts +0 -37
  360. package/misc/stats-gl/stats-gl.d.ts +0 -24
  361. package/misc/trail/trail.d.ts +0 -57
  362. package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
  363. package/misc/trail-texture/trail-texture.d.ts +0 -50
  364. package/modifiers/README.md +0 -3
  365. package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
  366. package/modifiers/index.d.ts +0 -1
  367. package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
  368. package/performances/points/points-input.d.ts +0 -32
  369. package/performances/points/points.d.ts +0 -92
  370. package/performances/points/position-point.d.ts +0 -11
  371. package/performances/segments/segment-object.d.ts +0 -7
  372. package/performances/segments/segments.d.ts +0 -124
  373. package/shaders/blur-pass/blur-pass.d.ts +0 -23
  374. package/shaders/caustics/caustics-material.d.ts +0 -4
  375. package/shaders/caustics/caustics-projection-material.d.ts +0 -4
  376. package/shaders/convolution-material/convolution-material.d.ts +0 -7
  377. package/shaders/discard-material/discard-material.d.ts +0 -3
  378. package/shaders/grid-material/grid-material.d.ts +0 -37
  379. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
  380. package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
  381. package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
  382. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
  383. package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
  384. package/shaders/shader-material/shader-material.d.ts +0 -6
  385. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
  386. package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
  387. package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
  388. package/shaders/star-field-material/star-field-material.d.ts +0 -13
  389. package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
  390. package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
  391. package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
  392. package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
  393. package/staging/backdrop/backdrop.d.ts +0 -30
  394. package/staging/bb-anchor/bb-anchor.d.ts +0 -27
  395. package/staging/bounds/bounds.d.ts +0 -134
  396. package/staging/camera-shake/camera-shake.d.ts +0 -43
  397. package/staging/center/center.d.ts +0 -70
  398. package/staging/cloud/cloud.d.ts +0 -51
  399. package/staging/contact-shadows/contact-shadows.d.ts +0 -70
  400. package/staging/environment/assets.d.ts +0 -13
  401. package/staging/environment/environment-cube.d.ts +0 -15
  402. package/staging/environment/environment-ground.d.ts +0 -13
  403. package/staging/environment/environment-input.d.ts +0 -68
  404. package/staging/environment/environment-map.d.ts +0 -16
  405. package/staging/environment/environment-portal.d.ts +0 -18
  406. package/staging/environment/environment.d.ts +0 -8
  407. package/staging/environment/utils.d.ts +0 -7
  408. package/staging/float/float.d.ts +0 -31
  409. package/staging/matcap-texture/matcap-texture.d.ts +0 -13
  410. package/staging/normal-texture/normal-texture.d.ts +0 -16
  411. package/staging/sky/sky.d.ts +0 -48
  412. package/staging/sparkles/sparkles.d.ts +0 -63
  413. package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
  414. package/staging/spot-light/shadow-mesh.d.ts +0 -37
  415. package/staging/spot-light/spot-light-input.d.ts +0 -38
  416. package/staging/spot-light/spot-light.d.ts +0 -39
  417. package/staging/spot-light/volumetric-mesh.d.ts +0 -24
  418. package/staging/stage/stage.d.ts +0 -130
  419. package/staging/stars/stars.d.ts +0 -45
  420. package/staging/wireframe/wireframe-input.d.ts +0 -65
  421. package/staging/wireframe/wireframe.d.ts +0 -28
  422. package/utils/README.md +0 -3
  423. package/utils/content/content.d.ts +0 -8
  424. package/utils/index.d.ts +0 -1
  425. /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
@@ -0,0 +1,183 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, inject, input, viewChild, } from '@angular/core';
2
+ import { checkUpdate, extend, injectBeforeRender, NgtArgs, omit, pick, resolveRef, } from 'angular-three';
3
+ import { setUpdateRange } from 'angular-three-soba/misc';
4
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
5
+ import { mergeInputs } from 'ngxtension/inject-inputs';
6
+ import { DynamicDrawUsage, InstancedBufferAttribute, InstancedMesh, Matrix4, Quaternion, Vector3 } from 'three';
7
+ import { PositionMesh } from './position-mesh';
8
+ import * as i0 from "@angular/core";
9
+ const parentMatrix = new Matrix4();
10
+ const instanceMatrix = new Matrix4();
11
+ const tempMatrix = new Matrix4();
12
+ const translation = new Vector3();
13
+ const rotation = new Quaternion();
14
+ const scale = new Vector3();
15
+ export class NgtsInstance {
16
+ constructor() {
17
+ this.options = input({});
18
+ this.instances = inject(NgtsInstances);
19
+ this.positionMeshRef = viewChild.required('positionMesh');
20
+ extend({ PositionMesh });
21
+ const autoEffect = injectAutoEffect();
22
+ afterNextRender(() => {
23
+ autoEffect(() => {
24
+ return this.instances.subscribe(this.positionMeshRef().nativeElement);
25
+ });
26
+ });
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsInstance, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsInstance, isStandalone: true, selector: "ngts-instance", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "positionMeshRef", first: true, predicate: ["positionMesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
30
+ <ngt-position-mesh #positionMesh [instance]="instances.instancedMeshRef()" [parameters]="options()">
31
+ <ng-content />
32
+ </ngt-position-mesh>
33
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsInstance, decorators: [{
36
+ type: Component,
37
+ args: [{
38
+ selector: 'ngts-instance',
39
+ standalone: true,
40
+ template: `
41
+ <ngt-position-mesh #positionMesh [instance]="instances.instancedMeshRef()" [parameters]="options()">
42
+ <ng-content />
43
+ </ngt-position-mesh>
44
+ `,
45
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
46
+ changeDetection: ChangeDetectionStrategy.OnPush,
47
+ }]
48
+ }], ctorParameters: () => [] });
49
+ const defaultOptions = {
50
+ limit: 1000,
51
+ frames: Infinity,
52
+ };
53
+ export class NgtsInstances {
54
+ constructor() {
55
+ this.DynamicDrawUsage = DynamicDrawUsage;
56
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
57
+ this.parameters = omit(this.options, ['limit', 'frames', 'range']);
58
+ this.instancedMeshRef = viewChild.required('instancedMesh');
59
+ this.limit = pick(this.options, 'limit');
60
+ this.buffers = computed(() => {
61
+ const limit = this.limit();
62
+ const matrices = new Float32Array(limit * 16);
63
+ for (let i = 0; i < limit; i++) {
64
+ tempMatrix.identity().toArray(matrices, i * 16);
65
+ }
66
+ const colors = new Float32Array([...Array.from({ length: limit * 3 }, () => 1)]);
67
+ return { matrices, colors };
68
+ });
69
+ this.instances = [];
70
+ extend({ InstancedMesh, InstancedBufferAttribute });
71
+ const autoEffect = injectAutoEffect();
72
+ afterNextRender(() => {
73
+ autoEffect(() => {
74
+ const instancedMesh = this.instancedMeshRef()?.nativeElement;
75
+ if (!instancedMesh)
76
+ return;
77
+ checkUpdate(instancedMesh.instanceMatrix);
78
+ });
79
+ });
80
+ let iterations = 0;
81
+ let count = 0;
82
+ injectBeforeRender(() => {
83
+ const instancedMesh = this.instancedMeshRef()?.nativeElement;
84
+ if (!instancedMesh)
85
+ return;
86
+ const { frames, limit, range } = this.options();
87
+ const { matrices, colors } = this.buffers();
88
+ if (frames === Infinity || iterations < frames) {
89
+ instancedMesh.updateMatrix();
90
+ instancedMesh.updateMatrixWorld();
91
+ parentMatrix.copy(instancedMesh.matrixWorld).invert();
92
+ count = Math.min(limit, range !== undefined ? range : limit, this.instances.length);
93
+ instancedMesh.count = count;
94
+ setUpdateRange(instancedMesh.instanceMatrix, { offset: 0, count: count * 16 });
95
+ if (instancedMesh.instanceColor) {
96
+ setUpdateRange(instancedMesh.instanceColor, { offset: 0, count: count * 3 });
97
+ }
98
+ for (let i = 0; i < this.instances.length; i++) {
99
+ const instance = resolveRef(this.instances[i]);
100
+ if (instance) {
101
+ // Multiply the inverse of the InstancedMesh world matrix or else
102
+ // Instances will be double-transformed if <Instances> isn't at identity
103
+ instance.matrixWorld.decompose(translation, rotation, scale);
104
+ instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);
105
+ instanceMatrix.toArray(matrices, i * 16);
106
+ checkUpdate(instancedMesh.instanceMatrix);
107
+ instance.color.toArray(colors, i * 3);
108
+ checkUpdate(instancedMesh.instanceColor);
109
+ }
110
+ }
111
+ iterations++;
112
+ }
113
+ });
114
+ }
115
+ subscribe(ref) {
116
+ this.instances.push(ref);
117
+ return () => {
118
+ this.instances = this.instances.filter((i) => i !== ref);
119
+ };
120
+ }
121
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
122
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsInstances, isStandalone: true, selector: "ngts-instances", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "instancedMeshRef", first: true, predicate: ["instancedMesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
123
+ <ngt-instanced-mesh
124
+ #instancedMesh
125
+ [userData]="{ instances }"
126
+ [matrixAutoUpdate]="false"
127
+ [raycast]="null"
128
+ [parameters]="parameters()"
129
+ >
130
+ <ngt-instanced-buffer-attribute
131
+ attach="instanceMatrix"
132
+ [usage]="DynamicDrawUsage"
133
+ [count]="buffers().matrices.length / 16"
134
+ [array]="buffers().matrices"
135
+ [itemSize]="16"
136
+ />
137
+ <ngt-instanced-buffer-attribute
138
+ attach="instanceColor"
139
+ [usage]="DynamicDrawUsage"
140
+ [count]="buffers().colors.length / 3"
141
+ [array]="buffers().colors"
142
+ [itemSize]="3"
143
+ />
144
+ <ng-content />
145
+ </ngt-instanced-mesh>
146
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
147
+ }
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsInstances, decorators: [{
149
+ type: Component,
150
+ args: [{
151
+ selector: 'ngts-instances',
152
+ standalone: true,
153
+ template: `
154
+ <ngt-instanced-mesh
155
+ #instancedMesh
156
+ [userData]="{ instances }"
157
+ [matrixAutoUpdate]="false"
158
+ [raycast]="null"
159
+ [parameters]="parameters()"
160
+ >
161
+ <ngt-instanced-buffer-attribute
162
+ attach="instanceMatrix"
163
+ [usage]="DynamicDrawUsage"
164
+ [count]="buffers().matrices.length / 16"
165
+ [array]="buffers().matrices"
166
+ [itemSize]="16"
167
+ />
168
+ <ngt-instanced-buffer-attribute
169
+ attach="instanceColor"
170
+ [usage]="DynamicDrawUsage"
171
+ [count]="buffers().colors.length / 3"
172
+ [array]="buffers().colors"
173
+ [itemSize]="3"
174
+ />
175
+ <ng-content />
176
+ </ngt-instanced-mesh>
177
+ `,
178
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
179
+ changeDetection: ChangeDetectionStrategy.OnPush,
180
+ imports: [NgtArgs],
181
+ }]
182
+ }], ctorParameters: () => [] });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3BlcmZvcm1hbmNlcy9zcmMvbGliL2luc3RhbmNlcy9pbnN0YW5jZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFFdEIsTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNOLFdBQVcsRUFDWCxNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLE9BQU8sRUFFUCxJQUFJLEVBQ0osSUFBSSxFQUNKLFVBQVUsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEgsT0FBTyxFQUFtQixZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNuQyxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7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QUcsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQztJQUNILENBQUM7OEdBaEZXLGFBQWE7a0dBQWIsYUFBYSx1VkE3QmY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdCVDs7MkZBS1csYUFBYTtrQkFoQ3pCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBd0JUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRjaGVja1VwZGF0ZSxcblx0ZXh0ZW5kLFxuXHRpbmplY3RCZWZvcmVSZW5kZXIsXG5cdE5ndEFyZ3MsXG5cdE5ndEluc3RhbmNlZE1lc2gsXG5cdG9taXQsXG5cdHBpY2ssXG5cdHJlc29sdmVSZWYsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgc2V0VXBkYXRlUmFuZ2UgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvbWlzYyc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBEeW5hbWljRHJhd1VzYWdlLCBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUsIEluc3RhbmNlZE1lc2gsIE1hdHJpeDQsIFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RQb3NpdGlvbk1lc2gsIFBvc2l0aW9uTWVzaCB9IGZyb20gJy4vcG9zaXRpb24tbWVzaCc7XG5cbmNvbnN0IHBhcmVudE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5jb25zdCBpbnN0YW5jZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5jb25zdCB0ZW1wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IHRyYW5zbGF0aW9uID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcbmNvbnN0IHNjYWxlID0gbmV3IFZlY3RvcjMoKTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1pbnN0YW5jZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wb3NpdGlvbi1tZXNoICNwb3NpdGlvbk1lc2ggW2luc3RhbmNlXT1cImluc3RhbmNlcy5pbnN0YW5jZWRNZXNoUmVmKClcIiBbcGFyYW1ldGVyc109XCJvcHRpb25zKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtcG9zaXRpb24tbWVzaD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0luc3RhbmNlIHtcblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIFBhcnRpYWw8Tmd0UG9zaXRpb25NZXNoPik7XG5cblx0aW5zdGFuY2VzID0gaW5qZWN0KE5ndHNJbnN0YW5jZXMpO1xuXG5cdHBvc2l0aW9uTWVzaFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPFBvc2l0aW9uTWVzaD4+KCdwb3NpdGlvbk1lc2gnKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBQb3NpdGlvbk1lc2ggfSk7XG5cblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pbnN0YW5jZXMuc3Vic2NyaWJlKHRoaXMucG9zaXRpb25NZXNoUmVmKCkubmF0aXZlRWxlbWVudCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNJbnN0YW5jZXNPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RJbnN0YW5jZWRNZXNoPiB7XG5cdHJhbmdlPzogbnVtYmVyO1xuXHRsaW1pdDogbnVtYmVyO1xuXHRmcmFtZXM6IG51bWJlcjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNJbnN0YW5jZXNPcHRpb25zID0ge1xuXHRsaW1pdDogMTAwMCxcblx0ZnJhbWVzOiBJbmZpbml0eSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtaW5zdGFuY2VzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWluc3RhbmNlZC1tZXNoXG5cdFx0XHQjaW5zdGFuY2VkTWVzaFxuXHRcdFx0W3VzZXJEYXRhXT1cInsgaW5zdGFuY2VzIH1cIlxuXHRcdFx0W21hdHJpeEF1dG9VcGRhdGVdPVwiZmFsc2VcIlxuXHRcdFx0W3JheWNhc3RdPVwibnVsbFwiXG5cdFx0XHRbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIlxuXHRcdD5cblx0XHRcdDxuZ3QtaW5zdGFuY2VkLWJ1ZmZlci1hdHRyaWJ1dGVcblx0XHRcdFx0YXR0YWNoPVwiaW5zdGFuY2VNYXRyaXhcIlxuXHRcdFx0XHRbdXNhZ2VdPVwiRHluYW1pY0RyYXdVc2FnZVwiXG5cdFx0XHRcdFtjb3VudF09XCJidWZmZXJzKCkubWF0cmljZXMubGVuZ3RoIC8gMTZcIlxuXHRcdFx0XHRbYXJyYXldPVwiYnVmZmVycygpLm1hdHJpY2VzXCJcblx0XHRcdFx0W2l0ZW1TaXplXT1cIjE2XCJcblx0XHRcdC8+XG5cdFx0XHQ8bmd0LWluc3RhbmNlZC1idWZmZXItYXR0cmlidXRlXG5cdFx0XHRcdGF0dGFjaD1cImluc3RhbmNlQ29sb3JcIlxuXHRcdFx0XHRbdXNhZ2VdPVwiRHluYW1pY0RyYXdVc2FnZVwiXG5cdFx0XHRcdFtjb3VudF09XCJidWZmZXJzKCkuY29sb3JzLmxlbmd0aCAvIDNcIlxuXHRcdFx0XHRbYXJyYXldPVwiYnVmZmVycygpLmNvbG9yc1wiXG5cdFx0XHRcdFtpdGVtU2l6ZV09XCIzXCJcblx0XHRcdC8+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LWluc3RhbmNlZC1tZXNoPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNJbnN0YW5jZXMge1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgRHluYW1pY0RyYXdVc2FnZSA9IER5bmFtaWNEcmF3VXNhZ2U7XG5cblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnbGltaXQnLCAnZnJhbWVzJywgJ3JhbmdlJ10pO1xuXG5cdGluc3RhbmNlZE1lc2hSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxJbnN0YW5jZWRNZXNoPj4oJ2luc3RhbmNlZE1lc2gnKTtcblxuXHRsaW1pdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGltaXQnKTtcblxuXHRidWZmZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGxpbWl0ID0gdGhpcy5saW1pdCgpO1xuXHRcdGNvbnN0IG1hdHJpY2VzID0gbmV3IEZsb2F0MzJBcnJheShsaW1pdCAqIDE2KTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGltaXQ7IGkrKykge1xuXHRcdFx0dGVtcE1hdHJpeC5pZGVudGl0eSgpLnRvQXJyYXkobWF0cmljZXMsIGkgKiAxNik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbLi4uQXJyYXkuZnJvbSh7IGxlbmd0aDogbGltaXQgKiAzIH0sICgpID0+IDEpXSk7XG5cdFx0cmV0dXJuIHsgbWF0cmljZXMsIGNvbG9ycyB9O1xuXHR9KTtcblxuXHRpbnN0YW5jZXM6IEFycmF5PEVsZW1lbnRSZWY8UG9zaXRpb25NZXNoPiB8IFBvc2l0aW9uTWVzaD4gPSBbXTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBJbnN0YW5jZWRNZXNoLCBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgfSk7XG5cblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpbnN0YW5jZWRNZXNoID0gdGhpcy5pbnN0YW5jZWRNZXNoUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmICghaW5zdGFuY2VkTWVzaCkgcmV0dXJuO1xuXHRcdFx0XHRjaGVja1VwZGF0ZShpbnN0YW5jZWRNZXNoLmluc3RhbmNlTWF0cml4KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0bGV0IGl0ZXJhdGlvbnMgPSAwO1xuXHRcdGxldCBjb3VudCA9IDA7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaW5zdGFuY2VkTWVzaCA9IHRoaXMuaW5zdGFuY2VkTWVzaFJlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKCFpbnN0YW5jZWRNZXNoKSByZXR1cm47XG5cdFx0XHRjb25zdCB7IGZyYW1lcywgbGltaXQsIHJhbmdlIH0gPSB0aGlzLm9wdGlvbnMoKTtcblx0XHRcdGNvbnN0IHsgbWF0cmljZXMsIGNvbG9ycyB9ID0gdGhpcy5idWZmZXJzKCk7XG5cdFx0XHRpZiAoZnJhbWVzID09PSBJbmZpbml0eSB8fCBpdGVyYXRpb25zIDwgZnJhbWVzKSB7XG5cdFx0XHRcdGluc3RhbmNlZE1lc2gudXBkYXRlTWF0cml4KCk7XG5cdFx0XHRcdGluc3RhbmNlZE1lc2gudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRcdFx0cGFyZW50TWF0cml4LmNvcHkoaW5zdGFuY2VkTWVzaC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cblx0XHRcdFx0Y291bnQgPSBNYXRoLm1pbihsaW1pdCwgcmFuZ2UgIT09IHVuZGVmaW5lZCA/IHJhbmdlIDogbGltaXQsIHRoaXMuaW5zdGFuY2VzLmxlbmd0aCk7XG5cdFx0XHRcdGluc3RhbmNlZE1lc2guY291bnQgPSBjb3VudDtcblx0XHRcdFx0c2V0VXBkYXRlUmFuZ2UoaW5zdGFuY2VkTWVzaC5pbnN0YW5jZU1hdHJpeCwgeyBvZmZzZXQ6IDAsIGNvdW50OiBjb3VudCAqIDE2IH0pO1xuXHRcdFx0XHRpZiAoaW5zdGFuY2VkTWVzaC5pbnN0YW5jZUNvbG9yKSB7XG5cdFx0XHRcdFx0c2V0VXBkYXRlUmFuZ2UoaW5zdGFuY2VkTWVzaC5pbnN0YW5jZUNvbG9yLCB7IG9mZnNldDogMCwgY291bnQ6IGNvdW50ICogMyB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBpbnN0YW5jZSA9IHJlc29sdmVSZWYodGhpcy5pbnN0YW5jZXNbaV0pO1xuXHRcdFx0XHRcdGlmIChpbnN0YW5jZSkge1xuXHRcdFx0XHRcdFx0Ly8gTXVsdGlwbHkgdGhlIGludmVyc2Ugb2YgdGhlIEluc3RhbmNlZE1lc2ggd29ybGQgbWF0cml4IG9yIGVsc2Vcblx0XHRcdFx0XHRcdC8vIEluc3RhbmNlcyB3aWxsIGJlIGRvdWJsZS10cmFuc2Zvcm1lZCBpZiA8SW5zdGFuY2VzPiBpc24ndCBhdCBpZGVudGl0eVxuXHRcdFx0XHRcdFx0aW5zdGFuY2UubWF0cml4V29ybGQuZGVjb21wb3NlKHRyYW5zbGF0aW9uLCByb3RhdGlvbiwgc2NhbGUpO1xuXHRcdFx0XHRcdFx0aW5zdGFuY2VNYXRyaXguY29tcG9zZSh0cmFuc2xhdGlvbiwgcm90YXRpb24sIHNjYWxlKS5wcmVtdWx0aXBseShwYXJlbnRNYXRyaXgpO1xuXHRcdFx0XHRcdFx0aW5zdGFuY2VNYXRyaXgudG9BcnJheShtYXRyaWNlcywgaSAqIDE2KTtcblx0XHRcdFx0XHRcdGNoZWNrVXBkYXRlKGluc3RhbmNlZE1lc2guaW5zdGFuY2VNYXRyaXgpO1xuXHRcdFx0XHRcdFx0aW5zdGFuY2UuY29sb3IudG9BcnJheShjb2xvcnMsIGkgKiAzKTtcblx0XHRcdFx0XHRcdGNoZWNrVXBkYXRlKGluc3RhbmNlZE1lc2guaW5zdGFuY2VDb2xvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGl0ZXJhdGlvbnMrKztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHN1YnNjcmliZShyZWY6IEVsZW1lbnRSZWY8UG9zaXRpb25NZXNoPiB8IFBvc2l0aW9uTWVzaCkge1xuXHRcdHRoaXMuaW5zdGFuY2VzLnB1c2gocmVmKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dGhpcy5pbnN0YW5jZXMgPSB0aGlzLmluc3RhbmNlcy5maWx0ZXIoKGkpID0+IGkgIT09IHJlZik7XG5cdFx0fTtcblx0fVxufVxuIl19
@@ -0,0 +1,51 @@
1
+ import { resolveRef } from 'angular-three';
2
+ import { Color, Group, Material, Matrix4, Mesh, } from 'three';
3
+ const _instanceLocalMatrix = new Matrix4();
4
+ const _instanceWorldMatrix = new Matrix4();
5
+ const _instanceIntersects = [];
6
+ const _mesh = new Mesh();
7
+ export class PositionMesh extends Group {
8
+ constructor() {
9
+ super();
10
+ this.color = new Color('white');
11
+ this.instance = undefined;
12
+ }
13
+ // This will allow the virtual instance have bounds
14
+ get geometry() {
15
+ return resolveRef(this.instance)?.geometry;
16
+ }
17
+ // And this will allow the virtual instance to receive events
18
+ raycast(raycaster, intersects) {
19
+ const parent = resolveRef(this.instance);
20
+ if (!parent)
21
+ return;
22
+ if (!parent.geometry || !parent.material)
23
+ return;
24
+ _mesh.geometry = parent.geometry;
25
+ const matrixWorld = parent.matrixWorld;
26
+ const instanceId = parent.userData['instances'].indexOf(this);
27
+ // If the instance wasn't found or exceeds the parents draw range, bail out
28
+ if (instanceId === -1 || instanceId > parent.count)
29
+ return;
30
+ // calculate the world matrix for each instance
31
+ parent.getMatrixAt(instanceId, _instanceLocalMatrix);
32
+ _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix);
33
+ // the mesh represents this single instance
34
+ _mesh.matrixWorld = _instanceWorldMatrix;
35
+ // raycast side according to instance material
36
+ if (parent.material instanceof Material)
37
+ _mesh.material.side = parent.material.side;
38
+ else
39
+ _mesh.material.side = parent.material[0].side;
40
+ _mesh.raycast(raycaster, _instanceIntersects);
41
+ // process the result of raycast
42
+ for (let i = 0, l = _instanceIntersects.length; i < l; i++) {
43
+ const intersect = _instanceIntersects[i];
44
+ intersect.instanceId = instanceId;
45
+ intersect.object = this;
46
+ intersects.push(intersect);
47
+ }
48
+ _instanceIntersects.length = 0;
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24tbWVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9wZXJmb3JtYW5jZXMvc3JjL2xpYi9pbnN0YW5jZXMvcG9zaXRpb24tbWVzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW1CLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBRU4sS0FBSyxFQUNMLEtBQUssRUFHTCxRQUFRLEVBQ1IsT0FBTyxFQUNQLElBQUksR0FHSixNQUFNLE9BQU8sQ0FBQztBQUlmLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMzQyxNQUFNLG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDM0MsTUFBTSxtQkFBbUIsR0FBbUIsRUFBRSxDQUFDO0FBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFxQyxDQUFDO0FBRTVELE1BQU0sT0FBTyxZQUFhLFNBQVEsS0FBSztJQUl0QztRQUNDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELElBQUksUUFBUTtRQUNYLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVELDZEQUE2RDtJQUNwRCxPQUFPLENBQUMsU0FBb0IsRUFBRSxVQUEwQjtRQUNoRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUNqRCxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCwyRUFBMkU7UUFDM0UsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUMzRCwrQ0FBK0M7UUFDL0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUNyRCxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN6RSwyQ0FBMkM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQztRQUN6Qyw4Q0FBOEM7UUFDOUMsSUFBSSxNQUFNLENBQUMsUUFBUSxZQUFZLFFBQVE7WUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs7WUFDL0UsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUM5QyxnQ0FBZ0M7UUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDbEMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDeEIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RPYmplY3QzRE5vZGUsIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7XG5cdEJ1ZmZlckdlb21ldHJ5LFxuXHRDb2xvcixcblx0R3JvdXAsXG5cdEluc3RhbmNlZE1lc2gsXG5cdEludGVyc2VjdGlvbixcblx0TWF0ZXJpYWwsXG5cdE1hdHJpeDQsXG5cdE1lc2gsXG5cdE1lc2hCYXNpY01hdGVyaWFsLFxuXHRSYXljYXN0ZXIsXG59IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IHR5cGUgTmd0UG9zaXRpb25NZXNoID0gTmd0T2JqZWN0M0ROb2RlPFBvc2l0aW9uTWVzaCwgdHlwZW9mIFBvc2l0aW9uTWVzaD47XG5cbmNvbnN0IF9pbnN0YW5jZUxvY2FsTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9pbnN0YW5jZVdvcmxkTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9pbnN0YW5jZUludGVyc2VjdHM6IEludGVyc2VjdGlvbltdID0gW107XG5jb25zdCBfbWVzaCA9IG5ldyBNZXNoPEJ1ZmZlckdlb21ldHJ5LCBNZXNoQmFzaWNNYXRlcmlhbD4oKTtcblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uTWVzaCBleHRlbmRzIEdyb3VwIHtcblx0Y29sb3I6IENvbG9yO1xuXHRpbnN0YW5jZTogRWxlbWVudFJlZjxJbnN0YW5jZWRNZXNoPiB8IEluc3RhbmNlZE1lc2ggfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcignd2hpdGUnKTtcblx0XHR0aGlzLmluc3RhbmNlID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gVGhpcyB3aWxsIGFsbG93IHRoZSB2aXJ0dWFsIGluc3RhbmNlIGhhdmUgYm91bmRzXG5cdGdldCBnZW9tZXRyeSgpIHtcblx0XHRyZXR1cm4gcmVzb2x2ZVJlZih0aGlzLmluc3RhbmNlKT8uZ2VvbWV0cnk7XG5cdH1cblxuXHQvLyBBbmQgdGhpcyB3aWxsIGFsbG93IHRoZSB2aXJ0dWFsIGluc3RhbmNlIHRvIHJlY2VpdmUgZXZlbnRzXG5cdG92ZXJyaWRlIHJheWNhc3QocmF5Y2FzdGVyOiBSYXljYXN0ZXIsIGludGVyc2VjdHM6IEludGVyc2VjdGlvbltdKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gcmVzb2x2ZVJlZih0aGlzLmluc3RhbmNlKTtcblx0XHRpZiAoIXBhcmVudCkgcmV0dXJuO1xuXHRcdGlmICghcGFyZW50Lmdlb21ldHJ5IHx8ICFwYXJlbnQubWF0ZXJpYWwpIHJldHVybjtcblx0XHRfbWVzaC5nZW9tZXRyeSA9IHBhcmVudC5nZW9tZXRyeTtcblx0XHRjb25zdCBtYXRyaXhXb3JsZCA9IHBhcmVudC5tYXRyaXhXb3JsZDtcblx0XHRjb25zdCBpbnN0YW5jZUlkID0gcGFyZW50LnVzZXJEYXRhWydpbnN0YW5jZXMnXS5pbmRleE9mKHRoaXMpO1xuXHRcdC8vIElmIHRoZSBpbnN0YW5jZSB3YXNuJ3QgZm91bmQgb3IgZXhjZWVkcyB0aGUgcGFyZW50cyBkcmF3IHJhbmdlLCBiYWlsIG91dFxuXHRcdGlmIChpbnN0YW5jZUlkID09PSAtMSB8fCBpbnN0YW5jZUlkID4gcGFyZW50LmNvdW50KSByZXR1cm47XG5cdFx0Ly8gY2FsY3VsYXRlIHRoZSB3b3JsZCBtYXRyaXggZm9yIGVhY2ggaW5zdGFuY2Vcblx0XHRwYXJlbnQuZ2V0TWF0cml4QXQoaW5zdGFuY2VJZCwgX2luc3RhbmNlTG9jYWxNYXRyaXgpO1xuXHRcdF9pbnN0YW5jZVdvcmxkTWF0cml4Lm11bHRpcGx5TWF0cmljZXMobWF0cml4V29ybGQsIF9pbnN0YW5jZUxvY2FsTWF0cml4KTtcblx0XHQvLyB0aGUgbWVzaCByZXByZXNlbnRzIHRoaXMgc2luZ2xlIGluc3RhbmNlXG5cdFx0X21lc2gubWF0cml4V29ybGQgPSBfaW5zdGFuY2VXb3JsZE1hdHJpeDtcblx0XHQvLyByYXljYXN0IHNpZGUgYWNjb3JkaW5nIHRvIGluc3RhbmNlIG1hdGVyaWFsXG5cdFx0aWYgKHBhcmVudC5tYXRlcmlhbCBpbnN0YW5jZW9mIE1hdGVyaWFsKSBfbWVzaC5tYXRlcmlhbC5zaWRlID0gcGFyZW50Lm1hdGVyaWFsLnNpZGU7XG5cdFx0ZWxzZSBfbWVzaC5tYXRlcmlhbC5zaWRlID0gcGFyZW50Lm1hdGVyaWFsWzBdLnNpZGU7XG5cdFx0X21lc2gucmF5Y2FzdChyYXljYXN0ZXIsIF9pbnN0YW5jZUludGVyc2VjdHMpO1xuXHRcdC8vIHByb2Nlc3MgdGhlIHJlc3VsdCBvZiByYXljYXN0XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBfaW5zdGFuY2VJbnRlcnNlY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgaW50ZXJzZWN0ID0gX2luc3RhbmNlSW50ZXJzZWN0c1tpXTtcblx0XHRcdGludGVyc2VjdC5pbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcblx0XHRcdGludGVyc2VjdC5vYmplY3QgPSB0aGlzO1xuXHRcdFx0aW50ZXJzZWN0cy5wdXNoKGludGVyc2VjdCk7XG5cdFx0fVxuXHRcdF9pbnN0YW5jZUludGVyc2VjdHMubGVuZ3RoID0gMDtcblx0fVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1ncm91cFxuXHRcdCAqIEByYXdPcHRpb25zIGluc3RhbmNlfGNvbG9yXG5cdFx0ICovXG5cdFx0J25ndC1wb3NpdGlvbi1tZXNoJzogTmd0UG9zaXRpb25NZXNoO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,278 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, inject, input, viewChild, } from '@angular/core';
2
+ import { checkUpdate, extend, injectBeforeRender, omit, pick, resolveRef } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { BufferAttribute, BufferGeometry, DynamicDrawUsage, Matrix4, Points, Vector3 } from 'three';
6
+ import { PositionPoint } from './position-point';
7
+ import * as i0 from "@angular/core";
8
+ export class NgtsPoint {
9
+ constructor() {
10
+ this.options = input({});
11
+ this.positionPointRef = viewChild.required('positionPoint');
12
+ this.points = inject(NgtsPointsInstances);
13
+ extend({ PositionPoint });
14
+ const autoEffect = injectAutoEffect();
15
+ afterNextRender(() => {
16
+ autoEffect(() => {
17
+ return this.points.subscribe(this.positionPointRef().nativeElement);
18
+ });
19
+ });
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsPoint, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsPoint, isStandalone: true, selector: "ngts-point", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "positionPointRef", first: true, predicate: ["positionPoint"], descendants: true, isSignal: true }], ngImport: i0, template: `
23
+ <ngt-position-point #positionPoint [parameters]="options()" [instance]="points.pointsRef()">
24
+ <ng-content />
25
+ </ngt-position-point>
26
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsPoint, decorators: [{
29
+ type: Component,
30
+ args: [{
31
+ selector: 'ngts-point',
32
+ standalone: true,
33
+ template: `
34
+ <ngt-position-point #positionPoint [parameters]="options()" [instance]="points.pointsRef()">
35
+ <ng-content />
36
+ </ngt-position-point>
37
+ `,
38
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
39
+ changeDetection: ChangeDetectionStrategy.OnPush,
40
+ }]
41
+ }], ctorParameters: () => [] });
42
+ export class NgtsPointsBuffer {
43
+ constructor() {
44
+ this.positions = input.required();
45
+ this.colors = input();
46
+ this.sizes = input();
47
+ this.stride = input(3);
48
+ this.options = input({});
49
+ this.pointsRef = viewChild.required('points');
50
+ this.DynamicDrawUsage = DynamicDrawUsage;
51
+ extend({ Points, BufferAttribute, BufferGeometry });
52
+ injectBeforeRender(() => {
53
+ const points = this.pointsRef()?.nativeElement;
54
+ if (!points)
55
+ return;
56
+ const attributes = points.geometry.attributes;
57
+ checkUpdate(attributes['position']);
58
+ if (this.colors())
59
+ checkUpdate(attributes['color']);
60
+ if (this.sizes())
61
+ checkUpdate(attributes['size']);
62
+ });
63
+ }
64
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsPointsBuffer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgtsPointsBuffer, isStandalone: true, selector: "ngts-points-buffer", inputs: { positions: { classPropertyName: "positions", publicName: "positions", isSignal: true, isRequired: true, transformFunction: null }, colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: false, transformFunction: null }, sizes: { classPropertyName: "sizes", publicName: "sizes", isSignal: true, isRequired: false, transformFunction: null }, stride: { classPropertyName: "stride", publicName: "stride", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "pointsRef", first: true, predicate: ["points"], descendants: true, isSignal: true }], ngImport: i0, template: `
66
+ <ngt-points #points [parameters]="options()">
67
+ <ngt-buffer-geometry>
68
+ <ngt-buffer-attribute
69
+ attach="attributes.position"
70
+ [count]="positions().length / stride()"
71
+ [array]="positions()"
72
+ [itemSize]="stride()"
73
+ [usage]="DynamicDrawUsage"
74
+ />
75
+ @if (colors(); as colors) {
76
+ <ngt-buffer-attribute
77
+ attach="attributes.color"
78
+ [count]="colors.length / stride()"
79
+ [array]="colors"
80
+ [itemSize]="3"
81
+ [usage]="DynamicDrawUsage"
82
+ />
83
+ }
84
+ @if (sizes(); as sizes) {
85
+ <ngt-buffer-attribute
86
+ attach="attributes.size"
87
+ [count]="sizes.length / stride()"
88
+ [array]="sizes"
89
+ [itemSize]="1"
90
+ [usage]="DynamicDrawUsage"
91
+ />
92
+ }
93
+ </ngt-buffer-geometry>
94
+ <ng-content />
95
+ </ngt-points>
96
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
97
+ }
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsPointsBuffer, decorators: [{
99
+ type: Component,
100
+ args: [{
101
+ selector: 'ngts-points-buffer',
102
+ standalone: true,
103
+ template: `
104
+ <ngt-points #points [parameters]="options()">
105
+ <ngt-buffer-geometry>
106
+ <ngt-buffer-attribute
107
+ attach="attributes.position"
108
+ [count]="positions().length / stride()"
109
+ [array]="positions()"
110
+ [itemSize]="stride()"
111
+ [usage]="DynamicDrawUsage"
112
+ />
113
+ @if (colors(); as colors) {
114
+ <ngt-buffer-attribute
115
+ attach="attributes.color"
116
+ [count]="colors.length / stride()"
117
+ [array]="colors"
118
+ [itemSize]="3"
119
+ [usage]="DynamicDrawUsage"
120
+ />
121
+ }
122
+ @if (sizes(); as sizes) {
123
+ <ngt-buffer-attribute
124
+ attach="attributes.size"
125
+ [count]="sizes.length / stride()"
126
+ [array]="sizes"
127
+ [itemSize]="1"
128
+ [usage]="DynamicDrawUsage"
129
+ />
130
+ }
131
+ </ngt-buffer-geometry>
132
+ <ng-content />
133
+ </ngt-points>
134
+ `,
135
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
136
+ changeDetection: ChangeDetectionStrategy.OnPush,
137
+ }]
138
+ }], ctorParameters: () => [] });
139
+ const parentMatrix = new Matrix4();
140
+ const position = new Vector3();
141
+ const defaultInstancesOptions = { limit: 1000 };
142
+ export class NgtsPointsInstances {
143
+ constructor() {
144
+ this.options = input(defaultInstancesOptions, { transform: mergeInputs(defaultInstancesOptions) });
145
+ this.parameters = omit(this.options, ['limit', 'range']);
146
+ this.pointsRef = viewChild.required('points');
147
+ this.limit = pick(this.options, 'limit');
148
+ this.buffers = computed(() => {
149
+ const limit = this.limit();
150
+ return {
151
+ positions: new Float32Array(limit * 3),
152
+ colors: Float32Array.from({ length: limit * 3 }, () => 1),
153
+ sizes: Float32Array.from({ length: limit }, () => 1),
154
+ };
155
+ });
156
+ this.positionPoints = [];
157
+ this.DynamicDrawUsage = DynamicDrawUsage;
158
+ extend({ Points, BufferAttribute, BufferGeometry });
159
+ const autoEffect = injectAutoEffect();
160
+ afterNextRender(() => {
161
+ autoEffect(() => {
162
+ const points = this.pointsRef()?.nativeElement;
163
+ if (!points)
164
+ return;
165
+ checkUpdate(points.geometry.attributes['position']);
166
+ });
167
+ });
168
+ injectBeforeRender(() => {
169
+ const points = this.pointsRef()?.nativeElement;
170
+ if (!points)
171
+ return;
172
+ const { limit, range } = this.options();
173
+ const { positions, sizes, colors } = this.buffers();
174
+ points.updateMatrix();
175
+ points.updateMatrixWorld();
176
+ parentMatrix.copy(points.matrixWorld).invert();
177
+ points.geometry.drawRange.count = Math.min(limit, range !== undefined ? range : limit, this.positionPoints.length);
178
+ for (let i = 0; i < this.positionPoints.length; i++) {
179
+ const positionPoint = resolveRef(this.positionPoints[i]);
180
+ if (positionPoint) {
181
+ positionPoint.getWorldPosition(position).applyMatrix4(parentMatrix);
182
+ position.toArray(positions, i * 3);
183
+ checkUpdate(points.geometry.attributes['position']);
184
+ positionPoint.matrixWorldNeedsUpdate = true;
185
+ positionPoint.color.toArray(colors, i * 3);
186
+ checkUpdate(points.geometry.attributes['color']);
187
+ sizes.set([positionPoint.size], i);
188
+ checkUpdate(points.geometry.attributes['size']);
189
+ }
190
+ }
191
+ });
192
+ }
193
+ subscribe(ref) {
194
+ this.positionPoints.push(ref);
195
+ return () => {
196
+ this.positionPoints = this.positionPoints.filter((p) => p !== ref);
197
+ };
198
+ }
199
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsPointsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsPointsInstances, isStandalone: true, selector: "ngts-points-instances", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "pointsRef", first: true, predicate: ["points"], descendants: true, isSignal: true }], ngImport: i0, template: `
201
+ <ngt-points
202
+ #points
203
+ [userData]="{ instances: positionPoints }"
204
+ [matrixAutoUpdate]="false"
205
+ [raycast]="null"
206
+ [parameters]="parameters()"
207
+ >
208
+ <ngt-buffer-geometry>
209
+ <ngt-buffer-attribute
210
+ attach="attributes.position"
211
+ [count]="buffers().positions.length / 3"
212
+ [array]="buffers().positions"
213
+ [itemSize]="3"
214
+ [usage]="DynamicDrawUsage"
215
+ />
216
+ <ngt-buffer-attribute
217
+ attach="attributes.color"
218
+ [count]="buffers().colors.length / 3"
219
+ [array]="buffers().colors"
220
+ [itemSize]="3"
221
+ [usage]="DynamicDrawUsage"
222
+ />
223
+ <ngt-buffer-attribute
224
+ attach="attributes.size"
225
+ [count]="buffers().sizes.length"
226
+ [array]="buffers().sizes"
227
+ [itemSize]="1"
228
+ [usage]="DynamicDrawUsage"
229
+ />
230
+ </ngt-buffer-geometry>
231
+ <ng-content />
232
+ </ngt-points>
233
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
234
+ }
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsPointsInstances, decorators: [{
236
+ type: Component,
237
+ args: [{
238
+ selector: 'ngts-points-instances',
239
+ standalone: true,
240
+ template: `
241
+ <ngt-points
242
+ #points
243
+ [userData]="{ instances: positionPoints }"
244
+ [matrixAutoUpdate]="false"
245
+ [raycast]="null"
246
+ [parameters]="parameters()"
247
+ >
248
+ <ngt-buffer-geometry>
249
+ <ngt-buffer-attribute
250
+ attach="attributes.position"
251
+ [count]="buffers().positions.length / 3"
252
+ [array]="buffers().positions"
253
+ [itemSize]="3"
254
+ [usage]="DynamicDrawUsage"
255
+ />
256
+ <ngt-buffer-attribute
257
+ attach="attributes.color"
258
+ [count]="buffers().colors.length / 3"
259
+ [array]="buffers().colors"
260
+ [itemSize]="3"
261
+ [usage]="DynamicDrawUsage"
262
+ />
263
+ <ngt-buffer-attribute
264
+ attach="attributes.size"
265
+ [count]="buffers().sizes.length"
266
+ [array]="buffers().sizes"
267
+ [itemSize]="1"
268
+ [usage]="DynamicDrawUsage"
269
+ />
270
+ </ngt-buffer-geometry>
271
+ <ng-content />
272
+ </ngt-points>
273
+ `,
274
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
275
+ changeDetection: ChangeDetectionStrategy.OnPush,
276
+ }]
277
+ }], ctorParameters: () => [] });
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3BlcmZvcm1hbmNlcy9zcmMvbGliL3BvaW50cy9wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFFdEIsTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQWEsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3BHLE9BQU8sRUFBb0IsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBYW5FLE1BQU0sT0FBTyxTQUFTO0lBT3JCO1FBTkEsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUErQixDQUFDLENBQUM7UUFFakQscUJBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNEIsZUFBZSxDQUFDLENBQUM7UUFFbEYsV0FBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBR3BDLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFMUIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUV0QyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJ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QUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFFakQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbkMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQThDO1FBQ3ZELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQztJQUNILENBQUM7OEdBeEVXLG1CQUFtQjtrR0FBbkIsbUJBQW1CLGdWQXJDckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlDVDs7MkZBSVcsbUJBQW1CO2tCQXhDL0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ1Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja1VwZGF0ZSwgZXh0ZW5kLCBpbmplY3RCZWZvcmVSZW5kZXIsIE5ndFBvaW50cywgb21pdCwgcGljaywgcmVzb2x2ZVJlZiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQnVmZmVyQXR0cmlidXRlLCBCdWZmZXJHZW9tZXRyeSwgRHluYW1pY0RyYXdVc2FnZSwgTWF0cml4NCwgUG9pbnRzLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0UG9zaXRpb25Qb2ludCwgUG9zaXRpb25Qb2ludCB9IGZyb20gJy4vcG9zaXRpb24tcG9pbnQnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXBvaW50Jyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXBvc2l0aW9uLXBvaW50ICNwb3NpdGlvblBvaW50IFtwYXJhbWV0ZXJzXT1cIm9wdGlvbnMoKVwiIFtpbnN0YW5jZV09XCJwb2ludHMucG9pbnRzUmVmKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtcG9zaXRpb24tcG9pbnQ+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNQb2ludCB7XG5cdG9wdGlvbnMgPSBpbnB1dCh7fSBhcyBQYXJ0aWFsPE5ndFBvc2l0aW9uUG9pbnQ+KTtcblxuXHRwb3NpdGlvblBvaW50UmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8UG9zaXRpb25Qb2ludD4+KCdwb3NpdGlvblBvaW50Jyk7XG5cblx0cG9pbnRzID0gaW5qZWN0KE5ndHNQb2ludHNJbnN0YW5jZXMpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IFBvc2l0aW9uUG9pbnQgfSk7XG5cblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5wb2ludHMuc3Vic2NyaWJlKHRoaXMucG9zaXRpb25Qb2ludFJlZigpLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1wb2ludHMtYnVmZmVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXBvaW50cyAjcG9pbnRzIFtwYXJhbWV0ZXJzXT1cIm9wdGlvbnMoKVwiPlxuXHRcdFx0PG5ndC1idWZmZXItZ2VvbWV0cnk+XG5cdFx0XHRcdDxuZ3QtYnVmZmVyLWF0dHJpYnV0ZVxuXHRcdFx0XHRcdGF0dGFjaD1cImF0dHJpYnV0ZXMucG9zaXRpb25cIlxuXHRcdFx0XHRcdFtjb3VudF09XCJwb3NpdGlvbnMoKS5sZW5ndGggLyBzdHJpZGUoKVwiXG5cdFx0XHRcdFx0W2FycmF5XT1cInBvc2l0aW9ucygpXCJcblx0XHRcdFx0XHRbaXRlbVNpemVdPVwic3RyaWRlKClcIlxuXHRcdFx0XHRcdFt1c2FnZV09XCJEeW5hbWljRHJhd1VzYWdlXCJcblx0XHRcdFx0Lz5cblx0XHRcdFx0QGlmIChjb2xvcnMoKTsgYXMgY29sb3JzKSB7XG5cdFx0XHRcdFx0PG5ndC1idWZmZXItYXR0cmlidXRlXG5cdFx0XHRcdFx0XHRhdHRhY2g9XCJhdHRyaWJ1dGVzLmNvbG9yXCJcblx0XHRcdFx0XHRcdFtjb3VudF09XCJjb2xvcnMubGVuZ3RoIC8gc3RyaWRlKClcIlxuXHRcdFx0XHRcdFx0W2FycmF5XT1cImNvbG9yc1wiXG5cdFx0XHRcdFx0XHRbaXRlbVNpemVdPVwiM1wiXG5cdFx0XHRcdFx0XHRbdXNhZ2VdPVwiRHluYW1pY0RyYXdVc2FnZVwiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0fVxuXHRcdFx0XHRAaWYgKHNpemVzKCk7IGFzIHNpemVzKSB7XG5cdFx0XHRcdFx0PG5ndC1idWZmZXItYXR0cmlidXRlXG5cdFx0XHRcdFx0XHRhdHRhY2g9XCJhdHRyaWJ1dGVzLnNpemVcIlxuXHRcdFx0XHRcdFx0W2NvdW50XT1cInNpemVzLmxlbmd0aCAvIHN0cmlkZSgpXCJcblx0XHRcdFx0XHRcdFthcnJheV09XCJzaXplc1wiXG5cdFx0XHRcdFx0XHRbaXRlbVNpemVdPVwiMVwiXG5cdFx0XHRcdFx0XHRbdXNhZ2VdPVwiRHluYW1pY0RyYXdVc2FnZVwiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0fVxuXHRcdFx0PC9uZ3QtYnVmZmVyLWdlb21ldHJ5PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1wb2ludHM+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNQb2ludHNCdWZmZXIge1xuXHRwb3NpdGlvbnMgPSBpbnB1dC5yZXF1aXJlZDxGbG9hdDMyQXJyYXk+KCk7XG5cdGNvbG9ycyA9IGlucHV0PEZsb2F0MzJBcnJheT4oKTtcblx0c2l6ZXMgPSBpbnB1dDxGbG9hdDMyQXJyYXk+KCk7XG5cdHN0cmlkZSA9IGlucHV0PDIgfCAzPigzKTtcblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIFBhcnRpYWw8Tmd0UG9zaXRpb25Qb2ludD4pO1xuXG5cdHBvaW50c1JlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPFBvaW50cz4+KCdwb2ludHMnKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBQb2ludHMsIEJ1ZmZlckF0dHJpYnV0ZSwgQnVmZmVyR2VvbWV0cnkgfSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcG9pbnRzID0gdGhpcy5wb2ludHNSZWYoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmICghcG9pbnRzKSByZXR1cm47XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBwb2ludHMuZ2VvbWV0cnkuYXR0cmlidXRlcztcblx0XHRcdGNoZWNrVXBkYXRlKGF0dHJpYnV0ZXNbJ3Bvc2l0aW9uJ10pO1xuXHRcdFx0aWYgKHRoaXMuY29sb3JzKCkpIGNoZWNrVXBkYXRlKGF0dHJpYnV0ZXNbJ2NvbG9yJ10pO1xuXHRcdFx0aWYgKHRoaXMuc2l6ZXMoKSkgY2hlY2tVcGRhdGUoYXR0cmlidXRlc1snc2l6ZSddKTtcblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCByZWFkb25seSBEeW5hbWljRHJhd1VzYWdlID0gRHluYW1pY0RyYXdVc2FnZTtcbn1cblxuY29uc3QgcGFyZW50TWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzUG9pbnRzSW5zdGFuY2VzT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0UG9pbnRzPiB7XG5cdHJhbmdlPzogbnVtYmVyO1xuXHRsaW1pdDogbnVtYmVyO1xufVxuXG5jb25zdCBkZWZhdWx0SW5zdGFuY2VzT3B0aW9uczogTmd0c1BvaW50c0luc3RhbmNlc09wdGlvbnMgPSB7IGxpbWl0OiAxMDAwIH07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtcG9pbnRzLWluc3RhbmNlcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wb2ludHNcblx0XHRcdCNwb2ludHNcblx0XHRcdFt1c2VyRGF0YV09XCJ7IGluc3RhbmNlczogcG9zaXRpb25Qb2ludHMgfVwiXG5cdFx0XHRbbWF0cml4QXV0b1VwZGF0ZV09XCJmYWxzZVwiXG5cdFx0XHRbcmF5Y2FzdF09XCJudWxsXCJcblx0XHRcdFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiXG5cdFx0PlxuXHRcdFx0PG5ndC1idWZmZXItZ2VvbWV0cnk+XG5cdFx0XHRcdDxuZ3QtYnVmZmVyLWF0dHJpYnV0ZVxuXHRcdFx0XHRcdGF0dGFjaD1cImF0dHJpYnV0ZXMucG9zaXRpb25cIlxuXHRcdFx0XHRcdFtjb3VudF09XCJidWZmZXJzKCkucG9zaXRpb25zLmxlbmd0aCAvIDNcIlxuXHRcdFx0XHRcdFthcnJheV09XCJidWZmZXJzKCkucG9zaXRpb25zXCJcblx0XHRcdFx0XHRbaXRlbVNpemVdPVwiM1wiXG5cdFx0XHRcdFx0W3VzYWdlXT1cIkR5bmFtaWNEcmF3VXNhZ2VcIlxuXHRcdFx0XHQvPlxuXHRcdFx0XHQ8bmd0LWJ1ZmZlci1hdHRyaWJ1dGVcblx0XHRcdFx0XHRhdHRhY2g9XCJhdHRyaWJ1dGVzLmNvbG9yXCJcblx0XHRcdFx0XHRbY291bnRdPVwiYnVmZmVycygpLmNvbG9ycy5sZW5ndGggLyAzXCJcblx0XHRcdFx0XHRbYXJyYXldPVwiYnVmZmVycygpLmNvbG9yc1wiXG5cdFx0XHRcdFx0W2l0ZW1TaXplXT1cIjNcIlxuXHRcdFx0XHRcdFt1c2FnZV09XCJEeW5hbWljRHJhd1VzYWdlXCJcblx0XHRcdFx0Lz5cblx0XHRcdFx0PG5ndC1idWZmZXItYXR0cmlidXRlXG5cdFx0XHRcdFx0YXR0YWNoPVwiYXR0cmlidXRlcy5zaXplXCJcblx0XHRcdFx0XHRbY291bnRdPVwiYnVmZmVycygpLnNpemVzLmxlbmd0aFwiXG5cdFx0XHRcdFx0W2FycmF5XT1cImJ1ZmZlcnMoKS5zaXplc1wiXG5cdFx0XHRcdFx0W2l0ZW1TaXplXT1cIjFcIlxuXHRcdFx0XHRcdFt1c2FnZV09XCJEeW5hbWljRHJhd1VzYWdlXCJcblx0XHRcdFx0Lz5cblx0XHRcdDwvbmd0LWJ1ZmZlci1nZW9tZXRyeT5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtcG9pbnRzPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzUG9pbnRzSW5zdGFuY2VzIHtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRJbnN0YW5jZXNPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdEluc3RhbmNlc09wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnbGltaXQnLCAncmFuZ2UnXSk7XG5cblx0cG9pbnRzUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8UG9pbnRzPj4oJ3BvaW50cycpO1xuXG5cdHByaXZhdGUgbGltaXQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2xpbWl0Jyk7XG5cblx0YnVmZmVycyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBsaW1pdCA9IHRoaXMubGltaXQoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRwb3NpdGlvbnM6IG5ldyBGbG9hdDMyQXJyYXkobGltaXQgKiAzKSxcblx0XHRcdGNvbG9yczogRmxvYXQzMkFycmF5LmZyb20oeyBsZW5ndGg6IGxpbWl0ICogMyB9LCAoKSA9PiAxKSxcblx0XHRcdHNpemVzOiBGbG9hdDMyQXJyYXkuZnJvbSh7IGxlbmd0aDogbGltaXQgfSwgKCkgPT4gMSksXG5cdFx0fTtcblx0fSk7XG5cblx0cG9zaXRpb25Qb2ludHM6IEFycmF5PEVsZW1lbnRSZWY8UG9zaXRpb25Qb2ludD4gfCBQb3NpdGlvblBvaW50PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IFBvaW50cywgQnVmZmVyQXR0cmlidXRlLCBCdWZmZXJHZW9tZXRyeSB9KTtcblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50c1JlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0XHRpZiAoIXBvaW50cykgcmV0dXJuO1xuXHRcdFx0XHRjaGVja1VwZGF0ZShwb2ludHMuZ2VvbWV0cnkuYXR0cmlidXRlc1sncG9zaXRpb24nXSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50c1JlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKCFwb2ludHMpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgeyBsaW1pdCwgcmFuZ2UgfSA9IHRoaXMub3B0aW9ucygpO1xuXHRcdFx0Y29uc3QgeyBwb3NpdGlvbnMsIHNpemVzLCBjb2xvcnMgfSA9IHRoaXMuYnVmZmVycygpO1xuXG5cdFx0XHRwb2ludHMudXBkYXRlTWF0cml4KCk7XG5cdFx0XHRwb2ludHMudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRcdHBhcmVudE1hdHJpeC5jb3B5KHBvaW50cy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cblx0XHRcdHBvaW50cy5nZW9tZXRyeS5kcmF3UmFuZ2UuY291bnQgPSBNYXRoLm1pbihcblx0XHRcdFx0bGltaXQsXG5cdFx0XHRcdHJhbmdlICE9PSB1bmRlZmluZWQgPyByYW5nZSA6IGxpbWl0LFxuXHRcdFx0XHR0aGlzLnBvc2l0aW9uUG9pbnRzLmxlbmd0aCxcblx0XHRcdCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb3NpdGlvblBvaW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBwb3NpdGlvblBvaW50ID0gcmVzb2x2ZVJlZih0aGlzLnBvc2l0aW9uUG9pbnRzW2ldKTtcblx0XHRcdFx0aWYgKHBvc2l0aW9uUG9pbnQpIHtcblx0XHRcdFx0XHRwb3NpdGlvblBvaW50LmdldFdvcmxkUG9zaXRpb24ocG9zaXRpb24pLmFwcGx5TWF0cml4NChwYXJlbnRNYXRyaXgpO1xuXHRcdFx0XHRcdHBvc2l0aW9uLnRvQXJyYXkocG9zaXRpb25zLCBpICogMyk7XG5cdFx0XHRcdFx0Y2hlY2tVcGRhdGUocG9pbnRzLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ3Bvc2l0aW9uJ10pO1xuXG5cdFx0XHRcdFx0cG9zaXRpb25Qb2ludC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRwb3NpdGlvblBvaW50LmNvbG9yLnRvQXJyYXkoY29sb3JzLCBpICogMyk7XG5cdFx0XHRcdFx0Y2hlY2tVcGRhdGUocG9pbnRzLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ2NvbG9yJ10pO1xuXG5cdFx0XHRcdFx0c2l6ZXMuc2V0KFtwb3NpdGlvblBvaW50LnNpemVdLCBpKTtcblx0XHRcdFx0XHRjaGVja1VwZGF0ZShwb2ludHMuZ2VvbWV0cnkuYXR0cmlidXRlc1snc2l6ZSddKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0c3Vic2NyaWJlKHJlZjogRWxlbWVudFJlZjxQb3NpdGlvblBvaW50PiB8IFBvc2l0aW9uUG9pbnQpIHtcblx0XHR0aGlzLnBvc2l0aW9uUG9pbnRzLnB1c2gocmVmKTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0dGhpcy5wb3NpdGlvblBvaW50cyA9IHRoaXMucG9zaXRpb25Qb2ludHMuZmlsdGVyKChwKSA9PiBwICE9PSByZWYpO1xuXHRcdH07XG5cdH1cblxuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgRHluYW1pY0RyYXdVc2FnZSA9IER5bmFtaWNEcmF3VXNhZ2U7XG59XG4iXX0=
@@ -0,0 +1,53 @@
1
+ import { resolveRef } from 'angular-three';
2
+ import { Color, Group, Matrix4, Ray, Sphere, Vector3 } from 'three';
3
+ const _inverseMatrix = new Matrix4();
4
+ const _ray = new Ray();
5
+ const _sphere = new Sphere();
6
+ const _position = new Vector3();
7
+ export class PositionPoint extends Group {
8
+ constructor() {
9
+ super();
10
+ this.size = 0;
11
+ this.color = new Color('white');
12
+ this.instance = undefined;
13
+ }
14
+ // This will allow the virtual instance have bounds
15
+ get geometry() {
16
+ return resolveRef(this.instance)?.geometry;
17
+ }
18
+ raycast(raycaster, intersects) {
19
+ const parent = resolveRef(this.instance);
20
+ if (!parent || !parent.geometry)
21
+ return;
22
+ const instanceId = parent.userData['instances'].indexOf(this);
23
+ // If the instance wasn't found or exceeds the parents draw range, bail out
24
+ if (instanceId === -1 || instanceId > parent.geometry.drawRange.count)
25
+ return;
26
+ const threshold = raycaster.params.Points?.threshold ?? 1;
27
+ _sphere.set(this.getWorldPosition(_position), threshold);
28
+ if (raycaster.ray.intersectsSphere(_sphere) === false)
29
+ return;
30
+ _inverseMatrix.copy(parent.matrixWorld).invert();
31
+ _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);
32
+ const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);
33
+ const localThresholdSq = localThreshold * localThreshold;
34
+ const rayPointDistanceSq = _ray.distanceSqToPoint(this.position);
35
+ if (rayPointDistanceSq < localThresholdSq) {
36
+ const intersectPoint = new Vector3();
37
+ _ray.closestPointToPoint(this.position, intersectPoint);
38
+ intersectPoint.applyMatrix4(this.matrixWorld);
39
+ const distance = raycaster.ray.origin.distanceTo(intersectPoint);
40
+ if (distance < raycaster.near || distance > raycaster.far)
41
+ return;
42
+ intersects.push({
43
+ distance: distance,
44
+ distanceToRay: Math.sqrt(rayPointDistanceSq),
45
+ point: intersectPoint,
46
+ index: instanceId,
47
+ face: null,
48
+ object: this,
49
+ });
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24tcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvcGVyZm9ybWFuY2VzL3NyYy9saWIvcG9pbnRzL3Bvc2l0aW9uLXBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBbUIsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFnQixPQUFPLEVBQVUsR0FBRyxFQUFhLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFJckcsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7QUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUVoQyxNQUFNLE9BQU8sYUFBYyxTQUFRLEtBQUs7SUFLdkM7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELElBQUksUUFBUTtRQUNYLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVRLE9BQU8sQ0FBQyxTQUFvQixFQUFFLFVBQTBCO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN4QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCwyRUFBMkU7UUFDM0UsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRTlFLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUs7WUFBRSxPQUFPO1FBRTlELGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV0RCxNQUFNLGNBQWMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEYsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3pELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVqRSxJQUFJLGtCQUFrQixHQUFHLGdCQUFnQixFQUFFLENBQUM7WUFDM0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN4RCxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUc7Z0JBQUUsT0FBTztZQUNsRSxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNmLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDNUMsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLEtBQUssRUFBRSxVQUFVO2dCQUNqQixJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztRQUNKLENBQUM7SUFDRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RPYmplY3QzRE5vZGUsIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IENvbG9yLCBHcm91cCwgSW50ZXJzZWN0aW9uLCBNYXRyaXg0LCBQb2ludHMsIFJheSwgUmF5Y2FzdGVyLCBTcGhlcmUsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCB0eXBlIE5ndFBvc2l0aW9uUG9pbnQgPSBOZ3RPYmplY3QzRE5vZGU8UG9zaXRpb25Qb2ludCwgdHlwZW9mIFBvc2l0aW9uUG9pbnQ+O1xuXG5jb25zdCBfaW52ZXJzZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfcmF5ID0gbmV3IFJheSgpO1xuY29uc3QgX3NwaGVyZSA9IG5ldyBTcGhlcmUoKTtcbmNvbnN0IF9wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvblBvaW50IGV4dGVuZHMgR3JvdXAge1xuXHRzaXplOiBudW1iZXI7XG5cdGNvbG9yOiBDb2xvcjtcblx0aW5zdGFuY2U6IEVsZW1lbnRSZWY8UG9pbnRzPiB8IFBvaW50cyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnNpemUgPSAwO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoJ3doaXRlJyk7XG5cdFx0dGhpcy5pbnN0YW5jZSA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFRoaXMgd2lsbCBhbGxvdyB0aGUgdmlydHVhbCBpbnN0YW5jZSBoYXZlIGJvdW5kc1xuXHRnZXQgZ2VvbWV0cnkoKSB7XG5cdFx0cmV0dXJuIHJlc29sdmVSZWYodGhpcy5pbnN0YW5jZSk/Lmdlb21ldHJ5O1xuXHR9XG5cblx0b3ZlcnJpZGUgcmF5Y2FzdChyYXljYXN0ZXI6IFJheWNhc3RlciwgaW50ZXJzZWN0czogSW50ZXJzZWN0aW9uW10pIHtcblx0XHRjb25zdCBwYXJlbnQgPSByZXNvbHZlUmVmKHRoaXMuaW5zdGFuY2UpO1xuXHRcdGlmICghcGFyZW50IHx8ICFwYXJlbnQuZ2VvbWV0cnkpIHJldHVybjtcblx0XHRjb25zdCBpbnN0YW5jZUlkID0gcGFyZW50LnVzZXJEYXRhWydpbnN0YW5jZXMnXS5pbmRleE9mKHRoaXMpO1xuXHRcdC8vIElmIHRoZSBpbnN0YW5jZSB3YXNuJ3QgZm91bmQgb3IgZXhjZWVkcyB0aGUgcGFyZW50cyBkcmF3IHJhbmdlLCBiYWlsIG91dFxuXHRcdGlmIChpbnN0YW5jZUlkID09PSAtMSB8fCBpbnN0YW5jZUlkID4gcGFyZW50Lmdlb21ldHJ5LmRyYXdSYW5nZS5jb3VudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdGhyZXNob2xkID0gcmF5Y2FzdGVyLnBhcmFtcy5Qb2ludHM/LnRocmVzaG9sZCA/PyAxO1xuXHRcdF9zcGhlcmUuc2V0KHRoaXMuZ2V0V29ybGRQb3NpdGlvbihfcG9zaXRpb24pLCB0aHJlc2hvbGQpO1xuXHRcdGlmIChyYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoX3NwaGVyZSkgPT09IGZhbHNlKSByZXR1cm47XG5cblx0XHRfaW52ZXJzZU1hdHJpeC5jb3B5KHBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cdFx0X3JheS5jb3B5KHJheWNhc3Rlci5yYXkpLmFwcGx5TWF0cml4NChfaW52ZXJzZU1hdHJpeCk7XG5cblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZCA9IHRocmVzaG9sZCAvICgodGhpcy5zY2FsZS54ICsgdGhpcy5zY2FsZS55ICsgdGhpcy5zY2FsZS56KSAvIDMpO1xuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNob2xkO1xuXHRcdGNvbnN0IHJheVBvaW50RGlzdGFuY2VTcSA9IF9yYXkuZGlzdGFuY2VTcVRvUG9pbnQodGhpcy5wb3NpdGlvbik7XG5cblx0XHRpZiAocmF5UG9pbnREaXN0YW5jZVNxIDwgbG9jYWxUaHJlc2hvbGRTcSkge1xuXHRcdFx0Y29uc3QgaW50ZXJzZWN0UG9pbnQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0X3JheS5jbG9zZXN0UG9pbnRUb1BvaW50KHRoaXMucG9zaXRpb24sIGludGVyc2VjdFBvaW50KTtcblx0XHRcdGludGVyc2VjdFBvaW50LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtcblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhpbnRlcnNlY3RQb2ludCk7XG5cdFx0XHRpZiAoZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIpIHJldHVybjtcblx0XHRcdGludGVyc2VjdHMucHVzaCh7XG5cdFx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdFx0ZGlzdGFuY2VUb1JheTogTWF0aC5zcXJ0KHJheVBvaW50RGlzdGFuY2VTcSksXG5cdFx0XHRcdHBvaW50OiBpbnRlcnNlY3RQb2ludCxcblx0XHRcdFx0aW5kZXg6IGluc3RhbmNlSWQsXG5cdFx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRcdG9iamVjdDogdGhpcyxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1ncm91cFxuXHRcdCAqIEByYXdPcHRpb25zIGluc3RhbmNlfGNvbG9yfHNpemVcblx0XHQgKi9cblx0XHQnbmd0LXBvc2l0aW9uLXBvaW50JzogTmd0UG9zaXRpb25Qb2ludDtcblx0fVxufVxuIl19