@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
@@ -2,61 +2,60 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import { GrowableXYZArray } from "./GrowableXYZArray";
6
5
  /** @packageDocumentation
7
6
  * @module ArraysAndInterfaces
8
7
  */
8
+ import { GrowableXYZArray } from "./GrowableXYZArray";
9
9
  /**
10
- * abstract class managing an array of objects of type T, available for reuse by trusted callers.
11
- * * Derived class must implement these methods:
12
- * * `createForCache()` -- create a new, ready-to-use object
13
- * * `clearForCache (data: T)` -- tidy up `data` so it can be reused.
14
- * @internal
10
+ * Abstract class managing an array of objects of type T, available for reuse by trusted callers.
11
+ * * Derived class must implement `createForCache` and `clearForCache`.
12
+ * @public
15
13
  */
16
14
  export class ReusableObjectCache {
17
15
  _cachedObjects;
18
- numDrop;
19
- numCreate;
20
- numReuse;
16
+ _numDrop;
17
+ _numCreate;
18
+ _numReuse;
21
19
  /**
22
- * create a new cache for objects of type T
20
+ * Create a new cache for objects of type T.
23
21
  */
24
22
  constructor() {
25
23
  this._cachedObjects = [];
26
- this.numDrop = 0;
27
- this.numCreate = 0;
28
- this.numReuse = 0;
24
+ this._numDrop = 0;
25
+ this._numCreate = 0;
26
+ this._numReuse = 0;
29
27
  }
30
- /** Present `data` for storage in the cache, and hence reuse by any subsequent `grabFromCache`
31
- * * `data` will be sent to `clearForCache`.
32
- * * caller should never refer to this instance again.
28
+ /**
29
+ * Present `data` for storage in the cache, and hence reuse by any subsequent [[grabFromCache]].
30
+ * * `data` will be sent to [[clearForCache]].
31
+ * * The caller should never refer to `data` again.
32
+ * @param data object to return to the cache.
33
33
  */
34
34
  dropToCache(data) {
35
35
  if (data) {
36
- this.numDrop++;
36
+ this._numDrop++;
37
37
  this.clearForCache(data);
38
38
  this._cachedObjects.push(data);
39
39
  }
40
40
  }
41
41
  /**
42
- * grab an object from the cache.
43
- * * The returned object becomes property of the caller.
44
- * * That is, the cache does not remember it for any further management
45
- * @param data
42
+ * Grab an object from the cache.
43
+ * * The returned object becomes property of the caller: the cache does not remember it for any further management.
46
44
  */
47
45
  grabFromCache() {
48
46
  let data = this._cachedObjects.pop();
49
47
  if (data === undefined) {
50
48
  data = this.createForCache();
51
- this.numCreate++;
49
+ this._numCreate++;
52
50
  }
53
51
  else {
54
- this.numReuse++;
52
+ this._numReuse++;
55
53
  }
56
54
  return data;
57
55
  }
58
- /** Drop all entries of data[] to the cache.
59
- * @param data on input, the data to drop. on output, data is an empty array.
56
+ /**
57
+ * Drop multiple objects to the cache.
58
+ * @param data on input, the data to drop. On output, data is an empty array.
60
59
  */
61
60
  dropAllToCache(data) {
62
61
  while (data.length > 0) {
@@ -65,17 +64,32 @@ export class ReusableObjectCache {
65
64
  }
66
65
  }
67
66
  /**
68
- * Cache of GrowableXYZArray.
69
- * Intended for use by (for instance) clipping methods that can be structured to have disciplined reuse of a small number of arrays for a large number of steps.
70
- * @internal
67
+ * Cache of [[GrowableXYZArray]].
68
+ * * Example usage includes clipping methods that can be structured to have disciplined reuse of a small number of arrays for a large number of steps.
69
+ * @public
71
70
  */
72
71
  export class GrowableXYZArrayCache extends ReusableObjectCache {
73
- clearForCache(data) { data.length = 0; }
74
- createForCache() { return new GrowableXYZArray(10); }
75
- constructor() { super(); }
76
72
  /**
77
- * Grab an array from the cache and immediately fill from a source
78
- * @param source
73
+ * Create a new cache for [[GrowableXYZArray]] objects.
74
+ */
75
+ constructor() {
76
+ super();
77
+ }
78
+ /**
79
+ * Create a new, ready-to-use [[GrowableXYZArray]].
80
+ * @param numPoints initial capacity in xyz triples (default 10)
81
+ * @param growthFactor reallocation expansion (default 1.5)
82
+ */
83
+ createForCache(numPoints = 10, growthFactor = 1.5) {
84
+ return new GrowableXYZArray(numPoints, growthFactor);
85
+ }
86
+ /** Tidy up `data` so it can be reused. */
87
+ clearForCache(data) {
88
+ data.length = 0;
89
+ }
90
+ /**
91
+ * Grab an array from the cache and immediately fill from a source.
92
+ * @param source xyz to copy into the returned array.
79
93
  */
80
94
  grabAndFill(source) {
81
95
  const dest = this.grabFromCache();
@@ -1 +1 @@
1
- {"version":3,"file":"ReusableObjectCache.js","sourceRoot":"","sources":["../../../src/geometry3d/ReusableObjectCache.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD;;GAEG;AACH;;;;;;GAMG;AACH,MAAM,OAAgB,mBAAmB;IAG/B,cAAc,CAAM;IACrB,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,QAAQ,CAAS;IACxB;;OAEG;IACH;QACE,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC;IACD;;;OAGG;IACI,WAAW,CAAC,IAAmB;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD;;;;;OAKG;IACI,aAAa;QAClB,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;OAEG;IACI,cAAc,CAAC,IAAS;QAC7B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;CACF;AACD;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,mBAAqC;IACpE,aAAa,CAAC,IAAsB,IAAU,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,cAAc,KAAuB,OAAO,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,gBAAuB,KAAK,EAAE,CAAC,CAAC,CAAC;IACjC;;;OAGG;IACI,WAAW,CAAC,MAA4B;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IAEd,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { GrowableXYZArray } from \"./GrowableXYZArray\";\nimport { IndexedXYZCollection } from \"./IndexedXYZCollection\";\n\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n/**\n * abstract class managing an array of objects of type T, available for reuse by trusted callers.\n * * Derived class must implement these methods:\n * * `createForCache()` -- create a new, ready-to-use object\n * * `clearForCache (data: T)` -- tidy up `data` so it can be reused.\n * @internal\n */\nexport abstract class ReusableObjectCache<T> {\n protected abstract clearForCache(data: T): void;\n protected abstract createForCache(): T;\n private _cachedObjects: T[];\n public numDrop: number;\n public numCreate: number;\n public numReuse: number;\n /**\n * create a new cache for objects of type T\n */\n protected constructor() {\n this._cachedObjects = [];\n this.numDrop = 0;\n this.numCreate = 0;\n this.numReuse = 0;\n }\n /** Present `data` for storage in the cache, and hence reuse by any subsequent `grabFromCache`\n * * `data` will be sent to `clearForCache`.\n * * caller should never refer to this instance again.\n */\n public dropToCache(data: T | undefined) {\n if (data) {\n this.numDrop++;\n this.clearForCache(data);\n this._cachedObjects.push(data);\n }\n }\n /**\n * grab an object from the cache.\n * * The returned object becomes property of the caller.\n * * That is, the cache does not remember it for any further management\n * @param data\n */\n public grabFromCache(): T {\n let data = this._cachedObjects.pop();\n if (data === undefined) {\n data = this.createForCache();\n this.numCreate++;\n } else {\n this.numReuse++;\n }\n return data;\n }\n /** Drop all entries of data[] to the cache.\n * @param data on input, the data to drop. on output, data is an empty array.\n */\n public dropAllToCache(data: T[]) {\n while (data.length > 0) {\n this.dropToCache(data.pop());\n }\n }\n}\n/**\n * Cache of GrowableXYZArray.\n * Intended for use by (for instance) clipping methods that can be structured to have disciplined reuse of a small number of arrays for a large number of steps.\n * @internal\n */\nexport class GrowableXYZArrayCache extends ReusableObjectCache<GrowableXYZArray> {\n protected clearForCache(data: GrowableXYZArray): void { data.length = 0; }\n protected createForCache(): GrowableXYZArray { return new GrowableXYZArray(10); }\n public constructor() { super(); }\n /**\n * Grab an array from the cache and immediately fill from a source\n * @param source\n */\n public grabAndFill(source: IndexedXYZCollection): GrowableXYZArray {\n const dest = this.grabFromCache();\n dest.pushFrom(source);\n return dest;\n\n }\n}\n"]}
1
+ {"version":3,"file":"ReusableObjectCache.js","sourceRoot":"","sources":["../../../src/geometry3d/ReusableObjectCache.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD;;;;GAIG;AACH,MAAM,OAAgB,mBAAmB;IAC/B,cAAc,CAAM;IACpB,QAAQ,CAAS;IACjB,UAAU,CAAS;IACnB,SAAS,CAAS;IAC1B;;OAEG;IACH;QACE,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAKD;;;;;OAKG;IACI,WAAW,CAAC,IAAmB;QACpC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,aAAa;QAClB,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;OAGG;IACI,cAAc,CAAC,IAAS;QAC7B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;CACF;AACD;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,mBAAqC;IAC9E;;OAEG;IACH;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IACD;;;;MAIE;IACQ,cAAc,CAAC,YAAoB,EAAE,EAAE,eAAuB,GAAG;QACzE,OAAO,IAAI,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;IACD,0CAA0C;IAChC,aAAa,CAAC,IAAsB;QAC5C,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IACD;;;OAGG;IACI,WAAW,CAAC,MAA4B;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ArraysAndInterfaces\n */\n\nimport { GrowableXYZArray } from \"./GrowableXYZArray\";\nimport { IndexedXYZCollection } from \"./IndexedXYZCollection\";\n\n/**\n * Abstract class managing an array of objects of type T, available for reuse by trusted callers.\n * * Derived class must implement `createForCache` and `clearForCache`.\n * @public\n */\nexport abstract class ReusableObjectCache<T> {\n private _cachedObjects: T[];\n private _numDrop: number;\n private _numCreate: number;\n private _numReuse: number;\n /**\n * Create a new cache for objects of type T.\n */\n protected constructor() {\n this._cachedObjects = [];\n this._numDrop = 0;\n this._numCreate = 0;\n this._numReuse = 0;\n }\n /** Create a new, ready-to-use object. */\n protected abstract createForCache(): T;\n /** Tidy up `data` so it can be reused. */\n protected abstract clearForCache(data: T): void;\n /**\n * Present `data` for storage in the cache, and hence reuse by any subsequent [[grabFromCache]].\n * * `data` will be sent to [[clearForCache]].\n * * The caller should never refer to `data` again.\n * @param data object to return to the cache.\n */\n public dropToCache(data: T | undefined) {\n if (data) {\n this._numDrop++;\n this.clearForCache(data);\n this._cachedObjects.push(data);\n }\n }\n /**\n * Grab an object from the cache.\n * * The returned object becomes property of the caller: the cache does not remember it for any further management.\n */\n public grabFromCache(): T {\n let data = this._cachedObjects.pop();\n if (data === undefined) {\n data = this.createForCache();\n this._numCreate++;\n } else {\n this._numReuse++;\n }\n return data;\n }\n /**\n * Drop multiple objects to the cache.\n * @param data on input, the data to drop. On output, data is an empty array.\n */\n public dropAllToCache(data: T[]) {\n while (data.length > 0) {\n this.dropToCache(data.pop());\n }\n }\n}\n/**\n * Cache of [[GrowableXYZArray]].\n * * Example usage includes clipping methods that can be structured to have disciplined reuse of a small number of arrays for a large number of steps.\n * @public\n */\nexport class GrowableXYZArrayCache extends ReusableObjectCache<GrowableXYZArray> {\n /**\n * Create a new cache for [[GrowableXYZArray]] objects.\n */\n public constructor() {\n super();\n }\n /**\n * Create a new, ready-to-use [[GrowableXYZArray]].\n * @param numPoints initial capacity in xyz triples (default 10)\n * @param growthFactor reallocation expansion (default 1.5)\n */\n protected createForCache(numPoints: number = 10, growthFactor: number = 1.5): GrowableXYZArray {\n return new GrowableXYZArray(numPoints, growthFactor);\n }\n /** Tidy up `data` so it can be reused. */\n protected clearForCache(data: GrowableXYZArray): void {\n data.length = 0;\n }\n /**\n * Grab an array from the cache and immediately fill from a source.\n * @param source xyz to copy into the returned array.\n */\n public grabAndFill(source: IndexedXYZCollection): GrowableXYZArray {\n const dest = this.grabFromCache();\n dest.pushFrom(source);\n return dest;\n }\n}\n"]}
@@ -1,13 +1,10 @@
1
- /** @packageDocumentation
2
- * @module CartesianGeometry
3
- */
4
1
  import { AnyRegion } from "../curve/CurveTypes";
5
2
  import { Loop } from "../curve/Loop";
6
3
  import { IndexedReadWriteXYZCollection, IndexedXYZCollection } from "./IndexedXYZCollection";
7
4
  import { Point3d } from "./Point3dVector3d";
8
5
  import { Range3d } from "./Range";
9
6
  /**
10
- * A `SortablePolygon` carries a (single) loop with data useful for sorting for inner-outer structure.
7
+ * A `SortablePolygon` carries a (single) xy-loop with data useful for sorting for inner-outer structure.
11
8
  * @internal
12
9
  */
13
10
  export declare class SortablePolygon {
@@ -1 +1 @@
1
- {"version":3,"file":"SortablePolygon.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/SortablePolygon.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAIrC,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAsKlC;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAsB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;gBACgB,IAAI,EAAE,6BAA6B,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO;IAS7E;;;OAGG;WACW,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,6BAA6B,GAAG,OAAO;IASjG;;;OAGG;WACW,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IASrE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAyBpC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAwBjC,OAAO,CAAC,MAAM,CAAC,eAAe;WAuChB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,SAAS;WAYpD,4BAA4B,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,6BAA6B,EAAE,EAAE;IAIhG,WAAW,IAAI,oBAAoB,GAAG,SAAS;IAG/C,QAAQ,IAAI,IAAI,GAAG,SAAS;IAG5B,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAGrC,mBAAmB,IAAI,OAAO,GAAG,SAAS;CAGlD"}
1
+ {"version":3,"file":"SortablePolygon.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/SortablePolygon.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAIrC,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA4KlC;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAsB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;gBACgB,IAAI,EAAE,6BAA6B,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO;IAS7E;;;OAGG;WACW,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,6BAA6B,GAAG,OAAO;IASjG;;;OAGG;WACW,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IASrE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAyBpC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAwBjC,OAAO,CAAC,MAAM,CAAC,eAAe;WAuChB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,SAAS;WAYpD,4BAA4B,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,6BAA6B,EAAE,EAAE;IAIhG,WAAW,IAAI,oBAAoB,GAAG,SAAS;IAG/C,QAAQ,IAAI,IAAI,GAAG,SAAS;IAG5B,kBAAkB,CAAC,UAAU,EAAE,MAAM;IAGrC,mBAAmB,IAAI,OAAO,GAAG,SAAS;CAGlD"}
@@ -2,6 +2,9 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module CartesianGeometry
7
+ */
5
8
  import { CurveChain } from "../curve/CurveCollection";
6
9
  import { CurvePrimitive } from "../curve/CurvePrimitive";
7
10
  import { LineString3d } from "../curve/LineString3d";
@@ -10,15 +13,39 @@ import { ParityRegion } from "../curve/ParityRegion";
10
13
  import { RegionOps } from "../curve/RegionOps";
11
14
  import { UnionRegion } from "../curve/UnionRegion";
12
15
  import { IndexedReadWriteXYZCollection } from "./IndexedXYZCollection";
16
+ import { Point3d } from "./Point3dVector3d";
13
17
  import { PolygonOps } from "./PolygonOps";
14
- /** abstract base class for area-related queries of a loop.
15
- * * subclasses have particular logic for `Loop` and polygon data.
18
+ import { Ray3d } from "./Ray3d";
19
+ /** Abstract base class for area-related queries of an xy-loop.
20
+ * * Subclasses have particular logic for `Loop` and polygon data.
16
21
  * @internal
17
22
  */
18
23
  class SimpleRegionCarrier {
24
+ /** Fractions for interior point search. */
25
+ searchFractions = [0.2349, 0.4142, 0.6587, 0.8193];
26
+ /**
27
+ * Given a region boundary tangent, construct a point interior to the region.
28
+ * @param ray point and tangent on an edge of the region (modified on return)
29
+ */
30
+ constructInteriorPoint(ray) {
31
+ ray.direction.z = 0.0;
32
+ if (!ray.direction.normalizeInPlace())
33
+ return undefined; // loop has zero length edge, or a vertical (gap) edge
34
+ ray.direction.rotate90CCWXY(ray.direction);
35
+ if (this.signedArea < 0.0)
36
+ ray.direction.scaleInPlace(-1.0); // aim toward the region interior
37
+ const refDistance = Math.sqrt(Math.abs(this.signedArea));
38
+ const candidatePoint = Point3d.create();
39
+ for (let fraction = 1.0e-5; fraction < 3; fraction *= 5.0) {
40
+ ray.fractionToPoint(fraction * refDistance, candidatePoint);
41
+ if (1 === this.classifyPointXY(candidatePoint))
42
+ return candidatePoint;
43
+ }
44
+ return undefined;
45
+ }
19
46
  }
20
47
  /**
21
- * Implement `LoopCarrier` queries with the area as a polygon carried in an `IndexedReadWriteXYZCollection`
48
+ * Implement `SimpleRegionCarrier` queries with the area as a polygon carried in an `IndexedReadWriteXYZCollection`.
22
49
  */
23
50
  class PolygonCarrier extends SimpleRegionCarrier {
24
51
  data;
@@ -37,14 +64,14 @@ class PolygonCarrier extends SimpleRegionCarrier {
37
64
  classifyPointXY(xy) {
38
65
  return PolygonOps.classifyPointInPolygonXY(xy.x, xy.y, this.data);
39
66
  }
40
- /** Return some point "inside"
41
- * NEEDS WORK: this returns a point ON --
42
- */
67
+ /** Return some point "inside". */
43
68
  getAnyInteriorPoint() {
44
69
  for (let childIndex = 0; childIndex < this.data.length; childIndex++) {
45
- const q = this.constructInteriorPointNearEdge(childIndex, 0.2349);
46
- if (q !== undefined)
47
- return q;
70
+ for (const fraction of this.searchFractions) {
71
+ const q = this.constructInteriorPointNearEdge(childIndex, fraction);
72
+ if (q !== undefined)
73
+ return q;
74
+ }
48
75
  }
49
76
  return undefined;
50
77
  }
@@ -60,27 +87,14 @@ class PolygonCarrier extends SimpleRegionCarrier {
60
87
  }
61
88
  constructInteriorPointNearEdge(edgeIndex, fractionAlong) {
62
89
  if (edgeIndex + 1 < this.data.length) {
63
- const point0 = this.data.getPoint3dAtUncheckedPointIndex(edgeIndex);
64
- const point1 = this.data.getPoint3dAtUncheckedPointIndex(edgeIndex + 1);
65
- const vector = point0.vectorTo(point1);
66
- const point = point0.interpolate(fractionAlong, point1);
67
- vector.rotate90CCWXY(vector);
68
- if (vector.normalizeInPlace()) {
69
- if (this._signedArea < 0)
70
- vector.scaleInPlace(-1.0);
71
- const refDistance = Math.sqrt(Math.abs(this._signedArea));
72
- for (let fraction = 1.0e-5; fraction < 3; fraction *= 5.0) {
73
- const candidatePoint = point.plusScaled(vector, fraction * refDistance);
74
- if (1 === this.classifyPointXY(candidatePoint))
75
- return candidatePoint;
76
- }
77
- }
90
+ const ray = Ray3d.createCapture(this.data.interpolateIndexIndex(edgeIndex, fractionAlong, edgeIndex + 1), this.data.vectorIndexIndex(edgeIndex, edgeIndex + 1));
91
+ return this.constructInteriorPoint(ray);
78
92
  }
79
93
  return undefined;
80
94
  }
81
95
  }
82
96
  /**
83
- * Implement `LoopCarrier` queries with the area as a strongly typed `Loop`
97
+ * Implement `SimpleRegionCarrier` queries with the area as a strongly typed `Loop`.
84
98
  */
85
99
  class LoopCarrier extends SimpleRegionCarrier {
86
100
  data;
@@ -102,28 +116,19 @@ class LoopCarrier extends SimpleRegionCarrier {
102
116
  }
103
117
  constructInteriorPointNearChild(childIndex, fractionAlong) {
104
118
  if (childIndex < this.data.children.length) {
105
- const primitive = this.data.children[childIndex];
106
- const ray = primitive.fractionToPointAndUnitTangent(fractionAlong);
107
- ray.direction.rotate90CCWXY(ray.direction);
108
- if (this._signedArea < 0.0)
109
- ray.direction.scaleInPlace(-1.0);
110
- const refDistance = Math.sqrt(Math.abs(this._signedArea));
111
- for (let fraction = 1.0e-5; fraction < 3; fraction *= 5.0) {
112
- const candidatePoint = ray.fractionToPoint(fraction * refDistance);
113
- if (1 === this.classifyPointXY(candidatePoint))
114
- return candidatePoint;
115
- }
119
+ const ray = this.data.children[childIndex].fractionToPointAndDerivative(fractionAlong);
120
+ return this.constructInteriorPoint(ray);
116
121
  }
117
122
  return undefined;
118
123
  }
119
- /** Return some point "inside"
120
- * NEEDS WORK: this returns a point ON --
121
- */
124
+ /** Return some point "inside". */
122
125
  getAnyInteriorPoint() {
123
126
  for (let childIndex = 0; childIndex < this.data.children.length; childIndex++) {
124
- const q = this.constructInteriorPointNearChild(childIndex, 0.2349);
125
- if (q !== undefined)
126
- return q;
127
+ for (const fraction of this.searchFractions) {
128
+ const q = this.constructInteriorPointNearChild(childIndex, fraction);
129
+ if (q !== undefined)
130
+ return q;
131
+ }
127
132
  }
128
133
  return undefined;
129
134
  }
@@ -151,7 +156,7 @@ class LoopCarrier extends SimpleRegionCarrier {
151
156
  }
152
157
  }
153
158
  /**
154
- * A `SortablePolygon` carries a (single) loop with data useful for sorting for inner-outer structure.
159
+ * A `SortablePolygon` carries a (single) xy-loop with data useful for sorting for inner-outer structure.
155
160
  * @internal
156
161
  */
157
162
  export class SortablePolygon {
@@ -1 +1 @@
1
- {"version":3,"file":"SortablePolygon.js","sourceRoot":"","sources":["../../../src/geometry3d/SortablePolygon.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 CartesianGeometry\n */\nimport { AnyRegion } from \"../curve/CurveTypes\";\nimport { CurveChain } from \"../curve/CurveCollection\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { RegionOps } from \"../curve/RegionOps\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { IndexedReadWriteXYZCollection, IndexedXYZCollection } from \"./IndexedXYZCollection\";\nimport { Point3d } from \"./Point3dVector3d\";\nimport { PolygonOps } from \"./PolygonOps\";\nimport { Range3d } from \"./Range\";\nimport { XAndY } from \"./XYZProps\";\n\n/** abstract base class for area-related queries of a loop.\n * * subclasses have particular logic for `Loop` and polygon data.\n * @internal\n */\nabstract class SimpleRegionCarrier {\n public abstract classifyPointXY(xy: XAndY): number | undefined;\n // Find any point on an edge.\n // evaluate tangent.\n // move to left or right according to signedArea, producing an interior point for the loop.\n public abstract getAnyInteriorPoint(): Point3d | undefined;\n /**\n * * grab the loop formatted as a simple polygon.\n * * stroke if necessary.\n */\n public abstract grabPolygon(): IndexedReadWriteXYZCollection | undefined;\n /**\n * * grab the loop formatted as a strongly typed loop object\n */\n public abstract grabLoop(): Loop | undefined;\n /**\n * (Property access) Return the signed area of the loop\n */\n public abstract get signedArea(): number;\n /**\n * If the current `signedArea` has different sign versus `targetSign`, reverse the loop in place.\n */\n public abstract reverseForAreaSign(targetSign: number): void;\n}\n/**\n * Implement `LoopCarrier` queries with the area as a polygon carried in an `IndexedReadWriteXYZCollection`\n */\nclass PolygonCarrier extends SimpleRegionCarrier {\n public data: IndexedReadWriteXYZCollection;\n private _signedArea: number;\n public get signedArea(): number { return this._signedArea; }\n public constructor(data: IndexedReadWriteXYZCollection) {\n super();\n this.data = data;\n this._signedArea = PolygonOps.areaXY(data);\n }\n /**\n * classify xy parts of point wrt this loop.\n * @param xy\n * @internal\n */\n public classifyPointXY(xy: XAndY): number | undefined {\n return PolygonOps.classifyPointInPolygonXY(xy.x, xy.y, this.data);\n }\n /** Return some point \"inside\"\n * NEEDS WORK: this returns a point ON --\n */\n public getAnyInteriorPoint(): Point3d | undefined {\n for (let childIndex = 0; childIndex < this.data.length; childIndex++) {\n const q = this.constructInteriorPointNearEdge(childIndex, 0.2349);\n if (q !== undefined)\n return q;\n }\n return undefined;\n }\n public grabPolygon(): IndexedReadWriteXYZCollection | undefined { return this.data; }\n public grabLoop(): Loop | undefined {\n return Loop.createPolygon(this.data);\n }\n public reverseForAreaSign(targetSign: number) {\n if (targetSign * this._signedArea < 0.0) {\n this.data.reverseInPlace();\n this._signedArea *= -1.0;\n }\n }\n public constructInteriorPointNearEdge(edgeIndex: number, fractionAlong: number): Point3d | undefined {\n if (edgeIndex + 1 < this.data.length) {\n const point0 = this.data.getPoint3dAtUncheckedPointIndex(edgeIndex);\n const point1 = this.data.getPoint3dAtUncheckedPointIndex(edgeIndex + 1);\n const vector = point0.vectorTo(point1);\n const point = point0.interpolate(fractionAlong, point1);\n vector.rotate90CCWXY(vector);\n if (vector.normalizeInPlace()) {\n if (this._signedArea < 0)\n vector.scaleInPlace(-1.0);\n const refDistance = Math.sqrt(Math.abs(this._signedArea));\n for (let fraction = 1.0e-5; fraction < 3; fraction *= 5.0) {\n const candidatePoint = point.plusScaled(vector, fraction * refDistance);\n if (1 === this.classifyPointXY(candidatePoint))\n return candidatePoint;\n }\n }\n }\n return undefined;\n }\n\n}\n/**\n * Implement `LoopCarrier` queries with the area as a strongly typed `Loop`\n */\nclass LoopCarrier extends SimpleRegionCarrier {\n public data: Loop;\n private _signedArea: number;\n public get signedArea(): number { return this._signedArea; }\n public constructor(data: Loop) {\n super();\n this.data = data;\n const areaMoments = RegionOps.computeXYAreaMoments(data);\n this._signedArea = areaMoments !== undefined ? areaMoments.quantitySum : 0.0;\n }\n /**\n * classify xy parts of point wrt this loop.\n * @param xy\n * @internal\n */\n public classifyPointXY(xy: XAndY): number | undefined {\n return RegionOps.testPointInOnOutRegionXY(this.data, xy.x, xy.y);\n }\n public constructInteriorPointNearChild(childIndex: number, fractionAlong: number): Point3d | undefined {\n if (childIndex < this.data.children.length) {\n const primitive = this.data.children[childIndex];\n const ray = primitive.fractionToPointAndUnitTangent(fractionAlong);\n ray.direction.rotate90CCWXY(ray.direction);\n if (this._signedArea < 0.0)\n ray.direction.scaleInPlace(-1.0);\n const refDistance = Math.sqrt(Math.abs(this._signedArea));\n for (let fraction = 1.0e-5; fraction < 3; fraction *= 5.0) {\n const candidatePoint = ray.fractionToPoint(fraction * refDistance);\n if (1 === this.classifyPointXY(candidatePoint))\n return candidatePoint;\n }\n }\n return undefined;\n }\n /** Return some point \"inside\"\n * NEEDS WORK: this returns a point ON --\n */\n public getAnyInteriorPoint(): Point3d | undefined {\n for (let childIndex = 0; childIndex < this.data.children.length; childIndex++) {\n const q = this.constructInteriorPointNearChild(childIndex, 0.2349);\n if (q !== undefined)\n return q;\n }\n return undefined;\n }\n public grabPolygon(): IndexedReadWriteXYZCollection | undefined {\n const strokes = this.data.cloneStroked();\n if (strokes instanceof CurveChain) {\n const linestring = LineString3d.create();\n for (const child of strokes.children) {\n if (child instanceof CurvePrimitive) {\n child.emitStrokes(linestring);\n }\n }\n return linestring.numPoints() > 0 ? linestring.packedPoints : undefined;\n }\n return undefined;\n }\n public grabLoop(): Loop | undefined {\n return this.data;\n }\n public reverseForAreaSign(targetSign: number) {\n if (targetSign * this._signedArea < 0.0) {\n this.data.reverseChildrenInPlace();\n this._signedArea *= -1.0;\n }\n }\n}\n\n/**\n * A `SortablePolygon` carries a (single) loop with data useful for sorting for inner-outer structure.\n * @internal\n */\nexport class SortablePolygon {\n private _loopCarrier: SimpleRegionCarrier;\n public anyPoint?: Point3d;\n public sortKey: number;\n public range: Range3d;\n public parentIndex?: number;\n public isHole: boolean;\n public outputSetIndex?: number;\n /**\n *\n * @param loop Loop to capture.\n */\n public constructor(loop: IndexedReadWriteXYZCollection | Loop, range: Range3d) {\n if (loop instanceof IndexedReadWriteXYZCollection)\n this._loopCarrier = new PolygonCarrier(loop);\n else\n this._loopCarrier = new LoopCarrier(loop);\n this.range = range;\n this.sortKey = Math.abs(this._loopCarrier.signedArea);\n this.isHole = false;\n }\n /** Push loop with sort data onto the array.\n * * No action if no clear normal.\n * * return true if pushed.\n */\n public static pushPolygon(loops: SortablePolygon[], loop: IndexedReadWriteXYZCollection): boolean {\n const range = loop.getRange();\n const sortablePolygon = new SortablePolygon(loop, range);\n if (sortablePolygon.sortKey > 0.0) {\n loops.push(sortablePolygon);\n return true;\n }\n return false;\n }\n /** Push loop with sort data onto the array.\n * * No action if no clear normal.\n * * return true if pushed.\n */\n public static pushLoop(loops: SortablePolygon[], loop: Loop): boolean {\n const range = loop.range();\n const sortablePolygon = new SortablePolygon(loop, range);\n if (sortablePolygon.sortKey > 0.0) {\n loops.push(sortablePolygon);\n return true;\n }\n return false;\n }\n /** Push loop with sort data onto the array.\n * * No action if no clear normal.\n * * return true if pushed.\n */\n private static assignParentsAndDepth(loops: SortablePolygon[]): void {\n // Sort largest to smallest ...\n loops.sort((loopA: SortablePolygon, loopB: SortablePolygon) => (loopB.sortKey - loopA.sortKey));\n // starting with smallest loop, point each loop to smallest containing parent.\n for (let i = loops.length; i-- > 0;) {\n const thisLoop = loops[i];\n const xy = thisLoop._loopCarrier.getAnyInteriorPoint();\n if (xy !== undefined) {\n // find smallest containing parent (search forward only to hit)\n loops[i].parentIndex = undefined;\n loops[i].outputSetIndex = undefined;\n for (let j = i; j-- > 0;) {\n const otherLoop = loops[j];\n if (otherLoop.range.containsXY(xy.x, xy.y)) {\n if (1 === otherLoop._loopCarrier.classifyPointXY(xy)) {\n thisLoop.parentIndex = j;\n // The loops are searched from small area to larger. Any other containing loop is larger, so otherLoop must be the smallest.\n break;\n }\n }\n }\n }\n }\n }\n\n private static assemblePolygonSet(loops: SortablePolygon[]): IndexedReadWriteXYZCollection[][] {\n const outputSets: IndexedReadWriteXYZCollection[][] = [];\n\n // In large-to-small order:\n // If a loop has no parent or has a \"hole\" as parent it is outer.\n // otherwise (i.e. it has a non-hole parent) it becomes a hole in the parent.\n for (const loopData of loops) {\n loopData.isHole = false;\n const parentIndex = loopData.parentIndex;\n if (parentIndex !== undefined)\n loopData.isHole = !loops[parentIndex].isHole;\n if (!loopData.isHole) {\n loopData._loopCarrier.reverseForAreaSign(1.0);\n loopData.outputSetIndex = outputSets.length;\n outputSets.push([]);\n outputSets[loopData.outputSetIndex].push(loopData._loopCarrier.grabPolygon()!);\n } else {\n loopData._loopCarrier.reverseForAreaSign(-1.0);\n const outputSetIndex = loops[parentIndex!].outputSetIndex!;\n outputSets[outputSetIndex].push(loopData._loopCarrier.grabPolygon()!);\n }\n }\n return outputSets;\n }\n private static assembleLoopSet(loops: SortablePolygon[]): AnyRegion[] {\n const outputSets: AnyRegion[] = [];\n const numLoops = loops.length;\n // In large-to-small order:\n // If a loop has no parent or has a \"hole\" as parent it is outer.\n // otherwise (i.e. it has a non-hole parent) it becomes a hole in the parent.\n for (let candidateIndex = 0; candidateIndex < numLoops; candidateIndex++) {\n const candidateData = loops[candidateIndex];\n const parentIndex = candidateData.parentIndex;\n candidateData.isHole = parentIndex !== undefined ? !loops[parentIndex].isHole : false;\n\n if (!candidateData.isHole) {\n candidateData._loopCarrier.reverseForAreaSign(1.0);\n const candidateLoop = candidateData._loopCarrier.grabLoop()!;\n let candidateParityRegion: ParityRegion | undefined;\n // find all directly contained children . . .\n for (let childIndex = candidateIndex + 1; childIndex < numLoops; childIndex++) {\n const childData = loops[childIndex];\n if (childData.parentIndex === candidateIndex) {\n if (candidateParityRegion === undefined) {\n candidateParityRegion = ParityRegion.create();\n candidateParityRegion.tryAddChild(candidateLoop);\n childData._loopCarrier.reverseForAreaSign(-1.0);\n candidateParityRegion.tryAddChild(childData._loopCarrier.grabLoop());\n } else {\n childData._loopCarrier.reverseForAreaSign(-1.0);\n candidateParityRegion.tryAddChild(childData._loopCarrier.grabLoop());\n }\n }\n }\n if (candidateParityRegion !== undefined)\n outputSets.push(candidateParityRegion);\n else if (candidateLoop !== undefined)\n outputSets.push(candidateLoop);\n }\n }\n return outputSets;\n }\n\n public static sortAsAnyRegion(loops: SortablePolygon[]): AnyRegion {\n this.assignParentsAndDepth(loops);\n const regions = this.assembleLoopSet(loops);\n if (regions.length === 1)\n return regions[0];\n else {\n const unionRegion = UnionRegion.create();\n for (const region of regions)\n unionRegion.tryAddChild(region);\n return unionRegion;\n }\n }\n public static sortAsArrayOfArrayOfPolygons(loops: SortablePolygon[]): IndexedReadWriteXYZCollection[][] {\n this.assignParentsAndDepth(loops);\n return this.assemblePolygonSet(loops);\n }\n public grabPolygon(): IndexedXYZCollection | undefined {\n return this._loopCarrier.grabPolygon();\n }\n public grabLoop(): Loop | undefined {\n return this._loopCarrier.grabLoop();\n }\n public reverseForAreaSign(targetSign: number) {\n this._loopCarrier.reverseForAreaSign(targetSign);\n }\n public getAnyInteriorPoint(): Point3d | undefined {\n return this._loopCarrier.getAnyInteriorPoint();\n }\n}\n"]}
1
+ {"version":3,"file":"SortablePolygon.js","sourceRoot":"","sources":["../../../src/geometry3d/SortablePolygon.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 CartesianGeometry\n */\n\nimport { CurveChain } from \"../curve/CurveCollection\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { AnyRegion } from \"../curve/CurveTypes\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { RegionOps } from \"../curve/RegionOps\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { IndexedReadWriteXYZCollection, IndexedXYZCollection } from \"./IndexedXYZCollection\";\nimport { Point3d } from \"./Point3dVector3d\";\nimport { PolygonOps } from \"./PolygonOps\";\nimport { Range3d } from \"./Range\";\nimport { Ray3d } from \"./Ray3d\";\nimport { XAndY } from \"./XYZProps\";\n\n/** Abstract base class for area-related queries of an xy-loop.\n * * Subclasses have particular logic for `Loop` and polygon data.\n * @internal\n */\nabstract class SimpleRegionCarrier {\n /** Fractions for interior point search. */\n protected searchFractions: number[] = [0.2349, 0.4142, 0.6587, 0.8193];\n\n public abstract classifyPointXY(xy: XAndY): number | undefined;\n // Find any point on an edge.\n // evaluate tangent.\n // move to left or right according to signedArea, producing an interior point for the loop.\n public abstract getAnyInteriorPoint(): Point3d | undefined;\n /**\n * * grab the loop formatted as a simple polygon.\n * * stroke if necessary.\n */\n public abstract grabPolygon(): IndexedReadWriteXYZCollection | undefined;\n /**\n * * grab the loop formatted as a strongly typed loop object\n */\n public abstract grabLoop(): Loop | undefined;\n /**\n * (Property access) Return the signed area of the loop\n */\n public abstract get signedArea(): number;\n /**\n * If the current `signedArea` has different sign versus `targetSign`, reverse the loop in place.\n */\n public abstract reverseForAreaSign(targetSign: number): void;\n /**\n * Given a region boundary tangent, construct a point interior to the region.\n * @param ray point and tangent on an edge of the region (modified on return)\n */\n protected constructInteriorPoint(ray: Ray3d): Point3d | undefined {\n ray.direction.z = 0.0;\n if (!ray.direction.normalizeInPlace())\n return undefined; // loop has zero length edge, or a vertical (gap) edge\n ray.direction.rotate90CCWXY(ray.direction);\n if (this.signedArea < 0.0)\n ray.direction.scaleInPlace(-1.0); // aim toward the region interior\n const refDistance = Math.sqrt(Math.abs(this.signedArea));\n const candidatePoint = Point3d.create();\n for (let fraction = 1.0e-5; fraction < 3; fraction *= 5.0) {\n ray.fractionToPoint(fraction * refDistance, candidatePoint);\n if (1 === this.classifyPointXY(candidatePoint))\n return candidatePoint;\n }\n return undefined;\n }\n}\n\n/**\n * Implement `SimpleRegionCarrier` queries with the area as a polygon carried in an `IndexedReadWriteXYZCollection`.\n */\nclass PolygonCarrier extends SimpleRegionCarrier {\n public data: IndexedReadWriteXYZCollection;\n private _signedArea: number;\n public get signedArea(): number { return this._signedArea; }\n public constructor(data: IndexedReadWriteXYZCollection) {\n super();\n this.data = data;\n this._signedArea = PolygonOps.areaXY(data);\n }\n /**\n * classify xy parts of point wrt this loop.\n * @param xy\n * @internal\n */\n public classifyPointXY(xy: XAndY): number | undefined {\n return PolygonOps.classifyPointInPolygonXY(xy.x, xy.y, this.data);\n }\n /** Return some point \"inside\". */\n public getAnyInteriorPoint(): Point3d | undefined {\n for (let childIndex = 0; childIndex < this.data.length; childIndex++) {\n for (const fraction of this.searchFractions) {\n const q = this.constructInteriorPointNearEdge(childIndex, fraction);\n if (q !== undefined)\n return q;\n }\n }\n return undefined;\n }\n public grabPolygon(): IndexedReadWriteXYZCollection | undefined { return this.data; }\n public grabLoop(): Loop | undefined {\n return Loop.createPolygon(this.data);\n }\n public reverseForAreaSign(targetSign: number) {\n if (targetSign * this._signedArea < 0.0) {\n this.data.reverseInPlace();\n this._signedArea *= -1.0;\n }\n }\n public constructInteriorPointNearEdge(edgeIndex: number, fractionAlong: number): Point3d | undefined {\n if (edgeIndex + 1 < this.data.length) {\n const ray = Ray3d.createCapture(\n this.data.interpolateIndexIndex(edgeIndex, fractionAlong, edgeIndex + 1)!,\n this.data.vectorIndexIndex(edgeIndex, edgeIndex + 1)!\n );\n return this.constructInteriorPoint(ray);\n }\n return undefined;\n }\n}\n\n/**\n * Implement `SimpleRegionCarrier` queries with the area as a strongly typed `Loop`.\n */\nclass LoopCarrier extends SimpleRegionCarrier {\n public data: Loop;\n private _signedArea: number;\n public get signedArea(): number { return this._signedArea; }\n public constructor(data: Loop) {\n super();\n this.data = data;\n const areaMoments = RegionOps.computeXYAreaMoments(data);\n this._signedArea = areaMoments !== undefined ? areaMoments.quantitySum : 0.0;\n }\n /**\n * classify xy parts of point wrt this loop.\n * @param xy\n * @internal\n */\n public classifyPointXY(xy: XAndY): number | undefined {\n return RegionOps.testPointInOnOutRegionXY(this.data, xy.x, xy.y);\n }\n public constructInteriorPointNearChild(childIndex: number, fractionAlong: number): Point3d | undefined {\n if (childIndex < this.data.children.length) {\n const ray = this.data.children[childIndex].fractionToPointAndDerivative(fractionAlong);\n return this.constructInteriorPoint(ray);\n }\n return undefined;\n }\n /** Return some point \"inside\". */\n public getAnyInteriorPoint(): Point3d | undefined {\n for (let childIndex = 0; childIndex < this.data.children.length; childIndex++) {\n for (const fraction of this.searchFractions) {\n const q = this.constructInteriorPointNearChild(childIndex, fraction);\n if (q !== undefined)\n return q;\n }\n }\n return undefined;\n }\n public grabPolygon(): IndexedReadWriteXYZCollection | undefined {\n const strokes = this.data.cloneStroked();\n if (strokes instanceof CurveChain) {\n const linestring = LineString3d.create();\n for (const child of strokes.children) {\n if (child instanceof CurvePrimitive) {\n child.emitStrokes(linestring);\n }\n }\n return linestring.numPoints() > 0 ? linestring.packedPoints : undefined;\n }\n return undefined;\n }\n public grabLoop(): Loop | undefined {\n return this.data;\n }\n public reverseForAreaSign(targetSign: number) {\n if (targetSign * this._signedArea < 0.0) {\n this.data.reverseChildrenInPlace();\n this._signedArea *= -1.0;\n }\n }\n}\n\n/**\n * A `SortablePolygon` carries a (single) xy-loop with data useful for sorting for inner-outer structure.\n * @internal\n */\nexport class SortablePolygon {\n private _loopCarrier: SimpleRegionCarrier;\n public anyPoint?: Point3d;\n public sortKey: number;\n public range: Range3d;\n public parentIndex?: number;\n public isHole: boolean;\n public outputSetIndex?: number;\n /**\n *\n * @param loop Loop to capture.\n */\n public constructor(loop: IndexedReadWriteXYZCollection | Loop, range: Range3d) {\n if (loop instanceof IndexedReadWriteXYZCollection)\n this._loopCarrier = new PolygonCarrier(loop);\n else\n this._loopCarrier = new LoopCarrier(loop);\n this.range = range;\n this.sortKey = Math.abs(this._loopCarrier.signedArea);\n this.isHole = false;\n }\n /** Push loop with sort data onto the array.\n * * No action if no clear normal.\n * * return true if pushed.\n */\n public static pushPolygon(loops: SortablePolygon[], loop: IndexedReadWriteXYZCollection): boolean {\n const range = loop.getRange();\n const sortablePolygon = new SortablePolygon(loop, range);\n if (sortablePolygon.sortKey > 0.0) {\n loops.push(sortablePolygon);\n return true;\n }\n return false;\n }\n /** Push loop with sort data onto the array.\n * * No action if no clear normal.\n * * return true if pushed.\n */\n public static pushLoop(loops: SortablePolygon[], loop: Loop): boolean {\n const range = loop.range();\n const sortablePolygon = new SortablePolygon(loop, range);\n if (sortablePolygon.sortKey > 0.0) {\n loops.push(sortablePolygon);\n return true;\n }\n return false;\n }\n /** Push loop with sort data onto the array.\n * * No action if no clear normal.\n * * return true if pushed.\n */\n private static assignParentsAndDepth(loops: SortablePolygon[]): void {\n // Sort largest to smallest ...\n loops.sort((loopA: SortablePolygon, loopB: SortablePolygon) => (loopB.sortKey - loopA.sortKey));\n // starting with smallest loop, point each loop to smallest containing parent.\n for (let i = loops.length; i-- > 0;) {\n const thisLoop = loops[i];\n const xy = thisLoop._loopCarrier.getAnyInteriorPoint();\n if (xy !== undefined) {\n // find smallest containing parent (search forward only to hit)\n loops[i].parentIndex = undefined;\n loops[i].outputSetIndex = undefined;\n for (let j = i; j-- > 0;) {\n const otherLoop = loops[j];\n if (otherLoop.range.containsXY(xy.x, xy.y)) {\n if (1 === otherLoop._loopCarrier.classifyPointXY(xy)) {\n thisLoop.parentIndex = j;\n // The loops are searched from small area to larger. Any other containing loop is larger, so otherLoop must be the smallest.\n break;\n }\n }\n }\n }\n }\n }\n\n private static assemblePolygonSet(loops: SortablePolygon[]): IndexedReadWriteXYZCollection[][] {\n const outputSets: IndexedReadWriteXYZCollection[][] = [];\n\n // In large-to-small order:\n // If a loop has no parent or has a \"hole\" as parent it is outer.\n // otherwise (i.e. it has a non-hole parent) it becomes a hole in the parent.\n for (const loopData of loops) {\n loopData.isHole = false;\n const parentIndex = loopData.parentIndex;\n if (parentIndex !== undefined)\n loopData.isHole = !loops[parentIndex].isHole;\n if (!loopData.isHole) {\n loopData._loopCarrier.reverseForAreaSign(1.0);\n loopData.outputSetIndex = outputSets.length;\n outputSets.push([]);\n outputSets[loopData.outputSetIndex].push(loopData._loopCarrier.grabPolygon()!);\n } else {\n loopData._loopCarrier.reverseForAreaSign(-1.0);\n const outputSetIndex = loops[parentIndex!].outputSetIndex!;\n outputSets[outputSetIndex].push(loopData._loopCarrier.grabPolygon()!);\n }\n }\n return outputSets;\n }\n private static assembleLoopSet(loops: SortablePolygon[]): AnyRegion[] {\n const outputSets: AnyRegion[] = [];\n const numLoops = loops.length;\n // In large-to-small order:\n // If a loop has no parent or has a \"hole\" as parent it is outer.\n // otherwise (i.e. it has a non-hole parent) it becomes a hole in the parent.\n for (let candidateIndex = 0; candidateIndex < numLoops; candidateIndex++) {\n const candidateData = loops[candidateIndex];\n const parentIndex = candidateData.parentIndex;\n candidateData.isHole = parentIndex !== undefined ? !loops[parentIndex].isHole : false;\n\n if (!candidateData.isHole) {\n candidateData._loopCarrier.reverseForAreaSign(1.0);\n const candidateLoop = candidateData._loopCarrier.grabLoop()!;\n let candidateParityRegion: ParityRegion | undefined;\n // find all directly contained children . . .\n for (let childIndex = candidateIndex + 1; childIndex < numLoops; childIndex++) {\n const childData = loops[childIndex];\n if (childData.parentIndex === candidateIndex) {\n if (candidateParityRegion === undefined) {\n candidateParityRegion = ParityRegion.create();\n candidateParityRegion.tryAddChild(candidateLoop);\n childData._loopCarrier.reverseForAreaSign(-1.0);\n candidateParityRegion.tryAddChild(childData._loopCarrier.grabLoop());\n } else {\n childData._loopCarrier.reverseForAreaSign(-1.0);\n candidateParityRegion.tryAddChild(childData._loopCarrier.grabLoop());\n }\n }\n }\n if (candidateParityRegion !== undefined)\n outputSets.push(candidateParityRegion);\n else if (candidateLoop !== undefined)\n outputSets.push(candidateLoop);\n }\n }\n return outputSets;\n }\n\n public static sortAsAnyRegion(loops: SortablePolygon[]): AnyRegion {\n this.assignParentsAndDepth(loops);\n const regions = this.assembleLoopSet(loops);\n if (regions.length === 1)\n return regions[0];\n else {\n const unionRegion = UnionRegion.create();\n for (const region of regions)\n unionRegion.tryAddChild(region);\n return unionRegion;\n }\n }\n public static sortAsArrayOfArrayOfPolygons(loops: SortablePolygon[]): IndexedReadWriteXYZCollection[][] {\n this.assignParentsAndDepth(loops);\n return this.assemblePolygonSet(loops);\n }\n public grabPolygon(): IndexedXYZCollection | undefined {\n return this._loopCarrier.grabPolygon();\n }\n public grabLoop(): Loop | undefined {\n return this._loopCarrier.grabLoop();\n }\n public reverseForAreaSign(targetSign: number) {\n this._loopCarrier.reverseForAreaSign(targetSign);\n }\n public getAnyInteriorPoint(): Point3d | undefined {\n return this._loopCarrier.getAnyInteriorPoint();\n }\n}\n"]}
@@ -135,10 +135,29 @@ export declare class Transform implements BeJSONFunctions {
135
135
  /** Create a Transform using the given `origin` and columns of the `matrix` */
136
136
  static createOriginAndMatrixColumns(origin: XYZ, vectorX: Vector3d, vectorY: Vector3d, vectorZ: Vector3d, result?: Transform): Transform;
137
137
  /**
138
- * Create a Transform such that its `matrix` part is rigid.
139
- * @see [[Matrix3d.createRigidFromColumns]] for details of how the matrix is created to be rigid.
138
+ * Create a Transform with given origin and a rigid matrix constructed from two column vectors.
139
+ * @param origin origin of the local coordinate system. Default is the global origin (zero).
140
+ * @param vectorX first axis passed into `Matrix3d.createRigidFromColumns`.
141
+ * @param vectorY second axis passed into `Matrix3d.createRigidFromColumns`.
142
+ * @param axisOrder order of axis construction in `Matrix3d.createRigidFromColumns(vectorX, vectorY, axisOrder)`.
143
+ * @param result optional pre-allocated result to populate and return.
144
+ * @returns localToWorld transform for a local coordinate system with given origin and ordered axes, or `undefined`
145
+ * if the rigid matrix could not be created.
146
+ * @see [[Matrix3d.createRigidFromColumns]]
140
147
  */
141
148
  static createRigidFromOriginAndColumns(origin: XYZ | undefined, vectorX: Vector3d, vectorY: Vector3d, axisOrder: AxisOrder, result?: Transform): Transform | undefined;
149
+ /**
150
+ * Create a Transform with given origin and a rigid matrix constructed from one column vector.
151
+ * @param origin origin of the local coordinate system. Default is the global origin (zero).
152
+ * @param vector direction of the axis of the local coordinate system indicated by the first letter of `axisOrder`.
153
+ * @param axisOrder order of axis construction in `Matrix3d.createRigidHeadsUp(vector, axisOrder)`. Default value
154
+ * is `AxisOrder.ZXY`, which means the z-column of the returned Transform is in the direction of `vector`.
155
+ * @param result optional pre-allocated result to populate and return.
156
+ * @returns localToWorld transform for a local coordinate system with given origin and axis, or `undefined`
157
+ * if the rigid matrix could not be created.
158
+ * @see [[Matrix3d.createRigidHeadsUp]]
159
+ */
160
+ static createRigidFromOriginAndVector(origin: XYZ | undefined, vector: Vector3d, axisOrder?: AxisOrder, result?: Transform): Transform | undefined;
142
161
  /**
143
162
  * Create a Transform with the specified `matrix`. Compute an `origin` (different from the given `fixedPoint`)
144
163
  * so that the `fixedPoint` maps back to itself. The returned Transform, transforms a point `p` to `M*p + (f - M*f)`
@@ -1 +1 @@
1
- {"version":3,"file":"Transform.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Transform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Transform.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Transform.ts"],"names":[],"mappings":"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"}
@@ -263,27 +263,46 @@ export class Transform {
263
263
  return result;
264
264
  }
265
265
  /**
266
- * Create a Transform such that its `matrix` part is rigid.
267
- * @see [[Matrix3d.createRigidFromColumns]] for details of how the matrix is created to be rigid.
266
+ * Create a Transform with given origin and a rigid matrix constructed from two column vectors.
267
+ * @param origin origin of the local coordinate system. Default is the global origin (zero).
268
+ * @param vectorX first axis passed into `Matrix3d.createRigidFromColumns`.
269
+ * @param vectorY second axis passed into `Matrix3d.createRigidFromColumns`.
270
+ * @param axisOrder order of axis construction in `Matrix3d.createRigidFromColumns(vectorX, vectorY, axisOrder)`.
271
+ * @param result optional pre-allocated result to populate and return.
272
+ * @returns localToWorld transform for a local coordinate system with given origin and ordered axes, or `undefined`
273
+ * if the rigid matrix could not be created.
274
+ * @see [[Matrix3d.createRigidFromColumns]]
268
275
  */
269
276
  static createRigidFromOriginAndColumns(origin, vectorX, vectorY, axisOrder, result) {
270
- const matrix = Matrix3d.createRigidFromColumns(vectorX, vectorY, axisOrder, result ? result._matrix : undefined);
277
+ const matrix = Matrix3d.createRigidFromColumns(vectorX, vectorY, axisOrder, result?._matrix);
271
278
  if (!matrix)
272
279
  return undefined;
273
280
  if (result) {
274
- // result._matrix was already modified to become rigid via createRigidFromColumns
275
281
  result._origin.setFrom(origin);
276
282
  return result;
277
283
  }
278
- /**
279
- * We don't want to pass "origin" to createRefs because createRefs does not clone "origin". That means if "origin"
280
- * is changed via Transform at any point, the initial "origin" passed by the user is also changed. To avoid that,
281
- * we pass "undefined" to createRefs so that it allocates a new point which then we set it to the "origin" which
282
- * is passed by user in the next line.
283
- */
284
- result = Transform.createRefs(undefined, matrix);
285
- result._origin.setFromPoint3d(origin);
286
- return result;
284
+ return Transform.createRefs(origin?.cloneAsPoint3d(), matrix);
285
+ }
286
+ /**
287
+ * Create a Transform with given origin and a rigid matrix constructed from one column vector.
288
+ * @param origin origin of the local coordinate system. Default is the global origin (zero).
289
+ * @param vector direction of the axis of the local coordinate system indicated by the first letter of `axisOrder`.
290
+ * @param axisOrder order of axis construction in `Matrix3d.createRigidHeadsUp(vector, axisOrder)`. Default value
291
+ * is `AxisOrder.ZXY`, which means the z-column of the returned Transform is in the direction of `vector`.
292
+ * @param result optional pre-allocated result to populate and return.
293
+ * @returns localToWorld transform for a local coordinate system with given origin and axis, or `undefined`
294
+ * if the rigid matrix could not be created.
295
+ * @see [[Matrix3d.createRigidHeadsUp]]
296
+ */
297
+ static createRigidFromOriginAndVector(origin, vector, axisOrder = AxisOrder.ZXY, result) {
298
+ const matrix = Matrix3d.createRigidHeadsUp(vector, axisOrder, result?._matrix);
299
+ if (!matrix)
300
+ return undefined;
301
+ if (result) {
302
+ result._origin.setFrom(origin);
303
+ return result;
304
+ }
305
+ return Transform.createRefs(origin?.cloneAsPoint3d(), matrix);
287
306
  }
288
307
  /**
289
308
  * Create a Transform with the specified `matrix`. Compute an `origin` (different from the given `fixedPoint`)