@itwin/core-geometry 5.1.0-dev.9 → 5.2.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 (598) hide show
  1. package/CHANGELOG.md +58 -1
  2. package/lib/cjs/Geometry.d.ts +18 -10
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +13 -3
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/BSpline1dNd.d.ts +1 -1
  7. package/lib/cjs/bspline/BSpline1dNd.js +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve.js +7 -1
  11. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineSurface.d.ts +4 -3
  13. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  14. package/lib/cjs/bspline/BSplineSurface.js +4 -5
  15. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  16. package/lib/cjs/clipping/ClipPlane.d.ts +7 -5
  17. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  18. package/lib/cjs/clipping/ClipPlane.js +9 -5
  19. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  20. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  21. package/lib/cjs/clipping/ClipUtils.js +5 -3
  22. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  23. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +1 -2
  24. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  25. package/lib/cjs/clipping/ConvexClipPlaneSet.js +13 -25
  26. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  27. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  28. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  29. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  30. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  31. package/lib/cjs/core-geometry.d.ts +2 -0
  32. package/lib/cjs/core-geometry.d.ts.map +1 -1
  33. package/lib/cjs/core-geometry.js +2 -0
  34. package/lib/cjs/core-geometry.js.map +1 -1
  35. package/lib/cjs/curve/Arc3d.d.ts +54 -32
  36. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  37. package/lib/cjs/curve/Arc3d.js +56 -37
  38. package/lib/cjs/curve/Arc3d.js.map +1 -1
  39. package/lib/cjs/curve/CurveCollection.d.ts +40 -1
  40. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  41. package/lib/cjs/curve/CurveCollection.js +90 -0
  42. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  43. package/lib/cjs/curve/CurveFactory.d.ts +3 -2
  44. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  45. package/lib/cjs/curve/CurveFactory.js +6 -5
  46. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  47. package/lib/cjs/curve/CurveLocationDetail.d.ts +27 -25
  48. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  49. package/lib/cjs/curve/CurveLocationDetail.js +30 -25
  50. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  51. package/lib/cjs/curve/CurvePrimitive.d.ts +9 -2
  52. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  53. package/lib/cjs/curve/CurvePrimitive.js +11 -0
  54. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  55. package/lib/cjs/curve/CurveTypes.d.ts +1 -1
  56. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  57. package/lib/cjs/curve/LineSegment3d.d.ts +2 -0
  58. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  59. package/lib/cjs/curve/LineSegment3d.js +4 -0
  60. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  61. package/lib/cjs/curve/LineString3d.d.ts +7 -0
  62. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  63. package/lib/cjs/curve/LineString3d.js +15 -3
  64. package/lib/cjs/curve/LineString3d.js.map +1 -1
  65. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  66. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +37 -8
  67. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  68. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +34 -8
  69. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  70. package/lib/cjs/curve/Query/PlanarSubdivision.js +129 -33
  71. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  72. package/lib/cjs/curve/Query/StrokeCountChain.d.ts +4 -3
  73. package/lib/cjs/curve/Query/StrokeCountChain.d.ts.map +1 -1
  74. package/lib/cjs/curve/Query/StrokeCountChain.js +20 -9
  75. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  76. package/lib/cjs/curve/RegionMomentsXY.d.ts +2 -1
  77. package/lib/cjs/curve/RegionMomentsXY.d.ts.map +1 -1
  78. package/lib/cjs/curve/RegionMomentsXY.js +26 -41
  79. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  80. package/lib/cjs/curve/RegionOps.d.ts +74 -39
  81. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  82. package/lib/cjs/curve/RegionOps.js +146 -46
  83. package/lib/cjs/curve/RegionOps.js.map +1 -1
  84. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +36 -27
  85. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  86. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +161 -55
  87. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  88. package/lib/cjs/curve/StrokeOptions.d.ts +1 -1
  89. package/lib/cjs/curve/StrokeOptions.js +1 -1
  90. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  91. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  92. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +2 -2
  93. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +6 -6
  94. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  95. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  96. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  97. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  98. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  99. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  100. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +0 -1
  101. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  103. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  104. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js +34 -0
  105. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  106. package/lib/cjs/geometry3d/AngleSweep.d.ts +25 -18
  107. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  108. package/lib/cjs/geometry3d/AngleSweep.js +32 -18
  109. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  110. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  111. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  112. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +19 -25
  113. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  114. package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
  115. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  116. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +1 -1
  117. package/lib/cjs/geometry3d/GrowableXYArray.js +1 -1
  118. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  119. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +8 -3
  120. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  121. package/lib/cjs/geometry3d/GrowableXYZArray.js +21 -3
  122. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  123. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +11 -1
  124. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  125. package/lib/cjs/geometry3d/IndexedXYZCollection.js +21 -3
  126. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  127. package/lib/cjs/geometry3d/Plane3d.d.ts +2 -0
  128. package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
  129. package/lib/cjs/geometry3d/Plane3d.js +6 -1
  130. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  131. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  132. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  133. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  134. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  135. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  136. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  137. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  138. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  139. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  140. package/lib/cjs/geometry3d/Point2dVector2d.js +0 -2
  141. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  142. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +4 -4
  143. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  144. package/lib/cjs/geometry3d/Point3dVector3d.js +4 -5
  145. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  146. package/lib/cjs/geometry3d/PointHelpers.d.ts +7 -7
  147. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  148. package/lib/cjs/geometry3d/PointHelpers.js +66 -26
  149. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  150. package/lib/cjs/geometry3d/PolygonOps.d.ts +49 -2
  151. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  152. package/lib/cjs/geometry3d/PolygonOps.js +38 -2
  153. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  154. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  155. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  156. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  157. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  158. package/lib/cjs/geometry3d/PolylineOps.d.ts +5 -4
  159. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  160. package/lib/cjs/geometry3d/PolylineOps.js +5 -4
  161. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  162. package/lib/cjs/geometry3d/Range.d.ts +18 -10
  163. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  164. package/lib/cjs/geometry3d/Range.js +32 -10
  165. package/lib/cjs/geometry3d/Range.js.map +1 -1
  166. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -1
  167. package/lib/cjs/geometry3d/Ray2d.js +0 -1
  168. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  169. package/lib/cjs/geometry3d/Ray3d.d.ts +7 -9
  170. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  171. package/lib/cjs/geometry3d/Ray3d.js +23 -45
  172. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  173. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts +39 -29
  174. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  175. package/lib/cjs/geometry3d/ReusableObjectCache.js +49 -35
  176. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  177. package/lib/cjs/geometry3d/SortablePolygon.d.ts +1 -4
  178. package/lib/cjs/geometry3d/SortablePolygon.d.ts.map +1 -1
  179. package/lib/cjs/geometry3d/SortablePolygon.js +48 -43
  180. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  181. package/lib/cjs/geometry3d/Transform.d.ts +21 -2
  182. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  183. package/lib/cjs/geometry3d/Transform.js +32 -13
  184. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  185. package/lib/cjs/geometry4d/Point4d.d.ts +8 -5
  186. package/lib/cjs/geometry4d/Point4d.d.ts.map +1 -1
  187. package/lib/cjs/geometry4d/Point4d.js +27 -16
  188. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  189. package/lib/cjs/numerics/BezierPolynomials.d.ts +2 -0
  190. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  191. package/lib/cjs/numerics/BezierPolynomials.js +11 -0
  192. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  193. package/lib/cjs/numerics/SmallSystem.d.ts +77 -36
  194. package/lib/cjs/numerics/SmallSystem.d.ts.map +1 -1
  195. package/lib/cjs/numerics/SmallSystem.js +129 -73
  196. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  197. package/lib/cjs/polyface/FacetOrientation.d.ts +1 -1
  198. package/lib/cjs/polyface/FacetOrientation.js +1 -1
  199. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  200. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +55 -40
  201. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  202. package/lib/cjs/polyface/IndexedEdgeMatcher.js +83 -75
  203. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  204. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  205. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  206. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +47 -38
  207. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  208. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  209. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  210. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +51 -32
  211. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  212. package/lib/cjs/polyface/Polyface.d.ts +19 -5
  213. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  214. package/lib/cjs/polyface/Polyface.js +18 -2
  215. package/lib/cjs/polyface/Polyface.js.map +1 -1
  216. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -1
  217. package/lib/cjs/polyface/PolyfaceBuilder.js +6 -6
  218. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  219. package/lib/cjs/polyface/PolyfaceClip.d.ts +19 -18
  220. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  221. package/lib/cjs/polyface/PolyfaceClip.js +39 -42
  222. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  223. package/lib/cjs/polyface/PolyfaceData.d.ts +1 -1
  224. package/lib/cjs/polyface/PolyfaceData.js +1 -1
  225. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  226. package/lib/cjs/polyface/PolyfaceQuery.d.ts +119 -78
  227. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  228. package/lib/cjs/polyface/PolyfaceQuery.js +315 -231
  229. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  230. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  231. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  232. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +3 -3
  233. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  234. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  235. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  236. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  237. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  238. package/lib/cjs/serialization/BGFBReader.d.ts.map +1 -1
  239. package/lib/cjs/serialization/BGFBReader.js +2 -3
  240. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  241. package/lib/cjs/serialization/BGFBWriter.d.ts.map +1 -1
  242. package/lib/cjs/serialization/BGFBWriter.js +2 -4
  243. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  244. package/lib/cjs/serialization/GeometrySamples.d.ts +1 -1
  245. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  246. package/lib/cjs/serialization/GeometrySamples.js +3 -3
  247. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  248. package/lib/cjs/serialization/IModelJsonSchema.d.ts +3 -3
  249. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  250. package/lib/cjs/serialization/IModelJsonSchema.js +5 -5
  251. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  252. package/lib/cjs/solid/Box.d.ts.map +1 -1
  253. package/lib/cjs/solid/Box.js +7 -0
  254. package/lib/cjs/solid/Box.js.map +1 -1
  255. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  256. package/lib/cjs/solid/Cone.js +6 -0
  257. package/lib/cjs/solid/Cone.js.map +1 -1
  258. package/lib/cjs/solid/LinearSweep.d.ts +2 -3
  259. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  260. package/lib/cjs/solid/LinearSweep.js +11 -7
  261. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  262. package/lib/cjs/solid/RotationalSweep.d.ts +2 -2
  263. package/lib/cjs/solid/RotationalSweep.js +2 -2
  264. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  265. package/lib/cjs/solid/RuledSweep.d.ts +1 -1
  266. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  267. package/lib/cjs/solid/RuledSweep.js +5 -1
  268. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  269. package/lib/cjs/solid/Sphere.d.ts.map +1 -1
  270. package/lib/cjs/solid/Sphere.js +6 -3
  271. package/lib/cjs/solid/Sphere.js.map +1 -1
  272. package/lib/cjs/solid/SweepContour.d.ts +1 -1
  273. package/lib/cjs/solid/SweepContour.js +1 -1
  274. package/lib/cjs/solid/SweepContour.js.map +1 -1
  275. package/lib/cjs/solid/TorusPipe.d.ts.map +1 -1
  276. package/lib/cjs/solid/TorusPipe.js +4 -0
  277. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  278. package/lib/cjs/topology/ChainMerge.d.ts +1 -1
  279. package/lib/cjs/topology/ChainMerge.js +1 -1
  280. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  281. package/lib/cjs/topology/Graph.d.ts +64 -14
  282. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  283. package/lib/cjs/topology/Graph.js +149 -32
  284. package/lib/cjs/topology/Graph.js.map +1 -1
  285. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +3 -2
  286. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  287. package/lib/cjs/topology/HalfEdgeGraphSearch.js +3 -2
  288. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  289. package/lib/cjs/topology/Merging.d.ts +0 -1
  290. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  291. package/lib/cjs/topology/Merging.js +49 -46
  292. package/lib/cjs/topology/Merging.js.map +1 -1
  293. package/lib/cjs/topology/RegularizeFace.d.ts.map +1 -1
  294. package/lib/cjs/topology/RegularizeFace.js +2 -1
  295. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  296. package/lib/cjs/topology/Triangulation.d.ts +9 -14
  297. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  298. package/lib/cjs/topology/Triangulation.js +29 -22
  299. package/lib/cjs/topology/Triangulation.js.map +1 -1
  300. package/lib/esm/Geometry.d.ts +18 -10
  301. package/lib/esm/Geometry.d.ts.map +1 -1
  302. package/lib/esm/Geometry.js +13 -3
  303. package/lib/esm/Geometry.js.map +1 -1
  304. package/lib/esm/bspline/BSpline1dNd.d.ts +1 -1
  305. package/lib/esm/bspline/BSpline1dNd.js +1 -1
  306. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  307. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  308. package/lib/esm/bspline/BSplineCurve.js +7 -1
  309. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  310. package/lib/esm/bspline/BSplineSurface.d.ts +4 -3
  311. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  312. package/lib/esm/bspline/BSplineSurface.js +4 -5
  313. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  314. package/lib/esm/clipping/ClipPlane.d.ts +7 -5
  315. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  316. package/lib/esm/clipping/ClipPlane.js +9 -5
  317. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  318. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  319. package/lib/esm/clipping/ClipUtils.js +5 -3
  320. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  321. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +1 -2
  322. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  323. package/lib/esm/clipping/ConvexClipPlaneSet.js +13 -25
  324. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  325. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  326. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  327. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  328. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  329. package/lib/esm/core-geometry.d.ts +2 -0
  330. package/lib/esm/core-geometry.d.ts.map +1 -1
  331. package/lib/esm/core-geometry.js +2 -0
  332. package/lib/esm/core-geometry.js.map +1 -1
  333. package/lib/esm/curve/Arc3d.d.ts +54 -32
  334. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  335. package/lib/esm/curve/Arc3d.js +56 -37
  336. package/lib/esm/curve/Arc3d.js.map +1 -1
  337. package/lib/esm/curve/CurveCollection.d.ts +40 -1
  338. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  339. package/lib/esm/curve/CurveCollection.js +90 -0
  340. package/lib/esm/curve/CurveCollection.js.map +1 -1
  341. package/lib/esm/curve/CurveFactory.d.ts +3 -2
  342. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  343. package/lib/esm/curve/CurveFactory.js +6 -5
  344. package/lib/esm/curve/CurveFactory.js.map +1 -1
  345. package/lib/esm/curve/CurveLocationDetail.d.ts +27 -25
  346. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  347. package/lib/esm/curve/CurveLocationDetail.js +30 -25
  348. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  349. package/lib/esm/curve/CurvePrimitive.d.ts +9 -2
  350. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  351. package/lib/esm/curve/CurvePrimitive.js +11 -0
  352. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  353. package/lib/esm/curve/CurveTypes.d.ts +1 -1
  354. package/lib/esm/curve/CurveTypes.js.map +1 -1
  355. package/lib/esm/curve/LineSegment3d.d.ts +2 -0
  356. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  357. package/lib/esm/curve/LineSegment3d.js +4 -0
  358. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  359. package/lib/esm/curve/LineString3d.d.ts +7 -0
  360. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  361. package/lib/esm/curve/LineString3d.js +15 -3
  362. package/lib/esm/curve/LineString3d.js.map +1 -1
  363. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  364. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +37 -8
  365. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  366. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +34 -8
  367. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  368. package/lib/esm/curve/Query/PlanarSubdivision.js +131 -35
  369. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  370. package/lib/esm/curve/Query/StrokeCountChain.d.ts +4 -3
  371. package/lib/esm/curve/Query/StrokeCountChain.d.ts.map +1 -1
  372. package/lib/esm/curve/Query/StrokeCountChain.js +20 -9
  373. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  374. package/lib/esm/curve/RegionMomentsXY.d.ts +2 -1
  375. package/lib/esm/curve/RegionMomentsXY.d.ts.map +1 -1
  376. package/lib/esm/curve/RegionMomentsXY.js +26 -41
  377. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  378. package/lib/esm/curve/RegionOps.d.ts +74 -39
  379. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  380. package/lib/esm/curve/RegionOps.js +146 -46
  381. package/lib/esm/curve/RegionOps.js.map +1 -1
  382. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +36 -27
  383. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  384. package/lib/esm/curve/RegionOpsClassificationSweeps.js +161 -56
  385. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  386. package/lib/esm/curve/StrokeOptions.d.ts +1 -1
  387. package/lib/esm/curve/StrokeOptions.js +1 -1
  388. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  389. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  390. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +2 -2
  391. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +6 -6
  392. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  393. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  394. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  395. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  396. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  397. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  398. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +0 -1
  399. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  400. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  401. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  402. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js +30 -0
  403. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  404. package/lib/esm/geometry3d/AngleSweep.d.ts +25 -18
  405. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  406. package/lib/esm/geometry3d/AngleSweep.js +32 -18
  407. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  408. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  409. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  410. package/lib/esm/geometry3d/CoincidentGeometryOps.js +19 -25
  411. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  412. package/lib/esm/geometry3d/Ellipsoid.js +1 -1
  413. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  414. package/lib/esm/geometry3d/GrowableXYArray.d.ts +1 -1
  415. package/lib/esm/geometry3d/GrowableXYArray.js +1 -1
  416. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  417. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +8 -3
  418. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  419. package/lib/esm/geometry3d/GrowableXYZArray.js +21 -3
  420. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  421. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +11 -1
  422. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  423. package/lib/esm/geometry3d/IndexedXYZCollection.js +21 -3
  424. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  425. package/lib/esm/geometry3d/Plane3d.d.ts +2 -0
  426. package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
  427. package/lib/esm/geometry3d/Plane3d.js +6 -1
  428. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  429. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  430. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  431. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  432. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  433. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  434. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  435. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  436. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  437. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  438. package/lib/esm/geometry3d/Point2dVector2d.js +0 -2
  439. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  440. package/lib/esm/geometry3d/Point3dVector3d.d.ts +4 -4
  441. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  442. package/lib/esm/geometry3d/Point3dVector3d.js +4 -5
  443. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  444. package/lib/esm/geometry3d/PointHelpers.d.ts +7 -7
  445. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  446. package/lib/esm/geometry3d/PointHelpers.js +66 -26
  447. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  448. package/lib/esm/geometry3d/PolygonOps.d.ts +49 -2
  449. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  450. package/lib/esm/geometry3d/PolygonOps.js +38 -2
  451. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  452. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  453. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  454. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  455. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  456. package/lib/esm/geometry3d/PolylineOps.d.ts +5 -4
  457. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  458. package/lib/esm/geometry3d/PolylineOps.js +5 -4
  459. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  460. package/lib/esm/geometry3d/Range.d.ts +18 -10
  461. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  462. package/lib/esm/geometry3d/Range.js +32 -10
  463. package/lib/esm/geometry3d/Range.js.map +1 -1
  464. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -1
  465. package/lib/esm/geometry3d/Ray2d.js +0 -1
  466. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  467. package/lib/esm/geometry3d/Ray3d.d.ts +7 -9
  468. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  469. package/lib/esm/geometry3d/Ray3d.js +23 -45
  470. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  471. package/lib/esm/geometry3d/ReusableObjectCache.d.ts +39 -29
  472. package/lib/esm/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  473. package/lib/esm/geometry3d/ReusableObjectCache.js +47 -33
  474. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  475. package/lib/esm/geometry3d/SortablePolygon.d.ts +1 -4
  476. package/lib/esm/geometry3d/SortablePolygon.d.ts.map +1 -1
  477. package/lib/esm/geometry3d/SortablePolygon.js +48 -43
  478. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  479. package/lib/esm/geometry3d/Transform.d.ts +21 -2
  480. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  481. package/lib/esm/geometry3d/Transform.js +32 -13
  482. package/lib/esm/geometry3d/Transform.js.map +1 -1
  483. package/lib/esm/geometry4d/Point4d.d.ts +8 -5
  484. package/lib/esm/geometry4d/Point4d.d.ts.map +1 -1
  485. package/lib/esm/geometry4d/Point4d.js +27 -16
  486. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  487. package/lib/esm/numerics/BezierPolynomials.d.ts +2 -0
  488. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  489. package/lib/esm/numerics/BezierPolynomials.js +11 -0
  490. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  491. package/lib/esm/numerics/SmallSystem.d.ts +77 -36
  492. package/lib/esm/numerics/SmallSystem.d.ts.map +1 -1
  493. package/lib/esm/numerics/SmallSystem.js +129 -73
  494. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  495. package/lib/esm/polyface/FacetOrientation.d.ts +1 -1
  496. package/lib/esm/polyface/FacetOrientation.js +1 -1
  497. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  498. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +55 -40
  499. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  500. package/lib/esm/polyface/IndexedEdgeMatcher.js +83 -75
  501. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  502. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  503. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  504. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +47 -38
  505. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  506. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  507. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  508. package/lib/esm/polyface/IndexedPolyfaceWalker.js +51 -32
  509. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  510. package/lib/esm/polyface/Polyface.d.ts +19 -5
  511. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  512. package/lib/esm/polyface/Polyface.js +18 -2
  513. package/lib/esm/polyface/Polyface.js.map +1 -1
  514. package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -1
  515. package/lib/esm/polyface/PolyfaceBuilder.js +6 -6
  516. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  517. package/lib/esm/polyface/PolyfaceClip.d.ts +19 -18
  518. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  519. package/lib/esm/polyface/PolyfaceClip.js +39 -42
  520. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  521. package/lib/esm/polyface/PolyfaceData.d.ts +1 -1
  522. package/lib/esm/polyface/PolyfaceData.js +1 -1
  523. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  524. package/lib/esm/polyface/PolyfaceQuery.d.ts +119 -78
  525. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  526. package/lib/esm/polyface/PolyfaceQuery.js +316 -232
  527. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  528. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  529. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  530. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +3 -3
  531. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  532. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  533. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  534. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  535. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  536. package/lib/esm/serialization/BGFBReader.d.ts.map +1 -1
  537. package/lib/esm/serialization/BGFBReader.js +2 -3
  538. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  539. package/lib/esm/serialization/BGFBWriter.d.ts.map +1 -1
  540. package/lib/esm/serialization/BGFBWriter.js +2 -4
  541. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  542. package/lib/esm/serialization/GeometrySamples.d.ts +1 -1
  543. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  544. package/lib/esm/serialization/GeometrySamples.js +3 -3
  545. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  546. package/lib/esm/serialization/IModelJsonSchema.d.ts +3 -3
  547. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  548. package/lib/esm/serialization/IModelJsonSchema.js +5 -5
  549. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  550. package/lib/esm/solid/Box.d.ts.map +1 -1
  551. package/lib/esm/solid/Box.js +7 -0
  552. package/lib/esm/solid/Box.js.map +1 -1
  553. package/lib/esm/solid/Cone.d.ts.map +1 -1
  554. package/lib/esm/solid/Cone.js +6 -0
  555. package/lib/esm/solid/Cone.js.map +1 -1
  556. package/lib/esm/solid/LinearSweep.d.ts +2 -3
  557. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  558. package/lib/esm/solid/LinearSweep.js +11 -7
  559. package/lib/esm/solid/LinearSweep.js.map +1 -1
  560. package/lib/esm/solid/RotationalSweep.d.ts +2 -2
  561. package/lib/esm/solid/RotationalSweep.js +2 -2
  562. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  563. package/lib/esm/solid/RuledSweep.d.ts +1 -1
  564. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  565. package/lib/esm/solid/RuledSweep.js +5 -1
  566. package/lib/esm/solid/RuledSweep.js.map +1 -1
  567. package/lib/esm/solid/Sphere.d.ts.map +1 -1
  568. package/lib/esm/solid/Sphere.js +6 -3
  569. package/lib/esm/solid/Sphere.js.map +1 -1
  570. package/lib/esm/solid/SweepContour.d.ts +1 -1
  571. package/lib/esm/solid/SweepContour.js +1 -1
  572. package/lib/esm/solid/SweepContour.js.map +1 -1
  573. package/lib/esm/solid/TorusPipe.d.ts.map +1 -1
  574. package/lib/esm/solid/TorusPipe.js +4 -0
  575. package/lib/esm/solid/TorusPipe.js.map +1 -1
  576. package/lib/esm/topology/ChainMerge.d.ts +1 -1
  577. package/lib/esm/topology/ChainMerge.js +1 -1
  578. package/lib/esm/topology/ChainMerge.js.map +1 -1
  579. package/lib/esm/topology/Graph.d.ts +64 -14
  580. package/lib/esm/topology/Graph.d.ts.map +1 -1
  581. package/lib/esm/topology/Graph.js +149 -32
  582. package/lib/esm/topology/Graph.js.map +1 -1
  583. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +3 -2
  584. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  585. package/lib/esm/topology/HalfEdgeGraphSearch.js +3 -2
  586. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  587. package/lib/esm/topology/Merging.d.ts +0 -1
  588. package/lib/esm/topology/Merging.d.ts.map +1 -1
  589. package/lib/esm/topology/Merging.js +49 -46
  590. package/lib/esm/topology/Merging.js.map +1 -1
  591. package/lib/esm/topology/RegularizeFace.d.ts.map +1 -1
  592. package/lib/esm/topology/RegularizeFace.js +2 -1
  593. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  594. package/lib/esm/topology/Triangulation.d.ts +9 -14
  595. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  596. package/lib/esm/topology/Triangulation.js +29 -22
  597. package/lib/esm/topology/Triangulation.js.map +1 -1
  598. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"ChainMerge.js","sourceRoot":"","sources":["../../../src/topology/ChainMerge.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 Topology\n */\n\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Geometry, PlaneAltitudeEvaluator } from \"../Geometry\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from \"./Graph\";\nimport { HalfEdgeGraphOps } from \"./Merging\";\n\n/**\n * interface containing various options appropriate to merging lines segments into chains.\n * @internal\n */\nexport interface ChainMergeContextOptions {\n /**\n * Tolerance for declaring points equal\n * * Default is `Geometry.smallMetricDistance`\n */\n tolerance?: number;\n /**\n * Direction for primary sort.\n * * Default is `Vector3d.create(0.294234298, 0.72391399, 0.45234328798)`\n * * this vector should NOT be along a principal x,y,z direction.\n * * The internal form will be normalized.\n */\n primarySortDirection?: Vector3d;\n}\n/** Internal form of ChainMergeContextOptions -- same field names, but required to have contents. */\nclass ChainMergeContextValidatedOptions {\n /**\n * Tolerance for declaring points equal.\n */\n public tolerance: number;\n /** UNNORMALIZED base vector for sorting.\n * * Actual vector hoisted into an instance is normalized.\n */\n private static readonly _defaultPrimarySortDirection = Vector3d.create(0.294234298, 0.72391399, 0.45234328798);\n /**\n * Direction for primary sort. This is normalized !!!\n */\n public primarySortDirection: Vector3d;\n /** return a unit vector aligned with optional direction.\n * * Default return is into the first quadrant at a quirky angle so any perpendicular plane is unlikely to hit many points\n */\n public static createPrimarySortVector(vector?: Vector3d): Vector3d {\n if (vector === undefined) {\n vector = this._defaultPrimarySortDirection.clone();\n }\n return vector.normalizeWithDefault(\n ChainMergeContextValidatedOptions._defaultPrimarySortDirection.x,\n ChainMergeContextValidatedOptions._defaultPrimarySortDirection.y,\n ChainMergeContextValidatedOptions._defaultPrimarySortDirection.z);\n }\n /**\n * PRIVATE constructor -- assumes all inputs are validated in public create method !!!!\n * @param tolerance\n * @param unitVectorForPrimarySort\n */\n private constructor(tolerance: number, unitVectorForPrimarySort: Vector3d) {\n this.tolerance = tolerance;\n this.primarySortDirection = unitVectorForPrimarySort;\n }\n /** return the default option set. */\n public static createFromUnValidated(options?: ChainMergeContextOptions): ChainMergeContextValidatedOptions {\n const result = new ChainMergeContextValidatedOptions(Geometry.smallMetricDistance, ChainMergeContextValidatedOptions.createPrimarySortVector());\n if (options !== undefined) {\n if (options.tolerance !== undefined)\n result.tolerance = options.tolerance;\n if (options.primarySortDirection !== undefined)\n result.primarySortDirection = ChainMergeContextValidatedOptions.createPrimarySortVector();\n }\n return result;\n }\n /** Clone this context. */\n public clone(): ChainMergeContextValidatedOptions {\n return new ChainMergeContextValidatedOptions(this.tolerance, this.primarySortDirection);\n }\n}\n/**\n * * Context for assembling line segments into chains.\n * * Use the context in phases:\n * * Create the context: `context = ChainMergeContext.create ()`\n * * Add line with any combination of:\n * * `context.addSegment(pointA, pointB)`\n * * `context.addLineSegment3dArray (segments)`\n * * Scan all coordinate data for common coordinates. Twist nodes together to form chains:\n * * `context.clusterAndMergeVerticesXYZ ()`\n * * Collect the chains:\n * * myLinestringArray = context.collectMaximalChains();\n * * The context carries an optional plane which is used by addSegmentsOnPlane\n *\n * @internal\n */\nexport class ChainMergeContext {\n\n private _graph: HalfEdgeGraph;\n private _options: ChainMergeContextValidatedOptions;\n private _plane?: PlaneAltitudeEvaluator;\n private _convexClipper?: ConvexClipPlaneSet;\n private constructor(options: ChainMergeContextValidatedOptions) {\n this._graph = new HalfEdgeGraph();\n this._options = options;\n }\n /** Save a reference plane for later use, e.g. in addSegmentsOnPlane */\n public set plane(value: PlaneAltitudeEvaluator | undefined) { this._plane = value; }\n /** Property access for the reference plane. */\n public get plane(): PlaneAltitudeEvaluator | undefined { return this._plane; }\n\n /** Save a reference plane for later use, e.g. in addSegmentsOnPlane */\n public set convexClipper(value: ConvexClipPlaneSet | undefined) { this._convexClipper = value; }\n /** Property access for the reference plane. */\n public get convexClipper(): ConvexClipPlaneSet | undefined { return this._convexClipper; }\n\n /**\n * * Construct an empty chain merge graph.\n * * The options parameter may contain any combination of the options values.\n * * tolerance = absolute tolerance for declaring points equal.\n * * Default is `Geometry.smallMetricDistance`\n * * primarySortDirection = direction for first sort.\n * * To minimize clash among points on primary sort, this should NOT be perpendicular to any principal plane.\n * * The default points into the first octant with non-obvious components.\n */\n public static create(options?: ChainMergeContextOptions): ChainMergeContext {\n const validatedOptions = ChainMergeContextValidatedOptions.createFromUnValidated(options);\n return new ChainMergeContext(validatedOptions);\n }\n /** Add a segment to the evolving graph. */\n public addSegment(pointA: Point3d, pointB: Point3d) {\n this._graph.createEdgeXYZXYZ(pointA.x, pointA.y, pointA.z, 0, pointB.x, pointB.y, pointB.z, 0);\n }\n /** Add all segments from an array to the graph. */\n public addLineSegment3dArray(data: LineSegment3d[]) {\n for (const segment of data) {\n this.addSegment(segment.point0Ref, segment.point1Ref);\n }\n }\n /** Add edges for all segments that are \"on\" the plane.\n * * No action if `this.plane` is undefined.\n */\n public addSegmentsOnPlane(points: GrowableXYZArray, addClosure: boolean = false) {\n if (!this._plane)\n return;\n const plane = this._plane;\n let i0 = addClosure ? points.length - 1 : 0;\n let a0 = points.evaluateUncheckedIndexPlaneAltitude(i0, plane);\n let i1 = addClosure ? 0 : 1;\n let a1;\n for (; i1 < points.length; i0 = i1++ , a0 = a1) {\n a1 = points.evaluateUncheckedIndexPlaneAltitude(i1, plane);\n if (Geometry.isSmallMetricDistance(a0) && Geometry.isSmallMetricDistance(a1))\n this._graph.createEdgeXYZXYZ(\n points.getXAtUncheckedPointIndex(i0), points.getYAtUncheckedPointIndex(i0), points.getZAtUncheckedPointIndex(i0), 0,\n points.getXAtUncheckedPointIndex(i1), points.getYAtUncheckedPointIndex(i1), points.getZAtUncheckedPointIndex(i1), 0);\n }\n }\n /**\n * Return a numeric value to be used for sorting, with little chance widely separated nodes will have identical key.\n * * Any single x,y,z component is a poor choice because horizontal and vertical alignment is common.\n * * Hence take dot product of x,y,z with non-trivial fraction values.\n * @param node node with x,y,z coordinates\n */\n private primarySortKey(node: HalfEdge): number {\n return this._options.primarySortDirection.dotProductXYZ(node.x, node.y, node.z);\n }\n /** Return difference of sortData members as sort comparison */\n private static nodeCompareSortData(nodeA: HalfEdge, nodeB: HalfEdge): number {\n return nodeA.sortData! - nodeB.sortData!;\n }\n /** test if nodeA is a dangling edge end (i.e. edges around vertex equal 1, but detect it without walking all the way around. */\n private static isIsolatedEnd(nodeA: HalfEdge): boolean {\n return nodeA.vertexSuccessor === nodeA;\n }\n\n /** test if nodeA is at a vertex with exactly 2 edges (i.e. edges around vertex equal w, but detect it without walking all the way around. */\n private static isChainInteriorVertex(nodeA: HalfEdge): boolean {\n const nodeB = nodeA.vertexSuccessor;\n return nodeB !== nodeA && nodeB.vertexSuccessor === nodeA;\n }\n\n /**\n * * isolate all edge ends.\n * * perform cluster analysis to determine nearly coincident points.\n * * pinch all edges together at each vertex.\n */\n public clusterAndMergeVerticesXYZ() {\n HalfEdgeGraphOps.isolateAllEdges(this._graph);\n for (const p of this._graph.allHalfEdges) {\n p.sortData = this.primarySortKey(p);\n }\n const sortArray = this._graph.allHalfEdges.slice();\n sortArray.sort((nodeA, nodeB) => ChainMergeContext.nodeCompareSortData(nodeA, nodeB));\n const xyzTolerance = this._options.tolerance;\n // A node is unvisited if it is its own vertex successor !!!\n // otherwise the node has already been twisted into a base vertex.\n const n = sortArray.length;\n for (let i0 = 0; i0 < n; i0++) {\n const node0 = sortArray[i0];\n const qMin = node0.sortData!;\n const qMax = qMin + xyzTolerance;\n if (ChainMergeContext.isIsolatedEnd(node0)) {\n for (let i1 = i0 + 1; i1 < n; i1++) {\n const node1 = sortArray[i1];\n if (ChainMergeContext.isIsolatedEnd(node1)) {\n if (node1.sortData! > qMax)\n break;\n if (node0.distanceXYZ(node1) <= xyzTolerance) {\n HalfEdge.pinch(node0, node1);\n node1.setXYZFrom(node0); // force true equal coordinates.\n }\n }\n }\n }\n }\n }\n /**\n * If node0 is not visited, creating a linestring with that starting edge and all successive edges along a chain.\n * @param chains growing array of chains.\n * @param node0 start node for search.\n */\n private collectMaximalLineString3dFromStartNode(chains: LineString3d[], node0: HalfEdge, visitMask: HalfEdgeMask) {\n if (!node0.isMaskSet(visitMask)) {\n const ls = LineString3d.create();\n ls.addPointXYZ(node0.x, node0.y, node0.z);\n for (; ;) {\n node0.setMask(visitMask);\n node0.edgeMate.setMask(visitMask);\n node0 = node0.faceSuccessor;\n ls.addPointXYZ(node0.x, node0.y, node0.z);\n if (node0.isMaskSet(visitMask) || !ChainMergeContext.isChainInteriorVertex(node0))\n break;\n }\n chains.push(ls);\n }\n }\n /**\n * If node0 is not visited, creating a linestring with that starting edge and all successive edges along a chain.\n * @param chains growing array of chains.\n * @param node0 start node for search.\n */\n private collectMaximalGrowableXYXArrayFromStartNode(result: GrowableXYZArray[], node0: HalfEdge, visitMask: HalfEdgeMask) {\n if (!node0.isMaskSet(visitMask)) {\n const points = new GrowableXYZArray();\n points.pushXYZ(node0.x, node0.y, node0.z);\n for (; ;) {\n node0.setMask(visitMask);\n node0.edgeMate.setMask(visitMask);\n node0 = node0.faceSuccessor;\n points.pushXYZ(node0.x, node0.y, node0.z);\n if (node0.isMaskSet(visitMask) || !ChainMergeContext.isChainInteriorVertex(node0))\n break;\n }\n if (points.length > 0)\n result.push(points);\n }\n }\n\n /**\n * * find edges with start, end in same vertex loop.\n * * pinch them away from the loop\n * * set mask on both sides.\n * * Return the number of excisions.\n */\n private exciseAndMarkSlingEdges(mask: HalfEdgeMask): number {\n let n = 0;\n for (const p of this._graph.allHalfEdges) {\n if (p.distanceXYZ(p.edgeMate) < this._options.tolerance\n && !p.isMaskSet(mask)) {\n const q = p.edgeMate;\n HalfEdge.pinch(p, p.vertexPredecessor);\n HalfEdge.pinch(q, q.vertexPredecessor);\n p.setMask(mask);\n q.setMask(mask);\n n++;\n }\n }\n return n;\n }\n /** Collect chains which have maximum edge count, broken at an vertex with other than 2 edges.\n * * This is assumed to be preceded by a call to a vertex-cluster step such as `clusterAndMergeVerticesYXZ`\n */\n public collectMaximalChains(): LineString3d[] {\n const result: LineString3d[] = [];\n const visitMask = HalfEdgeMask.VISITED;\n // Pass 0: excise and mark zero-length edges.\n this.exciseAndMarkSlingEdges(visitMask);\n this._graph.clearMask(visitMask);\n // Pass 1: only start at non-interior edges -- vertices with one edge or more than 2 edges.\n // (Note that collectMaximalChain checks the visit mask.)\n for (const node0 of this._graph.allHalfEdges) {\n if (!ChainMergeContext.isChainInteriorVertex(node0)) {\n this.collectMaximalLineString3dFromStartNode(result, node0, visitMask);\n }\n }\n // Pass 2: start anywhere in an unvisited loop.\n for (const node0 of this._graph.allHalfEdges) {\n this.collectMaximalLineString3dFromStartNode(result, node0, visitMask);\n }\n return result;\n }\n public collectMaximalGrowableXYZArrays(): GrowableXYZArray[] {\n const result: GrowableXYZArray[] = [];\n const visitMask = HalfEdgeMask.VISITED;\n // Pass 0: excise and mark zero-length edges.\n this.exciseAndMarkSlingEdges(visitMask);\n this._graph.clearMask(visitMask);\n // Pass 1: only start at non-interior edges -- vertices with one edge or more than 2 edges.\n // (Note that collectMaximalChain checks the visit mask.)\n for (const node0 of this._graph.allHalfEdges) {\n if (!ChainMergeContext.isChainInteriorVertex(node0)) {\n this.collectMaximalGrowableXYXArrayFromStartNode(result, node0, visitMask);\n }\n }\n // Pass 2: start anywhere in an unvisited loop.\n for (const node0 of this._graph.allHalfEdges) {\n this.collectMaximalGrowableXYXArrayFromStartNode(result, node0, visitMask);\n }\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"ChainMerge.js","sourceRoot":"","sources":["../../../src/topology/ChainMerge.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 Topology\n */\n\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Geometry, PlaneAltitudeEvaluator } from \"../Geometry\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from \"./Graph\";\nimport { HalfEdgeGraphOps } from \"./Merging\";\n\n/**\n * interface containing various options appropriate to merging lines segments into chains.\n * @internal\n */\nexport interface ChainMergeContextOptions {\n /**\n * Tolerance for declaring points equal\n * * Default is `Geometry.smallMetricDistance`\n */\n tolerance?: number;\n /**\n * Direction for primary sort.\n * * Default is `Vector3d.create(0.294234298, 0.72391399, 0.45234328798)`\n * * this vector should NOT be along a principal x,y,z direction.\n * * The internal form will be normalized.\n */\n primarySortDirection?: Vector3d;\n}\n/** Internal form of ChainMergeContextOptions -- same field names, but required to have contents. */\nclass ChainMergeContextValidatedOptions {\n /**\n * Tolerance for declaring points equal.\n */\n public tolerance: number;\n /** UNNORMALIZED base vector for sorting.\n * * Actual vector hoisted into an instance is normalized.\n */\n private static readonly _defaultPrimarySortDirection = Vector3d.create(0.294234298, 0.72391399, 0.45234328798);\n /**\n * Direction for primary sort. This is normalized !!!\n */\n public primarySortDirection: Vector3d;\n /** return a unit vector aligned with optional direction.\n * * Default return is into the first quadrant at a quirky angle so any perpendicular plane is unlikely to hit many points\n */\n public static createPrimarySortVector(vector?: Vector3d): Vector3d {\n if (vector === undefined) {\n vector = this._defaultPrimarySortDirection.clone();\n }\n return vector.normalizeWithDefault(\n ChainMergeContextValidatedOptions._defaultPrimarySortDirection.x,\n ChainMergeContextValidatedOptions._defaultPrimarySortDirection.y,\n ChainMergeContextValidatedOptions._defaultPrimarySortDirection.z);\n }\n /**\n * PRIVATE constructor -- assumes all inputs are validated in public create method !!!!\n * @param tolerance\n * @param unitVectorForPrimarySort\n */\n private constructor(tolerance: number, unitVectorForPrimarySort: Vector3d) {\n this.tolerance = tolerance;\n this.primarySortDirection = unitVectorForPrimarySort;\n }\n /** return the default option set. */\n public static createFromUnValidated(options?: ChainMergeContextOptions): ChainMergeContextValidatedOptions {\n const result = new ChainMergeContextValidatedOptions(Geometry.smallMetricDistance, ChainMergeContextValidatedOptions.createPrimarySortVector());\n if (options !== undefined) {\n if (options.tolerance !== undefined)\n result.tolerance = options.tolerance;\n if (options.primarySortDirection !== undefined)\n result.primarySortDirection = ChainMergeContextValidatedOptions.createPrimarySortVector();\n }\n return result;\n }\n /** Clone this context. */\n public clone(): ChainMergeContextValidatedOptions {\n return new ChainMergeContextValidatedOptions(this.tolerance, this.primarySortDirection);\n }\n}\n/**\n * * Context for assembling line segments into chains.\n * * Use the context in phases:\n * * Create the context: `context = ChainMergeContext.create ()`\n * * Add line with any combination of:\n * * `context.addSegment(pointA, pointB)`\n * * `context.addLineSegment3dArray (segments)`\n * * Scan all coordinate data for common coordinates. Twist nodes together to form chains:\n * * `context.clusterAndMergeVerticesXYZ ()`\n * * Collect the chains:\n * * myLinestringArray = context.collectMaximalChains();\n * * The context carries an optional plane which is used by addSegmentsOnPlane\n *\n * @internal\n */\nexport class ChainMergeContext {\n\n private _graph: HalfEdgeGraph;\n private _options: ChainMergeContextValidatedOptions;\n private _plane?: PlaneAltitudeEvaluator;\n private _convexClipper?: ConvexClipPlaneSet;\n private constructor(options: ChainMergeContextValidatedOptions) {\n this._graph = new HalfEdgeGraph();\n this._options = options;\n }\n /** Save a reference plane for later use, e.g. in addSegmentsOnPlane */\n public set plane(value: PlaneAltitudeEvaluator | undefined) { this._plane = value; }\n /** Property access for the reference plane. */\n public get plane(): PlaneAltitudeEvaluator | undefined { return this._plane; }\n\n /** Save a reference plane for later use, e.g. in addSegmentsOnPlane */\n public set convexClipper(value: ConvexClipPlaneSet | undefined) { this._convexClipper = value; }\n /** Property access for the reference plane. */\n public get convexClipper(): ConvexClipPlaneSet | undefined { return this._convexClipper; }\n\n /**\n * * Construct an empty chain merge graph.\n * * The options parameter may contain any combination of the options values.\n * * tolerance = absolute tolerance for declaring points equal.\n * * Default is `Geometry.smallMetricDistance`\n * * primarySortDirection = direction for first sort.\n * * To minimize clash among points on primary sort, this should NOT be perpendicular to any principal plane.\n * * The default points into the first octant with non-obvious components.\n */\n public static create(options?: ChainMergeContextOptions): ChainMergeContext {\n const validatedOptions = ChainMergeContextValidatedOptions.createFromUnValidated(options);\n return new ChainMergeContext(validatedOptions);\n }\n /** Add a segment to the evolving graph. */\n public addSegment(pointA: Point3d, pointB: Point3d) {\n this._graph.createEdgeXYZXYZ(pointA.x, pointA.y, pointA.z, 0, pointB.x, pointB.y, pointB.z, 0);\n }\n /** Add all segments from an array to the graph. */\n public addLineSegment3dArray(data: LineSegment3d[]) {\n for (const segment of data) {\n this.addSegment(segment.point0Ref, segment.point1Ref);\n }\n }\n /** Add edges for all segments that are \"on\" the plane.\n * * No action if `this.plane` is undefined.\n */\n public addSegmentsOnPlane(points: GrowableXYZArray, addClosure: boolean = false) {\n if (!this._plane)\n return;\n const plane = this._plane;\n let i0 = addClosure ? points.length - 1 : 0;\n let a0 = points.evaluateUncheckedIndexPlaneAltitude(i0, plane);\n let i1 = addClosure ? 0 : 1;\n let a1;\n for (; i1 < points.length; i0 = i1++ , a0 = a1) {\n a1 = points.evaluateUncheckedIndexPlaneAltitude(i1, plane);\n if (Geometry.isSmallMetricDistance(a0) && Geometry.isSmallMetricDistance(a1))\n this._graph.createEdgeXYZXYZ(\n points.getXAtUncheckedPointIndex(i0), points.getYAtUncheckedPointIndex(i0), points.getZAtUncheckedPointIndex(i0), 0,\n points.getXAtUncheckedPointIndex(i1), points.getYAtUncheckedPointIndex(i1), points.getZAtUncheckedPointIndex(i1), 0);\n }\n }\n /**\n * Return a numeric value to be used for sorting, with little chance widely separated nodes will have identical key.\n * * Any single x,y,z component is a poor choice because horizontal and vertical alignment is common.\n * * Hence take dot product of x,y,z with non-trivial fraction values.\n * @param node node with x,y,z coordinates\n */\n private primarySortKey(node: HalfEdge): number {\n return this._options.primarySortDirection.dotProductXYZ(node.x, node.y, node.z);\n }\n /** Return difference of sortData members as sort comparison */\n private static nodeCompareSortData(nodeA: HalfEdge, nodeB: HalfEdge): number {\n return nodeA.sortData! - nodeB.sortData!;\n }\n /** test if nodeA is a dangling edge end (i.e. edges around vertex equal 1, but detect it without walking all the way around. */\n private static isIsolatedEnd(nodeA: HalfEdge): boolean {\n return nodeA.vertexSuccessor === nodeA;\n }\n\n /** test if nodeA is at a vertex with exactly 2 edges (i.e. edges around vertex equal w, but detect it without walking all the way around. */\n private static isChainInteriorVertex(nodeA: HalfEdge): boolean {\n const nodeB = nodeA.vertexSuccessor;\n return nodeB !== nodeA && nodeB.vertexSuccessor === nodeA;\n }\n\n /**\n * * isolate all edge ends.\n * * perform cluster analysis to determine nearly coincident points.\n * * pinch all edges together at each vertex.\n */\n public clusterAndMergeVerticesXYZ() {\n HalfEdgeGraphOps.isolateAllEdges(this._graph);\n for (const p of this._graph.allHalfEdges) {\n p.sortData = this.primarySortKey(p);\n }\n const sortArray = this._graph.allHalfEdges.slice();\n sortArray.sort((nodeA, nodeB) => ChainMergeContext.nodeCompareSortData(nodeA, nodeB));\n const xyzTolerance = this._options.tolerance;\n // A node is unvisited if it is its own vertex successor !!!\n // otherwise the node has already been twisted into a base vertex.\n const n = sortArray.length;\n for (let i0 = 0; i0 < n; i0++) {\n const node0 = sortArray[i0];\n const qMin = node0.sortData!;\n const qMax = qMin + xyzTolerance;\n if (ChainMergeContext.isIsolatedEnd(node0)) {\n for (let i1 = i0 + 1; i1 < n; i1++) {\n const node1 = sortArray[i1];\n if (ChainMergeContext.isIsolatedEnd(node1)) {\n if (node1.sortData! > qMax)\n break;\n if (node0.distanceXYZ(node1) <= xyzTolerance) {\n HalfEdge.pinch(node0, node1);\n node1.setXYZFrom(node0); // force true equal coordinates.\n }\n }\n }\n }\n }\n }\n /**\n * If node0 is not visited, creating a linestring with that starting edge and all successive edges along a chain.\n * @param chains growing array of chains.\n * @param node0 start node for search.\n */\n private collectMaximalLineString3dFromStartNode(chains: LineString3d[], node0: HalfEdge, visitMask: HalfEdgeMask) {\n if (!node0.isMaskSet(visitMask)) {\n const ls = LineString3d.create();\n ls.addPointXYZ(node0.x, node0.y, node0.z);\n for (; ;) {\n node0.setMask(visitMask);\n node0.edgeMate.setMask(visitMask);\n node0 = node0.faceSuccessor;\n ls.addPointXYZ(node0.x, node0.y, node0.z);\n if (node0.isMaskSet(visitMask) || !ChainMergeContext.isChainInteriorVertex(node0))\n break;\n }\n chains.push(ls);\n }\n }\n /**\n * If node0 is not visited, creating a linestring with that starting edge and all successive edges along a chain.\n * @param chains growing array of chains.\n * @param node0 start node for search.\n */\n private collectMaximalGrowableXYXArrayFromStartNode(result: GrowableXYZArray[], node0: HalfEdge, visitMask: HalfEdgeMask) {\n if (!node0.isMaskSet(visitMask)) {\n const points = new GrowableXYZArray();\n points.pushXYZ(node0.x, node0.y, node0.z);\n for (; ;) {\n node0.setMask(visitMask);\n node0.edgeMate.setMask(visitMask);\n node0 = node0.faceSuccessor;\n points.pushXYZ(node0.x, node0.y, node0.z);\n if (node0.isMaskSet(visitMask) || !ChainMergeContext.isChainInteriorVertex(node0))\n break;\n }\n if (points.length > 0)\n result.push(points);\n }\n }\n\n /**\n * * find edges with start, end in same vertex loop.\n * * pinch them away from the loop\n * * set mask on both sides.\n * * Return the number of excisions.\n */\n private exciseAndMarkSlingEdges(mask: HalfEdgeMask): number {\n let n = 0;\n for (const p of this._graph.allHalfEdges) {\n if (p.distanceXYZ(p.edgeMate) < this._options.tolerance\n && !p.isMaskSet(mask)) {\n const q = p.edgeMate;\n HalfEdge.pinch(p, p.vertexPredecessor);\n HalfEdge.pinch(q, q.vertexPredecessor);\n p.setMask(mask);\n q.setMask(mask);\n n++;\n }\n }\n return n;\n }\n /** Collect chains which have maximum edge count, broken at vertices with more than 2 edges.\n * * This is assumed to be preceded by a call to a vertex-cluster step such as `clusterAndMergeVerticesYXZ`\n */\n public collectMaximalChains(): LineString3d[] {\n const result: LineString3d[] = [];\n const visitMask = HalfEdgeMask.VISITED;\n // Pass 0: excise and mark zero-length edges.\n this.exciseAndMarkSlingEdges(visitMask);\n this._graph.clearMask(visitMask);\n // Pass 1: only start at non-interior edges -- vertices with one edge or more than 2 edges.\n // (Note that collectMaximalChain checks the visit mask.)\n for (const node0 of this._graph.allHalfEdges) {\n if (!ChainMergeContext.isChainInteriorVertex(node0)) {\n this.collectMaximalLineString3dFromStartNode(result, node0, visitMask);\n }\n }\n // Pass 2: start anywhere in an unvisited loop.\n for (const node0 of this._graph.allHalfEdges) {\n this.collectMaximalLineString3dFromStartNode(result, node0, visitMask);\n }\n return result;\n }\n public collectMaximalGrowableXYZArrays(): GrowableXYZArray[] {\n const result: GrowableXYZArray[] = [];\n const visitMask = HalfEdgeMask.VISITED;\n // Pass 0: excise and mark zero-length edges.\n this.exciseAndMarkSlingEdges(visitMask);\n this._graph.clearMask(visitMask);\n // Pass 1: only start at non-interior edges -- vertices with one edge or more than 2 edges.\n // (Note that collectMaximalChain checks the visit mask.)\n for (const node0 of this._graph.allHalfEdges) {\n if (!ChainMergeContext.isChainInteriorVertex(node0)) {\n this.collectMaximalGrowableXYXArrayFromStartNode(result, node0, visitMask);\n }\n }\n // Pass 2: start anywhere in an unvisited loop.\n for (const node0 of this._graph.allHalfEdges) {\n this.collectMaximalGrowableXYXArrayFromStartNode(result, node0, visitMask);\n }\n return result;\n }\n}\n"]}
@@ -1,6 +1,3 @@
1
- /** @packageDocumentation
2
- * @module Topology
3
- */
4
1
  import { LineSegment3d } from "../curve/LineSegment3d";
5
2
  import { Point2d, Vector2d } from "../geometry3d/Point2dVector2d";
6
3
  import { Point3d, Vector3d } from "../geometry3d/Point3dVector3d";
@@ -39,12 +36,16 @@ export declare enum HalfEdgeMask {
39
36
  * BOUNDARY_EDGE nor EXTERIOR_EDGE.
40
37
  */
41
38
  PRIMARY_EDGE = 4,
42
- /** Mask used for low level searches to identify previously-visited nodes. */
43
- VISITED = 16,
39
+ /** Mask set on both sides of a bridge edge added by algorithms to join loops. */
40
+ BRIDGE_EDGE = 8,
41
+ /** Mask set on both sides of an edge added during graph regularization. */
42
+ REGULARIZED_EDGE = 16,
44
43
  /** Mask applied to triangles by earcut triangulator. */
45
44
  TRIANGULATED_FACE = 256,
46
45
  /** Mask applied in a face with 2 edges. */
47
46
  NULL_FACE = 512,
47
+ /** Temporary mask used for low level searches to identify previously-visited nodes. */
48
+ VISITED = 65536,
48
49
  /** No mask bits. */
49
50
  NULL_MASK = 0,
50
51
  /** The "upper 12" bits of 32 bit integer reserved for grab/drop. */
@@ -201,6 +202,18 @@ export declare class HalfEdge implements HalfEdgeUserData {
201
202
  * @returns reference to the half edge created, the new face successor of `baseA`.
202
203
  */
203
204
  static splitEdge(baseA: undefined | HalfEdge, xA: number | undefined, yA: number | undefined, zA: number | undefined, iA: number | undefined, heArray: HalfEdge[] | undefined): HalfEdge;
205
+ /**
206
+ * Reverse of [[splitEdge]]: remove the vertex at `doomed` and merge its two incident edges.
207
+ * @param doomed one of two nodes added by [[splitEdge]]. These nodes should form a vertex loop of two nodes.
208
+ * On successful return this node and its mate are isolated.
209
+ * @param checkParallel whether to check that the doomed edge and the preceding edge in its face loop are parallel.
210
+ * When passing `true` the assumption is that edge geometry is linear. If nonlinear edge geometry is attached, the
211
+ * caller should a) verify that the geometry on either side of the doomed vertex can be merged, and if so, they
212
+ * should b) call this method passing `false`, and c) adjust the geometry of the returned edge and its edge mate
213
+ * as appropriate.
214
+ * @returns the former (surviving) face predecessor of `doomed`, or undefined if the edge can't be healed.
215
+ */
216
+ static healEdge(doomed: HalfEdge, checkParallel?: boolean): HalfEdge | undefined;
204
217
  /**
205
218
  * Create a new sliver face "inside" an existing edge.
206
219
  * * This creates two nodes that are each face predecessor and successor to the other.
@@ -212,12 +225,12 @@ export declare class HalfEdge implements HalfEdgeUserData {
212
225
  * @returns reference to the half edge created in the vertex loop of baseA.
213
226
  */
214
227
  static splitEdgeCreateSliverFace(baseA: HalfEdge, heArray: HalfEdge[] | undefined): HalfEdge;
215
- /** Edge property masks. */
228
+ /** Masks copied when an edge is split. */
216
229
  private static _edgePropertyMasks;
217
230
  /**
218
231
  * Copy "edge based" content of `fromNode` to `toNode`:
219
232
  * * edgeTag
220
- * * masks EXTERIOR, BOUNDARY_EDGE, NULL_FACE, PRIMARY_EDGE
233
+ * * edge masks
221
234
  */
222
235
  static transferEdgeProperties(fromNode: HalfEdge, toNode: HalfEdge): void;
223
236
  /** Return the next half edge around this vertex in the CCW direction. */
@@ -285,7 +298,7 @@ export declare class HalfEdge implements HalfEdgeUserData {
285
298
  /**
286
299
  * Returns the number of nodes that match (or do not match) the given mask value around this face loop.
287
300
  * @param mask the mask to check.
288
- * @param value true for mask match and false for mask not match.
301
+ * @param value true for mask match and false for mask not match. Default is `true`.
289
302
  */
290
303
  countMaskAroundFace(mask: HalfEdgeMask, value?: boolean): number;
291
304
  /**
@@ -296,16 +309,17 @@ export declare class HalfEdge implements HalfEdgeUserData {
296
309
  countMaskAroundVertex(mask: HalfEdgeMask, value?: boolean): number;
297
310
  /**
298
311
  * Returns the first node that matches (or does not match) the given mask value around this vertex loop, starting
299
- * with the instance node and proceeding via vertex successors.
312
+ * with the instance node and proceeding via `vertexSuccessor`.
300
313
  * @param mask the mask to check.
301
- * @param value true for mask match and false for mask not match.
314
+ * @param value true for mask match and false for mask not match. Default is `true`.
315
+ * @param reverse if true, search in reverse order via `vertexPredecessor`. Default is `false`.
302
316
  */
303
- findMaskAroundVertex(mask: HalfEdgeMask, value?: boolean): HalfEdge | undefined;
317
+ findMaskAroundVertex(mask: HalfEdgeMask, value?: boolean, reverse?: boolean): HalfEdge | undefined;
304
318
  /**
305
319
  * Returns the first node that matches (or does not match) the given mask value around this face loop, starting
306
320
  * with the instance node and proceeding via face successors.
307
321
  * @param mask the mask to check.
308
- * @param value true for mask match and false for mask not match.
322
+ * @param value true for mask match and false for mask not match. Default is `true`.
309
323
  */
310
324
  findMaskAroundFace(mask: HalfEdgeMask, value?: boolean): HalfEdge | undefined;
311
325
  /**
@@ -366,6 +380,8 @@ export declare class HalfEdge implements HalfEdgeUserData {
366
380
  * * If the inputs are in the same face loop, the loop splits into two face loops after the pinch.
367
381
  */
368
382
  static pinch(nodeA: HalfEdge, nodeB: HalfEdge): void;
383
+ /** Return whether the edge is dangling at its base. */
384
+ get isDangling(): boolean;
369
385
  /**
370
386
  * Pinch this half edge out of its base vertex loop.
371
387
  * @return the surviving HalfEdge in the vertex loop or `undefined` if the instance HalfEdge is already dangling.
@@ -459,7 +475,10 @@ export declare class HalfEdge implements HalfEdgeUserData {
459
475
  isFaceConvex(tolerance?: number): boolean;
460
476
  /** Isolate the edge from the graph by yanking each end from its vertex loop. */
461
477
  isolateEdge(): void;
462
- /** Specify whether this edge is isolated from the rest of the graph. */
478
+ /**
479
+ * Specify whether this edge is isolated from the rest of the graph.
480
+ * * Both edge mates of an isolated edge return true for [[isDangling]].
481
+ */
463
482
  get isIsolatedEdge(): boolean;
464
483
  /** Return true if `this` is lexically below `other`. We compare y first, then x, and ignore z. */
465
484
  belowYX(other: HalfEdge): boolean;
@@ -481,6 +500,29 @@ export declare class HalfEdge implements HalfEdgeUserData {
481
500
  distanceXY(other: HalfEdge): number;
482
501
  /** Return distance between xyz coordinates of `this` and `other` node. */
483
502
  distanceXYZ(other: HalfEdge): number;
503
+ /**
504
+ * Search around the instance's face loop for nodes with the specified mask value.
505
+ * * Returned nodes satisfy `node.isMaskSet(mask) === value`.
506
+ * @param mask target mask.
507
+ * @param value target boolean value for mask on half edges (default `true`).
508
+ * @param result optional array to be cleared, populated with masked nodes, and returned.
509
+ * @return array of masked half edges
510
+ */
511
+ collectMaskedEdgesAroundFace(mask: HalfEdgeMask, value?: boolean, result?: HalfEdge[]): HalfEdge[];
512
+ /**
513
+ * Announce edges in the face loop, starting with the instance and proceeding in a `faceSuccessor` traversal.
514
+ * @param announceEdge function to call at each edge
515
+ */
516
+ announceEdgesInFace(announceEdge: NodeFunction): void;
517
+ /**
518
+ * Announce edges in the super face loop, starting with the instance.
519
+ * * A super face admits a `faceSuccessor` traversal, where the next edge at the far vertex is the first one lacking `skipMask` in a `vertexPredecessor` traversal.
520
+ * @param skipMask mask on edges to skip.
521
+ * @param announceEdge function to call at each edge that is not skipped.
522
+ * @param announceSkipped optional function to call at each edge that is skipped.
523
+ * @return whether a super face was found. Specifically, if a vertex loop has all edges with `skipMask` set, the return value is `false`.
524
+ */
525
+ announceEdgesInSuperFace(skipMask: HalfEdgeMask, announceEdge: NodeFunction, announceSkipped?: NodeFunction): boolean;
484
526
  /**
485
527
  * Evaluate `f(node)` at each node around `this` node's face loop. Collect the function values.
486
528
  * @param f optional node function. If `undefined`, collect the nodes themselves.
@@ -601,6 +643,14 @@ export declare class HalfEdge implements HalfEdgeUserData {
601
643
  * @param copyFaceData true to copy `faceTag`.
602
644
  */
603
645
  copyDataFrom(source: HalfEdge, copyXYZ: boolean, copyVertexData: boolean, copyEdgeData: boolean, copyFaceData: boolean): void;
646
+ /**
647
+ * Is the instance's face loop a split-washer type face?
648
+ * * A split-washer face contains at least one bridge edge.
649
+ * * A bridge edge and its edge mate have the same `bridgeMask` and live in the same face loop.
650
+ * * By connecting hole/outer loops with bridge edges, a split-washer face can represent a parity region.
651
+ * @param bridgeMask mask preset on bridge edges (default is [[HalfEdgeMask.BRIDGE_EDGE]]).
652
+ */
653
+ isSplitWasherFace(bridgeMask?: HalfEdgeMask): boolean;
604
654
  }
605
655
  /**
606
656
  * A HalfEdgeGraph has:
@@ -616,7 +666,7 @@ export declare class HalfEdgeGraph {
616
666
  constructor();
617
667
  /**
618
668
  * Ask for a mask (from the graph's free pool) for caller's use.
619
- * * Optionally clear the mask throughout the graph.
669
+ * @param clearInAllHalfEdges optionally clear the mask throughout the graph (default `true`).
620
670
  */
621
671
  grabMask(clearInAllHalfEdges?: boolean): HalfEdgeMask;
622
672
  /** Return `mask` to the free pool. */
@@ -1 +1 @@
1
- {"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../src/topology/Graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../src/topology/Graph.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  /** @packageDocumentation
6
6
  * @module Topology
7
7
  */
8
+ import { OrderedSet } from "@itwin/core-bentley";
8
9
  import { LineSegment3d } from "../curve/LineSegment3d";
9
10
  import { Geometry } from "../Geometry";
10
11
  import { Angle } from "../geometry3d/Angle";
@@ -14,7 +15,6 @@ import { SmallSystem } from "../numerics/SmallSystem";
14
15
  import { MaskManager } from "./MaskManager";
15
16
  // import { GraphChecker } from "../test/topology/Graph.test"; // used for debugging
16
17
  /* eslint-disable @typescript-eslint/no-this-alias */
17
- // cspell:word CONSTU CONSTV USEAM VSEAM internaldocs
18
18
  /**
19
19
  * * Each node of the graph has a mask member.
20
20
  * * The mask member is a number which is used as set of single bit boolean values.
@@ -29,14 +29,6 @@ import { MaskManager } from "./MaskManager";
29
29
  */
30
30
  export var HalfEdgeMask;
31
31
  (function (HalfEdgeMask) {
32
- // REMARK: Various mask names are COMMENTED here for reference to native legacy code.
33
- // CONSTU_MASK = 0x00000004,
34
- // CONSTV_MASK = 0x00000008,
35
- // USEAM_MASK = 0x00000010,
36
- // VSEAM_MASK = 0x00000020,
37
- // BOUNDARY_VERTEX_MASK = 0x00000040,
38
- // PRIMARY_VERTEX_MASK = 0x00000080,
39
- // DIRECTED_EDGE_MASK = 0x00000100,
40
32
  /**
41
33
  * Mask commonly set consistently around exterior faces.
42
34
  * * A boundary edge with interior to one side, exterior to the other, will have EXTERIOR only on the outside.
@@ -59,22 +51,22 @@ export var HalfEdgeMask;
59
51
  * BOUNDARY_EDGE nor EXTERIOR_EDGE.
60
52
  */
61
53
  HalfEdgeMask[HalfEdgeMask["PRIMARY_EDGE"] = 4] = "PRIMARY_EDGE";
62
- /** Mask used for low level searches to identify previously-visited nodes. */
63
- HalfEdgeMask[HalfEdgeMask["VISITED"] = 16] = "VISITED";
54
+ /** Mask set on both sides of a bridge edge added by algorithms to join loops. */
55
+ HalfEdgeMask[HalfEdgeMask["BRIDGE_EDGE"] = 8] = "BRIDGE_EDGE";
56
+ /** Mask set on both sides of an edge added during graph regularization. */
57
+ HalfEdgeMask[HalfEdgeMask["REGULARIZED_EDGE"] = 16] = "REGULARIZED_EDGE";
64
58
  /** Mask applied to triangles by earcut triangulator. */
65
59
  HalfEdgeMask[HalfEdgeMask["TRIANGULATED_FACE"] = 256] = "TRIANGULATED_FACE";
66
60
  /** Mask applied in a face with 2 edges. */
67
61
  HalfEdgeMask[HalfEdgeMask["NULL_FACE"] = 512] = "NULL_FACE";
62
+ /** Temporary mask used for low level searches to identify previously-visited nodes. */
63
+ HalfEdgeMask[HalfEdgeMask["VISITED"] = 65536] = "VISITED";
68
64
  /** No mask bits. */
69
65
  HalfEdgeMask[HalfEdgeMask["NULL_MASK"] = 0] = "NULL_MASK";
70
66
  /** The "upper 12" bits of 32 bit integer reserved for grab/drop. */
71
67
  HalfEdgeMask[HalfEdgeMask["ALL_GRAB_DROP_MASKS"] = 4293918720] = "ALL_GRAB_DROP_MASKS";
72
68
  /** All mask bits */
73
69
  HalfEdgeMask[HalfEdgeMask["ALL_MASK"] = 4294967295] = "ALL_MASK";
74
- // informal convention on preassigned mask bit numbers:
75
- // byte0 (EXTERIOR, BOUNDARY_EDGE, PRIMARY_EDGE) -- edge properties
76
- // byte1 (VISITED, VISIT_A, WORK_MASK0, WORK_MASK1) -- temp masks for algorithms.
77
- // byte2 (TRIANGULATED_FACE, NULL_FACE) -- face properties.
78
70
  })(HalfEdgeMask || (HalfEdgeMask = {}));
79
71
  /**
80
72
  * A HalfEdge is "one side of an edge" in a structure of faces, edges and vertices. From a node there are
@@ -270,6 +262,37 @@ export class HalfEdge {
270
262
  }
271
263
  return newA;
272
264
  }
265
+ /**
266
+ * Reverse of [[splitEdge]]: remove the vertex at `doomed` and merge its two incident edges.
267
+ * @param doomed one of two nodes added by [[splitEdge]]. These nodes should form a vertex loop of two nodes.
268
+ * On successful return this node and its mate are isolated.
269
+ * @param checkParallel whether to check that the doomed edge and the preceding edge in its face loop are parallel.
270
+ * When passing `true` the assumption is that edge geometry is linear. If nonlinear edge geometry is attached, the
271
+ * caller should a) verify that the geometry on either side of the doomed vertex can be merged, and if so, they
272
+ * should b) call this method passing `false`, and c) adjust the geometry of the returned edge and its edge mate
273
+ * as appropriate.
274
+ * @returns the former (surviving) face predecessor of `doomed`, or undefined if the edge can't be healed.
275
+ */
276
+ static healEdge(doomed, checkParallel = true) {
277
+ if (doomed.isIsolatedEdge)
278
+ return undefined;
279
+ const doomed1 = doomed.vertexSuccessor;
280
+ if (doomed1.vertexSuccessor !== doomed)
281
+ return undefined; // v-loop not a 2-cycle
282
+ if (checkParallel && !doomed.vectorToFaceSuccessor().isParallelTo(doomed.facePredecessor.vectorToFaceSuccessor(), false, true))
283
+ return undefined; // removing this vertex does not leave a straight edge behind
284
+ const fPred = doomed.facePredecessor;
285
+ const fSucc = doomed.faceSuccessor;
286
+ const fPred1 = doomed1.facePredecessor;
287
+ const fSucc1 = doomed1.faceSuccessor;
288
+ this.setFaceLinks(fPred, fSucc);
289
+ this.setFaceLinks(fPred1, fSucc1);
290
+ this.setEdgeMates(fPred, fPred1);
291
+ this.setFaceLinks(doomed, doomed1);
292
+ this.setFaceLinks(doomed1, doomed);
293
+ this.setEdgeMates(doomed, doomed1);
294
+ return fPred;
295
+ }
273
296
  /**
274
297
  * Create a new sliver face "inside" an existing edge.
275
298
  * * This creates two nodes that are each face predecessor and successor to the other.
@@ -297,14 +320,14 @@ export class HalfEdge {
297
320
  newB.copyDataFrom(baseB, true, true, false, false);
298
321
  return newA;
299
322
  }
300
- /** Edge property masks. */
323
+ /** Masks copied when an edge is split. */
301
324
  static _edgePropertyMasks = [
302
- HalfEdgeMask.BOUNDARY_EDGE, HalfEdgeMask.EXTERIOR, HalfEdgeMask.PRIMARY_EDGE, HalfEdgeMask.NULL_FACE,
325
+ HalfEdgeMask.EXTERIOR, HalfEdgeMask.BOUNDARY_EDGE, HalfEdgeMask.PRIMARY_EDGE, HalfEdgeMask.BRIDGE_EDGE, HalfEdgeMask.REGULARIZED_EDGE, HalfEdgeMask.NULL_FACE
303
326
  ];
304
327
  /**
305
328
  * Copy "edge based" content of `fromNode` to `toNode`:
306
329
  * * edgeTag
307
- * * masks EXTERIOR, BOUNDARY_EDGE, NULL_FACE, PRIMARY_EDGE
330
+ * * edge masks
308
331
  */
309
332
  static transferEdgeProperties(fromNode, toNode) {
310
333
  toNode.edgeTag = fromNode.edgeTag;
@@ -477,7 +500,7 @@ export class HalfEdge {
477
500
  /**
478
501
  * Returns the number of nodes that match (or do not match) the given mask value around this face loop.
479
502
  * @param mask the mask to check.
480
- * @param value true for mask match and false for mask not match.
503
+ * @param value true for mask match and false for mask not match. Default is `true`.
481
504
  */
482
505
  countMaskAroundFace(mask, value = true) {
483
506
  let count = 0;
@@ -524,16 +547,17 @@ export class HalfEdge {
524
547
  }
525
548
  /**
526
549
  * Returns the first node that matches (or does not match) the given mask value around this vertex loop, starting
527
- * with the instance node and proceeding via vertex successors.
550
+ * with the instance node and proceeding via `vertexSuccessor`.
528
551
  * @param mask the mask to check.
529
- * @param value true for mask match and false for mask not match.
552
+ * @param value true for mask match and false for mask not match. Default is `true`.
553
+ * @param reverse if true, search in reverse order via `vertexPredecessor`. Default is `false`.
530
554
  */
531
- findMaskAroundVertex(mask, value = true) {
555
+ findMaskAroundVertex(mask, value = true, reverse = false) {
532
556
  let node = this;
533
557
  do {
534
558
  if (node.isMaskSet(mask) === value)
535
559
  return node;
536
- node = node.vertexSuccessor;
560
+ node = reverse ? node.vertexPredecessor : node.vertexSuccessor;
537
561
  } while (node !== this);
538
562
  return undefined;
539
563
  }
@@ -541,7 +565,7 @@ export class HalfEdge {
541
565
  * Returns the first node that matches (or does not match) the given mask value around this face loop, starting
542
566
  * with the instance node and proceeding via face successors.
543
567
  * @param mask the mask to check.
544
- * @param value true for mask match and false for mask not match.
568
+ * @param value true for mask match and false for mask not match. Default is `true`.
545
569
  */
546
570
  findMaskAroundFace(mask, value = true) {
547
571
  let node = this;
@@ -653,6 +677,10 @@ export class HalfEdge {
653
677
  predA._faceSuccessor = nodeB;
654
678
  }
655
679
  }
680
+ /** Return whether the edge is dangling at its base. */
681
+ get isDangling() {
682
+ return this.edgeMate.faceSuccessor === this;
683
+ }
656
684
  /**
657
685
  * Pinch this half edge out of its base vertex loop.
658
686
  * @return the surviving HalfEdge in the vertex loop or `undefined` if the instance HalfEdge is already dangling.
@@ -856,7 +884,10 @@ export class HalfEdge {
856
884
  this.yankFromVertexLoop();
857
885
  mate.yankFromVertexLoop();
858
886
  }
859
- /** Specify whether this edge is isolated from the rest of the graph. */
887
+ /**
888
+ * Specify whether this edge is isolated from the rest of the graph.
889
+ * * Both edge mates of an isolated edge return true for [[isDangling]].
890
+ */
860
891
  get isIsolatedEdge() {
861
892
  return this === this.vertexSuccessor && this.edgeMate === this.edgeMate.vertexSuccessor;
862
893
  }
@@ -904,6 +935,71 @@ export class HalfEdge {
904
935
  distanceXYZ(other) {
905
936
  return Geometry.distanceXYZXYZ(this.x, this.y, this.z, other.x, other.y, other.z);
906
937
  }
938
+ /**
939
+ * Search around the instance's face loop for nodes with the specified mask value.
940
+ * * Returned nodes satisfy `node.isMaskSet(mask) === value`.
941
+ * @param mask target mask.
942
+ * @param value target boolean value for mask on half edges (default `true`).
943
+ * @param result optional array to be cleared, populated with masked nodes, and returned.
944
+ * @return array of masked half edges
945
+ */
946
+ collectMaskedEdgesAroundFace(mask, value = true, result) {
947
+ if (result === undefined)
948
+ result = [];
949
+ else
950
+ result.length = 0;
951
+ let node = this;
952
+ do {
953
+ if (node.isMaskSet(mask) === value)
954
+ result.push(node);
955
+ node = node.faceSuccessor;
956
+ } while (node !== this);
957
+ return result;
958
+ }
959
+ /**
960
+ * Announce edges in the face loop, starting with the instance and proceeding in a `faceSuccessor` traversal.
961
+ * @param announceEdge function to call at each edge
962
+ */
963
+ announceEdgesInFace(announceEdge) {
964
+ let node = this;
965
+ do {
966
+ announceEdge(node);
967
+ node = node.faceSuccessor;
968
+ } while (node !== this);
969
+ }
970
+ /**
971
+ * Announce edges in the super face loop, starting with the instance.
972
+ * * A super face admits a `faceSuccessor` traversal, where the next edge at the far vertex is the first one lacking `skipMask` in a `vertexPredecessor` traversal.
973
+ * @param skipMask mask on edges to skip.
974
+ * @param announceEdge function to call at each edge that is not skipped.
975
+ * @param announceSkipped optional function to call at each edge that is skipped.
976
+ * @return whether a super face was found. Specifically, if a vertex loop has all edges with `skipMask` set, the return value is `false`.
977
+ */
978
+ announceEdgesInSuperFace(skipMask, announceEdge, announceSkipped) {
979
+ const maxIter = 1000; // safeguard against infinite loops
980
+ let iter = 0;
981
+ const findNextNodeAroundVertex = (he) => {
982
+ let vNode = he;
983
+ do {
984
+ if (!vNode.isMaskSet(skipMask))
985
+ return vNode;
986
+ announceSkipped?.(vNode);
987
+ vNode = vNode.vertexPredecessor;
988
+ } while (vNode !== he);
989
+ return undefined;
990
+ };
991
+ const firstNode = findNextNodeAroundVertex(this);
992
+ if (!firstNode)
993
+ return false;
994
+ let node = firstNode;
995
+ do {
996
+ announceEdge(node);
997
+ node = findNextNodeAroundVertex(node.faceSuccessor);
998
+ if (!node)
999
+ return false;
1000
+ } while (node !== firstNode && iter++ < maxIter);
1001
+ return iter < maxIter;
1002
+ }
907
1003
  /**
908
1004
  * Evaluate `f(node)` at each node around `this` node's face loop. Collect the function values.
909
1005
  * @param f optional node function. If `undefined`, collect the nodes themselves.
@@ -1181,16 +1277,37 @@ export class HalfEdge {
1181
1277
  this.y = source.y;
1182
1278
  this.z = source.z;
1183
1279
  }
1184
- if (copyVertexData) {
1280
+ if (copyVertexData)
1185
1281
  this.i = source.i;
1186
- }
1187
- if (copyEdgeData) {
1282
+ if (copyEdgeData)
1188
1283
  HalfEdge.transferEdgeProperties(source, this);
1189
- this.edgeTag = source.edgeTag;
1190
- }
1191
- if (copyFaceData) {
1284
+ if (copyFaceData)
1192
1285
  this.faceTag = source.faceTag;
1286
+ }
1287
+ /**
1288
+ * Is the instance's face loop a split-washer type face?
1289
+ * * A split-washer face contains at least one bridge edge.
1290
+ * * A bridge edge and its edge mate have the same `bridgeMask` and live in the same face loop.
1291
+ * * By connecting hole/outer loops with bridge edges, a split-washer face can represent a parity region.
1292
+ * @param bridgeMask mask preset on bridge edges (default is [[HalfEdgeMask.BRIDGE_EDGE]]).
1293
+ */
1294
+ isSplitWasherFace(bridgeMask = HalfEdgeMask.BRIDGE_EDGE) {
1295
+ if (!this.countMaskAroundFace(HalfEdgeMask.BRIDGE_EDGE))
1296
+ return false;
1297
+ const bridges = new OrderedSet((a, b) => a.id - b.id);
1298
+ let node = this;
1299
+ do {
1300
+ if (node.isMaskSet(bridgeMask))
1301
+ bridges.add(node);
1302
+ node = node.faceSuccessor;
1303
+ } while (node !== this);
1304
+ if (bridges.size === 0)
1305
+ return false;
1306
+ for (const bridge of bridges) {
1307
+ if (!bridges.has(bridge.edgeMate) || !bridge.edgeMate.isMaskSet(bridgeMask))
1308
+ return false;
1193
1309
  }
1310
+ return true;
1194
1311
  }
1195
1312
  }
1196
1313
  /**
@@ -1210,7 +1327,7 @@ export class HalfEdgeGraph {
1210
1327
  }
1211
1328
  /**
1212
1329
  * Ask for a mask (from the graph's free pool) for caller's use.
1213
- * * Optionally clear the mask throughout the graph.
1330
+ * @param clearInAllHalfEdges optionally clear the mask throughout the graph (default `true`).
1214
1331
  */
1215
1332
  grabMask(clearInAllHalfEdges = true) {
1216
1333
  const mask = this._maskManager.grabMask();