@itwin/core-geometry 3.1.0-dev.8 → 3.2.0-dev.12

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 (286) hide show
  1. package/CHANGELOG.md +48 -3
  2. package/lib/cjs/bspline/AkimaCurve3d.d.ts +2 -8
  3. package/lib/cjs/bspline/AkimaCurve3d.d.ts.map +1 -1
  4. package/lib/cjs/bspline/AkimaCurve3d.js +2 -17
  5. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  6. package/lib/cjs/bspline/BSpline1dNd.d.ts +11 -6
  7. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js +64 -6
  9. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve.d.ts +18 -14
  11. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  12. package/lib/cjs/bspline/BSplineCurve.js +54 -32
  13. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  14. package/lib/cjs/bspline/BSplineCurve3dH.d.ts +0 -2
  15. package/lib/cjs/bspline/BSplineCurve3dH.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurve3dH.js +0 -6
  17. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  18. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  19. package/lib/cjs/bspline/BSplineCurveOps.js +4 -6
  20. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  21. package/lib/cjs/bspline/Bezier1dNd.d.ts +8 -11
  22. package/lib/cjs/bspline/Bezier1dNd.d.ts.map +1 -1
  23. package/lib/cjs/bspline/Bezier1dNd.js +13 -14
  24. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  25. package/lib/cjs/bspline/BezierCurve3d.d.ts +0 -6
  26. package/lib/cjs/bspline/BezierCurve3d.d.ts.map +1 -1
  27. package/lib/cjs/bspline/BezierCurve3d.js +0 -14
  28. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  29. package/lib/cjs/bspline/BezierCurve3dH.d.ts +0 -4
  30. package/lib/cjs/bspline/BezierCurve3dH.d.ts.map +1 -1
  31. package/lib/cjs/bspline/BezierCurve3dH.js +0 -8
  32. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  33. package/lib/cjs/bspline/BezierCurveBase.d.ts +17 -0
  34. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  35. package/lib/cjs/bspline/BezierCurveBase.js +31 -1
  36. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  37. package/lib/cjs/bspline/InterpolationCurve3d.d.ts +2 -8
  38. package/lib/cjs/bspline/InterpolationCurve3d.d.ts.map +1 -1
  39. package/lib/cjs/bspline/InterpolationCurve3d.js +2 -17
  40. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  41. package/lib/cjs/bspline/KnotVector.d.ts +24 -9
  42. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  43. package/lib/cjs/bspline/KnotVector.js +86 -26
  44. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  45. package/lib/cjs/curve/Arc3d.d.ts +8 -2
  46. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  47. package/lib/cjs/curve/Arc3d.js +32 -2
  48. package/lib/cjs/curve/Arc3d.js.map +1 -1
  49. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +11 -4
  50. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  51. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +25 -9
  52. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  53. package/lib/cjs/curve/CurveCollection.d.ts +2 -2
  54. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  55. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  56. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  57. package/lib/cjs/curve/CurveCurveIntersectXY.js +5 -3
  58. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  59. package/lib/cjs/curve/CurveFactory.d.ts +7 -3
  60. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  61. package/lib/cjs/curve/CurveFactory.js +30 -15
  62. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  63. package/lib/cjs/curve/CurvePrimitive.d.ts +27 -9
  64. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  65. package/lib/cjs/curve/CurvePrimitive.js +18 -0
  66. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  67. package/lib/cjs/curve/LineSegment3d.d.ts +8 -2
  68. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  69. package/lib/cjs/curve/LineSegment3d.js +14 -0
  70. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  71. package/lib/cjs/curve/LineString3d.d.ts +11 -4
  72. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  73. package/lib/cjs/curve/LineString3d.js +72 -22
  74. package/lib/cjs/curve/LineString3d.js.map +1 -1
  75. package/lib/cjs/curve/ProxyCurve.d.ts +12 -4
  76. package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
  77. package/lib/cjs/curve/ProxyCurve.js +16 -2
  78. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  79. package/lib/cjs/curve/Query/CurveSplitContext.d.ts.map +1 -1
  80. package/lib/cjs/curve/Query/CurveSplitContext.js +1 -3
  81. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  82. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +11 -0
  83. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  84. package/lib/cjs/curve/Query/PlanarSubdivision.js +26 -17
  85. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  86. package/lib/cjs/curve/RegionOps.d.ts +15 -16
  87. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  88. package/lib/cjs/curve/RegionOps.js +14 -16
  89. package/lib/cjs/curve/RegionOps.js.map +1 -1
  90. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  91. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +3 -1
  92. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  93. package/lib/cjs/curve/StrokeOptions.d.ts +6 -0
  94. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  95. package/lib/cjs/curve/StrokeOptions.js +21 -0
  96. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  97. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  98. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.d.ts +2 -2
  99. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.d.ts.map +1 -1
  100. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  101. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.d.ts +36 -0
  102. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.d.ts.map +1 -0
  103. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +73 -0
  104. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -0
  105. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +48 -24
  106. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  107. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +113 -112
  108. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  109. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +0 -4
  110. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  111. package/lib/cjs/curve/spiral/DirectSpiral3d.js +0 -15
  112. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  113. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +0 -4
  114. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  115. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +33 -22
  116. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  117. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +16 -0
  118. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  119. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +29 -0
  120. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  121. package/lib/cjs/geometry3d/Matrix3d.d.ts +4 -4
  122. package/lib/cjs/geometry3d/Matrix3d.js +4 -4
  123. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  124. package/lib/cjs/geometry4d/Matrix4d.d.ts.map +1 -1
  125. package/lib/cjs/geometry4d/Matrix4d.js +21 -8
  126. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  127. package/lib/cjs/numerics/ClusterableArray.d.ts +1 -1
  128. package/lib/cjs/numerics/ClusterableArray.d.ts.map +1 -1
  129. package/lib/cjs/numerics/ClusterableArray.js +2 -2
  130. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  131. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +15 -1
  132. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  133. package/lib/cjs/polyface/PolyfaceBuilder.js +17 -11
  134. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  135. package/lib/cjs/serialization/IModelJsonSchema.d.ts +4 -0
  136. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  137. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  138. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  139. package/lib/cjs/solid/SweepContour.js.map +1 -1
  140. package/lib/cjs/topology/Merging.d.ts +22 -3
  141. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  142. package/lib/cjs/topology/Merging.js +97 -1
  143. package/lib/cjs/topology/Merging.js.map +1 -1
  144. package/lib/esm/bspline/AkimaCurve3d.d.ts +2 -8
  145. package/lib/esm/bspline/AkimaCurve3d.d.ts.map +1 -1
  146. package/lib/esm/bspline/AkimaCurve3d.js +2 -17
  147. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  148. package/lib/esm/bspline/BSpline1dNd.d.ts +11 -6
  149. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  150. package/lib/esm/bspline/BSpline1dNd.js +65 -7
  151. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  152. package/lib/esm/bspline/BSplineCurve.d.ts +18 -14
  153. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  154. package/lib/esm/bspline/BSplineCurve.js +54 -32
  155. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  156. package/lib/esm/bspline/BSplineCurve3dH.d.ts +0 -2
  157. package/lib/esm/bspline/BSplineCurve3dH.d.ts.map +1 -1
  158. package/lib/esm/bspline/BSplineCurve3dH.js +0 -6
  159. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  160. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  161. package/lib/esm/bspline/BSplineCurveOps.js +4 -6
  162. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  163. package/lib/esm/bspline/Bezier1dNd.d.ts +8 -11
  164. package/lib/esm/bspline/Bezier1dNd.d.ts.map +1 -1
  165. package/lib/esm/bspline/Bezier1dNd.js +13 -14
  166. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  167. package/lib/esm/bspline/BezierCurve3d.d.ts +0 -6
  168. package/lib/esm/bspline/BezierCurve3d.d.ts.map +1 -1
  169. package/lib/esm/bspline/BezierCurve3d.js +0 -14
  170. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  171. package/lib/esm/bspline/BezierCurve3dH.d.ts +0 -4
  172. package/lib/esm/bspline/BezierCurve3dH.d.ts.map +1 -1
  173. package/lib/esm/bspline/BezierCurve3dH.js +0 -8
  174. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  175. package/lib/esm/bspline/BezierCurveBase.d.ts +17 -0
  176. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  177. package/lib/esm/bspline/BezierCurveBase.js +31 -1
  178. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  179. package/lib/esm/bspline/InterpolationCurve3d.d.ts +2 -8
  180. package/lib/esm/bspline/InterpolationCurve3d.d.ts.map +1 -1
  181. package/lib/esm/bspline/InterpolationCurve3d.js +2 -17
  182. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  183. package/lib/esm/bspline/KnotVector.d.ts +24 -9
  184. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  185. package/lib/esm/bspline/KnotVector.js +86 -26
  186. package/lib/esm/bspline/KnotVector.js.map +1 -1
  187. package/lib/esm/curve/Arc3d.d.ts +8 -2
  188. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  189. package/lib/esm/curve/Arc3d.js +32 -2
  190. package/lib/esm/curve/Arc3d.js.map +1 -1
  191. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +11 -4
  192. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  193. package/lib/esm/curve/CurveChainWithDistanceIndex.js +25 -9
  194. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  195. package/lib/esm/curve/CurveCollection.d.ts +2 -2
  196. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  197. package/lib/esm/curve/CurveCollection.js.map +1 -1
  198. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  199. package/lib/esm/curve/CurveCurveIntersectXY.js +5 -3
  200. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  201. package/lib/esm/curve/CurveFactory.d.ts +7 -3
  202. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  203. package/lib/esm/curve/CurveFactory.js +30 -15
  204. package/lib/esm/curve/CurveFactory.js.map +1 -1
  205. package/lib/esm/curve/CurvePrimitive.d.ts +27 -9
  206. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  207. package/lib/esm/curve/CurvePrimitive.js +18 -0
  208. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  209. package/lib/esm/curve/LineSegment3d.d.ts +8 -2
  210. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  211. package/lib/esm/curve/LineSegment3d.js +15 -1
  212. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  213. package/lib/esm/curve/LineString3d.d.ts +11 -4
  214. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  215. package/lib/esm/curve/LineString3d.js +72 -22
  216. package/lib/esm/curve/LineString3d.js.map +1 -1
  217. package/lib/esm/curve/ProxyCurve.d.ts +12 -4
  218. package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
  219. package/lib/esm/curve/ProxyCurve.js +16 -2
  220. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  221. package/lib/esm/curve/Query/CurveSplitContext.d.ts.map +1 -1
  222. package/lib/esm/curve/Query/CurveSplitContext.js +1 -3
  223. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  224. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +11 -0
  225. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  226. package/lib/esm/curve/Query/PlanarSubdivision.js +26 -17
  227. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  228. package/lib/esm/curve/RegionOps.d.ts +15 -16
  229. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  230. package/lib/esm/curve/RegionOps.js +15 -17
  231. package/lib/esm/curve/RegionOps.js.map +1 -1
  232. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  233. package/lib/esm/curve/RegionOpsClassificationSweeps.js +3 -1
  234. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  235. package/lib/esm/curve/StrokeOptions.d.ts +6 -0
  236. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  237. package/lib/esm/curve/StrokeOptions.js +21 -0
  238. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  239. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  240. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.d.ts +2 -2
  241. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.d.ts.map +1 -1
  242. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  243. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.d.ts +36 -0
  244. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.d.ts.map +1 -0
  245. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +69 -0
  246. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -0
  247. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +48 -24
  248. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  249. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +111 -111
  250. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  251. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +0 -4
  252. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  253. package/lib/esm/curve/spiral/DirectSpiral3d.js +0 -15
  254. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  255. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +0 -4
  256. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  257. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +33 -22
  258. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  259. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +16 -0
  260. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  261. package/lib/esm/curve/spiral/TransitionSpiral3d.js +29 -0
  262. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  263. package/lib/esm/geometry3d/Matrix3d.d.ts +4 -4
  264. package/lib/esm/geometry3d/Matrix3d.js +4 -4
  265. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  266. package/lib/esm/geometry4d/Matrix4d.d.ts.map +1 -1
  267. package/lib/esm/geometry4d/Matrix4d.js +21 -8
  268. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  269. package/lib/esm/numerics/ClusterableArray.d.ts +1 -1
  270. package/lib/esm/numerics/ClusterableArray.d.ts.map +1 -1
  271. package/lib/esm/numerics/ClusterableArray.js +2 -2
  272. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  273. package/lib/esm/polyface/PolyfaceBuilder.d.ts +15 -1
  274. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  275. package/lib/esm/polyface/PolyfaceBuilder.js +17 -11
  276. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  277. package/lib/esm/serialization/IModelJsonSchema.d.ts +4 -0
  278. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  279. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  280. package/lib/esm/solid/RuledSweep.js.map +1 -1
  281. package/lib/esm/solid/SweepContour.js.map +1 -1
  282. package/lib/esm/topology/Merging.d.ts +22 -3
  283. package/lib/esm/topology/Merging.d.ts.map +1 -1
  284. package/lib/esm/topology/Merging.js +95 -0
  285. package/lib/esm/topology/Merging.js.map +1 -1
  286. package/package.json +7 -5
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyCurve.js","sourceRoot":"","sources":["../../../src/curve/ProxyCurve.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,4DAAyD;AAWzD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAsB,UAAW,SAAQ,+BAAc;IAMrD,kDAAkD;IAClD,YAAmB,UAA0B;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IATM,yBAAyB,CAAC,OAAwB;QACvD,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IASD,+CAA+C;IAC/C,IAAW,UAAU,KAAqB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAA,CAAC;IACnE,8BAA8B;IACvB,4BAA4B,CAAC,OAAuB;QAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,8BAA8B;IACvB,kBAAkB,CAAC,IAAoB,EAAE,OAAuB;QACvE,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IACH,8BAA8B;IACvB,WAAW,CAAC,IAAkB,EAAE,OAAuB;QAC5D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACH,8BAA8B;IACvB,WAAW,CAAC,aAAsB,EAAE,SAAqB;QAC9D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAEH,8BAA8B;IACd,KAAK,CAAC,SAAqB,EAAE,MAAgB;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IACH,8BAA8B;IACvB,eAAe,CAAC,QAAgB,EAAE,MAAgB;QACrD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAEH,8BAA8B;IACvB,4BAA4B,CAAC,QAAgB,EAAE,MAAc;QAChE,OAAO,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IAEH,8BAA8B;IACrB,8BAA8B,CAAC,QAAgB,EAAE,MAAkC;QACxF,OAAO,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,8BAA8B;IACzB,SAAS,CAAC,KAAmC;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IACM,WAAW;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;CAEF;AA3DD,gCA2DC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { GeometryHandler, IStrokeHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { LineString3d } from \"./LineString3d\";\r\nimport { StrokeOptions } from \"./StrokeOptions\";\r\n\r\n/**\r\n * A ProxyCurve is expected to be used as a base class for\r\n * curve types that use some existing curve (the proxy) for evaluation and display\r\n * but carry other defining data.\r\n * * The ProxyCurve implements all required CurvePrimitive methods by dispatching\r\n * to the proxy.\r\n * * These methods presumably require support from the application class and are left abstract:\r\n * * clone\r\n * * clonePartialCurve\r\n * * cloneTransformed\r\n * * curvePrimitiveType\r\n * * isSameCurvePrimitiveType\r\n * * isSameGeometryClass\r\n * * tryTransformInPlace\r\n * * reverseInPlace\r\n *\r\n * @public\r\n */\r\nexport abstract class ProxyCurve extends CurvePrimitive{\r\n public dispatchToGeometryHandler(handler: GeometryHandler) {\r\n return this._proxyCurve.dispatchToGeometryHandler(handler);\r\n }\r\n\r\n protected _proxyCurve: CurvePrimitive;\r\n /** Constructor CAPTURES the proxyCurve pointer */\r\n public constructor(proxyCurve: CurvePrimitive) {\r\n super();\r\n this._proxyCurve = proxyCurve;\r\n }\r\n\r\n /** return the (pointer to) the proxy curve. */\r\n public get proxyCurve(): CurvePrimitive { return this._proxyCurve;}\r\n /** Implement by proxyCurve */\r\n public computeStrokeCountForOptions(options?: StrokeOptions): number {\r\n return this._proxyCurve.computeStrokeCountForOptions(options);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void{\r\n this._proxyCurve.emitStrokableParts(dest, options);\r\n }\r\n/** Implement by proxyCurve */\r\npublic emitStrokes(dest: LineString3d, options?: StrokeOptions): void{\r\n this._proxyCurve.emitStrokes(dest, options);\r\n }\r\n/** Implement by proxyCurve */\r\npublic extendRange(rangeToExtend: Range3d, transform?: Transform): void{\r\n this._proxyCurve.extendRange (rangeToExtend, transform);\r\n }\r\n\r\n/** Implement by proxyCurve */\r\npublic override range(transform?: Transform, result?: Range3d): Range3d {\r\n return this._proxyCurve.range(transform, result);\r\n }\r\n/** Implement by proxyCurve */\r\npublic fractionToPoint(fraction: number, result?: Point3d): Point3d{\r\n return this._proxyCurve.fractionToPoint(fraction, result);\r\n }\r\n\r\n/** Implement by proxyCurve */\r\npublic fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d{\r\n return this._proxyCurve.fractionToPointAndDerivative(fraction, result);\r\n }\r\n\r\n/** Implement by proxyCurve */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined{\r\n return this._proxyCurve.fractionToPointAnd2Derivatives(fraction, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\npublic isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean {\r\n return this._proxyCurve.isInPlane(plane);\r\n }\r\n public quickLength(): number {\r\n return this._proxyCurve.quickLength();\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"ProxyCurve.js","sourceRoot":"","sources":["../../../src/curve/ProxyCurve.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,4DAAyD;AAYzD;;;;;;;;;;;;;;;GAeG;AACH,MAAsB,UAAW,SAAQ,+BAAc;IAOrD,kDAAkD;IAClD,YAAmB,UAA0B;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAVM,yBAAyB,CAAC,OAAwB;QACvD,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IAUD,+CAA+C;IAC/C,IAAW,UAAU,KAAqB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAA,CAAC;IAEnE,8BAA8B;IACvB,4BAA4B,CAAC,OAAuB;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,8BAA8B;IACvB,kBAAkB,CAAC,IAAoB,EAAE,OAAuB;QACrE,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAKD,kCAAkC;IAClB,gBAAgB,CAAC,SAAoB;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC;YACxC,OAAO,OAAO,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,+FAA+F;IAC/E,iBAAiB,CAAC,SAAiB,EAAE,SAAiB;QACpE,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAED,8BAA8B;IACvB,WAAW,CAAC,IAAkB,EAAE,OAAuB;QAC5D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,8BAA8B;IACvB,WAAW,CAAC,aAAsB,EAAE,SAAqB;QAC9D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,8BAA8B;IACd,KAAK,CAAC,SAAqB,EAAE,MAAgB;QAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,8BAA8B;IACvB,eAAe,CAAC,QAAgB,EAAE,MAAgB;QACvD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,8BAA8B;IACvB,4BAA4B,CAAC,QAAgB,EAAE,MAAc;QAClE,OAAO,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IAED,8BAA8B;IACvB,8BAA8B,CAAC,QAAgB,EAAE,MAAkC;QACxF,OAAO,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,8BAA8B;IACvB,SAAS,CAAC,KAAmC;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,8BAA8B;IACvB,WAAW;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IAED,8BAA8B;IACd,iBAAiB,CAAC,uBAA+C;QAC/E,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;IACrE,CAAC;CACF;AAtFD,gCAsFC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { GeometryHandler, IStrokeHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport type { OffsetOptions } from \"./internalContexts/PolygonOffsetContext\";\r\nimport type { LineString3d } from \"./LineString3d\";\r\nimport type { StrokeOptions } from \"./StrokeOptions\";\r\n\r\n/**\r\n * A ProxyCurve is expected to be used as a base class for\r\n * curve types that use some existing curve (the proxy) for evaluation and display\r\n * but carry other defining data.\r\n * * The ProxyCurve implements all required CurvePrimitive methods by dispatching\r\n * to the proxy.\r\n * * These methods presumably require support from the application class and are left abstract:\r\n * * clone\r\n * * curvePrimitiveType\r\n * * isSameCurvePrimitiveType\r\n * * isSameGeometryClass\r\n * * tryTransformInPlace\r\n * * reverseInPlace\r\n *\r\n * @public\r\n */\r\nexport abstract class ProxyCurve extends CurvePrimitive{\r\n public dispatchToGeometryHandler(handler: GeometryHandler) {\r\n return this._proxyCurve.dispatchToGeometryHandler(handler);\r\n }\r\n\r\n protected _proxyCurve: CurvePrimitive;\r\n\r\n /** Constructor CAPTURES the proxyCurve pointer */\r\n public constructor(proxyCurve: CurvePrimitive) {\r\n super();\r\n this._proxyCurve = proxyCurve;\r\n }\r\n\r\n /** return the (pointer to) the proxy curve. */\r\n public get proxyCurve(): CurvePrimitive { return this._proxyCurve;}\r\n\r\n /** Implement by proxyCurve */\r\n public computeStrokeCountForOptions(options?: StrokeOptions): number {\r\n return this._proxyCurve.computeStrokeCountForOptions(options);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void{\r\n this._proxyCurve.emitStrokableParts(dest, options);\r\n }\r\n\r\n /** Return a deep clone. This override removes the undefined variant return. */\r\n public abstract override clone(): ProxyCurve;\r\n\r\n /** Return a transformed clone. */\r\n public override cloneTransformed(transform: Transform): ProxyCurve | undefined {\r\n const myClone = this.clone();\r\n if (myClone.tryTransformInPlace(transform))\r\n return myClone;\r\n return undefined;\r\n }\r\n\r\n /** Implement by proxyCurve. Subclasses may eventually override this default implementation. */\r\n public override clonePartialCurve(fractionA: number, fractionB: number): CurvePrimitive | undefined {\r\n return this._proxyCurve.clonePartialCurve(fractionA, fractionB);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public emitStrokes(dest: LineString3d, options?: StrokeOptions): void{\r\n this._proxyCurve.emitStrokes(dest, options);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform): void{\r\n this._proxyCurve.extendRange (rangeToExtend, transform);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public override range(transform?: Transform, result?: Range3d): Range3d {\r\n return this._proxyCurve.range(transform, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public fractionToPoint(fraction: number, result?: Point3d): Point3d{\r\n return this._proxyCurve.fractionToPoint(fraction, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d{\r\n return this._proxyCurve.fractionToPointAndDerivative(fraction, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined{\r\n return this._proxyCurve.fractionToPointAnd2Derivatives(fraction, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean {\r\n return this._proxyCurve.isInPlane(plane);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public quickLength(): number {\r\n return this._proxyCurve.quickLength();\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public override constructOffsetXY(offsetDistanceOrOptions: number | OffsetOptions): CurvePrimitive | CurvePrimitive[] | undefined {\r\n return this._proxyCurve.constructOffsetXY(offsetDistanceOrOptions);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CurveSplitContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/Query/CurveSplitContext.ts"],"names":[],"mappings":"AAUA,OAAO,EAAc,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAiCnD;;;GAGG;AACH,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAS9C,OAAO,CAAC,4BAA4B;IAWpC;;OAEG;IACH,OAAO,CAAC,+BAA+B;WAkBzB,2BAA2B,CAAC,WAAW,EAAE,cAAc,GAAG,eAAe,GAAG,SAAS,EAAE,YAAY,EAAE,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,SAAS;CAoBlL"}
1
+ {"version":3,"file":"CurveSplitContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/Query/CurveSplitContext.ts"],"names":[],"mappings":"AAUA,OAAO,EAAc,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAiCnD;;;GAGG;AACH,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAS9C,OAAO,CAAC,4BAA4B;IAWpC;;OAEG;IACH,OAAO,CAAC,+BAA+B;WAgBzB,2BAA2B,CAAC,WAAW,EAAE,cAAc,GAAG,eAAe,GAAG,SAAS,EAAE,YAAY,EAAE,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,SAAS;CAoBlL"}
@@ -71,9 +71,7 @@ class CurveSplitContext {
71
71
  */
72
72
  collectSinglePrimitiveFragments(curveToCut, intersections, fragments) {
73
73
  if (intersections === undefined || !CurveSplitContext.hasInteriorDetailAIntersections(intersections)) {
74
- const fragment = curveToCut.clone();
75
- if (fragment)
76
- fragments.push(fragment);
74
+ fragments.push(curveToCut.clone());
77
75
  return;
78
76
  }
79
77
  intersections.sort((pairA, pairB) => (pairA.detailA.fraction - pairB.detailA.fraction));
@@ -1 +1 @@
1
- {"version":3,"file":"CurveSplitContext.js","sourceRoot":"","sources":["../../../../src/curve/Query/CurveSplitContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { CurveChain, CurveCollection } from \"../CurveCollection\";\r\nimport { CurveCurve } from \"../CurveCurve\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { Path } from \"../Path\";\r\n\r\n/**\r\n * Data about a curve cut.\r\n */\r\nclass CutFractionDescriptor {\r\n /** Fractional position along the curve */\r\n public fraction: number;\r\n public otherCurveDetail?: CurveLocationDetail;\r\n public constructor(fraction: number, otherCurveDetail?: CurveLocationDetail) {\r\n this.fraction = fraction;\r\n this.otherCurveDetail = otherCurveDetail;\r\n }\r\n /** Transfer data from other to this.\r\n * * Optionally look at both to set `otherCurveDetail`\r\n * * `other.otherCurveDetail` wins over `this.otherCurveDetail`\r\n */\r\n public setFrom(other: CutFractionDescriptor, combineCutFlag: boolean) {\r\n if (combineCutFlag && this.isSameFraction(other))\r\n this.otherCurveDetail = other.otherCurveDetail ? other.otherCurveDetail : this.otherCurveDetail;\r\n this.fraction = other.fraction;\r\n }\r\n /** Test if a the fractions are almost equal. */\r\n public isSameFraction(other: CutFractionDescriptor): boolean {\r\n return Geometry.isSmallAngleRadians(this.fraction - other.fraction);\r\n }\r\n /** set from direct data */\r\n public set(fraction: number, otherCurveDetail?: CurveLocationDetail) {\r\n this.fraction = fraction;\r\n this.otherCurveDetail = otherCurveDetail;\r\n }\r\n}\r\n/**\r\n * Context for splitting curves.\r\n * @internal\r\n */\r\nexport class CurveSplitContext {\r\n // return true if data has one or more non-endpoint intersections.\r\n private static hasInteriorDetailAIntersections(data: CurveLocationDetailPair[], fractionTolerance: number = Geometry.smallAngleRadians): boolean {\r\n if (data.length === 0)\r\n return false;\r\n for (const pair of data) {\r\n if (pair.detailA.fraction > fractionTolerance || pair.detailA.fraction < 1 - fractionTolerance)\r\n return true;\r\n }\r\n return false;\r\n }\r\n private collectFragmentAndAdvanceCut(curveToCut: CurvePrimitive, cutA: CutFractionDescriptor, cutB: CutFractionDescriptor, dest: CurvePrimitive[]) {\r\n if (!cutA.isSameFraction(cutB)) {\r\n const fragment = curveToCut.clonePartialCurve(cutA.fraction, cutB.fraction);\r\n if (fragment !== undefined) {\r\n fragment.startCut = cutA.otherCurveDetail;\r\n fragment.endCut = cutB.otherCurveDetail;\r\n dest.push(fragment);\r\n }\r\n }\r\n cutA.setFrom(cutB, true);\r\n }\r\n /** Collect fragments from an intersections array, with the array detailA entries all referencing to curveToCut.\r\n * * The `intersections` array is sorted on its detailA field.\r\n */\r\n private collectSinglePrimitiveFragments(curveToCut: CurvePrimitive, intersections: CurveLocationDetailPair[] | undefined, fragments: CurvePrimitive[]) {\r\n\r\n if (intersections === undefined || !CurveSplitContext.hasInteriorDetailAIntersections(intersections)) {\r\n const fragment = curveToCut.clone();\r\n if (fragment)\r\n fragments.push(fragment as CurvePrimitive);\r\n return;\r\n }\r\n intersections.sort((pairA: CurveLocationDetailPair, pairB: CurveLocationDetailPair) => (pairA.detailA.fraction - pairB.detailA.fraction));\r\n const cutA = new CutFractionDescriptor(0.0, undefined);\r\n const cutB = new CutFractionDescriptor(1.0, undefined); // but those values are immediately reset before use.\r\n for (const pair of intersections) {\r\n cutB.set(pair.detailA.fraction, pair.detailB);\r\n this.collectFragmentAndAdvanceCut(curveToCut, cutA, cutB, fragments);\r\n }\r\n cutB.set(1.0, undefined);\r\n this.collectFragmentAndAdvanceCut(curveToCut, cutA, cutB, fragments);\r\n }\r\n public static cloneCurvesWithXYSplitFlags(curvesToCut: CurvePrimitive | CurveCollection | undefined, cutterCurves: CurveCollection): CurveCollection | CurvePrimitive | undefined {\r\n const context = new CurveSplitContext();\r\n if (curvesToCut instanceof CurvePrimitive) {\r\n const result: CurvePrimitive[] = [];\r\n const intersections = CurveCurve.intersectionXYPairs(curvesToCut, false, cutterCurves, false);\r\n context.collectSinglePrimitiveFragments(curvesToCut, intersections, result);\r\n if (result.length === 1)\r\n return result[0];\r\n return Path.createArray(result);\r\n\r\n } else if (curvesToCut instanceof CurveChain) {\r\n const result: CurvePrimitive[] = [];\r\n for (const primitive of curvesToCut.children) {\r\n const intersections = CurveCurve.intersectionXYPairs(primitive, false, cutterCurves, false);\r\n context.collectSinglePrimitiveFragments(primitive, intersections, result);\r\n }\r\n return Path.createArray(result);\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"CurveSplitContext.js","sourceRoot":"","sources":["../../../../src/curve/Query/CurveSplitContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { CurveChain, CurveCollection } from \"../CurveCollection\";\r\nimport { CurveCurve } from \"../CurveCurve\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { Path } from \"../Path\";\r\n\r\n/**\r\n * Data about a curve cut.\r\n */\r\nclass CutFractionDescriptor {\r\n /** Fractional position along the curve */\r\n public fraction: number;\r\n public otherCurveDetail?: CurveLocationDetail;\r\n public constructor(fraction: number, otherCurveDetail?: CurveLocationDetail) {\r\n this.fraction = fraction;\r\n this.otherCurveDetail = otherCurveDetail;\r\n }\r\n /** Transfer data from other to this.\r\n * * Optionally look at both to set `otherCurveDetail`\r\n * * `other.otherCurveDetail` wins over `this.otherCurveDetail`\r\n */\r\n public setFrom(other: CutFractionDescriptor, combineCutFlag: boolean) {\r\n if (combineCutFlag && this.isSameFraction(other))\r\n this.otherCurveDetail = other.otherCurveDetail ? other.otherCurveDetail : this.otherCurveDetail;\r\n this.fraction = other.fraction;\r\n }\r\n /** Test if a the fractions are almost equal. */\r\n public isSameFraction(other: CutFractionDescriptor): boolean {\r\n return Geometry.isSmallAngleRadians(this.fraction - other.fraction);\r\n }\r\n /** set from direct data */\r\n public set(fraction: number, otherCurveDetail?: CurveLocationDetail) {\r\n this.fraction = fraction;\r\n this.otherCurveDetail = otherCurveDetail;\r\n }\r\n}\r\n/**\r\n * Context for splitting curves.\r\n * @internal\r\n */\r\nexport class CurveSplitContext {\r\n // return true if data has one or more non-endpoint intersections.\r\n private static hasInteriorDetailAIntersections(data: CurveLocationDetailPair[], fractionTolerance: number = Geometry.smallAngleRadians): boolean {\r\n if (data.length === 0)\r\n return false;\r\n for (const pair of data) {\r\n if (pair.detailA.fraction > fractionTolerance || pair.detailA.fraction < 1 - fractionTolerance)\r\n return true;\r\n }\r\n return false;\r\n }\r\n private collectFragmentAndAdvanceCut(curveToCut: CurvePrimitive, cutA: CutFractionDescriptor, cutB: CutFractionDescriptor, dest: CurvePrimitive[]) {\r\n if (!cutA.isSameFraction(cutB)) {\r\n const fragment = curveToCut.clonePartialCurve(cutA.fraction, cutB.fraction);\r\n if (fragment !== undefined) {\r\n fragment.startCut = cutA.otherCurveDetail;\r\n fragment.endCut = cutB.otherCurveDetail;\r\n dest.push(fragment);\r\n }\r\n }\r\n cutA.setFrom(cutB, true);\r\n }\r\n /** Collect fragments from an intersections array, with the array detailA entries all referencing to curveToCut.\r\n * * The `intersections` array is sorted on its detailA field.\r\n */\r\n private collectSinglePrimitiveFragments(curveToCut: CurvePrimitive, intersections: CurveLocationDetailPair[] | undefined, fragments: CurvePrimitive[]) {\r\n\r\n if (intersections === undefined || !CurveSplitContext.hasInteriorDetailAIntersections(intersections)) {\r\n fragments.push(curveToCut.clone());\r\n return;\r\n }\r\n intersections.sort((pairA: CurveLocationDetailPair, pairB: CurveLocationDetailPair) => (pairA.detailA.fraction - pairB.detailA.fraction));\r\n const cutA = new CutFractionDescriptor(0.0, undefined);\r\n const cutB = new CutFractionDescriptor(1.0, undefined); // but those values are immediately reset before use.\r\n for (const pair of intersections) {\r\n cutB.set(pair.detailA.fraction, pair.detailB);\r\n this.collectFragmentAndAdvanceCut(curveToCut, cutA, cutB, fragments);\r\n }\r\n cutB.set(1.0, undefined);\r\n this.collectFragmentAndAdvanceCut(curveToCut, cutA, cutB, fragments);\r\n }\r\n public static cloneCurvesWithXYSplitFlags(curvesToCut: CurvePrimitive | CurveCollection | undefined, cutterCurves: CurveCollection): CurveCollection | CurvePrimitive | undefined {\r\n const context = new CurveSplitContext();\r\n if (curvesToCut instanceof CurvePrimitive) {\r\n const result: CurvePrimitive[] = [];\r\n const intersections = CurveCurve.intersectionXYPairs(curvesToCut, false, cutterCurves, false);\r\n context.collectSinglePrimitiveFragments(curvesToCut, intersections, result);\r\n if (result.length === 1)\r\n return result[0];\r\n return Path.createArray(result);\r\n\r\n } else if (curvesToCut instanceof CurveChain) {\r\n const result: CurvePrimitive[] = [];\r\n for (const primitive of curvesToCut.children) {\r\n const intersections = CurveCurve.intersectionXYPairs(primitive, false, cutterCurves, false);\r\n context.collectSinglePrimitiveFragments(primitive, intersections, result);\r\n }\r\n return Path.createArray(result);\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
@@ -7,6 +7,17 @@ import { Loop, SignedLoops } from "../Loop";
7
7
  */
8
8
  export declare class PlanarSubdivision {
9
9
  static assembleHalfEdgeGraph(_primitives: CurvePrimitive[], allPairs: CurveLocationDetailPair[]): HalfEdgeGraph;
10
+ /**
11
+ * Create a pair of mated half edges referencing an interval of a primitive
12
+ * * no action if start and end points are identical.
13
+ * @param graph containing graph.
14
+ * @param p the curve
15
+ * @param fraction0 starting fraction
16
+ * @param point0 start point
17
+ * @param fraction1 end fraction
18
+ * @param point1 end point
19
+ */
20
+ private static addHalfEdge;
10
21
  static collectSignedLoop(loop: Loop, signedAreas: SignedLoops, zeroAreaTolerance?: number): number;
11
22
  static createLoopInFace(faceSeed: HalfEdge, announce?: (he: HalfEdge, curve: CurvePrimitive, loop: Loop) => void): Loop;
12
23
  private static isNullFace;
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarSubdivision.d.ts","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAAuB,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAsB,WAAW,EAAE,MAAM,SAAS,CAAC;AAqDhE;;GAEG;AACH,qBAAa,iBAAiB;WACd,qBAAqB,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,uBAAuB,EAAE,GAAG,aAAa;WA4CxG,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,GAAE,MAAgB,GAAG,MAAM;WAepG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAC/C,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IAuB7E,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,eAAe;WAWhB,oCAAoC,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,GAAE,MAAgB,GAAG,WAAW,EAAE;CAmC7H"}
1
+ {"version":3,"file":"PlanarSubdivision.d.ts","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAAuB,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAsB,WAAW,EAAE,MAAM,SAAS,CAAC;AAqDhE;;GAEG;AACH,qBAAa,iBAAiB;WACd,qBAAqB,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,uBAAuB,EAAE,GAAG,aAAa;IA+BxH;;;;;;;;;OASG;IACD,OAAO,CAAC,MAAM,CAAC,WAAW;WAeZ,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,GAAE,MAAgB,GAAG,MAAM;WAepG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAC/C,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IAuB7E,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,eAAe;WAWhB,oCAAoC,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,GAAE,MAAgB,GAAG,WAAW,EAAE;CAmC7H"}
@@ -1,10 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PlanarSubdivision = void 0;
4
- /*---------------------------------------------------------------------------------------------
5
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
- * See LICENSE.md in the project root for license terms and full copyright notice.
7
- *--------------------------------------------------------------------------------------------*/
8
4
  const Graph_1 = require("../../topology/Graph");
9
5
  const HalfEdgeGraphSearch_1 = require("../../topology/HalfEdgeGraphSearch");
10
6
  const Merging_1 = require("../../topology/Merging");
@@ -86,28 +82,41 @@ class PlanarSubdivision {
86
82
  return fractionA - fractionB;
87
83
  });
88
84
  let detail0 = getDetailOnCurve(details[0], p);
85
+ this.addHalfEdge(graph, p, p.startPoint(), 0.0, detail0.point, detail0.fraction);
89
86
  for (let i = 1; i < details.length; i++) {
90
87
  // create (both sides of) a graph edge . . .
91
88
  const detail1 = getDetailOnCurve(details[i], p);
92
- if (detail0.point.isAlmostEqual(detail1.point)) {
93
- }
94
- else {
95
- const halfEdge = graph.createEdgeXYAndZ(detail0.point, 0, detail1.point, 0);
96
- const detail01 = CurveLocationDetail_1.CurveLocationDetail.createCurveEvaluatedFractionFraction(p, detail0.fraction, detail1.fraction);
97
- const mate = halfEdge.edgeMate;
98
- halfEdge.edgeTag = detail01;
99
- halfEdge.sortData = 1.0;
100
- mate.edgeTag = detail01;
101
- mate.sortData = -1.0;
102
- halfEdge.sortAngle = sortAngle(detail01.curve, detail01.fraction, false);
103
- mate.sortAngle = sortAngle(detail01.curve, detail01.fraction1, true);
104
- }
89
+ this.addHalfEdge(graph, p, detail0.point, detail0.fraction, detail1.point, detail1.fraction);
105
90
  detail0 = detail1;
106
91
  }
92
+ this.addHalfEdge(graph, p, detail0.point, detail0.fraction, p.endPoint(), 1.0);
107
93
  }
108
94
  Merging_1.HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he) => he.sortAngle);
109
95
  return graph;
110
96
  }
97
+ /**
98
+ * Create a pair of mated half edges referencing an interval of a primitive
99
+ * * no action if start and end points are identical.
100
+ * @param graph containing graph.
101
+ * @param p the curve
102
+ * @param fraction0 starting fraction
103
+ * @param point0 start point
104
+ * @param fraction1 end fraction
105
+ * @param point1 end point
106
+ */
107
+ static addHalfEdge(graph, p, point0, fraction0, point1, fraction1) {
108
+ if (!point0.isAlmostEqual(point1)) {
109
+ const halfEdge = graph.createEdgeXYAndZ(point0, 0, point1, 0);
110
+ const detail01 = CurveLocationDetail_1.CurveLocationDetail.createCurveEvaluatedFractionFraction(p, fraction0, fraction1);
111
+ const mate = halfEdge.edgeMate;
112
+ halfEdge.edgeTag = detail01;
113
+ halfEdge.sortData = 1.0;
114
+ mate.edgeTag = detail01;
115
+ mate.sortData = -1.0;
116
+ halfEdge.sortAngle = sortAngle(detail01.curve, detail01.fraction, false);
117
+ mate.sortAngle = sortAngle(detail01.curve, detail01.fraction1, true);
118
+ }
119
+ }
111
120
  // based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.
112
121
  // return the area (forced to zero if within tolerance)
113
122
  static collectSignedLoop(loop, signedAreas, zeroAreaTolerance = 1.0e-10) {
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarSubdivision.js","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { HalfEdge, HalfEdgeGraph } from \"../../topology/Graph\";\r\nimport { HalfEdgeGraphSearch } from \"../../topology/HalfEdgeGraphSearch\";\r\nimport { HalfEdgeGraphMerge } from \"../../topology/Merging\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { Loop, LoopCurveLoopCurve, SignedLoops } from \"../Loop\";\r\nimport { RegionOps } from \"../RegionOps\";\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nclass MapCurvePrimitiveToCurveLocatioNDetailPairArray {\r\n public primitiveToPair = new Map<CurvePrimitive, CurveLocationDetailPair[]>();\r\n // index assigned to this primitive for this calculation.\r\n public primitiveToIndex = new Map<CurvePrimitive, number>();\r\n private _numIndexedPrimitives: number = 0;\r\n public assignPrimitiveIndex(primitive: CurvePrimitive | undefined) {\r\n if (primitive !== undefined) {\r\n const index = this.primitiveToIndex.get(primitive);\r\n if (index === undefined) {\r\n this.primitiveToIndex.set(primitive, this._numIndexedPrimitives++);\r\n }\r\n }\r\n }\r\n public insertPrimitiveToPair(primitive: CurvePrimitive | undefined, pair: CurveLocationDetailPair) {\r\n if (primitive) {\r\n const priorPairs = this.primitiveToPair.get(primitive);\r\n this.assignPrimitiveIndex(primitive);\r\n if (!priorPairs) {\r\n this.primitiveToPair.set(primitive, [pair]);\r\n } else {\r\n priorPairs.push(pair);\r\n }\r\n }\r\n }\r\n public insertPair(pair: CurveLocationDetailPair) {\r\n const primitiveA = pair.detailA.curve;\r\n if (primitiveA)\r\n this.insertPrimitiveToPair(primitiveA, pair);\r\n const primitiveB = pair.detailB.curve;\r\n if (primitiveB)\r\n this.insertPrimitiveToPair(primitiveB, pair);\r\n }\r\n}\r\n/*\r\n function getDetailString(detail: CurveLocationDetail | undefined): string {\r\n if (!detail)\r\n return \"{}\";\r\n else return tagString(\"primitive\", this.primitiveToIndex.get(detail.curve!)) + tagString(\"f0\", detail.fraction) + tagString(\"f1\", detail.fraction1);\r\n }\r\n}\r\nfunction tagString(name: string, value: number | undefined): string {\r\n if (value !== undefined)\r\n return \"(\" + name + \" \" + value + \")\";\r\n return \"\";\r\n}\r\n*/\r\n/**\r\n * @internal\r\n */\r\nexport class PlanarSubdivision {\r\n public static assembleHalfEdgeGraph(_primitives: CurvePrimitive[], allPairs: CurveLocationDetailPair[]): HalfEdgeGraph {\r\n const detailByPrimitive = new MapCurvePrimitiveToCurveLocatioNDetailPairArray(); // map from key CurvePrimitive to CurveLocationDetailPair.\r\n for (const p of _primitives)\r\n detailByPrimitive.assignPrimitiveIndex(p);\r\n for (const pair of allPairs) {\r\n detailByPrimitive.insertPair(pair);\r\n }\r\n const graph = new HalfEdgeGraph();\r\n for (const entry of detailByPrimitive.primitiveToPair.entries()) {\r\n const p = entry[0];\r\n const details = entry[1];\r\n details.sort((pairA: CurveLocationDetailPair, pairB: CurveLocationDetailPair) => {\r\n const fractionA = getFractionOnCurve(pairA, p);\r\n const fractionB = getFractionOnCurve(pairB, p);\r\n if (fractionA === undefined || fractionB === undefined)\r\n return -1000.0;\r\n return fractionA - fractionB;\r\n });\r\n let detail0 = getDetailOnCurve(details[0], p)!;\r\n for (let i = 1; i < details.length; i++) {\r\n // create (both sides of) a graph edge . . .\r\n const detail1 = getDetailOnCurve(details[i], p)!;\r\n if (detail0.point.isAlmostEqual(detail1.point)) {\r\n\r\n } else {\r\n const halfEdge = graph.createEdgeXYAndZ(detail0.point, 0, detail1.point, 0);\r\n const detail01 = CurveLocationDetail.createCurveEvaluatedFractionFraction(p, detail0.fraction, detail1.fraction);\r\n const mate = halfEdge.edgeMate;\r\n halfEdge.edgeTag = detail01;\r\n halfEdge.sortData = 1.0;\r\n mate.edgeTag = detail01;\r\n mate.sortData = -1.0;\r\n halfEdge.sortAngle = sortAngle(detail01.curve!, detail01.fraction, false);\r\n mate.sortAngle = sortAngle(detail01.curve!, detail01.fraction1!, true);\r\n }\r\n detail0 = detail1;\r\n }\r\n }\r\n HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he: HalfEdge) => he.sortAngle!);\r\n return graph;\r\n }\r\n\r\n // based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.\r\n // return the area (forced to zero if within tolerance)\r\n public static collectSignedLoop(loop: Loop, signedAreas: SignedLoops, zeroAreaTolerance: number = 1.0e-10): number{\r\n let area = RegionOps.computeXYArea(loop);\r\n if (area === undefined)\r\n area = 0;\r\n if (Math.abs(area) < zeroAreaTolerance)\r\n area = 0.0;\r\n (loop as any).computedAreaInPlanarSubdivision = area;\r\n if (area > 0)\r\n signedAreas.positiveAreaLoops.push(loop);\r\n else if (area < 0)\r\n signedAreas.negativeAreaLoops.push(loop);\r\n else\r\n signedAreas.slivers.push(loop);\r\n return area;\r\n }\r\n public static createLoopInFace(faceSeed: HalfEdge,\r\n announce?: (he: HalfEdge, curve: CurvePrimitive, loop: Loop) => void): Loop {\r\n let he = faceSeed;\r\n const loop = Loop.create();\r\n do {\r\n const detail = he.edgeTag as CurveLocationDetail;\r\n if (detail) {\r\n let curve;\r\n if (he.sortData! > 0)\r\n curve = detail.curve!.clonePartialCurve(detail.fraction, detail.fraction1!);\r\n else\r\n curve = detail.curve!.clonePartialCurve(detail.fraction1!, detail.fraction);\r\n if (curve) {\r\n if (announce !== undefined)\r\n announce(he, curve, loop);\r\n loop.tryAddChild(curve);\r\n }\r\n }\r\n he = he.faceSuccessor;\r\n } while (he !== faceSeed);\r\n return loop;\r\n }\r\n// return true if there are only two edges.\r\n // In a line-only graph, this is a null-area face.\r\n private static isNullFace(he: HalfEdge): boolean {\r\n return he.faceSuccessor.faceSuccessor === he;\r\n }\r\n // Look across edge mates (possibly several) for a nonnull mate face.\r\n private static nonNullEdgeMate(_graph: HalfEdgeGraph, e: HalfEdge): HalfEdge | undefined {\r\n if (this.isNullFace (e))\r\n return undefined;\r\n let e1 = e.edgeMate;\r\n while (this.isNullFace(e1)){\r\n e1 = e1.faceSuccessor.edgeMate;\r\n if (e1 === e)\r\n return undefined;\r\n }\r\n return e1;\r\n }\r\n public static collectSignedLoopSetsInHalfEdgeGraph(graph: HalfEdgeGraph, zeroAreaTolerance: number = 1.0e-10): SignedLoops[] {\r\n const q = HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, undefined);\r\n const result: SignedLoops[] = [];\r\n const edgeMap = new Map<HalfEdge, LoopCurveLoopCurve>();\r\n for (const faceSeeds of q) {\r\n const componentAreas: SignedLoops = { positiveAreaLoops: [], negativeAreaLoops: [], slivers: [] };\r\n const edges: LoopCurveLoopCurve[] = [];\r\n for (const faceSeed of faceSeeds) {\r\n const loop = this.createLoopInFace(faceSeed, (he: HalfEdge, curveC: CurvePrimitive, loopC: Loop) => {\r\n if (this.isNullFace(he)) {\r\n // Ignore all edges of null faces.\r\n } else {\r\n const mate = this.nonNullEdgeMate(graph, he);\r\n if (mate !== undefined){\r\n const e = edgeMap.get(mate);\r\n if (e === undefined) {\r\n // Record this as loopA,edgeA of a shared edge to be completed later from the other side of the edge\r\n const e1 = new LoopCurveLoopCurve(loopC, curveC, undefined, undefined);\r\n edgeMap.set(he, e1);\r\n } else if (e instanceof LoopCurveLoopCurve) {\r\n e.setB(loopC, curveC);\r\n edges.push(e);\r\n edgeMap.delete(mate);\r\n }\r\n }\r\n }\r\n });\r\n this.collectSignedLoop(loop, componentAreas, zeroAreaTolerance);\r\n }\r\n componentAreas.edges = edges;\r\n result.push(componentAreas);\r\n edgeMap.clear();\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nfunction sortAngle(curve: CurvePrimitive, fraction: number, reverse: boolean): number {\r\n const ray = curve.fractionToPointAndDerivative(fraction);\r\n const s = reverse ? -1.0 : 1.0;\r\n return Math.atan2(s * ray.direction.y, s * ray.direction.x);\r\n}\r\n\r\nfunction getFractionOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): number | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA.fraction;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB.fraction;\r\n return undefined;\r\n}\r\nfunction getDetailOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): CurveLocationDetail | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB;\r\n return undefined;\r\n}\r\n"]}
1
+ {"version":3,"file":"PlanarSubdivision.js","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { HalfEdge, HalfEdgeGraph } from \"../../topology/Graph\";\r\nimport { HalfEdgeGraphSearch } from \"../../topology/HalfEdgeGraphSearch\";\r\nimport { HalfEdgeGraphMerge } from \"../../topology/Merging\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { Loop, LoopCurveLoopCurve, SignedLoops } from \"../Loop\";\r\nimport { RegionOps } from \"../RegionOps\";\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nclass MapCurvePrimitiveToCurveLocatioNDetailPairArray {\r\n public primitiveToPair = new Map<CurvePrimitive, CurveLocationDetailPair[]>();\r\n // index assigned to this primitive for this calculation.\r\n public primitiveToIndex = new Map<CurvePrimitive, number>();\r\n private _numIndexedPrimitives: number = 0;\r\n public assignPrimitiveIndex(primitive: CurvePrimitive | undefined) {\r\n if (primitive !== undefined) {\r\n const index = this.primitiveToIndex.get(primitive);\r\n if (index === undefined) {\r\n this.primitiveToIndex.set(primitive, this._numIndexedPrimitives++);\r\n }\r\n }\r\n }\r\n public insertPrimitiveToPair(primitive: CurvePrimitive | undefined, pair: CurveLocationDetailPair) {\r\n if (primitive) {\r\n const priorPairs = this.primitiveToPair.get(primitive);\r\n this.assignPrimitiveIndex(primitive);\r\n if (!priorPairs) {\r\n this.primitiveToPair.set(primitive, [pair]);\r\n } else {\r\n priorPairs.push(pair);\r\n }\r\n }\r\n }\r\n public insertPair(pair: CurveLocationDetailPair) {\r\n const primitiveA = pair.detailA.curve;\r\n if (primitiveA)\r\n this.insertPrimitiveToPair(primitiveA, pair);\r\n const primitiveB = pair.detailB.curve;\r\n if (primitiveB)\r\n this.insertPrimitiveToPair(primitiveB, pair);\r\n }\r\n}\r\n/*\r\n function getDetailString(detail: CurveLocationDetail | undefined): string {\r\n if (!detail)\r\n return \"{}\";\r\n else return tagString(\"primitive\", this.primitiveToIndex.get(detail.curve!)) + tagString(\"f0\", detail.fraction) + tagString(\"f1\", detail.fraction1);\r\n }\r\n}\r\nfunction tagString(name: string, value: number | undefined): string {\r\n if (value !== undefined)\r\n return \"(\" + name + \" \" + value + \")\";\r\n return \"\";\r\n}\r\n*/\r\n/**\r\n * @internal\r\n */\r\nexport class PlanarSubdivision {\r\n public static assembleHalfEdgeGraph(_primitives: CurvePrimitive[], allPairs: CurveLocationDetailPair[]): HalfEdgeGraph {\r\n const detailByPrimitive = new MapCurvePrimitiveToCurveLocatioNDetailPairArray(); // map from key CurvePrimitive to CurveLocationDetailPair.\r\n for (const p of _primitives)\r\n detailByPrimitive.assignPrimitiveIndex(p);\r\n for (const pair of allPairs) {\r\n detailByPrimitive.insertPair(pair);\r\n }\r\n const graph = new HalfEdgeGraph();\r\n for (const entry of detailByPrimitive.primitiveToPair.entries()) {\r\n const p = entry[0];\r\n const details = entry[1];\r\n details.sort((pairA: CurveLocationDetailPair, pairB: CurveLocationDetailPair) => {\r\n const fractionA = getFractionOnCurve(pairA, p);\r\n const fractionB = getFractionOnCurve(pairB, p);\r\n if (fractionA === undefined || fractionB === undefined)\r\n return -1000.0;\r\n return fractionA - fractionB;\r\n });\r\n let detail0 = getDetailOnCurve(details[0], p)!;\r\n this.addHalfEdge(graph, p, p.startPoint (), 0.0, detail0.point, detail0.fraction);\r\n for (let i = 1; i < details.length; i++) {\r\n // create (both sides of) a graph edge . . .\r\n const detail1 = getDetailOnCurve(details[i], p)!;\r\n this.addHalfEdge(graph, p, detail0.point, detail0.fraction, detail1.point, detail1.fraction);\r\n detail0 = detail1;\r\n }\r\n this.addHalfEdge(graph, p, detail0.point, detail0.fraction, p.endPoint(), 1.0);\r\n }\r\n HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he: HalfEdge) => he.sortAngle!);\r\n return graph;\r\n }\r\n/**\r\n * Create a pair of mated half edges referencing an interval of a primitive\r\n * * no action if start and end points are identical.\r\n * @param graph containing graph.\r\n * @param p the curve\r\n * @param fraction0 starting fraction\r\n * @param point0 start point\r\n * @param fraction1 end fraction\r\n * @param point1 end point\r\n */\r\n private static addHalfEdge(graph: HalfEdgeGraph, p: CurvePrimitive, point0: Point3d, fraction0: number, point1: Point3d, fraction1: number) {\r\n if (!point0.isAlmostEqual (point1)){\r\n const halfEdge = graph.createEdgeXYAndZ(point0, 0, point1, 0);\r\n const detail01 = CurveLocationDetail.createCurveEvaluatedFractionFraction(p, fraction0, fraction1);\r\n const mate = halfEdge.edgeMate;\r\n halfEdge.edgeTag = detail01;\r\n halfEdge.sortData = 1.0;\r\n mate.edgeTag = detail01;\r\n mate.sortData = -1.0;\r\n halfEdge.sortAngle = sortAngle(detail01.curve!, detail01.fraction, false);\r\n mate.sortAngle = sortAngle(detail01.curve!, detail01.fraction1!, true);\r\n }\r\n }\r\n// based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.\r\n // return the area (forced to zero if within tolerance)\r\n public static collectSignedLoop(loop: Loop, signedAreas: SignedLoops, zeroAreaTolerance: number = 1.0e-10): number{\r\n let area = RegionOps.computeXYArea(loop);\r\n if (area === undefined)\r\n area = 0;\r\n if (Math.abs(area) < zeroAreaTolerance)\r\n area = 0.0;\r\n (loop as any).computedAreaInPlanarSubdivision = area;\r\n if (area > 0)\r\n signedAreas.positiveAreaLoops.push(loop);\r\n else if (area < 0)\r\n signedAreas.negativeAreaLoops.push(loop);\r\n else\r\n signedAreas.slivers.push(loop);\r\n return area;\r\n }\r\n public static createLoopInFace(faceSeed: HalfEdge,\r\n announce?: (he: HalfEdge, curve: CurvePrimitive, loop: Loop) => void): Loop {\r\n let he = faceSeed;\r\n const loop = Loop.create();\r\n do {\r\n const detail = he.edgeTag as CurveLocationDetail;\r\n if (detail) {\r\n let curve;\r\n if (he.sortData! > 0)\r\n curve = detail.curve!.clonePartialCurve(detail.fraction, detail.fraction1!);\r\n else\r\n curve = detail.curve!.clonePartialCurve(detail.fraction1!, detail.fraction);\r\n if (curve) {\r\n if (announce !== undefined)\r\n announce(he, curve, loop);\r\n loop.tryAddChild(curve);\r\n }\r\n }\r\n he = he.faceSuccessor;\r\n } while (he !== faceSeed);\r\n return loop;\r\n }\r\n// return true if there are only two edges.\r\n // In a line-only graph, this is a null-area face.\r\n private static isNullFace(he: HalfEdge): boolean {\r\n return he.faceSuccessor.faceSuccessor === he;\r\n }\r\n // Look across edge mates (possibly several) for a nonnull mate face.\r\n private static nonNullEdgeMate(_graph: HalfEdgeGraph, e: HalfEdge): HalfEdge | undefined {\r\n if (this.isNullFace (e))\r\n return undefined;\r\n let e1 = e.edgeMate;\r\n while (this.isNullFace(e1)){\r\n e1 = e1.faceSuccessor.edgeMate;\r\n if (e1 === e)\r\n return undefined;\r\n }\r\n return e1;\r\n }\r\n public static collectSignedLoopSetsInHalfEdgeGraph(graph: HalfEdgeGraph, zeroAreaTolerance: number = 1.0e-10): SignedLoops[] {\r\n const q = HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, undefined);\r\n const result: SignedLoops[] = [];\r\n const edgeMap = new Map<HalfEdge, LoopCurveLoopCurve>();\r\n for (const faceSeeds of q) {\r\n const componentAreas: SignedLoops = { positiveAreaLoops: [], negativeAreaLoops: [], slivers: [] };\r\n const edges: LoopCurveLoopCurve[] = [];\r\n for (const faceSeed of faceSeeds) {\r\n const loop = this.createLoopInFace(faceSeed, (he: HalfEdge, curveC: CurvePrimitive, loopC: Loop) => {\r\n if (this.isNullFace(he)) {\r\n // Ignore all edges of null faces.\r\n } else {\r\n const mate = this.nonNullEdgeMate(graph, he);\r\n if (mate !== undefined){\r\n const e = edgeMap.get(mate);\r\n if (e === undefined) {\r\n // Record this as loopA,edgeA of a shared edge to be completed later from the other side of the edge\r\n const e1 = new LoopCurveLoopCurve(loopC, curveC, undefined, undefined);\r\n edgeMap.set(he, e1);\r\n } else if (e instanceof LoopCurveLoopCurve) {\r\n e.setB(loopC, curveC);\r\n edges.push(e);\r\n edgeMap.delete(mate);\r\n }\r\n }\r\n }\r\n });\r\n this.collectSignedLoop(loop, componentAreas, zeroAreaTolerance);\r\n }\r\n componentAreas.edges = edges;\r\n result.push(componentAreas);\r\n edgeMap.clear();\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nfunction sortAngle(curve: CurvePrimitive, fraction: number, reverse: boolean): number {\r\n const ray = curve.fractionToPointAndDerivative(fraction);\r\n const s = reverse ? -1.0 : 1.0;\r\n return Math.atan2(s * ray.direction.y, s * ray.direction.x);\r\n}\r\n\r\nfunction getFractionOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): number | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA.fraction;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB.fraction;\r\n return undefined;\r\n}\r\nfunction getDetailOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): CurveLocationDetail | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB;\r\n return undefined;\r\n}\r\n"]}
@@ -9,7 +9,7 @@ import { MultiLineStringDataVariant } from "../topology/Triangulation";
9
9
  import { AnyCurve, AnyRegion } from "./CurveChain";
10
10
  import { BagOfCurves, ConsolidateAdjacentCurvePrimitivesOptions, CurveCollection } from "./CurveCollection";
11
11
  import { CurvePrimitive } from "./CurvePrimitive";
12
- import { JointOptions } from "./internalContexts/PolygonOffsetContext";
12
+ import { JointOptions, OffsetOptions } from "./internalContexts/PolygonOffsetContext";
13
13
  import { Loop, SignedLoops } from "./Loop";
14
14
  import { Path } from "./Path";
15
15
  import { GeometryQuery } from "./GeometryQuery";
@@ -154,21 +154,20 @@ export declare class RegionOps {
154
154
  */
155
155
  static constructPolygonWireXYOffset(points: Point3d[], wrap: boolean, offsetDistance: number): CurveCollection | undefined;
156
156
  /**
157
- * Construct curves that are offset from a Path or Loop
158
- * * The construction will remove "some" local effects of features smaller than the offset distance, but will not detect self intersection among widely separated edges.
159
- * * Offset distance is defined as positive to the left.
160
- * * If offsetDistanceOrOptions is given as a number, default options are applied.
161
- * * When the offset needs to do an "outside" turn, the first applicable construction is applied:
162
- * * If the turn is larger than `options.minArcDegrees`, a circular arc is constructed.
163
- * * if the turn is larger than `options.maxChamferDegrees`, the turn is constructed as a sequence of straight lines that are
164
- * * outside the arc
165
- * * have uniform turn angle less than `options.maxChamferDegrees`
166
- * * each line segment (except first and last) touches the arc at its midpoint.
167
- * * Otherwise the prior and successor curves are extended to simple intersection.
168
- * @param curves input curves
169
- * @param offsetDistanceOrOptions offset controls.
170
- */
171
- static constructCurveXYOffset(curves: Path | Loop, offsetDistanceOrOptions: number | JointOptions): CurveCollection | undefined;
157
+ * Construct curves that are offset from a Path or Loop as viewed in xy-plane (ignoring z).
158
+ * * The construction will remove "some" local effects of features smaller than the offset distance, but will not detect self intersection among widely separated edges.
159
+ * * If offsetDistance is given as a number, default OffsetOptions are applied.
160
+ * * When the offset needs to do an "outside" turn, the first applicable construction is applied:
161
+ * * If the turn is larger than `options.minArcDegrees`, a circular arc is constructed.
162
+ * * If the turn is less than or equal to `options.maxChamferTurnDegrees`, extend curves along tangent to single intersection point.
163
+ * * If the turn is larger than `options.maxChamferDegrees`, the turn is constructed as a sequence of straight lines that are:
164
+ * * outside the arc
165
+ * * have uniform turn angle less than `options.maxChamferDegrees`
166
+ * * each line segment (except first and last) touches the arc at its midpoint.
167
+ * @param curves base curves.
168
+ * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or options object.
169
+ */
170
+ static constructCurveXYOffset(curves: Path | Loop, offsetDistanceOrOptions: number | JointOptions | OffsetOptions): CurveCollection | undefined;
172
171
  /**
173
172
  * Test if point (x,y) is IN, OUT or ON a polygon.
174
173
  * @return (1) for in, (-1) for OUT, (0) for ON
@@ -1 +1 @@
1
- {"version":3,"file":"RegionOps.d.ts","sourceRoot":"","sources":["../../../src/curve/RegionOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RegionOps.d.ts","sourceRoot":"","sources":["../../../src/curve/RegionOps.ts"],"names":[],"mappings":"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"}
@@ -297,23 +297,21 @@ class RegionOps {
297
297
  return context.constructPolygonWireXYOffset(points, wrap, offsetDistance);
298
298
  }
299
299
  /**
300
- * Construct curves that are offset from a Path or Loop
301
- * * The construction will remove "some" local effects of features smaller than the offset distance, but will not detect self intersection among widely separated edges.
302
- * * Offset distance is defined as positive to the left.
303
- * * If offsetDistanceOrOptions is given as a number, default options are applied.
304
- * * When the offset needs to do an "outside" turn, the first applicable construction is applied:
305
- * * If the turn is larger than `options.minArcDegrees`, a circular arc is constructed.
306
- * * if the turn is larger than `options.maxChamferDegrees`, the turn is constructed as a sequence of straight lines that are
307
- * * outside the arc
308
- * * have uniform turn angle less than `options.maxChamferDegrees`
309
- * * each line segment (except first and last) touches the arc at its midpoint.
310
- * * Otherwise the prior and successor curves are extended to simple intersection.
311
- * @param curves input curves
312
- * @param offsetDistanceOrOptions offset controls.
313
- */
300
+ * Construct curves that are offset from a Path or Loop as viewed in xy-plane (ignoring z).
301
+ * * The construction will remove "some" local effects of features smaller than the offset distance, but will not detect self intersection among widely separated edges.
302
+ * * If offsetDistance is given as a number, default OffsetOptions are applied.
303
+ * * When the offset needs to do an "outside" turn, the first applicable construction is applied:
304
+ * * If the turn is larger than `options.minArcDegrees`, a circular arc is constructed.
305
+ * * If the turn is less than or equal to `options.maxChamferTurnDegrees`, extend curves along tangent to single intersection point.
306
+ * * If the turn is larger than `options.maxChamferDegrees`, the turn is constructed as a sequence of straight lines that are:
307
+ * * outside the arc
308
+ * * have uniform turn angle less than `options.maxChamferDegrees`
309
+ * * each line segment (except first and last) touches the arc at its midpoint.
310
+ * @param curves base curves.
311
+ * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or options object.
312
+ */
314
313
  static constructCurveXYOffset(curves, offsetDistanceOrOptions) {
315
- const options = PolygonOffsetContext_1.JointOptions.create(offsetDistanceOrOptions);
316
- return PolygonOffsetContext_1.CurveChainWireOffsetContext.constructCurveXYOffset(curves, options);
314
+ return PolygonOffsetContext_1.CurveChainWireOffsetContext.constructCurveXYOffset(curves, offsetDistanceOrOptions);
317
315
  }
318
316
  /**
319
317
  * Test if point (x,y) is IN, OUT or ON a polygon.