@math.gl/geometry 5.0.0-alpha.2 → 5.0.0-alpha.20

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 (381) hide show
  1. package/LICENSE +97 -49
  2. package/README.md +16 -1
  3. package/THIRD-PARTY-NOTICES.md +18 -0
  4. package/dist/culling/constants.d.ts +3 -0
  5. package/dist/culling/constants.d.ts.map +1 -0
  6. package/dist/culling/constants.js +5 -0
  7. package/dist/culling/constants.js.map +1 -0
  8. package/dist/culling/index.cjs +2014 -0
  9. package/dist/culling/index.cjs.map +6 -0
  10. package/dist/culling/index.d.ts +29 -0
  11. package/dist/culling/index.d.ts.map +1 -0
  12. package/dist/culling/index.js +23 -0
  13. package/dist/culling/index.js.map +1 -0
  14. package/dist/culling/lib/algorithms/bounding-box-from-points.d.ts +15 -0
  15. package/dist/culling/lib/algorithms/bounding-box-from-points.d.ts.map +1 -0
  16. package/dist/culling/lib/algorithms/bounding-box-from-points.js +137 -0
  17. package/dist/culling/lib/algorithms/bounding-box-from-points.js.map +1 -0
  18. package/dist/culling/lib/algorithms/bounding-sphere-from-points.d.ts +14 -0
  19. package/dist/culling/lib/algorithms/bounding-sphere-from-points.d.ts.map +1 -0
  20. package/dist/culling/lib/algorithms/bounding-sphere-from-points.js +146 -0
  21. package/dist/culling/lib/algorithms/bounding-sphere-from-points.js.map +1 -0
  22. package/dist/culling/lib/algorithms/compute-eigen-decomposition.d.ts +37 -0
  23. package/dist/culling/lib/algorithms/compute-eigen-decomposition.d.ts.map +1 -0
  24. package/dist/culling/lib/algorithms/compute-eigen-decomposition.js +137 -0
  25. package/dist/culling/lib/algorithms/compute-eigen-decomposition.js.map +1 -0
  26. package/dist/culling/lib/algorithms/oriented-bounding-box-quaternion.d.ts +7 -0
  27. package/dist/culling/lib/algorithms/oriented-bounding-box-quaternion.d.ts.map +1 -0
  28. package/dist/culling/lib/algorithms/oriented-bounding-box-quaternion.js +26 -0
  29. package/dist/culling/lib/algorithms/oriented-bounding-box-quaternion.js.map +1 -0
  30. package/dist/culling/lib/bounding-volumes/axis-aligned-bounding-box.d.ts +56 -0
  31. package/dist/culling/lib/bounding-volumes/axis-aligned-bounding-box.d.ts.map +1 -0
  32. package/dist/culling/lib/bounding-volumes/axis-aligned-bounding-box.js +116 -0
  33. package/dist/culling/lib/bounding-volumes/axis-aligned-bounding-box.js.map +1 -0
  34. package/dist/culling/lib/bounding-volumes/bounding-sphere.d.ts +40 -0
  35. package/dist/culling/lib/bounding-volumes/bounding-sphere.d.ts.map +1 -0
  36. package/dist/culling/lib/bounding-volumes/bounding-sphere.js +123 -0
  37. package/dist/culling/lib/bounding-volumes/bounding-sphere.js.map +1 -0
  38. package/dist/culling/lib/bounding-volumes/bounding-volume.d.ts +30 -0
  39. package/dist/culling/lib/bounding-volumes/bounding-volume.d.ts.map +1 -0
  40. package/dist/culling/lib/bounding-volumes/bounding-volume.js +7 -0
  41. package/dist/culling/lib/bounding-volumes/bounding-volume.js.map +1 -0
  42. package/dist/culling/lib/bounding-volumes/oriented-bounding-box.d.ts +62 -0
  43. package/dist/culling/lib/bounding-volumes/oriented-bounding-box.d.ts.map +1 -0
  44. package/dist/culling/lib/bounding-volumes/oriented-bounding-box.js +230 -0
  45. package/dist/culling/lib/bounding-volumes/oriented-bounding-box.js.map +1 -0
  46. package/dist/culling/lib/culling-volume.d.ts +46 -0
  47. package/dist/culling/lib/culling-volume.d.ts.map +1 -0
  48. package/dist/culling/lib/culling-volume.js +126 -0
  49. package/dist/culling/lib/culling-volume.js.map +1 -0
  50. package/dist/culling/lib/perspective-frustum.d.ts +153 -0
  51. package/dist/culling/lib/perspective-frustum.d.ts.map +1 -0
  52. package/dist/culling/lib/perspective-frustum.js +191 -0
  53. package/dist/culling/lib/perspective-frustum.js.map +1 -0
  54. package/dist/culling/lib/perspective-off-center-frustum.d.ts +158 -0
  55. package/dist/culling/lib/perspective-off-center-frustum.d.ts.map +1 -0
  56. package/dist/culling/lib/perspective-off-center-frustum.js +276 -0
  57. package/dist/culling/lib/perspective-off-center-frustum.js.map +1 -0
  58. package/dist/culling/lib/plane.d.ts +35 -0
  59. package/dist/culling/lib/plane.d.ts.map +1 -0
  60. package/dist/culling/lib/plane.js +90 -0
  61. package/dist/culling/lib/plane.js.map +1 -0
  62. package/dist/culling/lib/ray.d.ts +13 -0
  63. package/dist/culling/lib/ray.d.ts.map +1 -0
  64. package/dist/culling/lib/ray.js +30 -0
  65. package/dist/culling/lib/ray.js.map +1 -0
  66. package/dist/culling/lib/shapes/box-shape.d.ts +19 -0
  67. package/dist/culling/lib/shapes/box-shape.d.ts.map +1 -0
  68. package/dist/culling/lib/shapes/box-shape.js +69 -0
  69. package/dist/culling/lib/shapes/box-shape.js.map +1 -0
  70. package/dist/culling/lib/shapes/capsule-shape.d.ts +23 -0
  71. package/dist/culling/lib/shapes/capsule-shape.d.ts.map +1 -0
  72. package/dist/culling/lib/shapes/capsule-shape.js +151 -0
  73. package/dist/culling/lib/shapes/capsule-shape.js.map +1 -0
  74. package/dist/culling/lib/shapes/cylinder-shape.d.ts +22 -0
  75. package/dist/culling/lib/shapes/cylinder-shape.d.ts.map +1 -0
  76. package/dist/culling/lib/shapes/cylinder-shape.js +99 -0
  77. package/dist/culling/lib/shapes/cylinder-shape.js.map +1 -0
  78. package/dist/culling/lib/shapes/implicit-shape.d.ts +56 -0
  79. package/dist/culling/lib/shapes/implicit-shape.d.ts.map +1 -0
  80. package/dist/culling/lib/shapes/implicit-shape.js +142 -0
  81. package/dist/culling/lib/shapes/implicit-shape.js.map +1 -0
  82. package/dist/culling/lib/shapes/plane-shape.d.ts +27 -0
  83. package/dist/culling/lib/shapes/plane-shape.d.ts.map +1 -0
  84. package/dist/culling/lib/shapes/plane-shape.js +71 -0
  85. package/dist/culling/lib/shapes/plane-shape.js.map +1 -0
  86. package/dist/culling/lib/shapes/sphere-shape.d.ts +18 -0
  87. package/dist/culling/lib/shapes/sphere-shape.d.ts.map +1 -0
  88. package/dist/culling/lib/shapes/sphere-shape.js +43 -0
  89. package/dist/culling/lib/shapes/sphere-shape.js.map +1 -0
  90. package/dist/culling/oriented-box-2d.cjs +73 -0
  91. package/dist/culling/oriented-box-2d.cjs.map +6 -0
  92. package/dist/culling/oriented-box-2d.d.ts +22 -0
  93. package/dist/culling/oriented-box-2d.d.ts.map +1 -0
  94. package/dist/culling/oriented-box-2d.js +86 -0
  95. package/dist/culling/oriented-box-2d.js.map +1 -0
  96. package/dist/culling/queries.cjs +161 -0
  97. package/dist/culling/queries.cjs.map +6 -0
  98. package/dist/culling/queries.d.ts +20 -0
  99. package/dist/culling/queries.d.ts.map +1 -0
  100. package/dist/culling/queries.js +139 -0
  101. package/dist/culling/queries.js.map +1 -0
  102. package/dist/curves/bezier-curves.d.ts +18 -0
  103. package/dist/curves/bezier-curves.d.ts.map +1 -0
  104. package/dist/curves/bezier-curves.js +54 -0
  105. package/dist/curves/bezier-curves.js.map +1 -0
  106. package/dist/curves/catmull-rom-curve.d.ts +15 -0
  107. package/dist/curves/catmull-rom-curve.d.ts.map +1 -0
  108. package/dist/curves/catmull-rom-curve.js +77 -0
  109. package/dist/curves/catmull-rom-curve.js.map +1 -0
  110. package/dist/curves/curve-arc-length.d.ts +17 -0
  111. package/dist/curves/curve-arc-length.d.ts.map +1 -0
  112. package/dist/curves/curve-arc-length.js +58 -0
  113. package/dist/curves/curve-arc-length.js.map +1 -0
  114. package/dist/curves/curve.d.ts +23 -0
  115. package/dist/curves/curve.d.ts.map +1 -0
  116. package/dist/curves/curve.js +77 -0
  117. package/dist/curves/curve.js.map +1 -0
  118. package/dist/curves/hermite-curve.d.ts +9 -0
  119. package/dist/curves/hermite-curve.d.ts.map +1 -0
  120. package/dist/curves/hermite-curve.js +24 -0
  121. package/dist/curves/hermite-curve.js.map +1 -0
  122. package/dist/curves/index.cjs +293 -0
  123. package/dist/curves/index.cjs.map +6 -0
  124. package/dist/curves/index.d.ts +8 -0
  125. package/dist/curves/index.d.ts.map +1 -0
  126. package/dist/curves/index.js +9 -0
  127. package/dist/curves/index.js.map +1 -0
  128. package/dist/geometries/box-geometry.js +1 -1
  129. package/dist/geometries/box-geometry.js.map +1 -1
  130. package/dist/geometries/capsule-geometry.js +1 -1
  131. package/dist/geometries/capsule-geometry.js.map +1 -1
  132. package/dist/geometries/cylinder-geometry.js +1 -1
  133. package/dist/geometries/cylinder-geometry.js.map +1 -1
  134. package/dist/geometries/geometry-helpers.js +1 -1
  135. package/dist/geometries/geometry-helpers.js.map +1 -1
  136. package/dist/geometries/ico-sphere-geometry.js +1 -1
  137. package/dist/geometries/ico-sphere-geometry.js.map +1 -1
  138. package/dist/geometries/plane-geometry.js +1 -1
  139. package/dist/geometries/plane-geometry.js.map +1 -1
  140. package/dist/geometries/primitive-mesh-builder.d.ts +24 -0
  141. package/dist/geometries/primitive-mesh-builder.d.ts.map +1 -0
  142. package/dist/geometries/primitive-mesh-builder.js +74 -0
  143. package/dist/geometries/primitive-mesh-builder.js.map +1 -0
  144. package/dist/geometries/prism-geometry.d.ts +13 -0
  145. package/dist/geometries/prism-geometry.d.ts.map +1 -0
  146. package/dist/geometries/prism-geometry.js +34 -0
  147. package/dist/geometries/prism-geometry.js.map +1 -0
  148. package/dist/geometries/ring-geometry.d.ts +15 -0
  149. package/dist/geometries/ring-geometry.d.ts.map +1 -0
  150. package/dist/geometries/ring-geometry.js +64 -0
  151. package/dist/geometries/ring-geometry.js.map +1 -0
  152. package/dist/geometries/sphere-geometry.js +1 -1
  153. package/dist/geometries/sphere-geometry.js.map +1 -1
  154. package/dist/geometries/surface-of-revolution.js +1 -1
  155. package/dist/geometries/surface-of-revolution.js.map +1 -1
  156. package/dist/geometries/truncated-cone-geometry.js +1 -1
  157. package/dist/geometries/truncated-cone-geometry.js.map +1 -1
  158. package/dist/index.cjs +290 -9
  159. package/dist/index.cjs.map +3 -3
  160. package/dist/index.d.ts +6 -0
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +4 -1
  163. package/dist/index.js.map +1 -1
  164. package/dist/lib/geometry-utils.js +1 -1
  165. package/dist/lib/geometry-utils.js.map +1 -1
  166. package/dist/lib/geometry.d.ts +1 -1
  167. package/dist/lib/geometry.d.ts.map +1 -1
  168. package/dist/lib/geometry.js +1 -1
  169. package/dist/lib/geometry.js.map +1 -1
  170. package/dist/lib/hinge-tree.d.ts +33 -0
  171. package/dist/lib/hinge-tree.d.ts.map +1 -0
  172. package/dist/lib/hinge-tree.js +144 -0
  173. package/dist/lib/hinge-tree.js.map +1 -0
  174. package/dist/parametric/lathe-geometry.d.ts +14 -0
  175. package/dist/parametric/lathe-geometry.d.ts.map +1 -0
  176. package/dist/parametric/lathe-geometry.js +48 -0
  177. package/dist/parametric/lathe-geometry.js.map +1 -0
  178. package/dist/parametric/parametric-geometry.d.ts +20 -0
  179. package/dist/parametric/parametric-geometry.d.ts.map +1 -0
  180. package/dist/parametric/parametric-geometry.js +88 -0
  181. package/dist/parametric/parametric-geometry.js.map +1 -0
  182. package/dist/parametric/torus-geometry.d.ts +19 -0
  183. package/dist/parametric/torus-geometry.d.ts.map +1 -0
  184. package/dist/parametric/torus-geometry.js +89 -0
  185. package/dist/parametric/torus-geometry.js.map +1 -0
  186. package/dist/parametric.cjs +328 -0
  187. package/dist/parametric.cjs.map +6 -0
  188. package/dist/parametric.d.ts +7 -0
  189. package/dist/parametric.d.ts.map +1 -0
  190. package/dist/parametric.js +7 -0
  191. package/dist/parametric.js.map +1 -0
  192. package/dist/polygon/cut-by-grid.d.ts +24 -0
  193. package/dist/polygon/cut-by-grid.d.ts.map +1 -0
  194. package/dist/polygon/cut-by-grid.js +221 -0
  195. package/dist/polygon/cut-by-grid.js.map +1 -0
  196. package/dist/polygon/cut-by-mercator-bounds.d.ts +17 -0
  197. package/dist/polygon/cut-by-mercator-bounds.d.ts.map +1 -0
  198. package/dist/polygon/cut-by-mercator-bounds.js +149 -0
  199. package/dist/polygon/cut-by-mercator-bounds.js.map +1 -0
  200. package/dist/polygon/earcut.d.ts +13 -0
  201. package/dist/polygon/earcut.d.ts.map +1 -0
  202. package/dist/polygon/earcut.js +627 -0
  203. package/dist/polygon/earcut.js.map +1 -0
  204. package/dist/polygon/index.cjs +1437 -0
  205. package/dist/polygon/index.cjs.map +6 -0
  206. package/dist/polygon/index.d.ts +12 -0
  207. package/dist/polygon/index.d.ts.map +1 -0
  208. package/dist/polygon/index.js +12 -0
  209. package/dist/polygon/index.js.map +1 -0
  210. package/dist/polygon/lineclip.d.ts +31 -0
  211. package/dist/polygon/lineclip.d.ts.map +1 -0
  212. package/dist/polygon/lineclip.js +184 -0
  213. package/dist/polygon/lineclip.js.map +1 -0
  214. package/dist/polygon/polygon-utils.d.ts +103 -0
  215. package/dist/polygon/polygon-utils.d.ts.map +1 -0
  216. package/dist/polygon/polygon-utils.js +155 -0
  217. package/dist/polygon/polygon-utils.js.map +1 -0
  218. package/dist/polygon/polygon.d.ts +41 -0
  219. package/dist/polygon/polygon.d.ts.map +1 -0
  220. package/dist/polygon/polygon.js +76 -0
  221. package/dist/polygon/polygon.js.map +1 -0
  222. package/dist/polygon/subdivide-polyline.d.ts +56 -0
  223. package/dist/polygon/subdivide-polyline.d.ts.map +1 -0
  224. package/dist/polygon/subdivide-polyline.js +141 -0
  225. package/dist/polygon/subdivide-polyline.js.map +1 -0
  226. package/dist/polygon/subdivide-triangle-mesh.d.ts +68 -0
  227. package/dist/polygon/subdivide-triangle-mesh.d.ts.map +1 -0
  228. package/dist/polygon/subdivide-triangle-mesh.js +228 -0
  229. package/dist/polygon/subdivide-triangle-mesh.js.map +1 -0
  230. package/dist/polygon/utils.d.ts +5 -0
  231. package/dist/polygon/utils.d.ts.map +1 -0
  232. package/dist/polygon/utils.js +38 -0
  233. package/dist/polygon/utils.js.map +1 -0
  234. package/dist/spatial-index/box-index.cjs +328 -0
  235. package/dist/spatial-index/box-index.cjs.map +6 -0
  236. package/dist/spatial-index/box-index.d.ts +65 -0
  237. package/dist/spatial-index/box-index.d.ts.map +1 -0
  238. package/dist/spatial-index/box-index.js +263 -0
  239. package/dist/spatial-index/box-index.js.map +1 -0
  240. package/dist/spatial-index/index.cjs +494 -0
  241. package/dist/spatial-index/index.cjs.map +6 -0
  242. package/dist/spatial-index/index.d.ts +5 -0
  243. package/dist/spatial-index/index.d.ts.map +1 -0
  244. package/dist/spatial-index/index.js +6 -0
  245. package/dist/spatial-index/index.js.map +1 -0
  246. package/dist/spatial-index/triangle-bvh.d.ts +53 -0
  247. package/dist/spatial-index/triangle-bvh.d.ts.map +1 -0
  248. package/dist/spatial-index/triangle-bvh.js +102 -0
  249. package/dist/spatial-index/triangle-bvh.js.map +1 -0
  250. package/dist/utils/attribute-compression.d.ts +50 -0
  251. package/dist/utils/attribute-compression.d.ts.map +1 -0
  252. package/dist/utils/attribute-compression.js +186 -0
  253. package/dist/utils/attribute-compression.js.map +1 -0
  254. package/dist/utils/attribute-iterator.d.ts +8 -0
  255. package/dist/utils/attribute-iterator.d.ts.map +1 -0
  256. package/dist/utils/attribute-iterator.js +25 -0
  257. package/dist/utils/attribute-iterator.js.map +1 -0
  258. package/dist/utils/compute-vertex-normals.d.ts +4 -0
  259. package/dist/utils/compute-vertex-normals.d.ts.map +1 -0
  260. package/dist/utils/compute-vertex-normals.js +54 -0
  261. package/dist/utils/compute-vertex-normals.js.map +1 -0
  262. package/dist/utils/constants.d.ts +52 -0
  263. package/dist/utils/constants.d.ts.map +1 -0
  264. package/dist/utils/constants.js +39 -0
  265. package/dist/utils/constants.js.map +1 -0
  266. package/dist/utils/coordinates.d.ts +3 -0
  267. package/dist/utils/coordinates.d.ts.map +1 -0
  268. package/dist/utils/coordinates.js +8 -0
  269. package/dist/utils/coordinates.js.map +1 -0
  270. package/dist/utils/geometry.d.ts +20 -0
  271. package/dist/utils/geometry.d.ts.map +1 -0
  272. package/dist/utils/geometry.js +31 -0
  273. package/dist/utils/geometry.js.map +1 -0
  274. package/dist/utils/gl-type.d.ts +17 -0
  275. package/dist/utils/gl-type.d.ts.map +1 -0
  276. package/dist/utils/gl-type.js +69 -0
  277. package/dist/utils/gl-type.js.map +1 -0
  278. package/dist/utils/index.cjs +965 -0
  279. package/dist/utils/index.cjs.map +6 -0
  280. package/dist/utils/index.d.ts +18 -0
  281. package/dist/utils/index.d.ts.map +1 -0
  282. package/dist/utils/index.js +16 -0
  283. package/dist/utils/index.js.map +1 -0
  284. package/dist/utils/interpolate-packed-attributes.cjs +176 -0
  285. package/dist/utils/interpolate-packed-attributes.cjs.map +6 -0
  286. package/dist/utils/interpolate-packed-attributes.d.ts +43 -0
  287. package/dist/utils/interpolate-packed-attributes.d.ts.map +1 -0
  288. package/dist/utils/interpolate-packed-attributes.js +192 -0
  289. package/dist/utils/interpolate-packed-attributes.js.map +1 -0
  290. package/dist/utils/mesh-processing.d.ts +18 -0
  291. package/dist/utils/mesh-processing.d.ts.map +1 -0
  292. package/dist/utils/mesh-processing.js +300 -0
  293. package/dist/utils/mesh-processing.js.map +1 -0
  294. package/dist/utils/primitive-iterator.d.ts +21 -0
  295. package/dist/utils/primitive-iterator.d.ts.map +1 -0
  296. package/dist/utils/primitive-iterator.js +117 -0
  297. package/dist/utils/primitive-iterator.js.map +1 -0
  298. package/dist/utils/rgb565.d.ts +5 -0
  299. package/dist/utils/rgb565.d.ts.map +1 -0
  300. package/dist/utils/rgb565.js +24 -0
  301. package/dist/utils/rgb565.js.map +1 -0
  302. package/dist/utils/typed-array-utils.d.ts +3 -0
  303. package/dist/utils/typed-array-utils.d.ts.map +1 -0
  304. package/dist/utils/typed-array-utils.js +16 -0
  305. package/dist/utils/typed-array-utils.js.map +1 -0
  306. package/package.json +57 -4
  307. package/src/culling/constants.ts +6 -0
  308. package/src/culling/index.ts +45 -0
  309. package/src/culling/lib/algorithms/bounding-box-from-points.ts +174 -0
  310. package/src/culling/lib/algorithms/bounding-sphere-from-points.ts +175 -0
  311. package/src/culling/lib/algorithms/compute-eigen-decomposition.ts +171 -0
  312. package/src/culling/lib/algorithms/oriented-bounding-box-quaternion.ts +32 -0
  313. package/src/culling/lib/bounding-volumes/axis-aligned-bounding-box.ts +153 -0
  314. package/src/culling/lib/bounding-volumes/bounding-sphere.ts +154 -0
  315. package/src/culling/lib/bounding-volumes/bounding-volume.ts +38 -0
  316. package/src/culling/lib/bounding-volumes/oriented-bounding-box.ts +320 -0
  317. package/src/culling/lib/culling-volume.ts +163 -0
  318. package/src/culling/lib/perspective-frustum.ts +288 -0
  319. package/src/culling/lib/perspective-off-center-frustum.ts +381 -0
  320. package/src/culling/lib/plane.ts +118 -0
  321. package/src/culling/lib/ray.ts +33 -0
  322. package/src/culling/lib/shapes/box-shape.ts +78 -0
  323. package/src/culling/lib/shapes/capsule-shape.ts +232 -0
  324. package/src/culling/lib/shapes/cylinder-shape.ts +133 -0
  325. package/src/culling/lib/shapes/implicit-shape.ts +209 -0
  326. package/src/culling/lib/shapes/plane-shape.ts +78 -0
  327. package/src/culling/lib/shapes/sphere-shape.ts +60 -0
  328. package/src/culling/oriented-box-2d.ts +165 -0
  329. package/src/culling/queries.ts +155 -0
  330. package/src/curves/bezier-curves.ts +62 -0
  331. package/src/curves/catmull-rom-curve.ts +89 -0
  332. package/src/curves/curve-arc-length.ts +70 -0
  333. package/src/curves/curve.ts +96 -0
  334. package/src/curves/hermite-curve.ts +34 -0
  335. package/src/curves/index.ts +15 -0
  336. package/src/geometries/box-geometry.ts +1 -1
  337. package/src/geometries/capsule-geometry.ts +1 -1
  338. package/src/geometries/cylinder-geometry.ts +1 -1
  339. package/src/geometries/geometry-helpers.ts +1 -1
  340. package/src/geometries/ico-sphere-geometry.ts +1 -1
  341. package/src/geometries/plane-geometry.ts +1 -1
  342. package/src/geometries/primitive-mesh-builder.ts +84 -0
  343. package/src/geometries/prism-geometry.ts +57 -0
  344. package/src/geometries/ring-geometry.ts +102 -0
  345. package/src/geometries/sphere-geometry.ts +1 -1
  346. package/src/geometries/surface-of-revolution.ts +1 -1
  347. package/src/geometries/truncated-cone-geometry.ts +1 -1
  348. package/src/index.ts +10 -1
  349. package/src/lib/geometry-utils.ts +2 -2
  350. package/src/lib/geometry.ts +2 -2
  351. package/src/lib/hinge-tree.ts +170 -0
  352. package/src/parametric/lathe-geometry.ts +70 -0
  353. package/src/parametric/parametric-geometry.ts +118 -0
  354. package/src/parametric/torus-geometry.ts +118 -0
  355. package/src/parametric.ts +9 -0
  356. package/src/polygon/cut-by-grid.ts +313 -0
  357. package/src/polygon/cut-by-mercator-bounds.ts +204 -0
  358. package/src/polygon/earcut.ts +798 -0
  359. package/src/polygon/index.ts +35 -0
  360. package/src/polygon/lineclip.ts +218 -0
  361. package/src/polygon/polygon-utils.ts +273 -0
  362. package/src/polygon/polygon.ts +105 -0
  363. package/src/polygon/subdivide-polyline.ts +223 -0
  364. package/src/polygon/subdivide-triangle-mesh.ts +322 -0
  365. package/src/polygon/utils.ts +50 -0
  366. package/src/spatial-index/box-index.ts +343 -0
  367. package/src/spatial-index/index.ts +18 -0
  368. package/src/spatial-index/triangle-bvh.ts +162 -0
  369. package/src/utils/attribute-compression.ts +234 -0
  370. package/src/utils/attribute-iterator.ts +28 -0
  371. package/src/utils/compute-vertex-normals.ts +63 -0
  372. package/src/utils/constants.ts +42 -0
  373. package/src/utils/coordinates.ts +8 -0
  374. package/src/utils/geometry.ts +49 -0
  375. package/src/utils/gl-type.ts +87 -0
  376. package/src/utils/index.ts +55 -0
  377. package/src/utils/interpolate-packed-attributes.ts +284 -0
  378. package/src/utils/mesh-processing.ts +377 -0
  379. package/src/utils/primitive-iterator.ts +145 -0
  380. package/src/utils/rgb565.ts +26 -0
  381. package/src/utils/typed-array-utils.ts +16 -0
@@ -0,0 +1,234 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT AND Apache-2.0
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ // SPDX-FileCopyrightText: Copyright 2011-2018 CesiumJS Contributors
5
+ // SPDX-FileComment: Derived from Cesium. See the repository LICENSE for upstream attribution and Apache-2.0 terms.
6
+
7
+ // Derived from Cesium under the Apache 2.0 license.
8
+ // https://github.com/CesiumGS/cesium/blob/main/LICENSE.md
9
+
10
+ import {Vector2, Vector3, assert, clamp, _MathUtils} from '@math.gl/core';
11
+
12
+ type Vector4 = {x: number; y: number; z: number; w: number};
13
+
14
+ const RIGHT_SHIFT = 1 / 256;
15
+ const LEFT_SHIFT = 256;
16
+ const scratchVector2 = new Vector2();
17
+ const scratchVector3 = new Vector3();
18
+ const scratchEncodeVector2 = new Vector2();
19
+ const octEncodeScratch = new Vector2();
20
+ const uint8ForceArray = new Uint8Array(1);
21
+
22
+ function forceUint8(value: number): number {
23
+ uint8ForceArray[0] = value;
24
+ return uint8ForceArray[0];
25
+ }
26
+
27
+ function fromSNorm(value: number, rangeMaximum = 255): number {
28
+ return (clamp(value, 0, rangeMaximum) / rangeMaximum) * 2 - 1;
29
+ }
30
+
31
+ function toSNorm(value: number, rangeMaximum = 255): number {
32
+ return Math.round((clamp(value, -1, 1) * 0.5 + 0.5) * rangeMaximum);
33
+ }
34
+
35
+ function signNotZero(value: number): number {
36
+ return value < 0 ? -1 : 1;
37
+ }
38
+
39
+ /**
40
+ * Encodes a normalized vector into two SNORM values following octahedral encoding.
41
+ *
42
+ * @param vector Normalized vector to encode.
43
+ * @param rangeMaximum Maximum value of the SNORM range.
44
+ * @param result Target for the two encoded components.
45
+ */
46
+ export function octEncodeInRange(vector: Vector3, rangeMaximum: number, result: Vector2): Vector2 {
47
+ assert(vector);
48
+ assert(result);
49
+ scratchVector3.from(vector);
50
+ assert(Math.abs(scratchVector3.magnitudeSquared() - 1) <= _MathUtils.EPSILON6);
51
+
52
+ const denominator = Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z);
53
+ result.x = vector.x / denominator;
54
+ result.y = vector.y / denominator;
55
+
56
+ if (vector.z < 0) {
57
+ const x = result.x;
58
+ const y = result.y;
59
+ result.x = (1 - Math.abs(y)) * signNotZero(x);
60
+ result.y = (1 - Math.abs(x)) * signNotZero(y);
61
+ }
62
+
63
+ result.x = toSNorm(result.x, rangeMaximum);
64
+ result.y = toSNorm(result.y, rangeMaximum);
65
+ return result;
66
+ }
67
+
68
+ /** Encodes a normalized vector into two 8-bit octahedral components. */
69
+ export function octEncode(vector: Vector3, result: Vector2): Vector2 {
70
+ return octEncodeInRange(vector, 255, result);
71
+ }
72
+
73
+ /** Encodes a normalized vector into four 8-bit octahedral components. */
74
+ export function octEncodeToVector4(vector: Vector3, result: Vector4): Vector4 {
75
+ octEncodeInRange(vector, 65535, octEncodeScratch);
76
+ result.x = forceUint8(octEncodeScratch.x * RIGHT_SHIFT);
77
+ result.y = forceUint8(octEncodeScratch.x);
78
+ result.z = forceUint8(octEncodeScratch.y * RIGHT_SHIFT);
79
+ result.w = forceUint8(octEncodeScratch.y);
80
+ return result;
81
+ }
82
+
83
+ /**
84
+ * Decodes two SNORM octahedral components into a normalized vector.
85
+ *
86
+ * @param x First encoded component.
87
+ * @param y Second encoded component.
88
+ * @param rangeMaximum Maximum value of the SNORM range.
89
+ * @param result Target for the decoded vector.
90
+ */
91
+ export function octDecodeInRange(
92
+ x: number,
93
+ y: number,
94
+ rangeMaximum: number,
95
+ result: Vector3
96
+ ): Vector3 {
97
+ assert(result);
98
+ if (x < 0 || x > rangeMaximum || y < 0 || y > rangeMaximum) {
99
+ throw new Error(`x and y must be unsigned normalized integers between 0 and ${rangeMaximum}`);
100
+ }
101
+
102
+ result.x = fromSNorm(x, rangeMaximum);
103
+ result.y = fromSNorm(y, rangeMaximum);
104
+ result.z = 1 - (Math.abs(result.x) + Math.abs(result.y));
105
+
106
+ if (result.z < 0) {
107
+ const oldX = result.x;
108
+ result.x = (1 - Math.abs(result.y)) * signNotZero(oldX);
109
+ result.y = (1 - Math.abs(oldX)) * signNotZero(result.y);
110
+ }
111
+ return result.normalize();
112
+ }
113
+
114
+ /** Decodes two 8-bit octahedral components into a normalized vector. */
115
+ export function octDecode(x: number, y: number, result: Vector3): Vector3 {
116
+ return octDecodeInRange(x, y, 255, result);
117
+ }
118
+
119
+ /** Decodes four 8-bit octahedral components into a normalized vector. */
120
+ export function octDecodeFromVector4(encoded: Vector4, result: Vector3): Vector3 {
121
+ assert(encoded);
122
+ assert(result);
123
+ const {x, y, z, w} = encoded;
124
+ if (x < 0 || x > 255 || y < 0 || y > 255 || z < 0 || z > 255 || w < 0 || w > 255) {
125
+ throw new Error('x, y, z, and w must be unsigned normalized integers between 0 and 255');
126
+ }
127
+ return octDecodeInRange(x * LEFT_SHIFT + y, z * LEFT_SHIFT + w, 65535, result);
128
+ }
129
+
130
+ /** Packs an octahedrally encoded two-component vector into one number. */
131
+ export function octPackFloat(encoded: Vector2): number {
132
+ scratchVector2.from(encoded);
133
+ return 256 * scratchVector2.x + scratchVector2.y;
134
+ }
135
+
136
+ /** Encodes a normalized vector into an octahedral representation packed into one number. */
137
+ export function octEncodeFloat(vector: Vector3): number {
138
+ octEncode(vector, scratchEncodeVector2);
139
+ return octPackFloat(scratchEncodeVector2);
140
+ }
141
+
142
+ /** Decodes an octahedral representation packed into one number. */
143
+ export function octDecodeFloat(value: number, result: Vector3): Vector3 {
144
+ assert(Number.isFinite(value));
145
+ const temporary = value / 256;
146
+ const x = Math.floor(temporary);
147
+ const y = (temporary - x) * 256;
148
+ return octDecode(x, y, result);
149
+ }
150
+
151
+ /** Packs three normalized vectors into two numeric octahedral values. */
152
+ export function octPack(
153
+ vector1: Vector3,
154
+ vector2: Vector3,
155
+ vector3: Vector3,
156
+ result: Vector2
157
+ ): Vector2 {
158
+ assert(vector1);
159
+ assert(vector2);
160
+ assert(vector3);
161
+ assert(result);
162
+ const encoded1 = octEncodeFloat(vector1);
163
+ const encoded2 = octEncodeFloat(vector2);
164
+ const encoded3 = octEncode(vector3, scratchEncodeVector2);
165
+ result.x = 65536 * encoded3.x + encoded1;
166
+ result.y = 65536 * encoded3.y + encoded2;
167
+ return result;
168
+ }
169
+
170
+ /** Decodes three normalized vectors packed by {@link octPack}. */
171
+ export function octUnpack(
172
+ packed: Vector2,
173
+ vector1: Vector3,
174
+ vector2: Vector3,
175
+ vector3: Vector3
176
+ ): void {
177
+ let temporary = packed.x / 65536;
178
+ const x = Math.floor(temporary);
179
+ const encodedFloat1 = (temporary - x) * 65536;
180
+ temporary = packed.y / 65536;
181
+ const y = Math.floor(temporary);
182
+ const encodedFloat2 = (temporary - y) * 65536;
183
+ octDecodeFloat(encodedFloat1, vector1);
184
+ octDecodeFloat(encodedFloat2, vector2);
185
+ octDecode(x, y, vector3);
186
+ }
187
+
188
+ /** Packs two normalized texture coordinates into one number with 12 bits per component. */
189
+ export function compressTextureCoordinates(textureCoordinates: Vector2): number {
190
+ const x = (textureCoordinates.x * 4095) | 0;
191
+ const y = (textureCoordinates.y * 4095) | 0;
192
+ return 4096 * x + y;
193
+ }
194
+
195
+ /** Decompresses texture coordinates packed by {@link compressTextureCoordinates}. */
196
+ export function decompressTextureCoordinates(compressed: number, result: Vector2): Vector2 {
197
+ const temporary = compressed / 4096;
198
+ const x = Math.floor(temporary);
199
+ result.x = x / 4095;
200
+ result.y = (compressed - x * 4096) / 4095;
201
+ return result;
202
+ }
203
+
204
+ /** Decodes delta- and ZigZag-encoded vertex buffers in place. */
205
+ export function zigZagDeltaDecode(
206
+ uBuffer: Uint16Array,
207
+ vBuffer: Uint16Array,
208
+ heightBuffer?: Uint16Array | number[]
209
+ ): void {
210
+ assert(uBuffer);
211
+ assert(vBuffer);
212
+ assert(uBuffer.length === vBuffer.length);
213
+ if (heightBuffer) {
214
+ assert(uBuffer.length === heightBuffer.length);
215
+ }
216
+
217
+ let u = 0;
218
+ let v = 0;
219
+ let height = 0;
220
+ for (let index = 0; index < uBuffer.length; index++) {
221
+ u += zigZagDecode(uBuffer[index]);
222
+ v += zigZagDecode(vBuffer[index]);
223
+ uBuffer[index] = u;
224
+ vBuffer[index] = v;
225
+ if (heightBuffer) {
226
+ height += zigZagDecode(heightBuffer[index]);
227
+ heightBuffer[index] = height;
228
+ }
229
+ }
230
+ }
231
+
232
+ function zigZagDecode(value: number): number {
233
+ return (value >> 1) ^ -(value & 1);
234
+ }
@@ -0,0 +1,28 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import type {TypedArray, TypedArrayConstructor} from '@math.gl/core/types';
6
+
7
+ /**
8
+ * Iterates over the fixed-size elements of a typed array.
9
+ *
10
+ * For performance, each iteration reuses the same typed-array view-sized value.
11
+ */
12
+ export function* makeAttributeIterator(values: TypedArray, size: number): Iterable<TypedArray> {
13
+ if (!Number.isInteger(size) || size <= 0) {
14
+ throw new Error('Attribute size must be a positive integer');
15
+ }
16
+ if (values.length % size !== 0) {
17
+ throw new Error('Attribute length must be divisible by its size');
18
+ }
19
+
20
+ const ArrayType = values.constructor as TypedArrayConstructor;
21
+ const element = new ArrayType(size);
22
+ for (let index = 0; index < values.length; index += size) {
23
+ for (let componentIndex = 0; componentIndex < size; componentIndex++) {
24
+ element[componentIndex] = values[index + componentIndex]!;
25
+ }
26
+ yield element;
27
+ }
28
+ }
@@ -0,0 +1,63 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import {Vector3} from '@math.gl/core';
6
+ import {GL} from './constants';
7
+ import type {Geometry} from './geometry';
8
+ import {getAttributeValues, getPositionAttribute} from './geometry';
9
+ import {makePrimitiveIterator} from './primitive-iterator';
10
+
11
+ /** Computes smooth, area-weighted vertex normals for a triangle geometry. */
12
+ export function computeVertexNormals(geometry: Geometry): Float32Array {
13
+ if (
14
+ geometry.mode !== GL.TRIANGLES &&
15
+ geometry.mode !== GL.TRIANGLE_STRIP &&
16
+ geometry.mode !== GL.TRIANGLE_FAN
17
+ ) {
18
+ throw new Error('Triangle geometry is required');
19
+ }
20
+
21
+ const position = getPositionAttribute(geometry);
22
+ const positions = getAttributeValues(position);
23
+ const positionSize = position.size || 3;
24
+ if (positionSize < 3) {
25
+ throw new Error('Position attributes must have at least three components');
26
+ }
27
+
28
+ const vertexCount = positions.length / positionSize;
29
+ const normals = new Float32Array(vertexCount * 3);
30
+ const vectorA = new Vector3();
31
+ const vectorB = new Vector3();
32
+ const vectorC = new Vector3();
33
+ const edgeCB = new Vector3();
34
+ const edgeAB = new Vector3();
35
+
36
+ for (const primitive of makePrimitiveIterator(geometry)) {
37
+ const {i1, i2, i3} = primitive;
38
+ if (i2 === undefined || i3 === undefined) {
39
+ continue;
40
+ }
41
+ vectorA.fromArray(positions, i1 * positionSize);
42
+ vectorB.fromArray(positions, i2 * positionSize);
43
+ vectorC.fromArray(positions, i3 * positionSize);
44
+ const faceNormal = edgeCB
45
+ .subVectors(vectorC, vectorB)
46
+ .cross(edgeAB.subVectors(vectorA, vectorB));
47
+
48
+ for (const vertexIndex of [i1, i2, i3]) {
49
+ normals[vertexIndex * 3] += faceNormal.x;
50
+ normals[vertexIndex * 3 + 1] += faceNormal.y;
51
+ normals[vertexIndex * 3 + 2] += faceNormal.z;
52
+ }
53
+ }
54
+
55
+ const normal = new Vector3();
56
+ for (let vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++) {
57
+ normal.fromArray(normals, vertexIndex * 3);
58
+ if (normal.magnitudeSquared() > 0) {
59
+ normal.normalize().toArray(normals, vertexIndex * 3);
60
+ }
61
+ }
62
+ return normals;
63
+ }
@@ -0,0 +1,42 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ /** Portable point, line, and triangle primitive types. */
6
+ export const GL_PRIMITIVE = {
7
+ POINTS: 0x0000,
8
+ LINES: 0x0001,
9
+ TRIANGLES: 0x0004
10
+ } as const;
11
+
12
+ /** WebGL-compatible primitive topology constants. */
13
+ export const GL_PRIMITIVE_MODE = {
14
+ POINTS: 0x0000,
15
+ LINES: 0x0001,
16
+ LINE_LOOP: 0x0002,
17
+ LINE_STRIP: 0x0003,
18
+ TRIANGLES: 0x0004,
19
+ TRIANGLE_STRIP: 0x0005,
20
+ TRIANGLE_FAN: 0x0006
21
+ } as const;
22
+
23
+ /** WebGL-compatible vertex component type constants. */
24
+ export const GL_TYPE = {
25
+ BYTE: 5120,
26
+ UNSIGNED_BYTE: 5121,
27
+ SHORT: 5122,
28
+ UNSIGNED_SHORT: 5123,
29
+ INT: 5124,
30
+ UNSIGNED_INT: 5125,
31
+ FLOAT: 5126,
32
+ DOUBLE: 5130,
33
+ UNSIGNED_SHORT_4_4_4_4: 32819,
34
+ UNSIGNED_SHORT_5_5_5_1: 32820,
35
+ UNSIGNED_SHORT_5_6_5: 33635
36
+ } as const;
37
+
38
+ /** WebGL-compatible constants used by geometry utilities. */
39
+ export const GL = {
40
+ ...GL_PRIMITIVE_MODE,
41
+ ...GL_TYPE
42
+ } as const;
@@ -0,0 +1,8 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ /** Wraps a number into the half-open range `[0, 1)`. */
6
+ export function emod(value: number): number {
7
+ return ((value % 1) + 1) % 1;
8
+ }
@@ -0,0 +1,49 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import type {TypedArray} from '@math.gl/core/types';
6
+
7
+ /** A typed geometry attribute with either loaders.gl-style `value` or legacy `values` storage. */
8
+ export type GeometryAttribute = {
9
+ value?: TypedArray;
10
+ values?: TypedArray;
11
+ size?: number;
12
+ };
13
+
14
+ /** Minimal geometry shape understood by the geometry utilities. */
15
+ export type Geometry = {
16
+ mode: number;
17
+ indices?: GeometryAttribute | TypedArray;
18
+ attributes: Record<string, GeometryAttribute>;
19
+ };
20
+
21
+ /** Returns whether a value has the minimal geometry shape. */
22
+ export function isGeometry(value: unknown): value is Geometry {
23
+ if (!value || typeof value !== 'object') {
24
+ return false;
25
+ }
26
+ const geometry = value as Partial<Geometry>;
27
+ return typeof geometry.mode === 'number' && Boolean(geometry.attributes);
28
+ }
29
+
30
+ /** Returns the typed array stored in a geometry attribute. */
31
+ export function getAttributeValues(attribute: GeometryAttribute | TypedArray): TypedArray {
32
+ if (ArrayBuffer.isView(attribute)) {
33
+ return attribute as TypedArray;
34
+ }
35
+ const values = attribute.value || attribute.values;
36
+ if (!values) {
37
+ throw new Error('Geometry attribute does not contain typed-array values');
38
+ }
39
+ return values;
40
+ }
41
+
42
+ /** Returns a geometry's position attribute. */
43
+ export function getPositionAttribute(geometry: Geometry): GeometryAttribute {
44
+ const position = geometry.attributes['POSITION'] || geometry.attributes['positions'];
45
+ if (!position) {
46
+ throw new Error('Geometry does not contain a position attribute');
47
+ }
48
+ return position;
49
+ }
@@ -0,0 +1,87 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ import type {TypedArray, TypedArrayConstructor} from '@math.gl/core/types';
6
+ import {GL_TYPE} from './constants';
7
+
8
+ const GL_TYPE_TO_ARRAY_TYPE: Record<number, TypedArrayConstructor> = {
9
+ [GL_TYPE.DOUBLE]: Float64Array,
10
+ [GL_TYPE.FLOAT]: Float32Array,
11
+ [GL_TYPE.UNSIGNED_SHORT]: Uint16Array,
12
+ [GL_TYPE.UNSIGNED_INT]: Uint32Array,
13
+ [GL_TYPE.UNSIGNED_BYTE]: Uint8Array,
14
+ [GL_TYPE.BYTE]: Int8Array,
15
+ [GL_TYPE.SHORT]: Int16Array,
16
+ [GL_TYPE.INT]: Int32Array,
17
+ [GL_TYPE.UNSIGNED_SHORT_4_4_4_4]: Uint16Array,
18
+ [GL_TYPE.UNSIGNED_SHORT_5_5_5_1]: Uint16Array,
19
+ [GL_TYPE.UNSIGNED_SHORT_5_6_5]: Uint16Array
20
+ };
21
+
22
+ const NAME_TO_GL_TYPE: Record<string, number> = Object.fromEntries(
23
+ Object.entries(GL_TYPE).map(([name, glType]) => [name, glType])
24
+ );
25
+
26
+ const TYPE_CONVERSION_ERROR = 'Failed to convert GL type';
27
+
28
+ /** Converts between WebGL component constants and JavaScript typed arrays. */
29
+ export default class GLType {
30
+ /** Returns the WebGL component constant for a typed array or typed-array constructor. */
31
+ static fromTypedArray(arrayOrType: TypedArray | TypedArrayConstructor): number {
32
+ const arrayType = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;
33
+ if (arrayType === Uint8ClampedArray) {
34
+ return GL_TYPE.UNSIGNED_BYTE;
35
+ }
36
+ for (const [glType, candidateArrayType] of Object.entries(GL_TYPE_TO_ARRAY_TYPE)) {
37
+ if (candidateArrayType === arrayType) {
38
+ return Number(glType);
39
+ }
40
+ }
41
+ throw new Error(TYPE_CONVERSION_ERROR);
42
+ }
43
+
44
+ /** Returns a WebGL component constant from its uppercase name. */
45
+ static fromName(name: string): number {
46
+ const glType = NAME_TO_GL_TYPE[name];
47
+ if (glType === undefined) {
48
+ throw new Error(TYPE_CONVERSION_ERROR);
49
+ }
50
+ return glType;
51
+ }
52
+
53
+ /** Returns the typed-array constructor for a WebGL component constant. */
54
+ static getArrayType(glType: number): TypedArrayConstructor {
55
+ const ArrayType = GL_TYPE_TO_ARRAY_TYPE[glType];
56
+ if (!ArrayType) {
57
+ throw new Error(TYPE_CONVERSION_ERROR);
58
+ }
59
+ return ArrayType;
60
+ }
61
+
62
+ /** Returns the size in bytes of one element of a WebGL component type. */
63
+ static getByteSize(glType: number): number {
64
+ return GLType.getArrayType(glType).BYTES_PER_ELEMENT;
65
+ }
66
+
67
+ /** Returns whether a value is a supported WebGL component type. */
68
+ static validate(glType: number): boolean {
69
+ return Boolean(GL_TYPE_TO_ARRAY_TYPE[glType]);
70
+ }
71
+
72
+ /** Creates a typed view over an ArrayBuffer or an existing ArrayBuffer view. */
73
+ static createTypedArray(
74
+ glType: number,
75
+ buffer: ArrayBufferLike | ArrayBufferView,
76
+ byteOffset = 0,
77
+ length?: number
78
+ ): TypedArray {
79
+ const ArrayType = GLType.getArrayType(glType);
80
+ const arrayBuffer = ArrayBuffer.isView(buffer) ? buffer.buffer : buffer;
81
+ const viewByteOffset = ArrayBuffer.isView(buffer) ? buffer.byteOffset : 0;
82
+ const resolvedByteOffset = viewByteOffset + byteOffset;
83
+ const resolvedLength =
84
+ length ?? Math.floor((buffer.byteLength - byteOffset) / ArrayType.BYTES_PER_ELEMENT);
85
+ return new ArrayType(arrayBuffer as ArrayBuffer, resolvedByteOffset, resolvedLength);
86
+ }
87
+ }
@@ -0,0 +1,55 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+
5
+ export type {TypedArray, TypedArrayConstructor} from '@math.gl/core/types';
6
+
7
+ export {GL, GL_TYPE, GL_PRIMITIVE, GL_PRIMITIVE_MODE} from './constants';
8
+ export {default as GLType} from './gl-type';
9
+
10
+ export type {Geometry, GeometryAttribute} from './geometry';
11
+ export {isGeometry} from './geometry';
12
+
13
+ export type {Primitive} from './primitive-iterator';
14
+ export {makeAttributeIterator} from './attribute-iterator';
15
+ export {makePrimitiveIterator} from './primitive-iterator';
16
+ export {computeVertexNormals} from './compute-vertex-normals';
17
+
18
+ export {encodeRGB565, decodeRGB565} from './rgb565';
19
+ export {concatTypedArrays} from './typed-array-utils';
20
+
21
+ export {
22
+ octEncodeInRange,
23
+ octEncode,
24
+ octEncodeToVector4,
25
+ octDecodeInRange,
26
+ octDecode,
27
+ octDecodeFromVector4,
28
+ octPackFloat,
29
+ octEncodeFloat,
30
+ octDecodeFloat,
31
+ octPack,
32
+ octUnpack,
33
+ compressTextureCoordinates,
34
+ decompressTextureCoordinates,
35
+ zigZagDeltaDecode
36
+ } from './attribute-compression';
37
+
38
+ export {emod} from './coordinates';
39
+
40
+ export {
41
+ transformGeometry,
42
+ mergeGeometries,
43
+ weldGeometry,
44
+ getDegenerateTriangles
45
+ } from './mesh-processing';
46
+ export type {WeldGeometryOptions, WeldGeometryResult} from './mesh-processing';
47
+
48
+ export {interpolatePackedAttributes} from './interpolate-packed-attributes';
49
+ export type {
50
+ PackedAttributeType,
51
+ PackedAttributeInterpolation,
52
+ PackedAttribute,
53
+ AttributeInterpolationProvenance,
54
+ PackedAttributeInterpolationOptions
55
+ } from './interpolate-packed-attributes';