@itwin/core-geometry 4.2.0-dev.3 → 4.2.0-dev.30

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 (336) hide show
  1. package/CHANGELOG.md +59 -1
  2. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts +4 -3
  3. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  4. package/lib/cjs/clipping/AlternatingConvexClipTree.js +1 -1
  5. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  6. package/lib/cjs/clipping/BooleanClipNode.d.ts +4 -3
  7. package/lib/cjs/clipping/BooleanClipNode.d.ts.map +1 -1
  8. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  9. package/lib/cjs/clipping/ClipPlane.d.ts +12 -8
  10. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  11. package/lib/cjs/clipping/ClipPlane.js +5 -3
  12. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  13. package/lib/cjs/clipping/ClipUtils.d.ts +20 -8
  14. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  15. package/lib/cjs/clipping/ClipUtils.js +77 -2
  16. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  17. package/lib/cjs/clipping/ClipVector.d.ts +6 -5
  18. package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
  19. package/lib/cjs/clipping/ClipVector.js +1 -1
  20. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  21. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +6 -4
  22. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  23. package/lib/cjs/clipping/ConvexClipPlaneSet.js +3 -2
  24. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  25. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +4 -3
  26. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  27. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -2
  28. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  29. package/lib/cjs/core-geometry.d.ts +1 -3
  30. package/lib/cjs/core-geometry.d.ts.map +1 -1
  31. package/lib/cjs/core-geometry.js +1 -3
  32. package/lib/cjs/core-geometry.js.map +1 -1
  33. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  34. package/lib/cjs/curve/Arc3d.js +4 -4
  35. package/lib/cjs/curve/Arc3d.js.map +1 -1
  36. package/lib/cjs/curve/CoordinateXYZ.d.ts +15 -15
  37. package/lib/cjs/curve/CoordinateXYZ.d.ts.map +1 -1
  38. package/lib/cjs/curve/CoordinateXYZ.js +15 -15
  39. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  40. package/lib/cjs/curve/CurveCollection.d.ts +4 -17
  41. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  42. package/lib/cjs/curve/CurveCollection.js +3 -22
  43. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  44. package/lib/cjs/curve/CurveCurve.d.ts +41 -26
  45. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  46. package/lib/cjs/curve/CurveCurve.js +73 -40
  47. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  48. package/lib/cjs/curve/CurveFactory.d.ts +1 -1
  49. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  50. package/lib/cjs/curve/CurveLocationDetail.d.ts +12 -1
  51. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  52. package/lib/cjs/curve/CurveLocationDetail.js +13 -2
  53. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  54. package/lib/cjs/curve/CurveOps.d.ts +1 -1
  55. package/lib/cjs/curve/CurveOps.js.map +1 -1
  56. package/lib/cjs/curve/CurveProcessor.d.ts +1 -1
  57. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  58. package/lib/cjs/curve/CurveTypes.d.ts +19 -0
  59. package/lib/cjs/curve/CurveTypes.d.ts.map +1 -0
  60. package/lib/cjs/curve/{CurveChain.js → CurveTypes.js} +1 -1
  61. package/lib/cjs/curve/CurveTypes.js.map +1 -0
  62. package/lib/cjs/curve/CurveWireMomentsXYZ.d.ts +1 -1
  63. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  64. package/lib/cjs/curve/ParityRegion.d.ts +1 -1
  65. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  66. package/lib/cjs/curve/Path.d.ts +1 -1
  67. package/lib/cjs/curve/Path.d.ts.map +1 -1
  68. package/lib/cjs/curve/Path.js +1 -1
  69. package/lib/cjs/curve/Path.js.map +1 -1
  70. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts +3 -2
  71. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  72. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +2 -2
  73. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  74. package/lib/cjs/curve/Query/CurveSplitContext.d.ts +1 -1
  75. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  76. package/lib/cjs/curve/Query/CylindricalRange.d.ts +1 -1
  77. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  78. package/lib/cjs/curve/Query/InOutTests.d.ts +1 -1
  79. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  80. package/lib/cjs/curve/Query/StrokeCountChain.d.ts +1 -1
  81. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  82. package/lib/cjs/curve/RegionOps.d.ts +16 -2
  83. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  84. package/lib/cjs/curve/RegionOps.js +18 -1
  85. package/lib/cjs/curve/RegionOps.js.map +1 -1
  86. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +1 -1
  87. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  88. package/lib/cjs/curve/UnionRegion.d.ts +1 -1
  89. package/lib/cjs/curve/UnionRegion.js +1 -1
  90. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  91. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +225 -0
  92. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -0
  93. package/lib/cjs/curve/{CurveCurveCloseApproachXY.js → internalContexts/CurveCurveCloseApproachXY.js} +249 -189
  94. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -0
  95. package/lib/{esm/curve → cjs/curve/internalContexts}/CurveCurveIntersectXY.d.ts +14 -27
  96. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -0
  97. package/lib/cjs/curve/{CurveCurveIntersectXY.js → internalContexts/CurveCurveIntersectXY.js} +31 -42
  98. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -0
  99. package/lib/cjs/curve/{CurveCurveIntersectXYZ.d.ts → internalContexts/CurveCurveIntersectXYZ.d.ts} +11 -12
  100. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -0
  101. package/lib/cjs/curve/{CurveCurveIntersectXYZ.js → internalContexts/CurveCurveIntersectXYZ.js} +12 -14
  102. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -0
  103. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +1 -1
  104. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  105. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts +1 -0
  106. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  107. package/lib/cjs/geometry3d/BarycentricTriangle.js +1 -0
  108. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  109. package/lib/cjs/geometry3d/FrameBuilder.d.ts +57 -36
  110. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  111. package/lib/cjs/geometry3d/FrameBuilder.js +99 -74
  112. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  113. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +0 -8
  114. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  115. package/lib/cjs/geometry3d/GrowableXYZArray.js +0 -16
  116. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  117. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +4 -4
  118. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  119. package/lib/cjs/geometry3d/IndexedXYZCollection.js +12 -0
  120. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  121. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  122. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  123. package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  124. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  125. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +0 -1
  126. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  127. package/lib/cjs/geometry3d/Point3dVector3d.js +0 -1
  128. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  129. package/lib/cjs/geometry3d/PolygonOps.d.ts +1 -1
  130. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  131. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  132. package/lib/cjs/geometry3d/Ray3d.d.ts +3 -1
  133. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  134. package/lib/cjs/geometry3d/Ray3d.js +4 -3
  135. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  136. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts +2 -1
  137. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  138. package/lib/cjs/geometry3d/ReusableObjectCache.js +1 -1
  139. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  140. package/lib/cjs/geometry3d/SortablePolygon.d.ts +1 -1
  141. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  142. package/lib/cjs/geometry3d/YawPitchRollAngles.js +1 -1
  143. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  144. package/lib/cjs/numerics/Polynomials.d.ts +2 -2
  145. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  146. package/lib/cjs/numerics/Polynomials.js +2 -2
  147. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  148. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -1
  149. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  150. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  151. package/lib/cjs/solid/LinearSweep.d.ts +1 -1
  152. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  153. package/lib/cjs/solid/RotationalSweep.d.ts +1 -1
  154. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  155. package/lib/cjs/solid/RuledSweep.d.ts +1 -1
  156. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  157. package/lib/cjs/solid/SweepContour.d.ts +1 -1
  158. package/lib/cjs/solid/SweepContour.js.map +1 -1
  159. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts +4 -3
  160. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  161. package/lib/esm/clipping/AlternatingConvexClipTree.js +1 -1
  162. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  163. package/lib/esm/clipping/BooleanClipNode.d.ts +4 -3
  164. package/lib/esm/clipping/BooleanClipNode.d.ts.map +1 -1
  165. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  166. package/lib/esm/clipping/ClipPlane.d.ts +12 -8
  167. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  168. package/lib/esm/clipping/ClipPlane.js +5 -3
  169. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  170. package/lib/esm/clipping/ClipUtils.d.ts +20 -8
  171. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  172. package/lib/esm/clipping/ClipUtils.js +77 -2
  173. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  174. package/lib/esm/clipping/ClipVector.d.ts +6 -5
  175. package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
  176. package/lib/esm/clipping/ClipVector.js +1 -1
  177. package/lib/esm/clipping/ClipVector.js.map +1 -1
  178. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +6 -4
  179. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  180. package/lib/esm/clipping/ConvexClipPlaneSet.js +3 -2
  181. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  182. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +4 -3
  183. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  184. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -2
  185. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  186. package/lib/esm/core-geometry.d.ts +1 -3
  187. package/lib/esm/core-geometry.d.ts.map +1 -1
  188. package/lib/esm/core-geometry.js +1 -3
  189. package/lib/esm/core-geometry.js.map +1 -1
  190. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  191. package/lib/esm/curve/Arc3d.js +4 -4
  192. package/lib/esm/curve/Arc3d.js.map +1 -1
  193. package/lib/esm/curve/CoordinateXYZ.d.ts +15 -15
  194. package/lib/esm/curve/CoordinateXYZ.d.ts.map +1 -1
  195. package/lib/esm/curve/CoordinateXYZ.js +15 -15
  196. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  197. package/lib/esm/curve/CurveCollection.d.ts +4 -17
  198. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  199. package/lib/esm/curve/CurveCollection.js +2 -20
  200. package/lib/esm/curve/CurveCollection.js.map +1 -1
  201. package/lib/esm/curve/CurveCurve.d.ts +41 -26
  202. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  203. package/lib/esm/curve/CurveCurve.js +73 -40
  204. package/lib/esm/curve/CurveCurve.js.map +1 -1
  205. package/lib/esm/curve/CurveFactory.d.ts +1 -1
  206. package/lib/esm/curve/CurveFactory.js.map +1 -1
  207. package/lib/esm/curve/CurveLocationDetail.d.ts +12 -1
  208. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  209. package/lib/esm/curve/CurveLocationDetail.js +11 -1
  210. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  211. package/lib/esm/curve/CurveOps.d.ts +1 -1
  212. package/lib/esm/curve/CurveOps.js.map +1 -1
  213. package/lib/esm/curve/CurveProcessor.d.ts +1 -1
  214. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  215. package/lib/esm/curve/CurveTypes.d.ts +19 -0
  216. package/lib/esm/curve/CurveTypes.d.ts.map +1 -0
  217. package/lib/esm/curve/{CurveChain.js → CurveTypes.js} +1 -1
  218. package/lib/esm/curve/CurveTypes.js.map +1 -0
  219. package/lib/esm/curve/CurveWireMomentsXYZ.d.ts +1 -1
  220. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  221. package/lib/esm/curve/ParityRegion.d.ts +1 -1
  222. package/lib/esm/curve/ParityRegion.js.map +1 -1
  223. package/lib/esm/curve/Path.d.ts +1 -1
  224. package/lib/esm/curve/Path.d.ts.map +1 -1
  225. package/lib/esm/curve/Path.js +1 -1
  226. package/lib/esm/curve/Path.js.map +1 -1
  227. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts +3 -2
  228. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  229. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -1
  230. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  231. package/lib/esm/curve/Query/CurveSplitContext.d.ts +1 -1
  232. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  233. package/lib/esm/curve/Query/CylindricalRange.d.ts +1 -1
  234. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  235. package/lib/esm/curve/Query/InOutTests.d.ts +1 -1
  236. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  237. package/lib/esm/curve/Query/StrokeCountChain.d.ts +1 -1
  238. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  239. package/lib/esm/curve/RegionOps.d.ts +16 -2
  240. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  241. package/lib/esm/curve/RegionOps.js +16 -0
  242. package/lib/esm/curve/RegionOps.js.map +1 -1
  243. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +1 -1
  244. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  245. package/lib/esm/curve/UnionRegion.d.ts +1 -1
  246. package/lib/esm/curve/UnionRegion.js +1 -1
  247. package/lib/esm/curve/UnionRegion.js.map +1 -1
  248. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +225 -0
  249. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -0
  250. package/lib/esm/curve/{CurveCurveCloseApproachXY.js → internalContexts/CurveCurveCloseApproachXY.js} +249 -189
  251. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -0
  252. package/lib/{cjs/curve → esm/curve/internalContexts}/CurveCurveIntersectXY.d.ts +14 -27
  253. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -0
  254. package/lib/esm/curve/{CurveCurveIntersectXY.js → internalContexts/CurveCurveIntersectXY.js} +30 -40
  255. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -0
  256. package/lib/esm/curve/{CurveCurveIntersectXYZ.d.ts → internalContexts/CurveCurveIntersectXYZ.d.ts} +11 -12
  257. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -0
  258. package/lib/esm/curve/{CurveCurveIntersectXYZ.js → internalContexts/CurveCurveIntersectXYZ.js} +11 -13
  259. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -0
  260. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +1 -1
  261. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  262. package/lib/esm/geometry3d/BarycentricTriangle.d.ts +1 -0
  263. package/lib/esm/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  264. package/lib/esm/geometry3d/BarycentricTriangle.js +1 -0
  265. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  266. package/lib/esm/geometry3d/FrameBuilder.d.ts +57 -36
  267. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  268. package/lib/esm/geometry3d/FrameBuilder.js +99 -74
  269. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  270. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +0 -8
  271. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  272. package/lib/esm/geometry3d/GrowableXYZArray.js +0 -16
  273. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  274. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +4 -4
  275. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  276. package/lib/esm/geometry3d/IndexedXYZCollection.js +12 -0
  277. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  278. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  279. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  280. package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  281. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  282. package/lib/esm/geometry3d/Point3dVector3d.d.ts +0 -1
  283. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  284. package/lib/esm/geometry3d/Point3dVector3d.js +0 -1
  285. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  286. package/lib/esm/geometry3d/PolygonOps.d.ts +1 -1
  287. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  288. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  289. package/lib/esm/geometry3d/Ray3d.d.ts +3 -1
  290. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  291. package/lib/esm/geometry3d/Ray3d.js +4 -3
  292. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  293. package/lib/esm/geometry3d/ReusableObjectCache.d.ts +2 -1
  294. package/lib/esm/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  295. package/lib/esm/geometry3d/ReusableObjectCache.js +1 -1
  296. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  297. package/lib/esm/geometry3d/SortablePolygon.d.ts +1 -1
  298. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  299. package/lib/esm/geometry3d/YawPitchRollAngles.js +1 -1
  300. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  301. package/lib/esm/numerics/Polynomials.d.ts +2 -2
  302. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  303. package/lib/esm/numerics/Polynomials.js +2 -2
  304. package/lib/esm/numerics/Polynomials.js.map +1 -1
  305. package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -1
  306. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  307. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  308. package/lib/esm/solid/LinearSweep.d.ts +1 -1
  309. package/lib/esm/solid/LinearSweep.js.map +1 -1
  310. package/lib/esm/solid/RotationalSweep.d.ts +1 -1
  311. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  312. package/lib/esm/solid/RuledSweep.d.ts +1 -1
  313. package/lib/esm/solid/RuledSweep.js.map +1 -1
  314. package/lib/esm/solid/SweepContour.d.ts +1 -1
  315. package/lib/esm/solid/SweepContour.js.map +1 -1
  316. package/package.json +3 -3
  317. package/lib/cjs/curve/CurveChain.d.ts +0 -17
  318. package/lib/cjs/curve/CurveChain.d.ts.map +0 -1
  319. package/lib/cjs/curve/CurveChain.js.map +0 -1
  320. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts +0 -164
  321. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts.map +0 -1
  322. package/lib/cjs/curve/CurveCurveCloseApproachXY.js.map +0 -1
  323. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +0 -1
  324. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +0 -1
  325. package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts.map +0 -1
  326. package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +0 -1
  327. package/lib/esm/curve/CurveChain.d.ts +0 -17
  328. package/lib/esm/curve/CurveChain.d.ts.map +0 -1
  329. package/lib/esm/curve/CurveChain.js.map +0 -1
  330. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts +0 -164
  331. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts.map +0 -1
  332. package/lib/esm/curve/CurveCurveCloseApproachXY.js.map +0 -1
  333. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +0 -1
  334. package/lib/esm/curve/CurveCurveIntersectXY.js.map +0 -1
  335. package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts.map +0 -1
  336. package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +0 -1
@@ -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 { AnyCurve } from \"../CurveChain\";\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 * * Sets startCut and endCut details on CurvePrimitive fragments.\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 cloneCurvesWithXYSplits(curvesToCut: AnyCurve | undefined, cutterCurves: CurveCollection): AnyCurve | 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 } 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 { AnyCurve } from \"../CurveTypes\";\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 * * Sets startCut and endCut details on CurvePrimitive fragments.\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 cloneCurvesWithXYSplits(curvesToCut: AnyCurve | undefined, cutterCurves: CurveCollection): AnyCurve | 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 } 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"]}
@@ -5,7 +5,7 @@ import { RecurseToCurvesGeometryHandler } from "../../geometry3d/GeometryHandler
5
5
  import { Vector3d } from "../../geometry3d/Point3dVector3d";
6
6
  import { Ray3d } from "../../geometry3d/Ray3d";
7
7
  import { Arc3d } from "../Arc3d";
8
- import { AnyCurve } from "../CurveChain";
8
+ import { AnyCurve } from "../CurveTypes";
9
9
  import { GeometryQuery } from "../GeometryQuery";
10
10
  import { LineSegment3d } from "../LineSegment3d";
11
11
  import { LineString3d } from "../LineString3d";
@@ -1 +1 @@
1
- {"version":3,"file":"CylindricalRange.js","sourceRoot":"","sources":["../../../../src/curve/Query/CylindricalRange.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 { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { Transform } from \"../../geometry3d/Transform\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { AnyCurve } from \"../CurveChain\";\r\nimport { GeometryQuery } from \"../GeometryQuery\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\n\r\n/**\r\n * Context for computing geometry range around an axis.\r\n * * The publicly called method is `computeZRRange (ray, geometry)\r\n */\r\nexport class CylindricalRangeQuery extends RecurseToCurvesGeometryHandler {\r\n // private geometry0: GeometryQuery; <-- Never used\r\n private _perpVector: Vector3d;\r\n private _maxDistance: number;\r\n private _localToWorld: Transform;\r\n /** capture ray and initialize evolving ranges. */\r\n private constructor(ray: Ray3d) {\r\n super();\r\n this._perpVector = Vector3d.createZero();\r\n this._maxDistance = 0.0;\r\n this._localToWorld = ray.toRigidZFrame()!;\r\n }\r\n private _localPoint = Point3d.create();\r\n private _worldPoint = Point3d.create();\r\n private announcePoint(xyz: Point3d) {\r\n this._localToWorld.multiplyInversePoint3d(xyz, this._localPoint);\r\n const distance = this._localPoint.magnitudeXY();\r\n if (distance >= this._maxDistance) {\r\n this._maxDistance = distance;\r\n this._perpVector.setFromPoint3d(this._localPoint);\r\n this._perpVector.z = 0.0;\r\n this._localToWorld.matrix.multiplyXY(this._localPoint.x, this._localPoint.y, this._perpVector);\r\n }\r\n }\r\n\r\n public override handleLineSegment3d(segment0: LineSegment3d) {\r\n this.announcePoint(segment0.startPoint(this._worldPoint));\r\n this.announcePoint(segment0.endPoint(this._worldPoint));\r\n }\r\n public override handleLineString3d(ls0: LineString3d) {\r\n for (let i = 0; i < ls0.numPoints(); i++) {\r\n ls0.pointAt(i, this._worldPoint);\r\n this.announcePoint(this._worldPoint);\r\n }\r\n }\r\n\r\n public override handleArc3d(arc0: Arc3d): any {\r\n // humbug .. just stroke it ..\r\n // exact solution is:\r\n // project the arc to the z=0 plane of the local system.\r\n // find max distance to origin.\r\n const numStroke = StrokeOptions.applyAngleTol(undefined, 3, arc0.sweep.sweepRadians, 0.1);\r\n const df = 1.0 / numStroke;\r\n for (let i = 0; i <= numStroke; i++) {\r\n arc0.fractionToPoint(i * df, this._worldPoint);\r\n this.announcePoint(this._worldPoint);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Compute the largest vector perpendicular to a ray and ending on the geometry.\r\n * @param geometry0 geometry to search\r\n * @returns vector from ray to geometry.\r\n */\r\n public static computeMaxVectorFromRay(ray: Ray3d, geometry: GeometryQuery): Vector3d {\r\n const accumulator = new CylindricalRangeQuery(ray);\r\n geometry.dispatchToGeometryHandler(accumulator);\r\n return accumulator._perpVector.clone();\r\n }\r\n\r\n /**\r\n * Recurse through geometry.children to find linestrings.\r\n * In each linestring, compute the surface normal annotation from\r\n * * the curve tangent stored in the linestring\r\n * * the axis of rotation\r\n * * a default V vector to be used when the linestring point is close to the axis.\r\n * @param geometry\r\n * @param axis\r\n * @param defaultVectorV\r\n */\r\n public static buildRotationalNormalsInLineStrings(geometry: AnyCurve, axis: Ray3d, defaultVectorFromAxis: Vector3d) {\r\n if (geometry instanceof LineString3d) {\r\n const points = geometry.packedPoints;\r\n const derivatives = geometry.packedDerivatives;\r\n const normals = geometry.ensureEmptySurfaceNormals();\r\n if (derivatives && normals) {\r\n const vectorU = Vector3d.create();\r\n const vectorV = Vector3d.create(); // v direction (forwward along sweep) for surface of rotation.\r\n const xyz = Point3d.create();\r\n const n = points.length;\r\n for (let i = 0; i < n; i++) {\r\n points.getPoint3dAtUncheckedPointIndex(i, xyz);\r\n axis.perpendicularPartOfVectorToTarget(xyz, vectorU);\r\n if (vectorU.isAlmostZero)\r\n axis.direction.crossProduct(defaultVectorFromAxis, vectorV);\r\n else\r\n axis.direction.crossProduct(vectorU, vectorV);\r\n geometry.packedDerivatives.getVector3dAtCheckedVectorIndex(i, vectorU); // reuse vector U as curve derivative\r\n vectorU.crossProduct(vectorV, vectorV); // reuse vector V as normal!\r\n vectorV.normalizeInPlace();\r\n normals.push(vectorV);\r\n }\r\n }\r\n } else if (geometry.children) {\r\n const children = geometry.children;\r\n for (const child of children) {\r\n this.buildRotationalNormalsInLineStrings(child as AnyCurve, axis, defaultVectorFromAxis);\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"CylindricalRange.js","sourceRoot":"","sources":["../../../../src/curve/Query/CylindricalRange.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 { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { Transform } from \"../../geometry3d/Transform\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { AnyCurve } from \"../CurveTypes\";\r\nimport { GeometryQuery } from \"../GeometryQuery\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\n\r\n/**\r\n * Context for computing geometry range around an axis.\r\n * * The publicly called method is `computeZRRange (ray, geometry)\r\n */\r\nexport class CylindricalRangeQuery extends RecurseToCurvesGeometryHandler {\r\n // private geometry0: GeometryQuery; <-- Never used\r\n private _perpVector: Vector3d;\r\n private _maxDistance: number;\r\n private _localToWorld: Transform;\r\n /** capture ray and initialize evolving ranges. */\r\n private constructor(ray: Ray3d) {\r\n super();\r\n this._perpVector = Vector3d.createZero();\r\n this._maxDistance = 0.0;\r\n this._localToWorld = ray.toRigidZFrame()!;\r\n }\r\n private _localPoint = Point3d.create();\r\n private _worldPoint = Point3d.create();\r\n private announcePoint(xyz: Point3d) {\r\n this._localToWorld.multiplyInversePoint3d(xyz, this._localPoint);\r\n const distance = this._localPoint.magnitudeXY();\r\n if (distance >= this._maxDistance) {\r\n this._maxDistance = distance;\r\n this._perpVector.setFromPoint3d(this._localPoint);\r\n this._perpVector.z = 0.0;\r\n this._localToWorld.matrix.multiplyXY(this._localPoint.x, this._localPoint.y, this._perpVector);\r\n }\r\n }\r\n\r\n public override handleLineSegment3d(segment0: LineSegment3d) {\r\n this.announcePoint(segment0.startPoint(this._worldPoint));\r\n this.announcePoint(segment0.endPoint(this._worldPoint));\r\n }\r\n public override handleLineString3d(ls0: LineString3d) {\r\n for (let i = 0; i < ls0.numPoints(); i++) {\r\n ls0.pointAt(i, this._worldPoint);\r\n this.announcePoint(this._worldPoint);\r\n }\r\n }\r\n\r\n public override handleArc3d(arc0: Arc3d): any {\r\n // humbug .. just stroke it ..\r\n // exact solution is:\r\n // project the arc to the z=0 plane of the local system.\r\n // find max distance to origin.\r\n const numStroke = StrokeOptions.applyAngleTol(undefined, 3, arc0.sweep.sweepRadians, 0.1);\r\n const df = 1.0 / numStroke;\r\n for (let i = 0; i <= numStroke; i++) {\r\n arc0.fractionToPoint(i * df, this._worldPoint);\r\n this.announcePoint(this._worldPoint);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Compute the largest vector perpendicular to a ray and ending on the geometry.\r\n * @param geometry0 geometry to search\r\n * @returns vector from ray to geometry.\r\n */\r\n public static computeMaxVectorFromRay(ray: Ray3d, geometry: GeometryQuery): Vector3d {\r\n const accumulator = new CylindricalRangeQuery(ray);\r\n geometry.dispatchToGeometryHandler(accumulator);\r\n return accumulator._perpVector.clone();\r\n }\r\n\r\n /**\r\n * Recurse through geometry.children to find linestrings.\r\n * In each linestring, compute the surface normal annotation from\r\n * * the curve tangent stored in the linestring\r\n * * the axis of rotation\r\n * * a default V vector to be used when the linestring point is close to the axis.\r\n * @param geometry\r\n * @param axis\r\n * @param defaultVectorV\r\n */\r\n public static buildRotationalNormalsInLineStrings(geometry: AnyCurve, axis: Ray3d, defaultVectorFromAxis: Vector3d) {\r\n if (geometry instanceof LineString3d) {\r\n const points = geometry.packedPoints;\r\n const derivatives = geometry.packedDerivatives;\r\n const normals = geometry.ensureEmptySurfaceNormals();\r\n if (derivatives && normals) {\r\n const vectorU = Vector3d.create();\r\n const vectorV = Vector3d.create(); // v direction (forwward along sweep) for surface of rotation.\r\n const xyz = Point3d.create();\r\n const n = points.length;\r\n for (let i = 0; i < n; i++) {\r\n points.getPoint3dAtUncheckedPointIndex(i, xyz);\r\n axis.perpendicularPartOfVectorToTarget(xyz, vectorU);\r\n if (vectorU.isAlmostZero)\r\n axis.direction.crossProduct(defaultVectorFromAxis, vectorV);\r\n else\r\n axis.direction.crossProduct(vectorU, vectorV);\r\n geometry.packedDerivatives.getVector3dAtCheckedVectorIndex(i, vectorU); // reuse vector U as curve derivative\r\n vectorU.crossProduct(vectorV, vectorV); // reuse vector V as normal!\r\n vectorV.normalizeInPlace();\r\n normals.push(vectorV);\r\n }\r\n }\r\n } else if (geometry.children) {\r\n const children = geometry.children;\r\n for (const child of children) {\r\n this.buildRotationalNormalsInLineStrings(child as AnyCurve, axis, defaultVectorFromAxis);\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -1,4 +1,4 @@
1
- import { AnyRegion } from "../CurveChain";
1
+ import { AnyRegion } from "../CurveTypes";
2
2
  import { Loop } from "../Loop";
3
3
  import { ParityRegion } from "../ParityRegion";
4
4
  import { UnionRegion } from "../UnionRegion";
@@ -1 +1 @@
1
- {"version":3,"file":"InOutTests.js","sourceRoot":"","sources":["../../../../src/curve/Query/InOutTests.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 { Angle } from \"../../geometry3d/Angle\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { AnyRegion } from \"../CurveChain\";\r\nimport { CurveIntervalRole, CurveLocationDetail } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { Loop } from \"../Loop\";\r\nimport { ParityRegion } from \"../ParityRegion\";\r\nimport { UnionRegion } from \"../UnionRegion\";\r\n\r\n/**\r\n * Context for testing containment in Loop, ParityRegion and UnionRegion.\r\n * @internal\r\n */\r\nexport class PointInOnOutContext {\r\n /**\r\n * In-out test for a single loop.\r\n * * Test by finding intersections with an xy line (xyz plane) in \"some\" direction.\r\n * * Test logic gets complicated if the plane has a vertex hit.\r\n * * If that happens, don't try to figure out the cases. Just move on to another plane.\r\n * * Any \"on\" point triggers immediate 0 return.\r\n * * (Hence if there are overlapping lines their self-canceling effect might be wrong.)\r\n * @param loop\r\n * @param x tested x coordinate\r\n * @param y tested y coordinate\r\n */\r\n public static testPointInOnOutLoopXY(loop: Loop, x: number, y: number): number {\r\n let plane: Plane3dByOriginAndUnitNormal;\r\n const xy = Point3d.create(x, y);\r\n for (let radians = 0.0; Math.abs(radians) < 6.0; radians = -1.2313 * (radians + 0.3212897)) {\r\n plane = Plane3dByOriginAndUnitNormal.createXYAngle(x, y, Angle.createRadians(radians))!;\r\n const normal = plane.getNormalRef();\r\n const intersections: CurveLocationDetail[] = [];\r\n for (const cp of loop.children) {\r\n if (cp instanceof CurvePrimitive)\r\n cp.appendPlaneIntersectionPoints(plane, intersections);\r\n }\r\n CurvePrimitive.snapAndRestrictDetails(intersections, false, true);\r\n let numLeft = 0;\r\n let numRight = 0;\r\n let numTricky = 0;\r\n let wx, wy;\r\n // Count simple crossings to left and right.\r\n // Also count tricky crossings (vertex hits, onEdge)\r\n // If there are any tricky ones, go around with a different plane.\r\n // A intently devious tester could make every plane hit tricky things.\r\n for (const intersection of intersections) {\r\n if (intersection.intervalRole !== CurveIntervalRole.isolated\r\n && intersection.intervalRole !== undefined) {\r\n numTricky++;\r\n }\r\n wx = intersection.point.x - x;\r\n wy = intersection.point.y - y;\r\n if (Geometry.isSameCoordinateXY(wx, wy, 0, 0))\r\n return 0;\r\n const cross = Geometry.crossProductXYXY(normal.x, normal.y, wx, wy);\r\n if (xy.isAlmostEqualXY(intersection.point))\r\n return 0;\r\n if (cross < 0.0)\r\n numLeft++;\r\n else if (cross > 0.0)\r\n numRight++;\r\n }\r\n if (numTricky !== 0) // try another angle !!\r\n continue;\r\n const leftParity = numLeft & (0x01);\r\n const rightParity = numRight & (0x01);\r\n if (leftParity === rightParity)\r\n return leftParity === 1 ? 1 : -1;\r\n }\r\n return -1;\r\n }\r\n /**\r\n * strongly-typed parity region handling: XOR of all loops. (But any ON is returned as edge hit.)\r\n * @param parent\r\n * @param x\r\n * @param y\r\n */\r\n public static testPointInOnOutParityRegionXY(parent: ParityRegion, x: number, y: number): number {\r\n let result = -1;\r\n for (const loop of parent.children) {\r\n if (loop instanceof Loop) {\r\n const q = this.testPointInOnOutLoopXY(loop, x, y);\r\n if (q === 0)\r\n return 0;\r\n if (q > 0)\r\n result = - result;\r\n }\r\n }\r\n return result;\r\n }\r\n public static testPointInOnOutUnionRegionXY(parent: UnionRegion, x: number, y: number): number {\r\n for (const loop of parent.children) {\r\n const classify = this.testPointInOnOutRegionXY(loop, x, y);\r\n if (classify >= 0)\r\n return classify;\r\n }\r\n return -1;\r\n }\r\n public static testPointInOnOutRegionXY(parent: AnyRegion, x: number, y: number): number {\r\n if (parent instanceof Loop)\r\n return this.testPointInOnOutLoopXY(parent, x, y);\r\n else if (parent instanceof ParityRegion)\r\n return this.testPointInOnOutParityRegionXY(parent, x, y);\r\n else if (parent instanceof UnionRegion)\r\n return this.testPointInOnOutUnionRegionXY(parent, x, y);\r\n return -1;\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"InOutTests.js","sourceRoot":"","sources":["../../../../src/curve/Query/InOutTests.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 { Angle } from \"../../geometry3d/Angle\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { AnyRegion } from \"../CurveTypes\";\r\nimport { CurveIntervalRole, CurveLocationDetail } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { Loop } from \"../Loop\";\r\nimport { ParityRegion } from \"../ParityRegion\";\r\nimport { UnionRegion } from \"../UnionRegion\";\r\n\r\n/**\r\n * Context for testing containment in Loop, ParityRegion and UnionRegion.\r\n * @internal\r\n */\r\nexport class PointInOnOutContext {\r\n /**\r\n * In-out test for a single loop.\r\n * * Test by finding intersections with an xy line (xyz plane) in \"some\" direction.\r\n * * Test logic gets complicated if the plane has a vertex hit.\r\n * * If that happens, don't try to figure out the cases. Just move on to another plane.\r\n * * Any \"on\" point triggers immediate 0 return.\r\n * * (Hence if there are overlapping lines their self-canceling effect might be wrong.)\r\n * @param loop\r\n * @param x tested x coordinate\r\n * @param y tested y coordinate\r\n */\r\n public static testPointInOnOutLoopXY(loop: Loop, x: number, y: number): number {\r\n let plane: Plane3dByOriginAndUnitNormal;\r\n const xy = Point3d.create(x, y);\r\n for (let radians = 0.0; Math.abs(radians) < 6.0; radians = -1.2313 * (radians + 0.3212897)) {\r\n plane = Plane3dByOriginAndUnitNormal.createXYAngle(x, y, Angle.createRadians(radians))!;\r\n const normal = plane.getNormalRef();\r\n const intersections: CurveLocationDetail[] = [];\r\n for (const cp of loop.children) {\r\n if (cp instanceof CurvePrimitive)\r\n cp.appendPlaneIntersectionPoints(plane, intersections);\r\n }\r\n CurvePrimitive.snapAndRestrictDetails(intersections, false, true);\r\n let numLeft = 0;\r\n let numRight = 0;\r\n let numTricky = 0;\r\n let wx, wy;\r\n // Count simple crossings to left and right.\r\n // Also count tricky crossings (vertex hits, onEdge)\r\n // If there are any tricky ones, go around with a different plane.\r\n // A intently devious tester could make every plane hit tricky things.\r\n for (const intersection of intersections) {\r\n if (intersection.intervalRole !== CurveIntervalRole.isolated\r\n && intersection.intervalRole !== undefined) {\r\n numTricky++;\r\n }\r\n wx = intersection.point.x - x;\r\n wy = intersection.point.y - y;\r\n if (Geometry.isSameCoordinateXY(wx, wy, 0, 0))\r\n return 0;\r\n const cross = Geometry.crossProductXYXY(normal.x, normal.y, wx, wy);\r\n if (xy.isAlmostEqualXY(intersection.point))\r\n return 0;\r\n if (cross < 0.0)\r\n numLeft++;\r\n else if (cross > 0.0)\r\n numRight++;\r\n }\r\n if (numTricky !== 0) // try another angle !!\r\n continue;\r\n const leftParity = numLeft & (0x01);\r\n const rightParity = numRight & (0x01);\r\n if (leftParity === rightParity)\r\n return leftParity === 1 ? 1 : -1;\r\n }\r\n return -1;\r\n }\r\n /**\r\n * strongly-typed parity region handling: XOR of all loops. (But any ON is returned as edge hit.)\r\n * @param parent\r\n * @param x\r\n * @param y\r\n */\r\n public static testPointInOnOutParityRegionXY(parent: ParityRegion, x: number, y: number): number {\r\n let result = -1;\r\n for (const loop of parent.children) {\r\n if (loop instanceof Loop) {\r\n const q = this.testPointInOnOutLoopXY(loop, x, y);\r\n if (q === 0)\r\n return 0;\r\n if (q > 0)\r\n result = - result;\r\n }\r\n }\r\n return result;\r\n }\r\n public static testPointInOnOutUnionRegionXY(parent: UnionRegion, x: number, y: number): number {\r\n for (const loop of parent.children) {\r\n const classify = this.testPointInOnOutRegionXY(loop, x, y);\r\n if (classify >= 0)\r\n return classify;\r\n }\r\n return -1;\r\n }\r\n public static testPointInOnOutRegionXY(parent: AnyRegion, x: number, y: number): number {\r\n if (parent instanceof Loop)\r\n return this.testPointInOnOutLoopXY(parent, x, y);\r\n else if (parent instanceof ParityRegion)\r\n return this.testPointInOnOutParityRegionXY(parent, x, y);\r\n else if (parent instanceof UnionRegion)\r\n return this.testPointInOnOutUnionRegionXY(parent, x, y);\r\n return -1;\r\n }\r\n\r\n}\r\n"]}
@@ -2,7 +2,7 @@
2
2
  * @module Curve
3
3
  */
4
4
  import { Range1d } from "../../geometry3d/Range";
5
- import { AnyCurve } from "../CurveChain";
5
+ import { AnyCurve } from "../CurveTypes";
6
6
  import { CurveChain, CurveCollection } from "../CurveCollection";
7
7
  import { LineString3d } from "../LineString3d";
8
8
  import { StrokeOptions } from "../StrokeOptions";
@@ -1 +1 @@
1
- {"version":3,"file":"StrokeCountChain.js","sourceRoot":"","sources":["../../../../src/curve/Query/StrokeCountChain.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/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range1d } from \"../../geometry3d/Range\";\r\nimport { AnyCurve } from \"../CurveChain\";\r\nimport { CurveChain, CurveCollection } from \"../CurveCollection\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { Loop } from \"../Loop\";\r\nimport { ParityRegion } from \"../ParityRegion\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\nimport { StrokeCountMap } from \"./StrokeCountMap\";\r\n\r\n// cspell:word remapa\r\n/**\r\n * abstract methods for callbacks during sweeps of collections of StrokeCount Structures.\r\n * * A set of StrokeCountMaps are to be visited multiple times.\r\n * * The logic that controls the sweep is as below.\r\n * * The callback object controls the number of sweeps and can adapt its action to the respective sweeps.\r\n * * Note that a \"false\" from cb.startPass() terminates passes for this chainIndex and primitiveIndex, but all others exit the whole sequence.\r\n * * This logic occurs 2 or three levels deep\r\n * * outer level is \"chains\". Simple swept path or loops have only one outer; parity regions have one outer per loop of the parity region\r\n * * second level is primitive within chain.\r\n * * If the primitives in a set are \"single component\", second level is lowest.\r\n * * startSweep() and endSweep() calls are two parameters, with undefined componentIndex\r\n * * If the primitives in a set are multi-component, there is a third level looping through corresponding components.\r\n * `\r\n * if (!cb.startSweeps (chainIndex, primitiveIndex, componentIndex))\r\n * return false;\r\n * for (let pass = 0;cb.startPass (pass); pass++){\r\n * for (each map in working set)\r\n * if (!cb.visit (pass, map)) return false;\r\n * if (!cb.endPass ()) return false;\r\n * }\r\n * }\r\n * if (!cb.endSweeps (chainIndex, primitiveIndex, componentIndex)) return false;\r\n * return true;\r\n * `\r\n * @internal\r\n */\r\nexport abstract class StrokeCountMapMultipassVisitor {\r\n /**\r\n * called to announce the beginning of one or more sweeps through related StrokeCountMap's\r\n * @param chainIndex index of loop or path within the various contours.\r\n * @param primitiveIndex index of primitive within the loop or path.\r\n * @param componentIndex optional component index.\r\n * @returns the number of sweeps to perform.\r\n */\r\n public startSweeps(_chainIndex: number, _primitiveIndex: number, _componentIndex?: number): boolean { return true; }\r\n /**\r\n * announce the beginning of a sweep pass.\r\n * @param pass the index (0,1...) for this sweep pass.\r\n * @return true to execute this pass. false to break from the pass loop (next method called is endSweeps)\r\n */\r\n public abstract startPass(pass: number): boolean;\r\n public abstract visit(pass: number, map: StrokeCountMap): boolean;\r\n /**\r\n * announce the end of a pass\r\n * @param pass the index (0,1...) for this sweep pass.\r\n * @return true to continue the sweeps.\r\n */\r\n\r\n public abstract endPass(pass: number): boolean;\r\n /**\r\n * announce the end of handling for particular chainIndex and primitiveIndex;\r\n * @return true to continue outer loops.\r\n */\r\n public endSweeps(_chainIndex: number, _primitiveIndex: number, _componentIndex?: number): boolean { return true; }\r\n\r\n}\r\n/**\r\n * * pass 1: determine max numStroke\r\n * * pass 2: impose max numStroke\r\n * @internal\r\n */\r\nexport class StrokeCountMapVisitorApplyMaxCount extends StrokeCountMapMultipassVisitor {\r\n public myMap: StrokeCountMap;\r\n public constructor() {\r\n super();\r\n this.myMap = StrokeCountMap.createWithComponentIndex();\r\n }\r\n /** set up for a pass through corresponding maps. */\r\n public startPass(pass: number): boolean {\r\n if (pass === 0) {\r\n this.myMap.numStroke = 0;\r\n return true;\r\n } else if (pass === 1) {\r\n // nothing to change == numStroke will be applied to each primitive.\r\n return true;\r\n }\r\n // all other pass numbers are rejected ...\r\n return false;\r\n }\r\n /** visit one of the set of corresponding maps. */\r\n public visit(pass: number, map: StrokeCountMap): boolean {\r\n if (pass === 0) {\r\n if (map.numStroke > this.myMap.numStroke)\r\n this.myMap.numStroke = map.numStroke;\r\n return true;\r\n } else if (pass === 1) {\r\n // apply the max from prior pass\r\n map.numStroke = this.myMap.numStroke;\r\n return true;\r\n }\r\n // no other pass values should happen -- canceled by startPass.\r\n return false;\r\n }\r\n\r\n public endPass(_pass: number): boolean { return true; }\r\n}\r\n/**\r\n * * pass 1: determine max curveLength among maps presented.\r\n * * pass 2: set the a0 and a1 values to 0 and that max distance\r\n * @internal\r\n */\r\nexport class StrokeCountMapVisitorApplyMaxCurveLength extends StrokeCountMapMultipassVisitor {\r\n public maxCurveLength: number;\r\n public constructor() {\r\n super();\r\n this.maxCurveLength = 0.0;\r\n }\r\n /** set up for a pass through corresponding maps. */\r\n public startPass(pass: number): boolean {\r\n if (pass === 0) {\r\n this.maxCurveLength = 0;\r\n return true;\r\n } else if (pass === 1) {\r\n // nothing to change == numStroke will be applied to each primitive.\r\n return true;\r\n }\r\n // all other pass numbers are rejected ...\r\n return false;\r\n }\r\n /** visit one of the set of corresponding maps. */\r\n public visit(pass: number, map: StrokeCountMap): boolean {\r\n if (pass === 0) {\r\n this.maxCurveLength = Geometry.maxXY(map.curveLength, this.maxCurveLength);\r\n return true;\r\n } else if (pass === 1) {\r\n // apply the max from prior pass\r\n map.a0 = 0.0;\r\n map.a1 = this.maxCurveLength;\r\n return true;\r\n }\r\n // no other pass values should happen -- canceled by startPass.\r\n return false;\r\n }\r\n\r\n public endPass(_pass: number): boolean { return true; }\r\n}\r\n/**\r\n * class `StrokeCountChain` contains:\r\n * * `maps` = an array of `StrokeCountMap`\r\n * * `parent` = parent CurveCollection.\r\n *\r\n * An instance is normally created with either a `Path` or `Loop` as the parent.\r\n */\r\nexport class StrokeCountChain {\r\n public maps: StrokeCountMap[];\r\n public parent?: CurveCollection;\r\n /**\r\n * options are used (with different purposes) at two times:\r\n * * When the StrokeCountChain is created, the options affect the stroke counts. This is just creating markup, not actual strokes.\r\n * * When actual stroking happens, the options control creation of parameters and tangents.\r\n */\r\n public options?: StrokeOptions;\r\n\r\n private constructor(parent?: CurveCollection, options?: StrokeOptions) {\r\n this.parent = parent;\r\n this.maps = [];\r\n this.options = options;\r\n }\r\n public static createForCurveChain(chain: CurveChain, options?: StrokeOptions): StrokeCountChain {\r\n const result = new StrokeCountChain(chain, options);\r\n result.parent = chain;\r\n // A chain can only contain primitives !!!!\r\n for (const p of chain.children) {\r\n p.computeAndAttachRecursiveStrokeCounts(options);\r\n if (p.strokeData)\r\n result.maps.push(p.strokeData);\r\n }\r\n return result;\r\n }\r\n public getStrokes(): LineString3d {\r\n const ls = LineString3d.create();\r\n if (this.options) {\r\n if (this.options.needNormals || this.options.needParams) {\r\n ls.ensureEmptyFractions();\r\n ls.ensureEmptyDerivatives();\r\n ls.ensureEmptyUVParams();\r\n }\r\n }\r\n for (const m of this.maps) {\r\n if (m.primitive)\r\n m.primitive.addMappedStrokesToLineString3D(m, ls);\r\n }\r\n return ls;\r\n\r\n }\r\n /** internal form of */\r\n private static applySummed01LimitsWithinArray(maps: StrokeCountMap[], incomingSum: number): number {\r\n let movingSum = incomingSum;\r\n for (const m of maps) {\r\n m.a0 += movingSum;\r\n if (m.componentData) {\r\n m.a1 = this.applySummed01LimitsWithinArray(m.componentData, m.a0);\r\n } else {\r\n m.a1 += movingSum;\r\n }\r\n movingSum = m.a1;\r\n }\r\n return movingSum;\r\n }\r\n /**\r\n * walk the maps in the array.\r\n * * in maps with no component data\r\n * * increment map.a0 and map.a1 by the incoming distance a0\r\n * * in maps with component data:\r\n * * recurse through the component array.\r\n * * increment map.a0 by the incoming a0.\r\n * * returned a1 from the componentData array becomes a1\r\n * @returns upper value of a1 in final map.\r\n * @param maps\r\n * @param incomingSum lower value to add to a0 for first map.\r\n */\r\n public applySummed01Limits(incomingSum: number): number {\r\n return StrokeCountChain.applySummed01LimitsWithinArray(this.maps, incomingSum);\r\n }\r\n}\r\n\r\n/**\r\n * class `StrokeCountSection`\\\r\n * * contains an array of `StrokeCountChain`.\r\n * * Hence it is the internal node level of a (1-level-deep) tree of `StrokeCountChain`\r\n * @internal\r\n */\r\nexport class StrokeCountSection {\r\n public chains: StrokeCountChain[];\r\n public parent?: CurveCollection;\r\n private constructor(parent?: CurveCollection) { this.parent = parent; this.chains = []; }\r\n /**\r\n * construct array of arrays of `StrokeCountMap`s\r\n * @param parent\r\n */\r\n public static createForParityRegionOrChain(parent: CurveCollection, options?: StrokeOptions): StrokeCountSection {\r\n const result = new StrokeCountSection(parent);\r\n if (parent instanceof ParityRegion) {\r\n for (const child of parent.children) {\r\n const p = StrokeCountChain.createForCurveChain(child, options);\r\n result.chains.push(p);\r\n }\r\n } else if (parent instanceof CurveChain) {\r\n result.chains.push(StrokeCountChain.createForCurveChain(parent, options));\r\n }\r\n return result;\r\n }\r\n /** test if all sections have the same structure. */\r\n public static areSectionsCompatible(sections: StrokeCountSection[], enforceCounts: boolean): boolean {\r\n if (sections.length < 2)\r\n return true; // hm.. don't know if that is useful, but nothing to check here.\r\n const numChains = sections[0].chains.length;\r\n for (let i = 1; i < sections.length; i++) {\r\n // first level: must match number of paths or loops\r\n if (sections[i].chains.length !== numChains)\r\n return false;\r\n // second level: must have same number of primitives in each path or loop\r\n for (let j = 0; j < sections[0].chains.length; j++) {\r\n const numPrimitive = sections[0].chains[j].maps.length;\r\n if (sections[i].chains[j].maps.length !== numPrimitive)\r\n return false;\r\n for (let k = 0; k < numPrimitive; k++) {\r\n if (!sections[0].chains[j].maps[k].isCompatibleComponentStructure(sections[i].chains[j].maps[k], enforceCounts))\r\n return false;\r\n }\r\n }\r\n\r\n }\r\n return true;\r\n }\r\n\r\n /** Within each section, sweep accumulate curveLength field, recording entry and exit sum in each map.\r\n * * In expected use, (a0,a1) are (0,a) where a is the (previously computed) max length among corresponding maps up and down the section arrays.\r\n */\r\n public static remapa0a1WithinEachChain(sections: StrokeCountSection[]) {\r\n for (const section of sections) {\r\n for (const chain of section.chains) {\r\n chain.applySummed01Limits(0.0);\r\n }\r\n }\r\n }\r\n\r\n private static applyMultipassVisitorCallbackNoComponents(sections: StrokeCountSection[], chainIndex: number, primitiveIndex: number,\r\n componentIndex: number | undefined, callback: StrokeCountMapMultipassVisitor) {\r\n const numSection = sections.length;\r\n if (!callback.startSweeps(chainIndex, primitiveIndex, componentIndex)) return false;\r\n if (componentIndex === undefined) {\r\n // there are corresponding primitives directly at the section, chain, primitive index:\r\n for (let pass = 0; ; pass++) {\r\n if (!callback.startPass(pass))\r\n break;\r\n for (let sectionIndex = 0; sectionIndex < numSection; sectionIndex++)\r\n if (!callback.visit(pass, sections[sectionIndex].chains[chainIndex].maps[primitiveIndex]))\r\n return false;\r\n if (!callback.endPass(pass))\r\n return false;\r\n }\r\n } else {\r\n // there are corresponding primitives at the section, chain, primitive,componentIndex\r\n // there are corresponding primitives directly at the section, chain, primitive index:\r\n for (let pass = 0; ; pass++) {\r\n if (!callback.startPass(pass))\r\n break;\r\n for (let sectionIndex = 0; sectionIndex < numSection; sectionIndex++)\r\n if (!callback.visit(pass, sections[sectionIndex].chains[chainIndex].maps[primitiveIndex].componentData![componentIndex]))\r\n return false;\r\n if (!callback.endPass(pass))\r\n return false;\r\n }\r\n\r\n }\r\n if (!callback.endSweeps(chainIndex, primitiveIndex, componentIndex)) return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Walk through the sections, emitting callbacks delimiting groups of corresponding primitives.\r\n * @param sections array of sections (possibly a single path or loop at each section, or possibly a set of parity loops.)\r\n * @param callback object to be notified during the traversal\r\n */\r\n public static runMultiPassVisitorAtCorrespondingPrimitives(sections: StrokeCountSection[], callback: StrokeCountMapMultipassVisitor): boolean {\r\n const numChainPerSection = sections[0].chains.length;\r\n for (let chainIndex = 0; chainIndex < numChainPerSection; chainIndex++) {\r\n const numPrimitive = sections[0].chains[chainIndex].maps.length;\r\n for (let primitiveIndex = 0; primitiveIndex < numPrimitive; primitiveIndex++) {\r\n if (sections[0].chains[chainIndex].maps[primitiveIndex].componentData) {\r\n const numComponent = sections[0].chains[chainIndex].maps[primitiveIndex]!.componentData!.length;\r\n for (let i = 0; i < numComponent; i++)\r\n if (!this.applyMultipassVisitorCallbackNoComponents(sections, chainIndex, primitiveIndex, i, callback))\r\n return false;\r\n\r\n } else {\r\n if (!this.applyMultipassVisitorCallbackNoComponents(sections, chainIndex, primitiveIndex, undefined, callback))\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * * Confirm that all sections in the array have the same structure.\r\n * * Within each corresponding set of entries, apply the max count to all.\r\n * @param sections array of per-section stroke count entries\r\n */\r\n public static enforceStrokeCountCompatibility(sections: StrokeCountSection[]): boolean {\r\n\r\n if (sections.length < 2)\r\n return true;\r\n if (!StrokeCountSection.areSectionsCompatible(sections, false))\r\n return false;\r\n const visitor = new StrokeCountMapVisitorApplyMaxCount();\r\n this.runMultiPassVisitorAtCorrespondingPrimitives(sections, visitor);\r\n return true;\r\n\r\n }\r\n /**\r\n * * Confirm that all sections in the array have the same structure.\r\n * * Within each corresponding set of entries up and down the sections, set curveLength as the maximum of the respective curve lengths.\r\n * * Along each section, sum curveLengths (which were just reset) to get consistent along-chain parameters\r\n * @param sections array of per-section stroke count entries\r\n */\r\n public static enforceCompatibleDistanceSums(sections: StrokeCountSection[]): boolean {\r\n\r\n if (sections.length < 2)\r\n return true;\r\n if (!StrokeCountSection.areSectionsCompatible(sections, false))\r\n return false;\r\n const visitor = new StrokeCountMapVisitorApplyMaxCurveLength();\r\n this.runMultiPassVisitorAtCorrespondingPrimitives(sections, visitor);\r\n this.remapa0a1WithinEachChain(sections);\r\n return true;\r\n\r\n }\r\n\r\n /**\r\n * Return stroked form of the section.\r\n */\r\n public getStrokes(): AnyCurve {\r\n if (this.chains.length === 1) {\r\n return this.chains[0].getStrokes();\r\n } else {\r\n const region = ParityRegion.create();\r\n for (const c of this.chains) {\r\n const strokes = c.getStrokes();\r\n if (strokes instanceof LineString3d)\r\n region.tryAddChild(Loop.create(strokes));\r\n }\r\n return region;\r\n }\r\n }\r\n /**\r\n * Given two compatible stroke sets (as returned by getStrokes) extend a range\r\n * with the distances between corresponding points.\r\n * * Each set of strokes may be:\r\n * * linestring\r\n * * ParityRegion\r\n * * CurveChain (Loop or Path)\r\n * @param strokeA first set of strokes\r\n * @param strokeB second set of strokes\r\n * @param rangeToExtend caller-allocated range to be extended.\r\n * @returns true if structures are compatible.\r\n */\r\n public static extendDistanceRangeBetweenStrokes(strokeA: AnyCurve, strokeB: AnyCurve, rangeToExtend: Range1d): boolean {\r\n if (strokeA instanceof LineString3d) {\r\n if (strokeB instanceof LineString3d) {\r\n if (strokeA.numPoints() === strokeB.numPoints()) {\r\n const n = strokeA.numPoints();\r\n const pointA = Point3d.create();\r\n const pointB = Point3d.create();\r\n const allPointA = strokeA.packedPoints;\r\n const allPointB = strokeB.packedPoints;\r\n\r\n for (let i = 0; i < n; i++) {\r\n allPointA.getPoint3dAtCheckedPointIndex(i, pointA);\r\n allPointB.getPoint3dAtCheckedPointIndex(i, pointB);\r\n rangeToExtend.extendX(pointA.distance(pointB));\r\n }\r\n return true;\r\n }\r\n }\r\n } else if (strokeA instanceof ParityRegion) {\r\n if (strokeB instanceof ParityRegion) {\r\n const childrenA = strokeA.children;\r\n const childrenB = strokeB.children;\r\n const n = childrenA.length;\r\n if (n === childrenB.length) {\r\n for (let i = 0; i < n; i++) {\r\n if (!this.extendDistanceRangeBetweenStrokes(childrenA[i], childrenB[i], rangeToExtend))\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n } else if (strokeA instanceof CurveChain) {\r\n if (strokeB instanceof CurveChain) {\r\n const childrenA = strokeA.children;\r\n const childrenB = strokeB.children;\r\n const n = childrenA.length;\r\n if (n === childrenB.length) {\r\n for (let i = 0; i < n; i++) {\r\n if (!this.extendDistanceRangeBetweenStrokes(childrenA[i], childrenB[i], rangeToExtend))\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"StrokeCountChain.js","sourceRoot":"","sources":["../../../../src/curve/Query/StrokeCountChain.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,6CAA0C;AAC1C,sEAA2D;AAG3D,wDAAiE;AACjE,kDAA+C;AAC/C,kCAA+B;AAC/B,kDAA+C;AAE/C,qDAAkD;AAElD,qBAAqB;AACrB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAsB,8BAA8B;IAClD;;;;;;OAMG;IACI,WAAW,CAAC,WAAmB,EAAE,eAAuB,EAAE,eAAwB,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC;IAepH;;;OAGG;IACI,SAAS,CAAC,WAAmB,EAAE,eAAuB,EAAE,eAAwB,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC;CAEnH;AA7BD,wEA6BC;AACD;;;;GAIG;AACH,MAAa,kCAAmC,SAAQ,8BAA8B;IAEpF;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,+BAAc,CAAC,wBAAwB,EAAE,CAAC;IACzD,CAAC;IACD,oDAAoD;IAC7C,SAAS,CAAC,IAAY;QAC3B,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE;YACrB,oEAAoE;YACpE,OAAO,IAAI,CAAC;SACb;QACD,0CAA0C;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,kDAAkD;IAC3C,KAAK,CAAC,IAAY,EAAE,GAAmB;QAC5C,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,IAAI,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS;gBACtC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;YACvC,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE;YACrB,gCAAgC;YAChC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACrC,OAAO,IAAI,CAAC;SACb;QACD,+DAA+D;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,OAAO,CAAC,KAAa,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC;CACxD;AAlCD,gFAkCC;AACD;;;;GAIG;AACH,MAAa,wCAAyC,SAAQ,8BAA8B;IAE1F;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;IAC5B,CAAC;IACD,oDAAoD;IAC7C,SAAS,CAAC,IAAY;QAC3B,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE;YACrB,oEAAoE;YACpE,OAAO,IAAI,CAAC;SACb;QACD,0CAA0C;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,kDAAkD;IAC3C,KAAK,CAAC,IAAY,EAAE,GAAmB;QAC5C,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,IAAI,CAAC,cAAc,GAAG,mBAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE;YACrB,gCAAgC;YAChC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YACb,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;YAC7B,OAAO,IAAI,CAAC;SACb;QACD,+DAA+D;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,OAAO,CAAC,KAAa,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC;CACxD;AAlCD,4FAkCC;AACD;;;;;;GAMG;AACH,MAAa,gBAAgB;IAU3B,YAAoB,MAAwB,EAAE,OAAuB;QACnE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IACM,MAAM,CAAC,mBAAmB,CAAC,KAAiB,EAAE,OAAuB;QAC1E,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,2CAA2C;QAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE;YAC9B,CAAC,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,CAAC,CAAC,UAAU;gBACd,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;SAClC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACM,UAAU;QACf,MAAM,EAAE,GAAG,2BAAY,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;gBACvD,EAAE,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,EAAE,CAAC,sBAAsB,EAAE,CAAC;gBAC5B,EAAE,CAAC,mBAAmB,EAAE,CAAC;aAC1B;SACF;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YACzB,IAAI,CAAC,CAAC,SAAS;gBACb,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACrD;QACD,OAAO,EAAE,CAAC;IAEZ,CAAC;IACD,wBAAwB;IAChB,MAAM,CAAC,8BAA8B,CAAC,IAAsB,EAAE,WAAmB;QACvF,IAAI,SAAS,GAAG,WAAW,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,CAAC,CAAC,EAAE,IAAI,SAAS,CAAC;YAClB,IAAI,CAAC,CAAC,aAAa,EAAE;gBACnB,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aACnE;iBAAM;gBACL,CAAC,CAAC,EAAE,IAAI,SAAS,CAAC;aACnB;YACD,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;SAClB;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;;;;;OAWG;IACI,mBAAmB,CAAC,WAAmB;QAC5C,OAAO,gBAAgB,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACjF,CAAC;CACF;AAvED,4CAuEC;AAED;;;;;GAKG;AACH,MAAa,kBAAkB;IAG7B,YAAoB,MAAwB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IACzF;;;OAGG;IACI,MAAM,CAAC,4BAA4B,CAAC,MAAuB,EAAE,OAAuB;QACzF,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,MAAM,YAAY,2BAAY,EAAE;YAClC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACnC,MAAM,CAAC,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACvB;SACF;aAAM,IAAI,MAAM,YAAY,4BAAU,EAAE;YACvC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;SAC3E;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,oDAAoD;IAC7C,MAAM,CAAC,qBAAqB,CAAC,QAA8B,EAAE,aAAsB;QACxF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrB,OAAO,IAAI,CAAC,CAAE,gEAAgE;QAChF,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,mDAAmD;YACnD,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;gBACzC,OAAO,KAAK,CAAC;YACf,yEAAyE;YACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClD,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBACvD,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY;oBACpD,OAAO,KAAK,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;oBACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC;wBAC7G,OAAO,KAAK,CAAC;iBAChB;aACF;SAEF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,wBAAwB,CAAC,QAA8B;QACnE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;aAChC;SACF;IACH,CAAC;IAEO,MAAM,CAAC,yCAAyC,CAAC,QAA8B,EAAE,UAAkB,EAAE,cAAsB,EACjI,cAAkC,EAAE,QAAwC;QAC5E,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QACpF,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,sFAAsF;YACtF,KAAK,IAAI,IAAI,GAAG,CAAC,GAAI,IAAI,EAAE,EAAE;gBAC3B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC3B,MAAM;gBACR,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,UAAU,EAAE,YAAY,EAAE;oBAClE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBACvF,OAAO,KAAK,CAAC;gBACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;oBACzB,OAAO,KAAK,CAAC;aAChB;SACF;aAAM;YACL,qFAAqF;YACrF,sFAAsF;YACtF,KAAK,IAAI,IAAI,GAAG,CAAC,GAAI,IAAI,EAAE,EAAE;gBAC3B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC3B,MAAM;gBACR,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,UAAU,EAAE,YAAY,EAAE;oBAClE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,aAAc,CAAC,cAAc,CAAC,CAAC;wBACtH,OAAO,KAAK,CAAC;gBACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;oBACzB,OAAO,KAAK,CAAC;aAChB;SAEF;QACD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,cAAc,EAAE,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,4CAA4C,CAAC,QAA8B,EAAE,QAAwC;QACjI,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QACrD,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,kBAAkB,EAAE,UAAU,EAAE,EAAE;YACtE,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAChE,KAAK,IAAI,cAAc,GAAG,CAAC,EAAE,cAAc,GAAG,YAAY,EAAE,cAAc,EAAE,EAAE;gBAC5E,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE;oBACrE,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,cAAc,CAAE,CAAC,aAAc,CAAC,MAAM,CAAC;oBAChG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE;wBACnC,IAAI,CAAC,IAAI,CAAC,yCAAyC,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,CAAC;4BACpG,OAAO,KAAK,CAAC;iBAElB;qBAAM;oBACL,IAAI,CAAC,IAAI,CAAC,yCAAyC,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC;wBAC5G,OAAO,KAAK,CAAC;iBAChB;aACF;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,+BAA+B,CAAC,QAA8B;QAE1E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,kCAAkC,EAAE,CAAC;QACzD,IAAI,CAAC,4CAA4C,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IAEd,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,6BAA6B,CAAC,QAA8B;QAExE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,wCAAwC,EAAE,CAAC;QAC/D,IAAI,CAAC,4CAA4C,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IAEd,CAAC;IAED;;OAEG;IACI,UAAU;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;SACpC;aAAM;YACL,MAAM,MAAM,GAAG,2BAAY,CAAC,MAAM,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC/B,IAAI,OAAO,YAAY,2BAAY;oBACjC,MAAM,CAAC,WAAW,CAAC,WAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;aAC5C;YACD,OAAO,MAAM,CAAC;SACf;IACH,CAAC;IACD;;;;;;;;;;;OAWG;IACI,MAAM,CAAC,iCAAiC,CAAC,OAAiB,EAAE,OAAiB,EAAE,aAAsB;QAC1G,IAAI,OAAO,YAAY,2BAAY,EAAE;YACnC,IAAI,OAAO,YAAY,2BAAY,EAAE;gBACnC,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,OAAO,CAAC,SAAS,EAAE,EAAE;oBAC/C,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,yBAAO,CAAC,MAAM,EAAE,CAAC;oBAChC,MAAM,MAAM,GAAG,yBAAO,CAAC,MAAM,EAAE,CAAC;oBAChC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;oBACvC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;oBAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC1B,SAAS,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;wBACnD,SAAS,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;wBACnD,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;qBAChD;oBACD,OAAO,IAAI,CAAC;iBACb;aACF;SACF;aAAM,IAAI,OAAO,YAAY,2BAAY,EAAE;YAC1C,IAAI,OAAO,YAAY,2BAAY,EAAE;gBACnC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;gBACnC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;gBACnC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;gBAC3B,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,EAAE;oBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC1B,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC;4BACpF,OAAO,KAAK,CAAC;qBAChB;oBACD,OAAO,IAAI,CAAC;iBACb;aACF;SACF;aAAM,IAAI,OAAO,YAAY,4BAAU,EAAE;YACxC,IAAI,OAAO,YAAY,4BAAU,EAAE;gBACjC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;gBACnC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;gBACnC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;gBAC3B,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,EAAE;oBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC1B,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC;4BACpF,OAAO,KAAK,CAAC;qBAChB;oBACD,OAAO,IAAI,CAAC;iBACb;aACF;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA/ND,gDA+NC","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/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range1d } from \"../../geometry3d/Range\";\r\nimport { AnyCurve } from \"../CurveTypes\";\r\nimport { CurveChain, CurveCollection } from \"../CurveCollection\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { Loop } from \"../Loop\";\r\nimport { ParityRegion } from \"../ParityRegion\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\nimport { StrokeCountMap } from \"./StrokeCountMap\";\r\n\r\n// cspell:word remapa\r\n/**\r\n * abstract methods for callbacks during sweeps of collections of StrokeCount Structures.\r\n * * A set of StrokeCountMaps are to be visited multiple times.\r\n * * The logic that controls the sweep is as below.\r\n * * The callback object controls the number of sweeps and can adapt its action to the respective sweeps.\r\n * * Note that a \"false\" from cb.startPass() terminates passes for this chainIndex and primitiveIndex, but all others exit the whole sequence.\r\n * * This logic occurs 2 or three levels deep\r\n * * outer level is \"chains\". Simple swept path or loops have only one outer; parity regions have one outer per loop of the parity region\r\n * * second level is primitive within chain.\r\n * * If the primitives in a set are \"single component\", second level is lowest.\r\n * * startSweep() and endSweep() calls are two parameters, with undefined componentIndex\r\n * * If the primitives in a set are multi-component, there is a third level looping through corresponding components.\r\n * `\r\n * if (!cb.startSweeps (chainIndex, primitiveIndex, componentIndex))\r\n * return false;\r\n * for (let pass = 0;cb.startPass (pass); pass++){\r\n * for (each map in working set)\r\n * if (!cb.visit (pass, map)) return false;\r\n * if (!cb.endPass ()) return false;\r\n * }\r\n * }\r\n * if (!cb.endSweeps (chainIndex, primitiveIndex, componentIndex)) return false;\r\n * return true;\r\n * `\r\n * @internal\r\n */\r\nexport abstract class StrokeCountMapMultipassVisitor {\r\n /**\r\n * called to announce the beginning of one or more sweeps through related StrokeCountMap's\r\n * @param chainIndex index of loop or path within the various contours.\r\n * @param primitiveIndex index of primitive within the loop or path.\r\n * @param componentIndex optional component index.\r\n * @returns the number of sweeps to perform.\r\n */\r\n public startSweeps(_chainIndex: number, _primitiveIndex: number, _componentIndex?: number): boolean { return true; }\r\n /**\r\n * announce the beginning of a sweep pass.\r\n * @param pass the index (0,1...) for this sweep pass.\r\n * @return true to execute this pass. false to break from the pass loop (next method called is endSweeps)\r\n */\r\n public abstract startPass(pass: number): boolean;\r\n public abstract visit(pass: number, map: StrokeCountMap): boolean;\r\n /**\r\n * announce the end of a pass\r\n * @param pass the index (0,1...) for this sweep pass.\r\n * @return true to continue the sweeps.\r\n */\r\n\r\n public abstract endPass(pass: number): boolean;\r\n /**\r\n * announce the end of handling for particular chainIndex and primitiveIndex;\r\n * @return true to continue outer loops.\r\n */\r\n public endSweeps(_chainIndex: number, _primitiveIndex: number, _componentIndex?: number): boolean { return true; }\r\n\r\n}\r\n/**\r\n * * pass 1: determine max numStroke\r\n * * pass 2: impose max numStroke\r\n * @internal\r\n */\r\nexport class StrokeCountMapVisitorApplyMaxCount extends StrokeCountMapMultipassVisitor {\r\n public myMap: StrokeCountMap;\r\n public constructor() {\r\n super();\r\n this.myMap = StrokeCountMap.createWithComponentIndex();\r\n }\r\n /** set up for a pass through corresponding maps. */\r\n public startPass(pass: number): boolean {\r\n if (pass === 0) {\r\n this.myMap.numStroke = 0;\r\n return true;\r\n } else if (pass === 1) {\r\n // nothing to change == numStroke will be applied to each primitive.\r\n return true;\r\n }\r\n // all other pass numbers are rejected ...\r\n return false;\r\n }\r\n /** visit one of the set of corresponding maps. */\r\n public visit(pass: number, map: StrokeCountMap): boolean {\r\n if (pass === 0) {\r\n if (map.numStroke > this.myMap.numStroke)\r\n this.myMap.numStroke = map.numStroke;\r\n return true;\r\n } else if (pass === 1) {\r\n // apply the max from prior pass\r\n map.numStroke = this.myMap.numStroke;\r\n return true;\r\n }\r\n // no other pass values should happen -- canceled by startPass.\r\n return false;\r\n }\r\n\r\n public endPass(_pass: number): boolean { return true; }\r\n}\r\n/**\r\n * * pass 1: determine max curveLength among maps presented.\r\n * * pass 2: set the a0 and a1 values to 0 and that max distance\r\n * @internal\r\n */\r\nexport class StrokeCountMapVisitorApplyMaxCurveLength extends StrokeCountMapMultipassVisitor {\r\n public maxCurveLength: number;\r\n public constructor() {\r\n super();\r\n this.maxCurveLength = 0.0;\r\n }\r\n /** set up for a pass through corresponding maps. */\r\n public startPass(pass: number): boolean {\r\n if (pass === 0) {\r\n this.maxCurveLength = 0;\r\n return true;\r\n } else if (pass === 1) {\r\n // nothing to change == numStroke will be applied to each primitive.\r\n return true;\r\n }\r\n // all other pass numbers are rejected ...\r\n return false;\r\n }\r\n /** visit one of the set of corresponding maps. */\r\n public visit(pass: number, map: StrokeCountMap): boolean {\r\n if (pass === 0) {\r\n this.maxCurveLength = Geometry.maxXY(map.curveLength, this.maxCurveLength);\r\n return true;\r\n } else if (pass === 1) {\r\n // apply the max from prior pass\r\n map.a0 = 0.0;\r\n map.a1 = this.maxCurveLength;\r\n return true;\r\n }\r\n // no other pass values should happen -- canceled by startPass.\r\n return false;\r\n }\r\n\r\n public endPass(_pass: number): boolean { return true; }\r\n}\r\n/**\r\n * class `StrokeCountChain` contains:\r\n * * `maps` = an array of `StrokeCountMap`\r\n * * `parent` = parent CurveCollection.\r\n *\r\n * An instance is normally created with either a `Path` or `Loop` as the parent.\r\n */\r\nexport class StrokeCountChain {\r\n public maps: StrokeCountMap[];\r\n public parent?: CurveCollection;\r\n /**\r\n * options are used (with different purposes) at two times:\r\n * * When the StrokeCountChain is created, the options affect the stroke counts. This is just creating markup, not actual strokes.\r\n * * When actual stroking happens, the options control creation of parameters and tangents.\r\n */\r\n public options?: StrokeOptions;\r\n\r\n private constructor(parent?: CurveCollection, options?: StrokeOptions) {\r\n this.parent = parent;\r\n this.maps = [];\r\n this.options = options;\r\n }\r\n public static createForCurveChain(chain: CurveChain, options?: StrokeOptions): StrokeCountChain {\r\n const result = new StrokeCountChain(chain, options);\r\n result.parent = chain;\r\n // A chain can only contain primitives !!!!\r\n for (const p of chain.children) {\r\n p.computeAndAttachRecursiveStrokeCounts(options);\r\n if (p.strokeData)\r\n result.maps.push(p.strokeData);\r\n }\r\n return result;\r\n }\r\n public getStrokes(): LineString3d {\r\n const ls = LineString3d.create();\r\n if (this.options) {\r\n if (this.options.needNormals || this.options.needParams) {\r\n ls.ensureEmptyFractions();\r\n ls.ensureEmptyDerivatives();\r\n ls.ensureEmptyUVParams();\r\n }\r\n }\r\n for (const m of this.maps) {\r\n if (m.primitive)\r\n m.primitive.addMappedStrokesToLineString3D(m, ls);\r\n }\r\n return ls;\r\n\r\n }\r\n /** internal form of */\r\n private static applySummed01LimitsWithinArray(maps: StrokeCountMap[], incomingSum: number): number {\r\n let movingSum = incomingSum;\r\n for (const m of maps) {\r\n m.a0 += movingSum;\r\n if (m.componentData) {\r\n m.a1 = this.applySummed01LimitsWithinArray(m.componentData, m.a0);\r\n } else {\r\n m.a1 += movingSum;\r\n }\r\n movingSum = m.a1;\r\n }\r\n return movingSum;\r\n }\r\n /**\r\n * walk the maps in the array.\r\n * * in maps with no component data\r\n * * increment map.a0 and map.a1 by the incoming distance a0\r\n * * in maps with component data:\r\n * * recurse through the component array.\r\n * * increment map.a0 by the incoming a0.\r\n * * returned a1 from the componentData array becomes a1\r\n * @returns upper value of a1 in final map.\r\n * @param maps\r\n * @param incomingSum lower value to add to a0 for first map.\r\n */\r\n public applySummed01Limits(incomingSum: number): number {\r\n return StrokeCountChain.applySummed01LimitsWithinArray(this.maps, incomingSum);\r\n }\r\n}\r\n\r\n/**\r\n * class `StrokeCountSection`\\\r\n * * contains an array of `StrokeCountChain`.\r\n * * Hence it is the internal node level of a (1-level-deep) tree of `StrokeCountChain`\r\n * @internal\r\n */\r\nexport class StrokeCountSection {\r\n public chains: StrokeCountChain[];\r\n public parent?: CurveCollection;\r\n private constructor(parent?: CurveCollection) { this.parent = parent; this.chains = []; }\r\n /**\r\n * construct array of arrays of `StrokeCountMap`s\r\n * @param parent\r\n */\r\n public static createForParityRegionOrChain(parent: CurveCollection, options?: StrokeOptions): StrokeCountSection {\r\n const result = new StrokeCountSection(parent);\r\n if (parent instanceof ParityRegion) {\r\n for (const child of parent.children) {\r\n const p = StrokeCountChain.createForCurveChain(child, options);\r\n result.chains.push(p);\r\n }\r\n } else if (parent instanceof CurveChain) {\r\n result.chains.push(StrokeCountChain.createForCurveChain(parent, options));\r\n }\r\n return result;\r\n }\r\n /** test if all sections have the same structure. */\r\n public static areSectionsCompatible(sections: StrokeCountSection[], enforceCounts: boolean): boolean {\r\n if (sections.length < 2)\r\n return true; // hm.. don't know if that is useful, but nothing to check here.\r\n const numChains = sections[0].chains.length;\r\n for (let i = 1; i < sections.length; i++) {\r\n // first level: must match number of paths or loops\r\n if (sections[i].chains.length !== numChains)\r\n return false;\r\n // second level: must have same number of primitives in each path or loop\r\n for (let j = 0; j < sections[0].chains.length; j++) {\r\n const numPrimitive = sections[0].chains[j].maps.length;\r\n if (sections[i].chains[j].maps.length !== numPrimitive)\r\n return false;\r\n for (let k = 0; k < numPrimitive; k++) {\r\n if (!sections[0].chains[j].maps[k].isCompatibleComponentStructure(sections[i].chains[j].maps[k], enforceCounts))\r\n return false;\r\n }\r\n }\r\n\r\n }\r\n return true;\r\n }\r\n\r\n /** Within each section, sweep accumulate curveLength field, recording entry and exit sum in each map.\r\n * * In expected use, (a0,a1) are (0,a) where a is the (previously computed) max length among corresponding maps up and down the section arrays.\r\n */\r\n public static remapa0a1WithinEachChain(sections: StrokeCountSection[]) {\r\n for (const section of sections) {\r\n for (const chain of section.chains) {\r\n chain.applySummed01Limits(0.0);\r\n }\r\n }\r\n }\r\n\r\n private static applyMultipassVisitorCallbackNoComponents(sections: StrokeCountSection[], chainIndex: number, primitiveIndex: number,\r\n componentIndex: number | undefined, callback: StrokeCountMapMultipassVisitor) {\r\n const numSection = sections.length;\r\n if (!callback.startSweeps(chainIndex, primitiveIndex, componentIndex)) return false;\r\n if (componentIndex === undefined) {\r\n // there are corresponding primitives directly at the section, chain, primitive index:\r\n for (let pass = 0; ; pass++) {\r\n if (!callback.startPass(pass))\r\n break;\r\n for (let sectionIndex = 0; sectionIndex < numSection; sectionIndex++)\r\n if (!callback.visit(pass, sections[sectionIndex].chains[chainIndex].maps[primitiveIndex]))\r\n return false;\r\n if (!callback.endPass(pass))\r\n return false;\r\n }\r\n } else {\r\n // there are corresponding primitives at the section, chain, primitive,componentIndex\r\n // there are corresponding primitives directly at the section, chain, primitive index:\r\n for (let pass = 0; ; pass++) {\r\n if (!callback.startPass(pass))\r\n break;\r\n for (let sectionIndex = 0; sectionIndex < numSection; sectionIndex++)\r\n if (!callback.visit(pass, sections[sectionIndex].chains[chainIndex].maps[primitiveIndex].componentData![componentIndex]))\r\n return false;\r\n if (!callback.endPass(pass))\r\n return false;\r\n }\r\n\r\n }\r\n if (!callback.endSweeps(chainIndex, primitiveIndex, componentIndex)) return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Walk through the sections, emitting callbacks delimiting groups of corresponding primitives.\r\n * @param sections array of sections (possibly a single path or loop at each section, or possibly a set of parity loops.)\r\n * @param callback object to be notified during the traversal\r\n */\r\n public static runMultiPassVisitorAtCorrespondingPrimitives(sections: StrokeCountSection[], callback: StrokeCountMapMultipassVisitor): boolean {\r\n const numChainPerSection = sections[0].chains.length;\r\n for (let chainIndex = 0; chainIndex < numChainPerSection; chainIndex++) {\r\n const numPrimitive = sections[0].chains[chainIndex].maps.length;\r\n for (let primitiveIndex = 0; primitiveIndex < numPrimitive; primitiveIndex++) {\r\n if (sections[0].chains[chainIndex].maps[primitiveIndex].componentData) {\r\n const numComponent = sections[0].chains[chainIndex].maps[primitiveIndex]!.componentData!.length;\r\n for (let i = 0; i < numComponent; i++)\r\n if (!this.applyMultipassVisitorCallbackNoComponents(sections, chainIndex, primitiveIndex, i, callback))\r\n return false;\r\n\r\n } else {\r\n if (!this.applyMultipassVisitorCallbackNoComponents(sections, chainIndex, primitiveIndex, undefined, callback))\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * * Confirm that all sections in the array have the same structure.\r\n * * Within each corresponding set of entries, apply the max count to all.\r\n * @param sections array of per-section stroke count entries\r\n */\r\n public static enforceStrokeCountCompatibility(sections: StrokeCountSection[]): boolean {\r\n\r\n if (sections.length < 2)\r\n return true;\r\n if (!StrokeCountSection.areSectionsCompatible(sections, false))\r\n return false;\r\n const visitor = new StrokeCountMapVisitorApplyMaxCount();\r\n this.runMultiPassVisitorAtCorrespondingPrimitives(sections, visitor);\r\n return true;\r\n\r\n }\r\n /**\r\n * * Confirm that all sections in the array have the same structure.\r\n * * Within each corresponding set of entries up and down the sections, set curveLength as the maximum of the respective curve lengths.\r\n * * Along each section, sum curveLengths (which were just reset) to get consistent along-chain parameters\r\n * @param sections array of per-section stroke count entries\r\n */\r\n public static enforceCompatibleDistanceSums(sections: StrokeCountSection[]): boolean {\r\n\r\n if (sections.length < 2)\r\n return true;\r\n if (!StrokeCountSection.areSectionsCompatible(sections, false))\r\n return false;\r\n const visitor = new StrokeCountMapVisitorApplyMaxCurveLength();\r\n this.runMultiPassVisitorAtCorrespondingPrimitives(sections, visitor);\r\n this.remapa0a1WithinEachChain(sections);\r\n return true;\r\n\r\n }\r\n\r\n /**\r\n * Return stroked form of the section.\r\n */\r\n public getStrokes(): AnyCurve {\r\n if (this.chains.length === 1) {\r\n return this.chains[0].getStrokes();\r\n } else {\r\n const region = ParityRegion.create();\r\n for (const c of this.chains) {\r\n const strokes = c.getStrokes();\r\n if (strokes instanceof LineString3d)\r\n region.tryAddChild(Loop.create(strokes));\r\n }\r\n return region;\r\n }\r\n }\r\n /**\r\n * Given two compatible stroke sets (as returned by getStrokes) extend a range\r\n * with the distances between corresponding points.\r\n * * Each set of strokes may be:\r\n * * linestring\r\n * * ParityRegion\r\n * * CurveChain (Loop or Path)\r\n * @param strokeA first set of strokes\r\n * @param strokeB second set of strokes\r\n * @param rangeToExtend caller-allocated range to be extended.\r\n * @returns true if structures are compatible.\r\n */\r\n public static extendDistanceRangeBetweenStrokes(strokeA: AnyCurve, strokeB: AnyCurve, rangeToExtend: Range1d): boolean {\r\n if (strokeA instanceof LineString3d) {\r\n if (strokeB instanceof LineString3d) {\r\n if (strokeA.numPoints() === strokeB.numPoints()) {\r\n const n = strokeA.numPoints();\r\n const pointA = Point3d.create();\r\n const pointB = Point3d.create();\r\n const allPointA = strokeA.packedPoints;\r\n const allPointB = strokeB.packedPoints;\r\n\r\n for (let i = 0; i < n; i++) {\r\n allPointA.getPoint3dAtCheckedPointIndex(i, pointA);\r\n allPointB.getPoint3dAtCheckedPointIndex(i, pointB);\r\n rangeToExtend.extendX(pointA.distance(pointB));\r\n }\r\n return true;\r\n }\r\n }\r\n } else if (strokeA instanceof ParityRegion) {\r\n if (strokeB instanceof ParityRegion) {\r\n const childrenA = strokeA.children;\r\n const childrenB = strokeB.children;\r\n const n = childrenA.length;\r\n if (n === childrenB.length) {\r\n for (let i = 0; i < n; i++) {\r\n if (!this.extendDistanceRangeBetweenStrokes(childrenA[i], childrenB[i], rangeToExtend))\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n } else if (strokeA instanceof CurveChain) {\r\n if (strokeB instanceof CurveChain) {\r\n const childrenA = strokeA.children;\r\n const childrenB = strokeB.children;\r\n const n = childrenA.length;\r\n if (n === childrenB.length) {\r\n for (let i = 0; i < n; i++) {\r\n if (!this.extendDistanceRangeBetweenStrokes(childrenA[i], childrenB[i], rangeToExtend))\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n"]}
@@ -6,8 +6,8 @@ import { MomentData } from "../geometry4d/MomentData";
6
6
  import { Polyface } from "../polyface/Polyface";
7
7
  import { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from "../topology/Graph";
8
8
  import { MultiLineStringDataVariant } from "../topology/Triangulation";
9
- import { AnyCurve, AnyRegion } from "./CurveChain";
10
- import { BagOfCurves, ConsolidateAdjacentCurvePrimitivesOptions, CurveChain, CurveCollection } from "./CurveCollection";
9
+ import { AnyCurve, AnyRegion } from "./CurveTypes";
10
+ import { BagOfCurves, CurveChain, CurveCollection } from "./CurveCollection";
11
11
  import { CurvePrimitive } from "./CurvePrimitive";
12
12
  import { Loop, SignedLoops } from "./Loop";
13
13
  import { JointOptions, OffsetOptions } from "./OffsetOptions";
@@ -346,4 +346,18 @@ export declare class RegionOps {
346
346
  */
347
347
  static curveArrayRange(data: any, worldToLocal?: Transform): Range3d;
348
348
  }
349
+ /**
350
+ * * Options to control method `RegionOps.consolidateAdjacentPrimitives`
351
+ * @public
352
+ */
353
+ export declare class ConsolidateAdjacentCurvePrimitivesOptions {
354
+ /** True to consolidated linear geometry (e.g. separate LineSegment3d and LineString3d) into LineString3d */
355
+ consolidateLinearGeometry: boolean;
356
+ /** True to consolidate contiguous arcs */
357
+ consolidateCompatibleArcs: boolean;
358
+ /** Tolerance for collapsing identical points */
359
+ duplicatePointTolerance: number;
360
+ /** Tolerance for removing interior colinear points. */
361
+ colinearPointTolerance: number;
362
+ }
349
363
  //# sourceMappingURL=RegionOps.d.ts.map
@@ -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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"}
@@ -4,7 +4,7 @@
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.RegionOps = exports.RegionBinaryOpType = void 0;
7
+ exports.ConsolidateAdjacentCurvePrimitivesOptions = exports.RegionOps = exports.RegionBinaryOpType = void 0;
8
8
  /** @packageDocumentation
9
9
  * @module Curve
10
10
  */
@@ -687,4 +687,21 @@ function pushToInOnOutArrays(curve, select, arrayNegative, array0, arrayPositive
687
687
  else
688
688
  array0.push(curve);
689
689
  }
690
+ /**
691
+ * * Options to control method `RegionOps.consolidateAdjacentPrimitives`
692
+ * @public
693
+ */
694
+ class ConsolidateAdjacentCurvePrimitivesOptions {
695
+ constructor() {
696
+ /** True to consolidated linear geometry (e.g. separate LineSegment3d and LineString3d) into LineString3d */
697
+ this.consolidateLinearGeometry = true;
698
+ /** True to consolidate contiguous arcs */
699
+ this.consolidateCompatibleArcs = true;
700
+ /** Tolerance for collapsing identical points */
701
+ this.duplicatePointTolerance = Geometry_1.Geometry.smallMetricDistance;
702
+ /** Tolerance for removing interior colinear points. */
703
+ this.colinearPointTolerance = Geometry_1.Geometry.smallMetricDistance;
704
+ }
705
+ }
706
+ exports.ConsolidateAdjacentCurvePrimitivesOptions = ConsolidateAdjacentCurvePrimitivesOptions;
690
707
  //# sourceMappingURL=RegionOps.js.map