@itwin/core-geometry 4.6.0-dev.8 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/lib/cjs/Constant.js +1 -1
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.d.ts.map +1 -1
  5. package/lib/cjs/Geometry.js +7 -6
  6. package/lib/cjs/Geometry.js.map +1 -1
  7. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurveOps.js +1 -1
  12. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  13. package/lib/cjs/bspline/BSplineSurface.js +4 -4
  14. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  15. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  16. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  17. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  18. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  19. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  20. package/lib/cjs/bspline/KnotVector.js +2 -2
  21. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  22. package/lib/cjs/clipping/AlternatingConvexClipTree.js +1 -1
  23. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  24. package/lib/cjs/clipping/BooleanClipFactory.d.ts +1 -1
  25. package/lib/cjs/clipping/BooleanClipFactory.d.ts.map +1 -1
  26. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  27. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  28. package/lib/cjs/clipping/ClipPlane.d.ts +1 -1
  29. package/lib/cjs/clipping/ClipPlane.js +2 -2
  30. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  31. package/lib/cjs/clipping/ClipPrimitive.js +1 -1
  32. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  33. package/lib/cjs/clipping/ClipUtils.js +4 -4
  34. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  35. package/lib/cjs/clipping/ClipVector.js +2 -2
  36. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  37. package/lib/cjs/clipping/ConvexClipPlaneSet.js +1 -1
  38. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  39. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -1
  40. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  41. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  42. package/lib/cjs/curve/Arc3d.js +2 -2
  43. package/lib/cjs/curve/Arc3d.js.map +1 -1
  44. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  45. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +1 -1
  46. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  47. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  48. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  49. package/lib/cjs/curve/CurveExtendMode.js +1 -1
  50. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  51. package/lib/cjs/curve/CurveFactory.js +1 -1
  52. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  53. package/lib/cjs/curve/CurveLocationDetail.js +3 -3
  54. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  55. package/lib/cjs/curve/CurveOps.js.map +1 -1
  56. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  57. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  58. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  59. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  60. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  61. package/lib/cjs/curve/LineString3d.js +1 -1
  62. package/lib/cjs/curve/LineString3d.js.map +1 -1
  63. package/lib/cjs/curve/Loop.js.map +1 -1
  64. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  65. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  66. package/lib/cjs/curve/Path.js.map +1 -1
  67. package/lib/cjs/curve/PointString3d.js.map +1 -1
  68. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  69. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  70. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  71. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  72. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  73. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  74. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  75. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  76. package/lib/cjs/curve/RegionOps.js +1 -1
  77. package/lib/cjs/curve/RegionOps.js.map +1 -1
  78. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +2 -2
  79. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  80. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  81. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  82. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  83. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  84. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  85. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  86. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  87. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +1 -1
  88. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  89. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +1 -1
  90. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  91. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +1 -1
  92. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  93. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  94. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  95. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  96. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  97. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  98. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +1 -1
  99. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  100. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  101. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  102. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  103. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  104. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  105. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +1 -1
  106. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  107. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  108. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  109. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  110. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  111. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  112. package/lib/cjs/geometry3d/Angle.js +1 -1
  113. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  114. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  115. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  116. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  117. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  118. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  119. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  120. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  121. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  122. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  123. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  124. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  125. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  126. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  127. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  128. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  129. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  130. package/lib/cjs/geometry3d/Matrix3d.js +2 -2
  131. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  132. package/lib/cjs/geometry3d/OrderedRotationAngles.js +1 -1
  133. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  134. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  135. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  136. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  137. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +2 -0
  138. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  139. package/lib/cjs/geometry3d/Point2dVector2d.js +5 -0
  140. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  141. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  142. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  143. package/lib/cjs/geometry3d/PointHelpers.js +2 -2
  144. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  145. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  146. package/lib/cjs/geometry3d/PolygonOps.js +3 -3
  147. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  148. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +1 -1
  149. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  150. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  151. package/lib/cjs/geometry3d/Range.d.ts +5 -0
  152. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  153. package/lib/cjs/geometry3d/Range.js +11 -1
  154. package/lib/cjs/geometry3d/Range.js.map +1 -1
  155. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  156. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  157. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  158. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  159. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  160. package/lib/cjs/geometry3d/Transform.d.ts +3 -3
  161. package/lib/cjs/geometry3d/Transform.js +3 -3
  162. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  163. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  164. package/lib/cjs/geometry3d/XYZProps.js +1 -1
  165. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  166. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  167. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  168. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  169. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  170. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  171. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  172. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  173. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  174. package/lib/cjs/numerics/ClusterableArray.js +1 -1
  175. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  176. package/lib/cjs/numerics/Complex.js.map +1 -1
  177. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  178. package/lib/cjs/numerics/Newton.js.map +1 -1
  179. package/lib/cjs/numerics/PascalCoefficients.js +1 -1
  180. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  181. package/lib/cjs/numerics/PolarData.js +2 -2
  182. package/lib/cjs/numerics/PolarData.js.map +1 -1
  183. package/lib/cjs/numerics/Polynomials.js +2 -2
  184. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  185. package/lib/cjs/numerics/Quadrature.js +1 -1
  186. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  187. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  188. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  189. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  190. package/lib/cjs/polyface/AuxData.js +1 -1
  191. package/lib/cjs/polyface/AuxData.js.map +1 -1
  192. package/lib/cjs/polyface/BoxTopology.js +1 -1
  193. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  194. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  195. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  196. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  197. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +1 -1
  198. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  199. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  200. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  201. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +10 -2
  202. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  203. package/lib/cjs/polyface/Polyface.d.ts +1 -1
  204. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  205. package/lib/cjs/polyface/Polyface.js.map +1 -1
  206. package/lib/cjs/polyface/PolyfaceBuilder.js +1 -1
  207. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  208. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  209. package/lib/cjs/polyface/PolyfaceClip.js +13 -3
  210. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  211. package/lib/cjs/polyface/PolyfaceData.js +1 -1
  212. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  213. package/lib/cjs/polyface/PolyfaceQuery.js +2 -2
  214. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  215. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  216. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  217. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  218. package/lib/cjs/polyface/TaggedNumericData.js +1 -1
  219. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  220. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  221. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  222. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  223. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  224. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  225. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +2 -2
  226. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  227. package/lib/cjs/polyface/multiclip/RangeSearch.js +1 -1
  228. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  229. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  230. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  231. package/lib/cjs/serialization/BGFBAccessors.js +1 -1
  232. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  233. package/lib/cjs/serialization/BGFBReader.js +1 -1
  234. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  235. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  236. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  237. package/lib/cjs/serialization/GeometrySamples.js +1 -1
  238. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  239. package/lib/cjs/serialization/IModelJsonSchema.js +1 -1
  240. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  241. package/lib/cjs/serialization/SerializationHelpers.js +1 -1
  242. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  243. package/lib/cjs/solid/Box.js.map +1 -1
  244. package/lib/cjs/solid/Cone.js.map +1 -1
  245. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  246. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  247. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  248. package/lib/cjs/solid/Sphere.js.map +1 -1
  249. package/lib/cjs/solid/SweepContour.js.map +1 -1
  250. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  251. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  252. package/lib/cjs/topology/Graph.js +2 -2
  253. package/lib/cjs/topology/Graph.js.map +1 -1
  254. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  255. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  256. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +1 -1
  257. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  258. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  259. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  260. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +1 -1
  261. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  262. package/lib/cjs/topology/HalfEdgePositionDetail.js +1 -1
  263. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  264. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  265. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  266. package/lib/cjs/topology/MaskManager.js.map +1 -1
  267. package/lib/cjs/topology/Merging.js.map +1 -1
  268. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  269. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  270. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  271. package/lib/cjs/topology/Triangulation.js +1 -1
  272. package/lib/cjs/topology/Triangulation.js.map +1 -1
  273. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  274. package/lib/esm/Constant.js +1 -2
  275. package/lib/esm/Constant.js.map +1 -1
  276. package/lib/esm/Geometry.d.ts.map +1 -1
  277. package/lib/esm/Geometry.js +2 -2
  278. package/lib/esm/Geometry.js.map +1 -1
  279. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  280. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  281. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  282. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  283. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  284. package/lib/esm/bspline/BSplineSurface.js +2 -2
  285. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  286. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  287. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  288. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  289. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  290. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  291. package/lib/esm/bspline/KnotVector.js +1 -2
  292. package/lib/esm/bspline/KnotVector.js.map +1 -1
  293. package/lib/esm/clipping/AlternatingConvexClipTree.js +1 -2
  294. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  295. package/lib/esm/clipping/BooleanClipFactory.d.ts +1 -1
  296. package/lib/esm/clipping/BooleanClipFactory.d.ts.map +1 -1
  297. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  298. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  299. package/lib/esm/clipping/ClipPlane.d.ts +1 -1
  300. package/lib/esm/clipping/ClipPlane.js +2 -3
  301. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  302. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  303. package/lib/esm/clipping/ClipUtils.js +1 -2
  304. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  305. package/lib/esm/clipping/ClipVector.js +1 -2
  306. package/lib/esm/clipping/ClipVector.js.map +1 -1
  307. package/lib/esm/clipping/ConvexClipPlaneSet.js +1 -2
  308. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  309. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  310. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  311. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  312. package/lib/esm/curve/Arc3d.js +2 -3
  313. package/lib/esm/curve/Arc3d.js.map +1 -1
  314. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  315. package/lib/esm/curve/CurveChainWithDistanceIndex.js +1 -2
  316. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  317. package/lib/esm/curve/CurveCollection.js.map +1 -1
  318. package/lib/esm/curve/CurveCurve.js.map +1 -1
  319. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  320. package/lib/esm/curve/CurveFactory.js.map +1 -1
  321. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  322. package/lib/esm/curve/CurveOps.js.map +1 -1
  323. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  324. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  325. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  326. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  327. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  328. package/lib/esm/curve/LineString3d.js +1 -2
  329. package/lib/esm/curve/LineString3d.js.map +1 -1
  330. package/lib/esm/curve/Loop.js.map +1 -1
  331. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  332. package/lib/esm/curve/ParityRegion.js.map +1 -1
  333. package/lib/esm/curve/Path.js.map +1 -1
  334. package/lib/esm/curve/PointString3d.js.map +1 -1
  335. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  336. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  337. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  338. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  339. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  340. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  341. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  342. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  343. package/lib/esm/curve/RegionOps.js.map +1 -1
  344. package/lib/esm/curve/RegionOpsClassificationSweeps.js +1 -2
  345. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  346. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  347. package/lib/esm/curve/UnionRegion.js.map +1 -1
  348. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  349. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  350. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  351. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  352. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  353. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +1 -2
  354. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  355. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +1 -2
  356. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  357. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +1 -2
  358. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  359. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  360. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  361. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  362. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  363. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  364. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +1 -2
  365. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  366. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  367. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  368. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  369. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  370. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  371. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +1 -2
  372. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  373. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  374. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  375. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  376. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  377. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  378. package/lib/esm/geometry3d/Angle.js +1 -2
  379. package/lib/esm/geometry3d/Angle.js.map +1 -1
  380. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  381. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  382. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  383. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  384. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  385. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  386. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  387. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  388. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  389. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  390. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  391. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  392. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  393. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  394. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  395. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  396. package/lib/esm/geometry3d/Matrix3d.js +1 -2
  397. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  398. package/lib/esm/geometry3d/OrderedRotationAngles.js +1 -2
  399. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  400. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  401. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  402. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  403. package/lib/esm/geometry3d/Point2dVector2d.d.ts +2 -0
  404. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  405. package/lib/esm/geometry3d/Point2dVector2d.js +5 -0
  406. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  407. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  408. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  409. package/lib/esm/geometry3d/PointHelpers.js +2 -4
  410. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  411. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  412. package/lib/esm/geometry3d/PolygonOps.js +3 -6
  413. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  414. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +1 -2
  415. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  416. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  417. package/lib/esm/geometry3d/Range.d.ts +5 -0
  418. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  419. package/lib/esm/geometry3d/Range.js +11 -2
  420. package/lib/esm/geometry3d/Range.js.map +1 -1
  421. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  422. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  423. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  424. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  425. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  426. package/lib/esm/geometry3d/Transform.d.ts +3 -3
  427. package/lib/esm/geometry3d/Transform.js +3 -3
  428. package/lib/esm/geometry3d/Transform.js.map +1 -1
  429. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  430. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  431. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  432. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  433. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  434. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  435. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  436. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  437. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  438. package/lib/esm/numerics/ClusterableArray.js +1 -2
  439. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  440. package/lib/esm/numerics/Complex.js.map +1 -1
  441. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  442. package/lib/esm/numerics/Newton.js.map +1 -1
  443. package/lib/esm/numerics/PascalCoefficients.js +1 -2
  444. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  445. package/lib/esm/numerics/PolarData.js +1 -2
  446. package/lib/esm/numerics/PolarData.js.map +1 -1
  447. package/lib/esm/numerics/Polynomials.js +2 -4
  448. package/lib/esm/numerics/Polynomials.js.map +1 -1
  449. package/lib/esm/numerics/Quadrature.js +1 -2
  450. package/lib/esm/numerics/Quadrature.js.map +1 -1
  451. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  452. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  453. package/lib/esm/numerics/UnionFind.js.map +1 -1
  454. package/lib/esm/polyface/AuxData.js.map +1 -1
  455. package/lib/esm/polyface/BoxTopology.js +1 -2
  456. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  457. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  458. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  459. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  460. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +1 -2
  461. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  462. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  463. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  464. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +10 -2
  465. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  466. package/lib/esm/polyface/Polyface.d.ts +1 -1
  467. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  468. package/lib/esm/polyface/Polyface.js.map +1 -1
  469. package/lib/esm/polyface/PolyfaceBuilder.js +1 -2
  470. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  471. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  472. package/lib/esm/polyface/PolyfaceClip.js +13 -3
  473. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  474. package/lib/esm/polyface/PolyfaceData.js +1 -2
  475. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  476. package/lib/esm/polyface/PolyfaceQuery.js +1 -2
  477. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  478. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  479. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  480. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  481. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  482. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  483. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  484. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  485. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  486. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  487. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +2 -2
  488. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  489. package/lib/esm/polyface/multiclip/RangeSearch.js +1 -2
  490. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  491. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  492. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  493. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  494. package/lib/esm/serialization/BGFBReader.js +1 -2
  495. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  496. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  497. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  498. package/lib/esm/serialization/GeometrySamples.js +1 -2
  499. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  500. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  501. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  502. package/lib/esm/solid/Box.js.map +1 -1
  503. package/lib/esm/solid/Cone.js.map +1 -1
  504. package/lib/esm/solid/LinearSweep.js.map +1 -1
  505. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  506. package/lib/esm/solid/RuledSweep.js.map +1 -1
  507. package/lib/esm/solid/Sphere.js.map +1 -1
  508. package/lib/esm/solid/SweepContour.js.map +1 -1
  509. package/lib/esm/solid/TorusPipe.js.map +1 -1
  510. package/lib/esm/topology/ChainMerge.js.map +1 -1
  511. package/lib/esm/topology/Graph.js +1 -2
  512. package/lib/esm/topology/Graph.js.map +1 -1
  513. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  514. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  515. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +1 -2
  516. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  517. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  518. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  519. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  520. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  521. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  522. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  523. package/lib/esm/topology/MaskManager.js.map +1 -1
  524. package/lib/esm/topology/Merging.js.map +1 -1
  525. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  526. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  527. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  528. package/lib/esm/topology/Triangulation.js +1 -2
  529. package/lib/esm/topology/Triangulation.js.map +1 -1
  530. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  531. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"FrustumAnimation.js","sourceRoot":"","sources":["../../../src/geometry3d/FrustumAnimation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Solid\n */\n\nimport { AxisOrder, Geometry } from \"../Geometry\";\nimport { Angle } from \"./Angle\";\nimport { Matrix3d } from \"./Matrix3d\";\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\nimport { Point3dArray } from \"./PointHelpers\";\nimport { Transform } from \"./Transform\";\n\n/**\n * context for constructing smooth motion a startFrustum and endFrustum.\n * The externally interesting calls are\n * * Create a context to shift corner0 to corner1, with the(NPC coordinate) point(fractionU, fractionV, fractionW) moving along its connecting segment, all other points rotating smoothly from the start orientation to end orientation:\n * `const context = SmoothTransformBetweenFrusta (cornerA, cornerB)`\n * * Get any intermediate 8 corners(at fraction) with `context.fractionToWorldCorners(fraction)`\n * * Frustum corners are ordered by \"x varies fastest, then y, then z\", hence (xyz) order on nondimensional space is\n * * (left lower rear) (000)\n * * (right lower rear) (100)\n * * (left upper rear) (010)\n * * (right upper rear) (100)\n * * (left lower front) (001)\n * * (right lower front) (101)\n * * (left upper front) (011)\n * * (right upper front) (101)\n * * which uses names\n * * (left,right) for horizontal (x)\n * * (bottom, top) for vertical (y)\n * * (rear, front) for back and front planes (z)\n * @public\n */\nexport class SmoothTransformBetweenFrusta {\n // raw frusta:\n private _localCornerA: Point3d[];\n private _localCornerB: Point3d[];\n\n private _localToWorldA: Transform;\n private _localToWorldB: Transform;\n /** (property accessor) rigid frame at start of motion */\n public get localToWorldA(): Transform { return this._localToWorldA; }\n /** (property accessor) rigid frame at end of motion */\n public get localToWorldB(): Transform { return this._localToWorldB; }\n private _rotationAxis: Vector3d;\n private _rotationAngle: Angle;\n\n /**\n * CAPTURE local corners, pickup and putdown frames, and rotation-around-vector data\n * @param localCornerA\n * @param localCornerB\n * @param localToWordA\n * @param localToWordB\n * @param rotationAxis\n * @param rotationAngle\n */\n private constructor(localToWorldA: Transform, localCornerA: Point3d[], localToWorldB: Transform, localCornerB: Point3d[], rotationAxis: Vector3d, rotationAngle: Angle) {\n this._localCornerA = localCornerA;\n this._localCornerB = localCornerB;\n this._localToWorldA = localToWorldA;\n this._localToWorldB = localToWorldB;\n this._rotationAxis = rotationAxis;\n this._rotationAngle = rotationAngle;\n }\n\n /**\n * Set up rotation data for smooth transition from 8 point frusta cornerA and cornerB\n * @param cornerA\n * @param cornerB\n */\n public static create(cornerA: Point3d[], cornerB: Point3d[], preferSimpleRotation: boolean = true): SmoothTransformBetweenFrusta | undefined {\n const localToWorldA = Point3dArray.evaluateTrilinearDerivativeTransform(cornerA, 0.5, 0.5, 0.5);\n const localToWorldB = Point3dArray.evaluateTrilinearDerivativeTransform(cornerB, 0.5, 0.5, 0.5);\n const rigidA = Transform.createOriginAndMatrix(localToWorldA.origin, Matrix3d.createRigidFromMatrix3d(localToWorldA.matrix, AxisOrder.ZXY));\n const rigidB = Transform.createOriginAndMatrix(localToWorldB.origin, Matrix3d.createRigidFromMatrix3d(localToWorldB.matrix, AxisOrder.ZXY));\n if (rigidA.matrix.computeCachedInverse(true) && rigidB.matrix.computeCachedInverse(true)) {\n const spinMatrix = rigidB.matrix.multiplyMatrixMatrixInverse(rigidA.matrix)!;\n const spinAxis = spinMatrix.getAxisAndAngleOfRotation();\n const localCornerA = rigidA.multiplyInversePoint3dArray(cornerA)!;\n const localCornerB = rigidB.multiplyInversePoint3dArray(cornerB)!;\n /** Is this a pure rotation -- i.e. no clip volume resizing for camera or clip changes */\n if (preferSimpleRotation && Point3dArray.isAlmostEqual(localCornerA, localCornerB) && !spinAxis.angle.isAlmostZero) {\n // world vectors\n const worldOriginShift = Vector3d.createStartEnd(localToWorldA.origin, localToWorldB.origin);\n const chordMidPoint = localToWorldA.getOrigin().interpolate(0.5, localToWorldB.getOrigin());\n const bisector = spinAxis.axis.unitCrossProduct(worldOriginShift);\n if (bisector) {\n const halfChordLength = 0.5 * worldOriginShift.magnitude();\n const alpha = Geometry.conditionalDivideFraction(halfChordLength, Math.tan(spinAxis.angle.radians * 0.5));\n if (alpha !== undefined) {\n const spinCenter = chordMidPoint.plusScaled(bisector, alpha);\n const rigidA1 = Transform.createOriginAndMatrix(spinCenter, rigidA.matrix);\n const rigidB1 = Transform.createOriginAndMatrix(spinCenter, rigidB.matrix);\n const localCornerA1 = rigidA1.multiplyInversePoint3dArray(cornerA)!;\n const localCornerB1 = rigidB1.multiplyInversePoint3dArray(cornerB)!;\n return new SmoothTransformBetweenFrusta(rigidA1, localCornerA1, rigidB1, localCornerB1,\n spinAxis.axis, spinAxis.angle);\n }\n }\n }\n return new SmoothTransformBetweenFrusta(rigidA, localCornerA, rigidB, localCornerB,\n spinAxis.axis, spinAxis.angle);\n }\n return undefined;\n }\n\n /** interpolate local corner coordinates at fractional move from m_localFrustum0 to m_localFrustum1 */\n public interpolateLocalCorners(fraction: number, result?: Point3d[]): Point3d[] {\n result = result || [];\n result.length = 0;\n const n = this._localCornerA.length;\n for (let i = 0; i < n; i++) {\n result.push(this._localCornerA[i].interpolate(fraction, this._localCornerB[i]));\n }\n return result;\n }\n /**\n * After initialization, call this for various intermediate fractions.\n * The returned corner points are in world coordinates \"between\" start and end positions.\n */\n public fractionToWorldCorners(fraction: number, result?: Point3d[]): Point3d[] {\n const corners = this.interpolateLocalCorners(fraction, result);\n const fractionalRotation = Matrix3d.createRotationAroundVector(this._rotationAxis,\n this._rotationAngle.cloneScaled(fraction))!;\n const axes0 = this._localToWorldA.matrix;\n const fractionalAxes = fractionalRotation.multiplyMatrixMatrix(axes0);\n const fractionalOrigin = this._localToWorldA.getOrigin().interpolate(fraction, this._localToWorldB.origin);\n const putdownFrame = Transform.createOriginAndMatrix(fractionalOrigin, fractionalAxes);\n putdownFrame.multiplyPoint3dArray(corners, corners);\n return corners;\n }\n}\n"]}
1
+ {"version":3,"file":"FrustumAnimation.js","sourceRoot":"","sources":["../../../src/geometry3d/FrustumAnimation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Solid\n */\n\nimport { AxisOrder, Geometry } from \"../Geometry\";\nimport { Angle } from \"./Angle\";\nimport { Matrix3d } from \"./Matrix3d\";\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\nimport { Point3dArray } from \"./PointHelpers\";\nimport { Transform } from \"./Transform\";\n\n/**\n * context for constructing smooth motion a startFrustum and endFrustum.\n * The externally interesting calls are\n * * Create a context to shift corner0 to corner1, with the(NPC coordinate) point(fractionU, fractionV, fractionW) moving along its connecting segment, all other points rotating smoothly from the start orientation to end orientation:\n * `const context = SmoothTransformBetweenFrusta (cornerA, cornerB)`\n * * Get any intermediate 8 corners(at fraction) with `context.fractionToWorldCorners(fraction)`\n * * Frustum corners are ordered by \"x varies fastest, then y, then z\", hence (xyz) order on nondimensional space is\n * * (left lower rear) (000)\n * * (right lower rear) (100)\n * * (left upper rear) (010)\n * * (right upper rear) (100)\n * * (left lower front) (001)\n * * (right lower front) (101)\n * * (left upper front) (011)\n * * (right upper front) (101)\n * * which uses names\n * * (left,right) for horizontal (x)\n * * (bottom, top) for vertical (y)\n * * (rear, front) for back and front planes (z)\n * @public\n */\nexport class SmoothTransformBetweenFrusta {\n // raw frusta:\n private _localCornerA: Point3d[];\n private _localCornerB: Point3d[];\n\n private _localToWorldA: Transform;\n private _localToWorldB: Transform;\n /** (property accessor) rigid frame at start of motion */\n public get localToWorldA(): Transform { return this._localToWorldA; }\n /** (property accessor) rigid frame at end of motion */\n public get localToWorldB(): Transform { return this._localToWorldB; }\n private _rotationAxis: Vector3d;\n private _rotationAngle: Angle;\n\n /**\n * CAPTURE local corners, pickup and putdown frames, and rotation-around-vector data\n * @param localCornerA\n * @param localCornerB\n * @param localToWordA\n * @param localToWordB\n * @param rotationAxis\n * @param rotationAngle\n */\n private constructor(localToWorldA: Transform, localCornerA: Point3d[], localToWorldB: Transform, localCornerB: Point3d[], rotationAxis: Vector3d, rotationAngle: Angle) {\n this._localCornerA = localCornerA;\n this._localCornerB = localCornerB;\n this._localToWorldA = localToWorldA;\n this._localToWorldB = localToWorldB;\n this._rotationAxis = rotationAxis;\n this._rotationAngle = rotationAngle;\n }\n\n /**\n * Set up rotation data for smooth transition from 8 point frusta cornerA and cornerB\n * @param cornerA\n * @param cornerB\n */\n public static create(cornerA: Point3d[], cornerB: Point3d[], preferSimpleRotation: boolean = true): SmoothTransformBetweenFrusta | undefined {\n const localToWorldA = Point3dArray.evaluateTrilinearDerivativeTransform(cornerA, 0.5, 0.5, 0.5);\n const localToWorldB = Point3dArray.evaluateTrilinearDerivativeTransform(cornerB, 0.5, 0.5, 0.5);\n const rigidA = Transform.createOriginAndMatrix(localToWorldA.origin, Matrix3d.createRigidFromMatrix3d(localToWorldA.matrix, AxisOrder.ZXY));\n const rigidB = Transform.createOriginAndMatrix(localToWorldB.origin, Matrix3d.createRigidFromMatrix3d(localToWorldB.matrix, AxisOrder.ZXY));\n if (rigidA.matrix.computeCachedInverse(true) && rigidB.matrix.computeCachedInverse(true)) {\n const spinMatrix = rigidB.matrix.multiplyMatrixMatrixInverse(rigidA.matrix)!;\n const spinAxis = spinMatrix.getAxisAndAngleOfRotation();\n const localCornerA = rigidA.multiplyInversePoint3dArray(cornerA)!;\n const localCornerB = rigidB.multiplyInversePoint3dArray(cornerB)!;\n /** Is this a pure rotation -- i.e. no clip volume resizing for camera or clip changes */\n if (preferSimpleRotation && Point3dArray.isAlmostEqual(localCornerA, localCornerB) && !spinAxis.angle.isAlmostZero) {\n // world vectors\n const worldOriginShift = Vector3d.createStartEnd(localToWorldA.origin, localToWorldB.origin);\n const chordMidPoint = localToWorldA.getOrigin().interpolate(0.5, localToWorldB.getOrigin());\n const bisector = spinAxis.axis.unitCrossProduct(worldOriginShift);\n if (bisector) {\n const halfChordLength = 0.5 * worldOriginShift.magnitude();\n const alpha = Geometry.conditionalDivideFraction(halfChordLength, Math.tan(spinAxis.angle.radians * 0.5));\n if (alpha !== undefined) {\n const spinCenter = chordMidPoint.plusScaled(bisector, alpha);\n const rigidA1 = Transform.createOriginAndMatrix(spinCenter, rigidA.matrix);\n const rigidB1 = Transform.createOriginAndMatrix(spinCenter, rigidB.matrix);\n const localCornerA1 = rigidA1.multiplyInversePoint3dArray(cornerA)!;\n const localCornerB1 = rigidB1.multiplyInversePoint3dArray(cornerB)!;\n return new SmoothTransformBetweenFrusta(rigidA1, localCornerA1, rigidB1, localCornerB1,\n spinAxis.axis, spinAxis.angle);\n }\n }\n }\n return new SmoothTransformBetweenFrusta(rigidA, localCornerA, rigidB, localCornerB,\n spinAxis.axis, spinAxis.angle);\n }\n return undefined;\n }\n\n /** interpolate local corner coordinates at fractional move from m_localFrustum0 to m_localFrustum1 */\n public interpolateLocalCorners(fraction: number, result?: Point3d[]): Point3d[] {\n result = result || [];\n result.length = 0;\n const n = this._localCornerA.length;\n for (let i = 0; i < n; i++) {\n result.push(this._localCornerA[i].interpolate(fraction, this._localCornerB[i]));\n }\n return result;\n }\n /**\n * After initialization, call this for various intermediate fractions.\n * The returned corner points are in world coordinates \"between\" start and end positions.\n */\n public fractionToWorldCorners(fraction: number, result?: Point3d[]): Point3d[] {\n const corners = this.interpolateLocalCorners(fraction, result);\n const fractionalRotation = Matrix3d.createRotationAroundVector(this._rotationAxis,\n this._rotationAngle.cloneScaled(fraction))!;\n const axes0 = this._localToWorldA.matrix;\n const fractionalAxes = fractionalRotation.multiplyMatrixMatrix(axes0);\n const fractionalOrigin = this._localToWorldA.getOrigin().interpolate(fraction, this._localToWorldB.origin);\n const putdownFrame = Transform.createOriginAndMatrix(fractionalOrigin, fractionalAxes);\n putdownFrame.multiplyPoint3dArray(corners, corners);\n return corners;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryHandler.js","sourceRoot":"","sources":["../../../src/geometry3d/GeometryHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n\nimport { AkimaCurve3d } from \"../bspline/AkimaCurve3d\";\nimport { BezierCurve3d } from \"../bspline/BezierCurve3d\";\nimport { BezierCurve3dH } from \"../bspline/BezierCurve3dH\";\nimport { BezierCurveBase } from \"../bspline/BezierCurveBase\";\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\nimport { BSplineSurface3d, BSplineSurface3dH } from \"../bspline/BSplineSurface\";\nimport { InterpolationCurve3d } from \"../bspline/InterpolationCurve3d\";\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\nimport { CurveChainWithDistanceIndex } from \"../curve/CurveChainWithDistanceIndex\";\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { Path } from \"../curve/Path\";\nimport { PointString3d } from \"../curve/PointString3d\";\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { IndexedPolyface } from \"../polyface/Polyface\";\nimport { Box } from \"../solid/Box\";\nimport { Cone } from \"../solid/Cone\";\nimport { LinearSweep } from \"../solid/LinearSweep\";\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\nimport { RuledSweep } from \"../solid/RuledSweep\";\nimport { Sphere } from \"../solid/Sphere\";\nimport { TorusPipe } from \"../solid/TorusPipe\";\nimport { Plane3dByOriginAndVectors } from \"./Plane3dByOriginAndVectors\";\nimport { Vector2d } from \"./Point2dVector2d\";\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\n\n/**\n * `GeometryHandler` defines the base abstract methods for double-dispatch geometry computation.\n * * User code that wants to handle one or all of the commonly known geometry types implements a handler class.\n * * User code that does not handle all types is most likely to start with `NullGeometryHandler`, which will provide\n * No-action implementations for all types.\n * @public\n */\nexport abstract class GeometryHandler {\n /** Handle strongly typed [[LineSegment3d]] */\n public abstract handleLineSegment3d(g: LineSegment3d): any;\n /** Handle strongly typed [[LineString3d]] */\n public abstract handleLineString3d(g: LineString3d): any;\n /** Handle strongly typed [[Arc3d]] */\n public abstract handleArc3d(g: Arc3d): any;\n /** Handle strongly typed [[CurveCollection]] */\n public handleCurveCollection(_g: CurveCollection): any { }\n /** Handle strongly typed [[BSplineCurve3d]] */\n public abstract handleBSplineCurve3d(g: BSplineCurve3d): any;\n /** Handle strongly typed [[InterpolationCurve3d]] */\n public abstract handleInterpolationCurve3d(g: InterpolationCurve3d): any;\n /** Handle strongly typed [[AkimaCurve3d]] */\n public abstract handleAkimaCurve3d(g: AkimaCurve3d): any;\n /** Handle strongly typed [[BSplineCurve3dH]] */\n public abstract handleBSplineCurve3dH(g: BSplineCurve3dH): any;\n /** Handle strongly typed [[BSplineSurface3d]] */\n public abstract handleBSplineSurface3d(g: BSplineSurface3d): any;\n /** Handle strongly typed [[CoordinateXYZ]] */\n public abstract handleCoordinateXYZ(g: CoordinateXYZ): any;\n /** Handle strongly typed [[BSplineSurface3dH]] */\n public abstract handleBSplineSurface3dH(g: BSplineSurface3dH): any;\n /** Handle strongly typed [[IndexedPolyface]] */\n public abstract handleIndexedPolyface(g: IndexedPolyface): any;\n /** handle strongly typed [[TransitionSpiral3d]] */\n public abstract handleTransitionSpiral(g: TransitionSpiral3d): any;\n /** Handle strongly typed [[Path]] (base class method calls [[handleCurveCollection]]) */\n public handlePath(g: Path): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[Loop]] (base class method calls [[handleCurveCollection]]) */\n public handleLoop(g: Loop): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[ParityRegion]] (base class method calls [[handleCurveCollection]]) */\n public handleParityRegion(g: ParityRegion): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[UnionRegion]] (base class method calls [[handleCurveCollection]]) */\n public handleUnionRegion(g: UnionRegion): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[BagOfCurves]] (base class method calls [[handleCurveCollection]]) */\n public handleBagOfCurves(g: BagOfCurves): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[CurveChainWithDistanceIndex]] (base class method calls [[handlePath]] or [[handleLoop]]) */\n public handleCurveChainWithDistanceIndex(g: CurveChainWithDistanceIndex): any {\n if (g.path instanceof Path)\n return this.handlePath(g.path);\n if (g.path instanceof Loop)\n return this.handleLoop(g.path);\n return this.handleCurveCollection(g.path);\n }\n /** Handle strongly typed Sphere */\n public abstract handleSphere(g: Sphere): any;\n /** Handle strongly typed Cone */\n public abstract handleCone(g: Cone): any;\n /** Handle strongly typed Box */\n public abstract handleBox(g: Box): any;\n /** Handle strongly typed TorusPipe */\n public abstract handleTorusPipe(g: TorusPipe): any;\n /** Handle strongly typed LinearSweep */\n public abstract handleLinearSweep(g: LinearSweep): any;\n /** Handle strongly typed RotationalSweep */\n public abstract handleRotationalSweep(g: RotationalSweep): any;\n /** Handle strongly typed RuledSweep */\n public abstract handleRuledSweep(g: RuledSweep): any;\n /** Handle strongly typed PointString3d */\n public abstract handlePointString3d(g: PointString3d): any;\n /** Handle strongly typed BezierCurve3d */\n public abstract handleBezierCurve3d(g: BezierCurve3d): any;\n /** Handle strongly typed BezierCurve3dH */\n public abstract handleBezierCurve3dH(g: BezierCurve3dH): any;\n}\n/**\n * `NullGeometryHandler` is a base class for dispatching various geometry types to application specific implementation\n * of some service.\n * To use:\n * * Derive a class from `NullGeometryHandler`\n * * Re-implement any or all of the specific `handleXXXX` methods\n * * Create a handler instance `myHandler`\n * * To send a `GeometryQuery` object `candidateGeometry` through the (fast) dispatch, invoke\n * `candidateGeometry.dispatchToHandler (myHandler).\n * * The appropriate method or methods will get called with a strongly typed `_g ` value.\n * @public\n */\nexport class NullGeometryHandler extends GeometryHandler {\n /** No-action implementation */\n public handleLineSegment3d(_g: LineSegment3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleLineString3d(_g: LineString3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleArc3d(_g: Arc3d): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleCurveCollection(_g: CurveCollection): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleCurveChainWithDistanceIndex(_g: CurveChainWithDistanceIndex): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineCurve3d(_g: BSplineCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleInterpolationCurve3d(_g: InterpolationCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleAkimaCurve3d(_g: AkimaCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineCurve3dH(_g: BSplineCurve3dH): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineSurface3d(_g: BSplineSurface3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleCoordinateXYZ(_g: CoordinateXYZ): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineSurface3dH(_g: BSplineSurface3dH): any {\n return undefined;\n }\n /** No-action implementation */\n public handleIndexedPolyface(_g: IndexedPolyface): any {\n return undefined;\n }\n /** No-action implementation */\n public handleTransitionSpiral(_g: TransitionSpiral3d): any {\n return undefined;\n }\n /** No-action implementation */\n public override handlePath(_g: Path): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleLoop(_g: Loop): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleParityRegion(_g: ParityRegion): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleUnionRegion(_g: UnionRegion): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleBagOfCurves(_g: BagOfCurves): any {\n return undefined;\n }\n /** No-action implementation */\n public handleSphere(_g: Sphere): any {\n return undefined;\n }\n /** No-action implementation */\n public handleCone(_g: Cone): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBox(_g: Box): any {\n return undefined;\n }\n /** No-action implementation */\n public handleTorusPipe(_g: TorusPipe): any {\n return undefined;\n }\n /** No-action implementation */\n public handleLinearSweep(_g: LinearSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handleRotationalSweep(_g: RotationalSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handleRuledSweep(_g: RuledSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handlePointString3d(_g: PointString3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBezierCurve3d(_g: BezierCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBezierCurve3dH(_g: BezierCurve3dH): any {\n return undefined;\n }\n}\n/**\n * Implement GeometryHandler methods, but override `handleCurveCollection` so that all methods\n * that operate on a [[CurveCollection]] recurse to their children.\n * @public\n */\nexport class RecurseToCurvesGeometryHandler extends GeometryHandler {\n /** No-action implementation */\n public handleLineSegment3d(_g: LineSegment3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleLineString3d(_g: LineString3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleArc3d(_g: Arc3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineCurve3d(_g: BSplineCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleInterpolationCurve3d(_g: InterpolationCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleAkimaCurve3d(_g: AkimaCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineCurve3dH(_g: BSplineCurve3dH): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineSurface3d(_g: BSplineSurface3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleCoordinateXYZ(_g: CoordinateXYZ): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineSurface3dH(_g: BSplineSurface3dH): any {\n return undefined;\n }\n /** No-action implementation */\n public handleIndexedPolyface(_g: IndexedPolyface): any {\n return undefined;\n }\n /** No-action implementation */\n public handleTransitionSpiral(_g: TransitionSpiral3d): any {\n return undefined;\n }\n /** Invoke `child.dispatchToGeometryHandler(this)` for each child in the array returned by the query `g.children` */\n public handleChildren(g: GeometryQuery): any {\n const children = g.children;\n if (children)\n for (const child of children) {\n child.dispatchToGeometryHandler(this);\n }\n }\n /** Recurse to children */\n public override handleCurveCollection(g: CurveCollection): any {\n return this.handleChildren(g);\n }\n /** No-action implementation */\n public handleSphere(_g: Sphere): any {\n return undefined;\n }\n /** No-action implementation */\n public handleCone(_g: Cone): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBox(_g: Box): any {\n return undefined;\n }\n /** No-action implementation */\n public handleTorusPipe(_g: TorusPipe): any {\n return undefined;\n }\n /** No-action implementation */\n public handleLinearSweep(_g: LinearSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handleRotationalSweep(_g: RotationalSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handleRuledSweep(_g: RuledSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handlePointString3d(_g: PointString3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBezierCurve3d(_g: BezierCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBezierCurve3dH(_g: BezierCurve3dH): any {\n return undefined;\n }\n}\n\n/**\n * IStrokeHandler is an interface with methods to receive data about curves being stroked.\n * CurvePrimitives emitStrokes () methods emit calls to a handler object with these methods.\n * The various CurvePrimitive types are free to announce either single points (announcePoint), linear fragments,\n * or fractional intervals of the parent curve.\n * * handler.startCurvePrimitive (cp) -- announce the curve primitive whose strokes will follow.\n * * announcePointTangent (xyz, fraction, tangent) -- announce a single point on the curve.\n * * announceIntervalForUniformStepStrokes (cp, numStrokes, fraction0, fraction1) -- announce a fraction\n * interval in which the curve can be evaluated (e.g. the handler can call cp->fractionToPointAndDerivative ())\n * * announceSegmentInterval (cp, point0, point1, numStrokes, fraction0, fraction1) -- announce\n * that the fractional interval fraction0, fraction1 is a straight line which should be broken into\n * numStrokes strokes.\n * * A LineSegment would make a single call to this.\n * * A LineString would make one call to this for each of its segments, with fractions indicating position\n * within the linestring.\n * * endCurvePrimitive (cp) -- announce the end of the curve primitive.\n * @public\n */\nexport interface IStrokeHandler {\n /**\n * Announce a parent curve primitive\n * * startParentCurvePrimitive() ...endParentCurvePrimitive() are wrapped around startCurvePrimitive and\n * endCurvePrimitive when the interior primitive is a proxy.\n */\n startParentCurvePrimitive(cp: CurvePrimitive): void;\n /** Announce the curve primitive that will be described in subsequent calls. */\n startCurvePrimitive(cp: CurvePrimitive): void;\n /**\n * Announce a single point with its fraction and tangent.\n * * (IMPORTANT) the same Point3d and Vector3d will be reset and passed on multiple calls.\n * * (THEREFORE) if the implementation is saving coordinates, it must copy the xyz data out into its own data\n * structure rather than save the references.\n */\n announcePointTangent(xyz: Point3d, fraction: number, tangent: Vector3d): void;\n\n /**\n * Announce that curve primitive cp should be evaluated in the specified fraction interval.\n * * Note that this method is permitted (expected) to provide pre-stroked data if available.\n * * In th pre-stroked case, the cp passed to the handler will be the stroked image, not the original.\n * * Callers that want summary data should implement (and return true from) needPrimaryDataForStrokes\n */\n announceIntervalForUniformStepStrokes(\n cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number,\n ): void;\n /**\n * OPTIONAL method for a handler to indicate that it wants primary geometry (e.g. spirals) rather than strokes.\n * @returns true if primary geometry should be passed (rather than stroked or otherwise simplified)\n */\n needPrimaryGeometryForStrokes?(): boolean;\n /** Announce numPoints interpolated between point0 and point1, with associated fractions */\n announceSegmentInterval(\n cp: CurvePrimitive, point0: Point3d, point1: Point3d, numStrokes: number, fraction0: number, fraction1: number,\n ): void;\n /** Announce that all data about `cp` has been announced. */\n endCurvePrimitive(cp: CurvePrimitive): void;\n /** Announce that all data about the parent primitive has been announced. */\n endParentCurvePrimitive(cp: CurvePrimitive): void;\n /**\n * Announce a bezier curve fragment.\n * * this is usually a section of BsplineCurve\n * * If this function is missing, the same interval will be passed to announceIntervalForUniformSteps.\n * @param bezier bezier fragment\n * @param numStrokes suggested number of strokes (uniform in bezier interval 0..1)\n * @param parent parent curve\n * @param spanIndex spanIndex within parent\n * @param fraction0 start fraction on parent curve\n * @param fraction1 end fraction on parent curve\n */\n announceBezierCurve?(\n bezier: BezierCurveBase,\n numStrokes: number,\n parent: CurvePrimitive,\n spandex: number,\n fraction0: number,\n fraction1: number,\n ): void;\n}\n\n/**\n * Interface with methods for mapping (u,v) fractional coordinates to surface xyz and derivatives.\n * @public\n */\nexport interface UVSurface {\n /**\n * Convert fractional u and v coordinates to surface point.\n * @param uFraction fractional coordinate in u direction\n * @param vFraction fractional coordinate in v direction\n * @param result optional pre-allocated point\n */\n uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d;\n /**\n * Convert fractional u and v coordinates to surface point and in-surface tangent directions.\n * * The vectors are expected to be non-zero tangents which can be crossed to get a normal.\n * * Hence they are not necessarily (a) partial derivatives or (b) Frenet vectors.\n * @param uFraction fractional coordinate in u direction\n * @param vFraction fractional coordinate in v direction\n * @param result optional pre-allocated carrier for point and vectors\n */\n uvFractionToPointAndTangents(\n uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors,\n ): Plane3dByOriginAndVectors;\n}\n/**\n * Interface for queries of distance-along in u and v directions\n * @public\n */\nexport interface UVSurfaceIsoParametricDistance {\n /**\n * * Return a vector whose x and y parts are \"size\" of the surface in the u and v directions.\n * * Sizes are use for applying scaling to mesh parameters\n * * These sizes are (reasonable approximations of) the max curve length along u and v isoparameter lines.\n * * e.g. for a sphere, these are:\n * * u direction = distance around the equator\n * * v direction = distance from south pole to north pole.\n */\n maxIsoParametricDistance(): Vector2d;\n}\n"]}
1
+ {"version":3,"file":"GeometryHandler.js","sourceRoot":"","sources":["../../../src/geometry3d/GeometryHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n\nimport { AkimaCurve3d } from \"../bspline/AkimaCurve3d\";\nimport { BezierCurve3d } from \"../bspline/BezierCurve3d\";\nimport { BezierCurve3dH } from \"../bspline/BezierCurve3dH\";\nimport { BezierCurveBase } from \"../bspline/BezierCurveBase\";\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\nimport { BSplineSurface3d, BSplineSurface3dH } from \"../bspline/BSplineSurface\";\nimport { InterpolationCurve3d } from \"../bspline/InterpolationCurve3d\";\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\nimport { CurveChainWithDistanceIndex } from \"../curve/CurveChainWithDistanceIndex\";\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { Path } from \"../curve/Path\";\nimport { PointString3d } from \"../curve/PointString3d\";\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { IndexedPolyface } from \"../polyface/Polyface\";\nimport { Box } from \"../solid/Box\";\nimport { Cone } from \"../solid/Cone\";\nimport { LinearSweep } from \"../solid/LinearSweep\";\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\nimport { RuledSweep } from \"../solid/RuledSweep\";\nimport { Sphere } from \"../solid/Sphere\";\nimport { TorusPipe } from \"../solid/TorusPipe\";\nimport { Plane3dByOriginAndVectors } from \"./Plane3dByOriginAndVectors\";\nimport { Vector2d } from \"./Point2dVector2d\";\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\n\n/**\n * `GeometryHandler` defines the base abstract methods for double-dispatch geometry computation.\n * * User code that wants to handle one or all of the commonly known geometry types implements a handler class.\n * * User code that does not handle all types is most likely to start with `NullGeometryHandler`, which will provide\n * No-action implementations for all types.\n * @public\n */\nexport abstract class GeometryHandler {\n /** Handle strongly typed [[LineSegment3d]] */\n public abstract handleLineSegment3d(g: LineSegment3d): any;\n /** Handle strongly typed [[LineString3d]] */\n public abstract handleLineString3d(g: LineString3d): any;\n /** Handle strongly typed [[Arc3d]] */\n public abstract handleArc3d(g: Arc3d): any;\n /** Handle strongly typed [[CurveCollection]] */\n public handleCurveCollection(_g: CurveCollection): any { }\n /** Handle strongly typed [[BSplineCurve3d]] */\n public abstract handleBSplineCurve3d(g: BSplineCurve3d): any;\n /** Handle strongly typed [[InterpolationCurve3d]] */\n public abstract handleInterpolationCurve3d(g: InterpolationCurve3d): any;\n /** Handle strongly typed [[AkimaCurve3d]] */\n public abstract handleAkimaCurve3d(g: AkimaCurve3d): any;\n /** Handle strongly typed [[BSplineCurve3dH]] */\n public abstract handleBSplineCurve3dH(g: BSplineCurve3dH): any;\n /** Handle strongly typed [[BSplineSurface3d]] */\n public abstract handleBSplineSurface3d(g: BSplineSurface3d): any;\n /** Handle strongly typed [[CoordinateXYZ]] */\n public abstract handleCoordinateXYZ(g: CoordinateXYZ): any;\n /** Handle strongly typed [[BSplineSurface3dH]] */\n public abstract handleBSplineSurface3dH(g: BSplineSurface3dH): any;\n /** Handle strongly typed [[IndexedPolyface]] */\n public abstract handleIndexedPolyface(g: IndexedPolyface): any;\n /** handle strongly typed [[TransitionSpiral3d]] */\n public abstract handleTransitionSpiral(g: TransitionSpiral3d): any;\n /** Handle strongly typed [[Path]] (base class method calls [[handleCurveCollection]]) */\n public handlePath(g: Path): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[Loop]] (base class method calls [[handleCurveCollection]]) */\n public handleLoop(g: Loop): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[ParityRegion]] (base class method calls [[handleCurveCollection]]) */\n public handleParityRegion(g: ParityRegion): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[UnionRegion]] (base class method calls [[handleCurveCollection]]) */\n public handleUnionRegion(g: UnionRegion): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[BagOfCurves]] (base class method calls [[handleCurveCollection]]) */\n public handleBagOfCurves(g: BagOfCurves): any {\n return this.handleCurveCollection(g);\n }\n /** Handle strongly typed [[CurveChainWithDistanceIndex]] (base class method calls [[handlePath]] or [[handleLoop]]) */\n public handleCurveChainWithDistanceIndex(g: CurveChainWithDistanceIndex): any {\n if (g.path instanceof Path)\n return this.handlePath(g.path);\n if (g.path instanceof Loop)\n return this.handleLoop(g.path);\n return this.handleCurveCollection(g.path);\n }\n /** Handle strongly typed Sphere */\n public abstract handleSphere(g: Sphere): any;\n /** Handle strongly typed Cone */\n public abstract handleCone(g: Cone): any;\n /** Handle strongly typed Box */\n public abstract handleBox(g: Box): any;\n /** Handle strongly typed TorusPipe */\n public abstract handleTorusPipe(g: TorusPipe): any;\n /** Handle strongly typed LinearSweep */\n public abstract handleLinearSweep(g: LinearSweep): any;\n /** Handle strongly typed RotationalSweep */\n public abstract handleRotationalSweep(g: RotationalSweep): any;\n /** Handle strongly typed RuledSweep */\n public abstract handleRuledSweep(g: RuledSweep): any;\n /** Handle strongly typed PointString3d */\n public abstract handlePointString3d(g: PointString3d): any;\n /** Handle strongly typed BezierCurve3d */\n public abstract handleBezierCurve3d(g: BezierCurve3d): any;\n /** Handle strongly typed BezierCurve3dH */\n public abstract handleBezierCurve3dH(g: BezierCurve3dH): any;\n}\n/**\n * `NullGeometryHandler` is a base class for dispatching various geometry types to application specific implementation\n * of some service.\n * To use:\n * * Derive a class from `NullGeometryHandler`\n * * Re-implement any or all of the specific `handleXXXX` methods\n * * Create a handler instance `myHandler`\n * * To send a `GeometryQuery` object `candidateGeometry` through the (fast) dispatch, invoke\n * `candidateGeometry.dispatchToHandler (myHandler).\n * * The appropriate method or methods will get called with a strongly typed `_g ` value.\n * @public\n */\nexport class NullGeometryHandler extends GeometryHandler {\n /** No-action implementation */\n public handleLineSegment3d(_g: LineSegment3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleLineString3d(_g: LineString3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleArc3d(_g: Arc3d): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleCurveCollection(_g: CurveCollection): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleCurveChainWithDistanceIndex(_g: CurveChainWithDistanceIndex): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineCurve3d(_g: BSplineCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleInterpolationCurve3d(_g: InterpolationCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleAkimaCurve3d(_g: AkimaCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineCurve3dH(_g: BSplineCurve3dH): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineSurface3d(_g: BSplineSurface3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleCoordinateXYZ(_g: CoordinateXYZ): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineSurface3dH(_g: BSplineSurface3dH): any {\n return undefined;\n }\n /** No-action implementation */\n public handleIndexedPolyface(_g: IndexedPolyface): any {\n return undefined;\n }\n /** No-action implementation */\n public handleTransitionSpiral(_g: TransitionSpiral3d): any {\n return undefined;\n }\n /** No-action implementation */\n public override handlePath(_g: Path): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleLoop(_g: Loop): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleParityRegion(_g: ParityRegion): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleUnionRegion(_g: UnionRegion): any {\n return undefined;\n }\n /** No-action implementation */\n public override handleBagOfCurves(_g: BagOfCurves): any {\n return undefined;\n }\n /** No-action implementation */\n public handleSphere(_g: Sphere): any {\n return undefined;\n }\n /** No-action implementation */\n public handleCone(_g: Cone): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBox(_g: Box): any {\n return undefined;\n }\n /** No-action implementation */\n public handleTorusPipe(_g: TorusPipe): any {\n return undefined;\n }\n /** No-action implementation */\n public handleLinearSweep(_g: LinearSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handleRotationalSweep(_g: RotationalSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handleRuledSweep(_g: RuledSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handlePointString3d(_g: PointString3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBezierCurve3d(_g: BezierCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBezierCurve3dH(_g: BezierCurve3dH): any {\n return undefined;\n }\n}\n/**\n * Implement GeometryHandler methods, but override `handleCurveCollection` so that all methods\n * that operate on a [[CurveCollection]] recurse to their children.\n * @public\n */\nexport class RecurseToCurvesGeometryHandler extends GeometryHandler {\n /** No-action implementation */\n public handleLineSegment3d(_g: LineSegment3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleLineString3d(_g: LineString3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleArc3d(_g: Arc3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineCurve3d(_g: BSplineCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleInterpolationCurve3d(_g: InterpolationCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleAkimaCurve3d(_g: AkimaCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineCurve3dH(_g: BSplineCurve3dH): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineSurface3d(_g: BSplineSurface3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleCoordinateXYZ(_g: CoordinateXYZ): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBSplineSurface3dH(_g: BSplineSurface3dH): any {\n return undefined;\n }\n /** No-action implementation */\n public handleIndexedPolyface(_g: IndexedPolyface): any {\n return undefined;\n }\n /** No-action implementation */\n public handleTransitionSpiral(_g: TransitionSpiral3d): any {\n return undefined;\n }\n /** Invoke `child.dispatchToGeometryHandler(this)` for each child in the array returned by the query `g.children` */\n public handleChildren(g: GeometryQuery): any {\n const children = g.children;\n if (children)\n for (const child of children) {\n child.dispatchToGeometryHandler(this);\n }\n }\n /** Recurse to children */\n public override handleCurveCollection(g: CurveCollection): any {\n return this.handleChildren(g);\n }\n /** No-action implementation */\n public handleSphere(_g: Sphere): any {\n return undefined;\n }\n /** No-action implementation */\n public handleCone(_g: Cone): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBox(_g: Box): any {\n return undefined;\n }\n /** No-action implementation */\n public handleTorusPipe(_g: TorusPipe): any {\n return undefined;\n }\n /** No-action implementation */\n public handleLinearSweep(_g: LinearSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handleRotationalSweep(_g: RotationalSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handleRuledSweep(_g: RuledSweep): any {\n return undefined;\n }\n /** No-action implementation */\n public handlePointString3d(_g: PointString3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBezierCurve3d(_g: BezierCurve3d): any {\n return undefined;\n }\n /** No-action implementation */\n public handleBezierCurve3dH(_g: BezierCurve3dH): any {\n return undefined;\n }\n}\n\n/**\n * IStrokeHandler is an interface with methods to receive data about curves being stroked.\n * CurvePrimitives emitStrokes () methods emit calls to a handler object with these methods.\n * The various CurvePrimitive types are free to announce either single points (announcePoint), linear fragments,\n * or fractional intervals of the parent curve.\n * * handler.startCurvePrimitive (cp) -- announce the curve primitive whose strokes will follow.\n * * announcePointTangent (xyz, fraction, tangent) -- announce a single point on the curve.\n * * announceIntervalForUniformStepStrokes (cp, numStrokes, fraction0, fraction1) -- announce a fraction\n * interval in which the curve can be evaluated (e.g. the handler can call cp->fractionToPointAndDerivative ())\n * * announceSegmentInterval (cp, point0, point1, numStrokes, fraction0, fraction1) -- announce\n * that the fractional interval fraction0, fraction1 is a straight line which should be broken into\n * numStrokes strokes.\n * * A LineSegment would make a single call to this.\n * * A LineString would make one call to this for each of its segments, with fractions indicating position\n * within the linestring.\n * * endCurvePrimitive (cp) -- announce the end of the curve primitive.\n * @public\n */\nexport interface IStrokeHandler {\n /**\n * Announce a parent curve primitive\n * * startParentCurvePrimitive() ...endParentCurvePrimitive() are wrapped around startCurvePrimitive and\n * endCurvePrimitive when the interior primitive is a proxy.\n */\n startParentCurvePrimitive(cp: CurvePrimitive): void;\n /** Announce the curve primitive that will be described in subsequent calls. */\n startCurvePrimitive(cp: CurvePrimitive): void;\n /**\n * Announce a single point with its fraction and tangent.\n * * (IMPORTANT) the same Point3d and Vector3d will be reset and passed on multiple calls.\n * * (THEREFORE) if the implementation is saving coordinates, it must copy the xyz data out into its own data\n * structure rather than save the references.\n */\n announcePointTangent(xyz: Point3d, fraction: number, tangent: Vector3d): void;\n\n /**\n * Announce that curve primitive cp should be evaluated in the specified fraction interval.\n * * Note that this method is permitted (expected) to provide pre-stroked data if available.\n * * In th pre-stroked case, the cp passed to the handler will be the stroked image, not the original.\n * * Callers that want summary data should implement (and return true from) needPrimaryDataForStrokes\n */\n announceIntervalForUniformStepStrokes(\n cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number,\n ): void;\n /**\n * OPTIONAL method for a handler to indicate that it wants primary geometry (e.g. spirals) rather than strokes.\n * @returns true if primary geometry should be passed (rather than stroked or otherwise simplified)\n */\n needPrimaryGeometryForStrokes?(): boolean;\n /** Announce numPoints interpolated between point0 and point1, with associated fractions */\n announceSegmentInterval(\n cp: CurvePrimitive, point0: Point3d, point1: Point3d, numStrokes: number, fraction0: number, fraction1: number,\n ): void;\n /** Announce that all data about `cp` has been announced. */\n endCurvePrimitive(cp: CurvePrimitive): void;\n /** Announce that all data about the parent primitive has been announced. */\n endParentCurvePrimitive(cp: CurvePrimitive): void;\n /**\n * Announce a bezier curve fragment.\n * * this is usually a section of BsplineCurve\n * * If this function is missing, the same interval will be passed to announceIntervalForUniformSteps.\n * @param bezier bezier fragment\n * @param numStrokes suggested number of strokes (uniform in bezier interval 0..1)\n * @param parent parent curve\n * @param spanIndex spanIndex within parent\n * @param fraction0 start fraction on parent curve\n * @param fraction1 end fraction on parent curve\n */\n announceBezierCurve?(\n bezier: BezierCurveBase,\n numStrokes: number,\n parent: CurvePrimitive,\n spandex: number,\n fraction0: number,\n fraction1: number,\n ): void;\n}\n\n/**\n * Interface with methods for mapping (u,v) fractional coordinates to surface xyz and derivatives.\n * @public\n */\nexport interface UVSurface {\n /**\n * Convert fractional u and v coordinates to surface point.\n * @param uFraction fractional coordinate in u direction\n * @param vFraction fractional coordinate in v direction\n * @param result optional pre-allocated point\n */\n uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d;\n /**\n * Convert fractional u and v coordinates to surface point and in-surface tangent directions.\n * * The vectors are expected to be non-zero tangents which can be crossed to get a normal.\n * * Hence they are not necessarily (a) partial derivatives or (b) Frenet vectors.\n * @param uFraction fractional coordinate in u direction\n * @param vFraction fractional coordinate in v direction\n * @param result optional pre-allocated carrier for point and vectors\n */\n uvFractionToPointAndTangents(\n uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors,\n ): Plane3dByOriginAndVectors;\n}\n/**\n * Interface for queries of distance-along in u and v directions\n * @public\n */\nexport interface UVSurfaceIsoParametricDistance {\n /**\n * * Return a vector whose x and y parts are \"size\" of the surface in the u and v directions.\n * * Sizes are use for applying scaling to mesh parameters\n * * These sizes are (reasonable approximations of) the max curve length along u and v isoparameter lines.\n * * e.g. for a sphere, these are:\n * * u direction = distance around the equator\n * * v direction = distance from south pole to north pole.\n */\n maxIsoParametricDistance(): Vector2d;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GrowableBlockedArray.js","sourceRoot":"","sources":["../../../src/geometry3d/GrowableBlockedArray.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n\nimport { BlockComparisonFunction } from \"./GrowableFloat64Array\";\n\n/**\n * Array of contiguous doubles, indexed by block number and index within block.\n * * This is essentially a rectangular matrix (two dimensional array), with each block being a row of the matrix.\n * @public\n */\nexport class GrowableBlockedArray {\n /** underlying contiguous, oversized buffer. */\n protected _data: Float64Array;\n /** Number of blocks (matrix rows) in use. */\n protected _inUse: number;\n /** number of numbers per block in the array.\n * * If viewing the array as a two dimensional array, this is the row size.\n */\n protected _blockSize: number; // positive integer !!!\n /**\n * multiplier used by ensureBlockCapacity to expand requested reallocation size\n */\n protected _growthFactor: number;\n\n /**\n * Construct an array whose contents are in blocked (row-major) order, possibly with extra capacity.\n * * Total capacity is `this._data.length`\n * * Actual in-use count is `this._inUse * this._blockSize`\n * @param blockSize number of entries in each block, i.e., row size\n * @param initialBlocks initial capacity in blocks (default 8)\n * @param growthFactor used by ensureBlockCapacity to expand requested reallocation size (default 1.5)\n */\n public constructor(blockSize: number, initialBlocks: number = 8, growthFactor?: number) {\n this._data = new Float64Array(initialBlocks * blockSize);\n this._inUse = 0;\n this._blockSize = blockSize > 0 ? blockSize : 1;\n this._growthFactor = (undefined !== growthFactor && growthFactor >= 1.0) ? growthFactor : 1.5;\n }\n\n /** Copy data from source array. Does not reallocate or change active block count.\n * @param source array to copy from\n * @param sourceCount copy the first sourceCount blocks; all blocks if undefined\n * @param destOffset copy to instance array starting at this block index; zero if undefined\n * @return count and offset of blocks copied\n */\n protected copyData(source: Float64Array | number[], sourceCount?: number, destOffset?: number): {count: number, offset: number} {\n // validate inputs and convert from blocks to entries\n let myOffset = (undefined !== destOffset) ? destOffset * this.numPerBlock : 0;\n if (myOffset < 0)\n myOffset = 0;\n if (myOffset >= this._data.length)\n return {count: 0, offset: 0};\n let myCount = (undefined !== sourceCount) ? sourceCount * this.numPerBlock : source.length;\n if (myCount > 0) {\n if (myCount > source.length)\n myCount = source.length;\n if (myOffset + myCount > this._data.length)\n myCount = this._data.length - myOffset;\n if (myCount % this.numPerBlock !== 0)\n myCount -= myCount % this.numPerBlock;\n }\n if (myCount <= 0)\n return {count: 0, offset: 0};\n if (myCount === source.length)\n this._data.set(source, myOffset);\n else if (source instanceof Float64Array)\n this._data.set(source.subarray(0, myCount), myOffset);\n else\n this._data.set(source.slice(0, myCount), myOffset);\n return {count: myCount / this.numPerBlock, offset: myOffset / this.numPerBlock};\n }\n\n /**\n * Make a copy of the (active) blocks in this array.\n * (The clone does NOT get excess capacity)\n */\n public clone(): GrowableBlockedArray {\n const newBlocks = new GrowableBlockedArray(this.numPerBlock, this.numBlocks, this._growthFactor);\n newBlocks.copyData(this._data, this.numBlocks);\n newBlocks._inUse = this.numBlocks;\n return newBlocks;\n }\n\n /** computed property: length (in blocks, not doubles) */\n public get length(): number { return this._inUse; }\n /** computed property: length (in blocks, not doubles) */\n public get numBlocks(): number { return this._inUse; }\n /** property: number of data values per block */\n public get numPerBlock(): number { return this._blockSize; }\n /**\n * Return a single value indexed within a block. Indices are unchecked.\n * @param blockIndex index of block to read\n * @param indexInBlock offset within the block\n */\n public getWithinBlock(blockIndex: number, indexWithinBlock: number): number {\n return this._data[blockIndex * this._blockSize + indexWithinBlock];\n }\n /** clear the block count to zero, but maintain the allocated memory */\n public clear() { this._inUse = 0; }\n /** Return the capacity in blocks (not doubles) */\n public blockCapacity() {\n return this._data.length / this._blockSize;\n }\n /** ensure capacity (in blocks, not doubles) */\n public ensureBlockCapacity(blockCapacity: number, applyGrowthFactor: boolean = true) {\n if (blockCapacity > this.blockCapacity()) {\n if (applyGrowthFactor)\n blockCapacity *= this._growthFactor;\n const prevData = this._data;\n this._data = new Float64Array(blockCapacity * this._blockSize);\n this.copyData(prevData, this._inUse);\n }\n }\n /** Add a new block of data.\n * * If newData has fewer than numPerBlock entries, the remaining part of the new block is zeros.\n * * If newData has more entries, only the first numPerBlock are taken.\n */\n public addBlock(newData: number[]) {\n const k0 = this.newBlockIndex();\n let numValue = newData.length;\n if (numValue > this._blockSize)\n numValue = this._blockSize;\n for (let i = 0; i < numValue; i++)\n this._data[k0 + i] = newData[i];\n }\n /**\n * Return the starting index of a block of (zero-initialized) doubles at the end.\n *\n * * this.data is reallocated if needed to include the new block.\n * * The inUse count is incremented to include the new block.\n * * The returned block is an index to the Float64Array (not a block index)\n */\n protected newBlockIndex(): number {\n const index = this._blockSize * this._inUse;\n if ((index + 1) > this._data.length)\n this.ensureBlockCapacity(1 + this._inUse);\n this._inUse++;\n for (let i = index; i < index + this._blockSize; i++)\n this._data[i] = 0.0;\n return index;\n }\n /** reduce the block count by one. */\n public popBlock() {\n if (this._inUse > 0)\n this._inUse--;\n }\n /** convert a block index to the simple index to the underlying Float64Array. */\n protected blockIndexToDoubleIndex(blockIndex: number) { return this._blockSize * blockIndex; }\n /** Access a single double at offset within a block, with index checking and return undefined if indexing is invalid. */\n public checkedComponent(blockIndex: number, componentIndex: number): number | undefined {\n if (blockIndex >= this._inUse || blockIndex < 0 || componentIndex < 0 || componentIndex >= this._blockSize)\n return undefined;\n return this._data[this._blockSize * blockIndex + componentIndex];\n }\n /** Access a single double at offset within a block. This has no index checking. */\n public component(blockIndex: number, componentIndex: number): number {\n return this._data[this._blockSize * blockIndex + componentIndex];\n }\n /** compare two blocks in simple lexical order.\n * @param data data array\n * @param blockSize number of items to compare\n * @param ia raw index (not block index) of first block\n * @param ib raw index (not block index) of second block\n */\n public static compareLexicalBlock(data: Float64Array, blockSize: number, ia: number, ib: number): number {\n let ax = 0;\n let bx = 0;\n for (let i = 0; i < blockSize; i++) {\n ax = data[ia + i];\n bx = data[ib + i];\n if (ax > bx) return 1;\n if (ax < bx) return -1;\n }\n return ia - ib; // so original order is maintained among duplicates !!!!\n }\n /** Return an array of block indices sorted per compareLexicalBlock function */\n public sortIndicesLexical(compareBlocks: BlockComparisonFunction = (dataArray, size, iA, iB) => GrowableBlockedArray.compareLexicalBlock(dataArray, size, iA, iB)): Uint32Array {\n const n = this._inUse;\n // let numCompare = 0;\n const result = new Uint32Array(n);\n const data = this._data;\n const blockSize = this._blockSize;\n for (let i = 0; i < n; i++)result[i] = i;\n result.sort(\n (blockIndexA: number, blockIndexB: number) => {\n // numCompare++;\n return compareBlocks(data, blockSize, blockIndexA * blockSize, blockIndexB * blockSize);\n });\n // console.log (n, numCompare);\n return result;\n }\n /** Return the distance (hypotenuse=sqrt(summed squares)) between indicated blocks */\n public distanceBetweenBlocks(blockIndexA: number, blockIndexB: number): number {\n let dd = 0.0;\n let iA = this.blockIndexToDoubleIndex(blockIndexA);\n let iB = this.blockIndexToDoubleIndex(blockIndexB);\n let a = 0;\n const data = this._data;\n for (let i = 0; i < this._blockSize; i++) {\n a = data[iA++] - data[iB++];\n dd += a * a;\n }\n return Math.sqrt(dd);\n }\n\n /** Return the distance (hypotenuse=sqrt(summed squares)) between block entries `iBegin <= i < iEnd` of indicated blocks */\n public distanceBetweenSubBlocks(blockIndexA: number, blockIndexB: number, iBegin: number, iEnd: number): number {\n let dd = 0.0;\n const iA = this.blockIndexToDoubleIndex(blockIndexA);\n const iB = this.blockIndexToDoubleIndex(blockIndexB);\n let a = 0;\n const data = this._data;\n for (let i = iBegin; i < iEnd; i++) {\n a = data[iA + i] - data[iB + i];\n dd += a * a;\n }\n return Math.sqrt(dd);\n }\n}\n"]}
1
+ {"version":3,"file":"GrowableBlockedArray.js","sourceRoot":"","sources":["../../../src/geometry3d/GrowableBlockedArray.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n\nimport { BlockComparisonFunction } from \"./GrowableFloat64Array\";\n\n/**\n * Array of contiguous doubles, indexed by block number and index within block.\n * * This is essentially a rectangular matrix (two dimensional array), with each block being a row of the matrix.\n * @public\n */\nexport class GrowableBlockedArray {\n /** underlying contiguous, oversized buffer. */\n protected _data: Float64Array;\n /** Number of blocks (matrix rows) in use. */\n protected _inUse: number;\n /** number of numbers per block in the array.\n * * If viewing the array as a two dimensional array, this is the row size.\n */\n protected _blockSize: number; // positive integer !!!\n /**\n * multiplier used by ensureBlockCapacity to expand requested reallocation size\n */\n protected _growthFactor: number;\n\n /**\n * Construct an array whose contents are in blocked (row-major) order, possibly with extra capacity.\n * * Total capacity is `this._data.length`\n * * Actual in-use count is `this._inUse * this._blockSize`\n * @param blockSize number of entries in each block, i.e., row size\n * @param initialBlocks initial capacity in blocks (default 8)\n * @param growthFactor used by ensureBlockCapacity to expand requested reallocation size (default 1.5)\n */\n public constructor(blockSize: number, initialBlocks: number = 8, growthFactor?: number) {\n this._data = new Float64Array(initialBlocks * blockSize);\n this._inUse = 0;\n this._blockSize = blockSize > 0 ? blockSize : 1;\n this._growthFactor = (undefined !== growthFactor && growthFactor >= 1.0) ? growthFactor : 1.5;\n }\n\n /** Copy data from source array. Does not reallocate or change active block count.\n * @param source array to copy from\n * @param sourceCount copy the first sourceCount blocks; all blocks if undefined\n * @param destOffset copy to instance array starting at this block index; zero if undefined\n * @return count and offset of blocks copied\n */\n protected copyData(source: Float64Array | number[], sourceCount?: number, destOffset?: number): {count: number, offset: number} {\n // validate inputs and convert from blocks to entries\n let myOffset = (undefined !== destOffset) ? destOffset * this.numPerBlock : 0;\n if (myOffset < 0)\n myOffset = 0;\n if (myOffset >= this._data.length)\n return {count: 0, offset: 0};\n let myCount = (undefined !== sourceCount) ? sourceCount * this.numPerBlock : source.length;\n if (myCount > 0) {\n if (myCount > source.length)\n myCount = source.length;\n if (myOffset + myCount > this._data.length)\n myCount = this._data.length - myOffset;\n if (myCount % this.numPerBlock !== 0)\n myCount -= myCount % this.numPerBlock;\n }\n if (myCount <= 0)\n return {count: 0, offset: 0};\n if (myCount === source.length)\n this._data.set(source, myOffset);\n else if (source instanceof Float64Array)\n this._data.set(source.subarray(0, myCount), myOffset);\n else\n this._data.set(source.slice(0, myCount), myOffset);\n return {count: myCount / this.numPerBlock, offset: myOffset / this.numPerBlock};\n }\n\n /**\n * Make a copy of the (active) blocks in this array.\n * (The clone does NOT get excess capacity)\n */\n public clone(): GrowableBlockedArray {\n const newBlocks = new GrowableBlockedArray(this.numPerBlock, this.numBlocks, this._growthFactor);\n newBlocks.copyData(this._data, this.numBlocks);\n newBlocks._inUse = this.numBlocks;\n return newBlocks;\n }\n\n /** computed property: length (in blocks, not doubles) */\n public get length(): number { return this._inUse; }\n /** computed property: length (in blocks, not doubles) */\n public get numBlocks(): number { return this._inUse; }\n /** property: number of data values per block */\n public get numPerBlock(): number { return this._blockSize; }\n /**\n * Return a single value indexed within a block. Indices are unchecked.\n * @param blockIndex index of block to read\n * @param indexInBlock offset within the block\n */\n public getWithinBlock(blockIndex: number, indexWithinBlock: number): number {\n return this._data[blockIndex * this._blockSize + indexWithinBlock];\n }\n /** clear the block count to zero, but maintain the allocated memory */\n public clear() { this._inUse = 0; }\n /** Return the capacity in blocks (not doubles) */\n public blockCapacity() {\n return this._data.length / this._blockSize;\n }\n /** ensure capacity (in blocks, not doubles) */\n public ensureBlockCapacity(blockCapacity: number, applyGrowthFactor: boolean = true) {\n if (blockCapacity > this.blockCapacity()) {\n if (applyGrowthFactor)\n blockCapacity *= this._growthFactor;\n const prevData = this._data;\n this._data = new Float64Array(blockCapacity * this._blockSize);\n this.copyData(prevData, this._inUse);\n }\n }\n /** Add a new block of data.\n * * If newData has fewer than numPerBlock entries, the remaining part of the new block is zeros.\n * * If newData has more entries, only the first numPerBlock are taken.\n */\n public addBlock(newData: number[]) {\n const k0 = this.newBlockIndex();\n let numValue = newData.length;\n if (numValue > this._blockSize)\n numValue = this._blockSize;\n for (let i = 0; i < numValue; i++)\n this._data[k0 + i] = newData[i];\n }\n /**\n * Return the starting index of a block of (zero-initialized) doubles at the end.\n *\n * * this.data is reallocated if needed to include the new block.\n * * The inUse count is incremented to include the new block.\n * * The returned block is an index to the Float64Array (not a block index)\n */\n protected newBlockIndex(): number {\n const index = this._blockSize * this._inUse;\n if ((index + 1) > this._data.length)\n this.ensureBlockCapacity(1 + this._inUse);\n this._inUse++;\n for (let i = index; i < index + this._blockSize; i++)\n this._data[i] = 0.0;\n return index;\n }\n /** reduce the block count by one. */\n public popBlock() {\n if (this._inUse > 0)\n this._inUse--;\n }\n /** convert a block index to the simple index to the underlying Float64Array. */\n protected blockIndexToDoubleIndex(blockIndex: number) { return this._blockSize * blockIndex; }\n /** Access a single double at offset within a block, with index checking and return undefined if indexing is invalid. */\n public checkedComponent(blockIndex: number, componentIndex: number): number | undefined {\n if (blockIndex >= this._inUse || blockIndex < 0 || componentIndex < 0 || componentIndex >= this._blockSize)\n return undefined;\n return this._data[this._blockSize * blockIndex + componentIndex];\n }\n /** Access a single double at offset within a block. This has no index checking. */\n public component(blockIndex: number, componentIndex: number): number {\n return this._data[this._blockSize * blockIndex + componentIndex];\n }\n /** compare two blocks in simple lexical order.\n * @param data data array\n * @param blockSize number of items to compare\n * @param ia raw index (not block index) of first block\n * @param ib raw index (not block index) of second block\n */\n public static compareLexicalBlock(data: Float64Array, blockSize: number, ia: number, ib: number): number {\n let ax = 0;\n let bx = 0;\n for (let i = 0; i < blockSize; i++) {\n ax = data[ia + i];\n bx = data[ib + i];\n if (ax > bx) return 1;\n if (ax < bx) return -1;\n }\n return ia - ib; // so original order is maintained among duplicates !!!!\n }\n /** Return an array of block indices sorted per compareLexicalBlock function */\n public sortIndicesLexical(compareBlocks: BlockComparisonFunction = (dataArray, size, iA, iB) => GrowableBlockedArray.compareLexicalBlock(dataArray, size, iA, iB)): Uint32Array {\n const n = this._inUse;\n // let numCompare = 0;\n const result = new Uint32Array(n);\n const data = this._data;\n const blockSize = this._blockSize;\n for (let i = 0; i < n; i++)result[i] = i;\n result.sort(\n (blockIndexA: number, blockIndexB: number) => {\n // numCompare++;\n return compareBlocks(data, blockSize, blockIndexA * blockSize, blockIndexB * blockSize);\n });\n // console.log (n, numCompare);\n return result;\n }\n /** Return the distance (hypotenuse=sqrt(summed squares)) between indicated blocks */\n public distanceBetweenBlocks(blockIndexA: number, blockIndexB: number): number {\n let dd = 0.0;\n let iA = this.blockIndexToDoubleIndex(blockIndexA);\n let iB = this.blockIndexToDoubleIndex(blockIndexB);\n let a = 0;\n const data = this._data;\n for (let i = 0; i < this._blockSize; i++) {\n a = data[iA++] - data[iB++];\n dd += a * a;\n }\n return Math.sqrt(dd);\n }\n\n /** Return the distance (hypotenuse=sqrt(summed squares)) between block entries `iBegin <= i < iEnd` of indicated blocks */\n public distanceBetweenSubBlocks(blockIndexA: number, blockIndexB: number, iBegin: number, iEnd: number): number {\n let dd = 0.0;\n const iA = this.blockIndexToDoubleIndex(blockIndexA);\n const iB = this.blockIndexToDoubleIndex(blockIndexB);\n let a = 0;\n const data = this._data;\n for (let i = iBegin; i < iEnd; i++) {\n a = data[iA + i] - data[iB + i];\n dd += a * a;\n }\n return Math.sqrt(dd);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GrowableFloat64Array.js","sourceRoot":"","sources":["../../../src/geometry3d/GrowableFloat64Array.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n\n/**\n * Type for a OptionalGrowableFloat64Array or undefined.\n * @public\n */\nexport type OptionalGrowableFloat64Array = GrowableFloat64Array | undefined;\n/**\n * Signature for a function which does lexical comparison of `blockSize` consecutive values as 2 starting indices.\n * @public\n */\nexport type BlockComparisonFunction = (data: Float64Array, blockSize: number, index0: number, index1: number) => number;\n/**\n * A `GrowableFloat64Array` is Float64Array accompanied by a count of how many of the array's entries are considered in use.\n * * In C++ terms, this is like an std::vector\n * * As entries are added to the array, the buffer is reallocated as needed to accommodate.\n * * The reallocations leave unused space to accept further additional entries without reallocation.\n * * The `length` property returns the number of entries in use.\n * * the `capacity` property returns the (usually larger) length of the (over-allocated) Float64Array.\n * @public\n */\nexport class GrowableFloat64Array {\n private _data: Float64Array;\n private _inUse: number;\n private _growthFactor: number;\n\n /** Construct a GrowableFloat64Array.\n * @param initialCapacity initial capacity (default 8)\n * @param growthFactor used by ensureCapacity to expand requested reallocation size (default 1.5)\n */\n constructor(initialCapacity: number = 8, growthFactor?: number) {\n this._data = new Float64Array(initialCapacity);\n this._inUse = 0;\n this._growthFactor = (undefined !== growthFactor && growthFactor >= 1.0) ? growthFactor : 1.5;\n }\n\n /** Copy data from source array. Does not reallocate or change active entry count.\n * @param source array to copy from\n * @param sourceCount copy the first sourceCount entries; all entries if undefined\n * @param destOffset copy to instance array starting at this index; zero if undefined\n * @return count and offset of entries copied\n */\n protected copyData(source: Float64Array | number[], sourceCount?: number, destOffset?: number): {count: number, offset: number} {\n let myOffset = destOffset ?? 0;\n if (myOffset < 0)\n myOffset = 0;\n if (myOffset >= this._data.length)\n return {count: 0, offset: 0};\n let myCount = sourceCount ?? source.length;\n if (myCount > 0) {\n if (myCount > source.length)\n myCount = source.length;\n if (myOffset + myCount > this._data.length)\n myCount = this._data.length - myOffset;\n }\n if (myCount <= 0)\n return {count: 0, offset: 0};\n if (myCount === source.length)\n this._data.set(source, myOffset);\n else if (source instanceof Float64Array)\n this._data.set(source.subarray(0, myCount), myOffset);\n else\n this._data.set(source.slice(0, myCount), myOffset);\n return {count: myCount, offset: myOffset};\n }\n\n /**\n * Create a GrowableFloat64Array with given contents.\n * @param contents data to copy into the array\n */\n public static create(contents: Float64Array | number[]): GrowableFloat64Array {\n const out = new GrowableFloat64Array(contents.length);\n out.copyData(contents);\n out._inUse = contents.length;\n return out;\n }\n /** sort-compatible comparison.\n * * Returns `(a-b)` which is\n * * negative if `a<b`\n * * zero if `a === b` (with exact equality)\n * * positive if `a>b`\n */\n public static compare(a: any, b: any): number {\n return a - b;\n }\n /** Return a new array with\n * * All active entries copied from this instance\n * * optionally trimmed capacity to the active length or replicate the capacity and unused space.\n */\n public clone(maintainExcessCapacity: boolean = false): GrowableFloat64Array {\n const out = new GrowableFloat64Array(maintainExcessCapacity ? this.capacity() : this._inUse);\n out.copyData(this._data, this._inUse);\n out._inUse = this._inUse;\n return out;\n }\n /**\n * Returns the number of entries in use.\n * * Note that this is typically smaller than the length of the length of the supporting `Float64Array`\n */\n public get length() {\n return this._inUse;\n }\n /**\n * Set the value at specified index.\n * @param index index of entry to set\n * @param value value to set\n */\n public setAtUncheckedIndex(index: number, value: number) {\n this._data[index] = value;\n }\n\n /**\n * Move the value at index i to index j.\n * @param i source index\n * @param j destination index.\n */\n public move(i: number, j: number) {\n this._data[j] = this._data[i];\n }\n /**\n * swap the values at indices i and j\n * @param i first index\n * @param j second index\n */\n public swap(i: number, j: number) {\n const a = this._data[i];\n this._data[i] = this._data[j];\n this._data[j] = a;\n }\n\n /**\n * append a single value to the array.\n * @param toPush value to append to the active array.\n */\n public push(toPush: number) {\n this.ensureCapacity(this._inUse + 1);\n this._data[this._inUse] = toPush;\n this._inUse++;\n }\n /**\n * Push each value from an array.\n * @param data array of values to push\n */\n public pushArray(data: Float64Array | number[]) {\n this.ensureCapacity(this._inUse + data.length);\n this.copyData(data, data.length, this._inUse);\n this._inUse += data.length;\n }\n /** Push `numToCopy` consecutive values starting at `copyFromIndex`. */\n public pushBlockCopy(copyFromIndex: number, numToCopy: number) {\n if (copyFromIndex >= 0 && copyFromIndex < this._inUse && numToCopy > 0 && copyFromIndex + numToCopy <= this._inUse) {\n this.ensureCapacity(this._inUse + numToCopy);\n this._data.copyWithin(this._inUse, copyFromIndex, copyFromIndex + numToCopy);\n this._inUse += numToCopy;\n }\n }\n /** Clear the array to 0 length. The underlying memory remains allocated for reuse. */\n public clear() {\n this._inUse = 0;\n }\n /**\n * Returns the number of entries in the supporting Float64Array buffer.\n * * This number can be larger than the `length` property.\n */\n public capacity() {\n return this._data.length;\n }\n /**\n * * If the capacity (Float64Array length) is less than or equal to the requested newCapacity, do nothing.\n * * If the requested newCapacity is larger than the existing capacity, reallocate to larger capacity, and copy existing values.\n * @param newCapacity size of new array\n * @param applyGrowthFactor whether to apply the growth factor to newCapacity when reallocating\n */\n public ensureCapacity(newCapacity: number, applyGrowthFactor: boolean = true) {\n if (newCapacity > this.capacity()) {\n if (applyGrowthFactor)\n newCapacity *= this._growthFactor;\n const prevData = this._data;\n this._data = new Float64Array(newCapacity);\n this.copyData(prevData, this._inUse);\n }\n }\n /**\n * * If newLength is less than current length, just reset current length to newLength, effectively trimming active entries but preserving original capacity.\n * * If newLength is greater than current length, reallocate to (exactly) newLength, copy existing entries, and pad with padValue up to newLength.\n * @param newLength new data count\n * @param padValue value to use for padding if the length increases.\n */\n public resize(newLength: number, padValue: number = 0) {\n if (newLength >= 0 && newLength < this._inUse)\n this._inUse = newLength;\n else if (newLength > this._inUse) {\n this.ensureCapacity(newLength, false);\n this._data.fill(padValue, this._inUse);\n this._inUse = newLength;\n }\n }\n /**\n * * Reduce the length by one.\n * * Note that there is no method return value -- use `back` to get that value before `pop()`\n * * (As with std::vector, separating the `pop` from the value access eliminates error testing from `pop` call)\n */\n public pop() {\n // Could technically access outside of array, if filled and then reduced using pop (similar to C\n // and accessing out of bounds), but with adjusted inUse counter, that data will eventually be overwritten\n if (this._inUse > 0) {\n this._inUse--;\n }\n }\n /** Access by index, without bounds check */\n public atUncheckedIndex(index: number): number {\n return this._data[index];\n }\n /** Access the 0-index member, without bounds check */\n public front() {\n return this._data[0];\n }\n /** Access the final member, without bounds check */\n public back() {\n return this._data[this._inUse - 1];\n }\n /** set a value by index */\n public reassign(index: number, value: number) {\n this._data[index] = value;\n }\n\n /**\n * * Sort the array entries.\n * * Uses insertion sort -- fine for small arrays (less than 30), slow for larger arrays\n * @param compareMethod comparison method\n */\n public sort(compareMethod: (a: any, b: any) => number = (a, b) => GrowableFloat64Array.compare(a, b)) {\n for (let i = 0; i < this._inUse; i++) {\n for (let j = i + 1; j < this._inUse; j++) {\n const tempI = this._data[i];\n const tempJ = this._data[j];\n if (compareMethod(tempI, tempJ) > 0) {\n this._data[i] = tempJ;\n this._data[j] = tempI;\n }\n }\n }\n }\n\n /**\n * * compress out values not within the [a,b] interval.\n * * Note that if a is greater than b all values are rejected.\n * @param a low value for accepted interval\n * @param b high value for accepted interval\n */\n public restrictToInterval(a: number, b: number) {\n const data = this._data;\n const n = data.length;\n let numAccept = 0;\n let q = 0;\n for (let i = 0; i < n; i++) {\n q = data[i];\n if (q >= a && q <= b)\n data[numAccept++] = q;\n }\n this._inUse = numAccept;\n }\n\n /**\n * * compress out multiple copies of values.\n * * this is done in the current order of the array.\n */\n public compressAdjacentDuplicates(tolerance: number = 0.0) {\n const data = this._data;\n const n = this._inUse;\n if (n === 0)\n return;\n\n let numAccepted = 1;\n let a = data[0];\n let b;\n for (let i = 1; i < n; i++) {\n b = data[i];\n if (Math.abs(b - a) > tolerance) {\n data[numAccepted++] = b;\n a = b;\n }\n }\n this._inUse = numAccepted;\n }\n\n}\n"]}
1
+ {"version":3,"file":"GrowableFloat64Array.js","sourceRoot":"","sources":["../../../src/geometry3d/GrowableFloat64Array.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n\n/**\n * Type for a OptionalGrowableFloat64Array or undefined.\n * @public\n */\nexport type OptionalGrowableFloat64Array = GrowableFloat64Array | undefined;\n/**\n * Signature for a function which does lexical comparison of `blockSize` consecutive values as 2 starting indices.\n * @public\n */\nexport type BlockComparisonFunction = (data: Float64Array, blockSize: number, index0: number, index1: number) => number;\n/**\n * A `GrowableFloat64Array` is Float64Array accompanied by a count of how many of the array's entries are considered in use.\n * * In C++ terms, this is like an std::vector\n * * As entries are added to the array, the buffer is reallocated as needed to accommodate.\n * * The reallocations leave unused space to accept further additional entries without reallocation.\n * * The `length` property returns the number of entries in use.\n * * the `capacity` property returns the (usually larger) length of the (over-allocated) Float64Array.\n * @public\n */\nexport class GrowableFloat64Array {\n private _data: Float64Array;\n private _inUse: number;\n private _growthFactor: number;\n\n /** Construct a GrowableFloat64Array.\n * @param initialCapacity initial capacity (default 8)\n * @param growthFactor used by ensureCapacity to expand requested reallocation size (default 1.5)\n */\n constructor(initialCapacity: number = 8, growthFactor?: number) {\n this._data = new Float64Array(initialCapacity);\n this._inUse = 0;\n this._growthFactor = (undefined !== growthFactor && growthFactor >= 1.0) ? growthFactor : 1.5;\n }\n\n /** Copy data from source array. Does not reallocate or change active entry count.\n * @param source array to copy from\n * @param sourceCount copy the first sourceCount entries; all entries if undefined\n * @param destOffset copy to instance array starting at this index; zero if undefined\n * @return count and offset of entries copied\n */\n protected copyData(source: Float64Array | number[], sourceCount?: number, destOffset?: number): {count: number, offset: number} {\n let myOffset = destOffset ?? 0;\n if (myOffset < 0)\n myOffset = 0;\n if (myOffset >= this._data.length)\n return {count: 0, offset: 0};\n let myCount = sourceCount ?? source.length;\n if (myCount > 0) {\n if (myCount > source.length)\n myCount = source.length;\n if (myOffset + myCount > this._data.length)\n myCount = this._data.length - myOffset;\n }\n if (myCount <= 0)\n return {count: 0, offset: 0};\n if (myCount === source.length)\n this._data.set(source, myOffset);\n else if (source instanceof Float64Array)\n this._data.set(source.subarray(0, myCount), myOffset);\n else\n this._data.set(source.slice(0, myCount), myOffset);\n return {count: myCount, offset: myOffset};\n }\n\n /**\n * Create a GrowableFloat64Array with given contents.\n * @param contents data to copy into the array\n */\n public static create(contents: Float64Array | number[]): GrowableFloat64Array {\n const out = new GrowableFloat64Array(contents.length);\n out.copyData(contents);\n out._inUse = contents.length;\n return out;\n }\n /** sort-compatible comparison.\n * * Returns `(a-b)` which is\n * * negative if `a<b`\n * * zero if `a === b` (with exact equality)\n * * positive if `a>b`\n */\n public static compare(a: any, b: any): number {\n return a - b;\n }\n /** Return a new array with\n * * All active entries copied from this instance\n * * optionally trimmed capacity to the active length or replicate the capacity and unused space.\n */\n public clone(maintainExcessCapacity: boolean = false): GrowableFloat64Array {\n const out = new GrowableFloat64Array(maintainExcessCapacity ? this.capacity() : this._inUse);\n out.copyData(this._data, this._inUse);\n out._inUse = this._inUse;\n return out;\n }\n /**\n * Returns the number of entries in use.\n * * Note that this is typically smaller than the length of the length of the supporting `Float64Array`\n */\n public get length() {\n return this._inUse;\n }\n /**\n * Set the value at specified index.\n * @param index index of entry to set\n * @param value value to set\n */\n public setAtUncheckedIndex(index: number, value: number) {\n this._data[index] = value;\n }\n\n /**\n * Move the value at index i to index j.\n * @param i source index\n * @param j destination index.\n */\n public move(i: number, j: number) {\n this._data[j] = this._data[i];\n }\n /**\n * swap the values at indices i and j\n * @param i first index\n * @param j second index\n */\n public swap(i: number, j: number) {\n const a = this._data[i];\n this._data[i] = this._data[j];\n this._data[j] = a;\n }\n\n /**\n * append a single value to the array.\n * @param toPush value to append to the active array.\n */\n public push(toPush: number) {\n this.ensureCapacity(this._inUse + 1);\n this._data[this._inUse] = toPush;\n this._inUse++;\n }\n /**\n * Push each value from an array.\n * @param data array of values to push\n */\n public pushArray(data: Float64Array | number[]) {\n this.ensureCapacity(this._inUse + data.length);\n this.copyData(data, data.length, this._inUse);\n this._inUse += data.length;\n }\n /** Push `numToCopy` consecutive values starting at `copyFromIndex`. */\n public pushBlockCopy(copyFromIndex: number, numToCopy: number) {\n if (copyFromIndex >= 0 && copyFromIndex < this._inUse && numToCopy > 0 && copyFromIndex + numToCopy <= this._inUse) {\n this.ensureCapacity(this._inUse + numToCopy);\n this._data.copyWithin(this._inUse, copyFromIndex, copyFromIndex + numToCopy);\n this._inUse += numToCopy;\n }\n }\n /** Clear the array to 0 length. The underlying memory remains allocated for reuse. */\n public clear() {\n this._inUse = 0;\n }\n /**\n * Returns the number of entries in the supporting Float64Array buffer.\n * * This number can be larger than the `length` property.\n */\n public capacity() {\n return this._data.length;\n }\n /**\n * * If the capacity (Float64Array length) is less than or equal to the requested newCapacity, do nothing.\n * * If the requested newCapacity is larger than the existing capacity, reallocate to larger capacity, and copy existing values.\n * @param newCapacity size of new array\n * @param applyGrowthFactor whether to apply the growth factor to newCapacity when reallocating\n */\n public ensureCapacity(newCapacity: number, applyGrowthFactor: boolean = true) {\n if (newCapacity > this.capacity()) {\n if (applyGrowthFactor)\n newCapacity *= this._growthFactor;\n const prevData = this._data;\n this._data = new Float64Array(newCapacity);\n this.copyData(prevData, this._inUse);\n }\n }\n /**\n * * If newLength is less than current length, just reset current length to newLength, effectively trimming active entries but preserving original capacity.\n * * If newLength is greater than current length, reallocate to (exactly) newLength, copy existing entries, and pad with padValue up to newLength.\n * @param newLength new data count\n * @param padValue value to use for padding if the length increases.\n */\n public resize(newLength: number, padValue: number = 0) {\n if (newLength >= 0 && newLength < this._inUse)\n this._inUse = newLength;\n else if (newLength > this._inUse) {\n this.ensureCapacity(newLength, false);\n this._data.fill(padValue, this._inUse);\n this._inUse = newLength;\n }\n }\n /**\n * * Reduce the length by one.\n * * Note that there is no method return value -- use `back` to get that value before `pop()`\n * * (As with std::vector, separating the `pop` from the value access eliminates error testing from `pop` call)\n */\n public pop() {\n // Could technically access outside of array, if filled and then reduced using pop (similar to C\n // and accessing out of bounds), but with adjusted inUse counter, that data will eventually be overwritten\n if (this._inUse > 0) {\n this._inUse--;\n }\n }\n /** Access by index, without bounds check */\n public atUncheckedIndex(index: number): number {\n return this._data[index];\n }\n /** Access the 0-index member, without bounds check */\n public front() {\n return this._data[0];\n }\n /** Access the final member, without bounds check */\n public back() {\n return this._data[this._inUse - 1];\n }\n /** set a value by index */\n public reassign(index: number, value: number) {\n this._data[index] = value;\n }\n\n /**\n * * Sort the array entries.\n * * Uses insertion sort -- fine for small arrays (less than 30), slow for larger arrays\n * @param compareMethod comparison method\n */\n public sort(compareMethod: (a: any, b: any) => number = (a, b) => GrowableFloat64Array.compare(a, b)) {\n for (let i = 0; i < this._inUse; i++) {\n for (let j = i + 1; j < this._inUse; j++) {\n const tempI = this._data[i];\n const tempJ = this._data[j];\n if (compareMethod(tempI, tempJ) > 0) {\n this._data[i] = tempJ;\n this._data[j] = tempI;\n }\n }\n }\n }\n\n /**\n * * compress out values not within the [a,b] interval.\n * * Note that if a is greater than b all values are rejected.\n * @param a low value for accepted interval\n * @param b high value for accepted interval\n */\n public restrictToInterval(a: number, b: number) {\n const data = this._data;\n const n = data.length;\n let numAccept = 0;\n let q = 0;\n for (let i = 0; i < n; i++) {\n q = data[i];\n if (q >= a && q <= b)\n data[numAccept++] = q;\n }\n this._inUse = numAccept;\n }\n\n /**\n * * compress out multiple copies of values.\n * * this is done in the current order of the array.\n */\n public compressAdjacentDuplicates(tolerance: number = 0.0) {\n const data = this._data;\n const n = this._inUse;\n if (n === 0)\n return;\n\n let numAccepted = 1;\n let a = data[0];\n let b;\n for (let i = 1; i < n; i++) {\n b = data[i];\n if (Math.abs(b - a) > tolerance) {\n data[numAccepted++] = b;\n a = b;\n }\n }\n this._inUse = numAccepted;\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GrowableXYArray.js","sourceRoot":"","sources":["../../../src/geometry3d/GrowableXYArray.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableXYZArray } from \"./GrowableXYZArray\";\nimport { IndexedXYCollection } from \"./IndexedXYCollection\";\nimport { MultiLineStringDataVariant } from \"./IndexedXYZCollection\";\nimport { Matrix3d } from \"./Matrix3d\";\nimport { Point2d, Vector2d } from \"./Point2dVector2d\";\nimport { Point3d } from \"./Point3dVector3d\";\nimport { Range2d } from \"./Range\";\nimport { Transform } from \"./Transform\";\nimport { XAndY, XYAndZ } from \"./XYZProps\";\n\n/** `GrowableXYArray` manages a (possibly growing) Float64Array to pack xy coordinates.\n * @public\n */\nexport class GrowableXYArray extends IndexedXYCollection {\n /**\n * array of packed xy xy xy components\n */\n private _data: Float64Array;\n /**\n * Number of xy tuples (not floats) in the array\n */\n private _xyInUse: number;\n /**\n * capacity in xy tuples. (not floats)\n */\n private _xyCapacity: number;\n /**\n * multiplier used by ensureCapacity to expand requested reallocation size\n */\n private _growthFactor: number;\n\n /** Construct a new GrowablePoint2d array.\n * @param numPoints initial capacity in xy tuples (default 8)\n * @param growthFactor used by ensureCapacity to expand requested reallocation size (default 1.5)\n */\n public constructor(numPoints: number = 8, growthFactor?: number) {\n super();\n this._data = new Float64Array(numPoints * 2); // 2 values per point\n this._xyInUse = 0;\n this._xyCapacity = numPoints;\n this._growthFactor = (undefined !== growthFactor && growthFactor >= 1.0) ? growthFactor : 1.5;\n }\n\n /** Copy xy points from source array. Does not reallocate or change active point count.\n * @param source array to copy from\n * @param sourceCount copy the first sourceCount points; all points if undefined\n * @param destOffset copy to instance array starting at this point index; zero if undefined\n * @return count and offset of points copied\n */\n protected copyData(source: Float64Array | number[], sourceCount?: number, destOffset?: number): {count: number, offset: number} {\n // validate inputs and convert from points to entries\n let myOffset = (undefined !== destOffset) ? destOffset * 2 : 0;\n if (myOffset < 0)\n myOffset = 0;\n if (myOffset >= this._data.length)\n return {count: 0, offset: 0};\n let myCount = (undefined !== sourceCount) ? sourceCount * 2 : source.length;\n if (myCount > 0) {\n if (myCount > source.length)\n myCount = source.length;\n if (myOffset + myCount > this._data.length)\n myCount = this._data.length - myOffset;\n if (myCount % 2 !== 0)\n myCount -= myCount % 2;\n }\n if (myCount <= 0)\n return {count: 0, offset: 0};\n if (myCount === source.length)\n this._data.set(source, myOffset);\n else if (source instanceof Float64Array)\n this._data.set(source.subarray(0, myCount), myOffset);\n else\n this._data.set(source.slice(0, myCount), myOffset);\n return {count: myCount / 2, offset: myOffset / 2};\n }\n\n /** The number of points in use. When the length is increased, the array is padded with zeroes. */\n public override get length() { return this._xyInUse; }\n public set length(newLength: number) { this.resize(newLength, true); }\n\n /** Return the number of float64 in use. */\n public get float64Length() { return this._xyInUse * 2; }\n /** Return the raw packed data.\n * * Note that the length of the returned Float64Array is a count of doubles, and includes the excess capacity\n */\n public float64Data(): Float64Array { return this._data; }\n\n /** If necessary, increase the capacity to a new pointCount. Current coordinates and point count (length) are unchanged. */\n public ensureCapacity(pointCapacity: number, applyGrowthFactor: boolean = true) {\n if (pointCapacity > this._xyCapacity) {\n if (applyGrowthFactor)\n pointCapacity *= this._growthFactor;\n const prevData = this._data;\n this._data = new Float64Array(pointCapacity * 2);\n this.copyData(prevData, this._xyInUse);\n this._xyCapacity = pointCapacity;\n }\n }\n /**\n * * If pointCount is less than current length, just reset current length to pointCount, effectively trimming active points but preserving original capacity.\n * * If pointCount is greater than current length, reallocate to exactly pointCount, copy existing points, and optionally pad excess with zero.\n * @param pointCount new number of active points in array\n * @param padWithZero when increasing point count, whether to zero out new points (default false)\n */\n public resize(pointCount: number, padWithZero?: boolean) {\n if (pointCount >= 0 && pointCount < this._xyInUse)\n this._xyInUse = pointCount;\n else if (pointCount > this._xyInUse) {\n this.ensureCapacity(pointCount, false);\n if (padWithZero ?? false)\n this._data.fill(0, this._xyInUse * 2);\n this._xyInUse = pointCount;\n }\n }\n /**\n * Make a copy of the (active) points in this array.\n * (The clone does NOT get excess capacity)\n */\n public clone(): GrowableXYArray {\n const newPoints = new GrowableXYArray(this.length);\n newPoints.copyData(this._data, this.length);\n newPoints._xyInUse = this.length;\n return newPoints;\n }\n /** Create an array populated from\n * Valid inputs are:\n * * Point2d\n * * Point3d\n * * An array of 2 doubles\n * * An array of 3 doubles\n * * A GrowableXYZArray\n * * A GrowableXYArray\n * * Any json object satisfying Point3d.isXAndY\n * * A Float64Array of doubles, interpreted as xyxy\n * * An array of any of the above\n */\n public static create(data: any, result?: GrowableXYArray): GrowableXYArray {\n if (result) {\n result.clear();\n } else {\n const pointCount = typeof data[0] === \"number\" ? data.length / 2 : data.length;\n result = new GrowableXYArray(pointCount);\n }\n result.pushFrom(data);\n return result;\n }\n\n /** Restructure MultiLineStringDataVariant as array of GrowableXYZArray\n * @deprecated in 4.x. Moved to GrowableXYZArray class.\n */\n public static createArrayOfGrowableXYZArray(data: MultiLineStringDataVariant): GrowableXYZArray[] | undefined {\n return GrowableXYZArray.createArrayOfGrowableXYZArray(data);\n }\n /** push a point to the end of the array */\n public push(toPush: XAndY) {\n this.pushXY(toPush.x, toPush.y);\n }\n\n /** push all points of an array */\n public pushAll(points: XAndY[]) {\n this.ensureCapacity(this._xyInUse + points.length, false);\n for (const p of points)\n this.push(p);\n }\n /** push all points of an array */\n public pushAllXYAndZ(points: XYAndZ[] | GrowableXYZArray) {\n this.ensureCapacity(this._xyInUse + points.length, false);\n if (points instanceof GrowableXYZArray) {\n const xyzBuffer = points.float64Data();\n const n = points.length * 3;\n for (let i = 0; i + 2 < n; i += 3)\n this.pushXY(xyzBuffer[i], xyzBuffer[i + 1]);\n } else {\n for (const p of points) this.pushXY(p.x, p.y);\n }\n }\n /** Push copies of points from variant sources.\n * Valid inputs are:\n * * Point2d\n * * Point3d\n * * An array of 2 doubles\n * * A GrowableXYArray\n * * A GrowableXYZArray\n * * Any json object satisfying Point3d.isXAndY\n * * A Float64Array of doubles, interpreted as xyxy\n * * An array of any of the above\n */\n public pushFrom(p: any) {\n if (p instanceof Point3d) {\n this.pushXY(p.x, p.y);\n } else if (p instanceof GrowableXYZArray) {\n this.pushAllXYAndZ(p);\n } else if (p instanceof Point2d) {\n this.pushXY(p.x, p.y);\n } else if (Geometry.isNumberArray(p, 3) || p instanceof Float64Array) {\n const xyToAdd = Math.trunc(p.length / 2);\n this.ensureCapacity(this._xyInUse + xyToAdd, false);\n this.copyData(p, xyToAdd, this._xyInUse);\n this._xyInUse += xyToAdd;\n } else if (Geometry.isNumberArray(p, 2)) {\n this.pushXY(p[0], p[1]);\n } else if (Array.isArray(p)) {\n // direct recursion re-wraps p and goes infinite. Unroll here.\n for (const q of p)\n this.pushFrom(q);\n } else if (Point3d.isXAndY(p)) {\n this.pushXY(p.x, p.y);\n } else if (p instanceof IndexedXYCollection) {\n const n = p.length;\n this.ensureCapacity(this._xyInUse + n, false);\n for (let i = 0; i < n; i++)\n this.pushXY(p.getXAtUncheckedPointIndex(i), p.getYAtUncheckedPointIndex(i));\n }\n }\n /**\n * Replicate numWrap xy values from the front of the array as new values at the end.\n * @param numWrap number of xy values to replicate\n */\n public pushWrap(numWrap: number) {\n if (this._xyInUse >= numWrap) {\n this.ensureCapacity(this._xyInUse + numWrap, false);\n for (let i = 0; i < numWrap; i++) {\n const k = 2 * i;\n this.pushXY(this._data[k], this._data[k + 1]);\n }\n }\n }\n /** push a point given by x,y coordinates */\n public pushXY(x: number, y: number) {\n this.ensureCapacity(this._xyInUse + 1);\n const index = this._xyInUse * 2;\n this._data[index] = x;\n this._data[index + 1] = y;\n this._xyInUse++;\n }\n\n /** Remove one point from the back.\n * * NOTE that (in the manner of std::vector native) this is \"just\" removing the point -- no point is NOT returned.\n * * Use `back ()` to get the last x,y assembled into a `Point2d `\n */\n public pop() {\n if (this._xyInUse > 0)\n this._xyInUse--;\n }\n /**\n * Test if index is valid for an xy (point or vector) within this array\n * @param index xy index to test.\n */\n public isIndexValid(index: number): boolean {\n if (index >= this._xyInUse || index < 0)\n return false;\n return true;\n }\n /**\n * Clear all xy data, but leave capacity unchanged.\n */\n public clear() {\n this._xyInUse = 0;\n }\n /**\n * Get a point by index, strongly typed as a Point2d. This is unchecked. Use atPoint2dIndex to have validity test.\n * @param pointIndex index to access\n * @param result optional result\n */\n public getPoint2dAtUncheckedPointIndex(pointIndex: number, result?: Point2d): Point2d {\n const index = 2 * pointIndex;\n return Point2d.create(this._data[index], this._data[index + 1], result);\n }\n\n /**\n * Get x coordinate by point index, with no index checking\n * @param pointIndex index to access\n */\n public override getXAtUncheckedPointIndex(pointIndex: number): number {\n return this._data[2 * pointIndex];\n }\n\n /**\n * Get y coordinate by point index, with no index checking\n * @param pointIndex index to access\n */\n public override getYAtUncheckedPointIndex(pointIndex: number): number {\n return this._data[2 * pointIndex + 1];\n }\n\n /**\n * Gather all points as a Point2d[]\n */\n public getPoint2dArray(): Point2d[] {\n const n = 2 * this._xyInUse;\n const result = [];\n const data = this._data;\n for (let i = 0; i < n; i += 2)\n result.push(Point2d.create(data[i], data[i + 1]));\n return result;\n }\n\n /** copy xy into strongly typed Point2d */\n public override getPoint2dAtCheckedPointIndex(pointIndex: number, result?: Point2d): Point2d | undefined {\n if (this.isIndexValid(pointIndex)) {\n const index = 2 * pointIndex;\n return Point2d.create(this._data[index], this._data[index + 1], result);\n }\n return undefined;\n }\n\n /** copy xy into strongly typed Vector2d */\n public override getVector2dAtCheckedVectorIndex(vectorIndex: number, result?: Vector2d): Vector2d | undefined {\n if (this.isIndexValid(vectorIndex)) {\n const index = 2 * vectorIndex;\n return Vector2d.create(this._data[index], this._data[index + 1], result);\n }\n return undefined;\n }\n\n /**\n * Read coordinates from source array, place them at index within this array.\n * @param destIndex point index where coordinates are to be placed in this array\n * @param source source array\n * @param sourceIndex point index in source array\n * @returns true if destIndex and sourceIndex are both valid.\n */\n public transferFromGrowableXYArray(destIndex: number, source: GrowableXYArray, sourceIndex: number): boolean {\n if (this.isIndexValid(destIndex) && source.isIndexValid(sourceIndex)) {\n const i = destIndex * 2;\n const j = sourceIndex * 2;\n this._data[i] = source._data[j];\n this._data[i + 1] = source._data[j + 1];\n return true;\n }\n return false;\n }\n\n /**\n * push coordinates from the source array to the end of this array.\n * @param source source array\n * @param sourceIndex xy index within the source. If undefined, push entire contents of source\n * @returns number of points pushed.\n */\n public pushFromGrowableXYArray(source: GrowableXYArray, sourceIndex?: number): number {\n // full array push . . .\n if (sourceIndex === undefined) {\n const numXYAdd = source.length;\n this.ensureCapacity(this.length + numXYAdd, false);\n this.copyData(source._data, numXYAdd, this.length);\n this._xyInUse += numXYAdd;\n return numXYAdd;\n }\n // single point push . . .\n if (source.isIndexValid(sourceIndex)) {\n const j = sourceIndex * 2;\n this.pushXY(source._data[j], source._data[j + 1]);\n return 1;\n }\n return 0;\n }\n\n /**\n * * Compute a point at fractional coordinate between points i and j of source\n * * push onto this array.\n */\n public pushInterpolatedFromGrowableXYArray(source: GrowableXYArray, i: number, fraction: number, j: number) {\n if (source.isIndexValid(i) && source.isIndexValid(j)) {\n const fraction0 = 1.0 - fraction;\n const data = source._data;\n i = 2 * i;\n j = 2 * j;\n this.pushXY(\n fraction0 * data[i] + fraction * data[j],\n fraction0 * data[i + 1] + fraction * data[j + 1]);\n }\n }\n\n /**\n * Create an array of xy points from source xyz points.\n * @param source source array of xyz\n * @param transform optional transform to apply to xyz points.\n * @param dest optional result.\n */\n public static createFromGrowableXYZArray(source: GrowableXYZArray, transform?: Transform, dest?: GrowableXYArray) {\n const numPoints = source.length;\n if (!dest)\n dest = new GrowableXYArray(numPoints);\n else {\n dest.ensureCapacity(numPoints, false);\n dest.clear();\n }\n if (transform) {\n const packedXYZ = source.float64Data();\n const nDouble = 3 * numPoints;\n let x, y, z;\n for (let i = 0; i < nDouble; i += 3) {\n x = packedXYZ[i];\n y = packedXYZ[i + 1];\n z = packedXYZ[i + 2];\n dest.pushXY(transform.multiplyComponentXYZ(0, x, y, z), transform.multiplyComponentXYZ(1, x, y, z));\n }\n } else {\n dest.pushAllXYAndZ(source);\n }\n return dest;\n }\n /**\n * Return the first point, or undefined if the array is empty.\n */\n public front(result?: Point2d): Point2d | undefined {\n if (this._xyInUse === 0) return undefined;\n return this.getPoint2dAtUncheckedPointIndex(0, result);\n }\n /**\n * Return the last point, or undefined if the array is empty.\n */\n public back(result?: Point2d): Point2d | undefined {\n if (this._xyInUse < 1) return undefined;\n return this.getPoint2dAtUncheckedPointIndex(this._xyInUse - 1, result);\n }\n /**\n * Set the coordinates of a single point.\n * @param pointIndex index of point to set\n * @param value coordinates to set\n */\n public setAtCheckedPointIndex(pointIndex: number, value: XAndY): boolean {\n if (!this.isIndexValid(pointIndex))\n return false;\n const index = pointIndex * 2;\n this._data[index] = value.x;\n this._data[index + 1] = value.y;\n return true;\n }\n /**\n * Set the coordinates of a single point given as coordinates.\n * @param pointIndex index of point to set\n * @param x x coordinate\n * @param y y coordinate\n */\n public setXYAtCheckedPointIndex(pointIndex: number, x: number, y: number): boolean {\n if (!this.isIndexValid(pointIndex))\n return false;\n const index = pointIndex * 2;\n this._data[index] = x;\n this._data[index + 1] = y;\n return true;\n }\n /**\n * Set the coordinates of a single point given as coordinates.\n * @deprecated in 3.x. Use setXYAtCheckedPointIndex instead\n */\n public setXYZAtCheckedPointIndex(pointIndex: number, x: number, y: number): boolean {\n return this.setXYAtCheckedPointIndex(pointIndex, x, y);\n }\n\n /**\n * Copy all points into a simple array of Point3d with given z.\n */\n public getPoint3dArray(z: number = 0): Point3d[] {\n const n = 2 * this._xyInUse;\n const result = [];\n const data = this._data;\n for (let i = 0; i < n; i += 2)\n result.push(Point3d.create(data[i], data[i + 1], z));\n return result;\n }\n /** reverse the order of points. */\n public reverseInPlace() {\n const n = this.length;\n let j0, j1;\n let a;\n const data = this._data;\n for (let i0 = 0, i1 = n - 1; i0 < i1; i0++, i1--) {\n j0 = 2 * i0;\n j1 = 2 * i1;\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\n j0++;\n j1++;\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\n }\n }\n\n /** multiply each point by the transform, replace values. */\n public multiplyTransformInPlace(transform: Transform) {\n const data = this._data;\n const nDouble = this.float64Length;\n const coffs = transform.matrix.coffs;\n const origin = transform.origin;\n const x0 = origin.x;\n const y0 = origin.y;\n let x = 0;\n let y = 0;\n for (let i = 0; i + 1 < nDouble; i += 2) {\n x = data[i];\n y = data[i + 1];\n data[i] = coffs[0] * x + coffs[1] * y + x0;\n data[i + 1] = coffs[3] * x + coffs[4] * y + y0;\n }\n }\n\n /** multiply each xy (as a vector) by matrix, replace values. */\n public multiplyMatrix3dInPlace(matrix: Matrix3d) {\n const data = this._data;\n const nDouble = this.float64Length;\n const coffs = matrix.coffs;\n let x = 0;\n let y = 0;\n for (let i = 0; i + 1 < nDouble; i += 2) {\n x = data[i];\n y = data[i + 1];\n data[i] = coffs[0] * x + coffs[1] * y;\n data[i + 1] = coffs[3] * x + coffs[4] * y;\n }\n }\n\n /** multiply each point by the transform, replace values. */\n public tryTransformInverseInPlace(transform: Transform): boolean {\n const data = this._data;\n const nDouble = this.float64Length;\n const matrix = transform.matrix;\n matrix.computeCachedInverse(true);\n const coffs = matrix.inverseCoffs;\n if (!coffs)\n return false;\n const origin = transform.origin;\n const x0 = origin.x;\n const y0 = origin.y;\n let x = 0;\n let y = 0;\n for (let i = 0; i + 1 < nDouble; i += 2) {\n x = data[i] - x0;\n y = data[i + 1] - y0;\n data[i] = coffs[0] * x + coffs[1] * y;\n data[i + 1] = coffs[3] * x + coffs[4] * y;\n }\n return true;\n }\n /** Extend a `Range2d`, optionally transforming the points. */\n public extendRange(rangeToExtend: Range2d, transform?: Transform) {\n const numDouble = this.float64Length;\n const data = this._data;\n if (transform) {\n for (let i = 0; i + 1 < numDouble; i += 2)\n rangeToExtend.extendTransformedXY(transform, data[i], data[i + 1]);\n } else {\n for (let i = 0; i + 1 < numDouble; i += 2)\n rangeToExtend.extendXY(data[i], data[i + 1]);\n\n }\n }\n /** sum the lengths of segments between points. */\n public sumLengths(): number {\n let sum = 0.0;\n const n = 2 * (this._xyInUse - 1); // Length already takes into account what specifically is in use\n const data = this._data;\n for (let i = 0; i < n; i += 2) sum += Geometry.hypotenuseXY(\n data[i + 2] - data[i],\n data[i + 3] - data[i + 1]);\n return sum;\n }\n /**\n * Multiply each x,y by the scale factor.\n * @param factor\n */\n public scaleInPlace(factor: number) {\n if (this._data) {\n const numFloat = this.float64Length;\n for (let i = 0; i < numFloat; i++)\n this._data[i] = this._data[i] * factor;\n }\n }\n /** Compute a point at fractional coordinate between points i and j */\n public interpolate(i: number, fraction: number, j: number, result?: Point2d): Point2d | undefined {\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\n const fraction0 = 1.0 - fraction;\n const data = this._data;\n i = 2 * i;\n j = 2 * j;\n return Point2d.create(\n fraction0 * data[i] + fraction * data[j],\n fraction0 * data[i + 1] + fraction * data[j + 1], result);\n }\n return undefined;\n }\n\n /** Sum the signed areas of the projection to xy plane */\n public areaXY(): number {\n let area = 0.0;\n const n = 2 * this._xyInUse; // float count !!\n if (n > 4) {\n const x0 = this._data[n - 2];\n const y0 = this._data[n - 1];\n let dx1 = this._data[0] - x0;\n let dy1 = this._data[1] - y0;\n let dx2 = 0;\n let dy2 = 0;\n for (let i = 2; i < n; i += 2, dx1 = dx2, dy1 = dy2) {\n dx2 = this._data[i] - x0;\n dy2 = this._data[i + 1] - y0;\n area += Geometry.crossProductXYXY(dx1, dy1, dx2, dy2);\n }\n }\n return 0.5 * area;\n }\n\n /** Compute a vector from index origin i to indexed target j */\n public override vectorIndexIndex(i: number, j: number, result?: Vector2d): Vector2d | undefined {\n if (!this.isIndexValid(i) || !this.isIndexValid(j))\n return undefined;\n const data = this._data;\n i = 2 * i;\n j = 2 * j;\n return Vector2d.create(data[j] - data[i], data[j + 1] - data[i + 1], result);\n }\n\n /** Compute a vector from origin to indexed target j */\n public override vectorXAndYIndex(origin: XAndY, j: number, result?: Vector2d): Vector2d | undefined {\n if (this.isIndexValid(j)) {\n const data = this._data;\n j = 2 * j;\n return Vector2d.create(\n data[j] - origin.x,\n data[j + 1] - origin.y, result);\n }\n return undefined;\n }\n\n /** Compute the cross product of vectors from from indexed origin to indexed targets i and j */\n public override crossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number): number | undefined {\n if (this.isIndexValid(originIndex) && this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\n const i = originIndex * 2;\n const j = targetAIndex * 2;\n const k = targetBIndex * 2;\n const data = this._data;\n return Geometry.crossProductXYXY(\n data[j] - data[i], data[j + 1] - data[i + 1],\n data[k] - data[i], data[k + 1] - data[i + 1]);\n }\n return undefined;\n }\n\n /** Compute the cross product of vectors from from origin to indexed targets i and j */\n public override crossProductXAndYIndexIndex(origin: XAndY, targetAIndex: number, targetBIndex: number): number | undefined {\n if (this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\n const j = targetAIndex * 2;\n const k = targetBIndex * 2;\n const data = this._data;\n return Geometry.crossProductXYXY(\n data[j] - origin.x, data[j + 1] - origin.y,\n data[k] - origin.x, data[k + 1] - origin.y);\n }\n return undefined;\n }\n\n /** Return the distance between two points in the array. */\n public distance(i: number, j: number): number | undefined {\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\n const i0 = 2 * i;\n const j0 = 2 * j;\n return Geometry.hypotenuseXY(\n this._data[j0] - this._data[i0],\n this._data[j0 + 1] - this._data[i0 + 1]);\n }\n return undefined;\n }\n /** Return the distance between an array point and the input point. */\n public distanceIndexToPoint(i: number, spacePoint: Point2d): number | undefined {\n if (this.isIndexValid(i)) {\n const i0 = 2 * i;\n return Geometry.hypotenuseXY(\n spacePoint.x - this._data[i0],\n spacePoint.y - this._data[i0 + 1]);\n }\n return undefined;\n }\n /** Test for nearly equal arrays. */\n public static isAlmostEqual(dataA: GrowableXYArray | undefined, dataB: GrowableXYArray | undefined): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA.getPoint2dAtUncheckedPointIndex(i).isAlmostEqual(dataB.getPoint2dAtUncheckedPointIndex(i)))\n return false;\n return true;\n }\n // if both are null it is equal, otherwise unequal\n return (!dataA && !dataB);\n }\n\n /** Return an array of block indices sorted per compareLexicalBlock function */\n public sortIndicesLexical(): Uint32Array {\n const n = this._xyInUse;\n // let numCompare = 0;\n const result = new Uint32Array(n);\n for (let i = 0; i < n; i++) result[i] = i;\n result.sort(\n (blockIndexA: number, blockIndexB: number) => {\n // numCompare++;\n return this.compareLexicalBlock(blockIndexA, blockIndexB);\n });\n // console.log (n, numCompare);\n return result;\n }\n\n /** compare two blocks in simple lexical order. */\n public compareLexicalBlock(ia: number, ib: number): number {\n let ax = 0;\n let bx = 0;\n for (let i = 0; i < 2; i++) {\n ax = this._data[ia * 2 + i];\n bx = this._data[ib * 2 + i];\n if (ax > bx) return 1;\n if (ax < bx) return -1;\n }\n return ia - ib; // so original order is maintained among duplicates !!!!\n }\n\n /** Access a single double at offset within a block. This has no index checking. */\n public component(pointIndex: number, componentIndex: number): number {\n return this._data[2 * pointIndex + componentIndex];\n }\n /** Toleranced equality test */\n public isAlmostEqual(other: GrowableXYArray, tolerance: number = Geometry.smallMetricDistance): boolean {\n const numXY = this._xyInUse;\n if (other._xyInUse !== numXY)\n return false;\n const dataA = this._data;\n const dataB = other._data;\n for (let i = 0; i < 2 * numXY; i++) {\n if (Math.abs(dataA[i] - dataB[i]) > tolerance)\n return false;\n }\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"GrowableXYArray.js","sourceRoot":"","sources":["../../../src/geometry3d/GrowableXYArray.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableXYZArray } from \"./GrowableXYZArray\";\nimport { IndexedXYCollection } from \"./IndexedXYCollection\";\nimport { MultiLineStringDataVariant } from \"./IndexedXYZCollection\";\nimport { Matrix3d } from \"./Matrix3d\";\nimport { Point2d, Vector2d } from \"./Point2dVector2d\";\nimport { Point3d } from \"./Point3dVector3d\";\nimport { Range2d } from \"./Range\";\nimport { Transform } from \"./Transform\";\nimport { XAndY, XYAndZ } from \"./XYZProps\";\n\n/** `GrowableXYArray` manages a (possibly growing) Float64Array to pack xy coordinates.\n * @public\n */\nexport class GrowableXYArray extends IndexedXYCollection {\n /**\n * array of packed xy xy xy components\n */\n private _data: Float64Array;\n /**\n * Number of xy tuples (not floats) in the array\n */\n private _xyInUse: number;\n /**\n * capacity in xy tuples. (not floats)\n */\n private _xyCapacity: number;\n /**\n * multiplier used by ensureCapacity to expand requested reallocation size\n */\n private _growthFactor: number;\n\n /** Construct a new GrowablePoint2d array.\n * @param numPoints initial capacity in xy tuples (default 8)\n * @param growthFactor used by ensureCapacity to expand requested reallocation size (default 1.5)\n */\n public constructor(numPoints: number = 8, growthFactor?: number) {\n super();\n this._data = new Float64Array(numPoints * 2); // 2 values per point\n this._xyInUse = 0;\n this._xyCapacity = numPoints;\n this._growthFactor = (undefined !== growthFactor && growthFactor >= 1.0) ? growthFactor : 1.5;\n }\n\n /** Copy xy points from source array. Does not reallocate or change active point count.\n * @param source array to copy from\n * @param sourceCount copy the first sourceCount points; all points if undefined\n * @param destOffset copy to instance array starting at this point index; zero if undefined\n * @return count and offset of points copied\n */\n protected copyData(source: Float64Array | number[], sourceCount?: number, destOffset?: number): {count: number, offset: number} {\n // validate inputs and convert from points to entries\n let myOffset = (undefined !== destOffset) ? destOffset * 2 : 0;\n if (myOffset < 0)\n myOffset = 0;\n if (myOffset >= this._data.length)\n return {count: 0, offset: 0};\n let myCount = (undefined !== sourceCount) ? sourceCount * 2 : source.length;\n if (myCount > 0) {\n if (myCount > source.length)\n myCount = source.length;\n if (myOffset + myCount > this._data.length)\n myCount = this._data.length - myOffset;\n if (myCount % 2 !== 0)\n myCount -= myCount % 2;\n }\n if (myCount <= 0)\n return {count: 0, offset: 0};\n if (myCount === source.length)\n this._data.set(source, myOffset);\n else if (source instanceof Float64Array)\n this._data.set(source.subarray(0, myCount), myOffset);\n else\n this._data.set(source.slice(0, myCount), myOffset);\n return {count: myCount / 2, offset: myOffset / 2};\n }\n\n /** The number of points in use. When the length is increased, the array is padded with zeroes. */\n public override get length() { return this._xyInUse; }\n public set length(newLength: number) { this.resize(newLength, true); }\n\n /** Return the number of float64 in use. */\n public get float64Length() { return this._xyInUse * 2; }\n /** Return the raw packed data.\n * * Note that the length of the returned Float64Array is a count of doubles, and includes the excess capacity\n */\n public float64Data(): Float64Array { return this._data; }\n\n /** If necessary, increase the capacity to a new pointCount. Current coordinates and point count (length) are unchanged. */\n public ensureCapacity(pointCapacity: number, applyGrowthFactor: boolean = true) {\n if (pointCapacity > this._xyCapacity) {\n if (applyGrowthFactor)\n pointCapacity *= this._growthFactor;\n const prevData = this._data;\n this._data = new Float64Array(pointCapacity * 2);\n this.copyData(prevData, this._xyInUse);\n this._xyCapacity = pointCapacity;\n }\n }\n /**\n * * If pointCount is less than current length, just reset current length to pointCount, effectively trimming active points but preserving original capacity.\n * * If pointCount is greater than current length, reallocate to exactly pointCount, copy existing points, and optionally pad excess with zero.\n * @param pointCount new number of active points in array\n * @param padWithZero when increasing point count, whether to zero out new points (default false)\n */\n public resize(pointCount: number, padWithZero?: boolean) {\n if (pointCount >= 0 && pointCount < this._xyInUse)\n this._xyInUse = pointCount;\n else if (pointCount > this._xyInUse) {\n this.ensureCapacity(pointCount, false);\n if (padWithZero ?? false)\n this._data.fill(0, this._xyInUse * 2);\n this._xyInUse = pointCount;\n }\n }\n /**\n * Make a copy of the (active) points in this array.\n * (The clone does NOT get excess capacity)\n */\n public clone(): GrowableXYArray {\n const newPoints = new GrowableXYArray(this.length);\n newPoints.copyData(this._data, this.length);\n newPoints._xyInUse = this.length;\n return newPoints;\n }\n /** Create an array populated from\n * Valid inputs are:\n * * Point2d\n * * Point3d\n * * An array of 2 doubles\n * * An array of 3 doubles\n * * A GrowableXYZArray\n * * A GrowableXYArray\n * * Any json object satisfying Point3d.isXAndY\n * * A Float64Array of doubles, interpreted as xyxy\n * * An array of any of the above\n */\n public static create(data: any, result?: GrowableXYArray): GrowableXYArray {\n if (result) {\n result.clear();\n } else {\n const pointCount = typeof data[0] === \"number\" ? data.length / 2 : data.length;\n result = new GrowableXYArray(pointCount);\n }\n result.pushFrom(data);\n return result;\n }\n\n /** Restructure MultiLineStringDataVariant as array of GrowableXYZArray\n * @deprecated in 4.x. Moved to GrowableXYZArray class.\n */\n public static createArrayOfGrowableXYZArray(data: MultiLineStringDataVariant): GrowableXYZArray[] | undefined {\n return GrowableXYZArray.createArrayOfGrowableXYZArray(data);\n }\n /** push a point to the end of the array */\n public push(toPush: XAndY) {\n this.pushXY(toPush.x, toPush.y);\n }\n\n /** push all points of an array */\n public pushAll(points: XAndY[]) {\n this.ensureCapacity(this._xyInUse + points.length, false);\n for (const p of points)\n this.push(p);\n }\n /** push all points of an array */\n public pushAllXYAndZ(points: XYAndZ[] | GrowableXYZArray) {\n this.ensureCapacity(this._xyInUse + points.length, false);\n if (points instanceof GrowableXYZArray) {\n const xyzBuffer = points.float64Data();\n const n = points.length * 3;\n for (let i = 0; i + 2 < n; i += 3)\n this.pushXY(xyzBuffer[i], xyzBuffer[i + 1]);\n } else {\n for (const p of points) this.pushXY(p.x, p.y);\n }\n }\n /** Push copies of points from variant sources.\n * Valid inputs are:\n * * Point2d\n * * Point3d\n * * An array of 2 doubles\n * * A GrowableXYArray\n * * A GrowableXYZArray\n * * Any json object satisfying Point3d.isXAndY\n * * A Float64Array of doubles, interpreted as xyxy\n * * An array of any of the above\n */\n public pushFrom(p: any) {\n if (p instanceof Point3d) {\n this.pushXY(p.x, p.y);\n } else if (p instanceof GrowableXYZArray) {\n this.pushAllXYAndZ(p);\n } else if (p instanceof Point2d) {\n this.pushXY(p.x, p.y);\n } else if (Geometry.isNumberArray(p, 3) || p instanceof Float64Array) {\n const xyToAdd = Math.trunc(p.length / 2);\n this.ensureCapacity(this._xyInUse + xyToAdd, false);\n this.copyData(p, xyToAdd, this._xyInUse);\n this._xyInUse += xyToAdd;\n } else if (Geometry.isNumberArray(p, 2)) {\n this.pushXY(p[0], p[1]);\n } else if (Array.isArray(p)) {\n // direct recursion re-wraps p and goes infinite. Unroll here.\n for (const q of p)\n this.pushFrom(q);\n } else if (Point3d.isXAndY(p)) {\n this.pushXY(p.x, p.y);\n } else if (p instanceof IndexedXYCollection) {\n const n = p.length;\n this.ensureCapacity(this._xyInUse + n, false);\n for (let i = 0; i < n; i++)\n this.pushXY(p.getXAtUncheckedPointIndex(i), p.getYAtUncheckedPointIndex(i));\n }\n }\n /**\n * Replicate numWrap xy values from the front of the array as new values at the end.\n * @param numWrap number of xy values to replicate\n */\n public pushWrap(numWrap: number) {\n if (this._xyInUse >= numWrap) {\n this.ensureCapacity(this._xyInUse + numWrap, false);\n for (let i = 0; i < numWrap; i++) {\n const k = 2 * i;\n this.pushXY(this._data[k], this._data[k + 1]);\n }\n }\n }\n /** push a point given by x,y coordinates */\n public pushXY(x: number, y: number) {\n this.ensureCapacity(this._xyInUse + 1);\n const index = this._xyInUse * 2;\n this._data[index] = x;\n this._data[index + 1] = y;\n this._xyInUse++;\n }\n\n /** Remove one point from the back.\n * * NOTE that (in the manner of std::vector native) this is \"just\" removing the point -- no point is NOT returned.\n * * Use `back ()` to get the last x,y assembled into a `Point2d `\n */\n public pop() {\n if (this._xyInUse > 0)\n this._xyInUse--;\n }\n /**\n * Test if index is valid for an xy (point or vector) within this array\n * @param index xy index to test.\n */\n public isIndexValid(index: number): boolean {\n if (index >= this._xyInUse || index < 0)\n return false;\n return true;\n }\n /**\n * Clear all xy data, but leave capacity unchanged.\n */\n public clear() {\n this._xyInUse = 0;\n }\n /**\n * Get a point by index, strongly typed as a Point2d. This is unchecked. Use atPoint2dIndex to have validity test.\n * @param pointIndex index to access\n * @param result optional result\n */\n public getPoint2dAtUncheckedPointIndex(pointIndex: number, result?: Point2d): Point2d {\n const index = 2 * pointIndex;\n return Point2d.create(this._data[index], this._data[index + 1], result);\n }\n\n /**\n * Get x coordinate by point index, with no index checking\n * @param pointIndex index to access\n */\n public override getXAtUncheckedPointIndex(pointIndex: number): number {\n return this._data[2 * pointIndex];\n }\n\n /**\n * Get y coordinate by point index, with no index checking\n * @param pointIndex index to access\n */\n public override getYAtUncheckedPointIndex(pointIndex: number): number {\n return this._data[2 * pointIndex + 1];\n }\n\n /**\n * Gather all points as a Point2d[]\n */\n public getPoint2dArray(): Point2d[] {\n const n = 2 * this._xyInUse;\n const result = [];\n const data = this._data;\n for (let i = 0; i < n; i += 2)\n result.push(Point2d.create(data[i], data[i + 1]));\n return result;\n }\n\n /** copy xy into strongly typed Point2d */\n public override getPoint2dAtCheckedPointIndex(pointIndex: number, result?: Point2d): Point2d | undefined {\n if (this.isIndexValid(pointIndex)) {\n const index = 2 * pointIndex;\n return Point2d.create(this._data[index], this._data[index + 1], result);\n }\n return undefined;\n }\n\n /** copy xy into strongly typed Vector2d */\n public override getVector2dAtCheckedVectorIndex(vectorIndex: number, result?: Vector2d): Vector2d | undefined {\n if (this.isIndexValid(vectorIndex)) {\n const index = 2 * vectorIndex;\n return Vector2d.create(this._data[index], this._data[index + 1], result);\n }\n return undefined;\n }\n\n /**\n * Read coordinates from source array, place them at index within this array.\n * @param destIndex point index where coordinates are to be placed in this array\n * @param source source array\n * @param sourceIndex point index in source array\n * @returns true if destIndex and sourceIndex are both valid.\n */\n public transferFromGrowableXYArray(destIndex: number, source: GrowableXYArray, sourceIndex: number): boolean {\n if (this.isIndexValid(destIndex) && source.isIndexValid(sourceIndex)) {\n const i = destIndex * 2;\n const j = sourceIndex * 2;\n this._data[i] = source._data[j];\n this._data[i + 1] = source._data[j + 1];\n return true;\n }\n return false;\n }\n\n /**\n * push coordinates from the source array to the end of this array.\n * @param source source array\n * @param sourceIndex xy index within the source. If undefined, push entire contents of source\n * @returns number of points pushed.\n */\n public pushFromGrowableXYArray(source: GrowableXYArray, sourceIndex?: number): number {\n // full array push . . .\n if (sourceIndex === undefined) {\n const numXYAdd = source.length;\n this.ensureCapacity(this.length + numXYAdd, false);\n this.copyData(source._data, numXYAdd, this.length);\n this._xyInUse += numXYAdd;\n return numXYAdd;\n }\n // single point push . . .\n if (source.isIndexValid(sourceIndex)) {\n const j = sourceIndex * 2;\n this.pushXY(source._data[j], source._data[j + 1]);\n return 1;\n }\n return 0;\n }\n\n /**\n * * Compute a point at fractional coordinate between points i and j of source\n * * push onto this array.\n */\n public pushInterpolatedFromGrowableXYArray(source: GrowableXYArray, i: number, fraction: number, j: number) {\n if (source.isIndexValid(i) && source.isIndexValid(j)) {\n const fraction0 = 1.0 - fraction;\n const data = source._data;\n i = 2 * i;\n j = 2 * j;\n this.pushXY(\n fraction0 * data[i] + fraction * data[j],\n fraction0 * data[i + 1] + fraction * data[j + 1]);\n }\n }\n\n /**\n * Create an array of xy points from source xyz points.\n * @param source source array of xyz\n * @param transform optional transform to apply to xyz points.\n * @param dest optional result.\n */\n public static createFromGrowableXYZArray(source: GrowableXYZArray, transform?: Transform, dest?: GrowableXYArray) {\n const numPoints = source.length;\n if (!dest)\n dest = new GrowableXYArray(numPoints);\n else {\n dest.ensureCapacity(numPoints, false);\n dest.clear();\n }\n if (transform) {\n const packedXYZ = source.float64Data();\n const nDouble = 3 * numPoints;\n let x, y, z;\n for (let i = 0; i < nDouble; i += 3) {\n x = packedXYZ[i];\n y = packedXYZ[i + 1];\n z = packedXYZ[i + 2];\n dest.pushXY(transform.multiplyComponentXYZ(0, x, y, z), transform.multiplyComponentXYZ(1, x, y, z));\n }\n } else {\n dest.pushAllXYAndZ(source);\n }\n return dest;\n }\n /**\n * Return the first point, or undefined if the array is empty.\n */\n public front(result?: Point2d): Point2d | undefined {\n if (this._xyInUse === 0) return undefined;\n return this.getPoint2dAtUncheckedPointIndex(0, result);\n }\n /**\n * Return the last point, or undefined if the array is empty.\n */\n public back(result?: Point2d): Point2d | undefined {\n if (this._xyInUse < 1) return undefined;\n return this.getPoint2dAtUncheckedPointIndex(this._xyInUse - 1, result);\n }\n /**\n * Set the coordinates of a single point.\n * @param pointIndex index of point to set\n * @param value coordinates to set\n */\n public setAtCheckedPointIndex(pointIndex: number, value: XAndY): boolean {\n if (!this.isIndexValid(pointIndex))\n return false;\n const index = pointIndex * 2;\n this._data[index] = value.x;\n this._data[index + 1] = value.y;\n return true;\n }\n /**\n * Set the coordinates of a single point given as coordinates.\n * @param pointIndex index of point to set\n * @param x x coordinate\n * @param y y coordinate\n */\n public setXYAtCheckedPointIndex(pointIndex: number, x: number, y: number): boolean {\n if (!this.isIndexValid(pointIndex))\n return false;\n const index = pointIndex * 2;\n this._data[index] = x;\n this._data[index + 1] = y;\n return true;\n }\n /**\n * Set the coordinates of a single point given as coordinates.\n * @deprecated in 3.x. Use setXYAtCheckedPointIndex instead\n */\n public setXYZAtCheckedPointIndex(pointIndex: number, x: number, y: number): boolean {\n return this.setXYAtCheckedPointIndex(pointIndex, x, y);\n }\n\n /**\n * Copy all points into a simple array of Point3d with given z.\n */\n public getPoint3dArray(z: number = 0): Point3d[] {\n const n = 2 * this._xyInUse;\n const result = [];\n const data = this._data;\n for (let i = 0; i < n; i += 2)\n result.push(Point3d.create(data[i], data[i + 1], z));\n return result;\n }\n /** reverse the order of points. */\n public reverseInPlace() {\n const n = this.length;\n let j0, j1;\n let a;\n const data = this._data;\n for (let i0 = 0, i1 = n - 1; i0 < i1; i0++, i1--) {\n j0 = 2 * i0;\n j1 = 2 * i1;\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\n j0++;\n j1++;\n a = data[j0]; data[j0] = data[j1]; data[j1] = a;\n }\n }\n\n /** multiply each point by the transform, replace values. */\n public multiplyTransformInPlace(transform: Transform) {\n const data = this._data;\n const nDouble = this.float64Length;\n const coffs = transform.matrix.coffs;\n const origin = transform.origin;\n const x0 = origin.x;\n const y0 = origin.y;\n let x = 0;\n let y = 0;\n for (let i = 0; i + 1 < nDouble; i += 2) {\n x = data[i];\n y = data[i + 1];\n data[i] = coffs[0] * x + coffs[1] * y + x0;\n data[i + 1] = coffs[3] * x + coffs[4] * y + y0;\n }\n }\n\n /** multiply each xy (as a vector) by matrix, replace values. */\n public multiplyMatrix3dInPlace(matrix: Matrix3d) {\n const data = this._data;\n const nDouble = this.float64Length;\n const coffs = matrix.coffs;\n let x = 0;\n let y = 0;\n for (let i = 0; i + 1 < nDouble; i += 2) {\n x = data[i];\n y = data[i + 1];\n data[i] = coffs[0] * x + coffs[1] * y;\n data[i + 1] = coffs[3] * x + coffs[4] * y;\n }\n }\n\n /** multiply each point by the transform, replace values. */\n public tryTransformInverseInPlace(transform: Transform): boolean {\n const data = this._data;\n const nDouble = this.float64Length;\n const matrix = transform.matrix;\n matrix.computeCachedInverse(true);\n const coffs = matrix.inverseCoffs;\n if (!coffs)\n return false;\n const origin = transform.origin;\n const x0 = origin.x;\n const y0 = origin.y;\n let x = 0;\n let y = 0;\n for (let i = 0; i + 1 < nDouble; i += 2) {\n x = data[i] - x0;\n y = data[i + 1] - y0;\n data[i] = coffs[0] * x + coffs[1] * y;\n data[i + 1] = coffs[3] * x + coffs[4] * y;\n }\n return true;\n }\n /** Extend a `Range2d`, optionally transforming the points. */\n public extendRange(rangeToExtend: Range2d, transform?: Transform) {\n const numDouble = this.float64Length;\n const data = this._data;\n if (transform) {\n for (let i = 0; i + 1 < numDouble; i += 2)\n rangeToExtend.extendTransformedXY(transform, data[i], data[i + 1]);\n } else {\n for (let i = 0; i + 1 < numDouble; i += 2)\n rangeToExtend.extendXY(data[i], data[i + 1]);\n\n }\n }\n /** sum the lengths of segments between points. */\n public sumLengths(): number {\n let sum = 0.0;\n const n = 2 * (this._xyInUse - 1); // Length already takes into account what specifically is in use\n const data = this._data;\n for (let i = 0; i < n; i += 2) sum += Geometry.hypotenuseXY(\n data[i + 2] - data[i],\n data[i + 3] - data[i + 1]);\n return sum;\n }\n /**\n * Multiply each x,y by the scale factor.\n * @param factor\n */\n public scaleInPlace(factor: number) {\n if (this._data) {\n const numFloat = this.float64Length;\n for (let i = 0; i < numFloat; i++)\n this._data[i] = this._data[i] * factor;\n }\n }\n /** Compute a point at fractional coordinate between points i and j */\n public interpolate(i: number, fraction: number, j: number, result?: Point2d): Point2d | undefined {\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\n const fraction0 = 1.0 - fraction;\n const data = this._data;\n i = 2 * i;\n j = 2 * j;\n return Point2d.create(\n fraction0 * data[i] + fraction * data[j],\n fraction0 * data[i + 1] + fraction * data[j + 1], result);\n }\n return undefined;\n }\n\n /** Sum the signed areas of the projection to xy plane */\n public areaXY(): number {\n let area = 0.0;\n const n = 2 * this._xyInUse; // float count !!\n if (n > 4) {\n const x0 = this._data[n - 2];\n const y0 = this._data[n - 1];\n let dx1 = this._data[0] - x0;\n let dy1 = this._data[1] - y0;\n let dx2 = 0;\n let dy2 = 0;\n for (let i = 2; i < n; i += 2, dx1 = dx2, dy1 = dy2) {\n dx2 = this._data[i] - x0;\n dy2 = this._data[i + 1] - y0;\n area += Geometry.crossProductXYXY(dx1, dy1, dx2, dy2);\n }\n }\n return 0.5 * area;\n }\n\n /** Compute a vector from index origin i to indexed target j */\n public override vectorIndexIndex(i: number, j: number, result?: Vector2d): Vector2d | undefined {\n if (!this.isIndexValid(i) || !this.isIndexValid(j))\n return undefined;\n const data = this._data;\n i = 2 * i;\n j = 2 * j;\n return Vector2d.create(data[j] - data[i], data[j + 1] - data[i + 1], result);\n }\n\n /** Compute a vector from origin to indexed target j */\n public override vectorXAndYIndex(origin: XAndY, j: number, result?: Vector2d): Vector2d | undefined {\n if (this.isIndexValid(j)) {\n const data = this._data;\n j = 2 * j;\n return Vector2d.create(\n data[j] - origin.x,\n data[j + 1] - origin.y, result);\n }\n return undefined;\n }\n\n /** Compute the cross product of vectors from from indexed origin to indexed targets i and j */\n public override crossProductIndexIndexIndex(originIndex: number, targetAIndex: number, targetBIndex: number): number | undefined {\n if (this.isIndexValid(originIndex) && this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\n const i = originIndex * 2;\n const j = targetAIndex * 2;\n const k = targetBIndex * 2;\n const data = this._data;\n return Geometry.crossProductXYXY(\n data[j] - data[i], data[j + 1] - data[i + 1],\n data[k] - data[i], data[k + 1] - data[i + 1]);\n }\n return undefined;\n }\n\n /** Compute the cross product of vectors from from origin to indexed targets i and j */\n public override crossProductXAndYIndexIndex(origin: XAndY, targetAIndex: number, targetBIndex: number): number | undefined {\n if (this.isIndexValid(targetAIndex) && this.isIndexValid(targetBIndex)) {\n const j = targetAIndex * 2;\n const k = targetBIndex * 2;\n const data = this._data;\n return Geometry.crossProductXYXY(\n data[j] - origin.x, data[j + 1] - origin.y,\n data[k] - origin.x, data[k + 1] - origin.y);\n }\n return undefined;\n }\n\n /** Return the distance between two points in the array. */\n public distance(i: number, j: number): number | undefined {\n if (this.isIndexValid(i) && this.isIndexValid(j)) {\n const i0 = 2 * i;\n const j0 = 2 * j;\n return Geometry.hypotenuseXY(\n this._data[j0] - this._data[i0],\n this._data[j0 + 1] - this._data[i0 + 1]);\n }\n return undefined;\n }\n /** Return the distance between an array point and the input point. */\n public distanceIndexToPoint(i: number, spacePoint: Point2d): number | undefined {\n if (this.isIndexValid(i)) {\n const i0 = 2 * i;\n return Geometry.hypotenuseXY(\n spacePoint.x - this._data[i0],\n spacePoint.y - this._data[i0 + 1]);\n }\n return undefined;\n }\n /** Test for nearly equal arrays. */\n public static isAlmostEqual(dataA: GrowableXYArray | undefined, dataB: GrowableXYArray | undefined): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA.getPoint2dAtUncheckedPointIndex(i).isAlmostEqual(dataB.getPoint2dAtUncheckedPointIndex(i)))\n return false;\n return true;\n }\n // if both are null it is equal, otherwise unequal\n return (!dataA && !dataB);\n }\n\n /** Return an array of block indices sorted per compareLexicalBlock function */\n public sortIndicesLexical(): Uint32Array {\n const n = this._xyInUse;\n // let numCompare = 0;\n const result = new Uint32Array(n);\n for (let i = 0; i < n; i++) result[i] = i;\n result.sort(\n (blockIndexA: number, blockIndexB: number) => {\n // numCompare++;\n return this.compareLexicalBlock(blockIndexA, blockIndexB);\n });\n // console.log (n, numCompare);\n return result;\n }\n\n /** compare two blocks in simple lexical order. */\n public compareLexicalBlock(ia: number, ib: number): number {\n let ax = 0;\n let bx = 0;\n for (let i = 0; i < 2; i++) {\n ax = this._data[ia * 2 + i];\n bx = this._data[ib * 2 + i];\n if (ax > bx) return 1;\n if (ax < bx) return -1;\n }\n return ia - ib; // so original order is maintained among duplicates !!!!\n }\n\n /** Access a single double at offset within a block. This has no index checking. */\n public component(pointIndex: number, componentIndex: number): number {\n return this._data[2 * pointIndex + componentIndex];\n }\n /** Toleranced equality test */\n public isAlmostEqual(other: GrowableXYArray, tolerance: number = Geometry.smallMetricDistance): boolean {\n const numXY = this._xyInUse;\n if (other._xyInUse !== numXY)\n return false;\n const dataA = this._data;\n const dataB = other._data;\n for (let i = 0; i < 2 * numXY; i++) {\n if (Math.abs(dataA[i] - dataB[i]) > tolerance)\n return false;\n }\n return true;\n }\n}\n"]}