@itwin/core-geometry 5.0.0-dev.8 → 5.0.0-dev.82

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 (948) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/lib/cjs/Constant.js +17 -17
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.js +35 -35
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/AkimaCurve3d.js +3 -1
  7. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.d.ts +90 -54
  9. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  10. package/lib/cjs/bspline/BSpline1dNd.js +137 -84
  11. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineCurve.d.ts +193 -155
  13. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  14. package/lib/cjs/bspline/BSplineCurve.js +249 -181
  15. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurve3dH.js +1 -0
  17. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  18. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  19. package/lib/cjs/bspline/BSplineCurveOps.js +18 -21
  20. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  21. package/lib/cjs/bspline/BSplineSurface.js +22 -2
  22. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  23. package/lib/cjs/bspline/Bezier1dNd.js +6 -0
  24. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  25. package/lib/cjs/bspline/BezierCurve3d.d.ts +3 -1
  26. package/lib/cjs/bspline/BezierCurve3d.d.ts.map +1 -1
  27. package/lib/cjs/bspline/BezierCurve3d.js +5 -5
  28. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  29. package/lib/cjs/bspline/BezierCurve3dH.js +2 -0
  30. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  31. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  32. package/lib/cjs/bspline/BezierCurveBase.js +21 -2
  33. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  34. package/lib/cjs/bspline/InterpolationCurve3d.js +12 -1
  35. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  36. package/lib/cjs/bspline/KnotVector.d.ts +82 -60
  37. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  38. package/lib/cjs/bspline/KnotVector.js +144 -84
  39. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  40. package/lib/cjs/bspline/SurfaceLocationDetail.js +12 -0
  41. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  42. package/lib/cjs/clipping/AlternatingConvexClipTree.js +14 -13
  43. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  44. package/lib/cjs/clipping/BooleanClipNode.js +4 -0
  45. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  46. package/lib/cjs/clipping/ClipPlane.js +10 -1
  47. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  48. package/lib/cjs/clipping/ClipPrimitive.js +19 -0
  49. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  50. package/lib/cjs/clipping/ClipUtils.js +5 -1
  51. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  52. package/lib/cjs/clipping/ClipVector.js +11 -8
  53. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  54. package/lib/cjs/clipping/ConvexClipPlaneSet.js +5 -3
  55. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  56. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  57. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  58. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  59. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  60. package/lib/cjs/core-geometry.d.ts +1 -0
  61. package/lib/cjs/core-geometry.d.ts.map +1 -1
  62. package/lib/cjs/core-geometry.js +1 -0
  63. package/lib/cjs/core-geometry.js.map +1 -1
  64. package/lib/cjs/curve/Arc3d.d.ts +17 -3
  65. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  66. package/lib/cjs/curve/Arc3d.js +50 -21
  67. package/lib/cjs/curve/Arc3d.js.map +1 -1
  68. package/lib/cjs/curve/ConstructCurveBetweenCurves.js +3 -0
  69. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  70. package/lib/cjs/curve/CoordinateXYZ.js +3 -2
  71. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  72. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  73. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  74. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +25 -10
  75. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  76. package/lib/cjs/curve/CurveCollection.d.ts +10 -0
  77. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  78. package/lib/cjs/curve/CurveCollection.js +35 -9
  79. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  80. package/lib/cjs/curve/CurveFactory.d.ts +87 -53
  81. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  82. package/lib/cjs/curve/CurveFactory.js +213 -135
  83. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  84. package/lib/cjs/curve/CurveLocationDetail.js +44 -0
  85. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  86. package/lib/cjs/curve/CurvePrimitive.d.ts +7 -10
  87. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  88. package/lib/cjs/curve/CurvePrimitive.js +27 -12
  89. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  90. package/lib/cjs/curve/CurveProcessor.js +2 -0
  91. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  92. package/lib/cjs/curve/CurveWireMomentsXYZ.js +2 -0
  93. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  94. package/lib/cjs/curve/LineSegment3d.js +6 -2
  95. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  96. package/lib/cjs/curve/LineString3d.js +27 -7
  97. package/lib/cjs/curve/LineString3d.js.map +1 -1
  98. package/lib/cjs/curve/Loop.js +12 -4
  99. package/lib/cjs/curve/Loop.js.map +1 -1
  100. package/lib/cjs/curve/OffsetOptions.js +25 -21
  101. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  102. package/lib/cjs/curve/ParityRegion.js +4 -2
  103. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  104. package/lib/cjs/curve/Path.js +2 -2
  105. package/lib/cjs/curve/Path.js.map +1 -1
  106. package/lib/cjs/curve/PointString3d.js +3 -2
  107. package/lib/cjs/curve/PointString3d.js.map +1 -1
  108. package/lib/cjs/curve/ProxyCurve.js +1 -0
  109. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  110. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  111. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  112. package/lib/cjs/curve/Query/CurveSplitContext.js +3 -0
  113. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  114. package/lib/cjs/curve/Query/CylindricalRange.js +6 -2
  115. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  116. package/lib/cjs/curve/Query/PlanarSubdivision.js +4 -6
  117. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  118. package/lib/cjs/curve/Query/StrokeCountChain.js +12 -0
  119. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  120. package/lib/cjs/curve/Query/StrokeCountMap.js +14 -0
  121. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  122. package/lib/cjs/curve/RegionMomentsXY.js +4 -5
  123. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  124. package/lib/cjs/curve/RegionOps.js +9 -10
  125. package/lib/cjs/curve/RegionOps.js.map +1 -1
  126. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +24 -1
  127. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  128. package/lib/cjs/curve/StrokeOptions.d.ts +4 -4
  129. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  130. package/lib/cjs/curve/StrokeOptions.js +23 -6
  131. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  132. package/lib/cjs/curve/UnionRegion.js +4 -2
  133. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  134. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  135. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  136. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js +6 -0
  137. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  138. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js +2 -0
  139. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  140. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  141. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  142. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  143. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  144. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  145. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  146. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  147. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  148. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  149. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  150. package/lib/cjs/curve/internalContexts/CurveLengthContext.js +6 -0
  151. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  152. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  153. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  154. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  155. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  156. package/lib/cjs/curve/internalContexts/GapSearchContext.js +1 -0
  157. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  158. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +12 -0
  159. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  160. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  161. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  162. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  163. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  164. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +22 -4
  165. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  166. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +1 -0
  167. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  168. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js +3 -0
  169. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  170. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  171. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  172. package/lib/cjs/curve/spiral/ClothoidSeries.js +4 -0
  173. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  174. package/lib/cjs/curve/spiral/CubicEvaluator.js +2 -0
  175. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  176. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +4 -0
  177. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  178. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  179. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  180. package/lib/cjs/curve/spiral/DirectSpiral3d.js +12 -2
  181. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  182. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +24 -4
  183. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  184. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  185. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  186. package/lib/cjs/curve/spiral/NormalizedTransition.js +5 -0
  187. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  188. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  189. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  190. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +10 -0
  191. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  192. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +10 -0
  193. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  194. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +6 -0
  195. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  196. package/lib/cjs/geometry3d/Angle.js +18 -16
  197. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  198. package/lib/cjs/geometry3d/AngleSweep.d.ts +7 -2
  199. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  200. package/lib/cjs/geometry3d/AngleSweep.js +14 -2
  201. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  202. package/lib/cjs/geometry3d/BarycentricTriangle.js +25 -0
  203. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  204. package/lib/cjs/geometry3d/BilinearPatch.js +8 -0
  205. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  206. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +5 -0
  207. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  208. package/lib/cjs/geometry3d/Ellipsoid.js +48 -0
  209. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  210. package/lib/cjs/geometry3d/FrameBuilder.js +12 -4
  211. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  212. package/lib/cjs/geometry3d/FrustumAnimation.js +7 -0
  213. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  214. package/lib/cjs/geometry3d/GrowableBlockedArray.js +12 -0
  215. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  216. package/lib/cjs/geometry3d/GrowableFloat64Array.js +3 -0
  217. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  218. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +0 -5
  219. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  220. package/lib/cjs/geometry3d/GrowableXYArray.js +16 -7
  221. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  222. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +32 -10
  223. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  224. package/lib/cjs/geometry3d/GrowableXYZArray.js +70 -16
  225. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  226. package/lib/cjs/geometry3d/IndexedCollectionInterval.js +6 -0
  227. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  228. package/lib/cjs/geometry3d/IndexedXYCollection.js +1 -0
  229. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  230. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +13 -2
  231. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  232. package/lib/cjs/geometry3d/IndexedXYZCollection.js +26 -11
  233. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  234. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  235. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  236. package/lib/cjs/geometry3d/Matrix3d.d.ts +3 -4
  237. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  238. package/lib/cjs/geometry3d/Matrix3d.js +36 -14
  239. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  240. package/lib/cjs/geometry3d/OrderedRotationAngles.js +10 -2
  241. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  242. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  243. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  244. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  245. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  246. package/lib/cjs/geometry3d/Point2dArrayCarrier.js +2 -0
  247. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  248. package/lib/cjs/geometry3d/Point2dVector2d.js +4 -0
  249. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  250. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +3 -1
  251. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  252. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +6 -6
  253. package/lib/cjs/geometry3d/Point3dVector3d.js +12 -6
  254. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  255. package/lib/cjs/geometry3d/PointHelpers.d.ts +3 -3
  256. package/lib/cjs/geometry3d/PointHelpers.js +8 -8
  257. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  258. package/lib/cjs/geometry3d/PointStreaming.js +12 -4
  259. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  260. package/lib/cjs/geometry3d/PolygonOps.d.ts +2 -2
  261. package/lib/cjs/geometry3d/PolygonOps.js +62 -25
  262. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  263. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  264. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  265. package/lib/cjs/geometry3d/PolylineOps.d.ts +9 -5
  266. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  267. package/lib/cjs/geometry3d/PolylineOps.js +12 -5
  268. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  269. package/lib/cjs/geometry3d/Range.js +21 -4
  270. package/lib/cjs/geometry3d/Range.js.map +1 -1
  271. package/lib/cjs/geometry3d/Ray2d.js +2 -0
  272. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  273. package/lib/cjs/geometry3d/Ray3d.d.ts +2 -2
  274. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  275. package/lib/cjs/geometry3d/Ray3d.js +20 -11
  276. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  277. package/lib/cjs/geometry3d/ReusableObjectCache.js +4 -0
  278. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  279. package/lib/cjs/geometry3d/Segment1d.js +4 -0
  280. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  281. package/lib/cjs/geometry3d/SortablePolygon.js +11 -0
  282. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  283. package/lib/cjs/geometry3d/Transform.js +3 -0
  284. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  285. package/lib/cjs/geometry3d/YawPitchRollAngles.js +6 -0
  286. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  287. package/lib/cjs/geometry4d/Map4d.js +2 -0
  288. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  289. package/lib/cjs/geometry4d/Matrix4d.js +1 -0
  290. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  291. package/lib/cjs/geometry4d/MomentData.d.ts +72 -73
  292. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  293. package/lib/cjs/geometry4d/MomentData.js +90 -66
  294. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  295. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  296. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  297. package/lib/cjs/geometry4d/Point4d.js +2 -0
  298. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  299. package/lib/cjs/numerics/BezierPolynomials.js +8 -0
  300. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  301. package/lib/cjs/numerics/ClusterableArray.js +29 -13
  302. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  303. package/lib/cjs/numerics/Complex.js +2 -0
  304. package/lib/cjs/numerics/Complex.js.map +1 -1
  305. package/lib/cjs/numerics/ConvexPolygon2d.js +3 -0
  306. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  307. package/lib/cjs/numerics/Newton.js +59 -4
  308. package/lib/cjs/numerics/Newton.js.map +1 -1
  309. package/lib/cjs/numerics/PascalCoefficients.js +1 -1
  310. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  311. package/lib/cjs/numerics/PolarData.js +13 -1
  312. package/lib/cjs/numerics/PolarData.js.map +1 -1
  313. package/lib/cjs/numerics/Polynomials.js +64 -26
  314. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  315. package/lib/cjs/numerics/Quadrature.js +26 -20
  316. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  317. package/lib/cjs/numerics/TriDiagonalSystem.js +11 -0
  318. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  319. package/lib/cjs/numerics/UnionFind.js +1 -0
  320. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  321. package/lib/cjs/numerics/UsageSums.js +10 -0
  322. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  323. package/lib/cjs/polyface/AuxData.js +16 -0
  324. package/lib/cjs/polyface/AuxData.js.map +1 -1
  325. package/lib/cjs/polyface/BoxTopology.js +67 -67
  326. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  327. package/lib/cjs/polyface/FacetFaceData.d.ts +1 -1
  328. package/lib/cjs/polyface/FacetFaceData.js +3 -1
  329. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  330. package/lib/cjs/polyface/FacetLocationDetail.js +30 -0
  331. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  332. package/lib/cjs/polyface/FacetOrientation.js +12 -1
  333. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  334. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  335. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  336. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +33 -23
  337. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  338. package/lib/cjs/polyface/IndexedEdgeMatcher.js +63 -33
  339. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  340. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  341. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  342. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +11 -2
  343. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  344. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  345. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  346. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +353 -0
  347. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -0
  348. package/lib/cjs/polyface/Polyface.d.ts +35 -10
  349. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  350. package/lib/cjs/polyface/Polyface.js +73 -12
  351. package/lib/cjs/polyface/Polyface.js.map +1 -1
  352. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +14 -27
  353. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  354. package/lib/cjs/polyface/PolyfaceBuilder.js +47 -79
  355. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  356. package/lib/cjs/polyface/PolyfaceClip.js +8 -0
  357. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  358. package/lib/cjs/polyface/PolyfaceData.d.ts +28 -0
  359. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  360. package/lib/cjs/polyface/PolyfaceData.js +87 -5
  361. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  362. package/lib/cjs/polyface/PolyfaceQuery.js +47 -7
  363. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  364. package/lib/cjs/polyface/RangeLengthData.js +7 -0
  365. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  366. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  367. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  368. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js +5 -2
  369. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  370. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  371. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  372. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  373. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  374. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +5 -0
  375. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  376. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  377. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  378. package/lib/cjs/polyface/TaggedNumericData.js +8 -0
  379. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  380. package/lib/cjs/polyface/TriangleCandidate.js +3 -0
  381. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  382. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  383. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  384. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  385. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  386. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  387. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  388. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  389. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  390. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +32 -0
  391. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  392. package/lib/cjs/polyface/multiclip/RangeSearch.js +5 -5
  393. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  394. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  395. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  396. package/lib/cjs/polyface/multiclip/XYPointBuckets.js +6 -0
  397. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  398. package/lib/cjs/serialization/BGFBAccessors.js +82 -164
  399. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  400. package/lib/cjs/serialization/BGFBReader.js +22 -22
  401. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  402. package/lib/cjs/serialization/BGFBWriter.js +1 -0
  403. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  404. package/lib/cjs/serialization/DeepCompare.js +17 -17
  405. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  406. package/lib/cjs/serialization/GeometrySamples.d.ts +5 -5
  407. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  408. package/lib/cjs/serialization/GeometrySamples.js +113 -112
  409. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  410. package/lib/cjs/serialization/IModelJsonSchema.d.ts +16 -22
  411. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  412. package/lib/cjs/serialization/IModelJsonSchema.js +4 -5
  413. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  414. package/lib/cjs/solid/Box.js +7 -2
  415. package/lib/cjs/solid/Box.js.map +1 -1
  416. package/lib/cjs/solid/Cone.js +6 -2
  417. package/lib/cjs/solid/Cone.js.map +1 -1
  418. package/lib/cjs/solid/LinearSweep.js +4 -2
  419. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  420. package/lib/cjs/solid/RotationalSweep.js +5 -2
  421. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  422. package/lib/cjs/solid/RuledSweep.d.ts +26 -23
  423. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  424. package/lib/cjs/solid/RuledSweep.js +32 -24
  425. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  426. package/lib/cjs/solid/SolidPrimitive.d.ts +12 -11
  427. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  428. package/lib/cjs/solid/SolidPrimitive.js +11 -6
  429. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  430. package/lib/cjs/solid/Sphere.js +4 -2
  431. package/lib/cjs/solid/Sphere.js.map +1 -1
  432. package/lib/cjs/solid/SweepContour.d.ts +24 -15
  433. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  434. package/lib/cjs/solid/SweepContour.js +33 -15
  435. package/lib/cjs/solid/SweepContour.js.map +1 -1
  436. package/lib/cjs/solid/TorusPipe.js +7 -2
  437. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  438. package/lib/cjs/topology/ChainMerge.js +16 -4
  439. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  440. package/lib/cjs/topology/Graph.js +41 -6
  441. package/lib/cjs/topology/Graph.js.map +1 -1
  442. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  443. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  444. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  445. package/lib/cjs/topology/HalfEdgeGraphSearch.js +2 -0
  446. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  447. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +9 -2
  448. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  449. package/lib/cjs/topology/HalfEdgeGraphValidation.js +7 -9
  450. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  451. package/lib/cjs/topology/HalfEdgeMarkSet.js +5 -0
  452. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  453. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +6 -0
  454. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  455. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +1 -0
  456. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  457. package/lib/cjs/topology/HalfEdgePositionDetail.js +16 -0
  458. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  459. package/lib/cjs/topology/HalfEdgePriorityQueue.js +2 -0
  460. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  461. package/lib/cjs/topology/InsertAndRetriangulateContext.js +4 -0
  462. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  463. package/lib/cjs/topology/MaskManager.js +3 -0
  464. package/lib/cjs/topology/MaskManager.js.map +1 -1
  465. package/lib/cjs/topology/Merging.js +11 -6
  466. package/lib/cjs/topology/Merging.js.map +1 -1
  467. package/lib/cjs/topology/RegularizeFace.js +22 -0
  468. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  469. package/lib/cjs/topology/SignedDataSummary.js +22 -0
  470. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  471. package/lib/cjs/topology/Triangulation.js +21 -11
  472. package/lib/cjs/topology/Triangulation.js.map +1 -1
  473. package/lib/cjs/topology/XYParitySearchContext.js +13 -0
  474. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  475. package/lib/esm/Constant.js +17 -17
  476. package/lib/esm/Constant.js.map +1 -1
  477. package/lib/esm/Geometry.js +35 -35
  478. package/lib/esm/Geometry.js.map +1 -1
  479. package/lib/esm/bspline/AkimaCurve3d.js +3 -1
  480. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  481. package/lib/esm/bspline/BSpline1dNd.d.ts +90 -54
  482. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  483. package/lib/esm/bspline/BSpline1dNd.js +137 -84
  484. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  485. package/lib/esm/bspline/BSplineCurve.d.ts +193 -155
  486. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  487. package/lib/esm/bspline/BSplineCurve.js +249 -181
  488. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  489. package/lib/esm/bspline/BSplineCurve3dH.js +1 -0
  490. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  491. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  492. package/lib/esm/bspline/BSplineCurveOps.js +18 -21
  493. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  494. package/lib/esm/bspline/BSplineSurface.js +22 -2
  495. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  496. package/lib/esm/bspline/Bezier1dNd.js +6 -0
  497. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  498. package/lib/esm/bspline/BezierCurve3d.d.ts +3 -1
  499. package/lib/esm/bspline/BezierCurve3d.d.ts.map +1 -1
  500. package/lib/esm/bspline/BezierCurve3d.js +5 -5
  501. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  502. package/lib/esm/bspline/BezierCurve3dH.js +2 -0
  503. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  504. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  505. package/lib/esm/bspline/BezierCurveBase.js +21 -2
  506. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  507. package/lib/esm/bspline/InterpolationCurve3d.js +12 -1
  508. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  509. package/lib/esm/bspline/KnotVector.d.ts +82 -60
  510. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  511. package/lib/esm/bspline/KnotVector.js +144 -84
  512. package/lib/esm/bspline/KnotVector.js.map +1 -1
  513. package/lib/esm/bspline/SurfaceLocationDetail.js +12 -0
  514. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  515. package/lib/esm/clipping/AlternatingConvexClipTree.js +14 -13
  516. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  517. package/lib/esm/clipping/BooleanClipNode.js +4 -0
  518. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  519. package/lib/esm/clipping/ClipPlane.js +10 -1
  520. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  521. package/lib/esm/clipping/ClipPrimitive.js +19 -0
  522. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  523. package/lib/esm/clipping/ClipUtils.js +5 -1
  524. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  525. package/lib/esm/clipping/ClipVector.js +11 -8
  526. package/lib/esm/clipping/ClipVector.js.map +1 -1
  527. package/lib/esm/clipping/ConvexClipPlaneSet.js +5 -3
  528. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  529. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  530. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  531. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  532. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  533. package/lib/esm/core-geometry.d.ts +1 -0
  534. package/lib/esm/core-geometry.d.ts.map +1 -1
  535. package/lib/esm/core-geometry.js +1 -0
  536. package/lib/esm/core-geometry.js.map +1 -1
  537. package/lib/esm/curve/Arc3d.d.ts +17 -3
  538. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  539. package/lib/esm/curve/Arc3d.js +50 -21
  540. package/lib/esm/curve/Arc3d.js.map +1 -1
  541. package/lib/esm/curve/ConstructCurveBetweenCurves.js +3 -0
  542. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  543. package/lib/esm/curve/CoordinateXYZ.js +3 -2
  544. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  545. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  546. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  547. package/lib/esm/curve/CurveChainWithDistanceIndex.js +25 -10
  548. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  549. package/lib/esm/curve/CurveCollection.d.ts +10 -0
  550. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  551. package/lib/esm/curve/CurveCollection.js +35 -9
  552. package/lib/esm/curve/CurveCollection.js.map +1 -1
  553. package/lib/esm/curve/CurveFactory.d.ts +87 -53
  554. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  555. package/lib/esm/curve/CurveFactory.js +213 -135
  556. package/lib/esm/curve/CurveFactory.js.map +1 -1
  557. package/lib/esm/curve/CurveLocationDetail.js +44 -0
  558. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  559. package/lib/esm/curve/CurvePrimitive.d.ts +7 -10
  560. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  561. package/lib/esm/curve/CurvePrimitive.js +27 -12
  562. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  563. package/lib/esm/curve/CurveProcessor.js +2 -0
  564. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  565. package/lib/esm/curve/CurveWireMomentsXYZ.js +2 -0
  566. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  567. package/lib/esm/curve/LineSegment3d.js +6 -2
  568. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  569. package/lib/esm/curve/LineString3d.js +27 -7
  570. package/lib/esm/curve/LineString3d.js.map +1 -1
  571. package/lib/esm/curve/Loop.js +12 -4
  572. package/lib/esm/curve/Loop.js.map +1 -1
  573. package/lib/esm/curve/OffsetOptions.js +25 -21
  574. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  575. package/lib/esm/curve/ParityRegion.js +4 -2
  576. package/lib/esm/curve/ParityRegion.js.map +1 -1
  577. package/lib/esm/curve/Path.js +2 -2
  578. package/lib/esm/curve/Path.js.map +1 -1
  579. package/lib/esm/curve/PointString3d.js +3 -2
  580. package/lib/esm/curve/PointString3d.js.map +1 -1
  581. package/lib/esm/curve/ProxyCurve.js +1 -0
  582. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  583. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  584. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  585. package/lib/esm/curve/Query/CurveSplitContext.js +3 -0
  586. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  587. package/lib/esm/curve/Query/CylindricalRange.js +6 -2
  588. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  589. package/lib/esm/curve/Query/PlanarSubdivision.js +4 -6
  590. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  591. package/lib/esm/curve/Query/StrokeCountChain.js +12 -0
  592. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  593. package/lib/esm/curve/Query/StrokeCountMap.js +14 -0
  594. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  595. package/lib/esm/curve/RegionMomentsXY.js +4 -5
  596. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  597. package/lib/esm/curve/RegionOps.js +9 -10
  598. package/lib/esm/curve/RegionOps.js.map +1 -1
  599. package/lib/esm/curve/RegionOpsClassificationSweeps.js +24 -1
  600. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  601. package/lib/esm/curve/StrokeOptions.d.ts +4 -4
  602. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  603. package/lib/esm/curve/StrokeOptions.js +23 -6
  604. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  605. package/lib/esm/curve/UnionRegion.js +4 -2
  606. package/lib/esm/curve/UnionRegion.js.map +1 -1
  607. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  608. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  609. package/lib/esm/curve/internalContexts/ChainCollectorContext.js +6 -0
  610. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  611. package/lib/esm/curve/internalContexts/CloneCurvesContext.js +2 -0
  612. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  613. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  614. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  615. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  616. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  617. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  618. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  619. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  620. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  621. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  622. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  623. package/lib/esm/curve/internalContexts/CurveLengthContext.js +6 -0
  624. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  625. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  626. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  627. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  628. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  629. package/lib/esm/curve/internalContexts/GapSearchContext.js +1 -0
  630. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  631. package/lib/esm/curve/internalContexts/MultiChainCollector.js +12 -0
  632. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  633. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  634. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  635. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  636. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  637. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +22 -4
  638. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  639. package/lib/esm/curve/internalContexts/SumLengthsContext.js +1 -0
  640. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  641. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js +3 -0
  642. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  643. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  644. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  645. package/lib/esm/curve/spiral/ClothoidSeries.js +4 -0
  646. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  647. package/lib/esm/curve/spiral/CubicEvaluator.js +2 -0
  648. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  649. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +4 -0
  650. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  651. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  652. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  653. package/lib/esm/curve/spiral/DirectSpiral3d.js +12 -2
  654. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  655. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +24 -4
  656. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  657. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  658. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  659. package/lib/esm/curve/spiral/NormalizedTransition.js +5 -0
  660. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  661. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  662. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  663. package/lib/esm/curve/spiral/TransitionConditionalProperties.js +10 -0
  664. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  665. package/lib/esm/curve/spiral/TransitionSpiral3d.js +10 -0
  666. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  667. package/lib/esm/curve/spiral/XYCurveEvaluator.js +6 -0
  668. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  669. package/lib/esm/geometry3d/Angle.js +18 -16
  670. package/lib/esm/geometry3d/Angle.js.map +1 -1
  671. package/lib/esm/geometry3d/AngleSweep.d.ts +7 -2
  672. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  673. package/lib/esm/geometry3d/AngleSweep.js +14 -2
  674. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  675. package/lib/esm/geometry3d/BarycentricTriangle.js +25 -0
  676. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  677. package/lib/esm/geometry3d/BilinearPatch.js +8 -0
  678. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  679. package/lib/esm/geometry3d/CoincidentGeometryOps.js +5 -0
  680. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  681. package/lib/esm/geometry3d/Ellipsoid.js +48 -0
  682. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  683. package/lib/esm/geometry3d/FrameBuilder.js +12 -4
  684. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  685. package/lib/esm/geometry3d/FrustumAnimation.js +7 -0
  686. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  687. package/lib/esm/geometry3d/GrowableBlockedArray.js +12 -0
  688. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  689. package/lib/esm/geometry3d/GrowableFloat64Array.js +3 -0
  690. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  691. package/lib/esm/geometry3d/GrowableXYArray.d.ts +0 -5
  692. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  693. package/lib/esm/geometry3d/GrowableXYArray.js +16 -7
  694. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  695. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +32 -10
  696. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  697. package/lib/esm/geometry3d/GrowableXYZArray.js +70 -16
  698. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  699. package/lib/esm/geometry3d/IndexedCollectionInterval.js +6 -0
  700. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  701. package/lib/esm/geometry3d/IndexedXYCollection.js +1 -0
  702. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  703. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +13 -2
  704. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  705. package/lib/esm/geometry3d/IndexedXYZCollection.js +26 -11
  706. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  707. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  708. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  709. package/lib/esm/geometry3d/Matrix3d.d.ts +3 -4
  710. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  711. package/lib/esm/geometry3d/Matrix3d.js +36 -14
  712. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  713. package/lib/esm/geometry3d/OrderedRotationAngles.js +10 -2
  714. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  715. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  716. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  717. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  718. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  719. package/lib/esm/geometry3d/Point2dArrayCarrier.js +2 -0
  720. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  721. package/lib/esm/geometry3d/Point2dVector2d.js +4 -0
  722. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  723. package/lib/esm/geometry3d/Point3dArrayCarrier.js +3 -1
  724. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  725. package/lib/esm/geometry3d/Point3dVector3d.d.ts +6 -6
  726. package/lib/esm/geometry3d/Point3dVector3d.js +12 -6
  727. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  728. package/lib/esm/geometry3d/PointHelpers.d.ts +3 -3
  729. package/lib/esm/geometry3d/PointHelpers.js +8 -8
  730. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  731. package/lib/esm/geometry3d/PointStreaming.js +12 -4
  732. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  733. package/lib/esm/geometry3d/PolygonOps.d.ts +2 -2
  734. package/lib/esm/geometry3d/PolygonOps.js +62 -25
  735. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  736. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  737. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  738. package/lib/esm/geometry3d/PolylineOps.d.ts +9 -5
  739. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  740. package/lib/esm/geometry3d/PolylineOps.js +12 -5
  741. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  742. package/lib/esm/geometry3d/Range.js +21 -4
  743. package/lib/esm/geometry3d/Range.js.map +1 -1
  744. package/lib/esm/geometry3d/Ray2d.js +2 -0
  745. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  746. package/lib/esm/geometry3d/Ray3d.d.ts +2 -2
  747. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  748. package/lib/esm/geometry3d/Ray3d.js +20 -11
  749. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  750. package/lib/esm/geometry3d/ReusableObjectCache.js +4 -0
  751. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  752. package/lib/esm/geometry3d/Segment1d.js +4 -0
  753. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  754. package/lib/esm/geometry3d/SortablePolygon.js +11 -0
  755. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  756. package/lib/esm/geometry3d/Transform.js +3 -0
  757. package/lib/esm/geometry3d/Transform.js.map +1 -1
  758. package/lib/esm/geometry3d/YawPitchRollAngles.js +6 -0
  759. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  760. package/lib/esm/geometry4d/Map4d.js +2 -0
  761. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  762. package/lib/esm/geometry4d/Matrix4d.js +1 -0
  763. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  764. package/lib/esm/geometry4d/MomentData.d.ts +72 -73
  765. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  766. package/lib/esm/geometry4d/MomentData.js +90 -66
  767. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  768. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  769. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  770. package/lib/esm/geometry4d/Point4d.js +2 -0
  771. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  772. package/lib/esm/numerics/BezierPolynomials.js +8 -0
  773. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  774. package/lib/esm/numerics/ClusterableArray.js +29 -13
  775. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  776. package/lib/esm/numerics/Complex.js +2 -0
  777. package/lib/esm/numerics/Complex.js.map +1 -1
  778. package/lib/esm/numerics/ConvexPolygon2d.js +3 -0
  779. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  780. package/lib/esm/numerics/Newton.js +59 -4
  781. package/lib/esm/numerics/Newton.js.map +1 -1
  782. package/lib/esm/numerics/PascalCoefficients.js +1 -1
  783. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  784. package/lib/esm/numerics/PolarData.js +13 -1
  785. package/lib/esm/numerics/PolarData.js.map +1 -1
  786. package/lib/esm/numerics/Polynomials.js +64 -26
  787. package/lib/esm/numerics/Polynomials.js.map +1 -1
  788. package/lib/esm/numerics/Quadrature.js +26 -20
  789. package/lib/esm/numerics/Quadrature.js.map +1 -1
  790. package/lib/esm/numerics/TriDiagonalSystem.js +11 -0
  791. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  792. package/lib/esm/numerics/UnionFind.js +1 -0
  793. package/lib/esm/numerics/UnionFind.js.map +1 -1
  794. package/lib/esm/numerics/UsageSums.js +10 -0
  795. package/lib/esm/numerics/UsageSums.js.map +1 -1
  796. package/lib/esm/polyface/AuxData.js +16 -0
  797. package/lib/esm/polyface/AuxData.js.map +1 -1
  798. package/lib/esm/polyface/BoxTopology.js +67 -67
  799. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  800. package/lib/esm/polyface/FacetFaceData.d.ts +1 -1
  801. package/lib/esm/polyface/FacetFaceData.js +3 -1
  802. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  803. package/lib/esm/polyface/FacetLocationDetail.js +30 -0
  804. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  805. package/lib/esm/polyface/FacetOrientation.js +12 -1
  806. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  807. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  808. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  809. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +33 -23
  810. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  811. package/lib/esm/polyface/IndexedEdgeMatcher.js +63 -33
  812. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  813. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  814. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  815. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +11 -2
  816. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  817. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  818. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  819. package/lib/esm/polyface/IndexedPolyfaceWalker.js +349 -0
  820. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -0
  821. package/lib/esm/polyface/Polyface.d.ts +35 -10
  822. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  823. package/lib/esm/polyface/Polyface.js +73 -12
  824. package/lib/esm/polyface/Polyface.js.map +1 -1
  825. package/lib/esm/polyface/PolyfaceBuilder.d.ts +14 -27
  826. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  827. package/lib/esm/polyface/PolyfaceBuilder.js +48 -80
  828. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  829. package/lib/esm/polyface/PolyfaceClip.js +8 -0
  830. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  831. package/lib/esm/polyface/PolyfaceData.d.ts +28 -0
  832. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  833. package/lib/esm/polyface/PolyfaceData.js +87 -5
  834. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  835. package/lib/esm/polyface/PolyfaceQuery.js +47 -7
  836. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  837. package/lib/esm/polyface/RangeLengthData.js +7 -0
  838. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  839. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  840. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  841. package/lib/esm/polyface/RangeTree/MinimumValueTester.js +5 -2
  842. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  843. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  844. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  845. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  846. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  847. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +5 -0
  848. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  849. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  850. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  851. package/lib/esm/polyface/TaggedNumericData.js +8 -0
  852. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  853. package/lib/esm/polyface/TriangleCandidate.js +3 -0
  854. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  855. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  856. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  857. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  858. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  859. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  860. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  861. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  862. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  863. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +32 -0
  864. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  865. package/lib/esm/polyface/multiclip/RangeSearch.js +5 -5
  866. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  867. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  868. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  869. package/lib/esm/polyface/multiclip/XYPointBuckets.js +6 -0
  870. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  871. package/lib/esm/serialization/BGFBAccessors.js +82 -164
  872. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  873. package/lib/esm/serialization/BGFBReader.js +22 -22
  874. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  875. package/lib/esm/serialization/BGFBWriter.js +1 -0
  876. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  877. package/lib/esm/serialization/DeepCompare.js +17 -17
  878. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  879. package/lib/esm/serialization/GeometrySamples.d.ts +5 -5
  880. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  881. package/lib/esm/serialization/GeometrySamples.js +113 -112
  882. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  883. package/lib/esm/serialization/IModelJsonSchema.d.ts +16 -22
  884. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  885. package/lib/esm/serialization/IModelJsonSchema.js +4 -5
  886. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  887. package/lib/esm/solid/Box.js +7 -2
  888. package/lib/esm/solid/Box.js.map +1 -1
  889. package/lib/esm/solid/Cone.js +6 -2
  890. package/lib/esm/solid/Cone.js.map +1 -1
  891. package/lib/esm/solid/LinearSweep.js +4 -2
  892. package/lib/esm/solid/LinearSweep.js.map +1 -1
  893. package/lib/esm/solid/RotationalSweep.js +5 -2
  894. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  895. package/lib/esm/solid/RuledSweep.d.ts +26 -23
  896. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  897. package/lib/esm/solid/RuledSweep.js +32 -24
  898. package/lib/esm/solid/RuledSweep.js.map +1 -1
  899. package/lib/esm/solid/SolidPrimitive.d.ts +12 -11
  900. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  901. package/lib/esm/solid/SolidPrimitive.js +11 -6
  902. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  903. package/lib/esm/solid/Sphere.js +4 -2
  904. package/lib/esm/solid/Sphere.js.map +1 -1
  905. package/lib/esm/solid/SweepContour.d.ts +24 -15
  906. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  907. package/lib/esm/solid/SweepContour.js +33 -15
  908. package/lib/esm/solid/SweepContour.js.map +1 -1
  909. package/lib/esm/solid/TorusPipe.js +7 -2
  910. package/lib/esm/solid/TorusPipe.js.map +1 -1
  911. package/lib/esm/topology/ChainMerge.js +16 -4
  912. package/lib/esm/topology/ChainMerge.js.map +1 -1
  913. package/lib/esm/topology/Graph.js +41 -6
  914. package/lib/esm/topology/Graph.js.map +1 -1
  915. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  916. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  917. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  918. package/lib/esm/topology/HalfEdgeGraphSearch.js +2 -0
  919. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  920. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +9 -2
  921. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  922. package/lib/esm/topology/HalfEdgeGraphValidation.js +7 -9
  923. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  924. package/lib/esm/topology/HalfEdgeMarkSet.js +5 -0
  925. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  926. package/lib/esm/topology/HalfEdgeNodeXYZUV.js +6 -0
  927. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  928. package/lib/esm/topology/HalfEdgePointInGraphSearch.js +1 -0
  929. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  930. package/lib/esm/topology/HalfEdgePositionDetail.js +16 -0
  931. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  932. package/lib/esm/topology/HalfEdgePriorityQueue.js +2 -0
  933. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  934. package/lib/esm/topology/InsertAndRetriangulateContext.js +4 -0
  935. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  936. package/lib/esm/topology/MaskManager.js +3 -0
  937. package/lib/esm/topology/MaskManager.js.map +1 -1
  938. package/lib/esm/topology/Merging.js +11 -6
  939. package/lib/esm/topology/Merging.js.map +1 -1
  940. package/lib/esm/topology/RegularizeFace.js +22 -0
  941. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  942. package/lib/esm/topology/SignedDataSummary.js +22 -0
  943. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  944. package/lib/esm/topology/Triangulation.js +21 -11
  945. package/lib/esm/topology/Triangulation.js.map +1 -1
  946. package/lib/esm/topology/XYParitySearchContext.js +13 -0
  947. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  948. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"GreedyTriangulationBetweenLineStrings.js","sourceRoot":"","sources":["../../../src/polyface/GreedyTriangulationBetweenLineStrings.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*--------------------------------------------------------------------------------------------*/\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { IndexedXYZCollectionInterval } from \"../geometry3d/IndexedCollectionInterval\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { TriangleCandidate } from \"./TriangleCandidate\";\n\n/** @packageDocumentation\n * @module Polyface\n */\n/**\n * * Context for constructing triangulations between linestrings with dis-similar point counts and distribution.\n * @internal\n */\nexport class GreedyTriangulationBetweenLineStrings {\n\n private _vector1: Vector3d;\n private constructor(turnRadians: number) {\n this._turnRadians = turnRadians;\n this._xyzA = Point3d.create();\n this._xyzB = Point3d.create();\n this._forwardA = Vector3d.create();\n this._forwardB = Vector3d.create();\n this._vector1 = Vector3d.create();\n this._crossA = Vector3d.create();\n this._crossB = Vector3d.create();\n }\n\n private _turnRadians: number;\n\n private isForwardVector(\n candidate: Vector3d,\n forward: Vector3d,\n perp: Vector3d): boolean {\n if (candidate.dotProduct(forward) <= 0.0)\n return false;\n const theta = candidate.angleFromPerpendicular(perp);\n if (Math.abs(theta.radians) > this._turnRadians)\n return false;\n return true;\n }\n private isPlanarBase(\n pointsA: IndexedXYZCollection,\n baseA: number,\n pointsB: IndexedXYZCollection,\n baseB: number,\n xyzA: Point3d,\n crossA: Vector3d,\n forwardA: Vector3d,\n xyzB: Point3d,\n crossB: Vector3d,\n forwardB: Vector3d): boolean {\n if (baseA + 1 < pointsA.length && baseB + 1 < pointsB.length) {\n pointsA.getPoint3dAtUncheckedPointIndex(baseA, xyzA);\n pointsB.getPoint3dAtUncheckedPointIndex(baseB, xyzB);\n pointsA.vectorXYAndZIndex(xyzA, baseA + 1, forwardA);\n pointsB.vectorXYAndZIndex(xyzB, baseB + 1, forwardB);\n Vector3d.createStartEnd(xyzA, xyzB, this._vector1);\n this._vector1.crossProduct(forwardA, crossA);\n this._vector1.crossProduct(forwardB, crossB);\n if (!xyzA.isAlmostEqual(xyzB) && crossA.angleTo(crossB).radians < this._turnRadians)\n return true;\n }\n return false;\n\n }\n /**\n * Starting at start in source, examine points to see how long they are close to being \"in plane\"\n * * child interval begins at parent.begin\n * * child interval end initializes at trialEnd and grows.\n * * child must be predefined by caller\n * * Return the accepted interval\n */\n private advanceToPlanarLimit(\n parent: IndexedXYZCollectionInterval,\n child: IndexedXYZCollectionInterval,\n trialEnd: number,\n xyzA: Point3d,\n perpA: Vector3d,\n forwardA: Vector3d,\n perpB: Vector3d,\n forwardB: Vector3d) {\n child.setFrom(parent, parent.begin, trialEnd); // initialize as empty interval.\n while (child.end < parent.end) {\n child.points.vectorXYAndZIndex(xyzA, child.end, this._vector1);\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\n break;\n if (!this.isForwardVector(this._vector1, forwardB, perpB))\n break;\n if (child.end > 0) {\n child.points.vectorIndexIndex(child.end - 1, child.end, this._vector1);\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\n break;\n }\n child.end++;\n }\n }\n\n private _triangleA1?: TriangleCandidate;\n private _triangleB1?: TriangleCandidate;\n\n private _triangleA2?: TriangleCandidate;\n private _triangleB2?: TriangleCandidate;\n\n private _triangleA3?: TriangleCandidate;\n private _triangleB3?: TriangleCandidate;\n private _bestTriangle?: TriangleCandidate;\n private _workTriangle?: TriangleCandidate;\n /** evaluate aspect ratios to select heuristically best triangles with given index intervals.\n * (ASSUME NO DUPLICATES, as in caller.)\n */\n private addGreedy(\n intervalA: IndexedXYZCollectionInterval,\n intervalB: IndexedXYZCollectionInterval,\n handler: (triangle: BarycentricTriangle) => void,\n addOnly1: boolean = false) {\n intervalA.restrictEnd();\n intervalB.restrictEnd();\n\n while (intervalA.length > 1 && intervalB.length > 1) {\n\n // triangles A1 and B1 are always valid.\n this._triangleA1 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 1, this._triangleA1);\n this._triangleA2 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin + 1, intervalA.points, intervalA.begin + 2, intervalB.points, intervalB.begin, 2, this._triangleA2);\n this._triangleA3 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin + 1, 3, this._triangleA3);\n\n this._triangleB1 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, -1, this._triangleB1);\n this._triangleB2 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 2, intervalB.points, intervalB.begin + 1, intervalA.points, intervalA.begin, -2, this._triangleB2);\n this._triangleB3 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin + 1, -3, this._triangleB3);\n // Look at pairs of 2 triangles.\n // (each pair begins with 1 or -1)\n // For each pair find the smallest aspect ratio of its two triangles. (Small is bad)\n // Choose the pair where that (smaller aspect ratio of two) is largest.\n // Advance in that direction.\n this._bestTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleA1, this._triangleB3, this._bestTriangle);\n this._workTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleB1, this._triangleA3, this._workTriangle);\n TriangleCandidate.updateIfOtherHasHigherQuality(this._bestTriangle, this._workTriangle);\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleB1, triangleB2));\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleA1, triangleA2));\n\n if (this._bestTriangle.id > 0) {\n intervalA.advanceBegin();\n handler(this._bestTriangle);\n if (addOnly1)\n return;\n } else {\n intervalB.advanceBegin();\n handler(this._bestTriangle);\n if (addOnly1)\n return;\n }\n }\n // sweep in trailing points from either side. At least one of intervalA.begin, intervalB.begin is at its limit, so only one of these will execute any bodies.\n if (intervalA.isSingleton) {\n while (intervalB.length >= 2) {\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, 0, this._workTriangle);\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\n handler(this._workTriangle);\n intervalB.advanceBegin();\n }\n }\n\n // sweep in trailing points from either side. At least one of baseA, baseB is at its limit, so only one of these will execute any bodies.\n if (intervalB.isSingleton) {\n while (intervalA.length >= 2) {\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 0, this._workTriangle);\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\n handler(this._workTriangle);\n intervalA.advanceBegin();\n }\n }\n }\n\n private _xyzA: Point3d;\n private _xyzB: Point3d;\n private _forwardA: Vector3d;\n private _forwardB: Vector3d;\n private _crossA: Vector3d;\n private _crossB: Vector3d;\n /**\n * Working from start to finish, emit triangles with heuristic lookahead to get pleasing matching between the linestrings.\n * @param pointsA\n * @param pointsB\n * @param handler\n */\n public emitTriangles(\n pointsA: IndexedXYZCollection,\n pointsB: IndexedXYZCollection,\n handler: (triangle: BarycentricTriangle) => void) {\n /** Clean up duplicates for the real logic . . . */\n this.emitTrianglesGo(resolveToNoDuplicates(pointsA), resolveToNoDuplicates(pointsB), handler);\n }\n /**\n * Run triangle logic on inputs with no duplicates.\n * @param pointsA\n * @param pointsB\n * @param handler\n */\n private emitTrianglesGo(\n pointsA: IndexedXYZCollection,\n pointsB: IndexedXYZCollection,\n handler: (triangle: BarycentricTriangle) => void) {\n const intervalA = IndexedXYZCollectionInterval.createComplete(pointsA);\n const intervalB = IndexedXYZCollectionInterval.createComplete(pointsB);\n const childA = IndexedXYZCollectionInterval.createComplete(pointsA);\n const childB = IndexedXYZCollectionInterval.createComplete(pointsB);\n while (intervalA.length > 0 && intervalB.length > 0 && (intervalA.length > 1 || intervalB.length > 1)) {\n // const lA = intervalA.length;\n // const lB = intervalB.length;\n if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n this.advanceToPlanarLimit(intervalA, childA, intervalA.begin + 1, this._xyzA, this._crossA, this._forwardA, this._crossB, this._forwardB);\n this.advanceToPlanarLimit(intervalB, childB, intervalB.begin + 1, this._xyzB, this._crossB, this._forwardB, this._crossA, this._forwardA);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (this.isPlanarBase(pointsA, intervalA.begin + 1, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 1);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin + 1, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 1);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (intervalA.length > 1 && intervalB.length > 1) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler, true);\n intervalA.advanceToHead(childA);\n intervalB.advanceToHead(childB);\n } else if (intervalA.length > 1) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (intervalB.length > 1) {\n childA.setFrom(intervalA);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n }\n /* if (intervalA.length >= lA && intervalB.length >= lB) {\n // This should not happen == neither one advanced. Just move ahead in the longer one ..\n if (intervalA.length > intervalB.length)\n intervalA.advanceBegin();\n else intervalB.advanceBegin();\n } */\n }\n // catch everything else blindly\n this.addGreedy(intervalA, intervalB, handler);\n }\n /** Default angle for considering two vectors to be colinear */\n public static defaultNearColinearAngle = Angle.createDegrees(15);\n public static createContext(planarTurnAngle: Angle = this.defaultNearColinearAngle) {\n return new GreedyTriangulationBetweenLineStrings(planarTurnAngle.radians);\n }\n}\n\n/**\n * * If there are no contiguous duplicated points in `data` return `data` unchanged.\n * * If there are duplicates, compress to a new array.\n * @param data\n * @param tolerance\n */\nfunction resolveToNoDuplicates(data: IndexedXYZCollection, tolerance = Geometry.smallMetricDistance): IndexedXYZCollection {\n let hasDuplicates = false;\n const n = data.length;\n for (let i = 0; i + 1 < n; i++) {\n if (data.distanceIndexIndex(i, i + 1)! <= tolerance) {\n hasDuplicates = true;\n break;\n }\n }\n if (!hasDuplicates)\n return data;\n const result = new GrowableXYZArray(n);\n result.pushXYZ(data.getXAtUncheckedPointIndex(0), data.getYAtUncheckedPointIndex(0), data.getZAtUncheckedPointIndex(0));\n let i0 = 0;\n for (let i = 1; i < n; i++) {\n if (data.distanceIndexIndex(i0, i)! > tolerance) {\n result.pushXYZ(data.getXAtUncheckedPointIndex(i), data.getYAtUncheckedPointIndex(i), data.getZAtUncheckedPointIndex(i));\n i0 = i;\n }\n }\n /** enforce exact closure if original was closed. */\n if (data.distanceIndexIndex(0, n - 1)! <= tolerance) {\n result.pop();\n result.pushFromGrowableXYZArray(result, 0);\n }\n return result;\n}\n"]}
1
+ {"version":3,"file":"GreedyTriangulationBetweenLineStrings.js","sourceRoot":"","sources":["../../../src/polyface/GreedyTriangulationBetweenLineStrings.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*--------------------------------------------------------------------------------------------*/\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { IndexedXYZCollectionInterval } from \"../geometry3d/IndexedCollectionInterval\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { TriangleCandidate } from \"./TriangleCandidate\";\n\n/** @packageDocumentation\n * @module Polyface\n */\n/**\n * * Context for constructing triangulations between linestrings with dis-similar point counts and distribution.\n * @internal\n */\nexport class GreedyTriangulationBetweenLineStrings {\n\n private _vector1: Vector3d;\n private constructor(turnRadians: number) {\n this._turnRadians = turnRadians;\n this._xyzA = Point3d.create();\n this._xyzB = Point3d.create();\n this._forwardA = Vector3d.create();\n this._forwardB = Vector3d.create();\n this._vector1 = Vector3d.create();\n this._crossA = Vector3d.create();\n this._crossB = Vector3d.create();\n }\n\n private _turnRadians: number;\n\n private isForwardVector(\n candidate: Vector3d,\n forward: Vector3d,\n perp: Vector3d): boolean {\n if (candidate.dotProduct(forward) <= 0.0)\n return false;\n const theta = candidate.angleFromPerpendicular(perp);\n if (Math.abs(theta.radians) > this._turnRadians)\n return false;\n return true;\n }\n private isPlanarBase(\n pointsA: IndexedXYZCollection,\n baseA: number,\n pointsB: IndexedXYZCollection,\n baseB: number,\n xyzA: Point3d,\n crossA: Vector3d,\n forwardA: Vector3d,\n xyzB: Point3d,\n crossB: Vector3d,\n forwardB: Vector3d): boolean {\n if (baseA + 1 < pointsA.length && baseB + 1 < pointsB.length) {\n pointsA.getPoint3dAtUncheckedPointIndex(baseA, xyzA);\n pointsB.getPoint3dAtUncheckedPointIndex(baseB, xyzB);\n pointsA.vectorXYAndZIndex(xyzA, baseA + 1, forwardA);\n pointsB.vectorXYAndZIndex(xyzB, baseB + 1, forwardB);\n Vector3d.createStartEnd(xyzA, xyzB, this._vector1);\n this._vector1.crossProduct(forwardA, crossA);\n this._vector1.crossProduct(forwardB, crossB);\n if (!xyzA.isAlmostEqual(xyzB) && crossA.angleTo(crossB).radians < this._turnRadians)\n return true;\n }\n return false;\n\n }\n /**\n * Starting at start in source, examine points to see how long they are close to being \"in plane\"\n * * child interval begins at parent.begin\n * * child interval end initializes at trialEnd and grows.\n * * child must be predefined by caller\n * * Return the accepted interval\n */\n private advanceToPlanarLimit(\n parent: IndexedXYZCollectionInterval,\n child: IndexedXYZCollectionInterval,\n trialEnd: number,\n xyzA: Point3d,\n perpA: Vector3d,\n forwardA: Vector3d,\n perpB: Vector3d,\n forwardB: Vector3d) {\n child.setFrom(parent, parent.begin, trialEnd); // initialize as empty interval.\n while (child.end < parent.end) {\n child.points.vectorXYAndZIndex(xyzA, child.end, this._vector1);\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\n break;\n if (!this.isForwardVector(this._vector1, forwardB, perpB))\n break;\n if (child.end > 0) {\n child.points.vectorIndexIndex(child.end - 1, child.end, this._vector1);\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\n break;\n }\n child.end++;\n }\n }\n\n private _triangleA1?: TriangleCandidate;\n private _triangleB1?: TriangleCandidate;\n\n private _triangleA2?: TriangleCandidate;\n private _triangleB2?: TriangleCandidate;\n\n private _triangleA3?: TriangleCandidate;\n private _triangleB3?: TriangleCandidate;\n private _bestTriangle?: TriangleCandidate;\n private _workTriangle?: TriangleCandidate;\n /** evaluate aspect ratios to select heuristically best triangles with given index intervals.\n * (ASSUME NO DUPLICATES, as in caller.)\n */\n private addGreedy(\n intervalA: IndexedXYZCollectionInterval,\n intervalB: IndexedXYZCollectionInterval,\n handler: (triangle: BarycentricTriangle) => void,\n addOnly1: boolean = false) {\n intervalA.restrictEnd();\n intervalB.restrictEnd();\n\n while (intervalA.length > 1 && intervalB.length > 1) {\n\n // triangles A1 and B1 are always valid.\n this._triangleA1 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 1, this._triangleA1);\n this._triangleA2 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin + 1, intervalA.points, intervalA.begin + 2, intervalB.points, intervalB.begin, 2, this._triangleA2);\n this._triangleA3 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin + 1, 3, this._triangleA3);\n\n this._triangleB1 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, -1, this._triangleB1);\n this._triangleB2 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 2, intervalB.points, intervalB.begin + 1, intervalA.points, intervalA.begin, -2, this._triangleB2);\n this._triangleB3 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin + 1, -3, this._triangleB3);\n // Look at pairs of 2 triangles.\n // (each pair begins with 1 or -1)\n // For each pair find the smallest aspect ratio of its two triangles. (Small is bad)\n // Choose the pair where that (smaller aspect ratio of two) is largest.\n // Advance in that direction.\n this._bestTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleA1, this._triangleB3, this._bestTriangle);\n this._workTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleB1, this._triangleA3, this._workTriangle);\n TriangleCandidate.updateIfOtherHasHigherQuality(this._bestTriangle, this._workTriangle);\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleB1, triangleB2));\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleA1, triangleA2));\n\n if (this._bestTriangle.id > 0) {\n intervalA.advanceBegin();\n handler(this._bestTriangle);\n if (addOnly1)\n return;\n } else {\n intervalB.advanceBegin();\n handler(this._bestTriangle);\n if (addOnly1)\n return;\n }\n }\n // sweep in trailing points from either side. At least one of intervalA.begin, intervalB.begin is at its limit, so only one of these will execute any bodies.\n if (intervalA.isSingleton) {\n while (intervalB.length >= 2) {\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, 0, this._workTriangle);\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\n handler(this._workTriangle);\n intervalB.advanceBegin();\n }\n }\n\n // sweep in trailing points from either side. At least one of baseA, baseB is at its limit, so only one of these will execute any bodies.\n if (intervalB.isSingleton) {\n while (intervalA.length >= 2) {\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 0, this._workTriangle);\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\n handler(this._workTriangle);\n intervalA.advanceBegin();\n }\n }\n }\n\n private _xyzA: Point3d;\n private _xyzB: Point3d;\n private _forwardA: Vector3d;\n private _forwardB: Vector3d;\n private _crossA: Vector3d;\n private _crossB: Vector3d;\n /**\n * Working from start to finish, emit triangles with heuristic lookahead to get pleasing matching between the linestrings.\n * @param pointsA\n * @param pointsB\n * @param handler\n */\n public emitTriangles(\n pointsA: IndexedXYZCollection,\n pointsB: IndexedXYZCollection,\n handler: (triangle: BarycentricTriangle) => void) {\n /** Clean up duplicates for the real logic . . . */\n this.emitTrianglesGo(resolveToNoDuplicates(pointsA), resolveToNoDuplicates(pointsB), handler);\n }\n /**\n * Run triangle logic on inputs with no duplicates.\n * @param pointsA\n * @param pointsB\n * @param handler\n */\n private emitTrianglesGo(\n pointsA: IndexedXYZCollection,\n pointsB: IndexedXYZCollection,\n handler: (triangle: BarycentricTriangle) => void) {\n const intervalA = IndexedXYZCollectionInterval.createComplete(pointsA);\n const intervalB = IndexedXYZCollectionInterval.createComplete(pointsB);\n const childA = IndexedXYZCollectionInterval.createComplete(pointsA);\n const childB = IndexedXYZCollectionInterval.createComplete(pointsB);\n while (intervalA.length > 0 && intervalB.length > 0 && (intervalA.length > 1 || intervalB.length > 1)) {\n // const lA = intervalA.length;\n // const lB = intervalB.length;\n if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n this.advanceToPlanarLimit(intervalA, childA, intervalA.begin + 1, this._xyzA, this._crossA, this._forwardA, this._crossB, this._forwardB);\n this.advanceToPlanarLimit(intervalB, childB, intervalB.begin + 1, this._xyzB, this._crossB, this._forwardB, this._crossA, this._forwardA);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (this.isPlanarBase(pointsA, intervalA.begin + 1, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 1);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin + 1, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 1);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (intervalA.length > 1 && intervalB.length > 1) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler, true);\n intervalA.advanceToHead(childA);\n intervalB.advanceToHead(childB);\n } else if (intervalA.length > 1) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (intervalB.length > 1) {\n childA.setFrom(intervalA);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n }\n /* if (intervalA.length >= lA && intervalB.length >= lB) {\n // This should not happen == neither one advanced. Just move ahead in the longer one ..\n if (intervalA.length > intervalB.length)\n intervalA.advanceBegin();\n else intervalB.advanceBegin();\n } */\n }\n // catch everything else blindly\n this.addGreedy(intervalA, intervalB, handler);\n }\n /** Default angle for considering two vectors to be colinear */\n public static defaultNearColinearAngle = Angle.createDegrees(15);\n public static createContext(planarTurnAngle: Angle = this.defaultNearColinearAngle) {\n return new GreedyTriangulationBetweenLineStrings(planarTurnAngle.radians);\n }\n}\n\n/**\n * * If there are no contiguous duplicated points in `data` return `data` unchanged.\n * * If there are duplicates, compress to a new array.\n * @param data\n * @param tolerance\n */\nfunction resolveToNoDuplicates(data: IndexedXYZCollection, tolerance = Geometry.smallMetricDistance): IndexedXYZCollection {\n let hasDuplicates = false;\n const n = data.length;\n for (let i = 0; i + 1 < n; i++) {\n if (data.distanceIndexIndex(i, i + 1)! <= tolerance) {\n hasDuplicates = true;\n break;\n }\n }\n if (!hasDuplicates)\n return data;\n const result = new GrowableXYZArray(n);\n result.pushXYZ(data.getXAtUncheckedPointIndex(0), data.getYAtUncheckedPointIndex(0), data.getZAtUncheckedPointIndex(0));\n let i0 = 0;\n for (let i = 1; i < n; i++) {\n if (data.distanceIndexIndex(i0, i)! > tolerance) {\n result.pushXYZ(data.getXAtUncheckedPointIndex(i), data.getYAtUncheckedPointIndex(i), data.getZAtUncheckedPointIndex(i));\n i0 = i;\n }\n }\n /** enforce exact closure if original was closed. */\n if (data.distanceIndexIndex(0, n - 1)! <= tolerance) {\n result.pop();\n result.pushFromGrowableXYZArray(result, 0);\n }\n return result;\n}\n"]}
@@ -6,35 +6,39 @@
6
6
  * * Fixed entry positions are:
7
7
  * * [0] is start vertex index (in CCW order around its facet)
8
8
  * * [1] is end vertex index (in CCW order around its facet)
9
- * * [2] is facet index.
9
+ * * [2] is facet index (or another number to associate with this edge).
10
10
  */
11
11
  export declare class SortableEdge extends Float64Array {
12
12
  /** Return the vertex index that appears first in the order stored. */
13
13
  get vertexIndexA(): number;
14
14
  /** Return the vertex index that appears second in the order stored. */
15
15
  get vertexIndexB(): number;
16
- /** Return the facet index. */
16
+ /**
17
+ * Return the facet index.
18
+ * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.
19
+ */
17
20
  get facetIndex(): number;
18
- /** return true if vertexIndexA is less than vertexIndexB */
21
+ /** return true if vertexIndexA is less than vertexIndexB. */
19
22
  get isLowHigh(): boolean;
20
- /** Return the vertex index with lower numeric value */
23
+ /** Return the vertex index with lower numeric value. */
21
24
  get lowVertexIndex(): number;
22
- /** Return the vertex index with higher numeric value */
25
+ /** Return the vertex index with higher numeric value. */
23
26
  get highVertexIndex(): number;
24
- /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order */
27
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */
25
28
  static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean;
26
- /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order */
29
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */
27
30
  static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean;
28
- /** Return numeric relationship of edgeA and edgeB:
29
- * * 1 if they share start and end in the same order
30
- * * -1 if they share start and end in reversed order
31
+ /**
32
+ * Return numeric relationship of edgeA and edgeB:
33
+ * * 1 if they share start and end in the same order.
34
+ * * -1 if they share start and end in reversed order.
31
35
  * * 0 otherwise.
32
36
  */
33
37
  static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number;
34
38
  get isNullEdge(): boolean;
35
39
  /**
36
- * lexical comparison of two edges.
37
- * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort
40
+ * Lexical comparison of two edges.
41
+ * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.
38
42
  * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.
39
43
  * @param edgeA first edge
40
44
  * @param edgeB second edge
@@ -47,23 +51,25 @@ export declare class SortableEdge extends Float64Array {
47
51
  }
48
52
  export type SortableEdgeCluster = SortableEdge | SortableEdge[];
49
53
  /**
50
- * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (such as testing for closed mesh)
54
+ * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses
55
+ * (such as testing for closed mesh).
51
56
  */
52
57
  export declare class IndexedEdgeMatcher {
53
58
  edges: SortableEdge[];
54
59
  constructor();
55
60
  /**
56
- * push a new edge.
57
- * @returns the edge (as emplaced at the back of the sortableEdge array)
61
+ * Push a new edge.
58
62
  * @param vertexA start vertex
59
63
  * @param vertexB end vertex
60
- * @param facetIndex facet index
64
+ * @param facetIndex value to carry along during matching
65
+ * @returns the edge pushed onto the `edges` array
61
66
  */
62
67
  addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge;
63
68
  /**
64
- * Push edges all around a facet, returning to vertexArray[0]
69
+ * Push edges all around a facet, returning to vertexArray[0].
65
70
  * @param vertexArray array of vertex indices around facet
66
- * @param facetIndex
71
+ * @param facetIndex value to carry along during matching
72
+ * @param closeLoop true to add an edge from last to first vertex.
67
73
  */
68
74
  addPath(vertexArray: number[], facetIndex: number, closeLoop?: boolean): void;
69
75
  /** Sort the edge index array. */
@@ -71,16 +77,20 @@ export declare class IndexedEdgeMatcher {
71
77
  /** Create a single or compound SortableEdgeCluster in dest. */
72
78
  private collectSortableEdgeCluster;
73
79
  /**
74
- * sort the edges, and look for three categories of paired edges:
80
+ * Sort the edges, and look for three categories of paired edges:
75
81
  * * caller must allocate all result arrays of interest.
76
82
  * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.
77
- * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are merged into the target.
78
- * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array `allOther`, create `const allOther = []` as an empty array and call
83
+ * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are
84
+ * merged into the target.
85
+ * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array
86
+ * `allOther`, create `const allOther = []` as an empty array and call
79
87
  * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`
80
- * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior edges adjacent to two facets in opposing directions.
88
+ * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior
89
+ * edges adjacent to two facets in opposing directions.
81
90
  * @param singletons optional array to receive edges that are simple boundary edges.
82
91
  * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)
83
- * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense but not a simple directed pair.
92
+ * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense
93
+ * but not a simple directed pair.
84
94
  */
85
95
  sortAndCollectClusters(manifoldPairs: SortableEdgeCluster[] | undefined, singletons?: SortableEdgeCluster[], nullEdges?: SortableEdgeCluster[], allOtherClusters?: SortableEdgeCluster[]): void;
86
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedEdgeMatcher.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,uEAAuE;IACvE,IAAW,YAAY,IAAI,MAAM,CAAoB;IACrD,wEAAwE;IACxE,IAAW,YAAY,IAAI,MAAM,CAAoB;IACrD,+BAA+B;IAC/B,IAAW,UAAU,IAAI,MAAM,CAAoB;IACnD,4DAA4D;IAC5D,IAAW,SAAS,IAAI,OAAO,CAA8B;IAC7D,uDAAuD;IACvD,IAAW,cAAc,IAAI,MAAM,CAAkD;IACrF,wDAAwD;IACxD,IAAW,eAAe,IAAI,MAAM,CAAkD;IACtF,gGAAgG;WAClF,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IACpF,6GAA6G;WAC/F,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGtF;;;;OAIG;WACW,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;IAMnF,IAAW,UAAU,IAAI,OAAO,CAAgC;IAChE;;;;;;OAMG;WACW,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;gBAiBrD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAMhE,MAAM,IAAI,GAAG;WACN,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,GAAG;WAO7C,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,EAAE;CAM7D;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,EAAE,CAAC;AAChE;;GAEG;AACH,qBAAa,kBAAkB;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;;IAK7B;;;;;;OAMG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;IAKlF;;;;OAIG;IACI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc;IASnF,iCAAiC;IAC1B,IAAI;IAGX,+DAA+D;IAC/D,OAAO,CAAC,0BAA0B;IAalC;;;;;;;;;;;OAWG;IACI,sBAAsB,CAAC,aAAa,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,mBAAmB,EAAE,EAAE,SAAS,CAAC,EAAE,mBAAmB,EAAE,EAAE,gBAAgB,CAAC,EAAE,mBAAmB,EAAE;CAyBhM"}
1
+ {"version":3,"file":"IndexedEdgeMatcher.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,uEAAuE;IACvE,IAAW,YAAY,IAAI,MAAM,CAEhC;IACD,wEAAwE;IACxE,IAAW,YAAY,IAAI,MAAM,CAEhC;IACD;;;OAGG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,6DAA6D;IAC7D,IAAW,SAAS,IAAI,OAAO,CAE9B;IACD,wDAAwD;IACxD,IAAW,cAAc,IAAI,MAAM,CAElC;IACD,yDAAyD;IACzD,IAAW,eAAe,IAAI,MAAM,CAEnC;IACD,iGAAiG;WACnF,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGpF,8GAA8G;WAChG,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGtF;;;;;OAKG;WACW,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;IAMnF,IAAW,UAAU,IAAI,OAAO,CAE/B;IACD;;;;;;OAMG;WACW,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;gBAiBrD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAMhE,MAAM,IAAI,GAAG;WAGN,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,GAAG;WAM7C,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,EAAE;CAM7D;AACD,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,EAAE,CAAC;AAChE;;;GAGG;AACH,qBAAa,kBAAkB;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;;IAK7B;;;;;;OAMG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;IAKlF;;;;;OAKG;IACI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc;IASnF,iCAAiC;IAC1B,IAAI;IAGX,+DAA+D;IAC/D,OAAO,CAAC,0BAA0B;IAYlC;;;;;;;;;;;;;;;OAeG;IACI,sBAAsB,CAC3B,aAAa,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAChD,UAAU,CAAC,EAAE,mBAAmB,EAAE,EAClC,SAAS,CAAC,EAAE,mBAAmB,EAAE,EACjC,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,GACvC,IAAI;CA0BR"}
@@ -13,30 +13,48 @@ exports.IndexedEdgeMatcher = exports.SortableEdge = void 0;
13
13
  * * Fixed entry positions are:
14
14
  * * [0] is start vertex index (in CCW order around its facet)
15
15
  * * [1] is end vertex index (in CCW order around its facet)
16
- * * [2] is facet index.
16
+ * * [2] is facet index (or another number to associate with this edge).
17
17
  */
18
18
  class SortableEdge extends Float64Array {
19
19
  /** Return the vertex index that appears first in the order stored. */
20
- get vertexIndexA() { return this[0]; }
20
+ get vertexIndexA() {
21
+ return this[0];
22
+ }
21
23
  /** Return the vertex index that appears second in the order stored. */
22
- get vertexIndexB() { return this[1]; }
23
- /** Return the facet index. */
24
- get facetIndex() { return this[2]; }
25
- /** return true if vertexIndexA is less than vertexIndexB */
26
- get isLowHigh() { return this[0] < this[1]; }
27
- /** Return the vertex index with lower numeric value */
28
- get lowVertexIndex() { return this[0] < this[1] ? this[0] : this[1]; }
29
- /** Return the vertex index with higher numeric value */
30
- get highVertexIndex() { return this[0] > this[1] ? this[0] : this[1]; }
31
- /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order */
32
- static areDirectedPartners(edgeA, edgeB) { return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]; }
33
- /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order */
24
+ get vertexIndexB() {
25
+ return this[1];
26
+ }
27
+ /**
28
+ * Return the facet index.
29
+ * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.
30
+ */
31
+ get facetIndex() {
32
+ return this[2];
33
+ }
34
+ /** return true if vertexIndexA is less than vertexIndexB. */
35
+ get isLowHigh() {
36
+ return this[0] < this[1];
37
+ }
38
+ /** Return the vertex index with lower numeric value. */
39
+ get lowVertexIndex() {
40
+ return this[0] < this[1] ? this[0] : this[1];
41
+ }
42
+ /** Return the vertex index with higher numeric value. */
43
+ get highVertexIndex() {
44
+ return this[0] > this[1] ? this[0] : this[1];
45
+ }
46
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */
47
+ static areDirectedPartners(edgeA, edgeB) {
48
+ return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0];
49
+ }
50
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */
34
51
  static areUndirectedPartners(edgeA, edgeB) {
35
52
  return (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) || ((edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]));
36
53
  }
37
- /** Return numeric relationship of edgeA and edgeB:
38
- * * 1 if they share start and end in the same order
39
- * * -1 if they share start and end in reversed order
54
+ /**
55
+ * Return numeric relationship of edgeA and edgeB:
56
+ * * 1 if they share start and end in the same order.
57
+ * * -1 if they share start and end in reversed order.
40
58
  * * 0 otherwise.
41
59
  */
42
60
  static relativeOrientation(edgeA, edgeB) {
@@ -46,10 +64,12 @@ class SortableEdge extends Float64Array {
46
64
  return -1;
47
65
  return 0;
48
66
  }
49
- get isNullEdge() { return this[0] === this[1]; }
67
+ get isNullEdge() {
68
+ return this[0] === this[1];
69
+ }
50
70
  /**
51
- * lexical comparison of two edges.
52
- * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort
71
+ * Lexical comparison of two edges.
72
+ * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.
53
73
  * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.
54
74
  * @param edgeA first edge
55
75
  * @param edgeB second edge
@@ -77,7 +97,9 @@ class SortableEdge extends Float64Array {
77
97
  this[1] = vertexB;
78
98
  this[2] = facetIndex;
79
99
  }
80
- toJSON() { return [this[0], this[1], this[2]]; }
100
+ toJSON() {
101
+ return [this[0], this[1], this[2]];
102
+ }
81
103
  static clusterToJSON(data) {
82
104
  if (data instanceof SortableEdge)
83
105
  return data.toJSON();
@@ -94,18 +116,20 @@ class SortableEdge extends Float64Array {
94
116
  }
95
117
  exports.SortableEdge = SortableEdge;
96
118
  /**
97
- * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (such as testing for closed mesh)
119
+ * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses
120
+ * (such as testing for closed mesh).
98
121
  */
99
122
  class IndexedEdgeMatcher {
123
+ edges;
100
124
  constructor() {
101
125
  this.edges = [];
102
126
  }
103
127
  /**
104
- * push a new edge.
105
- * @returns the edge (as emplaced at the back of the sortableEdge array)
128
+ * Push a new edge.
106
129
  * @param vertexA start vertex
107
130
  * @param vertexB end vertex
108
- * @param facetIndex facet index
131
+ * @param facetIndex value to carry along during matching
132
+ * @returns the edge pushed onto the `edges` array
109
133
  */
110
134
  addEdge(vertexA, vertexB, facetIndex) {
111
135
  const edge = new SortableEdge(vertexA, vertexB, facetIndex);
@@ -113,9 +137,10 @@ class IndexedEdgeMatcher {
113
137
  return edge;
114
138
  }
115
139
  /**
116
- * Push edges all around a facet, returning to vertexArray[0]
140
+ * Push edges all around a facet, returning to vertexArray[0].
117
141
  * @param vertexArray array of vertex indices around facet
118
- * @param facetIndex
142
+ * @param facetIndex value to carry along during matching
143
+ * @param closeLoop true to add an edge from last to first vertex.
119
144
  */
120
145
  addPath(vertexArray, facetIndex, closeLoop = true) {
121
146
  if (vertexArray.length === 0)
@@ -146,16 +171,20 @@ class IndexedEdgeMatcher {
146
171
  }
147
172
  }
148
173
  /**
149
- * sort the edges, and look for three categories of paired edges:
174
+ * Sort the edges, and look for three categories of paired edges:
150
175
  * * caller must allocate all result arrays of interest.
151
176
  * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.
152
- * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are merged into the target.
153
- * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array `allOther`, create `const allOther = []` as an empty array and call
177
+ * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are
178
+ * merged into the target.
179
+ * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array
180
+ * `allOther`, create `const allOther = []` as an empty array and call
154
181
  * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`
155
- * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior edges adjacent to two facets in opposing directions.
182
+ * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior
183
+ * edges adjacent to two facets in opposing directions.
156
184
  * @param singletons optional array to receive edges that are simple boundary edges.
157
185
  * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)
158
- * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense but not a simple directed pair.
186
+ * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense
187
+ * but not a simple directed pair.
159
188
  */
160
189
  sortAndCollectClusters(manifoldPairs, singletons, nullEdges, allOtherClusters) {
161
190
  this.sort();
@@ -172,7 +201,8 @@ class IndexedEdgeMatcher {
172
201
  for (let index0 = 0; index0 < n; index0 += clusterLength) {
173
202
  const baseEdge = this.edges[index0];
174
203
  clusterLength = 1;
175
- for (let index1 = index0 + 1; index1 < n && SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {
204
+ for (let index1 = index0 + 1; index1 < n &&
205
+ SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {
176
206
  clusterLength++;
177
207
  }
178
208
  if (this.edges[index0].isNullEdge) {
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedEdgeMatcher.js","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.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 Polyface\n */\n\n/**\n * * For boundary sorting, an edge is a (packed!) Float64Array.\n * * Fixed entry positions are:\n * * [0] is start vertex index (in CCW order around its facet)\n * * [1] is end vertex index (in CCW order around its facet)\n * * [2] is facet index.\n */\nexport class SortableEdge extends Float64Array {\n /** Return the vertex index that appears first in the order stored. */\n public get vertexIndexA(): number { return this[0]; }\n /** Return the vertex index that appears second in the order stored. */\n public get vertexIndexB(): number { return this[1]; }\n /** Return the facet index. */\n public get facetIndex(): number { return this[2]; }\n /** return true if vertexIndexA is less than vertexIndexB */\n public get isLowHigh(): boolean { return this[0] < this[1]; }\n /** Return the vertex index with lower numeric value */\n public get lowVertexIndex(): number { return this[0] < this[1] ? this[0] : this[1]; }\n /** Return the vertex index with higher numeric value */\n public get highVertexIndex(): number { return this[0] > this[1] ? this[0] : this[1]; }\n /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order */\n public static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean { return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]; }\n /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order */\n public static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\n return (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) || ((edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]));\n }\n /** Return numeric relationship of edgeA and edgeB:\n * * 1 if they share start and end in the same order\n * * -1 if they share start and end in reversed order\n * * 0 otherwise.\n */\n public static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number {\n if (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) return 1;\n if (edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]) return -1;\n return 0;\n }\n\n public get isNullEdge(): boolean { return this[0] === this[1]; }\n /**\n * lexical comparison of two edges.\n * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort\n * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.\n * @param edgeA first edge\n * @param edgeB second edge\n */\n public static lessThan(edgeA: SortableEdge, edgeB: SortableEdge): number {\n // primary compare is based on indirect indices\n const lowA = edgeA.lowVertexIndex;\n const lowB = edgeB.lowVertexIndex;\n if (lowA < lowB)\n return -1;\n if (lowB < lowA)\n return 1;\n const highA = edgeA.highVertexIndex;\n const highB = edgeB.highVertexIndex;\n if (highA < highB)\n return -1;\n if (highB < highA)\n return 1;\n // undirected indices match ... use directed vertexIndexA\n return edgeA.vertexIndexA - edgeB.vertexIndexA;\n }\n public constructor(vertexA: number, vertexB: number, facetIndex: number) {\n super(3);\n this[0] = vertexA;\n this[1] = vertexB;\n this[2] = facetIndex;\n }\n public toJSON(): any { return [this[0], this[1], this[2]]; }\n public static clusterToJSON(data: SortableEdgeCluster): any {\n if (data instanceof SortableEdge)\n return data.toJSON();\n\n const result = [];\n for (const edge of data) result.push(edge.toJSON());\n }\n public static clusterArrayToJSON(data: SortableEdgeCluster[]) {\n const result = [];\n for (const cluster of data)\n result.push(SortableEdge.clusterToJSON(cluster));\n return result;\n }\n}\n\nexport type SortableEdgeCluster = SortableEdge | SortableEdge[];\n/**\n * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (such as testing for closed mesh)\n */\nexport class IndexedEdgeMatcher {\n public edges: SortableEdge[];\n\n constructor() {\n this.edges = [];\n }\n /**\n * push a new edge.\n * @returns the edge (as emplaced at the back of the sortableEdge array)\n * @param vertexA start vertex\n * @param vertexB end vertex\n * @param facetIndex facet index\n */\n public addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge {\n const edge = new SortableEdge(vertexA, vertexB, facetIndex);\n this.edges.push(edge);\n return edge;\n }\n /**\n * Push edges all around a facet, returning to vertexArray[0]\n * @param vertexArray array of vertex indices around facet\n * @param facetIndex\n */\n public addPath(vertexArray: number[], facetIndex: number, closeLoop: boolean = true) {\n if (vertexArray.length === 0) return;\n const m = vertexArray.length - 1;\n for (let i = 0; i < m; i++) {\n this.addEdge(vertexArray[i], vertexArray[i + 1], facetIndex);\n }\n if (closeLoop)\n this.addEdge(vertexArray[m], vertexArray[0], facetIndex);\n }\n /** Sort the edge index array. */\n public sort() {\n this.edges.sort((edgeA, edgeB) => SortableEdge.lessThan(edgeA, edgeB));\n }\n /** Create a single or compound SortableEdgeCluster in dest. */\n private collectSortableEdgeCluster(index0: number, index1: number, dest: SortableEdgeCluster[] | undefined) {\n if (dest !== undefined && index1 > index0) {\n if (index1 === index0 + 1) {\n dest.push(this.edges[index0]);\n } else {\n const cluster = [];\n for (let i = index0; i < index1; i++)\n cluster.push(this.edges[i]);\n dest.push(cluster);\n }\n\n }\n }\n /**\n * sort the edges, and look for three categories of paired edges:\n * * caller must allocate all result arrays of interest.\n * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.\n * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are merged into the target.\n * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array `allOther`, create `const allOther = []` as an empty array and call\n * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`\n * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior edges adjacent to two facets in opposing directions.\n * @param singletons optional array to receive edges that are simple boundary edges.\n * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)\n * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense but not a simple directed pair.\n */\n public sortAndCollectClusters(manifoldPairs: SortableEdgeCluster[] | undefined, singletons?: SortableEdgeCluster[], nullEdges?: SortableEdgeCluster[], allOtherClusters?: SortableEdgeCluster[]) {\n this.sort();\n if (manifoldPairs) manifoldPairs.length = 0;\n if (singletons) singletons.length = 0;\n if (nullEdges) nullEdges.length = 0;\n if (allOtherClusters) allOtherClusters.length = 0;\n const n = this.edges.length;\n let clusterLength;\n for (let index0 = 0; index0 < n; index0 += clusterLength) {\n const baseEdge = this.edges[index0];\n clusterLength = 1;\n for (let index1 = index0 + 1; index1 < n && SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {\n clusterLength++;\n }\n if (this.edges[index0].isNullEdge) {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, nullEdges);\n } else if (clusterLength === 2 && SortableEdge.areDirectedPartners(baseEdge, this.edges[index0 + 1])) {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, manifoldPairs);\n } else if (clusterLength === 1) {\n this.collectSortableEdgeCluster(index0, index0 + 1, singletons);\n } else {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, allOtherClusters);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"IndexedEdgeMatcher.js","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.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 Polyface\n */\n\n/**\n * * For boundary sorting, an edge is a (packed!) Float64Array.\n * * Fixed entry positions are:\n * * [0] is start vertex index (in CCW order around its facet)\n * * [1] is end vertex index (in CCW order around its facet)\n * * [2] is facet index (or another number to associate with this edge).\n */\nexport class SortableEdge extends Float64Array {\n /** Return the vertex index that appears first in the order stored. */\n public get vertexIndexA(): number {\n return this[0];\n }\n /** Return the vertex index that appears second in the order stored. */\n public get vertexIndexB(): number {\n return this[1];\n }\n /**\n * Return the facet index.\n * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.\n */\n public get facetIndex(): number {\n return this[2];\n }\n /** return true if vertexIndexA is less than vertexIndexB. */\n public get isLowHigh(): boolean {\n return this[0] < this[1];\n }\n /** Return the vertex index with lower numeric value. */\n public get lowVertexIndex(): number {\n return this[0] < this[1] ? this[0] : this[1];\n }\n /** Return the vertex index with higher numeric value. */\n public get highVertexIndex(): number {\n return this[0] > this[1] ? this[0] : this[1];\n }\n /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */\n public static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\n return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0];\n }\n /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */\n public static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\n return (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) || ((edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]));\n }\n /**\n * Return numeric relationship of edgeA and edgeB:\n * * 1 if they share start and end in the same order.\n * * -1 if they share start and end in reversed order.\n * * 0 otherwise.\n */\n public static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number {\n if (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) return 1;\n if (edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]) return -1;\n return 0;\n }\n\n public get isNullEdge(): boolean {\n return this[0] === this[1];\n }\n /**\n * Lexical comparison of two edges.\n * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.\n * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.\n * @param edgeA first edge\n * @param edgeB second edge\n */\n public static lessThan(edgeA: SortableEdge, edgeB: SortableEdge): number {\n // primary compare is based on indirect indices\n const lowA = edgeA.lowVertexIndex;\n const lowB = edgeB.lowVertexIndex;\n if (lowA < lowB)\n return -1;\n if (lowB < lowA)\n return 1;\n const highA = edgeA.highVertexIndex;\n const highB = edgeB.highVertexIndex;\n if (highA < highB)\n return -1;\n if (highB < highA)\n return 1;\n // undirected indices match ... use directed vertexIndexA\n return edgeA.vertexIndexA - edgeB.vertexIndexA;\n }\n public constructor(vertexA: number, vertexB: number, facetIndex: number) {\n super(3);\n this[0] = vertexA;\n this[1] = vertexB;\n this[2] = facetIndex;\n }\n public toJSON(): any {\n return [this[0], this[1], this[2]];\n }\n public static clusterToJSON(data: SortableEdgeCluster): any {\n if (data instanceof SortableEdge)\n return data.toJSON();\n const result = [];\n for (const edge of data) result.push(edge.toJSON());\n }\n public static clusterArrayToJSON(data: SortableEdgeCluster[]) {\n const result = [];\n for (const cluster of data)\n result.push(SortableEdge.clusterToJSON(cluster));\n return result;\n }\n}\nexport type SortableEdgeCluster = SortableEdge | SortableEdge[];\n/**\n * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses\n * (such as testing for closed mesh).\n */\nexport class IndexedEdgeMatcher {\n public edges: SortableEdge[];\n\n constructor() {\n this.edges = [];\n }\n /**\n * Push a new edge.\n * @param vertexA start vertex\n * @param vertexB end vertex\n * @param facetIndex value to carry along during matching\n * @returns the edge pushed onto the `edges` array\n */\n public addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge {\n const edge = new SortableEdge(vertexA, vertexB, facetIndex);\n this.edges.push(edge);\n return edge;\n }\n /**\n * Push edges all around a facet, returning to vertexArray[0].\n * @param vertexArray array of vertex indices around facet\n * @param facetIndex value to carry along during matching\n * @param closeLoop true to add an edge from last to first vertex.\n */\n public addPath(vertexArray: number[], facetIndex: number, closeLoop: boolean = true) {\n if (vertexArray.length === 0) return;\n const m = vertexArray.length - 1;\n for (let i = 0; i < m; i++) {\n this.addEdge(vertexArray[i], vertexArray[i + 1], facetIndex);\n }\n if (closeLoop)\n this.addEdge(vertexArray[m], vertexArray[0], facetIndex);\n }\n /** Sort the edge index array. */\n public sort() {\n this.edges.sort((edgeA, edgeB) => SortableEdge.lessThan(edgeA, edgeB));\n }\n /** Create a single or compound SortableEdgeCluster in dest. */\n private collectSortableEdgeCluster(index0: number, index1: number, dest: SortableEdgeCluster[] | undefined) {\n if (dest !== undefined && index1 > index0) {\n if (index1 === index0 + 1) {\n dest.push(this.edges[index0]);\n } else {\n const cluster = [];\n for (let i = index0; i < index1; i++)\n cluster.push(this.edges[i]);\n dest.push(cluster);\n }\n }\n }\n /**\n * Sort the edges, and look for three categories of paired edges:\n * * caller must allocate all result arrays of interest.\n * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.\n * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are\n * merged into the target.\n * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array\n * `allOther`, create `const allOther = []` as an empty array and call\n * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`\n * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior\n * edges adjacent to two facets in opposing directions.\n * @param singletons optional array to receive edges that are simple boundary edges.\n * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)\n * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense\n * but not a simple directed pair.\n */\n public sortAndCollectClusters(\n manifoldPairs: SortableEdgeCluster[] | undefined,\n singletons?: SortableEdgeCluster[],\n nullEdges?: SortableEdgeCluster[],\n allOtherClusters?: SortableEdgeCluster[],\n ): void {\n this.sort();\n if (manifoldPairs) manifoldPairs.length = 0;\n if (singletons) singletons.length = 0;\n if (nullEdges) nullEdges.length = 0;\n if (allOtherClusters) allOtherClusters.length = 0;\n const n = this.edges.length;\n let clusterLength;\n for (let index0 = 0; index0 < n; index0 += clusterLength) {\n const baseEdge = this.edges[index0];\n clusterLength = 1;\n for (let index1 = index0 + 1; index1 < n &&\n SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {\n clusterLength++;\n }\n if (this.edges[index0].isNullEdge) {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, nullEdges);\n } else if (clusterLength === 2 && SortableEdge.areDirectedPartners(baseEdge, this.edges[index0 + 1])) {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, manifoldPairs);\n } else if (clusterLength === 1) {\n this.collectSortableEdgeCluster(index0, index0 + 1, singletons);\n } else {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, allOtherClusters);\n }\n }\n }\n}\n"]}
@@ -52,7 +52,7 @@ export declare class IndexedPolyfaceVisitor extends PolyfaceData implements Poly
52
52
  * Returns the normalized parameter as a point. Returns `undefined` on failure.
53
53
  */
54
54
  tryGetNormalizedParameter(index: number, result?: Point2d): Point2d | undefined;
55
- /** Return the index (in the client polyface) of the current facet. */
55
+ /** Return the facetIndex of the currently referenced facet in the client polyface. */
56
56
  currentReadIndex(): number;
57
57
  /** Return the point index of vertex `i` within the currently loaded facet. */
58
58
  clientPointIndex(i: number): number;
@@ -95,7 +95,8 @@ export declare class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor
95
95
  static createSubsetVisitor(polyface: IndexedPolyface, activeFacetIndices: number[], numWrap?: number): IndexedPolyfaceSubsetVisitor;
96
96
  /**
97
97
  * Advance the iterator to a particular facet in the subset of client polyface facets.
98
- * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within the client polyface.
98
+ * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within
99
+ * the client polyface.
99
100
  * @return whether the iterator was successfully moved.
100
101
  */
101
102
  moveToReadIndex(activeIndex: number): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedPolyfaceVisitor.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IndexedPolyfaceVisitor.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,YAAa,YAAW,eAAe;IACjF,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAkB;IAEnC,SAAS,aAAa,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM;IAYhE,yCAAyC;IAClC,cAAc,IAAI,eAAe;IAGxC,iEAAiE;IAC1D,sBAAsB,IAAI,MAAM;IAGvC;;;;;;;;OAQG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM;IAGjC;;;OAGG;IACH,IAAW,iBAAiB,IAAI,MAAM,CAErC;IACD,+DAA+D;WACjD,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,sBAAsB;IAGxF,yEAAyE;IAClE,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAenD,yEAAyE;IAClE,eAAe,IAAI,OAAO;IAMjC,sEAAsE;IAC/D,KAAK,IAAI,IAAI;IAIpB;;;OAGG;IACI,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAcpF;;;OAGG;IACI,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IActF,sFAAsF;IAC/E,gBAAgB,IAAI,MAAM;IAGjC,8EAA8E;IACvE,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG1C,8EAA8E;IACvE,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG1C,+EAA+E;IACxE,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG3C,8EAA8E;IACvE,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG1C,iFAAiF;IAC1E,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAGxC,wCAAwC;IACjC,WAAW,IAAI,IAAI;IAW1B,iGAAiG;IAC1F,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAWhE;;;OAGG;IACI,wBAAwB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAchH;AACD;;;;;GAKG;AACH,qBAAa,4BAA6B,SAAQ,sBAAsB;IACtE,OAAO,CAAC,mBAAmB,CAAC,CAAW;IACvC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO;IAMP,OAAO,CAAC,kBAAkB;IAG1B;;;;;OAKG;WACW,mBAAmB,CAC/B,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,MAAU,GAC3E,4BAA4B;IAG/B;;;;;OAKG;IACa,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAQ7D;;;OAGG;IACa,eAAe,IAAI,OAAO;IAM1C,qGAAqG;IACrF,KAAK,IAAI,IAAI;IAI7B;;;;OAIG;IACI,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKjE,iEAAiE;IACjD,sBAAsB,IAAI,MAAM;IAGhD;;;;;;;;;;;;MAYE;WACY,sBAAsB,CAClC,IAAI,EAAE,eAAe,GAAG,sBAAsB,EAC9C,aAAa,GAAE,QAA2B,EAC1C,SAAS,GAAE,KAAgC,EAC3C,OAAO,GAAE,MAAU,GAClB,4BAA4B;CAiBhC"}
@@ -20,6 +20,11 @@ const PolyfaceData_1 = require("./PolyfaceData");
20
20
  * @public
21
21
  */
22
22
  class IndexedPolyfaceVisitor extends PolyfaceData_1.PolyfaceData {
23
+ _currentFacetIndex;
24
+ _nextFacetIndex;
25
+ _numWrap;
26
+ _numEdges;
27
+ _polyface;
23
28
  // to be called from static factory method that validates the polyface
24
29
  constructor(polyface, numWrap) {
25
30
  super(polyface.data.normalCount > 0, polyface.data.paramCount > 0, polyface.data.colorCount > 0, polyface.twoSided);
@@ -114,7 +119,7 @@ class IndexedPolyfaceVisitor extends PolyfaceData_1.PolyfaceData {
114
119
  return undefined;
115
120
  return faceData.convertParamXYToNormalized(this.param.getXAtUncheckedPointIndex(index), this.param.getYAtUncheckedPointIndex(index), result);
116
121
  }
117
- /** Return the index (in the client polyface) of the current facet. */
122
+ /** Return the facetIndex of the currently referenced facet in the client polyface. */
118
123
  currentReadIndex() {
119
124
  return this._currentFacetIndex;
120
125
  }
@@ -189,6 +194,9 @@ exports.IndexedPolyfaceVisitor = IndexedPolyfaceVisitor;
189
194
  * @public
190
195
  */
191
196
  class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {
197
+ _parentFacetIndices; // only undefined during super constructor!
198
+ _currentActiveIndex; // index within _parentFacetIndices, or -1 after construction
199
+ _nextActiveIndex; // index within _parentFacetIndices
192
200
  constructor(polyface, activeFacetIndices, numWrap) {
193
201
  super(polyface, numWrap);
194
202
  this._parentFacetIndices = activeFacetIndices.slice();
@@ -209,7 +217,8 @@ class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {
209
217
  }
210
218
  /**
211
219
  * Advance the iterator to a particular facet in the subset of client polyface facets.
212
- * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within the client polyface.
220
+ * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within
221
+ * the client polyface.
213
222
  * @return whether the iterator was successfully moved.
214
223
  */
215
224
  moveToReadIndex(activeIndex) {