@itwin/core-geometry 4.2.0-dev.3 → 4.2.0-dev.31

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 (462) hide show
  1. package/CHANGELOG.md +69 -1
  2. package/lib/cjs/Geometry.d.ts +2 -2
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js.map +1 -1
  5. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts +4 -3
  6. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  7. package/lib/cjs/clipping/AlternatingConvexClipTree.js +1 -1
  8. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  9. package/lib/cjs/clipping/BooleanClipNode.d.ts +4 -3
  10. package/lib/cjs/clipping/BooleanClipNode.d.ts.map +1 -1
  11. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  12. package/lib/cjs/clipping/ClipPlane.d.ts +12 -8
  13. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  14. package/lib/cjs/clipping/ClipPlane.js +5 -3
  15. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  16. package/lib/cjs/clipping/ClipUtils.d.ts +27 -9
  17. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  18. package/lib/cjs/clipping/ClipUtils.js +84 -3
  19. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  20. package/lib/cjs/clipping/ClipVector.d.ts +6 -5
  21. package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
  22. package/lib/cjs/clipping/ClipVector.js +1 -1
  23. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  24. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +6 -4
  25. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  26. package/lib/cjs/clipping/ConvexClipPlaneSet.js +3 -2
  27. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  28. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +4 -3
  29. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  30. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -2
  31. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  32. package/lib/cjs/core-geometry.d.ts +1 -3
  33. package/lib/cjs/core-geometry.d.ts.map +1 -1
  34. package/lib/cjs/core-geometry.js +1 -3
  35. package/lib/cjs/core-geometry.js.map +1 -1
  36. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  37. package/lib/cjs/curve/Arc3d.js +4 -4
  38. package/lib/cjs/curve/Arc3d.js.map +1 -1
  39. package/lib/cjs/curve/CoordinateXYZ.d.ts +15 -15
  40. package/lib/cjs/curve/CoordinateXYZ.d.ts.map +1 -1
  41. package/lib/cjs/curve/CoordinateXYZ.js +15 -15
  42. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  43. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +1 -1
  44. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  45. package/lib/cjs/curve/CurveCollection.d.ts +20 -20
  46. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  47. package/lib/cjs/curve/CurveCollection.js +21 -23
  48. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  49. package/lib/cjs/curve/CurveCurve.d.ts +41 -26
  50. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  51. package/lib/cjs/curve/CurveCurve.js +73 -40
  52. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  53. package/lib/cjs/curve/CurveFactory.d.ts +1 -1
  54. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  55. package/lib/cjs/curve/CurveLocationDetail.d.ts +12 -1
  56. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  57. package/lib/cjs/curve/CurveLocationDetail.js +13 -2
  58. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  59. package/lib/cjs/curve/CurveOps.d.ts +1 -1
  60. package/lib/cjs/curve/CurveOps.js.map +1 -1
  61. package/lib/cjs/curve/CurveProcessor.d.ts +1 -1
  62. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  63. package/lib/cjs/curve/CurveTypes.d.ts +19 -0
  64. package/lib/cjs/curve/CurveTypes.d.ts.map +1 -0
  65. package/lib/cjs/curve/{CurveChain.js → CurveTypes.js} +1 -1
  66. package/lib/cjs/curve/CurveTypes.js.map +1 -0
  67. package/lib/cjs/curve/CurveWireMomentsXYZ.d.ts +1 -1
  68. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  69. package/lib/cjs/curve/ParityRegion.d.ts +3 -3
  70. package/lib/cjs/curve/ParityRegion.d.ts.map +1 -1
  71. package/lib/cjs/curve/ParityRegion.js +2 -2
  72. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  73. package/lib/cjs/curve/Path.d.ts +1 -1
  74. package/lib/cjs/curve/Path.d.ts.map +1 -1
  75. package/lib/cjs/curve/Path.js +1 -1
  76. package/lib/cjs/curve/Path.js.map +1 -1
  77. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts +3 -2
  78. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  79. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +2 -2
  80. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  81. package/lib/cjs/curve/Query/CurveSplitContext.d.ts +1 -1
  82. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  83. package/lib/cjs/curve/Query/CylindricalRange.d.ts +1 -1
  84. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  85. package/lib/cjs/curve/Query/InOutTests.d.ts +1 -1
  86. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  87. package/lib/cjs/curve/Query/StrokeCountChain.d.ts +1 -1
  88. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  89. package/lib/cjs/curve/RegionOps.d.ts +54 -5
  90. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  91. package/lib/cjs/curve/RegionOps.js +154 -3
  92. package/lib/cjs/curve/RegionOps.js.map +1 -1
  93. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +1 -1
  94. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  95. package/lib/cjs/curve/StrokeOptions.d.ts +20 -11
  96. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  97. package/lib/cjs/curve/StrokeOptions.js +22 -11
  98. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  99. package/lib/cjs/curve/UnionRegion.d.ts +3 -3
  100. package/lib/cjs/curve/UnionRegion.d.ts.map +1 -1
  101. package/lib/cjs/curve/UnionRegion.js +3 -3
  102. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  103. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +225 -0
  104. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -0
  105. package/lib/cjs/curve/{CurveCurveCloseApproachXY.js → internalContexts/CurveCurveCloseApproachXY.js} +249 -189
  106. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -0
  107. package/lib/{esm/curve → cjs/curve/internalContexts}/CurveCurveIntersectXY.d.ts +14 -27
  108. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -0
  109. package/lib/cjs/curve/{CurveCurveIntersectXY.js → internalContexts/CurveCurveIntersectXY.js} +31 -42
  110. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -0
  111. package/lib/cjs/curve/{CurveCurveIntersectXYZ.d.ts → internalContexts/CurveCurveIntersectXYZ.d.ts} +11 -12
  112. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -0
  113. package/lib/cjs/curve/{CurveCurveIntersectXYZ.js → internalContexts/CurveCurveIntersectXYZ.js} +12 -14
  114. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -0
  115. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +1 -1
  116. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  117. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts +1 -0
  118. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  119. package/lib/cjs/geometry3d/BarycentricTriangle.js +1 -0
  120. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  121. package/lib/cjs/geometry3d/FrameBuilder.d.ts +57 -36
  122. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  123. package/lib/cjs/geometry3d/FrameBuilder.js +99 -74
  124. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  125. package/lib/cjs/geometry3d/GeometryHandler.d.ts +3 -10
  126. package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
  127. package/lib/cjs/geometry3d/GeometryHandler.js +2 -6
  128. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  129. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +0 -8
  130. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  131. package/lib/cjs/geometry3d/GrowableXYZArray.js +0 -16
  132. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  133. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +4 -4
  134. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  135. package/lib/cjs/geometry3d/IndexedXYZCollection.js +12 -0
  136. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  137. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  138. package/lib/cjs/geometry3d/Matrix3d.js +3 -6
  139. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  140. package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  141. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  142. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +1 -2
  143. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  144. package/lib/cjs/geometry3d/Point3dVector3d.js +0 -1
  145. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  146. package/lib/cjs/geometry3d/PolygonOps.d.ts +2 -2
  147. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  148. package/lib/cjs/geometry3d/PolygonOps.js +2 -3
  149. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  150. package/lib/cjs/geometry3d/Range.d.ts +1 -1
  151. package/lib/cjs/geometry3d/Range.js +1 -1
  152. package/lib/cjs/geometry3d/Range.js.map +1 -1
  153. package/lib/cjs/geometry3d/Ray3d.d.ts +3 -1
  154. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  155. package/lib/cjs/geometry3d/Ray3d.js +4 -3
  156. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  157. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts +2 -1
  158. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  159. package/lib/cjs/geometry3d/ReusableObjectCache.js +1 -1
  160. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  161. package/lib/cjs/geometry3d/SortablePolygon.d.ts +1 -1
  162. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  163. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  164. package/lib/cjs/geometry3d/Transform.js +4 -6
  165. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  166. package/lib/cjs/geometry3d/YawPitchRollAngles.js +1 -1
  167. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  168. package/lib/cjs/geometry4d/Matrix4d.d.ts.map +1 -1
  169. package/lib/cjs/geometry4d/Matrix4d.js +4 -2
  170. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  171. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  172. package/lib/cjs/numerics/Polynomials.d.ts +2 -2
  173. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  174. package/lib/cjs/numerics/Polynomials.js +2 -2
  175. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  176. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +18 -6
  177. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  178. package/lib/cjs/polyface/PolyfaceBuilder.js +48 -15
  179. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  180. package/lib/cjs/polyface/PolyfaceClip.d.ts +16 -7
  181. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  182. package/lib/cjs/polyface/PolyfaceClip.js +38 -7
  183. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  184. package/lib/cjs/polyface/PolyfaceData.d.ts +5 -39
  185. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  186. package/lib/cjs/polyface/PolyfaceData.js +7 -41
  187. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  188. package/lib/cjs/polyface/PolyfaceQuery.d.ts +10 -8
  189. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  190. package/lib/cjs/polyface/PolyfaceQuery.js +64 -18
  191. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  192. package/lib/cjs/serialization/GeometrySamples.d.ts +6 -0
  193. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  194. package/lib/cjs/serialization/GeometrySamples.js +61 -1
  195. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  196. package/lib/cjs/solid/LinearSweep.d.ts +1 -1
  197. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  198. package/lib/cjs/solid/RotationalSweep.d.ts +1 -1
  199. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  200. package/lib/cjs/solid/RuledSweep.d.ts +1 -1
  201. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  202. package/lib/cjs/solid/SweepContour.d.ts +35 -26
  203. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  204. package/lib/cjs/solid/SweepContour.js +84 -100
  205. package/lib/cjs/solid/SweepContour.js.map +1 -1
  206. package/lib/cjs/topology/Graph.d.ts +29 -11
  207. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  208. package/lib/cjs/topology/Graph.js +45 -26
  209. package/lib/cjs/topology/Graph.js.map +1 -1
  210. package/lib/cjs/topology/HalfEdgeMarkSet.d.ts +2 -2
  211. package/lib/cjs/topology/HalfEdgeMarkSet.d.ts.map +1 -1
  212. package/lib/cjs/topology/HalfEdgeMarkSet.js +4 -4
  213. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  214. package/lib/cjs/topology/Merging.d.ts +3 -0
  215. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  216. package/lib/cjs/topology/Merging.js +19 -5
  217. package/lib/cjs/topology/Merging.js.map +1 -1
  218. package/lib/cjs/topology/Triangulation.d.ts +15 -7
  219. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  220. package/lib/cjs/topology/Triangulation.js +89 -47
  221. package/lib/cjs/topology/Triangulation.js.map +1 -1
  222. package/lib/esm/Geometry.d.ts +2 -2
  223. package/lib/esm/Geometry.d.ts.map +1 -1
  224. package/lib/esm/Geometry.js.map +1 -1
  225. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts +4 -3
  226. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  227. package/lib/esm/clipping/AlternatingConvexClipTree.js +1 -1
  228. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  229. package/lib/esm/clipping/BooleanClipNode.d.ts +4 -3
  230. package/lib/esm/clipping/BooleanClipNode.d.ts.map +1 -1
  231. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  232. package/lib/esm/clipping/ClipPlane.d.ts +12 -8
  233. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  234. package/lib/esm/clipping/ClipPlane.js +5 -3
  235. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  236. package/lib/esm/clipping/ClipUtils.d.ts +27 -9
  237. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  238. package/lib/esm/clipping/ClipUtils.js +84 -3
  239. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  240. package/lib/esm/clipping/ClipVector.d.ts +6 -5
  241. package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
  242. package/lib/esm/clipping/ClipVector.js +1 -1
  243. package/lib/esm/clipping/ClipVector.js.map +1 -1
  244. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +6 -4
  245. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  246. package/lib/esm/clipping/ConvexClipPlaneSet.js +3 -2
  247. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  248. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +4 -3
  249. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  250. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -2
  251. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  252. package/lib/esm/core-geometry.d.ts +1 -3
  253. package/lib/esm/core-geometry.d.ts.map +1 -1
  254. package/lib/esm/core-geometry.js +1 -3
  255. package/lib/esm/core-geometry.js.map +1 -1
  256. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  257. package/lib/esm/curve/Arc3d.js +4 -4
  258. package/lib/esm/curve/Arc3d.js.map +1 -1
  259. package/lib/esm/curve/CoordinateXYZ.d.ts +15 -15
  260. package/lib/esm/curve/CoordinateXYZ.d.ts.map +1 -1
  261. package/lib/esm/curve/CoordinateXYZ.js +15 -15
  262. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  263. package/lib/esm/curve/CurveChainWithDistanceIndex.js +1 -1
  264. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  265. package/lib/esm/curve/CurveCollection.d.ts +20 -20
  266. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  267. package/lib/esm/curve/CurveCollection.js +20 -21
  268. package/lib/esm/curve/CurveCollection.js.map +1 -1
  269. package/lib/esm/curve/CurveCurve.d.ts +41 -26
  270. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  271. package/lib/esm/curve/CurveCurve.js +73 -40
  272. package/lib/esm/curve/CurveCurve.js.map +1 -1
  273. package/lib/esm/curve/CurveFactory.d.ts +1 -1
  274. package/lib/esm/curve/CurveFactory.js.map +1 -1
  275. package/lib/esm/curve/CurveLocationDetail.d.ts +12 -1
  276. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  277. package/lib/esm/curve/CurveLocationDetail.js +11 -1
  278. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  279. package/lib/esm/curve/CurveOps.d.ts +1 -1
  280. package/lib/esm/curve/CurveOps.js.map +1 -1
  281. package/lib/esm/curve/CurveProcessor.d.ts +1 -1
  282. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  283. package/lib/esm/curve/CurveTypes.d.ts +19 -0
  284. package/lib/esm/curve/CurveTypes.d.ts.map +1 -0
  285. package/lib/esm/curve/{CurveChain.js → CurveTypes.js} +1 -1
  286. package/lib/esm/curve/CurveTypes.js.map +1 -0
  287. package/lib/esm/curve/CurveWireMomentsXYZ.d.ts +1 -1
  288. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  289. package/lib/esm/curve/ParityRegion.d.ts +3 -3
  290. package/lib/esm/curve/ParityRegion.d.ts.map +1 -1
  291. package/lib/esm/curve/ParityRegion.js +2 -2
  292. package/lib/esm/curve/ParityRegion.js.map +1 -1
  293. package/lib/esm/curve/Path.d.ts +1 -1
  294. package/lib/esm/curve/Path.d.ts.map +1 -1
  295. package/lib/esm/curve/Path.js +1 -1
  296. package/lib/esm/curve/Path.js.map +1 -1
  297. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts +3 -2
  298. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  299. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -1
  300. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  301. package/lib/esm/curve/Query/CurveSplitContext.d.ts +1 -1
  302. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  303. package/lib/esm/curve/Query/CylindricalRange.d.ts +1 -1
  304. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  305. package/lib/esm/curve/Query/InOutTests.d.ts +1 -1
  306. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  307. package/lib/esm/curve/Query/StrokeCountChain.d.ts +1 -1
  308. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  309. package/lib/esm/curve/RegionOps.d.ts +54 -5
  310. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  311. package/lib/esm/curve/RegionOps.js +153 -3
  312. package/lib/esm/curve/RegionOps.js.map +1 -1
  313. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +1 -1
  314. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  315. package/lib/esm/curve/StrokeOptions.d.ts +20 -11
  316. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  317. package/lib/esm/curve/StrokeOptions.js +22 -11
  318. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  319. package/lib/esm/curve/UnionRegion.d.ts +3 -3
  320. package/lib/esm/curve/UnionRegion.d.ts.map +1 -1
  321. package/lib/esm/curve/UnionRegion.js +3 -3
  322. package/lib/esm/curve/UnionRegion.js.map +1 -1
  323. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +225 -0
  324. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -0
  325. package/lib/esm/curve/{CurveCurveCloseApproachXY.js → internalContexts/CurveCurveCloseApproachXY.js} +249 -189
  326. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -0
  327. package/lib/{cjs/curve → esm/curve/internalContexts}/CurveCurveIntersectXY.d.ts +14 -27
  328. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -0
  329. package/lib/esm/curve/{CurveCurveIntersectXY.js → internalContexts/CurveCurveIntersectXY.js} +30 -40
  330. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -0
  331. package/lib/esm/curve/{CurveCurveIntersectXYZ.d.ts → internalContexts/CurveCurveIntersectXYZ.d.ts} +11 -12
  332. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -0
  333. package/lib/esm/curve/{CurveCurveIntersectXYZ.js → internalContexts/CurveCurveIntersectXYZ.js} +11 -13
  334. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -0
  335. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +1 -1
  336. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  337. package/lib/esm/geometry3d/BarycentricTriangle.d.ts +1 -0
  338. package/lib/esm/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  339. package/lib/esm/geometry3d/BarycentricTriangle.js +1 -0
  340. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  341. package/lib/esm/geometry3d/FrameBuilder.d.ts +57 -36
  342. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  343. package/lib/esm/geometry3d/FrameBuilder.js +99 -74
  344. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  345. package/lib/esm/geometry3d/GeometryHandler.d.ts +3 -10
  346. package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
  347. package/lib/esm/geometry3d/GeometryHandler.js +2 -6
  348. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  349. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +0 -8
  350. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  351. package/lib/esm/geometry3d/GrowableXYZArray.js +0 -16
  352. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  353. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +4 -4
  354. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  355. package/lib/esm/geometry3d/IndexedXYZCollection.js +12 -0
  356. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  357. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  358. package/lib/esm/geometry3d/Matrix3d.js +3 -6
  359. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  360. package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  361. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  362. package/lib/esm/geometry3d/Point3dVector3d.d.ts +1 -2
  363. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  364. package/lib/esm/geometry3d/Point3dVector3d.js +0 -1
  365. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  366. package/lib/esm/geometry3d/PolygonOps.d.ts +2 -2
  367. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  368. package/lib/esm/geometry3d/PolygonOps.js +2 -3
  369. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  370. package/lib/esm/geometry3d/Range.d.ts +1 -1
  371. package/lib/esm/geometry3d/Range.js +1 -1
  372. package/lib/esm/geometry3d/Range.js.map +1 -1
  373. package/lib/esm/geometry3d/Ray3d.d.ts +3 -1
  374. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  375. package/lib/esm/geometry3d/Ray3d.js +4 -3
  376. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  377. package/lib/esm/geometry3d/ReusableObjectCache.d.ts +2 -1
  378. package/lib/esm/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  379. package/lib/esm/geometry3d/ReusableObjectCache.js +1 -1
  380. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  381. package/lib/esm/geometry3d/SortablePolygon.d.ts +1 -1
  382. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  383. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  384. package/lib/esm/geometry3d/Transform.js +4 -6
  385. package/lib/esm/geometry3d/Transform.js.map +1 -1
  386. package/lib/esm/geometry3d/YawPitchRollAngles.js +1 -1
  387. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  388. package/lib/esm/geometry4d/Matrix4d.d.ts.map +1 -1
  389. package/lib/esm/geometry4d/Matrix4d.js +4 -2
  390. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  391. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  392. package/lib/esm/numerics/Polynomials.d.ts +2 -2
  393. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  394. package/lib/esm/numerics/Polynomials.js +2 -2
  395. package/lib/esm/numerics/Polynomials.js.map +1 -1
  396. package/lib/esm/polyface/PolyfaceBuilder.d.ts +18 -6
  397. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  398. package/lib/esm/polyface/PolyfaceBuilder.js +48 -15
  399. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  400. package/lib/esm/polyface/PolyfaceClip.d.ts +16 -7
  401. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  402. package/lib/esm/polyface/PolyfaceClip.js +38 -7
  403. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  404. package/lib/esm/polyface/PolyfaceData.d.ts +5 -39
  405. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  406. package/lib/esm/polyface/PolyfaceData.js +7 -41
  407. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  408. package/lib/esm/polyface/PolyfaceQuery.d.ts +10 -8
  409. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  410. package/lib/esm/polyface/PolyfaceQuery.js +64 -18
  411. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  412. package/lib/esm/serialization/GeometrySamples.d.ts +6 -0
  413. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  414. package/lib/esm/serialization/GeometrySamples.js +61 -1
  415. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  416. package/lib/esm/solid/LinearSweep.d.ts +1 -1
  417. package/lib/esm/solid/LinearSweep.js.map +1 -1
  418. package/lib/esm/solid/RotationalSweep.d.ts +1 -1
  419. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  420. package/lib/esm/solid/RuledSweep.d.ts +1 -1
  421. package/lib/esm/solid/RuledSweep.js.map +1 -1
  422. package/lib/esm/solid/SweepContour.d.ts +35 -26
  423. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  424. package/lib/esm/solid/SweepContour.js +84 -100
  425. package/lib/esm/solid/SweepContour.js.map +1 -1
  426. package/lib/esm/topology/Graph.d.ts +29 -11
  427. package/lib/esm/topology/Graph.d.ts.map +1 -1
  428. package/lib/esm/topology/Graph.js +45 -26
  429. package/lib/esm/topology/Graph.js.map +1 -1
  430. package/lib/esm/topology/HalfEdgeMarkSet.d.ts +2 -2
  431. package/lib/esm/topology/HalfEdgeMarkSet.d.ts.map +1 -1
  432. package/lib/esm/topology/HalfEdgeMarkSet.js +2 -2
  433. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  434. package/lib/esm/topology/Merging.d.ts +3 -0
  435. package/lib/esm/topology/Merging.d.ts.map +1 -1
  436. package/lib/esm/topology/Merging.js +19 -5
  437. package/lib/esm/topology/Merging.js.map +1 -1
  438. package/lib/esm/topology/Triangulation.d.ts +15 -7
  439. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  440. package/lib/esm/topology/Triangulation.js +89 -47
  441. package/lib/esm/topology/Triangulation.js.map +1 -1
  442. package/package.json +4 -4
  443. package/lib/cjs/curve/CurveChain.d.ts +0 -17
  444. package/lib/cjs/curve/CurveChain.d.ts.map +0 -1
  445. package/lib/cjs/curve/CurveChain.js.map +0 -1
  446. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts +0 -164
  447. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts.map +0 -1
  448. package/lib/cjs/curve/CurveCurveCloseApproachXY.js.map +0 -1
  449. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +0 -1
  450. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +0 -1
  451. package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts.map +0 -1
  452. package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +0 -1
  453. package/lib/esm/curve/CurveChain.d.ts +0 -17
  454. package/lib/esm/curve/CurveChain.d.ts.map +0 -1
  455. package/lib/esm/curve/CurveChain.js.map +0 -1
  456. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts +0 -164
  457. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts.map +0 -1
  458. package/lib/esm/curve/CurveCurveCloseApproachXY.js.map +0 -1
  459. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +0 -1
  460. package/lib/esm/curve/CurveCurveIntersectXY.js.map +0 -1
  461. package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts.map +0 -1
  462. package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryHandler.js","sourceRoot":"","sources":["../../../src/geometry3d/GeometryHandler.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAuC/F;;;;;;GAMG;AACH,MAAM,OAAgB,eAAe;IAOnC,kDAAkD;IAC3C,qBAAqB,CAAC,EAAmB,IAAS,CAAC;IAsB1D,iFAAiF;IAC1E,UAAU,CAAC,CAAO;QACvB,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,kFAAkF;IAC3E,UAAU,CAAC,CAAO;QACvB,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,0FAA0F;IACnF,kBAAkB,CAAC,CAAe;QACvC,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,yFAAyF;IAClF,iBAAiB,CAAC,CAAc;QACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,yFAAyF;IAClF,iBAAiB,CAAC,CAAc;QACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;CAqBF;AACD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACtD,+BAA+B;IACxB,mBAAmB,CAAC,EAAiB;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,kBAAkB,CAAC,EAAgB;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,WAAW,CAAC,EAAS;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACf,qBAAqB,CAAC,EAAmB;QACvD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,oBAAoB,CAAC,EAAkB;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,0BAA0B,CAAC,EAAwB;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,kBAAkB,CAAC,EAAgB;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,qBAAqB,CAAC,EAAmB;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,sBAAsB,CAAC,EAAoB;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,mBAAmB,CAAC,EAAiB;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,uBAAuB,CAAC,EAAqB;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,qBAAqB,CAAC,EAAmB;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;OAEG;IACI,sBAAsB,CAAC,EAAsB;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACf,UAAU,CAAC,EAAQ;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACf,UAAU,CAAC,EAAQ;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACf,kBAAkB,CAAC,EAAgB;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACf,iBAAiB,CAAC,EAAe;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACf,iBAAiB,CAAC,EAAe;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,YAAY,CAAC,EAAU;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,UAAU,CAAC,EAAQ;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,SAAS,CAAC,EAAO;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,eAAe,CAAC,EAAa;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,iBAAiB,CAAC,EAAe;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,qBAAqB,CAAC,EAAmB;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,gBAAgB,CAAC,EAAc;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,mBAAmB,CAAC,EAAiB;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,mBAAmB,CAAC,EAAiB;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,oBAAoB,CAAC,EAAkB;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AACD;;;GAGG;AACH,MAAM,OAAO,8BAA+B,SAAQ,eAAe;IACjE,+BAA+B;IACxB,mBAAmB,CAAC,EAAiB;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,kBAAkB,CAAC,EAAgB;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,WAAW,CAAC,EAAS;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,oBAAoB,CAAC,EAAkB;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,0BAA0B,CAAC,EAAwB;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,kBAAkB,CAAC,EAAgB;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,qBAAqB,CAAC,EAAmB;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,sBAAsB,CAAC,EAAoB;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,mBAAmB,CAAC,EAAiB;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,uBAAuB,CAAC,EAAqB;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,qBAAqB,CAAC,EAAmB;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;OAEG;IACI,sBAAsB,CAAC,EAAsB;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,oHAAoH;IAC7G,cAAc,CAAC,CAAgB;QACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC5B,IAAI,QAAQ;YACV,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;gBAC5B,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;aACvC;IACL,CAAC;IACD,0BAA0B;IACV,qBAAqB,CAAC,CAAkB;QACtD,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,0BAA0B;IACV,UAAU,CAAC,CAAO;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,0BAA0B;IACV,UAAU,CAAC,CAAO;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,0BAA0B;IACV,kBAAkB,CAAC,CAAe;QAChD,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,0BAA0B;IACV,iBAAiB,CAAC,CAAc;QAC9C,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,0BAA0B;IACV,iBAAiB,CAAC,CAAc;QAC9C,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,+BAA+B;IACxB,YAAY,CAAC,EAAU;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,UAAU,CAAC,EAAQ;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,SAAS,CAAC,EAAO;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,eAAe,CAAC,EAAa;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,iBAAiB,CAAC,EAAe;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,qBAAqB,CAAC,EAAmB;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,gBAAgB,CAAC,EAAc;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,mBAAmB,CAAC,EAAiB;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,mBAAmB,CAAC,EAAiB;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+BAA+B;IACxB,oBAAoB,CAAC,EAAkB;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module ArraysAndInterfaces\r\n */\r\n\r\nimport { AkimaCurve3d } from \"../bspline/AkimaCurve3d\";\r\nimport { BezierCurve3d } from \"../bspline/BezierCurve3d\";\r\nimport { BezierCurve3dH } from \"../bspline/BezierCurve3dH\";\r\nimport { BezierCurveBase } from \"../bspline/BezierCurveBase\";\r\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\r\nimport { BSplineSurface3d, BSplineSurface3dH } from \"../bspline/BSplineSurface\";\r\nimport { InterpolationCurve3d } from \"../bspline/InterpolationCurve3d\";\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\r\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { ParityRegion } from \"../curve/ParityRegion\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { PointString3d } from \"../curve/PointString3d\";\r\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\r\nimport { UnionRegion } from \"../curve/UnionRegion\";\r\nimport { IndexedPolyface } from \"../polyface/Polyface\";\r\nimport { Box } from \"../solid/Box\";\r\nimport { Cone } from \"../solid/Cone\";\r\nimport { LinearSweep } from \"../solid/LinearSweep\";\r\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\r\nimport { RuledSweep } from \"../solid/RuledSweep\";\r\nimport { Sphere } from \"../solid/Sphere\";\r\nimport { TorusPipe } from \"../solid/TorusPipe\";\r\nimport { Plane3dByOriginAndVectors } from \"./Plane3dByOriginAndVectors\";\r\nimport { Vector2d } from \"./Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\n\r\n/**\r\n * `GeometryHandler` defines the base abstract methods for double-dispatch geometry computation.\r\n * * User code that wants to handle one or all of the commonly known geometry types implements a handler class.\r\n * * User code that does not handle all types is most likely to start with `NullGeometryHandler`, which will provide\r\n * No-action implementations for all types.\r\n * @public\r\n */\r\nexport abstract class GeometryHandler {\r\n /** Handle strongly typed [[LineSegment3d]] */\r\n public abstract handleLineSegment3d(g: LineSegment3d): any;\r\n /** Handle strongly typed [[LineString3d]] */\r\n public abstract handleLineString3d(g: LineString3d): any;\r\n /** Handle strongly typed [[Arc3d]] */\r\n public abstract handleArc3d(g: Arc3d): any;\r\n /** Handle strongly typed [[CurveCollection]] */\r\n public handleCurveCollection(_g: CurveCollection): any { }\r\n /** Handle strongly typed [[BSplineCurve3d]] */\r\n public abstract handleBSplineCurve3d(g: BSplineCurve3d): any;\r\n /** Handle strongly typed [[InterpolationCurve3d]] */\r\n public abstract handleInterpolationCurve3d(g: InterpolationCurve3d): any;\r\n /** Handle strongly typed [[AkimaCurve3d]] */\r\n public abstract handleAkimaCurve3d(g: AkimaCurve3d): any;\r\n /** Handle strongly typed [[BSplineCurve3dH]] */\r\n public abstract handleBSplineCurve3dH(g: BSplineCurve3dH): any;\r\n /** Handle strongly typed [[BSplineSurface3d]] */\r\n public abstract handleBSplineSurface3d(g: BSplineSurface3d): any;\r\n /** Handle strongly typed [[CoordinateXYZ]] */\r\n public abstract handleCoordinateXYZ(g: CoordinateXYZ): any;\r\n /** Handle strongly typed [[BSplineSurface3dH]] */\r\n public abstract handleBSplineSurface3dH(g: BSplineSurface3dH): any;\r\n /** Handle strongly typed [[IndexedPolyface]] */\r\n public abstract handleIndexedPolyface(g: IndexedPolyface): any;\r\n /**\r\n * Handle strongly typed [[TransitionSpiral3d]]\r\n * @alpha\r\n */\r\n public abstract handleTransitionSpiral(g: TransitionSpiral3d): any;\r\n /** Handle strongly typed Path (base class method calls handleCurveCollection) */\r\n public handlePath(g: Path): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed Loop (base class method calls handleCurveCollection) */\r\n public handleLoop(g: Loop): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed ParityRegion (base class method calls handleCurveCollection) */\r\n public handleParityRegion(g: ParityRegion): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed UnionRegion (base class method calls handleCurveCollection) */\r\n public handleUnionRegion(g: UnionRegion): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed BagOfCurves (base class method calls handleCurveCollection) */\r\n public handleBagOfCurves(g: BagOfCurves): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed Sphere */\r\n public abstract handleSphere(g: Sphere): any;\r\n /** Handle strongly typed Cone */\r\n public abstract handleCone(g: Cone): any;\r\n /** Handle strongly typed Box */\r\n public abstract handleBox(g: Box): any;\r\n /** Handle strongly typed TorusPipe */\r\n public abstract handleTorusPipe(g: TorusPipe): any;\r\n /** Handle strongly typed LinearSweep */\r\n public abstract handleLinearSweep(g: LinearSweep): any;\r\n /** Handle strongly typed RotationalSweep */\r\n public abstract handleRotationalSweep(g: RotationalSweep): any;\r\n /** Handle strongly typed RuledSweep */\r\n public abstract handleRuledSweep(g: RuledSweep): any;\r\n /** Handle strongly typed PointString3d */\r\n public abstract handlePointString3d(g: PointString3d): any;\r\n /** Handle strongly typed BezierCurve3d */\r\n public abstract handleBezierCurve3d(g: BezierCurve3d): any;\r\n /** Handle strongly typed BezierCurve3dH */\r\n public abstract handleBezierCurve3dH(g: BezierCurve3dH): any;\r\n}\r\n/**\r\n * `NullGeometryHandler` is a base class for dispatching various geometry types to application specific implementation\r\n * of some service.\r\n * To use:\r\n * * Derive a class from `NullGeometryHandler`\r\n * * Re-implement any or all of the specific `handleXXXX` methods\r\n * * Create a handler instance `myHandler`\r\n * * To send a `GeometryQuery` object `candidateGeometry` through the (fast) dispatch, invoke\r\n * `candidateGeometry.dispatchToHandler (myHandler).\r\n * * The appropriate method or methods will get called with a strongly typed `_g ` value.\r\n * @public\r\n */\r\nexport class NullGeometryHandler extends GeometryHandler {\r\n /** No-action implementation */\r\n public handleLineSegment3d(_g: LineSegment3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleLineString3d(_g: LineString3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleArc3d(_g: Arc3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleCurveCollection(_g: CurveCollection): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineCurve3d(_g: BSplineCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleInterpolationCurve3d(_g: InterpolationCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleAkimaCurve3d(_g: AkimaCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineCurve3dH(_g: BSplineCurve3dH): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineSurface3d(_g: BSplineSurface3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleCoordinateXYZ(_g: CoordinateXYZ): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineSurface3dH(_g: BSplineSurface3dH): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleIndexedPolyface(_g: IndexedPolyface): any {\r\n return undefined;\r\n }\r\n /** No-action implementation\r\n * @alpha\r\n */\r\n public handleTransitionSpiral(_g: TransitionSpiral3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handlePath(_g: Path): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleLoop(_g: Loop): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleParityRegion(_g: ParityRegion): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleUnionRegion(_g: UnionRegion): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleBagOfCurves(_g: BagOfCurves): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleSphere(_g: Sphere): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleCone(_g: Cone): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBox(_g: Box): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleTorusPipe(_g: TorusPipe): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleLinearSweep(_g: LinearSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleRotationalSweep(_g: RotationalSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleRuledSweep(_g: RuledSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handlePointString3d(_g: PointString3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBezierCurve3d(_g: BezierCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBezierCurve3dH(_g: BezierCurve3dH): any {\r\n return undefined;\r\n }\r\n}\r\n/**\r\n * Implement GeometryHandler methods, with all curve collection methods recursing to children.\r\n * @public\r\n */\r\nexport class RecurseToCurvesGeometryHandler extends GeometryHandler {\r\n /** No-action implementation */\r\n public handleLineSegment3d(_g: LineSegment3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleLineString3d(_g: LineString3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleArc3d(_g: Arc3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineCurve3d(_g: BSplineCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleInterpolationCurve3d(_g: InterpolationCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleAkimaCurve3d(_g: AkimaCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineCurve3dH(_g: BSplineCurve3dH): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineSurface3d(_g: BSplineSurface3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleCoordinateXYZ(_g: CoordinateXYZ): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineSurface3dH(_g: BSplineSurface3dH): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleIndexedPolyface(_g: IndexedPolyface): any {\r\n return undefined;\r\n }\r\n /** No-action implementation\r\n * @alpha\r\n */\r\n public handleTransitionSpiral(_g: TransitionSpiral3d): any {\r\n return undefined;\r\n }\r\n /** Invoke `child.dispatchToGeometryHandler(this)` for each child in the array returned by the query `g.children` */\r\n public handleChildren(g: GeometryQuery): any {\r\n const children = g.children;\r\n if (children)\r\n for (const child of children) {\r\n child.dispatchToGeometryHandler(this);\r\n }\r\n }\r\n /** Recurse to children */\r\n public override handleCurveCollection(g: CurveCollection): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handlePath(g: Path): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handleLoop(g: Loop): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handleParityRegion(g: ParityRegion): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handleUnionRegion(g: UnionRegion): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handleBagOfCurves(g: BagOfCurves): any {\r\n return this.handleChildren(g);\r\n }\r\n /** No-action implementation */\r\n public handleSphere(_g: Sphere): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleCone(_g: Cone): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBox(_g: Box): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleTorusPipe(_g: TorusPipe): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleLinearSweep(_g: LinearSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleRotationalSweep(_g: RotationalSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleRuledSweep(_g: RuledSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handlePointString3d(_g: PointString3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBezierCurve3d(_g: BezierCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBezierCurve3dH(_g: BezierCurve3dH): any {\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * IStrokeHandler is an interface with methods to receive data about curves being stroked.\r\n * CurvePrimitives emitStrokes () methods emit calls to a handler object with these methods.\r\n * The various CurvePrimitive types are free to announce either single points (announcePoint), linear fragments,\r\n * or fractional intervals of the parent curve.\r\n * * handler.startCurvePrimitive (cp) -- announce the curve primitive whose strokes will follow.\r\n * * announcePointTangent (xyz, fraction, tangent) -- announce a single point on the curve.\r\n * * announceIntervalForUniformStepStrokes (cp, numStrokes, fraction0, fraction1) -- announce a fraction\r\n * interval in which the curve can be evaluated (e.g. the handler can call cp->fractionToPointAndDerivative ())\r\n * * announceSegmentInterval (cp, point0, point1, numStrokes, fraction0, fraction1) -- announce\r\n * that the fractional interval fraction0, fraction1 is a straight line which should be broken into\r\n * numStrokes strokes.\r\n * * A LineSegment would make a single call to this.\r\n * * A LineString would make one call to this for each of its segments, with fractions indicating position\r\n * within the linestring.\r\n * * endCurvePrimitive (cp) -- announce the end of the curve primitive.\r\n * @public\r\n */\r\nexport interface IStrokeHandler {\r\n /**\r\n * Announce a parent curve primitive\r\n * * startParentCurvePrimitive() ...endParentCurvePrimitive() are wrapped around startCurvePrimitive and\r\n * endCurvePrimitive when the interior primitive is a proxy.\r\n */\r\n startParentCurvePrimitive(cp: CurvePrimitive): void;\r\n /** Announce the curve primitive that will be described in subsequent calls. */\r\n startCurvePrimitive(cp: CurvePrimitive): void;\r\n /**\r\n * Announce a single point with its fraction and tangent.\r\n * * (IMPORTANT) the same Point3d and Vector3d will be reset and passed on multiple calls.\r\n * * (THEREFORE) if the implementation is saving coordinates, it must copy the xyz data out into its own data\r\n * structure rather than save the references.\r\n */\r\n announcePointTangent(xyz: Point3d, fraction: number, tangent: Vector3d): void;\r\n\r\n /**\r\n * Announce that curve primitive cp should be evaluated in the specified fraction interval.\r\n * * Note that this method is permitted (expected) to provide pre-stroked data if available.\r\n * * In th pre-stroked case, the cp passed to the handler will be the stroked image, not the original.\r\n * * Callers that want summary data should implement (and return true from) needPrimaryDataForStrokes\r\n */\r\n announceIntervalForUniformStepStrokes(\r\n cp: CurvePrimitive,\r\n numStrokes: number,\r\n fraction0: number,\r\n fraction1: number): void;\r\n /**\r\n * OPTIONAL method for a handler to indicate that it wants primary geometry (e.g. spirals) rather than strokes.\r\n * @returns true if primary geometry should be passed (rather than stroked or otherwise simplified)\r\n */\r\n needPrimaryGeometryForStrokes?(): boolean;\r\n /** Announce numPoints interpolated between point0 and point1, with associated fractions */\r\n announceSegmentInterval(\r\n cp: CurvePrimitive, point0: Point3d, point1: Point3d, numStrokes: number, fraction0: number, fraction1: number,\r\n ): void;\r\n /** Announce that all data about `cp` has been announced. */\r\n endCurvePrimitive(cp: CurvePrimitive): void;\r\n /** Announce that all data about the parent primitive has been announced. */\r\n endParentCurvePrimitive(cp: CurvePrimitive): void;\r\n /**\r\n * Announce a bezier curve fragment.\r\n * * this is usually a section of BsplineCurve\r\n * * If this function is missing, the same interval will be passed to announceIntervalForUniformSteps.\r\n * @param bezier bezier fragment\r\n * @param numStrokes suggested number of strokes (uniform in bezier interval 0..1)\r\n * @param parent parent curve\r\n * @param spanIndex spanIndex within parent\r\n * @param fraction0 start fraction on parent curve\r\n * @param fraction1 end fraction on parent curve\r\n */\r\n announceBezierCurve?(\r\n bezier: BezierCurveBase,\r\n numStrokes: number,\r\n parent: CurvePrimitive,\r\n spandex: number,\r\n fraction0: number,\r\n fraction1: number,\r\n ): void;\r\n}\r\n\r\n/**\r\n * Interface with methods for mapping (u,v) fractional coordinates to surface xyz and derivatives.\r\n * @public\r\n */\r\nexport interface UVSurface {\r\n /**\r\n * Convert fractional u and v coordinates to surface point.\r\n * @param uFraction fractional coordinate in u direction\r\n * @param vFraction fractional coordinate in v direction\r\n * @param result optional pre-allocated point\r\n */\r\n uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d;\r\n /**\r\n * Convert fractional u and v coordinates to surface point and in-surface tangent directions.\r\n * * The vectors are expected to be non-zero tangents which can be crossed to get a normal.\r\n * * Hence they are not necessarily (a) partial derivatives or (b) Frenet vectors.\r\n * @param uFraction fractional coordinate in u direction\r\n * @param vFraction fractional coordinate in v direction\r\n * @param result optional pre-allocated carrier for point and vectors\r\n */\r\n uvFractionToPointAndTangents(\r\n uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors,\r\n ): Plane3dByOriginAndVectors;\r\n}\r\n/**\r\n * Interface for queries of distance-along in u and v directions\r\n * @public\r\n */\r\nexport interface UVSurfaceIsoParametricDistance {\r\n /**\r\n * * Return a vector whose x and y parts are \"size\" of the surface in the u and v directions.\r\n * * Sizes are use for applying scaling to mesh parameters\r\n * * These sizes are (reasonable approximations of) the max curve length along u and v isoparameter lines.\r\n * * e.g. for a sphere, these are:\r\n * * u direction = distance around the equator\r\n * * v direction = distance from south pole to north pole.\r\n */\r\n maxIsoParametricDistance(): Vector2d;\r\n}\r\n"]}
1
+ {"version":3,"file":"GeometryHandler.js","sourceRoot":"","sources":["../../../src/geometry3d/GeometryHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module ArraysAndInterfaces\r\n */\r\n\r\nimport { AkimaCurve3d } from \"../bspline/AkimaCurve3d\";\r\nimport { BezierCurve3d } from \"../bspline/BezierCurve3d\";\r\nimport { BezierCurve3dH } from \"../bspline/BezierCurve3dH\";\r\nimport { BezierCurveBase } from \"../bspline/BezierCurveBase\";\r\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\r\nimport { BSplineSurface3d, BSplineSurface3dH } from \"../bspline/BSplineSurface\";\r\nimport { InterpolationCurve3d } from \"../bspline/InterpolationCurve3d\";\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\r\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { ParityRegion } from \"../curve/ParityRegion\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { PointString3d } from \"../curve/PointString3d\";\r\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\r\nimport { UnionRegion } from \"../curve/UnionRegion\";\r\nimport { IndexedPolyface } from \"../polyface/Polyface\";\r\nimport { Box } from \"../solid/Box\";\r\nimport { Cone } from \"../solid/Cone\";\r\nimport { LinearSweep } from \"../solid/LinearSweep\";\r\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\r\nimport { RuledSweep } from \"../solid/RuledSweep\";\r\nimport { Sphere } from \"../solid/Sphere\";\r\nimport { TorusPipe } from \"../solid/TorusPipe\";\r\nimport { Plane3dByOriginAndVectors } from \"./Plane3dByOriginAndVectors\";\r\nimport { Vector2d } from \"./Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\n\r\n/**\r\n * `GeometryHandler` defines the base abstract methods for double-dispatch geometry computation.\r\n * * User code that wants to handle one or all of the commonly known geometry types implements a handler class.\r\n * * User code that does not handle all types is most likely to start with `NullGeometryHandler`, which will provide\r\n * No-action implementations for all types.\r\n * @public\r\n */\r\nexport abstract class GeometryHandler {\r\n /** Handle strongly typed [[LineSegment3d]] */\r\n public abstract handleLineSegment3d(g: LineSegment3d): any;\r\n /** Handle strongly typed [[LineString3d]] */\r\n public abstract handleLineString3d(g: LineString3d): any;\r\n /** Handle strongly typed [[Arc3d]] */\r\n public abstract handleArc3d(g: Arc3d): any;\r\n /** Handle strongly typed [[CurveCollection]] */\r\n public handleCurveCollection(_g: CurveCollection): any { }\r\n /** Handle strongly typed [[BSplineCurve3d]] */\r\n public abstract handleBSplineCurve3d(g: BSplineCurve3d): any;\r\n /** Handle strongly typed [[InterpolationCurve3d]] */\r\n public abstract handleInterpolationCurve3d(g: InterpolationCurve3d): any;\r\n /** Handle strongly typed [[AkimaCurve3d]] */\r\n public abstract handleAkimaCurve3d(g: AkimaCurve3d): any;\r\n /** Handle strongly typed [[BSplineCurve3dH]] */\r\n public abstract handleBSplineCurve3dH(g: BSplineCurve3dH): any;\r\n /** Handle strongly typed [[BSplineSurface3d]] */\r\n public abstract handleBSplineSurface3d(g: BSplineSurface3d): any;\r\n /** Handle strongly typed [[CoordinateXYZ]] */\r\n public abstract handleCoordinateXYZ(g: CoordinateXYZ): any;\r\n /** Handle strongly typed [[BSplineSurface3dH]] */\r\n public abstract handleBSplineSurface3dH(g: BSplineSurface3dH): any;\r\n /** Handle strongly typed [[IndexedPolyface]] */\r\n public abstract handleIndexedPolyface(g: IndexedPolyface): any;\r\n /** handle strongly typed [[TransitionSpiral3d]] */\r\n public abstract handleTransitionSpiral(g: TransitionSpiral3d): any;\r\n /** Handle strongly typed Path (base class method calls handleCurveCollection) */\r\n public handlePath(g: Path): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed Loop (base class method calls handleCurveCollection) */\r\n public handleLoop(g: Loop): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed ParityRegion (base class method calls handleCurveCollection) */\r\n public handleParityRegion(g: ParityRegion): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed UnionRegion (base class method calls handleCurveCollection) */\r\n public handleUnionRegion(g: UnionRegion): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed BagOfCurves (base class method calls handleCurveCollection) */\r\n public handleBagOfCurves(g: BagOfCurves): any {\r\n return this.handleCurveCollection(g);\r\n }\r\n /** Handle strongly typed Sphere */\r\n public abstract handleSphere(g: Sphere): any;\r\n /** Handle strongly typed Cone */\r\n public abstract handleCone(g: Cone): any;\r\n /** Handle strongly typed Box */\r\n public abstract handleBox(g: Box): any;\r\n /** Handle strongly typed TorusPipe */\r\n public abstract handleTorusPipe(g: TorusPipe): any;\r\n /** Handle strongly typed LinearSweep */\r\n public abstract handleLinearSweep(g: LinearSweep): any;\r\n /** Handle strongly typed RotationalSweep */\r\n public abstract handleRotationalSweep(g: RotationalSweep): any;\r\n /** Handle strongly typed RuledSweep */\r\n public abstract handleRuledSweep(g: RuledSweep): any;\r\n /** Handle strongly typed PointString3d */\r\n public abstract handlePointString3d(g: PointString3d): any;\r\n /** Handle strongly typed BezierCurve3d */\r\n public abstract handleBezierCurve3d(g: BezierCurve3d): any;\r\n /** Handle strongly typed BezierCurve3dH */\r\n public abstract handleBezierCurve3dH(g: BezierCurve3dH): any;\r\n}\r\n/**\r\n * `NullGeometryHandler` is a base class for dispatching various geometry types to application specific implementation\r\n * of some service.\r\n * To use:\r\n * * Derive a class from `NullGeometryHandler`\r\n * * Re-implement any or all of the specific `handleXXXX` methods\r\n * * Create a handler instance `myHandler`\r\n * * To send a `GeometryQuery` object `candidateGeometry` through the (fast) dispatch, invoke\r\n * `candidateGeometry.dispatchToHandler (myHandler).\r\n * * The appropriate method or methods will get called with a strongly typed `_g ` value.\r\n * @public\r\n */\r\nexport class NullGeometryHandler extends GeometryHandler {\r\n /** No-action implementation */\r\n public handleLineSegment3d(_g: LineSegment3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleLineString3d(_g: LineString3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleArc3d(_g: Arc3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleCurveCollection(_g: CurveCollection): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineCurve3d(_g: BSplineCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleInterpolationCurve3d(_g: InterpolationCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleAkimaCurve3d(_g: AkimaCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineCurve3dH(_g: BSplineCurve3dH): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineSurface3d(_g: BSplineSurface3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleCoordinateXYZ(_g: CoordinateXYZ): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineSurface3dH(_g: BSplineSurface3dH): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleIndexedPolyface(_g: IndexedPolyface): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleTransitionSpiral(_g: TransitionSpiral3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handlePath(_g: Path): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleLoop(_g: Loop): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleParityRegion(_g: ParityRegion): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleUnionRegion(_g: UnionRegion): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public override handleBagOfCurves(_g: BagOfCurves): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleSphere(_g: Sphere): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleCone(_g: Cone): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBox(_g: Box): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleTorusPipe(_g: TorusPipe): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleLinearSweep(_g: LinearSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleRotationalSweep(_g: RotationalSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleRuledSweep(_g: RuledSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handlePointString3d(_g: PointString3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBezierCurve3d(_g: BezierCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBezierCurve3dH(_g: BezierCurve3dH): any {\r\n return undefined;\r\n }\r\n}\r\n/**\r\n * Implement GeometryHandler methods, with all curve collection methods recursing to children.\r\n * @public\r\n */\r\nexport class RecurseToCurvesGeometryHandler extends GeometryHandler {\r\n /** No-action implementation */\r\n public handleLineSegment3d(_g: LineSegment3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleLineString3d(_g: LineString3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleArc3d(_g: Arc3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineCurve3d(_g: BSplineCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleInterpolationCurve3d(_g: InterpolationCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleAkimaCurve3d(_g: AkimaCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineCurve3dH(_g: BSplineCurve3dH): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineSurface3d(_g: BSplineSurface3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleCoordinateXYZ(_g: CoordinateXYZ): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBSplineSurface3dH(_g: BSplineSurface3dH): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleIndexedPolyface(_g: IndexedPolyface): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleTransitionSpiral(_g: TransitionSpiral3d): any {\r\n return undefined;\r\n }\r\n /** Invoke `child.dispatchToGeometryHandler(this)` for each child in the array returned by the query `g.children` */\r\n public handleChildren(g: GeometryQuery): any {\r\n const children = g.children;\r\n if (children)\r\n for (const child of children) {\r\n child.dispatchToGeometryHandler(this);\r\n }\r\n }\r\n /** Recurse to children */\r\n public override handleCurveCollection(g: CurveCollection): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handlePath(g: Path): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handleLoop(g: Loop): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handleParityRegion(g: ParityRegion): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handleUnionRegion(g: UnionRegion): any {\r\n return this.handleChildren(g);\r\n }\r\n /** Recurse to children */\r\n public override handleBagOfCurves(g: BagOfCurves): any {\r\n return this.handleChildren(g);\r\n }\r\n /** No-action implementation */\r\n public handleSphere(_g: Sphere): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleCone(_g: Cone): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBox(_g: Box): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleTorusPipe(_g: TorusPipe): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleLinearSweep(_g: LinearSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleRotationalSweep(_g: RotationalSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleRuledSweep(_g: RuledSweep): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handlePointString3d(_g: PointString3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBezierCurve3d(_g: BezierCurve3d): any {\r\n return undefined;\r\n }\r\n /** No-action implementation */\r\n public handleBezierCurve3dH(_g: BezierCurve3dH): any {\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * IStrokeHandler is an interface with methods to receive data about curves being stroked.\r\n * CurvePrimitives emitStrokes () methods emit calls to a handler object with these methods.\r\n * The various CurvePrimitive types are free to announce either single points (announcePoint), linear fragments,\r\n * or fractional intervals of the parent curve.\r\n * * handler.startCurvePrimitive (cp) -- announce the curve primitive whose strokes will follow.\r\n * * announcePointTangent (xyz, fraction, tangent) -- announce a single point on the curve.\r\n * * announceIntervalForUniformStepStrokes (cp, numStrokes, fraction0, fraction1) -- announce a fraction\r\n * interval in which the curve can be evaluated (e.g. the handler can call cp->fractionToPointAndDerivative ())\r\n * * announceSegmentInterval (cp, point0, point1, numStrokes, fraction0, fraction1) -- announce\r\n * that the fractional interval fraction0, fraction1 is a straight line which should be broken into\r\n * numStrokes strokes.\r\n * * A LineSegment would make a single call to this.\r\n * * A LineString would make one call to this for each of its segments, with fractions indicating position\r\n * within the linestring.\r\n * * endCurvePrimitive (cp) -- announce the end of the curve primitive.\r\n * @public\r\n */\r\nexport interface IStrokeHandler {\r\n /**\r\n * Announce a parent curve primitive\r\n * * startParentCurvePrimitive() ...endParentCurvePrimitive() are wrapped around startCurvePrimitive and\r\n * endCurvePrimitive when the interior primitive is a proxy.\r\n */\r\n startParentCurvePrimitive(cp: CurvePrimitive): void;\r\n /** Announce the curve primitive that will be described in subsequent calls. */\r\n startCurvePrimitive(cp: CurvePrimitive): void;\r\n /**\r\n * Announce a single point with its fraction and tangent.\r\n * * (IMPORTANT) the same Point3d and Vector3d will be reset and passed on multiple calls.\r\n * * (THEREFORE) if the implementation is saving coordinates, it must copy the xyz data out into its own data\r\n * structure rather than save the references.\r\n */\r\n announcePointTangent(xyz: Point3d, fraction: number, tangent: Vector3d): void;\r\n\r\n /**\r\n * Announce that curve primitive cp should be evaluated in the specified fraction interval.\r\n * * Note that this method is permitted (expected) to provide pre-stroked data if available.\r\n * * In th pre-stroked case, the cp passed to the handler will be the stroked image, not the original.\r\n * * Callers that want summary data should implement (and return true from) needPrimaryDataForStrokes\r\n */\r\n announceIntervalForUniformStepStrokes(\r\n cp: CurvePrimitive,\r\n numStrokes: number,\r\n fraction0: number,\r\n fraction1: number): void;\r\n /**\r\n * OPTIONAL method for a handler to indicate that it wants primary geometry (e.g. spirals) rather than strokes.\r\n * @returns true if primary geometry should be passed (rather than stroked or otherwise simplified)\r\n */\r\n needPrimaryGeometryForStrokes?(): boolean;\r\n /** Announce numPoints interpolated between point0 and point1, with associated fractions */\r\n announceSegmentInterval(\r\n cp: CurvePrimitive, point0: Point3d, point1: Point3d, numStrokes: number, fraction0: number, fraction1: number,\r\n ): void;\r\n /** Announce that all data about `cp` has been announced. */\r\n endCurvePrimitive(cp: CurvePrimitive): void;\r\n /** Announce that all data about the parent primitive has been announced. */\r\n endParentCurvePrimitive(cp: CurvePrimitive): void;\r\n /**\r\n * Announce a bezier curve fragment.\r\n * * this is usually a section of BsplineCurve\r\n * * If this function is missing, the same interval will be passed to announceIntervalForUniformSteps.\r\n * @param bezier bezier fragment\r\n * @param numStrokes suggested number of strokes (uniform in bezier interval 0..1)\r\n * @param parent parent curve\r\n * @param spanIndex spanIndex within parent\r\n * @param fraction0 start fraction on parent curve\r\n * @param fraction1 end fraction on parent curve\r\n */\r\n announceBezierCurve?(\r\n bezier: BezierCurveBase,\r\n numStrokes: number,\r\n parent: CurvePrimitive,\r\n spandex: number,\r\n fraction0: number,\r\n fraction1: number,\r\n ): void;\r\n}\r\n\r\n/**\r\n * Interface with methods for mapping (u,v) fractional coordinates to surface xyz and derivatives.\r\n * @public\r\n */\r\nexport interface UVSurface {\r\n /**\r\n * Convert fractional u and v coordinates to surface point.\r\n * @param uFraction fractional coordinate in u direction\r\n * @param vFraction fractional coordinate in v direction\r\n * @param result optional pre-allocated point\r\n */\r\n uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d;\r\n /**\r\n * Convert fractional u and v coordinates to surface point and in-surface tangent directions.\r\n * * The vectors are expected to be non-zero tangents which can be crossed to get a normal.\r\n * * Hence they are not necessarily (a) partial derivatives or (b) Frenet vectors.\r\n * @param uFraction fractional coordinate in u direction\r\n * @param vFraction fractional coordinate in v direction\r\n * @param result optional pre-allocated carrier for point and vectors\r\n */\r\n uvFractionToPointAndTangents(\r\n uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors,\r\n ): Plane3dByOriginAndVectors;\r\n}\r\n/**\r\n * Interface for queries of distance-along in u and v directions\r\n * @public\r\n */\r\nexport interface UVSurfaceIsoParametricDistance {\r\n /**\r\n * * Return a vector whose x and y parts are \"size\" of the surface in the u and v directions.\r\n * * Sizes are use for applying scaling to mesh parameters\r\n * * These sizes are (reasonable approximations of) the max curve length along u and v isoparameter lines.\r\n * * e.g. for a sphere, these are:\r\n * * u direction = distance around the equator\r\n * * v direction = distance from south pole to north pole.\r\n */\r\n maxIsoParametricDistance(): Vector2d;\r\n}\r\n"]}
@@ -181,14 +181,6 @@ export declare class GrowableXYZArray extends IndexedReadWriteXYZCollection {
181
181
  * @returns number of points pushed.
182
182
  */
183
183
  pushFromGrowableXYZArray(source: GrowableXYZArray, sourceIndex?: number): number;
184
- /**
185
- * Return the first point, or undefined if the array is empty.
186
- */
187
- front(result?: Point3d): Point3d | undefined;
188
- /**
189
- * Return the last point, or undefined if the array is empty.
190
- */
191
- back(result?: Point3d): Point3d | undefined;
192
184
  /**
193
185
  * Set the coordinates of a single point.
194
186
  * @param pointIndex index of point to set
@@ -1 +1 @@
1
- {"version":3,"file":"GrowableXYZArray.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/GrowableXYZArray.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GrowableXYZArray.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/GrowableXYZArray.ts"],"names":[],"mappings":"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"}
@@ -380,22 +380,6 @@ export class GrowableXYZArray extends IndexedReadWriteXYZCollection {
380
380
  }
381
381
  return 0;
382
382
  }
383
- /**
384
- * Return the first point, or undefined if the array is empty.
385
- */
386
- front(result) {
387
- if (this._xyzInUse === 0)
388
- return undefined;
389
- return this.getPoint3dAtUncheckedPointIndex(0, result);
390
- }
391
- /**
392
- * Return the last point, or undefined if the array is empty.
393
- */
394
- back(result) {
395
- if (this._xyzInUse < 1)
396
- return undefined;
397
- return this.getPoint3dAtUncheckedPointIndex(this._xyzInUse - 1, result);
398
- }
399
383
  /**
400
384
  * Set the coordinates of a single point.
401
385
  * @param pointIndex index of point to set
@@ -1 +1 @@
1
- {"version":3,"file":"GrowableXYZArray.js","sourceRoot":"","sources":["../../../src/geometry3d/GrowableXYZArray.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module ArraysAndInterfaces\r\n */\r\n\r\nimport { Geometry, PlaneAltitudeEvaluator } from \"../Geometry\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { MultiLineStringDataVariant } from \"../topology/Triangulation\";\r\nimport { IndexedReadWriteXYZCollection, IndexedXYZCollection } from \"./IndexedXYZCollection\";\r\nimport { Matrix3d } from \"./Matrix3d\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"./Plane3dByOriginAndUnitNormal\";\r\nimport { Point2d } from \"./Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\nimport { PointStreamGrowableXYZArrayCollector, VariantPointDataStream } from \"./PointStreaming\";\r\nimport { Range1d, Range3d } from \"./Range\";\r\nimport { Transform } from \"./Transform\";\r\nimport { XYAndZ } from \"./XYZProps\";\r\n\r\n/** `GrowableXYArray` manages a (possibly growing) Float64Array to pack xy coordinates.\r\n * @public\r\n */\r\nexport class GrowableXYZArray extends IndexedReadWriteXYZCollection {\r\n /**\r\n * array of packed xyz xyz xyz components\r\n */\r\n private _data: Float64Array;\r\n /**\r\n * Number of xyz triples (not floats) in the array\r\n */\r\n private _xyzInUse: number;\r\n /**\r\n * capacity in xyz triples. (not floats)\r\n */\r\n private _xyzCapacity: number;\r\n /**\r\n * multiplier used by ensureCapacity to expand requested reallocation size\r\n */\r\n private _growthFactor: number;\r\n\r\n /** Construct a new GrowablePoint3d array.\r\n * @param numPoints initial capacity in xyz triples (default 8)\r\n * @param growthFactor used by ensureCapacity to expand requested reallocation size (default 1.5)\r\n */\r\n public constructor(numPoints: number = 8, growthFactor?: number) {\r\n super();\r\n this._data = new Float64Array(numPoints * 3); // 3 values per point\r\n this._xyzInUse = 0;\r\n this._xyzCapacity = numPoints;\r\n this._growthFactor = (undefined !== growthFactor && growthFactor >= 1.0) ? growthFactor : 1.5;\r\n }\r\n\r\n /** Copy xyz points from source array. Does not reallocate or change active point count.\r\n * @param source array to copy from\r\n * @param sourceCount copy the first sourceCount points; all points if undefined\r\n * @param destOffset copy to instance array starting at this point index; zero if undefined\r\n * @return count and offset of points copied\r\n */\r\n protected copyData(source: Float64Array | number[], sourceCount?: number, destOffset?: number): {count: number, offset: number} {\r\n // validate inputs and convert from points to entries\r\n let myOffset = (undefined !== destOffset) ? destOffset * 3 : 0;\r\n if (myOffset < 0)\r\n myOffset = 0;\r\n if (myOffset >= this._data.length)\r\n return {count: 0, offset: 0};\r\n let myCount = (undefined !== sourceCount) ? sourceCount * 3 : source.length;\r\n if (myCount > 0) {\r\n if (myCount > source.length)\r\n myCount = source.length;\r\n if (myOffset + myCount > this._data.length)\r\n myCount = this._data.length - myOffset;\r\n if (myCount % 3 !== 0)\r\n myCount -= myCount % 3;\r\n }\r\n if (myCount <= 0)\r\n return {count: 0, offset: 0};\r\n if (myCount === source.length)\r\n this._data.set(source, myOffset);\r\n else if (source instanceof Float64Array)\r\n this._data.set(source.subarray(0, myCount), myOffset);\r\n else\r\n this._data.set(source.slice(0, myCount), myOffset);\r\n return {count: myCount / 3, offset: myOffset / 3};\r\n }\r\n\r\n /** The number of points in use. When the length is increased, the array is padded with zeroes. */\r\n public get length() { return this._xyzInUse; }\r\n public set length(newLength: number) { this.resize(newLength, true); }\r\n\r\n /** Return the number of float64 in use. */\r\n public get float64Length() { return this._xyzInUse * 3; }\r\n /** Return the raw packed data.\r\n * * Note that the length of the returned Float64Array is a count of doubles, and includes the excess capacity\r\n */\r\n public float64Data(): Float64Array { return this._data; }\r\n\r\n /** If necessary, increase the capacity to the new number of points. Current coordinates and point count (length) are unchanged. */\r\n public ensureCapacity(pointCapacity: number, applyGrowthFactor: boolean = true) {\r\n if (pointCapacity > this._xyzCapacity) {\r\n if (applyGrowthFactor)\r\n pointCapacity *= this._growthFactor;\r\n const prevData = this._data;\r\n this._data = new Float64Array(pointCapacity * 3);\r\n this.copyData(prevData, this._xyzInUse);\r\n this._xyzCapacity = pointCapacity;\r\n }\r\n }\r\n /**\r\n * * If pointCount is less than current length, just reset current length to pointCount, effectively trimming active points but preserving original capacity.\r\n * * If pointCount is greater than current length, reallocate to exactly pointCount, copy existing points, and optionally pad excess with zero.\r\n * @param pointCount new number of active points in array\r\n * @param padWithZero when increasing point count, whether to zero out new points (default false)\r\n */\r\n public resize(pointCount: number, padWithZero?: boolean) {\r\n if (pointCount >= 0 && pointCount < this._xyzInUse)\r\n this._xyzInUse = pointCount;\r\n else if (pointCount > this._xyzInUse) {\r\n this.ensureCapacity(pointCount, false);\r\n if (padWithZero ?? false)\r\n this._data.fill(0, this._xyzInUse * 3);\r\n this._xyzInUse = pointCount;\r\n }\r\n }\r\n /**\r\n * Make a copy of the (active) points in this array.\r\n * (The clone does NOT get excess capacity)\r\n */\r\n public clone(result?: GrowableXYZArray): GrowableXYZArray {\r\n if (!result)\r\n result = new GrowableXYZArray(this.length);\r\n else {\r\n if (result.length !== this.length)\r\n result.clear(); // force resize to trim excess capacity\r\n result.resize(this.length);\r\n }\r\n result.copyData(this._data, this.length);\r\n result._xyzInUse = this.length;\r\n return result;\r\n }\r\n /** Create an array from various point data formats.\r\n * Valid inputs are:\r\n * * Point2d\r\n * * Point3d\r\n * * An array of 2 doubles\r\n * * An array of 3 doubles\r\n * * A GrowableXYZArray\r\n * * Any json object satisfying Point3d.isXYAndZ\r\n * * Any json object satisfying Point3d.isXAndY\r\n * * A Float64Array of doubles, interpreted as xyzxyz\r\n * * An array of any of the above\r\n * @param data source points.\r\n * @param result optional pre-allocated GrowableXYZArray to clear and fill.\r\n */\r\n public static create(data: any, result?: GrowableXYZArray): GrowableXYZArray {\r\n if (result) {\r\n result.clear();\r\n } else {\r\n const pointCount = typeof data[0] === \"number\" ? data.length / 3 : data.length;\r\n result = new GrowableXYZArray(pointCount);\r\n }\r\n result.pushFrom(data);\r\n return result;\r\n }\r\n\r\n /** Restructure MultiLineStringDataVariant as array of GrowableXYZArray */\r\n public static createArrayOfGrowableXYZArray(data: MultiLineStringDataVariant): GrowableXYZArray[] | undefined {\r\n const collector = new PointStreamGrowableXYZArrayCollector();\r\n VariantPointDataStream.streamXYZ(data, collector);\r\n return collector.claimArrayOfGrowableXYZArray();\r\n }\r\n\r\n /** push a point to the end of the array */\r\n public push(toPush: XYAndZ) {\r\n this.pushXYZ(toPush.x, toPush.y, toPush.z);\r\n }\r\n\r\n /** push all points of an array */\r\n public pushAll(points: Point3d[]) {\r\n this.ensureCapacity(this._xyzInUse + points.length, false);\r\n for (const p of points) this.push(p);\r\n }\r\n /** Push points from variant sources.\r\n * Valid inputs are:\r\n * * Point2d\r\n * * Point3d\r\n * * An array of 2 doubles\r\n * * An array of 3 doubles\r\n * * A GrowableXYZArray\r\n * * Any json object satisfying Point3d.isXYAndZ\r\n * * Any json object satisfying Point3d.isXAndY\r\n * * A Float64Array of doubles, interpreted as xyzxyz\r\n * * An array of any of the above\r\n */\r\n public pushFrom(p: any) {\r\n if (p instanceof Point3d)\r\n this.pushXYZ(p.x, p.y, p.z);\r\n else if (p instanceof GrowableXYZArray)\r\n this.pushFromGrowableXYZArray(p);\r\n else if (p instanceof Point2d)\r\n this.pushXYZ(p.x, p.y, 0.0);\r\n else if (Geometry.isNumberArray(p, 4) || p instanceof Float64Array) {\r\n const xyzToAdd = Math.trunc(p.length / 3);\r\n this.ensureCapacity(this._xyzInUse + xyzToAdd, false);\r\n this.copyData(p, xyzToAdd, this._xyzInUse);\r\n this._xyzInUse += xyzToAdd;\r\n } else if (Geometry.isNumberArray(p, 3))\r\n this.pushXYZ(p[0], p[1], p[2]);\r\n else if (Geometry.isNumberArray(p, 2))\r\n this.pushXYZ(p[0], p[1], 0.0);\r\n else if (Array.isArray(p)) {\r\n // direct recursion re-wraps p and goes infinite. Unroll here.\r\n for (const q of p)\r\n this.pushFrom(q);\r\n } else if (Point3d.isXYAndZ(p))\r\n this.pushXYZ(p.x, p.y, p.z);\r\n else if (Point3d.isXAndY(p))\r\n this.pushXYZ(p.x, p.y, 0.0);\r\n else if (p instanceof IndexedXYZCollection) {\r\n const n = p.length;\r\n this.ensureCapacity(this._xyzInUse + n, false);\r\n for (let i = 0; i < n; i++)\r\n this.pushXYZ(p.getXAtUncheckedPointIndex(i), p.getYAtUncheckedPointIndex(i), p.getZAtUncheckedPointIndex(i));\r\n }\r\n }\r\n /**\r\n * Replicate numWrap xyz values from the front of the array as new values at the end.\r\n * @param numWrap number of xyz values to replicate\r\n */\r\n public pushWrap(numWrap: number) {\r\n if (this._xyzInUse >= numWrap) {\r\n this.ensureCapacity(this._xyzInUse + numWrap, false);\r\n for (let i = 0; i < numWrap; i++) {\r\n const k = 3 * i;\r\n this.pushXYZ(this._data[k], this._data[k + 1], this._data[k + 2]);\r\n }\r\n }\r\n }\r\n /** append a new point with given x,y,z */\r\n public pushXYZ(x: number, y: number, z: number) {\r\n this.ensureCapacity(this._xyzInUse + 1);\r\n const index = this._xyzInUse * 3;\r\n this._data[index] = x;\r\n this._data[index + 1] = y;\r\n this._data[index + 2] = z;\r\n this._xyzInUse++;\r\n }\r\n /** Shift all data forward to make space for numPoints at the front.\r\n * * Leading (3*numPoints) doubles are left with prior contents.\r\n * * _xyzInUse count is increased\r\n */\r\n private shiftForward(numPoints: number) {\r\n if (numPoints <= 0)\r\n return;\r\n this.ensureCapacity(this._xyzInUse + numPoints);\r\n const numAddedDouble = 3 * numPoints;\r\n const lastIndex = this._xyzInUse * 3;\r\n this._data.copyWithin(numAddedDouble, 0, lastIndex);\r\n this._xyzInUse += numPoints;\r\n }\r\n /** prepend a new point with given x,y,z\r\n * * Remark: this copies all content forward.\r\n */\r\n public pushFrontXYZ(x: number, y: number, z: number) {\r\n this.shiftForward(1);\r\n this._data[0] = x;\r\n this._data[1] = y;\r\n this._data[2] = z;\r\n }\r\n /** prepend a new point at the front of the array.\r\n *\r\n */\r\n public pushFront(toPush: XYAndZ) {\r\n this.pushFrontXYZ(toPush.x, toPush.y, toPush.z);\r\n }\r\n\r\n /** move the coordinates at fromIndex to toIndex.\r\n * * No action if either index is invalid.\r\n */\r\n public moveIndexToIndex(fromIndex: number, toIndex: number) {\r\n if (this.isIndexValid(fromIndex) && this.isIndexValid(toIndex)) {\r\n let iA = fromIndex * 3;\r\n let iB = toIndex * 3;\r\n this._data[iB++] = this._data[iA++];\r\n this._data[iB++] = this._data[iA++];\r\n this._data[iB] = this._data[iA];\r\n }\r\n }\r\n /** Remove one point from the back.\r\n * * NOTE that (in the manner of std::vector native) this is \"just\" removing the point -- no point is NOT returned.\r\n * * Use `back ()` to get the last x,y,z assembled into a `Point3d `\r\n */\r\n public pop() {\r\n if (this._xyzInUse > 0)\r\n this._xyzInUse--;\r\n }\r\n /**\r\n * Test if index is valid for an xyz (point or vector) within this array\r\n * @param index xyz index to test.\r\n */\r\n public isIndexValid(index: number): boolean {\r\n if (index >= this._xyzInUse || index < 0)\r\n return false;\r\n return true;\r\n }\r\n /**\r\n * Clear all xyz data, but leave capacity unchanged.\r\n */\r\n public clear() {\r\n this._xyzInUse = 0;\r\n }\r\n /**\r\n * Get a point by index, strongly typed as a Point3d. This is unchecked. Use getPoint3dAtCheckedPointIndex to have validity test.\r\n * @param pointIndex index to access\r\n * @param result optional result\r\n */\r\n public getPoint3dAtUncheckedPointIndex(pointIndex: number, result?: Point3d): Point3d {\r\n const index = 3 * pointIndex;\r\n return Point3d.create(this._data[index], this._data[index + 1], this._data[index + 2], result);\r\n }\r\n\r\n /**\r\n * Get a point by index, strongly typed as a Point2d. This is unchecked. Use getPoint2dAtCheckedPointIndex to have validity test.\r\n * @param pointIndex index to access\r\n * @param result optional result\r\n */\r\n public getPoint2dAtUncheckedPointIndex(pointIndex: number, result?: Point2d): Point2d {\r\n const index = 3 * pointIndex;\r\n return Point2d.create(this._data[index], this._data[index + 1], result);\r\n }\r\n\r\n /** copy xyz into strongly typed Point3d */\r\n public getPoint3dAtCheckedPointIndex(pointIndex: number, result?: Point3d): Point3d | undefined {\r\n if (this.isIndexValid(pointIndex)) {\r\n const index = 3 * pointIndex;\r\n return Point3d.create(this._data[index], this._data[index + 1], this._data[index + 2], result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** access x of indexed point */\r\n public getXAtUncheckedPointIndex(pointIndex: number): number {\r\n const index = 3 * pointIndex;\r\n return this._data[index];\r\n }\r\n\r\n /** access y of indexed point */\r\n public getYAtUncheckedPointIndex(pointIndex: number): number {\r\n const index = 3 * pointIndex;\r\n return this._data[index + 1];\r\n }\r\n\r\n /** access y of indexed point */\r\n public getZAtUncheckedPointIndex(pointIndex: number): number {\r\n const index = 3 * pointIndex;\r\n return this._data[index + 2];\r\n }\r\n\r\n /** copy xy into strongly typed Point2d */\r\n public getPoint2dAtCheckedPointIndex(pointIndex: number, result?: Point2d): Point2d | undefined {\r\n if (this.isIndexValid(pointIndex)) {\r\n const index = 3 * pointIndex;\r\n return Point2d.create(this._data[index], this._data[index + 1], result);\r\n }\r\n return undefined;\r\n }\r\n /** copy xyz into strongly typed Vector3d */\r\n public getVector3dAtCheckedVectorIndex(vectorIndex: number, result?: Vector3d): Vector3d | undefined {\r\n if (this.isIndexValid(vectorIndex)) {\r\n const index = 3 * vectorIndex;\r\n return Vector3d.create(this._data[index], this._data[index + 1], this._data[index + 2], result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Read coordinates from source array, place them at index within this array.\r\n * @param destIndex point index where coordinates are to be placed in this array\r\n * @param source source array\r\n * @param sourceIndex point index in source array\r\n * @returns true if destIndex and sourceIndex are both valid.\r\n */\r\n public transferFromGrowableXYZArray(destIndex: number, source: GrowableXYZArray, sourceIndex: number): boolean {\r\n if (this.isIndexValid(destIndex) && source.isIndexValid(sourceIndex)) {\r\n const i = destIndex * 3;\r\n const j = sourceIndex * 3;\r\n this._data[i] = source._data[j];\r\n this._data[i + 1] = source._data[j + 1];\r\n this._data[i + 2] = source._data[j + 2];\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * push coordinates from the source array to the end of this array.\r\n * @param source source array\r\n * @param sourceIndex xyz index within the source. If undefined, entire source is pushed.\r\n * @returns number of points pushed.\r\n */\r\n public pushFromGrowableXYZArray(source: GrowableXYZArray, sourceIndex?: number): number {\r\n // full array push . . .\r\n if (sourceIndex === undefined) {\r\n const numXYZAdd = source.length;\r\n this.ensureCapacity(this.length + numXYZAdd, false);\r\n this.copyData(source._data, numXYZAdd, this.length);\r\n this._xyzInUse += numXYZAdd;\r\n return numXYZAdd;\r\n }\r\n // single point push . . .\r\n if (source.isIndexValid(sourceIndex)) {\r\n const j = sourceIndex * 3;\r\n this.pushXYZ(source._data[j], source._data[j + 1], source._data[j + 2]);\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Return the first point, or undefined if the array is empty.\r\n */\r\n public front(result?: Point3d): Point3d | undefined {\r\n if (this._xyzInUse === 0) return undefined;\r\n return this.getPoint3dAtUncheckedPointIndex(0, result);\r\n }\r\n /**\r\n * Return the last point, or undefined if the array is empty.\r\n */\r\n public back(result?: Point3d): Point3d | undefined {\r\n if (this._xyzInUse < 1) return undefined;\r\n return this.getPoint3dAtUncheckedPointIndex(this._xyzInUse - 1, result);\r\n }\r\n /**\r\n * Set the coordinates of a single point.\r\n * @param pointIndex index of point to set\r\n * @param value coordinates to set\r\n */\r\n public setAtCheckedPointIndex(pointIndex: number, value: XYAndZ): boolean {\r\n if (!this.isIndexValid(pointIndex))\r\n return false;\r\n let index = pointIndex * 3;\r\n this._data[index++] = value.x;\r\n this._data[index++] = value.y;\r\n this._data[index] = value.z;\r\n return true;\r\n }\r\n /**\r\n * Set the coordinates of a single point given as coordinates\r\n * @param pointIndex index of point to set\r\n * @param x x coordinate\r\n * @param y y coordinate\r\n * @param z z coordinate\r\n */\r\n public setXYZAtCheckedPointIndex(pointIndex: number, x: number, y: number, z: number): boolean {\r\n if (!this.isIndexValid(pointIndex))\r\n return false;\r\n let index = pointIndex * 3;\r\n this._data[index++] = x;\r\n this._data[index++] = y;\r\n this._data[index] = z;\r\n return true;\r\n }\r\n\r\n /**\r\n * Copy all points into a simple array of Point3d\r\n */\r\n public getPoint3dArray(): Point3d[] {\r\n const n = 3 * this._xyzInUse;\r\n const result = [];\r\n const data = this._data;\r\n for (let i = 0; i < n; i += 3)\r\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\r\n return result;\r\n }\r\n /** multiply each point by the transform, replace values. */\r\n public static multiplyTransformInPlace(transform: Transform, data: GrowableXYZArray[] | GrowableXYZArray) {\r\n if (Array.isArray(data)) {\r\n for (const d of data)\r\n d.multiplyTransformInPlace(transform);\r\n } else {\r\n data.multiplyTransformInPlace(transform);\r\n }\r\n }\r\n\r\n /** multiply each point by the transform, replace values. */\r\n public multiplyTransformInPlace(transform: Transform) {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n const coffs = transform.matrix.coffs;\r\n const origin = transform.origin;\r\n const x0 = origin.x;\r\n const y0 = origin.y;\r\n const z0 = origin.z;\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n for (let i = 0; i + 2 <= nDouble; i += 3) {\r\n x = data[i];\r\n y = data[i + 1];\r\n z = data[i + 2];\r\n data[i] = coffs[0] * x + coffs[1] * y + coffs[2] * z + x0;\r\n data[i + 1] = coffs[3] * x + coffs[4] * y + coffs[5] * z + y0;\r\n data[i + 2] = coffs[6] * x + coffs[7] * y + coffs[8] * z + z0;\r\n }\r\n }\r\n\r\n /** reverse the order of points. */\r\n public reverseInPlace() {\r\n const n = this.length;\r\n let j0, j1;\r\n let a;\r\n const data = this._data;\r\n for (let i0 = 0, i1 = n - 1; i0 < i1; i0++, i1--) {\r\n j0 = 3 * i0;\r\n j1 = 3 * i1;\r\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\r\n j0++;\r\n j1++;\r\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\r\n j0++;\r\n j1++;\r\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\r\n }\r\n }\r\n\r\n /** multiply each xyz (as a vector) by matrix, replace values. */\r\n public multiplyMatrix3dInPlace(matrix: Matrix3d) {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n const coffs = matrix.coffs;\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n for (let i = 0; i + 2 <= nDouble; i += 3) {\r\n x = data[i];\r\n y = data[i + 1];\r\n z = data[i + 2];\r\n data[i] = coffs[0] * x + coffs[1] * y + coffs[2] * z;\r\n data[i + 1] = coffs[3] * x + coffs[4] * y + coffs[5] * z;\r\n data[i + 2] = coffs[6] * x + coffs[7] * y + coffs[8] * z;\r\n }\r\n }\r\n\r\n /** multiply each xyz (as a vector) by matrix inverse transpose, renormalize the vector, replace values.\r\n * * This is the way to apply a matrix (possibly with skew and scale) to a surface normal, and\r\n * have it end up perpendicular to the transformed in-surface vectors.\r\n * * Return false if matrix is not invertible or if any normalization fails.\r\n */\r\n public multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(matrix: Matrix3d): boolean {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n if (!matrix.computeCachedInverse(true))\r\n return false;\r\n const coffs = matrix.inverseCoffs!;\r\n const tol = Geometry.smallFloatingPoint;\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n let x1;\r\n let y1;\r\n let z1;\r\n let q;\r\n let a;\r\n let numFail = 0;\r\n for (let i = 0; i + 2 <= nDouble; i += 3) {\r\n x = data[i];\r\n y = data[i + 1];\r\n z = data[i + 2];\r\n x1 = coffs[0] * x + coffs[3] * y + coffs[6] * z;\r\n y1 = coffs[1] * x + coffs[4] * y + coffs[7] * z;\r\n z1 = coffs[2] * x + coffs[5] * y + coffs[8] * z;\r\n a = x1 * x1 + y1 * y1 + z1 * z1;\r\n if (a < tol) {\r\n // put the originals back ..\r\n x1 = x; y1 = y; z1 = z;\r\n numFail++;\r\n } else if (Math.abs(a - 1.0) > tol) {\r\n q = 1.0 / Math.sqrt(a);\r\n x1 *= q;\r\n y1 *= q;\r\n z1 *= q;\r\n } // else -- q is near 1, no need to do the division !!\r\n data[i] = x1;\r\n data[i + 1] = y1;\r\n data[i + 2] = z1;\r\n }\r\n return numFail === 0;\r\n }\r\n\r\n /** multiply each xyz (as a point) by a homogeneous matrix and update as the normalized point\r\n *\r\n */\r\n public multiplyMatrix4dAndQuietRenormalizeMatrix4d(matrix: Matrix4d) {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n const xyz1 = Point3d.create();\r\n for (let i = 0; i + 2 <= nDouble; i += 3) {\r\n matrix.multiplyXYZWQuietRenormalize(data[i], data[i + 1], data[i + 2], 1.0, xyz1);\r\n data[i] = xyz1.x;\r\n data[i + 1] = xyz1.y;\r\n data[i + 2] = xyz1.z;\r\n }\r\n }\r\n\r\n /** multiply each point by the transform, replace values. */\r\n public tryTransformInverseInPlace(transform: Transform): boolean {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n const matrix = transform.matrix;\r\n matrix.computeCachedInverse(true);\r\n const coffs = matrix.inverseCoffs;\r\n if (!coffs)\r\n return false;\r\n const origin = transform.origin;\r\n const x0 = origin.x;\r\n const y0 = origin.y;\r\n const z0 = origin.z;\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n for (let i = 0; i + 2 < nDouble; i += 3) {\r\n x = data[i] - x0;\r\n y = data[i + 1] - y0;\r\n z = data[i + 2] - z0;\r\n data[i] = coffs[0] * x + coffs[1] * y + coffs[2] * z;\r\n data[i + 1] = coffs[3] * x + coffs[4] * y + coffs[5] * z;\r\n data[i + 2] = coffs[6] * x + coffs[7] * y + coffs[8] * z;\r\n }\r\n return true;\r\n }\r\n /** Extend `range` to extend by all points. */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const numDouble = this.float64Length;\r\n const data = this._data;\r\n if (transform) {\r\n for (let i = 0; i + 2 < numDouble; i += 3)\r\n rangeToExtend.extendTransformedXYZ(transform, data[i], data[i + 1], data[i + 2]);\r\n } else {\r\n for (let i = 0; i + 2 < numDouble; i += 3)\r\n rangeToExtend.extendXYZ(data[i], data[i + 1], data[i + 2]);\r\n\r\n }\r\n }\r\n /** get range of points. */\r\n public override getRange(transform?: Transform): Range3d {\r\n const range = Range3d.createNull();\r\n this.extendRange(range, transform);\r\n return range;\r\n }\r\n\r\n /** Initialize `range` with coordinates in this array. */\r\n public setRange(range: Range3d, transform?: Transform) {\r\n range.setNull();\r\n this.extendRange(range, transform);\r\n }\r\n\r\n /** Sum the lengths of segments between points. */\r\n public sumLengths(): number {\r\n let sum = 0.0;\r\n const n = 3 * (this._xyzInUse - 1); // Length already takes into account what specifically is in use\r\n const data = this._data;\r\n for (let i = 0; i < n; i += 3) sum += Geometry.hypotenuseXYZ(\r\n data[i + 3] - data[i],\r\n data[i + 4] - data[i + 1],\r\n data[i + 5] - data[i + 2]);\r\n return sum;\r\n }\r\n /**\r\n * Multiply each x,y,z by the scale factor.\r\n * @param factor\r\n */\r\n public scaleInPlace(factor: number) {\r\n if (this._data) {\r\n const numFloat = this.float64Length;\r\n for (let i = 0; i < numFloat; i++)\r\n this._data[i] = this._data[i] * factor;\r\n }\r\n }\r\n /** test if all points are within tolerance of a plane. */\r\n public isCloseToPlane(plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n const numCoordinate = 3 * this._xyzInUse;\r\n const data = this._data;\r\n for (let i = 0; i < numCoordinate; i += 3)\r\n if (Math.abs(plane.altitudeXYZ(data[i], data[i + 1], data[i + 2])) > tolerance)\r\n return false;\r\n return true;\r\n }\r\n /**\r\n * * If not already closed, push a copy of the first point.\r\n * * If already closed within tolerance, force exact copy\r\n * * otherwise leave unchanged.\r\n */\r\n public forceClosure(tolerance: number = Geometry.smallMetricDistance) {\r\n const d = this.distanceIndexIndex(0, this.length - 1);\r\n // leave the empty array alone.\r\n // Note that singleton will generate 0 distance and do nothing.\r\n if (d === undefined) {\r\n } else if (d > tolerance)\r\n this.pushXYZ(this._data[0], this._data[1], this._data[2]);\r\n else if (d > 0) {\r\n // overwrite last point with exact exact first point\r\n const i0 = this._data.length - 3;\r\n for (let i = 0; i < 3; i++)\r\n this._data[i0 + i] = this._data[i];\r\n }\r\n }\r\n\r\n /** Compute a point at fractional coordinate between points i and j */\r\n public interpolate(i: number, fraction: number, j: number, result?: Point3d): Point3d | undefined {\r\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\r\n const fraction0 = 1.0 - fraction;\r\n const data = this._data;\r\n i = 3 * i;\r\n j = 3 * j;\r\n return Point3d.create(\r\n fraction0 * data[i] + fraction * data[j],\r\n fraction0 * data[i + 1] + fraction * data[j + 1],\r\n fraction0 * data[i + 2] + fraction * data[j + 2], result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * * Compute a point at fractional coordinate between points i and j of source\r\n * * push onto this array.\r\n */\r\n public pushInterpolatedFromGrowableXYZArray(source: GrowableXYZArray, i: number, fraction: number, j: number) {\r\n if (source.isIndexValid(i) && source.isIndexValid(j)) {\r\n const fraction0 = 1.0 - fraction;\r\n const data = source._data;\r\n i = 3 * i;\r\n j = 3 * j;\r\n this.pushXYZ(\r\n fraction0 * data[i] + fraction * data[j],\r\n fraction0 * data[i + 1] + fraction * data[j + 1],\r\n fraction0 * data[i + 2] + fraction * data[j + 2]);\r\n }\r\n }\r\n\r\n /** Sum the signed areas of the projection to xy plane */\r\n public areaXY(): number {\r\n let area = 0.0;\r\n const n = 3 * this._xyzInUse; // float count !!\r\n if (n > 6) {\r\n const x0 = this._data[n - 3];\r\n const y0 = this._data[n - 2];\r\n let dx1 = this._data[0] - x0;\r\n let dy1 = this._data[1] - y0;\r\n let dx2 = 0;\r\n let dy2 = 0;\r\n for (let i = 3; i < n; i += 3, dx1 = dx2, dy1 = dy2) {\r\n dx2 = this._data[i] - x0;\r\n dy2 = this._data[i + 1] - y0;\r\n area += Geometry.crossProductXYXY(dx1, dy1, dx2, dy2);\r\n }\r\n }\r\n return 0.5 * area;\r\n }\r\n\r\n /** Compute a vector from index origin i to indexed target j */\r\n public vectorIndexIndex(i: number, j: number, result?: Vector3d): Vector3d | undefined {\r\n if (!this.isIndexValid(i) || !this.isIndexValid(j))\r\n return undefined;\r\n const data = this._data;\r\n i = 3 * i;\r\n j = 3 * j;\r\n return Vector3d.create(\r\n data[j] - data[i],\r\n data[j + 1] - data[i + 1],\r\n data[j + 2] - data[i + 2], result);\r\n }\r\n\r\n /** Compute a vector from origin to indexed target j */\r\n public vectorXYAndZIndex(origin: XYAndZ, j: number, result?: Vector3d): Vector3d | undefined {\r\n if (this.isIndexValid(j)) {\r\n const data = this._data;\r\n j = 3 * j;\r\n return Vector3d.create(\r\n data[j] - origin.x,\r\n data[j + 1] - origin.y,\r\n data[j + 2] - origin.z, result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Compute the cross product of vectors from from indexed origin to indexed targets i and j */\r\n public crossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number, result?: Vector3d): Vector3d | undefined {\r\n if (this.isIndexValid(originIndex) && this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\r\n const i = originIndex * 3;\r\n const j = targetAIndex * 3;\r\n const k = targetBIndex * 3;\r\n const data = this._data;\r\n return Geometry.crossProductXYZXYZ(\r\n data[j] - data[i], data[j + 1] - data[i + 1], data[j + 2] - data[i + 2],\r\n data[k] - data[i], data[k + 1] - data[i + 1], data[k + 2] - data[i + 2],\r\n result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Compute the dot product of pointIndex with [x,y,z] */\r\n public evaluateUncheckedIndexDotProductXYZ(pointIndex: number, x: number, y: number, z: number): number {\r\n const i = pointIndex * 3;\r\n const data = this._data;\r\n return data[i] * x + data[i + 1] * y + data[i + 2] * z;\r\n }\r\n /** Compute the dot product of pointIndex with [x,y,z] */\r\n public evaluateUncheckedIndexPlaneAltitude(pointIndex: number, plane: PlaneAltitudeEvaluator): number {\r\n const i = pointIndex * 3;\r\n const data = this._data;\r\n return plane.altitudeXYZ(data[i], data[i + 1], data[i + 2]);\r\n }\r\n\r\n /**\r\n * * compute the cross product from indexed origin t indexed targets targetAIndex and targetB index.\r\n * * accumulate it to the result.\r\n */\r\n public accumulateCrossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number, result: Vector3d): void {\r\n if (this.isIndexValid(originIndex) && this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\r\n const i = originIndex * 3;\r\n const j = targetAIndex * 3;\r\n const k = targetBIndex * 3;\r\n const data = this._data;\r\n result.addCrossProductToTargetsInPlace(\r\n data[i], data[i + 1], data[i + 2],\r\n data[j], data[j + 1], data[j + 2],\r\n data[k], data[k + 1], data[k + 2]);\r\n }\r\n }\r\n\r\n /**\r\n * * compute the cross product from indexed origin t indexed targets targetAIndex and targetB index.\r\n * * accumulate it to the result.\r\n */\r\n public accumulateScaledXYZ(index: number, scale: number, sum: Point3d): void {\r\n if (this.isIndexValid(index)) {\r\n const i = index * 3;\r\n const data = this._data;\r\n sum.x += scale * data[i];\r\n sum.y += scale * data[i + 1];\r\n sum.z += scale * data[i + 2];\r\n }\r\n }\r\n\r\n /** Compute the cross product of vectors from from origin to indexed targets i and j */\r\n public crossProductXYAndZIndexIndex(origin: XYAndZ, targetAIndex: number, targetBIndex: number, result?: Vector3d): Vector3d | undefined {\r\n if (this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\r\n const j = targetAIndex * 3;\r\n const k = targetBIndex * 3;\r\n const data = this._data;\r\n return Geometry.crossProductXYZXYZ(\r\n data[j] - origin.x, data[j + 1] - origin.y, data[j + 2] - origin.z,\r\n data[k] - origin.x, data[k + 1] - origin.y, data[k + 2] - origin.z,\r\n result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Return the distance between an array point and the input point. */\r\n public distanceIndexToPoint(i: number, spacePoint: XYAndZ): number | undefined {\r\n if (this.isIndexValid(i)) {\r\n const i0 = 3 * i;\r\n return Geometry.hypotenuseXYZ(\r\n spacePoint.x - this._data[i0],\r\n spacePoint.y - this._data[i0 + 1],\r\n spacePoint.z - this._data[i0 + 2]);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Return distance squared between indicated points.\r\n * @param i first point index\r\n * @param j second point index\r\n */\r\n public distanceSquaredIndexIndex(i: number, j: number): number | undefined {\r\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\r\n const i0 = 3 * i;\r\n const j0 = 3 * j;\r\n return Geometry.hypotenuseSquaredXYZ(\r\n this._data[j0] - this._data[i0],\r\n this._data[j0 + 1] - this._data[i0 + 1],\r\n this._data[j0 + 2] - this._data[i0 + 2]);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Return distance between indicated points.\r\n * @param i first point index\r\n * @param j second point index\r\n */\r\n public distanceIndexIndex(i: number, j: number): number | undefined {\r\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\r\n const i0 = 3 * i;\r\n const j0 = 3 * j;\r\n return Geometry.hypotenuseXYZ(\r\n this._data[j0] - this._data[i0],\r\n this._data[j0 + 1] - this._data[i0 + 1],\r\n this._data[j0 + 2] - this._data[i0 + 2]);\r\n }\r\n return undefined;\r\n }\r\n /** Return the distance between points in distinct arrays. */\r\n public static distanceBetweenPointsIn2Arrays(arrayA: GrowableXYZArray, i: number, arrayB: GrowableXYZArray, j: number): number | undefined {\r\n if (arrayA.isIndexValid(i) && arrayB.isIndexValid(j)) {\r\n const i0 = 3 * i;\r\n const j0 = 3 * j;\r\n return Geometry.hypotenuseXYZ(\r\n arrayB._data[j0] - arrayA._data[i0],\r\n arrayB._data[j0 + 1] - arrayA._data[i0 + 1],\r\n arrayB._data[j0 + 2] - arrayA._data[i0 + 2]);\r\n }\r\n return undefined;\r\n }\r\n /** test for near equality between two `GrowableXYZArray`. */\r\n public static isAlmostEqual(dataA: GrowableXYZArray | undefined, dataB: GrowableXYZArray | undefined): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA.getPoint3dAtUncheckedPointIndex(i).isAlmostEqual(dataB.getPoint3dAtUncheckedPointIndex(i)))\r\n return false;\r\n return true;\r\n }\r\n // if both are null it is equal, otherwise unequal\r\n return (!dataA && !dataB);\r\n }\r\n\r\n /** Return an array of block indices sorted per compareLexicalBlock function */\r\n public sortIndicesLexical(): Uint32Array {\r\n const n = this._xyzInUse;\r\n // let numCompare = 0;\r\n const result = new Uint32Array(n);\r\n for (let i = 0; i < n; i++) result[i] = i;\r\n result.sort(\r\n (blockIndexA: number, blockIndexB: number) => {\r\n // numCompare++;\r\n return this.compareLexicalBlock(blockIndexA, blockIndexB);\r\n });\r\n // console.log (n, numCompare);\r\n return result;\r\n }\r\n\r\n /** compare two blocks in simple lexical order. */\r\n public compareLexicalBlock(ia: number, ib: number): number {\r\n let ax = 0;\r\n let bx = 0;\r\n for (let i = 0; i < 3; i++) {\r\n ax = this._data[ia * 3 + i];\r\n bx = this._data[ib * 3 + i];\r\n if (ax > bx) return 1;\r\n if (ax < bx) return -1;\r\n }\r\n return ia - ib; // so original order is maintained among duplicates !!!!\r\n }\r\n\r\n /** Access a single double at offset within a block. This has no index checking. */\r\n public component(pointIndex: number, componentIndex: number): number {\r\n return this._data[3 * pointIndex + componentIndex];\r\n }\r\n /**\r\n * add points at regular steps from `other`\r\n * @param source\r\n * @param pointIndex0\r\n * @param step\r\n * @param numAdd\r\n */\r\n public addSteppedPoints(other: GrowableXYZArray, pointIndex0: number, step: number, numAdd: number) {\r\n const dataB = other._data;\r\n let b0 = pointIndex0 * 3;\r\n const nb = other.length * 3;\r\n let numAdded = 0;\r\n this.ensureCapacity(this._xyzInUse + numAdd, false);\r\n while (b0 >= 0 && b0 + 2 < nb && numAdded < numAdd) {\r\n this.pushXYZ(dataB[b0], dataB[b0 + 1], dataB[b0 + 2]);\r\n b0 += step * 3;\r\n numAdded++;\r\n }\r\n }\r\n\r\n /**\r\n * find the min and max distance between corresponding indexed points. Excess points are ignored.\r\n * @param arrayA first array\r\n * @param arrayB second array\r\n */\r\n public static distanceRangeBetweenCorrespondingPoints(arrayA: GrowableXYZArray, arrayB: GrowableXYZArray): Range1d {\r\n const dataA = arrayA._data;\r\n const dataB = arrayB._data;\r\n const n = Math.min(arrayA.length, arrayB.length);\r\n let i = 0;\r\n let k0;\r\n const range = Range1d.createNull();\r\n while (i < n) {\r\n k0 = 3 * i;\r\n range.extendX(Geometry.hypotenuseXYZ(dataA[k0] - dataB[k0], dataA[k0 + 1] - dataB[k0 + 1], dataA[k0 + 2] - dataB[k0 + 2]));\r\n i++;\r\n }\r\n return range;\r\n }\r\n /**\r\n * remove trailing point(s) within tolerance of the start point.\r\n * @param points\r\n * @param tolerance\r\n */\r\n public static removeClosure(points: IndexedReadWriteXYZCollection, tolerance: number = Geometry.smallMetricDistance) {\r\n while (points.length > 1 && points.distanceIndexIndex(0, points.length - 1)! < tolerance)\r\n points.pop();\r\n }\r\n /**\r\n * Compute frame for a triangle formed by three (unchecked!) points identified by index.\r\n * * z direction of frame is 001.\r\n * * Transform axes from origin to targetA and targetB\r\n * * in local coordinates (u,v,w) the xy interior of the triangle is `u>=0, v>= 0, w>= 0, u+v+w<1`\r\n * * Return undefined if transform is not invertible, e.g. if points are in a vertical plane.\r\n */\r\n public fillLocalXYTriangleFrame(originIndex: number, targetAIndex: number, targetBIndex: number, result?: Transform): Transform | undefined {\r\n if (this.isIndexValid(originIndex) && this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\r\n let i0 = originIndex * 3;\r\n const data = this._data;\r\n const ax = data[i0++];\r\n const ay = data[i0++];\r\n const az = data[i0++];\r\n i0 = targetAIndex * 3;\r\n const ux = data[i0++] - ax;\r\n const uy = data[i0++] - ay;\r\n const uz = data[i0++] - az;\r\n i0 = targetBIndex * 3;\r\n const vx = data[i0++] - ax;\r\n const vy = data[i0++] - ay;\r\n const vz = data[i0++] - az;\r\n result = Transform.createRowValues(\r\n ux, vx, 0, ax,\r\n uy, vy, 0, ay,\r\n uz, vz, 1, az, result);\r\n return result.computeCachedInverse() ? result : undefined;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Pass the (x,y,z) of each point to a function which returns a replacement for one of the 3 components.\r\n * @param componentIndex Index (0,1,2) of component to be replaced.\r\n * @param func function to be called as `func(x,y,z)`, returning a replacement value for componentIndex\r\n */\r\n public mapComponent(componentIndex: 0 | 1 | 2, func: (x: number, y: number, z: number) => number) {\r\n const n = this._data.length;\r\n let q;\r\n for (let i = 0; i + 2 < n; i += 3) {\r\n q = func(this._data[i], this._data[i + 1], this._data[i + 2]);\r\n this._data[i + componentIndex] = q;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"GrowableXYZArray.js","sourceRoot":"","sources":["../../../src/geometry3d/GrowableXYZArray.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module ArraysAndInterfaces\r\n */\r\n\r\nimport { Geometry, PlaneAltitudeEvaluator } from \"../Geometry\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { MultiLineStringDataVariant } from \"../topology/Triangulation\";\r\nimport { IndexedReadWriteXYZCollection, IndexedXYZCollection } from \"./IndexedXYZCollection\";\r\nimport { Matrix3d } from \"./Matrix3d\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"./Plane3dByOriginAndUnitNormal\";\r\nimport { Point2d } from \"./Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\nimport { PointStreamGrowableXYZArrayCollector, VariantPointDataStream } from \"./PointStreaming\";\r\nimport { Range1d, Range3d } from \"./Range\";\r\nimport { Transform } from \"./Transform\";\r\nimport { XYAndZ } from \"./XYZProps\";\r\n\r\n/** `GrowableXYArray` manages a (possibly growing) Float64Array to pack xy coordinates.\r\n * @public\r\n */\r\nexport class GrowableXYZArray extends IndexedReadWriteXYZCollection {\r\n /**\r\n * array of packed xyz xyz xyz components\r\n */\r\n private _data: Float64Array;\r\n /**\r\n * Number of xyz triples (not floats) in the array\r\n */\r\n private _xyzInUse: number;\r\n /**\r\n * capacity in xyz triples. (not floats)\r\n */\r\n private _xyzCapacity: number;\r\n /**\r\n * multiplier used by ensureCapacity to expand requested reallocation size\r\n */\r\n private _growthFactor: number;\r\n\r\n /** Construct a new GrowablePoint3d array.\r\n * @param numPoints initial capacity in xyz triples (default 8)\r\n * @param growthFactor used by ensureCapacity to expand requested reallocation size (default 1.5)\r\n */\r\n public constructor(numPoints: number = 8, growthFactor?: number) {\r\n super();\r\n this._data = new Float64Array(numPoints * 3); // 3 values per point\r\n this._xyzInUse = 0;\r\n this._xyzCapacity = numPoints;\r\n this._growthFactor = (undefined !== growthFactor && growthFactor >= 1.0) ? growthFactor : 1.5;\r\n }\r\n\r\n /** Copy xyz points from source array. Does not reallocate or change active point count.\r\n * @param source array to copy from\r\n * @param sourceCount copy the first sourceCount points; all points if undefined\r\n * @param destOffset copy to instance array starting at this point index; zero if undefined\r\n * @return count and offset of points copied\r\n */\r\n protected copyData(source: Float64Array | number[], sourceCount?: number, destOffset?: number): {count: number, offset: number} {\r\n // validate inputs and convert from points to entries\r\n let myOffset = (undefined !== destOffset) ? destOffset * 3 : 0;\r\n if (myOffset < 0)\r\n myOffset = 0;\r\n if (myOffset >= this._data.length)\r\n return {count: 0, offset: 0};\r\n let myCount = (undefined !== sourceCount) ? sourceCount * 3 : source.length;\r\n if (myCount > 0) {\r\n if (myCount > source.length)\r\n myCount = source.length;\r\n if (myOffset + myCount > this._data.length)\r\n myCount = this._data.length - myOffset;\r\n if (myCount % 3 !== 0)\r\n myCount -= myCount % 3;\r\n }\r\n if (myCount <= 0)\r\n return {count: 0, offset: 0};\r\n if (myCount === source.length)\r\n this._data.set(source, myOffset);\r\n else if (source instanceof Float64Array)\r\n this._data.set(source.subarray(0, myCount), myOffset);\r\n else\r\n this._data.set(source.slice(0, myCount), myOffset);\r\n return {count: myCount / 3, offset: myOffset / 3};\r\n }\r\n\r\n /** The number of points in use. When the length is increased, the array is padded with zeroes. */\r\n public get length() { return this._xyzInUse; }\r\n public set length(newLength: number) { this.resize(newLength, true); }\r\n\r\n /** Return the number of float64 in use. */\r\n public get float64Length() { return this._xyzInUse * 3; }\r\n /** Return the raw packed data.\r\n * * Note that the length of the returned Float64Array is a count of doubles, and includes the excess capacity\r\n */\r\n public float64Data(): Float64Array { return this._data; }\r\n\r\n /** If necessary, increase the capacity to the new number of points. Current coordinates and point count (length) are unchanged. */\r\n public ensureCapacity(pointCapacity: number, applyGrowthFactor: boolean = true) {\r\n if (pointCapacity > this._xyzCapacity) {\r\n if (applyGrowthFactor)\r\n pointCapacity *= this._growthFactor;\r\n const prevData = this._data;\r\n this._data = new Float64Array(pointCapacity * 3);\r\n this.copyData(prevData, this._xyzInUse);\r\n this._xyzCapacity = pointCapacity;\r\n }\r\n }\r\n /**\r\n * * If pointCount is less than current length, just reset current length to pointCount, effectively trimming active points but preserving original capacity.\r\n * * If pointCount is greater than current length, reallocate to exactly pointCount, copy existing points, and optionally pad excess with zero.\r\n * @param pointCount new number of active points in array\r\n * @param padWithZero when increasing point count, whether to zero out new points (default false)\r\n */\r\n public resize(pointCount: number, padWithZero?: boolean) {\r\n if (pointCount >= 0 && pointCount < this._xyzInUse)\r\n this._xyzInUse = pointCount;\r\n else if (pointCount > this._xyzInUse) {\r\n this.ensureCapacity(pointCount, false);\r\n if (padWithZero ?? false)\r\n this._data.fill(0, this._xyzInUse * 3);\r\n this._xyzInUse = pointCount;\r\n }\r\n }\r\n /**\r\n * Make a copy of the (active) points in this array.\r\n * (The clone does NOT get excess capacity)\r\n */\r\n public clone(result?: GrowableXYZArray): GrowableXYZArray {\r\n if (!result)\r\n result = new GrowableXYZArray(this.length);\r\n else {\r\n if (result.length !== this.length)\r\n result.clear(); // force resize to trim excess capacity\r\n result.resize(this.length);\r\n }\r\n result.copyData(this._data, this.length);\r\n result._xyzInUse = this.length;\r\n return result;\r\n }\r\n /** Create an array from various point data formats.\r\n * Valid inputs are:\r\n * * Point2d\r\n * * Point3d\r\n * * An array of 2 doubles\r\n * * An array of 3 doubles\r\n * * A GrowableXYZArray\r\n * * Any json object satisfying Point3d.isXYAndZ\r\n * * Any json object satisfying Point3d.isXAndY\r\n * * A Float64Array of doubles, interpreted as xyzxyz\r\n * * An array of any of the above\r\n * @param data source points.\r\n * @param result optional pre-allocated GrowableXYZArray to clear and fill.\r\n */\r\n public static create(data: any, result?: GrowableXYZArray): GrowableXYZArray {\r\n if (result) {\r\n result.clear();\r\n } else {\r\n const pointCount = typeof data[0] === \"number\" ? data.length / 3 : data.length;\r\n result = new GrowableXYZArray(pointCount);\r\n }\r\n result.pushFrom(data);\r\n return result;\r\n }\r\n\r\n /** Restructure MultiLineStringDataVariant as array of GrowableXYZArray */\r\n public static createArrayOfGrowableXYZArray(data: MultiLineStringDataVariant): GrowableXYZArray[] | undefined {\r\n const collector = new PointStreamGrowableXYZArrayCollector();\r\n VariantPointDataStream.streamXYZ(data, collector);\r\n return collector.claimArrayOfGrowableXYZArray();\r\n }\r\n\r\n /** push a point to the end of the array */\r\n public push(toPush: XYAndZ) {\r\n this.pushXYZ(toPush.x, toPush.y, toPush.z);\r\n }\r\n\r\n /** push all points of an array */\r\n public pushAll(points: Point3d[]) {\r\n this.ensureCapacity(this._xyzInUse + points.length, false);\r\n for (const p of points) this.push(p);\r\n }\r\n /** Push points from variant sources.\r\n * Valid inputs are:\r\n * * Point2d\r\n * * Point3d\r\n * * An array of 2 doubles\r\n * * An array of 3 doubles\r\n * * A GrowableXYZArray\r\n * * Any json object satisfying Point3d.isXYAndZ\r\n * * Any json object satisfying Point3d.isXAndY\r\n * * A Float64Array of doubles, interpreted as xyzxyz\r\n * * An array of any of the above\r\n */\r\n public pushFrom(p: any) {\r\n if (p instanceof Point3d)\r\n this.pushXYZ(p.x, p.y, p.z);\r\n else if (p instanceof GrowableXYZArray)\r\n this.pushFromGrowableXYZArray(p);\r\n else if (p instanceof Point2d)\r\n this.pushXYZ(p.x, p.y, 0.0);\r\n else if (Geometry.isNumberArray(p, 4) || p instanceof Float64Array) {\r\n const xyzToAdd = Math.trunc(p.length / 3);\r\n this.ensureCapacity(this._xyzInUse + xyzToAdd, false);\r\n this.copyData(p, xyzToAdd, this._xyzInUse);\r\n this._xyzInUse += xyzToAdd;\r\n } else if (Geometry.isNumberArray(p, 3))\r\n this.pushXYZ(p[0], p[1], p[2]);\r\n else if (Geometry.isNumberArray(p, 2))\r\n this.pushXYZ(p[0], p[1], 0.0);\r\n else if (Array.isArray(p)) {\r\n // direct recursion re-wraps p and goes infinite. Unroll here.\r\n for (const q of p)\r\n this.pushFrom(q);\r\n } else if (Point3d.isXYAndZ(p))\r\n this.pushXYZ(p.x, p.y, p.z);\r\n else if (Point3d.isXAndY(p))\r\n this.pushXYZ(p.x, p.y, 0.0);\r\n else if (p instanceof IndexedXYZCollection) {\r\n const n = p.length;\r\n this.ensureCapacity(this._xyzInUse + n, false);\r\n for (let i = 0; i < n; i++)\r\n this.pushXYZ(p.getXAtUncheckedPointIndex(i), p.getYAtUncheckedPointIndex(i), p.getZAtUncheckedPointIndex(i));\r\n }\r\n }\r\n /**\r\n * Replicate numWrap xyz values from the front of the array as new values at the end.\r\n * @param numWrap number of xyz values to replicate\r\n */\r\n public pushWrap(numWrap: number) {\r\n if (this._xyzInUse >= numWrap) {\r\n this.ensureCapacity(this._xyzInUse + numWrap, false);\r\n for (let i = 0; i < numWrap; i++) {\r\n const k = 3 * i;\r\n this.pushXYZ(this._data[k], this._data[k + 1], this._data[k + 2]);\r\n }\r\n }\r\n }\r\n /** append a new point with given x,y,z */\r\n public pushXYZ(x: number, y: number, z: number) {\r\n this.ensureCapacity(this._xyzInUse + 1);\r\n const index = this._xyzInUse * 3;\r\n this._data[index] = x;\r\n this._data[index + 1] = y;\r\n this._data[index + 2] = z;\r\n this._xyzInUse++;\r\n }\r\n /** Shift all data forward to make space for numPoints at the front.\r\n * * Leading (3*numPoints) doubles are left with prior contents.\r\n * * _xyzInUse count is increased\r\n */\r\n private shiftForward(numPoints: number) {\r\n if (numPoints <= 0)\r\n return;\r\n this.ensureCapacity(this._xyzInUse + numPoints);\r\n const numAddedDouble = 3 * numPoints;\r\n const lastIndex = this._xyzInUse * 3;\r\n this._data.copyWithin(numAddedDouble, 0, lastIndex);\r\n this._xyzInUse += numPoints;\r\n }\r\n /** prepend a new point with given x,y,z\r\n * * Remark: this copies all content forward.\r\n */\r\n public pushFrontXYZ(x: number, y: number, z: number) {\r\n this.shiftForward(1);\r\n this._data[0] = x;\r\n this._data[1] = y;\r\n this._data[2] = z;\r\n }\r\n /** prepend a new point at the front of the array.\r\n *\r\n */\r\n public pushFront(toPush: XYAndZ) {\r\n this.pushFrontXYZ(toPush.x, toPush.y, toPush.z);\r\n }\r\n\r\n /** move the coordinates at fromIndex to toIndex.\r\n * * No action if either index is invalid.\r\n */\r\n public moveIndexToIndex(fromIndex: number, toIndex: number) {\r\n if (this.isIndexValid(fromIndex) && this.isIndexValid(toIndex)) {\r\n let iA = fromIndex * 3;\r\n let iB = toIndex * 3;\r\n this._data[iB++] = this._data[iA++];\r\n this._data[iB++] = this._data[iA++];\r\n this._data[iB] = this._data[iA];\r\n }\r\n }\r\n /** Remove one point from the back.\r\n * * NOTE that (in the manner of std::vector native) this is \"just\" removing the point -- no point is NOT returned.\r\n * * Use `back ()` to get the last x,y,z assembled into a `Point3d `\r\n */\r\n public pop() {\r\n if (this._xyzInUse > 0)\r\n this._xyzInUse--;\r\n }\r\n /**\r\n * Test if index is valid for an xyz (point or vector) within this array\r\n * @param index xyz index to test.\r\n */\r\n public isIndexValid(index: number): boolean {\r\n if (index >= this._xyzInUse || index < 0)\r\n return false;\r\n return true;\r\n }\r\n /**\r\n * Clear all xyz data, but leave capacity unchanged.\r\n */\r\n public clear() {\r\n this._xyzInUse = 0;\r\n }\r\n /**\r\n * Get a point by index, strongly typed as a Point3d. This is unchecked. Use getPoint3dAtCheckedPointIndex to have validity test.\r\n * @param pointIndex index to access\r\n * @param result optional result\r\n */\r\n public getPoint3dAtUncheckedPointIndex(pointIndex: number, result?: Point3d): Point3d {\r\n const index = 3 * pointIndex;\r\n return Point3d.create(this._data[index], this._data[index + 1], this._data[index + 2], result);\r\n }\r\n\r\n /**\r\n * Get a point by index, strongly typed as a Point2d. This is unchecked. Use getPoint2dAtCheckedPointIndex to have validity test.\r\n * @param pointIndex index to access\r\n * @param result optional result\r\n */\r\n public getPoint2dAtUncheckedPointIndex(pointIndex: number, result?: Point2d): Point2d {\r\n const index = 3 * pointIndex;\r\n return Point2d.create(this._data[index], this._data[index + 1], result);\r\n }\r\n\r\n /** copy xyz into strongly typed Point3d */\r\n public getPoint3dAtCheckedPointIndex(pointIndex: number, result?: Point3d): Point3d | undefined {\r\n if (this.isIndexValid(pointIndex)) {\r\n const index = 3 * pointIndex;\r\n return Point3d.create(this._data[index], this._data[index + 1], this._data[index + 2], result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** access x of indexed point */\r\n public getXAtUncheckedPointIndex(pointIndex: number): number {\r\n const index = 3 * pointIndex;\r\n return this._data[index];\r\n }\r\n\r\n /** access y of indexed point */\r\n public getYAtUncheckedPointIndex(pointIndex: number): number {\r\n const index = 3 * pointIndex;\r\n return this._data[index + 1];\r\n }\r\n\r\n /** access y of indexed point */\r\n public getZAtUncheckedPointIndex(pointIndex: number): number {\r\n const index = 3 * pointIndex;\r\n return this._data[index + 2];\r\n }\r\n\r\n /** copy xy into strongly typed Point2d */\r\n public getPoint2dAtCheckedPointIndex(pointIndex: number, result?: Point2d): Point2d | undefined {\r\n if (this.isIndexValid(pointIndex)) {\r\n const index = 3 * pointIndex;\r\n return Point2d.create(this._data[index], this._data[index + 1], result);\r\n }\r\n return undefined;\r\n }\r\n /** copy xyz into strongly typed Vector3d */\r\n public getVector3dAtCheckedVectorIndex(vectorIndex: number, result?: Vector3d): Vector3d | undefined {\r\n if (this.isIndexValid(vectorIndex)) {\r\n const index = 3 * vectorIndex;\r\n return Vector3d.create(this._data[index], this._data[index + 1], this._data[index + 2], result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Read coordinates from source array, place them at index within this array.\r\n * @param destIndex point index where coordinates are to be placed in this array\r\n * @param source source array\r\n * @param sourceIndex point index in source array\r\n * @returns true if destIndex and sourceIndex are both valid.\r\n */\r\n public transferFromGrowableXYZArray(destIndex: number, source: GrowableXYZArray, sourceIndex: number): boolean {\r\n if (this.isIndexValid(destIndex) && source.isIndexValid(sourceIndex)) {\r\n const i = destIndex * 3;\r\n const j = sourceIndex * 3;\r\n this._data[i] = source._data[j];\r\n this._data[i + 1] = source._data[j + 1];\r\n this._data[i + 2] = source._data[j + 2];\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * push coordinates from the source array to the end of this array.\r\n * @param source source array\r\n * @param sourceIndex xyz index within the source. If undefined, entire source is pushed.\r\n * @returns number of points pushed.\r\n */\r\n public pushFromGrowableXYZArray(source: GrowableXYZArray, sourceIndex?: number): number {\r\n // full array push . . .\r\n if (sourceIndex === undefined) {\r\n const numXYZAdd = source.length;\r\n this.ensureCapacity(this.length + numXYZAdd, false);\r\n this.copyData(source._data, numXYZAdd, this.length);\r\n this._xyzInUse += numXYZAdd;\r\n return numXYZAdd;\r\n }\r\n // single point push . . .\r\n if (source.isIndexValid(sourceIndex)) {\r\n const j = sourceIndex * 3;\r\n this.pushXYZ(source._data[j], source._data[j + 1], source._data[j + 2]);\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Set the coordinates of a single point.\r\n * @param pointIndex index of point to set\r\n * @param value coordinates to set\r\n */\r\n public setAtCheckedPointIndex(pointIndex: number, value: XYAndZ): boolean {\r\n if (!this.isIndexValid(pointIndex))\r\n return false;\r\n let index = pointIndex * 3;\r\n this._data[index++] = value.x;\r\n this._data[index++] = value.y;\r\n this._data[index] = value.z;\r\n return true;\r\n }\r\n /**\r\n * Set the coordinates of a single point given as coordinates\r\n * @param pointIndex index of point to set\r\n * @param x x coordinate\r\n * @param y y coordinate\r\n * @param z z coordinate\r\n */\r\n public setXYZAtCheckedPointIndex(pointIndex: number, x: number, y: number, z: number): boolean {\r\n if (!this.isIndexValid(pointIndex))\r\n return false;\r\n let index = pointIndex * 3;\r\n this._data[index++] = x;\r\n this._data[index++] = y;\r\n this._data[index] = z;\r\n return true;\r\n }\r\n\r\n /**\r\n * Copy all points into a simple array of Point3d\r\n */\r\n public getPoint3dArray(): Point3d[] {\r\n const n = 3 * this._xyzInUse;\r\n const result = [];\r\n const data = this._data;\r\n for (let i = 0; i < n; i += 3)\r\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\r\n return result;\r\n }\r\n /** multiply each point by the transform, replace values. */\r\n public static multiplyTransformInPlace(transform: Transform, data: GrowableXYZArray[] | GrowableXYZArray) {\r\n if (Array.isArray(data)) {\r\n for (const d of data)\r\n d.multiplyTransformInPlace(transform);\r\n } else {\r\n data.multiplyTransformInPlace(transform);\r\n }\r\n }\r\n\r\n /** multiply each point by the transform, replace values. */\r\n public multiplyTransformInPlace(transform: Transform) {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n const coffs = transform.matrix.coffs;\r\n const origin = transform.origin;\r\n const x0 = origin.x;\r\n const y0 = origin.y;\r\n const z0 = origin.z;\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n for (let i = 0; i + 2 <= nDouble; i += 3) {\r\n x = data[i];\r\n y = data[i + 1];\r\n z = data[i + 2];\r\n data[i] = coffs[0] * x + coffs[1] * y + coffs[2] * z + x0;\r\n data[i + 1] = coffs[3] * x + coffs[4] * y + coffs[5] * z + y0;\r\n data[i + 2] = coffs[6] * x + coffs[7] * y + coffs[8] * z + z0;\r\n }\r\n }\r\n\r\n /** reverse the order of points. */\r\n public reverseInPlace() {\r\n const n = this.length;\r\n let j0, j1;\r\n let a;\r\n const data = this._data;\r\n for (let i0 = 0, i1 = n - 1; i0 < i1; i0++, i1--) {\r\n j0 = 3 * i0;\r\n j1 = 3 * i1;\r\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\r\n j0++;\r\n j1++;\r\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\r\n j0++;\r\n j1++;\r\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\r\n }\r\n }\r\n\r\n /** multiply each xyz (as a vector) by matrix, replace values. */\r\n public multiplyMatrix3dInPlace(matrix: Matrix3d) {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n const coffs = matrix.coffs;\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n for (let i = 0; i + 2 <= nDouble; i += 3) {\r\n x = data[i];\r\n y = data[i + 1];\r\n z = data[i + 2];\r\n data[i] = coffs[0] * x + coffs[1] * y + coffs[2] * z;\r\n data[i + 1] = coffs[3] * x + coffs[4] * y + coffs[5] * z;\r\n data[i + 2] = coffs[6] * x + coffs[7] * y + coffs[8] * z;\r\n }\r\n }\r\n\r\n /** multiply each xyz (as a vector) by matrix inverse transpose, renormalize the vector, replace values.\r\n * * This is the way to apply a matrix (possibly with skew and scale) to a surface normal, and\r\n * have it end up perpendicular to the transformed in-surface vectors.\r\n * * Return false if matrix is not invertible or if any normalization fails.\r\n */\r\n public multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(matrix: Matrix3d): boolean {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n if (!matrix.computeCachedInverse(true))\r\n return false;\r\n const coffs = matrix.inverseCoffs!;\r\n const tol = Geometry.smallFloatingPoint;\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n let x1;\r\n let y1;\r\n let z1;\r\n let q;\r\n let a;\r\n let numFail = 0;\r\n for (let i = 0; i + 2 <= nDouble; i += 3) {\r\n x = data[i];\r\n y = data[i + 1];\r\n z = data[i + 2];\r\n x1 = coffs[0] * x + coffs[3] * y + coffs[6] * z;\r\n y1 = coffs[1] * x + coffs[4] * y + coffs[7] * z;\r\n z1 = coffs[2] * x + coffs[5] * y + coffs[8] * z;\r\n a = x1 * x1 + y1 * y1 + z1 * z1;\r\n if (a < tol) {\r\n // put the originals back ..\r\n x1 = x; y1 = y; z1 = z;\r\n numFail++;\r\n } else if (Math.abs(a - 1.0) > tol) {\r\n q = 1.0 / Math.sqrt(a);\r\n x1 *= q;\r\n y1 *= q;\r\n z1 *= q;\r\n } // else -- q is near 1, no need to do the division !!\r\n data[i] = x1;\r\n data[i + 1] = y1;\r\n data[i + 2] = z1;\r\n }\r\n return numFail === 0;\r\n }\r\n\r\n /** multiply each xyz (as a point) by a homogeneous matrix and update as the normalized point\r\n *\r\n */\r\n public multiplyMatrix4dAndQuietRenormalizeMatrix4d(matrix: Matrix4d) {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n const xyz1 = Point3d.create();\r\n for (let i = 0; i + 2 <= nDouble; i += 3) {\r\n matrix.multiplyXYZWQuietRenormalize(data[i], data[i + 1], data[i + 2], 1.0, xyz1);\r\n data[i] = xyz1.x;\r\n data[i + 1] = xyz1.y;\r\n data[i + 2] = xyz1.z;\r\n }\r\n }\r\n\r\n /** multiply each point by the transform, replace values. */\r\n public tryTransformInverseInPlace(transform: Transform): boolean {\r\n const data = this._data;\r\n const nDouble = this.float64Length;\r\n const matrix = transform.matrix;\r\n matrix.computeCachedInverse(true);\r\n const coffs = matrix.inverseCoffs;\r\n if (!coffs)\r\n return false;\r\n const origin = transform.origin;\r\n const x0 = origin.x;\r\n const y0 = origin.y;\r\n const z0 = origin.z;\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n for (let i = 0; i + 2 < nDouble; i += 3) {\r\n x = data[i] - x0;\r\n y = data[i + 1] - y0;\r\n z = data[i + 2] - z0;\r\n data[i] = coffs[0] * x + coffs[1] * y + coffs[2] * z;\r\n data[i + 1] = coffs[3] * x + coffs[4] * y + coffs[5] * z;\r\n data[i + 2] = coffs[6] * x + coffs[7] * y + coffs[8] * z;\r\n }\r\n return true;\r\n }\r\n /** Extend `range` to extend by all points. */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const numDouble = this.float64Length;\r\n const data = this._data;\r\n if (transform) {\r\n for (let i = 0; i + 2 < numDouble; i += 3)\r\n rangeToExtend.extendTransformedXYZ(transform, data[i], data[i + 1], data[i + 2]);\r\n } else {\r\n for (let i = 0; i + 2 < numDouble; i += 3)\r\n rangeToExtend.extendXYZ(data[i], data[i + 1], data[i + 2]);\r\n\r\n }\r\n }\r\n /** get range of points. */\r\n public override getRange(transform?: Transform): Range3d {\r\n const range = Range3d.createNull();\r\n this.extendRange(range, transform);\r\n return range;\r\n }\r\n\r\n /** Initialize `range` with coordinates in this array. */\r\n public setRange(range: Range3d, transform?: Transform) {\r\n range.setNull();\r\n this.extendRange(range, transform);\r\n }\r\n\r\n /** Sum the lengths of segments between points. */\r\n public sumLengths(): number {\r\n let sum = 0.0;\r\n const n = 3 * (this._xyzInUse - 1); // Length already takes into account what specifically is in use\r\n const data = this._data;\r\n for (let i = 0; i < n; i += 3) sum += Geometry.hypotenuseXYZ(\r\n data[i + 3] - data[i],\r\n data[i + 4] - data[i + 1],\r\n data[i + 5] - data[i + 2]);\r\n return sum;\r\n }\r\n /**\r\n * Multiply each x,y,z by the scale factor.\r\n * @param factor\r\n */\r\n public scaleInPlace(factor: number) {\r\n if (this._data) {\r\n const numFloat = this.float64Length;\r\n for (let i = 0; i < numFloat; i++)\r\n this._data[i] = this._data[i] * factor;\r\n }\r\n }\r\n /** test if all points are within tolerance of a plane. */\r\n public isCloseToPlane(plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n const numCoordinate = 3 * this._xyzInUse;\r\n const data = this._data;\r\n for (let i = 0; i < numCoordinate; i += 3)\r\n if (Math.abs(plane.altitudeXYZ(data[i], data[i + 1], data[i + 2])) > tolerance)\r\n return false;\r\n return true;\r\n }\r\n /**\r\n * * If not already closed, push a copy of the first point.\r\n * * If already closed within tolerance, force exact copy\r\n * * otherwise leave unchanged.\r\n */\r\n public forceClosure(tolerance: number = Geometry.smallMetricDistance) {\r\n const d = this.distanceIndexIndex(0, this.length - 1);\r\n // leave the empty array alone.\r\n // Note that singleton will generate 0 distance and do nothing.\r\n if (d === undefined) {\r\n } else if (d > tolerance)\r\n this.pushXYZ(this._data[0], this._data[1], this._data[2]);\r\n else if (d > 0) {\r\n // overwrite last point with exact exact first point\r\n const i0 = this._data.length - 3;\r\n for (let i = 0; i < 3; i++)\r\n this._data[i0 + i] = this._data[i];\r\n }\r\n }\r\n\r\n /** Compute a point at fractional coordinate between points i and j */\r\n public interpolate(i: number, fraction: number, j: number, result?: Point3d): Point3d | undefined {\r\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\r\n const fraction0 = 1.0 - fraction;\r\n const data = this._data;\r\n i = 3 * i;\r\n j = 3 * j;\r\n return Point3d.create(\r\n fraction0 * data[i] + fraction * data[j],\r\n fraction0 * data[i + 1] + fraction * data[j + 1],\r\n fraction0 * data[i + 2] + fraction * data[j + 2], result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * * Compute a point at fractional coordinate between points i and j of source\r\n * * push onto this array.\r\n */\r\n public pushInterpolatedFromGrowableXYZArray(source: GrowableXYZArray, i: number, fraction: number, j: number) {\r\n if (source.isIndexValid(i) && source.isIndexValid(j)) {\r\n const fraction0 = 1.0 - fraction;\r\n const data = source._data;\r\n i = 3 * i;\r\n j = 3 * j;\r\n this.pushXYZ(\r\n fraction0 * data[i] + fraction * data[j],\r\n fraction0 * data[i + 1] + fraction * data[j + 1],\r\n fraction0 * data[i + 2] + fraction * data[j + 2]);\r\n }\r\n }\r\n\r\n /** Sum the signed areas of the projection to xy plane */\r\n public areaXY(): number {\r\n let area = 0.0;\r\n const n = 3 * this._xyzInUse; // float count !!\r\n if (n > 6) {\r\n const x0 = this._data[n - 3];\r\n const y0 = this._data[n - 2];\r\n let dx1 = this._data[0] - x0;\r\n let dy1 = this._data[1] - y0;\r\n let dx2 = 0;\r\n let dy2 = 0;\r\n for (let i = 3; i < n; i += 3, dx1 = dx2, dy1 = dy2) {\r\n dx2 = this._data[i] - x0;\r\n dy2 = this._data[i + 1] - y0;\r\n area += Geometry.crossProductXYXY(dx1, dy1, dx2, dy2);\r\n }\r\n }\r\n return 0.5 * area;\r\n }\r\n\r\n /** Compute a vector from index origin i to indexed target j */\r\n public vectorIndexIndex(i: number, j: number, result?: Vector3d): Vector3d | undefined {\r\n if (!this.isIndexValid(i) || !this.isIndexValid(j))\r\n return undefined;\r\n const data = this._data;\r\n i = 3 * i;\r\n j = 3 * j;\r\n return Vector3d.create(\r\n data[j] - data[i],\r\n data[j + 1] - data[i + 1],\r\n data[j + 2] - data[i + 2], result);\r\n }\r\n\r\n /** Compute a vector from origin to indexed target j */\r\n public vectorXYAndZIndex(origin: XYAndZ, j: number, result?: Vector3d): Vector3d | undefined {\r\n if (this.isIndexValid(j)) {\r\n const data = this._data;\r\n j = 3 * j;\r\n return Vector3d.create(\r\n data[j] - origin.x,\r\n data[j + 1] - origin.y,\r\n data[j + 2] - origin.z, result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Compute the cross product of vectors from from indexed origin to indexed targets i and j */\r\n public crossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number, result?: Vector3d): Vector3d | undefined {\r\n if (this.isIndexValid(originIndex) && this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\r\n const i = originIndex * 3;\r\n const j = targetAIndex * 3;\r\n const k = targetBIndex * 3;\r\n const data = this._data;\r\n return Geometry.crossProductXYZXYZ(\r\n data[j] - data[i], data[j + 1] - data[i + 1], data[j + 2] - data[i + 2],\r\n data[k] - data[i], data[k + 1] - data[i + 1], data[k + 2] - data[i + 2],\r\n result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Compute the dot product of pointIndex with [x,y,z] */\r\n public evaluateUncheckedIndexDotProductXYZ(pointIndex: number, x: number, y: number, z: number): number {\r\n const i = pointIndex * 3;\r\n const data = this._data;\r\n return data[i] * x + data[i + 1] * y + data[i + 2] * z;\r\n }\r\n /** Compute the dot product of pointIndex with [x,y,z] */\r\n public evaluateUncheckedIndexPlaneAltitude(pointIndex: number, plane: PlaneAltitudeEvaluator): number {\r\n const i = pointIndex * 3;\r\n const data = this._data;\r\n return plane.altitudeXYZ(data[i], data[i + 1], data[i + 2]);\r\n }\r\n\r\n /**\r\n * * compute the cross product from indexed origin t indexed targets targetAIndex and targetB index.\r\n * * accumulate it to the result.\r\n */\r\n public accumulateCrossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number, result: Vector3d): void {\r\n if (this.isIndexValid(originIndex) && this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\r\n const i = originIndex * 3;\r\n const j = targetAIndex * 3;\r\n const k = targetBIndex * 3;\r\n const data = this._data;\r\n result.addCrossProductToTargetsInPlace(\r\n data[i], data[i + 1], data[i + 2],\r\n data[j], data[j + 1], data[j + 2],\r\n data[k], data[k + 1], data[k + 2]);\r\n }\r\n }\r\n\r\n /**\r\n * * compute the cross product from indexed origin t indexed targets targetAIndex and targetB index.\r\n * * accumulate it to the result.\r\n */\r\n public accumulateScaledXYZ(index: number, scale: number, sum: Point3d): void {\r\n if (this.isIndexValid(index)) {\r\n const i = index * 3;\r\n const data = this._data;\r\n sum.x += scale * data[i];\r\n sum.y += scale * data[i + 1];\r\n sum.z += scale * data[i + 2];\r\n }\r\n }\r\n\r\n /** Compute the cross product of vectors from from origin to indexed targets i and j */\r\n public crossProductXYAndZIndexIndex(origin: XYAndZ, targetAIndex: number, targetBIndex: number, result?: Vector3d): Vector3d | undefined {\r\n if (this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\r\n const j = targetAIndex * 3;\r\n const k = targetBIndex * 3;\r\n const data = this._data;\r\n return Geometry.crossProductXYZXYZ(\r\n data[j] - origin.x, data[j + 1] - origin.y, data[j + 2] - origin.z,\r\n data[k] - origin.x, data[k + 1] - origin.y, data[k + 2] - origin.z,\r\n result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Return the distance between an array point and the input point. */\r\n public distanceIndexToPoint(i: number, spacePoint: XYAndZ): number | undefined {\r\n if (this.isIndexValid(i)) {\r\n const i0 = 3 * i;\r\n return Geometry.hypotenuseXYZ(\r\n spacePoint.x - this._data[i0],\r\n spacePoint.y - this._data[i0 + 1],\r\n spacePoint.z - this._data[i0 + 2]);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Return distance squared between indicated points.\r\n * @param i first point index\r\n * @param j second point index\r\n */\r\n public distanceSquaredIndexIndex(i: number, j: number): number | undefined {\r\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\r\n const i0 = 3 * i;\r\n const j0 = 3 * j;\r\n return Geometry.hypotenuseSquaredXYZ(\r\n this._data[j0] - this._data[i0],\r\n this._data[j0 + 1] - this._data[i0 + 1],\r\n this._data[j0 + 2] - this._data[i0 + 2]);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Return distance between indicated points.\r\n * @param i first point index\r\n * @param j second point index\r\n */\r\n public distanceIndexIndex(i: number, j: number): number | undefined {\r\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\r\n const i0 = 3 * i;\r\n const j0 = 3 * j;\r\n return Geometry.hypotenuseXYZ(\r\n this._data[j0] - this._data[i0],\r\n this._data[j0 + 1] - this._data[i0 + 1],\r\n this._data[j0 + 2] - this._data[i0 + 2]);\r\n }\r\n return undefined;\r\n }\r\n /** Return the distance between points in distinct arrays. */\r\n public static distanceBetweenPointsIn2Arrays(arrayA: GrowableXYZArray, i: number, arrayB: GrowableXYZArray, j: number): number | undefined {\r\n if (arrayA.isIndexValid(i) && arrayB.isIndexValid(j)) {\r\n const i0 = 3 * i;\r\n const j0 = 3 * j;\r\n return Geometry.hypotenuseXYZ(\r\n arrayB._data[j0] - arrayA._data[i0],\r\n arrayB._data[j0 + 1] - arrayA._data[i0 + 1],\r\n arrayB._data[j0 + 2] - arrayA._data[i0 + 2]);\r\n }\r\n return undefined;\r\n }\r\n /** test for near equality between two `GrowableXYZArray`. */\r\n public static isAlmostEqual(dataA: GrowableXYZArray | undefined, dataB: GrowableXYZArray | undefined): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA.getPoint3dAtUncheckedPointIndex(i).isAlmostEqual(dataB.getPoint3dAtUncheckedPointIndex(i)))\r\n return false;\r\n return true;\r\n }\r\n // if both are null it is equal, otherwise unequal\r\n return (!dataA && !dataB);\r\n }\r\n\r\n /** Return an array of block indices sorted per compareLexicalBlock function */\r\n public sortIndicesLexical(): Uint32Array {\r\n const n = this._xyzInUse;\r\n // let numCompare = 0;\r\n const result = new Uint32Array(n);\r\n for (let i = 0; i < n; i++) result[i] = i;\r\n result.sort(\r\n (blockIndexA: number, blockIndexB: number) => {\r\n // numCompare++;\r\n return this.compareLexicalBlock(blockIndexA, blockIndexB);\r\n });\r\n // console.log (n, numCompare);\r\n return result;\r\n }\r\n\r\n /** compare two blocks in simple lexical order. */\r\n public compareLexicalBlock(ia: number, ib: number): number {\r\n let ax = 0;\r\n let bx = 0;\r\n for (let i = 0; i < 3; i++) {\r\n ax = this._data[ia * 3 + i];\r\n bx = this._data[ib * 3 + i];\r\n if (ax > bx) return 1;\r\n if (ax < bx) return -1;\r\n }\r\n return ia - ib; // so original order is maintained among duplicates !!!!\r\n }\r\n\r\n /** Access a single double at offset within a block. This has no index checking. */\r\n public component(pointIndex: number, componentIndex: number): number {\r\n return this._data[3 * pointIndex + componentIndex];\r\n }\r\n /**\r\n * add points at regular steps from `other`\r\n * @param source\r\n * @param pointIndex0\r\n * @param step\r\n * @param numAdd\r\n */\r\n public addSteppedPoints(other: GrowableXYZArray, pointIndex0: number, step: number, numAdd: number) {\r\n const dataB = other._data;\r\n let b0 = pointIndex0 * 3;\r\n const nb = other.length * 3;\r\n let numAdded = 0;\r\n this.ensureCapacity(this._xyzInUse + numAdd, false);\r\n while (b0 >= 0 && b0 + 2 < nb && numAdded < numAdd) {\r\n this.pushXYZ(dataB[b0], dataB[b0 + 1], dataB[b0 + 2]);\r\n b0 += step * 3;\r\n numAdded++;\r\n }\r\n }\r\n\r\n /**\r\n * find the min and max distance between corresponding indexed points. Excess points are ignored.\r\n * @param arrayA first array\r\n * @param arrayB second array\r\n */\r\n public static distanceRangeBetweenCorrespondingPoints(arrayA: GrowableXYZArray, arrayB: GrowableXYZArray): Range1d {\r\n const dataA = arrayA._data;\r\n const dataB = arrayB._data;\r\n const n = Math.min(arrayA.length, arrayB.length);\r\n let i = 0;\r\n let k0;\r\n const range = Range1d.createNull();\r\n while (i < n) {\r\n k0 = 3 * i;\r\n range.extendX(Geometry.hypotenuseXYZ(dataA[k0] - dataB[k0], dataA[k0 + 1] - dataB[k0 + 1], dataA[k0 + 2] - dataB[k0 + 2]));\r\n i++;\r\n }\r\n return range;\r\n }\r\n /**\r\n * remove trailing point(s) within tolerance of the start point.\r\n * @param points\r\n * @param tolerance\r\n */\r\n public static removeClosure(points: IndexedReadWriteXYZCollection, tolerance: number = Geometry.smallMetricDistance) {\r\n while (points.length > 1 && points.distanceIndexIndex(0, points.length - 1)! < tolerance)\r\n points.pop();\r\n }\r\n /**\r\n * Compute frame for a triangle formed by three (unchecked!) points identified by index.\r\n * * z direction of frame is 001.\r\n * * Transform axes from origin to targetA and targetB\r\n * * in local coordinates (u,v,w) the xy interior of the triangle is `u>=0, v>= 0, w>= 0, u+v+w<1`\r\n * * Return undefined if transform is not invertible, e.g. if points are in a vertical plane.\r\n */\r\n public fillLocalXYTriangleFrame(originIndex: number, targetAIndex: number, targetBIndex: number, result?: Transform): Transform | undefined {\r\n if (this.isIndexValid(originIndex) && this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\r\n let i0 = originIndex * 3;\r\n const data = this._data;\r\n const ax = data[i0++];\r\n const ay = data[i0++];\r\n const az = data[i0++];\r\n i0 = targetAIndex * 3;\r\n const ux = data[i0++] - ax;\r\n const uy = data[i0++] - ay;\r\n const uz = data[i0++] - az;\r\n i0 = targetBIndex * 3;\r\n const vx = data[i0++] - ax;\r\n const vy = data[i0++] - ay;\r\n const vz = data[i0++] - az;\r\n result = Transform.createRowValues(\r\n ux, vx, 0, ax,\r\n uy, vy, 0, ay,\r\n uz, vz, 1, az, result);\r\n return result.computeCachedInverse() ? result : undefined;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Pass the (x,y,z) of each point to a function which returns a replacement for one of the 3 components.\r\n * @param componentIndex Index (0,1,2) of component to be replaced.\r\n * @param func function to be called as `func(x,y,z)`, returning a replacement value for componentIndex\r\n */\r\n public mapComponent(componentIndex: 0 | 1 | 2, func: (x: number, y: number, z: number) => number) {\r\n const n = this._data.length;\r\n let q;\r\n for (let i = 0; i + 2 < n; i += 3) {\r\n q = func(this._data[i], this._data[i + 1], this._data[i + 2]);\r\n this._data[i + componentIndex] = q;\r\n }\r\n }\r\n}\r\n"]}
@@ -172,6 +172,10 @@ export declare abstract class IndexedXYZCollection {
172
172
  get points(): Iterable<Point3d>;
173
173
  /** convert to Point3d[] */
174
174
  getArray(): Point3d[];
175
+ /** Return the first point, or undefined if the array is empty. */
176
+ front(result?: Point3d): Point3d | undefined;
177
+ /** Return the last point, or undefined if the array is empty. */
178
+ back(result?: Point3d): Point3d | undefined;
175
179
  }
176
180
  /**
177
181
  * abstract base class extends IndexedXYZCollection, adding methods to push, peek, and pop, and rewrite.
@@ -189,10 +193,6 @@ export declare abstract class IndexedReadWriteXYZCollection extends IndexedXYZCo
189
193
  * @param z z coordinate
190
194
  */
191
195
  abstract pushXYZ(x?: number, y?: number, z?: number): void;
192
- /** extract the final point */
193
- abstract back(result?: Point3d): Point3d | undefined;
194
- /** extract the first point */
195
- abstract front(result?: Point3d): Point3d | undefined;
196
196
  /** remove the final point. */
197
197
  abstract pop(): void;
198
198
  /** clear all entries */