@itwin/core-geometry 5.12.0-dev.9 → 5.13.0-dev.1

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 (540) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.js.map +1 -1
  4. package/lib/cjs/bspline/AkimaCurve3d.d.ts +5 -0
  5. package/lib/cjs/bspline/AkimaCurve3d.d.ts.map +1 -1
  6. package/lib/cjs/bspline/AkimaCurve3d.js +8 -0
  7. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  13. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  14. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  15. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  16. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  17. package/lib/cjs/bspline/InterpolationCurve3d.d.ts +5 -0
  18. package/lib/cjs/bspline/InterpolationCurve3d.d.ts.map +1 -1
  19. package/lib/cjs/bspline/InterpolationCurve3d.js +8 -0
  20. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  21. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  22. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  23. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  24. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  25. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  26. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  27. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  28. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  29. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  30. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  31. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  32. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  33. package/lib/cjs/core-geometry.js.map +1 -1
  34. package/lib/cjs/curve/Arc3d.js.map +1 -1
  35. package/lib/cjs/curve/ConstrainedCurve2d.js.map +1 -1
  36. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  37. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  38. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  39. package/lib/cjs/curve/CurveCollection.d.ts +2 -0
  40. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  41. package/lib/cjs/curve/CurveCollection.js +5 -0
  42. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  43. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  44. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  45. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  46. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  47. package/lib/cjs/curve/CurveOps.js.map +1 -1
  48. package/lib/cjs/curve/CurvePrimitive.d.ts +2 -0
  49. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  50. package/lib/cjs/curve/CurvePrimitive.js +5 -0
  51. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  52. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  53. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  54. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  55. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  56. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  57. package/lib/cjs/curve/LineString3d.js.map +1 -1
  58. package/lib/cjs/curve/Loop.js.map +1 -1
  59. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  60. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  61. package/lib/cjs/curve/Path.js.map +1 -1
  62. package/lib/cjs/curve/PointString3d.js.map +1 -1
  63. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  64. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  65. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  66. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  67. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  68. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +3 -3
  69. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  70. package/lib/cjs/curve/Query/PlanarSubdivision.js +6 -6
  71. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  72. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  73. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  74. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  75. package/lib/cjs/curve/RegionOps.d.ts +69 -8
  76. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  77. package/lib/cjs/curve/RegionOps.js +257 -86
  78. package/lib/cjs/curve/RegionOps.js.map +1 -1
  79. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +2 -3
  80. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  81. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +5 -6
  82. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  83. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  84. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  85. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  86. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  87. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  88. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  89. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  90. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  91. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  92. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  93. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -1
  94. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  95. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +82 -58
  96. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  97. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  98. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  99. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  100. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  101. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +3 -7
  103. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  104. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +48 -53
  105. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  106. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  107. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.js.map +1 -1
  108. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  109. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  110. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  111. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  112. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -1
  113. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -1
  114. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -1
  115. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -1
  116. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -1
  118. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -1
  119. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -1
  120. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.js.map +1 -1
  121. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  122. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  123. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  124. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  125. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  126. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  127. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  128. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  129. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  130. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  131. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  132. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  133. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  134. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  135. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  136. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  137. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  138. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  139. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  140. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  141. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  142. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  143. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  144. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  145. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  146. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  147. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  148. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  149. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  150. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  151. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  152. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  153. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  154. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  155. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  156. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  157. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  158. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  159. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  160. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  161. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  162. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  163. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  164. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  165. package/lib/cjs/geometry3d/Range.js.map +1 -1
  166. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  167. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  168. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  169. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  170. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  171. package/lib/cjs/geometry3d/Transform.d.ts +1 -4
  172. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  173. package/lib/cjs/geometry3d/Transform.js +1 -4
  174. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  175. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  176. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  177. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  178. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  179. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  180. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  181. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  182. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  183. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  184. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  185. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  186. package/lib/cjs/numerics/Complex.js.map +1 -1
  187. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  188. package/lib/cjs/numerics/Newton.js.map +1 -1
  189. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  190. package/lib/cjs/numerics/PolarData.js.map +1 -1
  191. package/lib/cjs/numerics/Polynomials.d.ts +3 -3
  192. package/lib/cjs/numerics/Polynomials.js +5 -5
  193. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  194. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  195. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  196. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  197. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  198. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  199. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  200. package/lib/cjs/polyface/AuxData.js.map +1 -1
  201. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  202. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  203. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  204. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  205. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  206. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  207. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  208. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  209. package/lib/cjs/polyface/Polyface.js.map +1 -1
  210. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  211. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  212. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  213. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  214. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  215. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  216. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  217. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  218. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  219. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  220. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  221. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  222. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  223. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  224. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  225. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  226. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  227. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  228. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  229. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  230. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  231. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  232. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  233. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  234. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  235. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  236. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  237. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  238. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  239. package/lib/cjs/solid/Box.js.map +1 -1
  240. package/lib/cjs/solid/Cone.js.map +1 -1
  241. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  242. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  243. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  244. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  245. package/lib/cjs/solid/Sphere.js.map +1 -1
  246. package/lib/cjs/solid/SweepContour.js.map +1 -1
  247. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  248. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  249. package/lib/cjs/topology/Graph.d.ts +5 -2
  250. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  251. package/lib/cjs/topology/Graph.js +5 -2
  252. package/lib/cjs/topology/Graph.js.map +1 -1
  253. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  254. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  255. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  256. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  257. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  258. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  259. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  260. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  261. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  262. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  263. package/lib/cjs/topology/MaskManager.js.map +1 -1
  264. package/lib/cjs/topology/Merging.js.map +1 -1
  265. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  266. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  267. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  268. package/lib/cjs/topology/Triangulation.js.map +1 -1
  269. package/lib/cjs/topology/Voronoi.js.map +1 -1
  270. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  271. package/lib/esm/Constant.js.map +1 -1
  272. package/lib/esm/Geometry.js.map +1 -1
  273. package/lib/esm/bspline/AkimaCurve3d.d.ts +5 -0
  274. package/lib/esm/bspline/AkimaCurve3d.d.ts.map +1 -1
  275. package/lib/esm/bspline/AkimaCurve3d.js +8 -0
  276. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  277. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  278. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  279. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  280. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  281. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  282. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  283. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  284. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  285. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  286. package/lib/esm/bspline/InterpolationCurve3d.d.ts +5 -0
  287. package/lib/esm/bspline/InterpolationCurve3d.d.ts.map +1 -1
  288. package/lib/esm/bspline/InterpolationCurve3d.js +8 -0
  289. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  290. package/lib/esm/bspline/KnotVector.js.map +1 -1
  291. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  292. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  293. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  294. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  295. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  296. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  297. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  298. package/lib/esm/clipping/ClipVector.js.map +1 -1
  299. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  300. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  301. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  302. package/lib/esm/core-geometry.js.map +1 -1
  303. package/lib/esm/curve/Arc3d.js.map +1 -1
  304. package/lib/esm/curve/ConstrainedCurve2d.js.map +1 -1
  305. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  306. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  307. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  308. package/lib/esm/curve/CurveCollection.d.ts +2 -0
  309. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  310. package/lib/esm/curve/CurveCollection.js +5 -0
  311. package/lib/esm/curve/CurveCollection.js.map +1 -1
  312. package/lib/esm/curve/CurveCurve.js.map +1 -1
  313. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  314. package/lib/esm/curve/CurveFactory.js.map +1 -1
  315. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  316. package/lib/esm/curve/CurveOps.js.map +1 -1
  317. package/lib/esm/curve/CurvePrimitive.d.ts +2 -0
  318. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  319. package/lib/esm/curve/CurvePrimitive.js +5 -0
  320. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  321. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  322. package/lib/esm/curve/CurveTypes.js.map +1 -1
  323. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  324. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  325. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  326. package/lib/esm/curve/LineString3d.js.map +1 -1
  327. package/lib/esm/curve/Loop.js.map +1 -1
  328. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  329. package/lib/esm/curve/ParityRegion.js.map +1 -1
  330. package/lib/esm/curve/Path.js.map +1 -1
  331. package/lib/esm/curve/PointString3d.js.map +1 -1
  332. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  333. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  334. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  335. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  336. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  337. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +3 -3
  338. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  339. package/lib/esm/curve/Query/PlanarSubdivision.js +6 -6
  340. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  341. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  342. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  343. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  344. package/lib/esm/curve/RegionOps.d.ts +69 -8
  345. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  346. package/lib/esm/curve/RegionOps.js +257 -86
  347. package/lib/esm/curve/RegionOps.js.map +1 -1
  348. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +2 -3
  349. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  350. package/lib/esm/curve/RegionOpsClassificationSweeps.js +5 -6
  351. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  352. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  353. package/lib/esm/curve/UnionRegion.js.map +1 -1
  354. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  355. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  356. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  357. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  358. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  359. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  360. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  361. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  362. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -1
  363. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  364. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +82 -58
  365. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  366. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  367. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  368. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  369. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  370. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  371. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +3 -7
  372. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  373. package/lib/esm/curve/internalContexts/MultiChainCollector.js +48 -53
  374. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  375. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  376. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.js.map +1 -1
  377. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  378. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  379. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  380. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  381. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -1
  382. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -1
  383. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -1
  384. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -1
  385. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -1
  386. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -1
  387. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -1
  388. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -1
  389. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.js.map +1 -1
  390. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  391. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  392. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  393. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  394. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  395. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  396. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  397. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  398. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  399. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  400. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  401. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  402. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  403. package/lib/esm/geometry3d/Angle.js.map +1 -1
  404. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  405. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  406. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  407. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  408. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  409. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  410. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  411. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  412. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  413. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  414. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  415. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  416. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  417. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  418. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  419. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  420. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  421. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  422. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  423. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  424. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  425. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  426. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  427. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  428. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  429. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  430. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  431. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  432. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  433. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  434. package/lib/esm/geometry3d/Range.js.map +1 -1
  435. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  436. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  437. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  438. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  439. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  440. package/lib/esm/geometry3d/Transform.d.ts +1 -4
  441. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  442. package/lib/esm/geometry3d/Transform.js +1 -4
  443. package/lib/esm/geometry3d/Transform.js.map +1 -1
  444. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  445. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  446. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  447. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  448. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  449. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  450. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  451. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  452. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  453. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  454. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  455. package/lib/esm/numerics/Complex.js.map +1 -1
  456. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  457. package/lib/esm/numerics/Newton.js.map +1 -1
  458. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  459. package/lib/esm/numerics/PolarData.js.map +1 -1
  460. package/lib/esm/numerics/Polynomials.d.ts +3 -3
  461. package/lib/esm/numerics/Polynomials.js +5 -5
  462. package/lib/esm/numerics/Polynomials.js.map +1 -1
  463. package/lib/esm/numerics/Quadrature.js.map +1 -1
  464. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  465. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  466. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  467. package/lib/esm/numerics/UnionFind.js.map +1 -1
  468. package/lib/esm/numerics/UsageSums.js.map +1 -1
  469. package/lib/esm/polyface/AuxData.js.map +1 -1
  470. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  471. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  472. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  473. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  474. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  475. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  476. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  477. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  478. package/lib/esm/polyface/Polyface.js.map +1 -1
  479. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  480. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  481. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  482. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  483. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  484. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  485. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  486. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  487. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  488. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  489. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  490. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  491. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  492. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  493. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  494. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  495. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  496. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  497. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  498. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  499. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  500. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  501. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  502. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  503. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  504. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  505. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  506. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  507. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  508. package/lib/esm/solid/Box.js.map +1 -1
  509. package/lib/esm/solid/Cone.js.map +1 -1
  510. package/lib/esm/solid/LinearSweep.js.map +1 -1
  511. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  512. package/lib/esm/solid/RuledSweep.js.map +1 -1
  513. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  514. package/lib/esm/solid/Sphere.js.map +1 -1
  515. package/lib/esm/solid/SweepContour.js.map +1 -1
  516. package/lib/esm/solid/TorusPipe.js.map +1 -1
  517. package/lib/esm/topology/ChainMerge.js.map +1 -1
  518. package/lib/esm/topology/Graph.d.ts +5 -2
  519. package/lib/esm/topology/Graph.d.ts.map +1 -1
  520. package/lib/esm/topology/Graph.js +5 -2
  521. package/lib/esm/topology/Graph.js.map +1 -1
  522. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  523. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  524. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  525. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  526. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  527. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  528. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  529. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  530. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  531. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  532. package/lib/esm/topology/MaskManager.js.map +1 -1
  533. package/lib/esm/topology/Merging.js.map +1 -1
  534. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  535. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  536. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  537. package/lib/esm/topology/Triangulation.js.map +1 -1
  538. package/lib/esm/topology/Voronoi.js.map +1 -1
  539. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  540. package/package.json +5 -5
@@ -117,9 +117,10 @@ class RegionOps {
117
117
  return undefined;
118
118
  }
119
119
  /**
120
- * Return an area tolerance for a given xy-range and optional distance tolerance.
120
+ * Return an area tolerance for a given xy-range and distance tolerance.
121
121
  * @param range range of planar region to tolerance.
122
- * @param distanceTolerance optional absolute distance tolerance.
122
+ * @param distanceTolerance optional absolute distance tolerance. Default is [[Geometry.smallMetricDistance]].
123
+ * @see [[computeMinimumArea]] for an area tolerance unscaled by geometry size, which is more widely applicable for degeneracy testing.
123
124
  */
124
125
  static computeXYAreaTolerance(range, distanceTolerance = Geometry_1.Geometry.smallMetricDistance) {
125
126
  // ensure the result is nonzero: we never want to report a zero-area loop as a signed-area loop
@@ -130,6 +131,16 @@ class RegionOps {
130
131
  const halfDistTol = 0.5 * Math.abs(distanceTolerance);
131
132
  return halfDistTol * (range.xLength() + range.yLength() + halfDistTol);
132
133
  }
134
+ /**
135
+ * Return an area tolerance for a given distance tolerance.
136
+ * * The result can be used to determine whether a region's area is small enough to be considered degenerate.
137
+ * @param distanceTolerance optional minimum absolute distance between unique points. Default is [[Geometry.smallMetricDistance]].
138
+ */
139
+ static computeMinimumArea(distanceTolerance = Geometry_1.Geometry.smallMetricDistance) {
140
+ const areaTol = Math.PI * distanceTolerance * distanceTolerance;
141
+ const minAreaTol = Geometry_1.Geometry.smallFloatingPoint * 10; // observed area 2e-15 computed for a degenerate loop
142
+ return areaTol < minAreaTol ? minAreaTol : areaTol;
143
+ }
133
144
  /**
134
145
  * Return a (signed) xy area for a region.
135
146
  * * The input region should lie in a plane parallel to the xy-plane, as z-coords will be ignored.
@@ -378,13 +389,23 @@ class RegionOps {
378
389
  const localToWorld = FrameBuilder_1.FrameBuilder.createRightHandedFrame(undefined, xyRegion);
379
390
  return localToWorld ? localToWorld.origin.z : 0;
380
391
  }
392
+ /** Convert overlapping enums, from public to internal. */
393
+ static convertToRegionGroupOpType(op) {
394
+ if (RegionBinaryOpType.Parity === op)
395
+ return RegionOpsClassificationSweeps_1.RegionGroupOpType.Parity;
396
+ if (RegionBinaryOpType.Intersection === op)
397
+ return RegionOpsClassificationSweeps_1.RegionGroupOpType.Intersection;
398
+ return RegionOpsClassificationSweeps_1.RegionGroupOpType.Union;
399
+ }
381
400
  /**
382
401
  * Return areas defined by a boolean operation.
383
402
  * @note For best results, input regions should have correctly oriented loops. See [[sortOuterAndHoleLoopsXY]].
384
403
  * @note A common use case of this method is to split (a region with) overlapping loops into a `UnionRegion` with
385
404
  * adjacent `Loop`s: `regionOut = RegionOps.regionBooleanXY(regionIn, undefined, RegionBinaryOpType.Union)`.
386
- * @note The Union operation does not currently attempt to return a region with minimal loops. This may change with
387
- * future development.
405
+ * Such a union can be further simplified by passing the option `RegionBooleanXYOptions.simplifyUnion = true`.
406
+ * @note By default, this method does not discover holes implicitly formed by input loops. For example, the union of
407
+ * the four trapezoids that comprise a picture frame is not returned as a [[ParityRegion]] unless the option
408
+ * `simplifyUnion = true`.
388
409
  * @param loopsA first set of loops (treated as a union)
389
410
  * @param loopsB second set of loops (treated as a union)
390
411
  * @param operation indicates Union, Intersection, Parity, AMinusB, or BMinusA
@@ -392,48 +413,69 @@ class RegionOps {
392
413
  * @returns a region resulting from merging input loops and the boolean operation.
393
414
  */
394
415
  static regionBooleanXY(loopsA, loopsB, operation, mergeToleranceOrOptions = Geometry_1.Geometry.smallMetricDistance) {
395
- let mergeTolerance;
396
- let simplifyUnion;
397
- if (typeof mergeToleranceOrOptions === "number") {
398
- mergeTolerance = mergeToleranceOrOptions;
399
- simplifyUnion = false;
400
- }
401
- else {
402
- mergeTolerance = mergeToleranceOrOptions.mergeTolerance ?? Geometry_1.Geometry.smallMetricDistance;
403
- simplifyUnion = mergeToleranceOrOptions.simplifyUnion ?? false;
404
- }
405
- let result = UnionRegion_1.UnionRegion.create();
406
- const context = RegionOpsClassificationSweeps_1.RegionBooleanContext.create(RegionOpsClassificationSweeps_1.RegionGroupOpType.Union, RegionOpsClassificationSweeps_1.RegionGroupOpType.Union);
416
+ const optionIsNumber = typeof mergeToleranceOrOptions === "number";
417
+ const mergeTolerance = optionIsNumber ? mergeToleranceOrOptions : mergeToleranceOrOptions.mergeTolerance ?? Geometry_1.Geometry.smallMetricDistance;
418
+ const simplifyUnion = optionIsNumber ? false : mergeToleranceOrOptions.simplifyUnion ?? false;
419
+ const operationGroupA = optionIsNumber ? RegionOpsClassificationSweeps_1.RegionGroupOpType.Union : RegionOps.convertToRegionGroupOpType(mergeToleranceOrOptions.operationGroupA);
420
+ const operationGroupB = optionIsNumber ? RegionOpsClassificationSweeps_1.RegionGroupOpType.Union : RegionOps.convertToRegionGroupOpType(mergeToleranceOrOptions.operationGroupB);
421
+ let result;
422
+ const context = RegionOpsClassificationSweeps_1.RegionBooleanContext.create(operationGroupA, operationGroupB);
407
423
  context.addMembers(loopsA, loopsB);
408
424
  context.annotateAndMergeCurvesInGraph(mergeTolerance);
409
425
  const bridgeMask = Graph_1.HalfEdgeMask.BRIDGE_EDGE;
410
426
  const visitMask = context.graph.grabMask(false);
411
- const range = context.groupA.range().union(context.groupB.range());
412
- const areaTol = this.computeXYAreaTolerance(range, mergeTolerance);
427
+ // use our own outMask: we cannot use EXTERIOR as sweep clears it before processing each component
428
+ const outMask = simplifyUnion ? context.graph.grabMask(false) : Graph_1.HalfEdgeMask.NULL_MASK;
429
+ const outSeeds = simplifyUnion ? [] : undefined;
430
+ context.graph.clearMask(visitMask | outMask);
431
+ const areaTol = this.computeMinimumArea(mergeTolerance);
413
432
  const z = RegionOps.getZCoordinate(operation === RegionBinaryOpType.BMinusA ? loopsB : loopsA);
414
433
  const options = { compress: true, closureTol: mergeTolerance, bridgeMask, visitMask, z };
434
+ let numFacesIn = 0;
415
435
  context.runClassificationSweep(operation, (_graph, face, faceType, area) => {
416
436
  // ignore danglers and null faces, but not 2-edge "banana" faces with nonzero area
417
437
  if (face.countEdgesAroundFace() < 2)
418
438
  return;
419
439
  if (Math.abs(area) < areaTol)
420
440
  return;
421
- if (faceType === 1) {
441
+ if (simplifyUnion) { // process the outer/negative faces later
442
+ if (faceType === 1) {
443
+ numFacesIn++;
444
+ }
445
+ else {
446
+ face.setMaskAroundFace(outMask);
447
+ outSeeds?.push(face);
448
+ }
449
+ }
450
+ else if (faceType === 1) { // collect the inner faces now
422
451
  const loopOrParityRegion = PlanarSubdivision_1.PlanarSubdivision.createLoopOrParityRegionInFace(face, options);
423
- if (loopOrParityRegion)
424
- result.tryAddChild(loopOrParityRegion);
452
+ if (loopOrParityRegion) {
453
+ if (!result)
454
+ result = UnionRegion_1.UnionRegion.create();
455
+ if (result.tryAddChild(loopOrParityRegion))
456
+ numFacesIn++;
457
+ }
425
458
  }
426
459
  });
427
- context.graph.dropMask(visitMask);
428
- if (simplifyUnion && operation === RegionBinaryOpType.Union) {
429
- const signedLoops = RegionOps.constructAllXYRegionLoops(result);
430
- if (signedLoops) {
431
- const outerLoops = signedLoops.map((component) => component.negativeAreaLoops).flat();
432
- if (outerLoops.length > 0)
433
- result = UnionRegion_1.UnionRegion.create(...outerLoops);
460
+ // the outer faces are marked; now we collect their boundary super face loops and sort them
461
+ if (simplifyUnion && numFacesIn > 0 && outSeeds && outSeeds.length > 0) {
462
+ context.graph.clearMask(visitMask);
463
+ const outLoops = [];
464
+ for (const outSeed of outSeeds) {
465
+ const superFace = [];
466
+ const skipEdge = (he) => he.isMaskSet(visitMask) || !he.isMaskSet(outMask) || he.edgeMate.isMaskSet(outMask);
467
+ const announceEdge = (he) => superFace.push(he);
468
+ if (outSeed.announceEdgesInSuperFace(skipEdge, announceEdge)) {
469
+ superFace.forEach((he) => he.setMask(visitMask));
470
+ const outLoop = PlanarSubdivision_1.PlanarSubdivision.createLoopInFace(superFace, options);
471
+ if (outLoop)
472
+ outLoops.push(outLoop);
473
+ }
434
474
  }
475
+ result = this.sortOuterAndHoleLoopsXY(outLoops);
435
476
  }
436
- return this.simplifyRegion(result);
477
+ context.graph.dropMask(visitMask | outMask);
478
+ return result ? this.simplifyRegion(result) : undefined;
437
479
  }
438
480
  /**
439
481
  * Return a polyface whose facets are a boolean operation between the input regions.
@@ -750,86 +792,216 @@ class RegionOps {
750
792
  return SortablePolygon_1.SortablePolygon.sortAsAnyRegion(loopAndArea);
751
793
  }
752
794
  /**
753
- * Simplify the graph by removing bridge edges that do not serve to connect inner and outer loops.
754
- * * If edgeTags are `CurveLocationDetail`s, e.g., as set by `PlanarSubdivision.assembleHalfEdgeGraph`, attempt to heal edges split by removed bridge edges.
795
+ * Compare two edges' geometry from CurveLocationDetail edge tags.
796
+ * @returns an object with following properties:
797
+ * * sameCurves: whether the edges' curve definitions are equivalent.
798
+ * * reversedCurves: whether the edges' curve definitions are equivalent after reversing one of them.
799
+ * * senseEdge0/1: whether the topological edge is oriented in the same direction as the curve geometry, or the opposite direction.
800
+ */
801
+ static getEdgeGeometry(edge0, edge1) {
802
+ let sameCurves = false;
803
+ let reversedCurves = false;
804
+ let senseEdge0 = false;
805
+ let senseEdge1 = false;
806
+ if (edge0.edgeTag instanceof CurveLocationDetail_1.CurveLocationDetail && edge0.edgeTag.curve !== undefined && edge0.edgeTag.isInterval() && edge0.sortData &&
807
+ edge1.edgeTag instanceof CurveLocationDetail_1.CurveLocationDetail && edge1.edgeTag.curve !== undefined && edge1.edgeTag.isInterval() && edge1.sortData) {
808
+ sameCurves = edge0.edgeTag.curve === edge1.edgeTag.curve || edge0.edgeTag.curve.isAlmostEqual(edge1.edgeTag.curve);
809
+ reversedCurves = !sameCurves && edge0.edgeTag.curve.isAlmostEqual(edge1.edgeTag.curve.clone().reverse());
810
+ senseEdge0 = edge0.sortData > 0;
811
+ senseEdge1 = edge1.sortData > 0;
812
+ }
813
+ return { sameCurves, reversedCurves, senseEdge0, senseEdge1 };
814
+ }
815
+ /**
816
+ * Compare two edges' orientations. They do not have to be adjacent.
817
+ * * Requires CurveLocationDetail edge tags.
818
+ * @returns an object with following properties:
819
+ * * diametric: whether edges have same/reversed curves and are oriented diametrically opposite each other.
820
+ * * reversedCurves: whether the underlying curve definitions are reversed.
821
+ * * senseEdge0/1: whether the topological edge is oriented in the same direction as the curve geometry, or the opposite direction.
822
+ */
823
+ static areEdgesDiametric(edge0, edge1) {
824
+ let diametric = false;
825
+ let reversedCurves = false;
826
+ let senseEdge0 = false;
827
+ let senseEdge1 = false;
828
+ if (edge0 !== edge1) {
829
+ const data = RegionOps.getEdgeGeometry(edge0, edge1);
830
+ reversedCurves = data.reversedCurves;
831
+ senseEdge0 = data.senseEdge0;
832
+ senseEdge1 = data.senseEdge1;
833
+ diametric = (data.sameCurves && (senseEdge0 !== senseEdge1)) || (reversedCurves && (senseEdge0 === senseEdge1));
834
+ }
835
+ return { diametric, reversedCurves, senseEdge0, senseEdge1 };
836
+ }
837
+ /**
838
+ * Determine if the edges at a vertex were created by splitting an edge or null face.
839
+ * * Requires CurveLocationDetail edge tags.
840
+ * @param he an edge created by the split operation.
841
+ * @param vs another edge at the same vertex. If undefined, use `vs = he.vertexSuccessor` and check for a
842
+ * degree-2 vertex (e.g., split edge); otherwise, ignore the degree check (e.g., inputs are a null face pair).
843
+ */
844
+ static isHealableEdgeOrNullFace(he, vs) {
845
+ if (vs) {
846
+ if (!he.findAroundVertex(vs))
847
+ return false;
848
+ }
849
+ else {
850
+ vs = he.vertexSuccessor;
851
+ if (vs.vertexSuccessor !== he)
852
+ return false; // not a split edge
853
+ }
854
+ const directionData = RegionOps.areEdgesDiametric(he, vs);
855
+ if (!directionData.diametric)
856
+ return false;
857
+ const heVertexFraction = directionData.senseEdge0 ? he.edgeTag.fraction : he.edgeTag.fraction1;
858
+ let vsVertexFraction = directionData.senseEdge1 ? vs.edgeTag.fraction : vs.edgeTag.fraction1;
859
+ if (directionData.reversedCurves)
860
+ vsVertexFraction = 1.0 - vsVertexFraction;
861
+ return Geometry_1.Geometry.isSmallRelative(heVertexFraction - vsVertexFraction); // unrelated vertex fractions are not healable
862
+ }
863
+ /**
864
+ * Determine if the vertex loop resulted from splitting a null face into two null faces (and thus can be healed).
865
+ * * Requires CurveLocationDetail edge tags.
866
+ * * If there are multiple null faces at the vertex (a null face bundle), they must be adjacent and positioned in
867
+ * diametrically opposite pairs, each of which resulted from splitting a null face. This implies there are exactly
868
+ * two non-null faces opposite each other in the vertex loop.
869
+ * @returns an object with properties:
870
+ * * isHealable: whether the input is a healable vertex loop in a null face bundle
871
+ * * nullFacePairs: if `isHealable` is true, an array of the matching null face pairs around the vertex.
872
+ */
873
+ static isHealableNullFaceBundle(vertex) {
874
+ const nonNullFaceIndex = [];
875
+ const vertexLoop = [];
876
+ // lambda: null face detector, with curve check to rule out banana faces
877
+ const isNullFace = (face) => {
878
+ const fSucc = face.faceSuccessor;
879
+ return (fSucc.faceSuccessor === face) && RegionOps.areEdgesDiametric(face, fSucc).diametric;
880
+ };
881
+ vertex.announceEdgesAroundVertex((e) => {
882
+ if (!isNullFace(e))
883
+ nonNullFaceIndex.push(vertexLoop.length);
884
+ vertexLoop.push(e);
885
+ });
886
+ const degree = vertexLoop.length;
887
+ if (degree < 4 || nonNullFaceIndex.length !== 2 || Geometry_1.Geometry.modulo(degree, 2) > 0)
888
+ return { isHealable: false };
889
+ const iNonNull0 = nonNullFaceIndex[0];
890
+ if (nonNullFaceIndex[1] - iNonNull0 !== degree / 2)
891
+ return { isHealable: false };
892
+ const nullFacePairs = [];
893
+ for (let i = 1; i < degree / 2; i++) {
894
+ const iNullFace = Geometry_1.Geometry.modulo(iNonNull0 + i, degree);
895
+ const iMatchingNullFace = Geometry_1.Geometry.modulo(2 * iNonNull0 - iNullFace, degree);
896
+ if (!RegionOps.isHealableEdgeOrNullFace(vertexLoop[iNullFace], vertexLoop[iMatchingNullFace]))
897
+ return { isHealable: false };
898
+ nullFacePairs.push([vertexLoop[iNullFace], vertexLoop[iMatchingNullFace]]);
899
+ }
900
+ return { isHealable: true, nullFacePairs };
901
+ }
902
+ /** Heal a split edge by removing the redundant vertex loop and extending the surviving curve details. */
903
+ static healSplitEdgeAndCurve(v) {
904
+ const vs = v.vertexSuccessor;
905
+ const fPred = Graph_1.HalfEdge.healEdge(v, false);
906
+ if (!fPred)
907
+ return;
908
+ // lambda to extend the surviving node's curve interval. Inputs are on the same side of the healed edge.
909
+ const extendDetailInterval = (doomed, survivor) => {
910
+ const doomedData = RegionOps.getEdgeGeometry(doomed, survivor);
911
+ (0, core_bentley_1.assert)(doomedData.sameCurves || doomedData.reversedCurves, "expect related curves");
912
+ let newEndFraction = doomedData.senseEdge0 ? doomed.edgeTag.fraction1 : doomed.edgeTag.fraction;
913
+ if (doomedData.reversedCurves)
914
+ newEndFraction = 1.0 - newEndFraction;
915
+ const newEndPoint = doomedData.senseEdge0 ? doomed.edgeTag.point1 : doomed.edgeTag.point;
916
+ if (doomedData.senseEdge1)
917
+ survivor.edgeTag.captureFraction1Point1(newEndFraction, newEndPoint);
918
+ else
919
+ survivor.edgeTag.captureFractionPoint(newEndFraction, newEndPoint);
920
+ };
921
+ extendDetailInterval(v, fPred);
922
+ extendDetailInterval(vs, fPred.edgeMate);
923
+ }
924
+ /**
925
+ * Disconnect extraneous bridge edges, which remain in the graph as isolated edges.
755
926
  * @param graph half edges to process.
756
- * @param isBridgeEdge optional function to identify a bridge edge. Default looks for `HalfEdgeMask.BRIDGE_EDGE`.
757
- * @param faceToArea optional function to compute face area. Default is `HalfEdgeGraphSearch.signedFaceArea`.
758
- * @returns the number of extraneous bridge edges removed from the graph.
759
- * @internal
927
+ * @param isBridgeEdge optional callback to identify a bridge edge.
928
+ * @param faceToArea optional callback to compute face area.
929
+ * @returns array of surviving vertices formerly adjacent to the isolated bridge edges (e.g., for the caller to heal).
760
930
  */
761
- static removeExtraneousBridgeEdges(graph, isBridgeEdge, faceToArea) {
931
+ static isolateExtraneousBridgeEdges(graph, isBridgeEdge, faceToArea) {
762
932
  const toHeal = [];
763
933
  const interiorBridges = [];
764
- if (!faceToArea)
765
- faceToArea = (node) => HalfEdgeGraphSearch_1.HalfEdgeGraphSearch.signedFaceArea(node);
766
- if (!isBridgeEdge)
767
- isBridgeEdge = (node) => node.isMaskSet(Graph_1.HalfEdgeMask.BRIDGE_EDGE);
934
+ const isolateBridgeEdge = (edge) => {
935
+ if (!edge.isDangling)
936
+ toHeal.push(edge.vertexSuccessor);
937
+ if (!edge.edgeMate.isDangling)
938
+ toHeal.push(edge.edgeMate.vertexSuccessor);
939
+ edge.isolateEdge();
940
+ };
768
941
  // isolate dangling bridges, bridges separating different faces, and "exterior" bridges in the negative area face
769
942
  graph.announceEdges((_g, node) => {
770
943
  if (isBridgeEdge(node)) {
771
- if (node.isDangling || node.edgeMate.isDangling || !node.findAroundFace(node.edgeMate) || faceToArea(node) < 0.0) {
772
- toHeal.push(node.vertexSuccessor);
773
- toHeal.push(node.edgeMate.vertexSuccessor);
774
- node.isolateEdge();
775
- }
776
- else {
944
+ if (node.isDangling || node.edgeMate.isDangling || !node.findAroundFace(node.edgeMate) || faceToArea(node) < 0.0)
945
+ isolateBridgeEdge(node);
946
+ else
777
947
  interiorBridges.push(node);
778
- }
779
948
  }
780
949
  return true;
781
950
  });
782
- // Relies only on face loop orientation. Doesn't use static HalfEdgeMasks!
783
- const isBoundaryEdge = (node) => {
951
+ // lambda: check if a non-isolated interior bridge edge is extraneous, relying solely on face loop orientation (not HalfEdgeMasks!)
952
+ const isBridgeEdgeExtraneous = (node) => {
953
+ if (node.isIsolatedEdge)
954
+ return false; // already extraneous
784
955
  if (faceToArea(node) < 0.0)
785
956
  return true; // exterior face
786
957
  if (node.findAroundFace(node.edgeMate))
787
958
  return false; // interior washer face
788
959
  return faceToArea(node.edgeMate) < 0.0; // adjacent to exterior face
789
960
  };
790
- // All bridges in the negative area face were isolated, but this may have promoted other bridges to the
791
- // negative area face. Keep isolating these bridge edges until none remain.
961
+ // All bridges in the negative area face were isolated, but this may have caused surviving bridges to become extraneous
962
+ // (e.g., by swelling the negative area face around them). Keep isolating these bridge edges until none remain.
792
963
  let numIsolatedThisPass;
793
964
  do {
794
965
  numIsolatedThisPass = 0;
795
966
  for (const node of interiorBridges) {
796
- if (!node.isIsolatedEdge && isBoundaryEdge(node)) {
797
- toHeal.push(node.vertexSuccessor);
798
- toHeal.push(node.edgeMate.vertexSuccessor);
799
- node.isolateEdge();
967
+ if (isBridgeEdgeExtraneous(node)) {
968
+ isolateBridgeEdge(node);
800
969
  numIsolatedThisPass++;
801
970
  }
802
971
  }
803
972
  } while (numIsolatedThisPass > 0);
804
- // lambda to extend the detail interval on a side of a healed edge
805
- const mergeDetails = (he, newFraction, newPoint) => {
806
- if (he && he.edgeTag instanceof CurveLocationDetail_1.CurveLocationDetail && he.sortData !== undefined && newFraction !== undefined && newPoint) {
807
- if (he.sortData > 0)
808
- he.edgeTag.captureFraction1Point1(newFraction, newPoint);
809
- else
810
- he.edgeTag.captureFractionPoint(newFraction, newPoint);
973
+ return toHeal.filter((edge) => !edge.isIsolatedEdge);
974
+ }
975
+ /**
976
+ * Simplify the graph by removing bridge edges that do not serve to connect inner and outer loops.
977
+ * * If edgeTags are `CurveLocationDetail`s, e.g., as set by `PlanarSubdivision.assembleHalfEdgeGraph`, attempt to heal edges split by removed bridge edges.
978
+ * @param graph half edges to process.
979
+ * @param isBridgeEdge optional callback to identify a bridge edge. Default looks for `HalfEdgeMask.BRIDGE_EDGE`.
980
+ * @param faceToArea optional callback to compute face area. Default is `HalfEdgeGraphSearch.signedFaceArea`.
981
+ * @returns the number of extraneous bridge edges removed from the graph.
982
+ * @internal
983
+ */
984
+ static removeExtraneousBridgeEdges(graph, isBridgeEdge, faceToArea) {
985
+ if (!faceToArea)
986
+ faceToArea = (node) => HalfEdgeGraphSearch_1.HalfEdgeGraphSearch.signedFaceArea(node);
987
+ if (!isBridgeEdge)
988
+ isBridgeEdge = (node) => node.isMaskSet(Graph_1.HalfEdgeMask.BRIDGE_EDGE);
989
+ const toHeal = RegionOps.isolateExtraneousBridgeEdges(graph, isBridgeEdge, faceToArea);
990
+ // clean up the isolated bridge edges' original vertex loops, if possible
991
+ for (const vertex of toHeal) {
992
+ if (vertex.isDangling || vertex.isIsolatedEdge)
993
+ continue;
994
+ if (RegionOps.isHealableEdgeOrNullFace(vertex)) {
995
+ RegionOps.healSplitEdgeAndCurve(vertex);
996
+ continue;
811
997
  }
812
- };
813
- // At this point all removable bridges are isolated. Clean up their original vertex loops, if possible.
814
- for (const doomedA of toHeal) {
815
- const doomedB = doomedA.vertexSuccessor;
816
- if ( // are the geometries mergeable?
817
- doomedA !== doomedB &&
818
- doomedA.edgeTag instanceof CurveLocationDetail_1.CurveLocationDetail && doomedA.sortData !== undefined &&
819
- doomedB.edgeTag instanceof CurveLocationDetail_1.CurveLocationDetail && doomedB.sortData !== undefined &&
820
- doomedA.edgeTag.curve === doomedB.edgeTag.curve &&
821
- doomedA.edgeTag.isInterval() && doomedB.edgeTag.isInterval() &&
822
- doomedA.sortData * doomedB.sortData < 0 &&
823
- ((doomedA.sortData > 0 && Geometry_1.Geometry.isSmallRelative(doomedA.edgeTag.fraction - doomedB.edgeTag.fraction1)) ||
824
- (doomedA.sortData < 0 && Geometry_1.Geometry.isSmallRelative(doomedA.edgeTag.fraction1 - doomedB.edgeTag.fraction)))) {
825
- const survivorA = Graph_1.HalfEdge.healEdge(doomedA, false);
826
- if (survivorA) {
827
- const endFractionA = (doomedA.sortData > 0) ? doomedA.edgeTag.fraction1 : doomedA.edgeTag.fraction;
828
- const endPointA = (doomedA.sortData > 0) ? doomedA.edgeTag.point1 : doomedA.edgeTag.point;
829
- mergeDetails(survivorA, endFractionA, endPointA);
830
- const endFractionB = (doomedB.sortData > 0) ? doomedB.edgeTag.fraction1 : doomedB.edgeTag.fraction;
831
- const endPointB = (doomedB.sortData > 0) ? doomedB.edgeTag.point1 : doomedB.edgeTag.point;
832
- mergeDetails(survivorA.edgeMate, endFractionB, endPointB);
998
+ const bundleData = RegionOps.isHealableNullFaceBundle(vertex);
999
+ if (bundleData.isHealable && bundleData.nullFacePairs) {
1000
+ for (const [f0, f1] of bundleData.nullFacePairs)
1001
+ Graph_1.HalfEdge.pinch(f0, f1); // merge the null face pair into a single null face (with 2 split edges)
1002
+ for (const [e0, e1] of bundleData.nullFacePairs) {
1003
+ RegionOps.healSplitEdgeAndCurve(e0);
1004
+ RegionOps.healSplitEdgeAndCurve(e1);
833
1005
  }
834
1006
  }
835
1007
  }
@@ -884,8 +1056,6 @@ class RegionOps {
884
1056
  static constructAllXYRegionLoops(curvesAndRegions, tolerance = Geometry_1.Geometry.smallMetricDistance, addBridges = true) {
885
1057
  let primitives = RegionOps.collectCurvePrimitives(curvesAndRegions, undefined, true, true);
886
1058
  primitives = TransferWithSplitArcs_1.TransferWithSplitArcs.clone(CurveCollection_1.BagOfCurves.create(...primitives)).children;
887
- const range = this.curveArrayRange(primitives);
888
- const areaTol = this.computeXYAreaTolerance(range, tolerance);
889
1059
  let hasOpenCurve = false;
890
1060
  if (addBridges) { // generate a temp graph from ONLY the closed inputs to extract its bridge edges
891
1061
  const context = RegionOpsClassificationSweeps_1.RegionBooleanContext.create(RegionOpsClassificationSweeps_1.RegionGroupOpType.Union, RegionOpsClassificationSweeps_1.RegionGroupOpType.Union);
@@ -910,7 +1080,8 @@ class RegionOps {
910
1080
  const graph = PlanarSubdivision_1.PlanarSubdivision.assembleHalfEdgeGraph(primitives, intersections, tolerance);
911
1081
  if (addBridges && hasOpenCurve)
912
1082
  RegionOps.removeExtraneousBridgeEdges(graph);
913
- return PlanarSubdivision_1.PlanarSubdivision.collectSignedLoopSetsInHalfEdgeGraph(graph, areaTol);
1083
+ const areaTol = this.computeMinimumArea(tolerance);
1084
+ return PlanarSubdivision_1.PlanarSubdivision.collectSignedLoopSetsInHalfEdgeGraph(graph, tolerance, areaTol);
914
1085
  }
915
1086
  /**
916
1087
  * Collect all `CurvePrimitives` in loosely typed input.