@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,627 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT AND ISC
3
+ // SPDX-FileCopyrightText: Copyright (c) 2016, Mapbox
4
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
5
+ // SPDX-FileComment: Adapted from Mapbox earcut. Original ISC notice retained below.
6
+ import { getPolygonSignedArea, DimIndex } from "./polygon-utils.js";
7
+ /**
8
+ * Computes a triangulation of a polygon
9
+ * @param positions a flat array of the vertex positions that define the polygon.
10
+ * @param holeIndices an array of hole indices if any (e.g. [5, 8] for a 12-vertex input would mean one hole with vertices 5–7 and another with 8–11).
11
+ * @param dim the number of elements in each vertex. Size `2` will interpret `positions` as `[x0, y0, x1, y1, ...]` and size `3` will interpret `positions` as `[x0, y0, z0, x1, y1, z1, ...]`. Default `2`.
12
+ * @param areas areas of outer polygon and holes as computed by `getPolygonSignedArea()`. Can be optionally supplied to speed up triangulation
13
+ * @returns array of indices into the `positions` array that describes the triangulation of the polygon
14
+ * Adapted from https://github.com/mapbox/earcut
15
+ */
16
+ export function earcut(positions, holeIndices, dim = 2, areas, plane = 'xy') {
17
+ const hasHoles = holeIndices && holeIndices.length;
18
+ const outerLen = hasHoles ? holeIndices[0] * dim : positions.length;
19
+ let outerNode = linkedList(positions, 0, outerLen, dim, true, areas && areas[0], plane);
20
+ const triangles = [];
21
+ if (!outerNode || outerNode.next === outerNode.prev)
22
+ return triangles;
23
+ let invSize;
24
+ let maxX;
25
+ let maxY;
26
+ let minX;
27
+ let minY;
28
+ let x;
29
+ let y;
30
+ if (hasHoles)
31
+ outerNode = eliminateHoles(positions, holeIndices, outerNode, dim, areas, plane);
32
+ // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
33
+ if (positions.length > 80 * dim) {
34
+ minX = maxX = positions[0];
35
+ minY = maxY = positions[1];
36
+ for (let i = dim; i < outerLen; i += dim) {
37
+ x = positions[i];
38
+ y = positions[i + 1];
39
+ if (x < minX)
40
+ minX = x;
41
+ if (y < minY)
42
+ minY = y;
43
+ if (x > maxX)
44
+ maxX = x;
45
+ if (y > maxY)
46
+ maxY = y;
47
+ }
48
+ // minX, minY and invSize are later used to transform coords into integers for z-order calculation
49
+ invSize = Math.max(maxX - minX, maxY - minY);
50
+ invSize = invSize !== 0 ? 32767 / invSize : 0;
51
+ }
52
+ earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);
53
+ return triangles;
54
+ }
55
+ // create a circular doubly linked list from polygon points in the specified winding order
56
+ function linkedList(data, start, end, dim, clockwise, area, plane) {
57
+ let i;
58
+ let last;
59
+ if (area === undefined) {
60
+ area = getPolygonSignedArea(data, { start, end, size: dim, plane });
61
+ }
62
+ let i0 = DimIndex[plane[0]];
63
+ let i1 = DimIndex[plane[1]];
64
+ // Note that the signed area calculation in math.gl
65
+ // has the opposite sign to that which was originally
66
+ // present in earcut, thus the `< 0` is reversed
67
+ if (clockwise === area < 0) {
68
+ for (i = start; i < end; i += dim)
69
+ last = insertNode(i, data[i + i0], data[i + i1], last);
70
+ }
71
+ else {
72
+ for (i = end - dim; i >= start; i -= dim)
73
+ last = insertNode(i, data[i + i0], data[i + i1], last);
74
+ }
75
+ if (last && equals(last, last.next)) {
76
+ removeNode(last);
77
+ last = last.next;
78
+ }
79
+ return last;
80
+ }
81
+ // eliminate colinear or duplicate points
82
+ function filterPoints(start, end) {
83
+ if (!start)
84
+ return start;
85
+ if (!end)
86
+ end = start;
87
+ let p = start;
88
+ let again;
89
+ do {
90
+ again = false;
91
+ if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {
92
+ removeNode(p);
93
+ p = end = p.prev;
94
+ if (p === p.next)
95
+ break;
96
+ again = true;
97
+ }
98
+ else {
99
+ p = p.next;
100
+ }
101
+ } while (again || p !== end);
102
+ return end;
103
+ }
104
+ // main ear slicing loop which triangulates a polygon (given as a linked list)
105
+ function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {
106
+ if (!ear)
107
+ return;
108
+ // interlink polygon nodes in z-order
109
+ if (!pass && invSize)
110
+ indexCurve(ear, minX, minY, invSize);
111
+ let stop = ear;
112
+ let prev;
113
+ let next;
114
+ // iterate through ears, slicing them one by one
115
+ while (ear.prev !== ear.next) {
116
+ prev = ear.prev;
117
+ next = ear.next;
118
+ if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {
119
+ // cut off the triangle
120
+ triangles.push((prev.i / dim) | 0);
121
+ triangles.push((ear.i / dim) | 0);
122
+ triangles.push((next.i / dim) | 0);
123
+ removeNode(ear);
124
+ // skipping the next vertex leads to less sliver triangles
125
+ ear = next.next;
126
+ stop = next.next;
127
+ continue;
128
+ }
129
+ ear = next;
130
+ // if we looped through the whole remaining polygon and can't find any more ears
131
+ if (ear === stop) {
132
+ // try filtering points and slicing again
133
+ if (!pass) {
134
+ earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);
135
+ // if this didn't work, try curing all small self-intersections locally
136
+ }
137
+ else if (pass === 1) {
138
+ ear = cureLocalIntersections(filterPoints(ear), triangles, dim);
139
+ earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);
140
+ // as a last resort, try splitting the remaining polygon into two
141
+ }
142
+ else if (pass === 2) {
143
+ splitEarcut(ear, triangles, dim, minX, minY, invSize);
144
+ }
145
+ break;
146
+ }
147
+ }
148
+ }
149
+ // check whether a polygon node forms a valid ear with adjacent nodes
150
+ function isEar(ear) {
151
+ const a = ear.prev;
152
+ const b = ear;
153
+ const c = ear.next;
154
+ if (area(a, b, c) >= 0)
155
+ return false; // reflex, can't be an ear
156
+ // now make sure we don't have other points inside the potential ear
157
+ const ax = a.x;
158
+ const bx = b.x;
159
+ const cx = c.x;
160
+ const ay = a.y;
161
+ const by = b.y;
162
+ const cy = c.y;
163
+ // triangle bbox; min & max are calculated like this for speed
164
+ const x0 = ax < bx ? (ax < cx ? ax : cx) : bx < cx ? bx : cx;
165
+ const y0 = ay < by ? (ay < cy ? ay : cy) : by < cy ? by : cy;
166
+ const x1 = ax > bx ? (ax > cx ? ax : cx) : bx > cx ? bx : cx;
167
+ const y1 = ay > by ? (ay > cy ? ay : cy) : by > cy ? by : cy;
168
+ let p = c.next;
169
+ while (p !== a) {
170
+ if (p.x >= x0 &&
171
+ p.x <= x1 &&
172
+ p.y >= y0 &&
173
+ p.y <= y1 &&
174
+ pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&
175
+ area(p.prev, p, p.next) >= 0)
176
+ return false;
177
+ p = p.next;
178
+ }
179
+ return true;
180
+ }
181
+ function isEarHashed(ear, minX, minY, invSize) {
182
+ const a = ear.prev;
183
+ const b = ear;
184
+ const c = ear.next;
185
+ if (area(a, b, c) >= 0)
186
+ return false; // reflex, can't be an ear
187
+ const ax = a.x;
188
+ const bx = b.x;
189
+ const cx = c.x;
190
+ const ay = a.y;
191
+ const by = b.y;
192
+ const cy = c.y;
193
+ // triangle bbox; min & max are calculated like this for speed
194
+ const x0 = ax < bx ? (ax < cx ? ax : cx) : bx < cx ? bx : cx;
195
+ const y0 = ay < by ? (ay < cy ? ay : cy) : by < cy ? by : cy;
196
+ const x1 = ax > bx ? (ax > cx ? ax : cx) : bx > cx ? bx : cx;
197
+ const y1 = ay > by ? (ay > cy ? ay : cy) : by > cy ? by : cy;
198
+ // z-order range for the current triangle bbox;
199
+ const minZ = zOrder(x0, y0, minX, minY, invSize);
200
+ const maxZ = zOrder(x1, y1, minX, minY, invSize);
201
+ let p = ear.prevZ;
202
+ let n = ear.nextZ;
203
+ // look for points inside the triangle in both directions
204
+ while (p && p.z >= minZ && n && n.z <= maxZ) {
205
+ if (p.x >= x0 &&
206
+ p.x <= x1 &&
207
+ p.y >= y0 &&
208
+ p.y <= y1 &&
209
+ p !== a &&
210
+ p !== c &&
211
+ pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&
212
+ area(p.prev, p, p.next) >= 0)
213
+ return false;
214
+ p = p.prevZ;
215
+ if (n.x >= x0 &&
216
+ n.x <= x1 &&
217
+ n.y >= y0 &&
218
+ n.y <= y1 &&
219
+ n !== a &&
220
+ n !== c &&
221
+ pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) &&
222
+ area(n.prev, n, n.next) >= 0)
223
+ return false;
224
+ n = n.nextZ;
225
+ }
226
+ // look for remaining points in decreasing z-order
227
+ while (p && p.z >= minZ) {
228
+ if (p.x >= x0 &&
229
+ p.x <= x1 &&
230
+ p.y >= y0 &&
231
+ p.y <= y1 &&
232
+ p !== a &&
233
+ p !== c &&
234
+ pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&
235
+ area(p.prev, p, p.next) >= 0)
236
+ return false;
237
+ p = p.prevZ;
238
+ }
239
+ // look for remaining points in increasing z-order
240
+ while (n && n.z <= maxZ) {
241
+ if (n.x >= x0 &&
242
+ n.x <= x1 &&
243
+ n.y >= y0 &&
244
+ n.y <= y1 &&
245
+ n !== a &&
246
+ n !== c &&
247
+ pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) &&
248
+ area(n.prev, n, n.next) >= 0)
249
+ return false;
250
+ n = n.nextZ;
251
+ }
252
+ return true;
253
+ }
254
+ // go through all polygon nodes and cure small local self-intersections
255
+ function cureLocalIntersections(start, triangles, dim) {
256
+ let p = start;
257
+ do {
258
+ const a = p.prev;
259
+ const b = p.next.next;
260
+ if (!equals(a, b) &&
261
+ intersects(a, p, p.next, b) &&
262
+ locallyInside(a, b) &&
263
+ locallyInside(b, a)) {
264
+ triangles.push((a.i / dim) | 0);
265
+ triangles.push((p.i / dim) | 0);
266
+ triangles.push((b.i / dim) | 0);
267
+ // remove two nodes involved
268
+ removeNode(p);
269
+ removeNode(p.next);
270
+ p = start = b;
271
+ }
272
+ p = p.next;
273
+ } while (p !== start);
274
+ return filterPoints(p);
275
+ }
276
+ // try splitting polygon into two and triangulate them independently
277
+ function splitEarcut(start, triangles, dim, minX, minY, invSize) {
278
+ // look for a valid diagonal that divides the polygon into two
279
+ let a = start;
280
+ do {
281
+ let b = a.next.next;
282
+ while (b !== a.prev) {
283
+ if (a.i !== b.i && isValidDiagonal(a, b)) {
284
+ // split the polygon in two by the diagonal
285
+ let c = splitPolygon(a, b);
286
+ // filter colinear points around the cuts
287
+ a = filterPoints(a, a.next);
288
+ c = filterPoints(c, c.next);
289
+ // run earcut on each half
290
+ earcutLinked(a, triangles, dim, minX, minY, invSize, 0);
291
+ earcutLinked(c, triangles, dim, minX, minY, invSize, 0);
292
+ return;
293
+ }
294
+ b = b.next;
295
+ }
296
+ a = a.next;
297
+ } while (a !== start);
298
+ }
299
+ // link every hole into the outer loop, producing a single-ring polygon without holes
300
+ function eliminateHoles(data, holeIndices, outerNode, dim, areas, plane) {
301
+ const queue = [];
302
+ let i;
303
+ let len;
304
+ let start;
305
+ let end;
306
+ let list;
307
+ for (i = 0, len = holeIndices.length; i < len; i++) {
308
+ start = holeIndices[i] * dim;
309
+ end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
310
+ list = linkedList(data, start, end, dim, false, areas && areas[i + 1], plane);
311
+ if (list === list.next)
312
+ list.steiner = true;
313
+ queue.push(getLeftmost(list));
314
+ }
315
+ queue.sort(compareX);
316
+ // process holes from left to right
317
+ for (i = 0; i < queue.length; i++) {
318
+ outerNode = eliminateHole(queue[i], outerNode);
319
+ }
320
+ return outerNode;
321
+ }
322
+ function compareX(a, b) {
323
+ return a.x - b.x;
324
+ }
325
+ // find a bridge between vertices that connects hole with an outer ring and and link it
326
+ function eliminateHole(hole, outerNode) {
327
+ const bridge = findHoleBridge(hole, outerNode);
328
+ if (!bridge) {
329
+ return outerNode;
330
+ }
331
+ const bridgeReverse = splitPolygon(bridge, hole);
332
+ // filter collinear points around the cuts
333
+ filterPoints(bridgeReverse, bridgeReverse.next);
334
+ return filterPoints(bridge, bridge.next);
335
+ }
336
+ // David Eberly's algorithm for finding a bridge between hole and outer polygon
337
+ function findHoleBridge(hole, outerNode) {
338
+ let p = outerNode;
339
+ const hx = hole.x;
340
+ const hy = hole.y;
341
+ let qx = -Infinity;
342
+ let m;
343
+ // find a segment intersected by a ray from the hole's leftmost point to the left;
344
+ // segment's endpoint with lesser x will be potential connection point
345
+ do {
346
+ if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {
347
+ const x = p.x + ((hy - p.y) * (p.next.x - p.x)) / (p.next.y - p.y);
348
+ if (x <= hx && x > qx) {
349
+ qx = x;
350
+ m = p.x < p.next.x ? p : p.next;
351
+ if (x === hx)
352
+ return m; // hole touches outer segment; pick leftmost endpoint
353
+ }
354
+ }
355
+ p = p.next;
356
+ } while (p !== outerNode);
357
+ if (!m)
358
+ return null;
359
+ // look for points inside the triangle of hole point, segment intersection and endpoint;
360
+ // if there are no points found, we have a valid connection;
361
+ // otherwise choose the point of the minimum angle with the ray as connection point
362
+ const stop = m;
363
+ const mx = m.x;
364
+ const my = m.y;
365
+ let tanMin = Infinity;
366
+ let tan;
367
+ p = m;
368
+ do {
369
+ if (hx >= p.x &&
370
+ p.x >= mx &&
371
+ hx !== p.x &&
372
+ pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {
373
+ tan = Math.abs(hy - p.y) / (hx - p.x); // tangential
374
+ if (locallyInside(p, hole) &&
375
+ (tan < tanMin ||
376
+ (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {
377
+ m = p;
378
+ tanMin = tan;
379
+ }
380
+ }
381
+ p = p.next;
382
+ } while (p !== stop);
383
+ return m;
384
+ }
385
+ // whether sector in vertex m contains sector in vertex p in the same coordinates
386
+ function sectorContainsSector(m, p) {
387
+ return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;
388
+ }
389
+ // interlink polygon nodes in z-order
390
+ function indexCurve(start, minX, minY, invSize) {
391
+ let p = start;
392
+ do {
393
+ if (p.z === 0)
394
+ p.z = zOrder(p.x, p.y, minX, minY, invSize);
395
+ p.prevZ = p.prev;
396
+ p.nextZ = p.next;
397
+ p = p.next;
398
+ } while (p !== start);
399
+ p.prevZ.nextZ = null;
400
+ p.prevZ = null;
401
+ sortLinked(p);
402
+ }
403
+ // Simon Tatham's linked list merge sort algorithm
404
+ // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
405
+ function sortLinked(list) {
406
+ let e;
407
+ let i;
408
+ let inSize = 1;
409
+ let numMerges;
410
+ let p;
411
+ let pSize;
412
+ let q;
413
+ let qSize;
414
+ let tail;
415
+ do {
416
+ p = list;
417
+ list = null;
418
+ tail = null;
419
+ numMerges = 0;
420
+ while (p) {
421
+ numMerges++;
422
+ q = p;
423
+ pSize = 0;
424
+ for (i = 0; i < inSize; i++) {
425
+ pSize++;
426
+ q = q.nextZ;
427
+ if (!q)
428
+ break;
429
+ }
430
+ qSize = inSize;
431
+ while (pSize > 0 || (qSize > 0 && q)) {
432
+ if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {
433
+ e = p;
434
+ p = p.nextZ;
435
+ pSize--;
436
+ }
437
+ else {
438
+ e = q;
439
+ q = q.nextZ;
440
+ qSize--;
441
+ }
442
+ if (tail)
443
+ tail.nextZ = e;
444
+ else
445
+ list = e;
446
+ e.prevZ = tail;
447
+ tail = e;
448
+ }
449
+ p = q;
450
+ }
451
+ tail.nextZ = null;
452
+ inSize *= 2;
453
+ } while (numMerges > 1);
454
+ return list;
455
+ }
456
+ // z-order of a point given coords and inverse of the longer side of data bbox
457
+ function zOrder(x, y, minX, minY, invSize) {
458
+ // coords are transformed into non-negative 15-bit integer range
459
+ x = ((x - minX) * invSize) | 0;
460
+ y = ((y - minY) * invSize) | 0;
461
+ x = (x | (x << 8)) & 0x00ff00ff;
462
+ x = (x | (x << 4)) & 0x0f0f0f0f;
463
+ x = (x | (x << 2)) & 0x33333333;
464
+ x = (x | (x << 1)) & 0x55555555;
465
+ y = (y | (y << 8)) & 0x00ff00ff;
466
+ y = (y | (y << 4)) & 0x0f0f0f0f;
467
+ y = (y | (y << 2)) & 0x33333333;
468
+ y = (y | (y << 1)) & 0x55555555;
469
+ return x | (y << 1);
470
+ }
471
+ // find the leftmost node of a polygon ring
472
+ function getLeftmost(start) {
473
+ let p = start;
474
+ let leftmost = start;
475
+ do {
476
+ if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y))
477
+ leftmost = p;
478
+ p = p.next;
479
+ } while (p !== start);
480
+ return leftmost;
481
+ }
482
+ // check if a point lies within a convex triangle
483
+ function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {
484
+ return ((cx - px) * (ay - py) >= (ax - px) * (cy - py) &&
485
+ (ax - px) * (by - py) >= (bx - px) * (ay - py) &&
486
+ (bx - px) * (cy - py) >= (cx - px) * (by - py));
487
+ }
488
+ // check if a diagonal between two polygon nodes is valid (lies in polygon interior)
489
+ function isValidDiagonal(a, b) {
490
+ return (a.next.i !== b.i &&
491
+ a.prev.i !== b.i &&
492
+ !intersectsPolygon(a, b) && // dones't intersect other edges
493
+ ((locallyInside(a, b) &&
494
+ locallyInside(b, a) &&
495
+ middleInside(a, b) && // locally visible
496
+ (area(a.prev, a, b.prev) || area(a, b.prev, b))) || // does not create opposite-facing sectors
497
+ (equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0))); // special zero-length case
498
+ }
499
+ // signed area of a triangle
500
+ function area(p, q, r) {
501
+ return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
502
+ }
503
+ // check if two points are equal
504
+ function equals(p1, p2) {
505
+ return p1.x === p2.x && p1.y === p2.y;
506
+ }
507
+ // check if two segments intersect
508
+ function intersects(p1, q1, p2, q2) {
509
+ const o1 = sign(area(p1, q1, p2));
510
+ const o2 = sign(area(p1, q1, q2));
511
+ const o3 = sign(area(p2, q2, p1));
512
+ const o4 = sign(area(p2, q2, q1));
513
+ if (o1 !== o2 && o3 !== o4)
514
+ return true; // general case
515
+ if (o1 === 0 && onSegment(p1, p2, q1))
516
+ return true; // p1, q1 and p2 are collinear and p2 lies on p1q1
517
+ if (o2 === 0 && onSegment(p1, q2, q1))
518
+ return true; // p1, q1 and q2 are collinear and q2 lies on p1q1
519
+ if (o3 === 0 && onSegment(p2, p1, q2))
520
+ return true; // p2, q2 and p1 are collinear and p1 lies on p2q2
521
+ if (o4 === 0 && onSegment(p2, q1, q2))
522
+ return true; // p2, q2 and q1 are collinear and q1 lies on p2q2
523
+ return false;
524
+ }
525
+ // for collinear points p, q, r, check if point q lies on segment pr
526
+ function onSegment(p, q, r) {
527
+ return (q.x <= Math.max(p.x, r.x) &&
528
+ q.x >= Math.min(p.x, r.x) &&
529
+ q.y <= Math.max(p.y, r.y) &&
530
+ q.y >= Math.min(p.y, r.y));
531
+ }
532
+ function sign(num) {
533
+ return num > 0 ? 1 : num < 0 ? -1 : 0;
534
+ }
535
+ // check if a polygon diagonal intersects any polygon segments
536
+ function intersectsPolygon(a, b) {
537
+ let p = a;
538
+ do {
539
+ if (p.i !== a.i &&
540
+ p.next.i !== a.i &&
541
+ p.i !== b.i &&
542
+ p.next.i !== b.i &&
543
+ intersects(p, p.next, a, b))
544
+ return true;
545
+ p = p.next;
546
+ } while (p !== a);
547
+ return false;
548
+ }
549
+ // check if a polygon diagonal is locally inside the polygon
550
+ function locallyInside(a, b) {
551
+ return area(a.prev, a, a.next) < 0
552
+ ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0
553
+ : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;
554
+ }
555
+ // check if the middle point of a polygon diagonal is inside the polygon
556
+ function middleInside(a, b) {
557
+ let p = a;
558
+ let inside = false;
559
+ const px = (a.x + b.x) / 2;
560
+ const py = (a.y + b.y) / 2;
561
+ do {
562
+ if (p.y > py !== p.next.y > py &&
563
+ p.next.y !== p.y &&
564
+ px < ((p.next.x - p.x) * (py - p.y)) / (p.next.y - p.y) + p.x)
565
+ inside = !inside;
566
+ p = p.next;
567
+ } while (p !== a);
568
+ return inside;
569
+ }
570
+ // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
571
+ // if one belongs to the outer ring and another to a hole, it merges it into a single ring
572
+ function splitPolygon(a, b) {
573
+ const a2 = new Vertex(a.i, a.x, a.y);
574
+ const b2 = new Vertex(b.i, b.x, b.y);
575
+ const an = a.next;
576
+ const bp = b.prev;
577
+ a.next = b;
578
+ b.prev = a;
579
+ a2.next = an;
580
+ an.prev = a2;
581
+ b2.next = a2;
582
+ a2.prev = b2;
583
+ bp.next = b2;
584
+ b2.prev = bp;
585
+ return b2;
586
+ }
587
+ // create a node and optionally link it with previous one (in a circular doubly linked list)
588
+ function insertNode(i, x, y, last) {
589
+ const p = new Vertex(i, x, y);
590
+ if (!last) {
591
+ p.prev = p;
592
+ p.next = p;
593
+ }
594
+ else {
595
+ p.next = last.next;
596
+ p.prev = last;
597
+ last.next.prev = p;
598
+ last.next = p;
599
+ }
600
+ return p;
601
+ }
602
+ function removeNode(p) {
603
+ p.next.prev = p.prev;
604
+ p.prev.next = p.next;
605
+ if (p.prevZ)
606
+ p.prevZ.nextZ = p.nextZ;
607
+ if (p.nextZ)
608
+ p.nextZ.prevZ = p.prevZ;
609
+ }
610
+ class Vertex {
611
+ constructor(i, x, y) {
612
+ // previous and next vertex nodes in a polygon ring
613
+ this.prev = null;
614
+ this.next = null;
615
+ // z-order curve value
616
+ this.z = 0;
617
+ // previous and next nodes in z-order
618
+ this.prevZ = null;
619
+ this.nextZ = null;
620
+ // indicates whether this is a steiner point
621
+ this.steiner = false;
622
+ this.i = i;
623
+ this.x = x;
624
+ this.y = y;
625
+ }
626
+ }
627
+ //# sourceMappingURL=earcut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"earcut.js","sourceRoot":"","sources":["../../src/polygon/earcut.ts"],"names":[],"mappings":"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"}