@itwin/core-geometry 5.5.0-dev.4 → 5.5.0-dev.5

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 (611) hide show
  1. package/lib/cjs/Geometry.d.ts +7 -0
  2. package/lib/cjs/Geometry.d.ts.map +1 -1
  3. package/lib/cjs/Geometry.js +9 -0
  4. package/lib/cjs/Geometry.js.map +1 -1
  5. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve.js +2 -1
  7. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurveOps.js +4 -1
  10. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  11. package/lib/cjs/bspline/BezierCurve3d.d.ts.map +1 -1
  12. package/lib/cjs/bspline/BezierCurve3d.js +14 -4
  13. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  14. package/lib/cjs/bspline/BezierCurve3dH.d.ts +2 -0
  15. package/lib/cjs/bspline/BezierCurve3dH.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BezierCurve3dH.js +19 -3
  17. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  18. package/lib/cjs/bspline/BezierCurveBase.d.ts +8 -2
  19. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  20. package/lib/cjs/bspline/BezierCurveBase.js +10 -4
  21. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  22. package/lib/cjs/clipping/AlternatingConvexClipTree.js +4 -4
  23. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  24. package/lib/cjs/clipping/ClipPlane.d.ts +0 -3
  25. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  26. package/lib/cjs/clipping/ClipPlane.js +9 -2
  27. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  28. package/lib/cjs/clipping/ClipPrimitive.d.ts +59 -9
  29. package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
  30. package/lib/cjs/clipping/ClipPrimitive.js +124 -55
  31. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  32. package/lib/cjs/clipping/ClipUtils.js +1 -1
  33. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  34. package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
  35. package/lib/cjs/clipping/ClipVector.js +12 -8
  36. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  37. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +0 -2
  38. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  39. package/lib/cjs/clipping/ConvexClipPlaneSet.js +19 -18
  40. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  41. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +1 -1
  42. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  43. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +4 -5
  44. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  45. package/lib/cjs/core-geometry.d.ts +0 -1
  46. package/lib/cjs/core-geometry.d.ts.map +1 -1
  47. package/lib/cjs/core-geometry.js +0 -1
  48. package/lib/cjs/core-geometry.js.map +1 -1
  49. package/lib/cjs/curve/Arc3d.js +2 -2
  50. package/lib/cjs/curve/Arc3d.js.map +1 -1
  51. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +12 -4
  52. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  53. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +52 -33
  54. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  55. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  56. package/lib/cjs/curve/CurveCollection.js +13 -6
  57. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  58. package/lib/cjs/curve/CurveCurve.js +1 -1
  59. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  60. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  61. package/lib/cjs/curve/CurveFactory.js +13 -1
  62. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  63. package/lib/cjs/curve/CurveLocationDetail.d.ts +12 -4
  64. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  65. package/lib/cjs/curve/CurveLocationDetail.js +14 -5
  66. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  67. package/lib/cjs/curve/CurvePrimitive.d.ts +5 -4
  68. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  69. package/lib/cjs/curve/CurvePrimitive.js +7 -4
  70. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  71. package/lib/cjs/curve/LineString3d.d.ts +25 -16
  72. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  73. package/lib/cjs/curve/LineString3d.js +90 -72
  74. package/lib/cjs/curve/LineString3d.js.map +1 -1
  75. package/lib/cjs/curve/Path.d.ts +0 -3
  76. package/lib/cjs/curve/Path.d.ts.map +1 -1
  77. package/lib/cjs/curve/Path.js +9 -2
  78. package/lib/cjs/curve/Path.js.map +1 -1
  79. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  80. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  81. package/lib/cjs/curve/Query/PlanarSubdivision.js +25 -31
  82. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  83. package/lib/cjs/curve/Query/StrokeCountChain.d.ts +7 -1
  84. package/lib/cjs/curve/Query/StrokeCountChain.d.ts.map +1 -1
  85. package/lib/cjs/curve/Query/StrokeCountChain.js +27 -36
  86. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  87. package/lib/cjs/curve/RegionMomentsXY.d.ts.map +1 -1
  88. package/lib/cjs/curve/RegionMomentsXY.js +7 -1
  89. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  90. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  91. package/lib/cjs/curve/RegionOps.js +8 -5
  92. package/lib/cjs/curve/RegionOps.js.map +1 -1
  93. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  94. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +6 -6
  95. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  96. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts.map +1 -1
  97. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js +4 -1
  98. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  99. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  100. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +6 -1
  101. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +5 -21
  103. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  104. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +29 -73
  105. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  106. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +55 -13
  107. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  108. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +238 -110
  109. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  110. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +1 -1
  111. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  112. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +1 -4
  113. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  114. package/lib/cjs/curve/spiral/DirectSpiral3d.js +9 -9
  115. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  116. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +11 -14
  117. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  118. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +18 -18
  119. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  120. package/lib/cjs/curve/spiral/TransitionConditionalProperties.d.ts +7 -1
  121. package/lib/cjs/curve/spiral/TransitionConditionalProperties.d.ts.map +1 -1
  122. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  123. package/lib/cjs/geometry3d/Ellipsoid.d.ts +19 -7
  124. package/lib/cjs/geometry3d/Ellipsoid.d.ts.map +1 -1
  125. package/lib/cjs/geometry3d/Ellipsoid.js +26 -11
  126. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  127. package/lib/cjs/geometry3d/FrustumAnimation.d.ts.map +1 -1
  128. package/lib/cjs/geometry3d/FrustumAnimation.js +11 -1
  129. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  130. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts +5 -1
  131. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  132. package/lib/cjs/geometry3d/GrowableFloat64Array.js +11 -1
  133. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  134. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +1 -1
  135. package/lib/cjs/geometry3d/GrowableXYArray.js +1 -1
  136. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  137. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +49 -8
  138. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  139. package/lib/cjs/geometry3d/GrowableXYZArray.js +90 -37
  140. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  141. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +100 -3
  142. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  143. package/lib/cjs/geometry3d/IndexedXYZCollection.js +125 -0
  144. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  145. package/lib/cjs/geometry3d/Matrix3d.d.ts +10 -1
  146. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  147. package/lib/cjs/geometry3d/Matrix3d.js +53 -34
  148. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  149. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +1 -1
  150. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  151. package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts +49 -2
  152. package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  153. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +67 -9
  154. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  155. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +1 -1
  156. package/lib/cjs/geometry3d/Point3dVector3d.js +1 -1
  157. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  158. package/lib/cjs/geometry3d/PointStreaming.js +1 -1
  159. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  160. package/lib/cjs/geometry3d/PolygonOps.d.ts +24 -32
  161. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  162. package/lib/cjs/geometry3d/PolygonOps.js +147 -180
  163. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  164. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +5 -5
  165. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  166. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  167. package/lib/cjs/geometry3d/PolylineOps.js +13 -3
  168. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  169. package/lib/cjs/geometry3d/Range.js.map +1 -1
  170. package/lib/cjs/geometry3d/Ray3d.d.ts +0 -3
  171. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  172. package/lib/cjs/geometry3d/Ray3d.js +5 -1
  173. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  174. package/lib/cjs/geometry3d/SortablePolygon.d.ts +2 -2
  175. package/lib/cjs/geometry3d/SortablePolygon.d.ts.map +1 -1
  176. package/lib/cjs/geometry3d/SortablePolygon.js +14 -18
  177. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  178. package/lib/cjs/geometry3d/Transform.d.ts +8 -0
  179. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  180. package/lib/cjs/geometry3d/Transform.js +15 -9
  181. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  182. package/lib/cjs/numerics/ClusterableArray.d.ts +4 -2
  183. package/lib/cjs/numerics/ClusterableArray.d.ts.map +1 -1
  184. package/lib/cjs/numerics/ClusterableArray.js +6 -4
  185. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  186. package/lib/cjs/numerics/Newton.d.ts +3 -1
  187. package/lib/cjs/numerics/Newton.d.ts.map +1 -1
  188. package/lib/cjs/numerics/Newton.js +5 -1
  189. package/lib/cjs/numerics/Newton.js.map +1 -1
  190. package/lib/cjs/polyface/AuxData.d.ts +1 -4
  191. package/lib/cjs/polyface/AuxData.d.ts.map +1 -1
  192. package/lib/cjs/polyface/AuxData.js +5 -1
  193. package/lib/cjs/polyface/AuxData.js.map +1 -1
  194. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +3 -3
  195. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  196. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  197. package/lib/cjs/polyface/Polyface.js +14 -16
  198. package/lib/cjs/polyface/Polyface.js.map +1 -1
  199. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +84 -28
  200. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  201. package/lib/cjs/polyface/PolyfaceBuilder.js +277 -217
  202. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  203. package/lib/cjs/polyface/PolyfaceClip.d.ts +4 -3
  204. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  205. package/lib/cjs/polyface/PolyfaceClip.js +11 -4
  206. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  207. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  208. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  209. package/lib/cjs/polyface/PolyfaceQuery.js +9 -7
  210. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  211. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.d.ts.map +1 -1
  212. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js +3 -2
  213. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  214. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +1 -1
  215. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +2 -2
  216. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  217. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.d.ts.map +1 -1
  218. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +14 -12
  219. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  220. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.d.ts +1 -1
  221. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.d.ts.map +1 -1
  222. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +10 -6
  223. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  224. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +4 -3
  225. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  226. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  227. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +3 -5
  228. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  229. package/lib/cjs/polyface/multiclip/XYPointBuckets.d.ts +1 -1
  230. package/lib/cjs/polyface/multiclip/XYPointBuckets.d.ts.map +1 -1
  231. package/lib/cjs/polyface/multiclip/XYPointBuckets.js +4 -8
  232. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  233. package/lib/cjs/serialization/BGFBAccessors.d.ts.map +1 -1
  234. package/lib/cjs/serialization/BGFBAccessors.js +1 -0
  235. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  236. package/lib/cjs/serialization/BGFBReader.d.ts.map +1 -1
  237. package/lib/cjs/serialization/BGFBReader.js +37 -7
  238. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  239. package/lib/cjs/serialization/BGFBWriter.d.ts +4 -4
  240. package/lib/cjs/serialization/BGFBWriter.d.ts.map +1 -1
  241. package/lib/cjs/serialization/BGFBWriter.js +24 -40
  242. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  243. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  244. package/lib/cjs/serialization/IModelJsonSchema.js +9 -3
  245. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  246. package/lib/cjs/serialization/SerializationHelpers.d.ts +0 -3
  247. package/lib/cjs/serialization/SerializationHelpers.d.ts.map +1 -1
  248. package/lib/cjs/serialization/SerializationHelpers.js +16 -7
  249. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  250. package/lib/cjs/solid/Box.d.ts +2 -2
  251. package/lib/cjs/solid/Box.d.ts.map +1 -1
  252. package/lib/cjs/solid/Box.js.map +1 -1
  253. package/lib/cjs/solid/Cone.d.ts +3 -2
  254. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  255. package/lib/cjs/solid/Cone.js +4 -1
  256. package/lib/cjs/solid/Cone.js.map +1 -1
  257. package/lib/cjs/solid/LinearSweep.d.ts +1 -1
  258. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  259. package/lib/cjs/solid/LinearSweep.js +1 -1
  260. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  261. package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
  262. package/lib/cjs/solid/RotationalSweep.js +1 -3
  263. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  264. package/lib/cjs/solid/TorusPipe.d.ts +4 -3
  265. package/lib/cjs/solid/TorusPipe.d.ts.map +1 -1
  266. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  267. package/lib/cjs/topology/ChainMerge.d.ts +4 -4
  268. package/lib/cjs/topology/ChainMerge.d.ts.map +1 -1
  269. package/lib/cjs/topology/ChainMerge.js +11 -1
  270. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  271. package/lib/cjs/topology/Graph.d.ts +2 -0
  272. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  273. package/lib/cjs/topology/Graph.js +5 -0
  274. package/lib/cjs/topology/Graph.js.map +1 -1
  275. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  276. package/lib/cjs/topology/HalfEdgeGraphSearch.js +2 -0
  277. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  278. package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
  279. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +23 -16
  280. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  281. package/lib/cjs/topology/HalfEdgePositionDetail.d.ts +20 -9
  282. package/lib/cjs/topology/HalfEdgePositionDetail.d.ts.map +1 -1
  283. package/lib/cjs/topology/HalfEdgePositionDetail.js +17 -13
  284. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  285. package/lib/cjs/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  286. package/lib/cjs/topology/HalfEdgePriorityQueue.js +3 -1
  287. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  288. package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts +6 -2
  289. package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
  290. package/lib/cjs/topology/InsertAndRetriangulateContext.js +41 -35
  291. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  292. package/lib/cjs/topology/MaskManager.d.ts +7 -3
  293. package/lib/cjs/topology/MaskManager.d.ts.map +1 -1
  294. package/lib/cjs/topology/MaskManager.js +10 -4
  295. package/lib/cjs/topology/MaskManager.js.map +1 -1
  296. package/lib/cjs/topology/RegularizeFace.d.ts.map +1 -1
  297. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  298. package/lib/cjs/topology/Triangulation.d.ts +2 -1
  299. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  300. package/lib/cjs/topology/Triangulation.js +12 -7
  301. package/lib/cjs/topology/Triangulation.js.map +1 -1
  302. package/lib/esm/Geometry.d.ts +7 -0
  303. package/lib/esm/Geometry.d.ts.map +1 -1
  304. package/lib/esm/Geometry.js +9 -0
  305. package/lib/esm/Geometry.js.map +1 -1
  306. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  307. package/lib/esm/bspline/BSplineCurve.js +2 -1
  308. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  309. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  310. package/lib/esm/bspline/BSplineCurveOps.js +4 -1
  311. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  312. package/lib/esm/bspline/BezierCurve3d.d.ts.map +1 -1
  313. package/lib/esm/bspline/BezierCurve3d.js +14 -4
  314. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  315. package/lib/esm/bspline/BezierCurve3dH.d.ts +2 -0
  316. package/lib/esm/bspline/BezierCurve3dH.d.ts.map +1 -1
  317. package/lib/esm/bspline/BezierCurve3dH.js +19 -3
  318. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  319. package/lib/esm/bspline/BezierCurveBase.d.ts +8 -2
  320. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  321. package/lib/esm/bspline/BezierCurveBase.js +10 -4
  322. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  323. package/lib/esm/clipping/AlternatingConvexClipTree.js +4 -4
  324. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  325. package/lib/esm/clipping/ClipPlane.d.ts +0 -3
  326. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  327. package/lib/esm/clipping/ClipPlane.js +9 -2
  328. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  329. package/lib/esm/clipping/ClipPrimitive.d.ts +59 -9
  330. package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
  331. package/lib/esm/clipping/ClipPrimitive.js +124 -55
  332. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  333. package/lib/esm/clipping/ClipUtils.js +1 -1
  334. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  335. package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
  336. package/lib/esm/clipping/ClipVector.js +12 -8
  337. package/lib/esm/clipping/ClipVector.js.map +1 -1
  338. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +0 -2
  339. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  340. package/lib/esm/clipping/ConvexClipPlaneSet.js +20 -19
  341. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  342. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +1 -1
  343. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  344. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +4 -5
  345. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  346. package/lib/esm/core-geometry.d.ts +0 -1
  347. package/lib/esm/core-geometry.d.ts.map +1 -1
  348. package/lib/esm/core-geometry.js +0 -1
  349. package/lib/esm/core-geometry.js.map +1 -1
  350. package/lib/esm/curve/Arc3d.js +2 -2
  351. package/lib/esm/curve/Arc3d.js.map +1 -1
  352. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +12 -4
  353. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  354. package/lib/esm/curve/CurveChainWithDistanceIndex.js +53 -34
  355. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  356. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  357. package/lib/esm/curve/CurveCollection.js +13 -6
  358. package/lib/esm/curve/CurveCollection.js.map +1 -1
  359. package/lib/esm/curve/CurveCurve.js +1 -1
  360. package/lib/esm/curve/CurveCurve.js.map +1 -1
  361. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  362. package/lib/esm/curve/CurveFactory.js +13 -1
  363. package/lib/esm/curve/CurveFactory.js.map +1 -1
  364. package/lib/esm/curve/CurveLocationDetail.d.ts +12 -4
  365. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  366. package/lib/esm/curve/CurveLocationDetail.js +14 -5
  367. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  368. package/lib/esm/curve/CurvePrimitive.d.ts +5 -4
  369. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  370. package/lib/esm/curve/CurvePrimitive.js +7 -4
  371. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  372. package/lib/esm/curve/LineString3d.d.ts +25 -16
  373. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  374. package/lib/esm/curve/LineString3d.js +90 -72
  375. package/lib/esm/curve/LineString3d.js.map +1 -1
  376. package/lib/esm/curve/Path.d.ts +0 -3
  377. package/lib/esm/curve/Path.d.ts.map +1 -1
  378. package/lib/esm/curve/Path.js +9 -2
  379. package/lib/esm/curve/Path.js.map +1 -1
  380. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  381. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  382. package/lib/esm/curve/Query/PlanarSubdivision.js +25 -31
  383. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  384. package/lib/esm/curve/Query/StrokeCountChain.d.ts +7 -1
  385. package/lib/esm/curve/Query/StrokeCountChain.d.ts.map +1 -1
  386. package/lib/esm/curve/Query/StrokeCountChain.js +27 -36
  387. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  388. package/lib/esm/curve/RegionMomentsXY.d.ts.map +1 -1
  389. package/lib/esm/curve/RegionMomentsXY.js +7 -1
  390. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  391. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  392. package/lib/esm/curve/RegionOps.js +8 -5
  393. package/lib/esm/curve/RegionOps.js.map +1 -1
  394. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  395. package/lib/esm/curve/RegionOpsClassificationSweeps.js +6 -6
  396. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  397. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts.map +1 -1
  398. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js +4 -1
  399. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  400. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  401. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +6 -1
  402. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  403. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +5 -21
  404. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  405. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +29 -73
  406. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  407. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +55 -13
  408. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  409. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +239 -111
  410. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  411. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +1 -1
  412. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  413. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +1 -4
  414. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  415. package/lib/esm/curve/spiral/DirectSpiral3d.js +9 -9
  416. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  417. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +11 -14
  418. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  419. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +18 -18
  420. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  421. package/lib/esm/curve/spiral/TransitionConditionalProperties.d.ts +7 -1
  422. package/lib/esm/curve/spiral/TransitionConditionalProperties.d.ts.map +1 -1
  423. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  424. package/lib/esm/geometry3d/Ellipsoid.d.ts +19 -7
  425. package/lib/esm/geometry3d/Ellipsoid.d.ts.map +1 -1
  426. package/lib/esm/geometry3d/Ellipsoid.js +26 -11
  427. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  428. package/lib/esm/geometry3d/FrustumAnimation.d.ts.map +1 -1
  429. package/lib/esm/geometry3d/FrustumAnimation.js +11 -1
  430. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  431. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts +5 -1
  432. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  433. package/lib/esm/geometry3d/GrowableFloat64Array.js +11 -1
  434. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  435. package/lib/esm/geometry3d/GrowableXYArray.d.ts +1 -1
  436. package/lib/esm/geometry3d/GrowableXYArray.js +1 -1
  437. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  438. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +49 -8
  439. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  440. package/lib/esm/geometry3d/GrowableXYZArray.js +90 -37
  441. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  442. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +100 -3
  443. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  444. package/lib/esm/geometry3d/IndexedXYZCollection.js +125 -0
  445. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  446. package/lib/esm/geometry3d/Matrix3d.d.ts +10 -1
  447. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  448. package/lib/esm/geometry3d/Matrix3d.js +53 -34
  449. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  450. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +1 -1
  451. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  452. package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts +49 -2
  453. package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  454. package/lib/esm/geometry3d/Point3dArrayCarrier.js +67 -9
  455. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  456. package/lib/esm/geometry3d/Point3dVector3d.d.ts +1 -1
  457. package/lib/esm/geometry3d/Point3dVector3d.js +1 -1
  458. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  459. package/lib/esm/geometry3d/PointStreaming.js +1 -1
  460. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  461. package/lib/esm/geometry3d/PolygonOps.d.ts +24 -32
  462. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  463. package/lib/esm/geometry3d/PolygonOps.js +147 -180
  464. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  465. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +5 -5
  466. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  467. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  468. package/lib/esm/geometry3d/PolylineOps.js +13 -3
  469. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  470. package/lib/esm/geometry3d/Range.js.map +1 -1
  471. package/lib/esm/geometry3d/Ray3d.d.ts +0 -3
  472. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  473. package/lib/esm/geometry3d/Ray3d.js +5 -1
  474. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  475. package/lib/esm/geometry3d/SortablePolygon.d.ts +2 -2
  476. package/lib/esm/geometry3d/SortablePolygon.d.ts.map +1 -1
  477. package/lib/esm/geometry3d/SortablePolygon.js +14 -18
  478. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  479. package/lib/esm/geometry3d/Transform.d.ts +8 -0
  480. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  481. package/lib/esm/geometry3d/Transform.js +15 -9
  482. package/lib/esm/geometry3d/Transform.js.map +1 -1
  483. package/lib/esm/numerics/ClusterableArray.d.ts +4 -2
  484. package/lib/esm/numerics/ClusterableArray.d.ts.map +1 -1
  485. package/lib/esm/numerics/ClusterableArray.js +6 -4
  486. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  487. package/lib/esm/numerics/Newton.d.ts +3 -1
  488. package/lib/esm/numerics/Newton.d.ts.map +1 -1
  489. package/lib/esm/numerics/Newton.js +5 -1
  490. package/lib/esm/numerics/Newton.js.map +1 -1
  491. package/lib/esm/polyface/AuxData.d.ts +1 -4
  492. package/lib/esm/polyface/AuxData.d.ts.map +1 -1
  493. package/lib/esm/polyface/AuxData.js +5 -1
  494. package/lib/esm/polyface/AuxData.js.map +1 -1
  495. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +3 -3
  496. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  497. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  498. package/lib/esm/polyface/Polyface.js +14 -16
  499. package/lib/esm/polyface/Polyface.js.map +1 -1
  500. package/lib/esm/polyface/PolyfaceBuilder.d.ts +84 -28
  501. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  502. package/lib/esm/polyface/PolyfaceBuilder.js +277 -217
  503. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  504. package/lib/esm/polyface/PolyfaceClip.d.ts +4 -3
  505. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  506. package/lib/esm/polyface/PolyfaceClip.js +11 -4
  507. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  508. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  509. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  510. package/lib/esm/polyface/PolyfaceQuery.js +9 -7
  511. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  512. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.d.ts.map +1 -1
  513. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js +3 -2
  514. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  515. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +1 -1
  516. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +2 -2
  517. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  518. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.d.ts.map +1 -1
  519. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +14 -12
  520. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  521. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.d.ts +1 -1
  522. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.d.ts.map +1 -1
  523. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +10 -6
  524. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  525. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +4 -3
  526. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  527. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  528. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +3 -5
  529. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  530. package/lib/esm/polyface/multiclip/XYPointBuckets.d.ts +1 -1
  531. package/lib/esm/polyface/multiclip/XYPointBuckets.d.ts.map +1 -1
  532. package/lib/esm/polyface/multiclip/XYPointBuckets.js +4 -8
  533. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  534. package/lib/esm/serialization/BGFBAccessors.d.ts.map +1 -1
  535. package/lib/esm/serialization/BGFBAccessors.js +1 -0
  536. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  537. package/lib/esm/serialization/BGFBReader.d.ts.map +1 -1
  538. package/lib/esm/serialization/BGFBReader.js +37 -7
  539. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  540. package/lib/esm/serialization/BGFBWriter.d.ts +4 -4
  541. package/lib/esm/serialization/BGFBWriter.d.ts.map +1 -1
  542. package/lib/esm/serialization/BGFBWriter.js +24 -40
  543. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  544. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  545. package/lib/esm/serialization/IModelJsonSchema.js +9 -3
  546. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  547. package/lib/esm/serialization/SerializationHelpers.d.ts +0 -3
  548. package/lib/esm/serialization/SerializationHelpers.d.ts.map +1 -1
  549. package/lib/esm/serialization/SerializationHelpers.js +16 -7
  550. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  551. package/lib/esm/solid/Box.d.ts +2 -2
  552. package/lib/esm/solid/Box.d.ts.map +1 -1
  553. package/lib/esm/solid/Box.js.map +1 -1
  554. package/lib/esm/solid/Cone.d.ts +3 -2
  555. package/lib/esm/solid/Cone.d.ts.map +1 -1
  556. package/lib/esm/solid/Cone.js +4 -1
  557. package/lib/esm/solid/Cone.js.map +1 -1
  558. package/lib/esm/solid/LinearSweep.d.ts +1 -1
  559. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  560. package/lib/esm/solid/LinearSweep.js +1 -1
  561. package/lib/esm/solid/LinearSweep.js.map +1 -1
  562. package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
  563. package/lib/esm/solid/RotationalSweep.js +1 -3
  564. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  565. package/lib/esm/solid/TorusPipe.d.ts +4 -3
  566. package/lib/esm/solid/TorusPipe.d.ts.map +1 -1
  567. package/lib/esm/solid/TorusPipe.js.map +1 -1
  568. package/lib/esm/topology/ChainMerge.d.ts +4 -4
  569. package/lib/esm/topology/ChainMerge.d.ts.map +1 -1
  570. package/lib/esm/topology/ChainMerge.js +11 -1
  571. package/lib/esm/topology/ChainMerge.js.map +1 -1
  572. package/lib/esm/topology/Graph.d.ts +2 -0
  573. package/lib/esm/topology/Graph.d.ts.map +1 -1
  574. package/lib/esm/topology/Graph.js +5 -0
  575. package/lib/esm/topology/Graph.js.map +1 -1
  576. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  577. package/lib/esm/topology/HalfEdgeGraphSearch.js +2 -0
  578. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  579. package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
  580. package/lib/esm/topology/HalfEdgePointInGraphSearch.js +23 -16
  581. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  582. package/lib/esm/topology/HalfEdgePositionDetail.d.ts +20 -9
  583. package/lib/esm/topology/HalfEdgePositionDetail.d.ts.map +1 -1
  584. package/lib/esm/topology/HalfEdgePositionDetail.js +17 -13
  585. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  586. package/lib/esm/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  587. package/lib/esm/topology/HalfEdgePriorityQueue.js +4 -2
  588. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  589. package/lib/esm/topology/InsertAndRetriangulateContext.d.ts +6 -2
  590. package/lib/esm/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
  591. package/lib/esm/topology/InsertAndRetriangulateContext.js +41 -35
  592. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  593. package/lib/esm/topology/MaskManager.d.ts +7 -3
  594. package/lib/esm/topology/MaskManager.d.ts.map +1 -1
  595. package/lib/esm/topology/MaskManager.js +10 -4
  596. package/lib/esm/topology/MaskManager.js.map +1 -1
  597. package/lib/esm/topology/RegularizeFace.d.ts.map +1 -1
  598. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  599. package/lib/esm/topology/Triangulation.d.ts +2 -1
  600. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  601. package/lib/esm/topology/Triangulation.js +12 -7
  602. package/lib/esm/topology/Triangulation.js.map +1 -1
  603. package/package.json +3 -3
  604. package/lib/cjs/serialization/GeometrySamples.d.ts +0 -705
  605. package/lib/cjs/serialization/GeometrySamples.d.ts.map +0 -1
  606. package/lib/cjs/serialization/GeometrySamples.js +0 -2433
  607. package/lib/cjs/serialization/GeometrySamples.js.map +0 -1
  608. package/lib/esm/serialization/GeometrySamples.d.ts +0 -705
  609. package/lib/esm/serialization/GeometrySamples.d.ts.map +0 -1
  610. package/lib/esm/serialization/GeometrySamples.js +0 -2428
  611. package/lib/esm/serialization/GeometrySamples.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Cone.d.ts","sourceRoot":"","sources":["../../../src/solid/Cone.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Cone.d.ts","sourceRoot":"","sources":["../../../src/solid/Cone.ts"],"names":[],"mappings":"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"}
@@ -297,12 +297,15 @@ class Cone extends SolidPrimitive_1.SolidPrimitive {
297
297
  * Directional distance query
298
298
  * * u direction is around longitude circle at maximum distance from axis.
299
299
  * * v direction is on a line of longitude between the latitude limits.
300
+ * @returns max parametric distances, packed as a `Vector2d`, or zero vector if the instance is invalid.
300
301
  */
301
302
  maxIsoParametricDistance() {
302
303
  const vectorX = this._localToWorld.matrix.columnX();
303
304
  const vectorY = this._localToWorld.matrix.columnY();
304
- const columnZ = this._localToWorld.matrix.columnZ();
305
305
  const xyNormal = vectorX.unitCrossProduct(vectorY);
306
+ if (!xyNormal)
307
+ return Point2dVector2d_1.Vector2d.createZero();
308
+ const columnZ = this._localToWorld.matrix.columnZ();
306
309
  const hZ = xyNormal.dotProduct(columnZ);
307
310
  const zSkewVector = columnZ.plusScaled(xyNormal, hZ);
308
311
  const zSkewDistance = zSkewVector.magnitudeXY();
@@ -1 +1 @@
1
- {"version":3,"file":"Cone.js","sourceRoot":"","sources":["../../../src/solid/Cone.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 Solid\r\n */\r\n\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { AxisOrder, Geometry } from \"../Geometry\";\r\nimport { GeometryHandler, UVSurface, UVSurfaceIsoParametricDistance } from \"../geometry3d/GeometryHandler\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Vector2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { SolidPrimitive } from \"./SolidPrimitive\";\r\n\r\n/**\r\n * A cone with axis along the z-axis of a (possibly skewed) local coordinate system.\r\n * * The curved surface of the cone `C` with axis `vectorZ = centerB - centerA` is parameterized over (u,v) in [0,1]x[0,1] by\r\n * `C(u,v) = centerA + vFractionToRadius(v) * (cos(u * 2pi) * vectorX + sin(u * 2pi) * vectorY) + v * vectorZ`.\r\n * * Either radius may be zero, but they may not both be zero.\r\n * * Cross section size is determined by the lengths of `vectorX`, `vectorY`, and the radii.\r\n * * If `vectorX` and `vectorY` are orthonormal, the cross sections are circular, with sections at v = 0 and v = 1 having radius\r\n * `radiusA` and `radiusB`, respectively; otherwise, the cross sections are elliptical.\r\n * * The stored matrix encapsulates `vectorX`, `vectorY`, and `vectorZ` in the respective columns. Typically the first two columns\r\n * are orthogonal and unit length, and the last is full length.\r\n * * Creating a Cone without orthogonal xy-axes of equal length is possible, but not recommended, for the resulting geometry\r\n * lacks portability; for example, such a Cone cannot be represented as a DGN element (see [[createDgnCone]]).\r\n * @public\r\n */\r\nexport class Cone extends SolidPrimitive implements UVSurface, UVSurfaceIsoParametricDistance {\r\n /** String name for schema properties */\r\n public readonly solidPrimitiveType = \"cone\";\r\n\r\n /** Local to world transform. Axes may have any nonzero length and may be non-perpendicular. */\r\n private _localToWorld: Transform;\r\n /** Nominal cross sectional radius at z=0 (scales the cone's xy-axes). */\r\n private _radiusA: number;\r\n /** Nominal cross sectional radius at z=1 (scales the cone's xy-axes). */\r\n private _radiusB: number;\r\n /** Maximum of _radiusA and _radiusB. */\r\n private _maxRadius: number;\r\n\r\n /** Constructor, inputs CONSUMED. */\r\n protected constructor(map: Transform, radiusA: number, radiusB: number, capped: boolean) {\r\n super(capped);\r\n this._localToWorld = map;\r\n this._radiusA = radiusA;\r\n this._radiusB = radiusB;\r\n this._maxRadius = Math.max(this._radiusA, this._radiusB); // um... should resolve elliptical sections\r\n }\r\n /** Return a clone of this Cone. */\r\n public clone(): Cone {\r\n return new Cone(this._localToWorld.clone(), this._radiusA, this._radiusB, this.capped);\r\n }\r\n /** Return a coordinate frame (right handed unit vectors)\r\n * * origin at center of the base circle.\r\n * * base circle in the xy plane\r\n * * z axis by right hand rule.\r\n */\r\n public getConstructiveFrame(): Transform | undefined {\r\n return this._localToWorld.cloneRigid();\r\n }\r\n /** Apply the transform to this cone's local to world coordinates.\r\n * * Note that the radii are not changed. Scaling is absorbed into the frame.\r\n * * This fails if the transformation is singular.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (transform.matrix.isSingular())\r\n return false;\r\n transform.multiplyTransformTransform(this._localToWorld, this._localToWorld);\r\n if (transform.matrix.determinant() < 0.0) {\r\n // if mirror, reverse z-axis (origin and direction) to preserve outward normals\r\n this._localToWorld.origin.addInPlace(this._localToWorld.matrix.columnZ());\r\n this._localToWorld.matrix.scaleColumnsInPlace(1, 1, -1);\r\n [this._radiusA, this._radiusB] = [this._radiusB, this._radiusA];\r\n }\r\n return true;\r\n }\r\n /**\r\n * Create a clone and immediately transform the clone.\r\n * * This fails if the transformation is singular.\r\n */\r\n public cloneTransformed(transform: Transform): Cone | undefined {\r\n const result = this.clone();\r\n return result.tryTransformInPlace(transform) ? result : undefined;\r\n }\r\n /**\r\n * Create a right circular cylinder or cone from the given base centers and radii.\r\n * * The circular cross sections are perpendicular to the axis line between the centers.\r\n * * Both radii must be of the same sign, and at least one radius must be nonzero.\r\n * * Negative radii are accepted to create an interior surface, however the downstream effects of this, combined with capping, may be problematic.\r\n */\r\n public static createAxisPoints(centerA: Point3d, centerB: Point3d, radiusA: number, radiusB: number, capped?: boolean): Cone | undefined {\r\n const zDirection = centerA.vectorTo(centerB);\r\n const a = zDirection.magnitude();\r\n if (Geometry.isSmallMetricDistance(a)) return undefined;\r\n // force near-zero radii to true zero\r\n radiusA = Geometry.correctSmallMetricDistance(radiusA);\r\n radiusB = Geometry.correctSmallMetricDistance(radiusB);\r\n // cone tip may not be \"within\" the z range.\r\n if (radiusA * radiusB < 0.0) return undefined;\r\n // at least one must be nonzero.\r\n if (radiusA + radiusB === 0.0) return undefined;\r\n const matrix = Matrix3d.createRigidHeadsUp(zDirection);\r\n matrix.scaleColumns(1.0, 1.0, a, matrix);\r\n const localToWorld = Transform.createOriginAndMatrix(centerA, matrix);\r\n return new Cone(localToWorld, radiusA, radiusB, capped ?? false);\r\n }\r\n /**\r\n * Create a general cone from cross sections parallel to the plane spanned by the given vectors.\r\n * * Circular cross sections are indicated by perpendicular vectors of the same length.\r\n * * Elliptical cross sections are indicated by non-perpendicular vectors, or vectors of different lengths.\r\n * * Cross sectional planes do not have to be perpendicular to the axis line between centers.\r\n * * Cross section size is affected both by the given vector lengths and radii. To avoid unexpected scaling,\r\n * pass orthonormal vectors for circular cross sections, or unit radii for elliptical cross sections.\r\n * * There is no validation of the input radii. For best results, they should be nonnegative, and at least one should be nonzero.\r\n */\r\n public static createBaseAndTarget(centerA: Point3d, centerB: Point3d, vectorX: Vector3d, vectorY: Vector3d, radiusA: number, radiusB: number, capped?: boolean): Cone {\r\n radiusA = Math.abs(Geometry.correctSmallMetricDistance(radiusA));\r\n radiusB = Math.abs(Geometry.correctSmallMetricDistance(radiusB));\r\n const vectorZ = centerA.vectorTo(centerB);\r\n const localToWorld = Transform.createOriginAndMatrixColumns(centerA, vectorX, vectorY, vectorZ);\r\n return new Cone(localToWorld, radiusA, radiusB, capped ?? false);\r\n }\r\n\r\n /**\r\n * Create a circular cone from the typical parameters of the DGN file.\r\n * * This method calls [[createBaseAndTarget]] with normalized vectors, `vectorY` squared against `vectorX`, and\r\n * `radiusA` and `radiusB` scaled by the original length of `vectorX`.\r\n * * These restrictions allow the cone to be represented by an element in the DGN file.\r\n */\r\n public static createDgnCone(centerA: Point3d, centerB: Point3d, vectorX: Vector3d, vectorY: Vector3d, radiusA: number, radiusB: number, capped?: boolean): Cone | undefined {\r\n const rigidMatrix = Matrix3d.createRigidFromColumns(vectorX, vectorY, AxisOrder.XYZ);\r\n if (rigidMatrix) {\r\n const vectorXMag = vectorX.magnitude();\r\n return this.createBaseAndTarget(centerA, centerB, rigidMatrix.columnX(), rigidMatrix.columnY(), radiusA * vectorXMag, radiusB * vectorXMag, capped);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** (Property accessor) Return the center point at the base plane */\r\n public getCenterA(): Point3d { return this._localToWorld.multiplyXYZ(0, 0, 0); }\r\n /** (Property accessor) */\r\n public getCenterB(): Point3d { return this._localToWorld.multiplyXYZ(0, 0, 1); }\r\n /** (Property accessor) Return the x vector in the local frame */\r\n public getVectorX(): Vector3d { return this._localToWorld.matrix.columnX(); }\r\n /** (Property accessor) Return the y vector in the local frame */\r\n public getVectorY(): Vector3d { return this._localToWorld.matrix.columnY(); }\r\n /** (Property accessor) return the radius at the base plane */\r\n public getRadiusA(): number { return this._radiusA; }\r\n /** (Property accessor) return the radius at the top plane */\r\n public getRadiusB(): number { return this._radiusB; }\r\n /** (Property accessor) return the larger of radiusA and radiusB */\r\n public getMaxRadius(): number { return this._maxRadius; }\r\n /** (Property accessor) return the radius at fraction `v` along the axis */\r\n public vFractionToRadius(v: number): number { return Geometry.interpolate(this._radiusA, v, this._radiusB); }\r\n /** (Property accessor) test if `other` is an instance of `Cone` */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof Cone; }\r\n /** (Property accessor) Test for nearly equal coordinate data. */\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof Cone) {\r\n if (this.capped !== other.capped) return false;\r\n if (!this._localToWorld.isAlmostEqualAllowZRotation(other._localToWorld)) return false;\r\n return Geometry.isSameCoordinate(this._radiusA, other._radiusA)\r\n && Geometry.isSameCoordinate(this._radiusB, other._radiusB);\r\n }\r\n return false;\r\n }\r\n /** Second step of double dispatch: call `handler.handleCone(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleCone(this);\r\n }\r\n\r\n /**\r\n * return strokes for a cross-section (elliptic arc) at specified fraction v along the axis.\r\n * * fixedStrokeCount takes priority over stroke options.\r\n * * The linestring is created by LineString3d.createForStrokes (fixedStrokeCount, options), which sets up property according to the options:\r\n * * optional fractions member\r\n * * optional uvParams. uvParams are installed as full-scale distance parameters.\r\n * * optional derivatives.\r\n * @param v fractional position along the cone axis\r\n * @param fixedStrokeCount optional stroke count.\r\n * @param options optional stroke options.\r\n */\r\n public strokeConstantVSection(v: number, fixedStrokeCount?: number, options?: StrokeOptions): LineString3d {\r\n let strokeCount = 16;\r\n if (fixedStrokeCount !== undefined)\r\n strokeCount = fixedStrokeCount;\r\n else if (options !== undefined)\r\n strokeCount = options.defaultCircleStrokes; // NEEDS WORK -- get circle stroke count with this.maxRadius !!!\r\n else {\r\n // accept the local default\r\n }\r\n strokeCount = Geometry.clampToStartEnd(strokeCount, 4, 64);\r\n const r = this.vFractionToRadius(v);\r\n const result = LineString3d.createForStrokes(fixedStrokeCount, options);\r\n const twoPi = Math.PI * 2.0;\r\n const deltaRadians = twoPi / strokeCount;\r\n let radians = 0;\r\n const fractions = result.fractions; // possibly undefined !!!\r\n const derivatives = result.packedDerivatives; // possibly undefined !!!\r\n const uvParams = result.packedUVParams; // possibly undefined !!\r\n const surfaceNormals = result.packedSurfaceNormals;\r\n const xyz = Point3d.create();\r\n const dXdu = Vector3d.create();\r\n const dXdv = Vector3d.create();\r\n const normal = Vector3d.create();\r\n const transform = this._localToWorld;\r\n let rc, rs, cc, ss;\r\n for (let i = 0; i <= strokeCount; i++) {\r\n if (i * 2 <= strokeCount)\r\n radians = i * deltaRadians;\r\n else\r\n radians = (i - strokeCount) * deltaRadians;\r\n cc = Math.cos(radians);\r\n ss = Math.sin(radians);\r\n rc = r * cc;\r\n rs = r * ss;\r\n\r\n transform.multiplyXYZ(rc, rs, v, xyz);\r\n result.addPoint(xyz);\r\n if (fractions)\r\n fractions.push(i / strokeCount);\r\n if (derivatives) {\r\n transform.matrix.multiplyXYZ(-rs * twoPi, rc * twoPi, 0.0, dXdu);\r\n derivatives.push(dXdu);\r\n }\r\n if (surfaceNormals) {\r\n // the along-hoop vector does not need to be scaled by radius -- just need the direction for a cross product.\r\n transform.matrix.multiplyXYZ(-ss, cc, 0.0, dXdu);\r\n transform.matrix.multiplyXYZ(0, 0, 1, dXdv);\r\n dXdu.unitCrossProduct(dXdv, normal);\r\n surfaceNormals.push(normal);\r\n }\r\n if (uvParams) {\r\n uvParams.pushXY(i / strokeCount, v);\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Return the Arc3d section at vFraction\r\n * @param vFraction fractional position along the sweep direction\r\n */\r\n public constantVSection(vFraction: number): CurveCollection | undefined {\r\n const r = this.vFractionToRadius(vFraction);\r\n const transform = this._localToWorld;\r\n const center = transform.multiplyXYZ(0, 0, vFraction);\r\n const vector0 = transform.matrix.multiplyXYZ(r, 0, 0);\r\n const vector90 = transform.matrix.multiplyXYZ(0, r, 0);\r\n return Loop.create(Arc3d.create(center, vector0, vector90));\r\n }\r\n /** Extend `rangeToExtend` so it includes this `Cone` instance. */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform): void {\r\n const arc0 = this.constantVSection(0.0)!;\r\n const arc1 = this.constantVSection(1.0)!;\r\n arc0.extendRange(rangeToExtend, transform);\r\n arc1.extendRange(rangeToExtend, transform);\r\n }\r\n /** Evaluate a point on the Cone surfaces, with\r\n * * v = 0 is the base plane.\r\n * * v = 1 is the top plane\r\n * * u = 0 to u = 1 wraps the angular range.\r\n */\r\n public uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d {\r\n const theta = uFraction * Math.PI * 2.0;\r\n const r = Geometry.interpolate(this._radiusA, vFraction, this._radiusB);\r\n const cosTheta = Math.cos(theta);\r\n const sinTheta = Math.sin(theta);\r\n return this._localToWorld.multiplyXYZ(r * cosTheta, r * sinTheta, vFraction, result);\r\n }\r\n /** Evaluate a point tangent plane on the Cone surfaces, with\r\n * * v = 0 is the base plane.\r\n * * v = 1 is the top plane\r\n * * u = 0 to u = 1 wraps the angular range.\r\n */\r\n public uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const theta = uFraction * Math.PI * 2.0;\r\n const r = Geometry.interpolate(this._radiusA, vFraction, this._radiusB);\r\n const drdv = this._radiusB - this._radiusA;\r\n const cosTheta = Math.cos(theta);\r\n const sinTheta = Math.sin(theta);\r\n const fTheta = 2.0 * Math.PI;\r\n return Plane3dByOriginAndVectors.createOriginAndVectors(\r\n this._localToWorld.multiplyXYZ(r * cosTheta, r * sinTheta, vFraction),\r\n this._localToWorld.multiplyVectorXYZ(-r * sinTheta * fTheta, r * cosTheta * fTheta, 0),\r\n this._localToWorld.multiplyVectorXYZ(drdv * cosTheta, drdv * sinTheta, 1.0),\r\n result);\r\n }\r\n /**\r\n * @return true if this is a closed volume.\r\n */\r\n public get isClosedVolume(): boolean {\r\n return this.capped;\r\n }\r\n /**\r\n * Directional distance query\r\n * * u direction is around longitude circle at maximum distance from axis.\r\n * * v direction is on a line of longitude between the latitude limits.\r\n */\r\n public maxIsoParametricDistance(): Vector2d {\r\n const vectorX = this._localToWorld.matrix.columnX();\r\n const vectorY = this._localToWorld.matrix.columnY();\r\n const columnZ = this._localToWorld.matrix.columnZ();\r\n\r\n const xyNormal = vectorX.unitCrossProduct(vectorY)!;\r\n const hZ = xyNormal.dotProduct(columnZ);\r\n const zSkewVector = columnZ.plusScaled(xyNormal, hZ);\r\n const zSkewDistance = zSkewVector.magnitudeXY();\r\n return Vector2d.create(Math.PI * 2 * Math.max(this._radiusA, this._radiusB),\r\n Geometry.hypotenuseXY(Math.abs(this._radiusB - this._radiusA) + zSkewDistance, hZ));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Cone.js","sourceRoot":"","sources":["../../../src/solid/Cone.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 Solid\r\n */\r\n\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { AxisOrder, Geometry } from \"../Geometry\";\r\nimport { GeometryHandler, UVSurface, UVSurfaceIsoParametricDistance } from \"../geometry3d/GeometryHandler\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Vector2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { SolidPrimitive } from \"./SolidPrimitive\";\r\n\r\n/**\r\n * A cone with axis along the z-axis of a (possibly skewed) local coordinate system.\r\n * * The curved surface of the cone `C` with axis `vectorZ = centerB - centerA` is parameterized over (u,v) in [0,1]x[0,1] by\r\n * `C(u,v) = centerA + vFractionToRadius(v) * (cos(u * 2pi) * vectorX + sin(u * 2pi) * vectorY) + v * vectorZ`.\r\n * * Either radius may be zero, but they may not both be zero.\r\n * * Cross section size is determined by the lengths of `vectorX`, `vectorY`, and the radii.\r\n * * If `vectorX` and `vectorY` are orthonormal, the cross sections are circular, with sections at v = 0 and v = 1 having radius\r\n * `radiusA` and `radiusB`, respectively; otherwise, the cross sections are elliptical.\r\n * * The stored matrix encapsulates `vectorX`, `vectorY`, and `vectorZ` in the respective columns. Typically the first two columns\r\n * are orthogonal and unit length, and the last is full length.\r\n * * Creating a Cone without orthogonal xy-axes of equal length is possible, but not recommended, for the resulting geometry\r\n * lacks portability; for example, such a Cone cannot be represented as a DGN element (see [[createDgnCone]]).\r\n * @public\r\n */\r\nexport class Cone extends SolidPrimitive implements UVSurface, UVSurfaceIsoParametricDistance {\r\n /** String name for schema properties */\r\n public readonly solidPrimitiveType = \"cone\";\r\n\r\n /** Local to world transform. Axes may have any nonzero length and may be non-perpendicular. */\r\n private _localToWorld: Transform;\r\n /** Nominal cross sectional radius at z=0 (scales the cone's xy-axes). */\r\n private _radiusA: number;\r\n /** Nominal cross sectional radius at z=1 (scales the cone's xy-axes). */\r\n private _radiusB: number;\r\n /** Maximum of _radiusA and _radiusB. */\r\n private _maxRadius: number;\r\n\r\n /** Constructor, inputs CONSUMED. */\r\n protected constructor(map: Transform, radiusA: number, radiusB: number, capped: boolean) {\r\n super(capped);\r\n this._localToWorld = map;\r\n this._radiusA = radiusA;\r\n this._radiusB = radiusB;\r\n this._maxRadius = Math.max(this._radiusA, this._radiusB); // um... should resolve elliptical sections\r\n }\r\n /** Return a clone of this Cone. */\r\n public clone(): Cone {\r\n return new Cone(this._localToWorld.clone(), this._radiusA, this._radiusB, this.capped);\r\n }\r\n /** Return a coordinate frame (right handed unit vectors)\r\n * * origin at center of the base circle.\r\n * * base circle in the xy plane\r\n * * z axis by right hand rule.\r\n */\r\n public getConstructiveFrame(): Transform | undefined {\r\n return this._localToWorld.cloneRigid();\r\n }\r\n /** Apply the transform to this cone's local to world coordinates.\r\n * * Note that the radii are not changed. Scaling is absorbed into the frame.\r\n * * This fails if the transformation is singular.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (transform.matrix.isSingular())\r\n return false;\r\n transform.multiplyTransformTransform(this._localToWorld, this._localToWorld);\r\n if (transform.matrix.determinant() < 0.0) {\r\n // if mirror, reverse z-axis (origin and direction) to preserve outward normals\r\n this._localToWorld.origin.addInPlace(this._localToWorld.matrix.columnZ());\r\n this._localToWorld.matrix.scaleColumnsInPlace(1, 1, -1);\r\n [this._radiusA, this._radiusB] = [this._radiusB, this._radiusA];\r\n }\r\n return true;\r\n }\r\n /**\r\n * Create a clone and immediately transform the clone.\r\n * * This fails if the transformation is singular.\r\n */\r\n public cloneTransformed(transform: Transform): Cone | undefined {\r\n const result = this.clone();\r\n return result.tryTransformInPlace(transform) ? result : undefined;\r\n }\r\n /**\r\n * Create a right circular cylinder or cone from the given base centers and radii.\r\n * * The circular cross sections are perpendicular to the axis line between the centers.\r\n * * Both radii must be of the same sign, and at least one radius must be nonzero.\r\n * * Negative radii are accepted to create an interior surface, however the downstream effects of this, combined with capping, may be problematic.\r\n */\r\n public static createAxisPoints(centerA: Point3d, centerB: Point3d, radiusA: number, radiusB: number, capped?: boolean): Cone | undefined {\r\n const zDirection = centerA.vectorTo(centerB);\r\n const a = zDirection.magnitude();\r\n if (Geometry.isSmallMetricDistance(a)) return undefined;\r\n // force near-zero radii to true zero\r\n radiusA = Geometry.correctSmallMetricDistance(radiusA);\r\n radiusB = Geometry.correctSmallMetricDistance(radiusB);\r\n // cone tip may not be \"within\" the z range.\r\n if (radiusA * radiusB < 0.0) return undefined;\r\n // at least one must be nonzero.\r\n if (radiusA + radiusB === 0.0) return undefined;\r\n const matrix = Matrix3d.createRigidHeadsUp(zDirection);\r\n matrix.scaleColumns(1.0, 1.0, a, matrix);\r\n const localToWorld = Transform.createOriginAndMatrix(centerA, matrix);\r\n return new Cone(localToWorld, radiusA, radiusB, capped ?? false);\r\n }\r\n /**\r\n * Create a general cone from cross sections parallel to the plane spanned by the given vectors.\r\n * * Circular cross sections are indicated by perpendicular vectors of the same length.\r\n * * Elliptical cross sections are indicated by non-perpendicular vectors, or vectors of different lengths.\r\n * * Cross sectional planes do not have to be perpendicular to the axis line between centers.\r\n * * Cross section size is affected both by the given vector lengths and radii. To avoid unexpected scaling,\r\n * pass orthonormal vectors for circular cross sections, or unit radii for elliptical cross sections.\r\n * * There is no validation of the input radii. For best results, they should be nonnegative, and at least one should be nonzero.\r\n */\r\n public static createBaseAndTarget(centerA: Point3d, centerB: Point3d, vectorX: Vector3d, vectorY: Vector3d, radiusA: number, radiusB: number, capped?: boolean): Cone {\r\n radiusA = Math.abs(Geometry.correctSmallMetricDistance(radiusA));\r\n radiusB = Math.abs(Geometry.correctSmallMetricDistance(radiusB));\r\n const vectorZ = centerA.vectorTo(centerB);\r\n const localToWorld = Transform.createOriginAndMatrixColumns(centerA, vectorX, vectorY, vectorZ);\r\n return new Cone(localToWorld, radiusA, radiusB, capped ?? false);\r\n }\r\n\r\n /**\r\n * Create a circular cone from the typical parameters of the DGN file.\r\n * * This method calls [[createBaseAndTarget]] with normalized vectors, `vectorY` squared against `vectorX`, and\r\n * `radiusA` and `radiusB` scaled by the original length of `vectorX`.\r\n * * These restrictions allow the cone to be represented by an element in the DGN file.\r\n */\r\n public static createDgnCone(centerA: Point3d, centerB: Point3d, vectorX: Vector3d, vectorY: Vector3d, radiusA: number, radiusB: number, capped?: boolean): Cone | undefined {\r\n const rigidMatrix = Matrix3d.createRigidFromColumns(vectorX, vectorY, AxisOrder.XYZ);\r\n if (rigidMatrix) {\r\n const vectorXMag = vectorX.magnitude();\r\n return this.createBaseAndTarget(centerA, centerB, rigidMatrix.columnX(), rigidMatrix.columnY(), radiusA * vectorXMag, radiusB * vectorXMag, capped);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** (Property accessor) Return the center point at the base plane */\r\n public getCenterA(): Point3d { return this._localToWorld.multiplyXYZ(0, 0, 0); }\r\n /** (Property accessor) */\r\n public getCenterB(): Point3d { return this._localToWorld.multiplyXYZ(0, 0, 1); }\r\n /** (Property accessor) Return the x vector in the local frame */\r\n public getVectorX(): Vector3d { return this._localToWorld.matrix.columnX(); }\r\n /** (Property accessor) Return the y vector in the local frame */\r\n public getVectorY(): Vector3d { return this._localToWorld.matrix.columnY(); }\r\n /** (Property accessor) return the radius at the base plane */\r\n public getRadiusA(): number { return this._radiusA; }\r\n /** (Property accessor) return the radius at the top plane */\r\n public getRadiusB(): number { return this._radiusB; }\r\n /** (Property accessor) return the larger of radiusA and radiusB */\r\n public getMaxRadius(): number { return this._maxRadius; }\r\n /** (Property accessor) return the radius at fraction `v` along the axis */\r\n public vFractionToRadius(v: number): number { return Geometry.interpolate(this._radiusA, v, this._radiusB); }\r\n /** (Property accessor) test if `other` is an instance of `Cone` */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof Cone; }\r\n /** (Property accessor) Test for nearly equal coordinate data. */\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof Cone) {\r\n if (this.capped !== other.capped) return false;\r\n if (!this._localToWorld.isAlmostEqualAllowZRotation(other._localToWorld)) return false;\r\n return Geometry.isSameCoordinate(this._radiusA, other._radiusA)\r\n && Geometry.isSameCoordinate(this._radiusB, other._radiusB);\r\n }\r\n return false;\r\n }\r\n /** Second step of double dispatch: call `handler.handleCone(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleCone(this);\r\n }\r\n\r\n /**\r\n * return strokes for a cross-section (elliptic arc) at specified fraction v along the axis.\r\n * * fixedStrokeCount takes priority over stroke options.\r\n * * The linestring is created by LineString3d.createForStrokes (fixedStrokeCount, options), which sets up property according to the options:\r\n * * optional fractions member\r\n * * optional uvParams. uvParams are installed as full-scale distance parameters.\r\n * * optional derivatives.\r\n * @param v fractional position along the cone axis\r\n * @param fixedStrokeCount optional stroke count.\r\n * @param options optional stroke options.\r\n */\r\n public strokeConstantVSection(v: number, fixedStrokeCount?: number, options?: StrokeOptions): LineString3d {\r\n let strokeCount = 16;\r\n if (fixedStrokeCount !== undefined)\r\n strokeCount = fixedStrokeCount;\r\n else if (options !== undefined)\r\n strokeCount = options.defaultCircleStrokes; // NEEDS WORK -- get circle stroke count with this.maxRadius !!!\r\n else {\r\n // accept the local default\r\n }\r\n strokeCount = Geometry.clampToStartEnd(strokeCount, 4, 64);\r\n const r = this.vFractionToRadius(v);\r\n const result = LineString3d.createForStrokes(fixedStrokeCount, options);\r\n const twoPi = Math.PI * 2.0;\r\n const deltaRadians = twoPi / strokeCount;\r\n let radians = 0;\r\n const fractions = result.fractions; // possibly undefined !!!\r\n const derivatives = result.packedDerivatives; // possibly undefined !!!\r\n const uvParams = result.packedUVParams; // possibly undefined !!\r\n const surfaceNormals = result.packedSurfaceNormals;\r\n const xyz = Point3d.create();\r\n const dXdu = Vector3d.create();\r\n const dXdv = Vector3d.create();\r\n const normal = Vector3d.create();\r\n const transform = this._localToWorld;\r\n let rc, rs, cc, ss;\r\n for (let i = 0; i <= strokeCount; i++) {\r\n if (i * 2 <= strokeCount)\r\n radians = i * deltaRadians;\r\n else\r\n radians = (i - strokeCount) * deltaRadians;\r\n cc = Math.cos(radians);\r\n ss = Math.sin(radians);\r\n rc = r * cc;\r\n rs = r * ss;\r\n\r\n transform.multiplyXYZ(rc, rs, v, xyz);\r\n result.addPoint(xyz);\r\n if (fractions)\r\n fractions.push(i / strokeCount);\r\n if (derivatives) {\r\n transform.matrix.multiplyXYZ(-rs * twoPi, rc * twoPi, 0.0, dXdu);\r\n derivatives.push(dXdu);\r\n }\r\n if (surfaceNormals) {\r\n // the along-hoop vector does not need to be scaled by radius -- just need the direction for a cross product.\r\n transform.matrix.multiplyXYZ(-ss, cc, 0.0, dXdu);\r\n transform.matrix.multiplyXYZ(0, 0, 1, dXdv);\r\n dXdu.unitCrossProduct(dXdv, normal);\r\n surfaceNormals.push(normal);\r\n }\r\n if (uvParams) {\r\n uvParams.pushXY(i / strokeCount, v);\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Return the Arc3d section at vFraction\r\n * @param vFraction fractional position along the sweep direction\r\n */\r\n public constantVSection(vFraction: number): Loop {\r\n const r = this.vFractionToRadius(vFraction);\r\n const transform = this._localToWorld;\r\n const center = transform.multiplyXYZ(0, 0, vFraction);\r\n const vector0 = transform.matrix.multiplyXYZ(r, 0, 0);\r\n const vector90 = transform.matrix.multiplyXYZ(0, r, 0);\r\n return Loop.create(Arc3d.create(center, vector0, vector90));\r\n }\r\n /** Extend `rangeToExtend` so it includes this `Cone` instance. */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform): void {\r\n const arc0 = this.constantVSection(0.0);\r\n const arc1 = this.constantVSection(1.0);\r\n arc0.extendRange(rangeToExtend, transform);\r\n arc1.extendRange(rangeToExtend, transform);\r\n }\r\n /** Evaluate a point on the Cone surfaces, with\r\n * * v = 0 is the base plane.\r\n * * v = 1 is the top plane\r\n * * u = 0 to u = 1 wraps the angular range.\r\n */\r\n public uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d {\r\n const theta = uFraction * Math.PI * 2.0;\r\n const r = Geometry.interpolate(this._radiusA, vFraction, this._radiusB);\r\n const cosTheta = Math.cos(theta);\r\n const sinTheta = Math.sin(theta);\r\n return this._localToWorld.multiplyXYZ(r * cosTheta, r * sinTheta, vFraction, result);\r\n }\r\n /** Evaluate a point tangent plane on the Cone surfaces, with\r\n * * v = 0 is the base plane.\r\n * * v = 1 is the top plane\r\n * * u = 0 to u = 1 wraps the angular range.\r\n */\r\n public uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const theta = uFraction * Math.PI * 2.0;\r\n const r = Geometry.interpolate(this._radiusA, vFraction, this._radiusB);\r\n const drdv = this._radiusB - this._radiusA;\r\n const cosTheta = Math.cos(theta);\r\n const sinTheta = Math.sin(theta);\r\n const fTheta = 2.0 * Math.PI;\r\n return Plane3dByOriginAndVectors.createOriginAndVectors(\r\n this._localToWorld.multiplyXYZ(r * cosTheta, r * sinTheta, vFraction),\r\n this._localToWorld.multiplyVectorXYZ(-r * sinTheta * fTheta, r * cosTheta * fTheta, 0),\r\n this._localToWorld.multiplyVectorXYZ(drdv * cosTheta, drdv * sinTheta, 1.0),\r\n result);\r\n }\r\n /**\r\n * @return true if this is a closed volume.\r\n */\r\n public get isClosedVolume(): boolean {\r\n return this.capped;\r\n }\r\n /**\r\n * Directional distance query\r\n * * u direction is around longitude circle at maximum distance from axis.\r\n * * v direction is on a line of longitude between the latitude limits.\r\n * @returns max parametric distances, packed as a `Vector2d`, or zero vector if the instance is invalid.\r\n */\r\n public maxIsoParametricDistance(): Vector2d {\r\n const vectorX = this._localToWorld.matrix.columnX();\r\n const vectorY = this._localToWorld.matrix.columnY();\r\n const xyNormal = vectorX.unitCrossProduct(vectorY);\r\n if (!xyNormal)\r\n return Vector2d.createZero();\r\n const columnZ = this._localToWorld.matrix.columnZ();\r\n const hZ = xyNormal.dotProduct(columnZ);\r\n const zSkewVector = columnZ.plusScaled(xyNormal, hZ);\r\n const zSkewDistance = zSkewVector.magnitudeXY();\r\n return Vector2d.create(Math.PI * 2 * Math.max(this._radiusA, this._radiusB),\r\n Geometry.hypotenuseXY(Math.abs(this._radiusB - this._radiusA) + zSkewDistance, hZ));\r\n }\r\n}\r\n"]}
@@ -76,7 +76,7 @@ export declare class LinearSweep extends SolidPrimitive {
76
76
  * Return the curves at a fraction along the sweep direction.
77
77
  * @param vFraction fractional position along the sweep direction
78
78
  */
79
- constantVSection(vFraction: number): CurveCollection | undefined;
79
+ constantVSection(vFraction: number): CurveCollection;
80
80
  /** Extend `rangeToExtend` to include this geometry. */
81
81
  extendRange(rangeToExtend: Range3d, transform?: Transform): void;
82
82
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"LinearSweep.d.ts","sourceRoot":"","sources":["../../../src/solid/LinearSweep.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,cAAc;IAC7C,wCAAwC;IACxC,SAAgB,kBAAkB,iBAAiB;IAEnD,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,UAAU,CAAW;IAE7B,OAAO;IAKP;;;;;OAKG;WACW,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS;IAMtG;;;;;;;;;;OAUG;WACW,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS;IAWlH,0CAA0C;IACnC,YAAY,IAAI,eAAe;IACtC,6EAA6E;IACtE,kBAAkB,IAAI,YAAY;IACzC,yCAAyC;IAClC,gBAAgB,IAAI,QAAQ;IACnC,2DAA2D;IACpD,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAC/C,0BAA0B;IACnB,KAAK,IAAI,WAAW;IAG3B;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAezD;;;;OAIG;IACI,oBAAoB,IAAI,SAAS,GAAG,SAAS;IAGpD;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;IAItE,uDAAuD;IACvC,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAQ5D,8DAA8D;IACvD,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG;IAG/D;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAMvE,uDAAuD;IAChD,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAahE;;OAEG;IACH,IAAW,cAAc,IAAI,OAAO,CAEnC;CACF"}
1
+ {"version":3,"file":"LinearSweep.d.ts","sourceRoot":"","sources":["../../../src/solid/LinearSweep.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,cAAc;IAC7C,wCAAwC;IACxC,SAAgB,kBAAkB,iBAAiB;IAEnD,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,UAAU,CAAW;IAE7B,OAAO;IAKP;;;;;OAKG;WACW,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS;IAMtG;;;;;;;;;;OAUG;WACW,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS;IAWlH,0CAA0C;IACnC,YAAY,IAAI,eAAe;IACtC,6EAA6E;IACtE,kBAAkB,IAAI,YAAY;IACzC,yCAAyC;IAClC,gBAAgB,IAAI,QAAQ;IACnC,2DAA2D;IACpD,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAC/C,0BAA0B;IACnB,KAAK,IAAI,WAAW;IAG3B;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAezD;;;;OAIG;IACI,oBAAoB,IAAI,SAAS,GAAG,SAAS;IAGpD;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;IAItE,uDAAuD;IACvC,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAQ5D,8DAA8D;IACvD,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG;IAG/D;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAM3D,uDAAuD;IAChD,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAahE;;OAEG;IACH,IAAW,cAAc,IAAI,OAAO,CAEnC;CACF"}
@@ -128,7 +128,7 @@ class LinearSweep extends SolidPrimitive_1.SolidPrimitive {
128
128
  */
129
129
  constantVSection(vFraction) {
130
130
  const section = this._contour.curves.clone();
131
- if (section && vFraction !== 0.0)
131
+ if (vFraction !== 0.0)
132
132
  section.tryTransformInPlace(Transform_1.Transform.createTranslation(this._direction.scale(vFraction)));
133
133
  return section;
134
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LinearSweep.js","sourceRoot":"","sources":["../../../src/solid/LinearSweep.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 Solid\r\n */\r\n\r\nimport { AnyCurve } from \"../curve/CurveTypes\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { XAndY } from \"../geometry3d/XYZProps\";\r\nimport { SolidPrimitive } from \"./SolidPrimitive\";\r\nimport { SweepContour } from \"./SweepContour\";\r\n\r\n/**\r\n * A LinearSweep is a `SolidPrimitive` defined by:\r\n * * A set of curves (any Loop, Path, or parityRegion). If the object is \"capped\", the curves must be planar.\r\n * * A sweep vector\r\n * @public\r\n */\r\nexport class LinearSweep extends SolidPrimitive {\r\n /** String name for schema properties */\r\n public readonly solidPrimitiveType = \"linearSweep\";\r\n\r\n private _contour: SweepContour;\r\n private _direction: Vector3d;\r\n\r\n private constructor(contour: SweepContour, direction: Vector3d, capped: boolean) {\r\n super(capped);\r\n this._contour = contour;\r\n this._direction = direction;\r\n }\r\n /**\r\n * Create a sweep of a starting contour.\r\n * @param contour contour to be swept, CAPTURED\r\n * @param direction sweep vector. The contour is swept the full length of the vector.\r\n * @param capped true to include end caps\r\n */\r\n public static create(contour: AnyCurve, direction: Vector3d, capped: boolean): LinearSweep | undefined {\r\n const sweepable = SweepContour.createForLinearSweep(contour, direction);\r\n if (!sweepable)\r\n return undefined;\r\n return new LinearSweep(sweepable, direction, capped);\r\n }\r\n /** Create a z-direction sweep of the polyline or polygon given as xy linestring values.\r\n * * If not capped, the xyPoints array is always used unchanged.\r\n * * If capped but the xyPoints array does not close, exact closure will be enforced by one of these:\r\n * * * If the final point is almost equal to the first, it is replaced by the exact first point.\r\n * * * if the final point is not close to the first an extra point is added.\r\n * * If capped, the point order will be reversed if necessary to produce positive volume.\r\n * @param xyPoints array of xy coordinates\r\n * @param z z value to be used for all coordinates\r\n * @param zSweep the sweep distance in the z direction.\r\n * @param capped true if caps are to be added.\r\n */\r\n public static createZSweep(xyPoints: XAndY[], z: number, zSweep: number, capped: boolean): LinearSweep | undefined {\r\n const xyz = LineString3d.createXY(xyPoints, z, capped);\r\n if (capped) {\r\n xyz.addClosurePoint();\r\n const area = PolygonOps.areaXY(xyz.points);\r\n if (area * zSweep < 0.0)\r\n xyz.points.reverse();\r\n }\r\n const contour: CurveCollection = capped ? Loop.create(xyz) : Path.create(xyz);\r\n return LinearSweep.create(contour, Vector3d.create(0, 0, zSweep), capped);\r\n }\r\n /** get a reference to the swept curves */\r\n public getCurvesRef(): CurveCollection { return this._contour.curves; }\r\n /** Get a reference to the `SweepContour` carrying the plane of the curves */\r\n public getSweepContourRef(): SweepContour { return this._contour; }\r\n /** return a clone of the sweep vector */\r\n public cloneSweepVector(): Vector3d { return this._direction.clone(); }\r\n /** Test if `other` is also an instance of `LinearSweep` */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof LinearSweep; }\r\n /** Return a deep clone */\r\n public clone(): LinearSweep {\r\n return new LinearSweep(this._contour.clone(), this._direction.clone(), this.capped);\r\n }\r\n /**\r\n * Apply a transform to the curves and sweep vector\r\n * * This fails if the transformation is singular.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (transform.matrix.isSingular())\r\n return false;\r\n if (!this._contour.tryTransformInPlace(transform))\r\n return false;\r\n transform.multiplyVector(this._direction, this._direction);\r\n if (transform.matrix.determinant() < 0.0) {\r\n // if mirror, reverse the sweep (origin and direction) to preserve outward normals\r\n if (!this._contour.tryTransformInPlace(Transform.createTranslation(this._direction)))\r\n return false;\r\n this._direction.scaleInPlace(-1.0);\r\n }\r\n return true;\r\n }\r\n\r\n /** Return a coordinate frame (right handed unit vectors)\r\n * * origin on base contour\r\n * * x, y directions from base contour.\r\n * * z direction perpendicular\r\n */\r\n public getConstructiveFrame(): Transform | undefined {\r\n return this._contour.localToWorld.cloneRigid();\r\n }\r\n /**\r\n * Return a transformed clone.\r\n * * This fails if the transformation is singular.\r\n */\r\n public cloneTransformed(transform: Transform): LinearSweep | undefined {\r\n const result = this.clone();\r\n return result.tryTransformInPlace(transform) ? result : undefined;\r\n }\r\n /** Test for near-equality of coordinates in `other` */\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof LinearSweep) {\r\n return this._contour.isAlmostEqual(other._contour)\r\n && this._direction.isAlmostEqual(other._direction)\r\n && this.capped === other.capped;\r\n }\r\n return false;\r\n }\r\n /** Invoke strongly typed `handler.handleLinearSweep(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleLinearSweep(this);\r\n }\r\n /**\r\n * Return the curves at a fraction along the sweep direction.\r\n * @param vFraction fractional position along the sweep direction\r\n */\r\n public constantVSection(vFraction: number): CurveCollection | undefined {\r\n const section = this._contour.curves.clone();\r\n if (section && vFraction !== 0.0)\r\n section.tryTransformInPlace(Transform.createTranslation(this._direction.scale(vFraction)));\r\n return section;\r\n }\r\n /** Extend `rangeToExtend` to include this geometry. */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const contourRange = this._contour.curves.range(transform);\r\n rangeToExtend.extendRange(contourRange);\r\n if (transform) {\r\n const transformedDirection = transform.multiplyVector(this._direction);\r\n contourRange.low.addInPlace(transformedDirection);\r\n contourRange.high.addInPlace(transformedDirection);\r\n } else {\r\n contourRange.low.addInPlace(this._direction);\r\n contourRange.high.addInPlace(this._direction);\r\n }\r\n rangeToExtend.extendRange(contourRange);\r\n }\r\n /**\r\n * @return true if this is a closed volume.\r\n */\r\n public get isClosedVolume(): boolean {\r\n return this.capped && this._contour.curves.isAnyRegionType;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"LinearSweep.js","sourceRoot":"","sources":["../../../src/solid/LinearSweep.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 Solid\r\n */\r\n\r\nimport { AnyCurve } from \"../curve/CurveTypes\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { XAndY } from \"../geometry3d/XYZProps\";\r\nimport { SolidPrimitive } from \"./SolidPrimitive\";\r\nimport { SweepContour } from \"./SweepContour\";\r\n\r\n/**\r\n * A LinearSweep is a `SolidPrimitive` defined by:\r\n * * A set of curves (any Loop, Path, or parityRegion). If the object is \"capped\", the curves must be planar.\r\n * * A sweep vector\r\n * @public\r\n */\r\nexport class LinearSweep extends SolidPrimitive {\r\n /** String name for schema properties */\r\n public readonly solidPrimitiveType = \"linearSweep\";\r\n\r\n private _contour: SweepContour;\r\n private _direction: Vector3d;\r\n\r\n private constructor(contour: SweepContour, direction: Vector3d, capped: boolean) {\r\n super(capped);\r\n this._contour = contour;\r\n this._direction = direction;\r\n }\r\n /**\r\n * Create a sweep of a starting contour.\r\n * @param contour contour to be swept, CAPTURED\r\n * @param direction sweep vector. The contour is swept the full length of the vector.\r\n * @param capped true to include end caps\r\n */\r\n public static create(contour: AnyCurve, direction: Vector3d, capped: boolean): LinearSweep | undefined {\r\n const sweepable = SweepContour.createForLinearSweep(contour, direction);\r\n if (!sweepable)\r\n return undefined;\r\n return new LinearSweep(sweepable, direction, capped);\r\n }\r\n /** Create a z-direction sweep of the polyline or polygon given as xy linestring values.\r\n * * If not capped, the xyPoints array is always used unchanged.\r\n * * If capped but the xyPoints array does not close, exact closure will be enforced by one of these:\r\n * * * If the final point is almost equal to the first, it is replaced by the exact first point.\r\n * * * if the final point is not close to the first an extra point is added.\r\n * * If capped, the point order will be reversed if necessary to produce positive volume.\r\n * @param xyPoints array of xy coordinates\r\n * @param z z value to be used for all coordinates\r\n * @param zSweep the sweep distance in the z direction.\r\n * @param capped true if caps are to be added.\r\n */\r\n public static createZSweep(xyPoints: XAndY[], z: number, zSweep: number, capped: boolean): LinearSweep | undefined {\r\n const xyz = LineString3d.createXY(xyPoints, z, capped);\r\n if (capped) {\r\n xyz.addClosurePoint();\r\n const area = PolygonOps.areaXY(xyz.points);\r\n if (area * zSweep < 0.0)\r\n xyz.points.reverse();\r\n }\r\n const contour: CurveCollection = capped ? Loop.create(xyz) : Path.create(xyz);\r\n return LinearSweep.create(contour, Vector3d.create(0, 0, zSweep), capped);\r\n }\r\n /** get a reference to the swept curves */\r\n public getCurvesRef(): CurveCollection { return this._contour.curves; }\r\n /** Get a reference to the `SweepContour` carrying the plane of the curves */\r\n public getSweepContourRef(): SweepContour { return this._contour; }\r\n /** return a clone of the sweep vector */\r\n public cloneSweepVector(): Vector3d { return this._direction.clone(); }\r\n /** Test if `other` is also an instance of `LinearSweep` */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof LinearSweep; }\r\n /** Return a deep clone */\r\n public clone(): LinearSweep {\r\n return new LinearSweep(this._contour.clone(), this._direction.clone(), this.capped);\r\n }\r\n /**\r\n * Apply a transform to the curves and sweep vector\r\n * * This fails if the transformation is singular.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (transform.matrix.isSingular())\r\n return false;\r\n if (!this._contour.tryTransformInPlace(transform))\r\n return false;\r\n transform.multiplyVector(this._direction, this._direction);\r\n if (transform.matrix.determinant() < 0.0) {\r\n // if mirror, reverse the sweep (origin and direction) to preserve outward normals\r\n if (!this._contour.tryTransformInPlace(Transform.createTranslation(this._direction)))\r\n return false;\r\n this._direction.scaleInPlace(-1.0);\r\n }\r\n return true;\r\n }\r\n\r\n /** Return a coordinate frame (right handed unit vectors)\r\n * * origin on base contour\r\n * * x, y directions from base contour.\r\n * * z direction perpendicular\r\n */\r\n public getConstructiveFrame(): Transform | undefined {\r\n return this._contour.localToWorld.cloneRigid();\r\n }\r\n /**\r\n * Return a transformed clone.\r\n * * This fails if the transformation is singular.\r\n */\r\n public cloneTransformed(transform: Transform): LinearSweep | undefined {\r\n const result = this.clone();\r\n return result.tryTransformInPlace(transform) ? result : undefined;\r\n }\r\n /** Test for near-equality of coordinates in `other` */\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof LinearSweep) {\r\n return this._contour.isAlmostEqual(other._contour)\r\n && this._direction.isAlmostEqual(other._direction)\r\n && this.capped === other.capped;\r\n }\r\n return false;\r\n }\r\n /** Invoke strongly typed `handler.handleLinearSweep(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleLinearSweep(this);\r\n }\r\n /**\r\n * Return the curves at a fraction along the sweep direction.\r\n * @param vFraction fractional position along the sweep direction\r\n */\r\n public constantVSection(vFraction: number): CurveCollection {\r\n const section = this._contour.curves.clone();\r\n if (vFraction !== 0.0)\r\n section.tryTransformInPlace(Transform.createTranslation(this._direction.scale(vFraction)));\r\n return section;\r\n }\r\n /** Extend `rangeToExtend` to include this geometry. */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const contourRange = this._contour.curves.range(transform);\r\n rangeToExtend.extendRange(contourRange);\r\n if (transform) {\r\n const transformedDirection = transform.multiplyVector(this._direction);\r\n contourRange.low.addInPlace(transformedDirection);\r\n contourRange.high.addInPlace(transformedDirection);\r\n } else {\r\n contourRange.low.addInPlace(this._direction);\r\n contourRange.high.addInPlace(this._direction);\r\n }\r\n rangeToExtend.extendRange(contourRange);\r\n }\r\n /**\r\n * @return true if this is a closed volume.\r\n */\r\n public get isClosedVolume(): boolean {\r\n return this.capped && this._contour.curves.isAnyRegionType;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RotationalSweep.d.ts","sourceRoot":"","sources":["../../../src/solid/RotationalSweep.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,cAAc;IACjD,wCAAwC;IACxC,SAAgB,kBAAkB,qBAAqB;IAEvD,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO;IAMP;;;;;;OAMG;WACW,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS;IAQrH;;;;;OAKG;IACI,oBAAoB,IAAI,SAAS,GAAG,SAAS;IAQpD,0DAA0D;IACnD,YAAY,IAAI,KAAK;IAG5B,8CAA8C;IACvC,SAAS,IAAI,eAAe;IAGnC,2EAA2E;IACpE,kBAAkB,IAAI,YAAY;IAGzC,8BAA8B;IACvB,QAAQ,IAAI,KAAK;IAGxB,6CAA6C;IACtC,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAG/C,uDAAuD;IACvC,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAS5D,0BAA0B;IACnB,KAAK,IAAI,eAAe;IAG/B;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAWzD;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS;IAI1E,gFAAgF;IACzE,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG;IAG/D,mGAAmG;IAC5F,8BAA8B,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS;IAOvF;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAOvE,wDAAwD;IACjD,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAoBxD,kDAAkD;IAClD,IAAW,cAAc,IAAI,OAAO,CAEnC;CACF"}
1
+ {"version":3,"file":"RotationalSweep.d.ts","sourceRoot":"","sources":["../../../src/solid/RotationalSweep.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,cAAc;IACjD,wCAAwC;IACxC,SAAgB,kBAAkB,qBAAqB;IAEvD,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO;IAMP;;;;;;OAMG;WACW,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS;IAQrH;;;;;OAKG;IACI,oBAAoB,IAAI,SAAS,GAAG,SAAS;IAQpD,0DAA0D;IACnD,YAAY,IAAI,KAAK;IAG5B,8CAA8C;IACvC,SAAS,IAAI,eAAe;IAGnC,2EAA2E;IACpE,kBAAkB,IAAI,YAAY;IAGzC,8BAA8B;IACvB,QAAQ,IAAI,KAAK;IAGxB,6CAA6C;IACtC,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAG/C,uDAAuD;IACvC,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAS5D,0BAA0B;IACnB,KAAK,IAAI,eAAe;IAG/B;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAWzD;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS;IAI1E,gFAAgF;IACzE,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG;IAG/D,mGAAmG;IAC5F,8BAA8B,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS;IAOvF;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAKvE,wDAAwD;IACjD,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAoBxD,kDAAkD;IAClD,IAAW,cAAc,IAAI,OAAO,CAEnC;CACF"}
@@ -135,9 +135,7 @@ class RotationalSweep extends SolidPrimitive_1.SolidPrimitive {
135
135
  */
136
136
  constantVSection(vFraction) {
137
137
  const section = this._contour.curves.clone();
138
- if (section) {
139
- section.tryTransformInPlace(this.getFractionalRotationTransform(vFraction));
140
- }
138
+ section.tryTransformInPlace(this.getFractionalRotationTransform(vFraction));
141
139
  return section;
142
140
  }
143
141
  /** Extend range using sampled points on the surface. */
@@ -1 +1 @@
1
- {"version":3,"file":"RotationalSweep.js","sourceRoot":"","sources":["../../../src/solid/RotationalSweep.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 Solid\r\n */\r\n\r\nimport { AnyCurve } from \"../curve/CurveTypes\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { AxisOrder, Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { SolidPrimitive } from \"./SolidPrimitive\";\r\nimport { SweepContour } from \"./SweepContour\";\r\n\r\n/**\r\n * A RotationalSweep is:\r\n * * A planar contour (any Loop, Path, or parityRegion)\r\n * * An axis vector.\r\n * * The planar contour is expected to be in the plane of the axis vector.\r\n * * The contour may have points and/or lines that are on the axis, but otherwise is entirely on one side of the axis.\r\n * * A sweep angle.\r\n * @public\r\n */\r\nexport class RotationalSweep extends SolidPrimitive {\r\n /** String name for schema properties */\r\n public readonly solidPrimitiveType = \"rotationalSweep\";\r\n\r\n private _contour: SweepContour;\r\n private _normalizedAxis: Ray3d;\r\n private _sweepAngle: Angle;\r\n private constructor(contour: SweepContour, normalizedAxis: Ray3d, sweepAngle: Angle, capped: boolean) {\r\n super(capped);\r\n this._contour = contour;\r\n this._normalizedAxis = normalizedAxis;\r\n this._sweepAngle = sweepAngle;\r\n }\r\n /**\r\n * Create a rotational sweep.\r\n * @param contour profile to sweep, coplanar with axis (CAPTURED).\r\n * @param axis rotation axis.\r\n * @param sweepAngle signed angular sweep.\r\n * @param capped whether to cap the surface to make a solid.\r\n */\r\n public static create(contour: AnyCurve, axis: Ray3d, sweepAngle: Angle, capped: boolean): RotationalSweep | undefined {\r\n if (!axis.direction.normalizeInPlace())\r\n return undefined;\r\n const sweepable = SweepContour.createForRotation(contour, axis);\r\n if (!sweepable)\r\n return undefined;\r\n return new RotationalSweep(sweepable, axis, sweepAngle.clone(), capped);\r\n }\r\n /**\r\n * Return a coordinate frame (right handed unit vectors).\r\n * * origin at origin of rotation ray.\r\n * * z direction along the rotation ray.\r\n * * y direction perpendicular to the base contour plane.\r\n */\r\n public getConstructiveFrame(): Transform | undefined {\r\n const contourPerpendicular = this._contour.localToWorld.matrix.columnZ();\r\n const axes = Matrix3d.createRigidFromColumns(contourPerpendicular, this._normalizedAxis.direction, AxisOrder.YZX);\r\n if (axes) {\r\n return Transform.createOriginAndMatrix(this._normalizedAxis.origin, axes);\r\n }\r\n return undefined;\r\n }\r\n /** Return clone of (not reference to) the axis vector. */\r\n public cloneAxisRay(): Ray3d {\r\n return this._normalizedAxis.clone();\r\n }\r\n /** Return (REFERENCE TO) the swept curves. */\r\n public getCurves(): CurveCollection {\r\n return this._contour.curves;\r\n }\r\n /** Return (REFERENCE TO) the swept curves with containing plane markup. */\r\n public getSweepContourRef(): SweepContour {\r\n return this._contour;\r\n }\r\n /** Return the sweep angle. */\r\n public getSweep(): Angle {\r\n return this._sweepAngle.clone();\r\n }\r\n /** Test if `other` is a `RotationalSweep` */\r\n public isSameGeometryClass(other: any): boolean {\r\n return other instanceof RotationalSweep;\r\n }\r\n /** Test for same axis, capping, and swept geometry. */\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof RotationalSweep) {\r\n return this._contour.isAlmostEqual(other._contour)\r\n && this._normalizedAxis.isAlmostEqual(other._normalizedAxis)\r\n && this._sweepAngle.isAlmostEqual(other._sweepAngle)\r\n && this.capped === other.capped;\r\n }\r\n return false;\r\n }\r\n /** Return a deep clone */\r\n public clone(): RotationalSweep {\r\n return new RotationalSweep(this._contour.clone(), this._normalizedAxis.clone(), this._sweepAngle.clone(), this.capped);\r\n }\r\n /**\r\n * Transform the contour and axis.\r\n * * This fails if the transformation is singular.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (transform.matrix.isSingular())\r\n return false;\r\n if (this._contour.tryTransformInPlace(transform)) {\r\n this._normalizedAxis.transformInPlace(transform);\r\n if (transform.matrix.determinant() < 0.0)\r\n this._sweepAngle.setRadians(-this._sweepAngle.radians);\r\n return this._normalizedAxis.direction.normalizeInPlace();\r\n }\r\n return false;\r\n }\r\n /**\r\n * Return a transformed clone.\r\n * * This fails if the transformation is singular.\r\n */\r\n public cloneTransformed(transform: Transform): RotationalSweep | undefined {\r\n const result = this.clone();\r\n return result.tryTransformInPlace(transform) ? result : undefined;\r\n }\r\n /** Dispatch to strongly typed handler `handler.handleRotationalSweep(this)`. */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleRotationalSweep(this);\r\n }\r\n /** Return a transform that rotates around the rotational axis by a fraction of the total sweep. */\r\n public getFractionalRotationTransform(vFraction: number, result?: Transform): Transform {\r\n const radians = this._sweepAngle.radians * vFraction;\r\n const rotation = Transform.createFixedPointAndMatrix(this._normalizedAxis.origin,\r\n Matrix3d.createRotationAroundVector(this._normalizedAxis.direction, Angle.createRadians(radians),\r\n result ? result.matrix : undefined) as Matrix3d);\r\n return rotation;\r\n }\r\n /**\r\n * Return the curves of a constant-v section of the solid.\r\n * @param vFraction fractional position along the sweep direction\r\n */\r\n public constantVSection(vFraction: number): CurveCollection | undefined {\r\n const section = this._contour.curves.clone();\r\n if (section) {\r\n section.tryTransformInPlace(this.getFractionalRotationTransform(vFraction));\r\n }\r\n return section;\r\n }\r\n /** Extend range using sampled points on the surface. */\r\n public extendRange(range: Range3d, transform?: Transform) {\r\n const degreeStep = 360 / 32;\r\n const options = StrokeOptions.createForCurves();\r\n options.angleTol = Angle.createDegrees(degreeStep);\r\n const strokes = this._contour.curves.cloneStroked(options);\r\n const numStep = Geometry.stepCount(degreeStep, this._sweepAngle.degrees, 4, 32);\r\n const stepTransform = Transform.createIdentity();\r\n if (transform) {\r\n const compositeTransform = Transform.createIdentity();\r\n for (let i = 0; i <= numStep; i++) {\r\n transform.multiplyTransformTransform(\r\n this.getFractionalRotationTransform(i / numStep, stepTransform), compositeTransform,\r\n );\r\n strokes.extendRange(range, compositeTransform);\r\n }\r\n } else {\r\n for (let i = 0; i <= numStep; i++)\r\n strokes.extendRange(range, this.getFractionalRotationTransform(i / numStep, stepTransform));\r\n }\r\n }\r\n /** Specify if the sweep forms a closed volume. */\r\n public get isClosedVolume(): boolean {\r\n return this.capped || this._sweepAngle.isFullCircle;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RotationalSweep.js","sourceRoot":"","sources":["../../../src/solid/RotationalSweep.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 Solid\r\n */\r\n\r\nimport { AnyCurve } from \"../curve/CurveTypes\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { AxisOrder, Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { SolidPrimitive } from \"./SolidPrimitive\";\r\nimport { SweepContour } from \"./SweepContour\";\r\n\r\n/**\r\n * A RotationalSweep is:\r\n * * A planar contour (any Loop, Path, or parityRegion)\r\n * * An axis vector.\r\n * * The planar contour is expected to be in the plane of the axis vector.\r\n * * The contour may have points and/or lines that are on the axis, but otherwise is entirely on one side of the axis.\r\n * * A sweep angle.\r\n * @public\r\n */\r\nexport class RotationalSweep extends SolidPrimitive {\r\n /** String name for schema properties */\r\n public readonly solidPrimitiveType = \"rotationalSweep\";\r\n\r\n private _contour: SweepContour;\r\n private _normalizedAxis: Ray3d;\r\n private _sweepAngle: Angle;\r\n private constructor(contour: SweepContour, normalizedAxis: Ray3d, sweepAngle: Angle, capped: boolean) {\r\n super(capped);\r\n this._contour = contour;\r\n this._normalizedAxis = normalizedAxis;\r\n this._sweepAngle = sweepAngle;\r\n }\r\n /**\r\n * Create a rotational sweep.\r\n * @param contour profile to sweep, coplanar with axis (CAPTURED).\r\n * @param axis rotation axis.\r\n * @param sweepAngle signed angular sweep.\r\n * @param capped whether to cap the surface to make a solid.\r\n */\r\n public static create(contour: AnyCurve, axis: Ray3d, sweepAngle: Angle, capped: boolean): RotationalSweep | undefined {\r\n if (!axis.direction.normalizeInPlace())\r\n return undefined;\r\n const sweepable = SweepContour.createForRotation(contour, axis);\r\n if (!sweepable)\r\n return undefined;\r\n return new RotationalSweep(sweepable, axis, sweepAngle.clone(), capped);\r\n }\r\n /**\r\n * Return a coordinate frame (right handed unit vectors).\r\n * * origin at origin of rotation ray.\r\n * * z direction along the rotation ray.\r\n * * y direction perpendicular to the base contour plane.\r\n */\r\n public getConstructiveFrame(): Transform | undefined {\r\n const contourPerpendicular = this._contour.localToWorld.matrix.columnZ();\r\n const axes = Matrix3d.createRigidFromColumns(contourPerpendicular, this._normalizedAxis.direction, AxisOrder.YZX);\r\n if (axes) {\r\n return Transform.createOriginAndMatrix(this._normalizedAxis.origin, axes);\r\n }\r\n return undefined;\r\n }\r\n /** Return clone of (not reference to) the axis vector. */\r\n public cloneAxisRay(): Ray3d {\r\n return this._normalizedAxis.clone();\r\n }\r\n /** Return (REFERENCE TO) the swept curves. */\r\n public getCurves(): CurveCollection {\r\n return this._contour.curves;\r\n }\r\n /** Return (REFERENCE TO) the swept curves with containing plane markup. */\r\n public getSweepContourRef(): SweepContour {\r\n return this._contour;\r\n }\r\n /** Return the sweep angle. */\r\n public getSweep(): Angle {\r\n return this._sweepAngle.clone();\r\n }\r\n /** Test if `other` is a `RotationalSweep` */\r\n public isSameGeometryClass(other: any): boolean {\r\n return other instanceof RotationalSweep;\r\n }\r\n /** Test for same axis, capping, and swept geometry. */\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof RotationalSweep) {\r\n return this._contour.isAlmostEqual(other._contour)\r\n && this._normalizedAxis.isAlmostEqual(other._normalizedAxis)\r\n && this._sweepAngle.isAlmostEqual(other._sweepAngle)\r\n && this.capped === other.capped;\r\n }\r\n return false;\r\n }\r\n /** Return a deep clone */\r\n public clone(): RotationalSweep {\r\n return new RotationalSweep(this._contour.clone(), this._normalizedAxis.clone(), this._sweepAngle.clone(), this.capped);\r\n }\r\n /**\r\n * Transform the contour and axis.\r\n * * This fails if the transformation is singular.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (transform.matrix.isSingular())\r\n return false;\r\n if (this._contour.tryTransformInPlace(transform)) {\r\n this._normalizedAxis.transformInPlace(transform);\r\n if (transform.matrix.determinant() < 0.0)\r\n this._sweepAngle.setRadians(-this._sweepAngle.radians);\r\n return this._normalizedAxis.direction.normalizeInPlace();\r\n }\r\n return false;\r\n }\r\n /**\r\n * Return a transformed clone.\r\n * * This fails if the transformation is singular.\r\n */\r\n public cloneTransformed(transform: Transform): RotationalSweep | undefined {\r\n const result = this.clone();\r\n return result.tryTransformInPlace(transform) ? result : undefined;\r\n }\r\n /** Dispatch to strongly typed handler `handler.handleRotationalSweep(this)`. */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleRotationalSweep(this);\r\n }\r\n /** Return a transform that rotates around the rotational axis by a fraction of the total sweep. */\r\n public getFractionalRotationTransform(vFraction: number, result?: Transform): Transform {\r\n const radians = this._sweepAngle.radians * vFraction;\r\n const rotation = Transform.createFixedPointAndMatrix(this._normalizedAxis.origin,\r\n Matrix3d.createRotationAroundVector(this._normalizedAxis.direction, Angle.createRadians(radians),\r\n result ? result.matrix : undefined) as Matrix3d);\r\n return rotation;\r\n }\r\n /**\r\n * Return the curves of a constant-v section of the solid.\r\n * @param vFraction fractional position along the sweep direction\r\n */\r\n public constantVSection(vFraction: number): CurveCollection | undefined {\r\n const section = this._contour.curves.clone();\r\n section.tryTransformInPlace(this.getFractionalRotationTransform(vFraction));\r\n return section;\r\n }\r\n /** Extend range using sampled points on the surface. */\r\n public extendRange(range: Range3d, transform?: Transform) {\r\n const degreeStep = 360 / 32;\r\n const options = StrokeOptions.createForCurves();\r\n options.angleTol = Angle.createDegrees(degreeStep);\r\n const strokes = this._contour.curves.cloneStroked(options);\r\n const numStep = Geometry.stepCount(degreeStep, this._sweepAngle.degrees, 4, 32);\r\n const stepTransform = Transform.createIdentity();\r\n if (transform) {\r\n const compositeTransform = Transform.createIdentity();\r\n for (let i = 0; i <= numStep; i++) {\r\n transform.multiplyTransformTransform(\r\n this.getFractionalRotationTransform(i / numStep, stepTransform), compositeTransform,\r\n );\r\n strokes.extendRange(range, compositeTransform);\r\n }\r\n } else {\r\n for (let i = 0; i <= numStep; i++)\r\n strokes.extendRange(range, this.getFractionalRotationTransform(i / numStep, stepTransform));\r\n }\r\n }\r\n /** Specify if the sweep forms a closed volume. */\r\n public get isClosedVolume(): boolean {\r\n return this.capped || this._sweepAngle.isFullCircle;\r\n }\r\n}\r\n"]}
@@ -2,8 +2,9 @@
2
2
  * @module Solid
3
3
  */
4
4
  import { Arc3d } from "../curve/Arc3d";
5
- import { CurveCollection } from "../curve/CurveCollection";
6
5
  import { GeometryQuery } from "../curve/GeometryQuery";
6
+ import { Loop } from "../curve/Loop";
7
+ import { Path } from "../curve/Path";
7
8
  import { Angle } from "../geometry3d/Angle";
8
9
  import { GeometryHandler, UVSurface, UVSurfaceIsoParametricDistance } from "../geometry3d/GeometryHandler";
9
10
  import { Plane3dByOriginAndVectors } from "../geometry3d/Plane3dByOriginAndVectors";
@@ -111,9 +112,9 @@ export declare class TorusPipe extends SolidPrimitive implements UVSurface, UVSu
111
112
  * Return the Arc3d section at vFraction. For the TorusPipe, this is a minor circle.
112
113
  * @param vFraction fractional position along the sweep direction
113
114
  */
114
- constantVSection(v: number): CurveCollection | undefined;
115
+ constantVSection(v: number): Loop;
115
116
  /** Return an arc at constant u, and arc sweep matching this TorusPipe sweep. */
116
- constantUSection(uFraction: number): CurveCollection | undefined;
117
+ constantUSection(uFraction: number): Path;
117
118
  /** extend `rangeToExtend` to include this `TorusPipe` */
118
119
  extendRange(rangeToExtend: Range3d, transform?: Transform): void;
119
120
  /** Evaluate as a uv surface
@@ -1 +1 @@
1
- {"version":3,"file":"TorusPipe.d.ts","sourceRoot":"","sources":["../../../src/solid/TorusPipe.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIvD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAC3G,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,SAAU,SAAQ,cAAe,YAAW,SAAS,EAAE,8BAA8B;IAChG,wCAAwC;IACxC,SAAgB,kBAAkB,eAAe;IAEjD,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,WAAW,CAAU;IAG7B,SAAS,aAAa,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO;IAQrG,qCAAqC;IAC9B,KAAK,IAAI,SAAS;IAKzB;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAUzD;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS;IAIpE;;;;;;OAMG;WACW,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IAkC7I,qEAAqE;WACvD,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO;IAK/J;;;OAGG;WACW,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IAcrG;;;;OAIG;IACI,oBAAoB,IAAI,SAAS,GAAG,SAAS;IAGpD,kEAAkE;IAC3D,WAAW,IAAI,OAAO;IAC7B,oEAAoE;IAC7D,YAAY,IAAI,QAAQ;IAI/B,oEAAoE;IAC7D,YAAY,IAAI,QAAQ;IAI/B,0CAA0C;IACnC,YAAY,IAAI,QAAQ;IAI/B,iEAAiE;IAC1D,cAAc,IAAI,MAAM;IAC/B,iEAAiE;IAC1D,cAAc,IAAI,MAAM;IAC/B,kDAAkD;IAC3C,aAAa,IAAI,KAAK;IAC7B,mDAAmD;IAC5C,aAAa,IAAI,OAAO;IAC/B,6EAA6E;IACtE,gBAAgB,IAAI,MAAM;IACjC,yEAAyE;IAClE,iBAAiB,IAAI,SAAS;IACrC,mDAAmD;IAC5C,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAE/C,4DAA4D;IAC5C,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAyB5D;OACG;IACI,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAC5C,4EAA4E;IACrE,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG;IAI/D;;;OAGG;IACI,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAW/D,gFAAgF;IACzE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAavE,yDAAyD;IAClD,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAmDhE;;;OAGG;IACI,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAUzE;;;OAGG;IACI,4BAA4B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,yBAAyB,GAAG,yBAAyB;IAoBxH;;;;OAIG;IACI,wBAAwB,IAAI,QAAQ;IAK3C;;OAEG;IACH,IAAW,cAAc,IAAI,OAAO,CAEnC;CAEF"}
1
+ {"version":3,"file":"TorusPipe.d.ts","sourceRoot":"","sources":["../../../src/solid/TorusPipe.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAC3G,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,SAAU,SAAQ,cAAe,YAAW,SAAS,EAAE,8BAA8B;IAChG,wCAAwC;IACxC,SAAgB,kBAAkB,eAAe;IAEjD,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,WAAW,CAAU;IAG7B,SAAS,aAAa,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO;IAQrG,qCAAqC;IAC9B,KAAK,IAAI,SAAS;IAKzB;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAUzD;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS;IAIpE;;;;;;OAMG;WACW,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IAkC7I,qEAAqE;WACvD,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO;IAK/J;;;OAGG;WACW,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IAcrG;;;;OAIG;IACI,oBAAoB,IAAI,SAAS,GAAG,SAAS;IAGpD,kEAAkE;IAC3D,WAAW,IAAI,OAAO;IAC7B,oEAAoE;IAC7D,YAAY,IAAI,QAAQ;IAI/B,oEAAoE;IAC7D,YAAY,IAAI,QAAQ;IAI/B,0CAA0C;IACnC,YAAY,IAAI,QAAQ;IAI/B,iEAAiE;IAC1D,cAAc,IAAI,MAAM;IAC/B,iEAAiE;IAC1D,cAAc,IAAI,MAAM;IAC/B,kDAAkD;IAC3C,aAAa,IAAI,KAAK;IAC7B,mDAAmD;IAC5C,aAAa,IAAI,OAAO;IAC/B,6EAA6E;IACtE,gBAAgB,IAAI,MAAM;IACjC,yEAAyE;IAClE,iBAAiB,IAAI,SAAS;IACrC,mDAAmD;IAC5C,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAE/C,4DAA4D;IAC5C,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAyB5D;OACG;IACI,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAC5C,4EAA4E;IACrE,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG;IAI/D;;;OAGG;IACI,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAWxC,gFAAgF;IACzE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAahD,yDAAyD;IAClD,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAmDhE;;;OAGG;IACI,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAUzE;;;OAGG;IACI,4BAA4B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,yBAAyB,GAAG,yBAAyB;IAoBxH;;;;OAIG;IACI,wBAAwB,IAAI,QAAQ;IAK3C;;OAEG;IACH,IAAW,cAAc,IAAI,OAAO,CAEnC;CAEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"TorusPipe.js","sourceRoot":"","sources":["../../../src/solid/TorusPipe.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 Solid\r\n */\r\n\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\r\nimport { GeometryHandler, UVSurface, UVSurfaceIsoParametricDistance } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Vector2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { SolidPrimitive } from \"./SolidPrimitive\";\r\n\r\n/**\r\n * A torus pipe is a partial torus (donut).\r\n * * In its local coordinate system, the z-axis passes through the donut hole.\r\n * * The \"major hoop\" circular arc is defined for theta in the angular sweep. Its formula in local coordinates:\r\n * * `vectorTheta0 = (radiusA, 0, 0)`\r\n * * `vectorTheta90 = (0, radiusA, 0)`\r\n * * `M(theta) = vectorTheta0 * cos(theta) + vectorTheta90 * sin(theta)`\r\n * * The \"minor hoop\" circular arc is defined for phi in [0,2pi]. Its formula, centered at the origin:\r\n * * `vectorPhi0 = (radiusB * cos(theta), radiusB * sin(theta), 0)`\r\n * * `vectorPhi90 = (0, 0, radiusB)`\r\n * * `m(phi) = vectorPhi0 * cos(phi) + vectorPhi90 * sin(phi)`\r\n * * Thus the torus pipe in local coordinates has the formula:\r\n * * `T(theta, phi) = M(theta) + m(phi)`\r\n * * The stored form of the torus pipe is oriented for positive volume:\r\n * * Both radii are positive, with radiusA >= radiusB > 0\r\n * * The sweep is positive\r\n * * The coordinate system has positive determinant.\r\n * * For uv parameterization,\r\n * * u is around the minor hoop, with u in [0,1] mapping to phi in [0, 2pi]\r\n * * v is along the major hoop, with v in [0,1] mapping to theta in the angular sweep\r\n * * a constant v section is a full circle\r\n * * a constant u section is an arc with the same angular sweep as the torusPipe\r\n * @public\r\n */\r\nexport class TorusPipe extends SolidPrimitive implements UVSurface, UVSurfaceIsoParametricDistance {\r\n /** String name for schema properties */\r\n public readonly solidPrimitiveType = \"torusPipe\";\r\n\r\n private _localToWorld: Transform; // nominally rigid, but x,z column scales contribute to radiusA,radiusB\r\n private _radiusA: number; // radius of (large) circle in xy plane\r\n private _radiusB: number; // radius of (small) circle in xz plane.\r\n private _sweep: Angle;\r\n private _isReversed: boolean;\r\n\r\n // constructor captures the pointers!\r\n protected constructor(map: Transform, radiusA: number, radiusB: number, sweep: Angle, capped: boolean) {\r\n super(capped);\r\n this._localToWorld = map;\r\n this._radiusA = radiusA;\r\n this._radiusB = radiusB;\r\n this._sweep = sweep;\r\n this._isReversed = false;\r\n }\r\n /** return a copy of the TorusPipe */\r\n public clone(): TorusPipe {\r\n const result = new TorusPipe(this._localToWorld.clone(), this._radiusA, this._radiusB, this._sweep.clone(), this.capped);\r\n result._isReversed = this._isReversed;\r\n return result;\r\n }\r\n /**\r\n * Apply `transform` to the local coordinate system.\r\n * * Fails if the transformation is singular.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (transform.matrix.isSingular())\r\n return false;\r\n transform.multiplyTransformTransform(this._localToWorld, this._localToWorld);\r\n if (transform.matrix.determinant() < 0.0) {\r\n // if mirror, reverse z-axis to preserve outward normals\r\n this._localToWorld.matrix.scaleColumnsInPlace(1, 1, -1);\r\n }\r\n return true;\r\n }\r\n /**\r\n * Clone this TorusPipe and transform the clone.\r\n * * Fails if the transformation is singular.\r\n */\r\n public cloneTransformed(transform: Transform): TorusPipe | undefined {\r\n const result = this.clone();\r\n return result.tryTransformInPlace(transform) ? result : undefined;\r\n }\r\n /** Create a new `TorusPipe`\r\n * @param frame local to world transformation. For best results, the matrix part should be a pure rotation.\r\n * @param majorRadius major hoop radius\r\n * @param minorRadius minor hoop radius\r\n * @param sweep sweep angle for major circle, with positive sweep from x axis towards y axis.\r\n * @param capped true for circular caps\r\n */\r\n public static createInFrame(frame: Transform, majorRadius: number, minorRadius: number, sweep: Angle, capped: boolean): TorusPipe | undefined {\r\n // force near-zero radii to true zero\r\n majorRadius = Math.abs(Geometry.correctSmallMetricDistance(majorRadius));\r\n minorRadius = Math.abs(Geometry.correctSmallMetricDistance(minorRadius));\r\n if (majorRadius < minorRadius)\r\n return undefined;\r\n if (majorRadius === 0.0)\r\n return undefined;\r\n if (minorRadius === 0.0)\r\n return undefined;\r\n if (sweep.isAlmostZero)\r\n return undefined;\r\n\r\n // remove mirror and negative sweep\r\n let yScale = 1.0;\r\n let zScale = 1.0;\r\n let isReversed = false;\r\n if (frame.matrix.determinant() < 0.0)\r\n zScale *= -1.0;\r\n const sweep1 = sweep.clone();\r\n if (sweep.radians < 0.0) {\r\n sweep1.setRadians(-sweep.radians);\r\n zScale *= -1.0;\r\n yScale *= -1.0;\r\n isReversed = true;\r\n }\r\n const frame1 = frame.clone();\r\n frame1.matrix.scaleColumnsInPlace(1, yScale, zScale);\r\n\r\n const result = new TorusPipe(frame1, majorRadius, minorRadius, sweep1, capped);\r\n result._isReversed = isReversed;\r\n return result;\r\n }\r\n\r\n /** Create a TorusPipe from the typical parameters of the Dgn file */\r\n public static createDgnTorusPipe(center: Point3d, vectorX: Vector3d, vectorY: Vector3d, majorRadius: number, minorRadius: number, sweep: Angle, capped: boolean) {\r\n const vectorZ = vectorX.unitCrossProductWithDefault(vectorY, 0, 0, 1);\r\n const frame = Transform.createOriginAndMatrixColumns(center, vectorX, vectorY, vectorZ);\r\n return TorusPipe.createInFrame(frame, majorRadius, minorRadius, sweep, capped);\r\n }\r\n /**\r\n * Create a TorusPipe from major arc and minor radius.\r\n * For best results, `arc` should be circular; otherwise, circularity is coerced.\r\n */\r\n public static createAlongArc(arc: Arc3d, minorRadius: number, capped: boolean): TorusPipe | undefined {\r\n if (!Angle.isAlmostEqualRadiansAllowPeriodShift(0.0, arc.sweep.startRadians))\r\n arc = arc.cloneInRotatedBasis(arc.sweep.startAngle);\r\n if (!arc.isCircular) { // ensure circularity by squaring the axes and equating their lengths\r\n const perpVector90 = arc.perpendicularVector.sizedCrossProduct(arc.vector0, arc.matrixRef.columnXMagnitude());\r\n if (!perpVector90)\r\n return undefined;\r\n arc = Arc3d.create(arc.center, arc.vector0, perpVector90, arc.sweep);\r\n }\r\n const data = arc.toScaledMatrix3d();\r\n const rigidFrame = Transform.createOriginAndMatrix(arc.center, data.axes);\r\n return TorusPipe.createInFrame(rigidFrame, data.r0, minorRadius, Angle.createRadians(arc.sweep.sweepRadians), capped);\r\n }\r\n\r\n /** Return a coordinate frame (right handed, unit axes)\r\n * * origin at center of major circle\r\n * * major circle in plane of first two columns\r\n * * last column perpendicular to first two\r\n */\r\n public getConstructiveFrame(): Transform | undefined {\r\n return this._localToWorld.cloneRigid();\r\n }\r\n /** Return the center of the torus pipe (inside the donut hole) */\r\n public cloneCenter(): Point3d { return this._localToWorld.getOrigin(); }\r\n /** return unit vector along the x axis (in the major hoop plane) */\r\n public cloneVectorX(): Vector3d {\r\n const xAxis = this._localToWorld.matrix.columnX();\r\n return xAxis.normalizeWithDefault(1, 0, 0, xAxis);\r\n }\r\n /** return unit vector along the y axis (in the major hoop plane) */\r\n public cloneVectorY(): Vector3d {\r\n const yAxis = this._localToWorld.matrix.columnY();\r\n return yAxis.normalizeWithDefault(0, 1, 0, yAxis);\r\n }\r\n /** return unit vector along the z axis */\r\n public cloneVectorZ(): Vector3d {\r\n const zAxis = this._localToWorld.matrix.columnZ();\r\n return zAxis.normalizeWithDefault(0, 0, 1, zAxis);\r\n }\r\n /** get the major hoop radius (`radiusA`) in world coordinates */\r\n public getMajorRadius(): number { return this._radiusA * this._localToWorld.matrix.columnXMagnitude(); }\r\n /** get the minor hoop radius (`radiusB`) in world coordinates */\r\n public getMinorRadius(): number { return this._radiusB * this._localToWorld.matrix.columnZMagnitude(); }\r\n /** get the sweep angle along the major circle. */\r\n public getSweepAngle(): Angle { return this._sweep.clone(); }\r\n /** Ask if this TorusPipe is labeled as reversed */\r\n public getIsReversed(): boolean { return this._isReversed; }\r\n /** Return the sweep angle as a fraction of full 360 degrees (2PI radians) */\r\n public getThetaFraction(): number { return this._sweep.radians / (Math.PI * 2.0); }\r\n /** Return a (clone of) the TorusPipe's local to world transformation. */\r\n public cloneLocalToWorld(): Transform { return this._localToWorld.clone(); }\r\n /** ask if `other` is an instance of `TorusPipe` */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof TorusPipe; }\r\n\r\n /** test if `this` and `other` have nearly equal geometry */\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof TorusPipe) {\r\n if ((!this._sweep.isFullCircle) && this.capped !== other.capped)\r\n return false;\r\n // Compare getter output so that we can equate TorusPipes created/transformed in equivalent ways.\r\n // In particular, the column vectors contribute their scale to the radii, so we ignore their length.\r\n if (!this.cloneCenter().isAlmostEqual(other.cloneCenter()))\r\n return false;\r\n if (!this.cloneVectorX().isAlmostEqual(other.cloneVectorX()))\r\n return false;\r\n if (!this.cloneVectorY().isAlmostEqual(other.cloneVectorY()))\r\n return false;\r\n if (!this.cloneVectorZ().isAlmostEqual(other.cloneVectorZ()))\r\n return false;\r\n if (!Geometry.isSameCoordinate(this.getMinorRadius(), other.getMinorRadius()))\r\n return false;\r\n if (!Geometry.isSameCoordinate(this.getMajorRadius(), other.getMajorRadius()))\r\n return false;\r\n if (!this.getSweepAngle().isAlmostEqualNoPeriodShift(other.getSweepAngle()))\r\n return false;\r\n // ignore _isReversed; it doesn't affect geometry\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Return the angle (in radians) for given fractional position around the major hoop.\r\n */\r\n public vFractionToRadians(v: number): number { return this._sweep.radians * v; }\r\n /** Second step of double dispatch: call `handler.handleTorusPipe(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleTorusPipe(this);\r\n }\r\n\r\n /**\r\n * Return the Arc3d section at vFraction. For the TorusPipe, this is a minor circle.\r\n * @param vFraction fractional position along the sweep direction\r\n */\r\n public constantVSection(v: number): CurveCollection | undefined {\r\n const thetaRadians = this.vFractionToRadians(v);\r\n const c0 = Math.cos(thetaRadians);\r\n const s0 = Math.sin(thetaRadians);\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const center = this._localToWorld.multiplyXYZ(majorRadius * c0, majorRadius * s0, 0);\r\n const vector0 = this._localToWorld.multiplyVectorXYZ(minorRadius * c0, minorRadius * s0, 0);\r\n const vector90 = this._localToWorld.multiplyVectorXYZ(0, 0, minorRadius);\r\n return Loop.create(Arc3d.create(center, vector0, vector90));\r\n }\r\n /** Return an arc at constant u, and arc sweep matching this TorusPipe sweep. */\r\n public constantUSection(uFraction: number): CurveCollection | undefined {\r\n const theta1Radians = this._sweep.radians;\r\n const phiRadians = uFraction * 2 * Math.PI;\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const transform = this._localToWorld;\r\n const axes = transform.matrix;\r\n const center = this._localToWorld.multiplyXYZ(0, 0, minorRadius * Math.sin(phiRadians));\r\n const rxy = majorRadius + minorRadius * Math.cos(phiRadians);\r\n const vector0 = axes.multiplyXYZ(rxy, 0, 0);\r\n const vector90 = axes.multiplyXYZ(0, rxy, 0);\r\n return Path.create(Arc3d.create(center, vector0, vector90, AngleSweep.createStartEndRadians(0.0, theta1Radians)));\r\n }\r\n /** extend `rangeToExtend` to include this `TorusPipe` */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const theta1Radians = this._sweep.radians;\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const transform0 = this._localToWorld;\r\n const numThetaSample = Math.ceil(theta1Radians / (Math.PI / 16.0));\r\n const numHalfPhiSample = 16;\r\n let phi0 = 0;\r\n let dPhi = 0;\r\n let numPhiSample = 0;\r\n let theta = 0;\r\n let cosTheta = 0;\r\n let sinTheta = 0;\r\n let rxy = 0;\r\n let phi = 0;\r\n let j = 0;\r\n const dTheta = theta1Radians / numThetaSample;\r\n for (let i = 0; i <= numThetaSample; i++) {\r\n theta = i * dTheta;\r\n cosTheta = Math.cos(theta);\r\n sinTheta = Math.sin(theta);\r\n // At the ends, do the entire phi circle.\r\n // Otherwise only do the outer half\r\n if (i === 0 || i === numThetaSample) {\r\n phi0 = -Math.PI;\r\n dPhi = 2.0 * Math.PI / numHalfPhiSample;\r\n numPhiSample = numHalfPhiSample;\r\n } else {\r\n phi0 = -0.5 * Math.PI;\r\n dPhi = Math.PI / numHalfPhiSample;\r\n numPhiSample = 2 * numHalfPhiSample - 1;\r\n }\r\n if (transform) {\r\n for (j = 0; j <= numPhiSample; j++) {\r\n phi = phi0 + j * dPhi;\r\n rxy = majorRadius + minorRadius * Math.cos(phi);\r\n rangeToExtend.extendTransformTransformedXYZ(transform, transform0,\r\n cosTheta * rxy, sinTheta * rxy,\r\n Math.sin(phi) * minorRadius);\r\n }\r\n } else {\r\n for (j = 0; j <= numPhiSample; j++) {\r\n phi = phi0 + j * dPhi;\r\n rxy = majorRadius + minorRadius * Math.cos(phi);\r\n rangeToExtend.extendTransformedXYZ(transform0,\r\n cosTheta * rxy, sinTheta * rxy,\r\n Math.sin(phi) * minorRadius);\r\n }\r\n }\r\n }\r\n }\r\n /** Evaluate as a uv surface\r\n * @param u fractional position in minor (phi)\r\n * @param v fractional position on major (theta) arc\r\n */\r\n public uvFractionToPoint(u: number, v: number, result?: Point3d): Point3d {\r\n const thetaRadians = v * this._sweep.radians;\r\n const phiRadians = u * Math.PI * 2.0;\r\n const cosTheta = Math.cos(thetaRadians);\r\n const sinTheta = Math.sin(thetaRadians);\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const rxy = majorRadius + Math.cos(phiRadians) * minorRadius;\r\n return this._localToWorld.multiplyXYZ(rxy * cosTheta, rxy * sinTheta, minorRadius * Math.sin(phiRadians), result);\r\n }\r\n /** Evaluate as a uv surface, returning point and two vectors.\r\n * @param u fractional position in minor (phi)\r\n * @param v fractional position on major (theta) arc\r\n */\r\n public uvFractionToPointAndTangents(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const thetaRadians = v * this._sweep.radians;\r\n const phiRadians = u * Math.PI * 2.0;\r\n const fTheta = this._sweep.radians;\r\n const fPhi = Math.PI * 2.0;\r\n const cosTheta = Math.cos(thetaRadians);\r\n const sinTheta = Math.sin(thetaRadians);\r\n const sinPhi = Math.sin(phiRadians);\r\n const cosPhi = Math.cos(phiRadians);\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const rxy = majorRadius + Math.cos(phiRadians) * minorRadius;\r\n const rSinPhi = minorRadius * sinPhi;\r\n const rCosPhi = minorRadius * cosPhi; // appears only as derivative of rSinPhi.\r\n return Plane3dByOriginAndVectors.createOriginAndVectors(\r\n this._localToWorld.multiplyXYZ(cosTheta * rxy, sinTheta * rxy, rSinPhi),\r\n this._localToWorld.multiplyVectorXYZ(-cosTheta * rSinPhi * fPhi, -sinTheta * rSinPhi * fPhi, rCosPhi * fPhi),\r\n this._localToWorld.multiplyVectorXYZ(-rxy * sinTheta * fTheta, rxy * cosTheta * fTheta, 0),\r\n result);\r\n }\r\n /**\r\n * Directional distance query\r\n * * u direction is around the (full) minor hoop\r\n * * v direction is around the outer radius, sum of (absolute values of) major and minor radii.\r\n */\r\n public maxIsoParametricDistance(): Vector2d {\r\n const a = Math.abs(this.getMajorRadius());\r\n const b = Math.abs(this.getMinorRadius());\r\n return Vector2d.create(b * Math.PI * 2.0, (a + b) * this._sweep.radians);\r\n }\r\n /**\r\n * @return true if this is a closed volume.\r\n */\r\n public get isClosedVolume(): boolean {\r\n return this.capped || this._sweep.isFullCircle;\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"TorusPipe.js","sourceRoot":"","sources":["../../../src/solid/TorusPipe.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 Solid\r\n */\r\n\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\r\nimport { GeometryHandler, UVSurface, UVSurfaceIsoParametricDistance } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Vector2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { SolidPrimitive } from \"./SolidPrimitive\";\r\n\r\n/**\r\n * A torus pipe is a partial torus (donut).\r\n * * In its local coordinate system, the z-axis passes through the donut hole.\r\n * * The \"major hoop\" circular arc is defined for theta in the angular sweep. Its formula in local coordinates:\r\n * * `vectorTheta0 = (radiusA, 0, 0)`\r\n * * `vectorTheta90 = (0, radiusA, 0)`\r\n * * `M(theta) = vectorTheta0 * cos(theta) + vectorTheta90 * sin(theta)`\r\n * * The \"minor hoop\" circular arc is defined for phi in [0,2pi]. Its formula, centered at the origin:\r\n * * `vectorPhi0 = (radiusB * cos(theta), radiusB * sin(theta), 0)`\r\n * * `vectorPhi90 = (0, 0, radiusB)`\r\n * * `m(phi) = vectorPhi0 * cos(phi) + vectorPhi90 * sin(phi)`\r\n * * Thus the torus pipe in local coordinates has the formula:\r\n * * `T(theta, phi) = M(theta) + m(phi)`\r\n * * The stored form of the torus pipe is oriented for positive volume:\r\n * * Both radii are positive, with radiusA >= radiusB > 0\r\n * * The sweep is positive\r\n * * The coordinate system has positive determinant.\r\n * * For uv parameterization,\r\n * * u is around the minor hoop, with u in [0,1] mapping to phi in [0, 2pi]\r\n * * v is along the major hoop, with v in [0,1] mapping to theta in the angular sweep\r\n * * a constant v section is a full circle\r\n * * a constant u section is an arc with the same angular sweep as the torusPipe\r\n * @public\r\n */\r\nexport class TorusPipe extends SolidPrimitive implements UVSurface, UVSurfaceIsoParametricDistance {\r\n /** String name for schema properties */\r\n public readonly solidPrimitiveType = \"torusPipe\";\r\n\r\n private _localToWorld: Transform; // nominally rigid, but x,z column scales contribute to radiusA,radiusB\r\n private _radiusA: number; // radius of (large) circle in xy plane\r\n private _radiusB: number; // radius of (small) circle in xz plane.\r\n private _sweep: Angle;\r\n private _isReversed: boolean;\r\n\r\n // constructor captures the pointers!\r\n protected constructor(map: Transform, radiusA: number, radiusB: number, sweep: Angle, capped: boolean) {\r\n super(capped);\r\n this._localToWorld = map;\r\n this._radiusA = radiusA;\r\n this._radiusB = radiusB;\r\n this._sweep = sweep;\r\n this._isReversed = false;\r\n }\r\n /** return a copy of the TorusPipe */\r\n public clone(): TorusPipe {\r\n const result = new TorusPipe(this._localToWorld.clone(), this._radiusA, this._radiusB, this._sweep.clone(), this.capped);\r\n result._isReversed = this._isReversed;\r\n return result;\r\n }\r\n /**\r\n * Apply `transform` to the local coordinate system.\r\n * * Fails if the transformation is singular.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (transform.matrix.isSingular())\r\n return false;\r\n transform.multiplyTransformTransform(this._localToWorld, this._localToWorld);\r\n if (transform.matrix.determinant() < 0.0) {\r\n // if mirror, reverse z-axis to preserve outward normals\r\n this._localToWorld.matrix.scaleColumnsInPlace(1, 1, -1);\r\n }\r\n return true;\r\n }\r\n /**\r\n * Clone this TorusPipe and transform the clone.\r\n * * Fails if the transformation is singular.\r\n */\r\n public cloneTransformed(transform: Transform): TorusPipe | undefined {\r\n const result = this.clone();\r\n return result.tryTransformInPlace(transform) ? result : undefined;\r\n }\r\n /** Create a new `TorusPipe`\r\n * @param frame local to world transformation. For best results, the matrix part should be a pure rotation.\r\n * @param majorRadius major hoop radius\r\n * @param minorRadius minor hoop radius\r\n * @param sweep sweep angle for major circle, with positive sweep from x axis towards y axis.\r\n * @param capped true for circular caps\r\n */\r\n public static createInFrame(frame: Transform, majorRadius: number, minorRadius: number, sweep: Angle, capped: boolean): TorusPipe | undefined {\r\n // force near-zero radii to true zero\r\n majorRadius = Math.abs(Geometry.correctSmallMetricDistance(majorRadius));\r\n minorRadius = Math.abs(Geometry.correctSmallMetricDistance(minorRadius));\r\n if (majorRadius < minorRadius)\r\n return undefined;\r\n if (majorRadius === 0.0)\r\n return undefined;\r\n if (minorRadius === 0.0)\r\n return undefined;\r\n if (sweep.isAlmostZero)\r\n return undefined;\r\n\r\n // remove mirror and negative sweep\r\n let yScale = 1.0;\r\n let zScale = 1.0;\r\n let isReversed = false;\r\n if (frame.matrix.determinant() < 0.0)\r\n zScale *= -1.0;\r\n const sweep1 = sweep.clone();\r\n if (sweep.radians < 0.0) {\r\n sweep1.setRadians(-sweep.radians);\r\n zScale *= -1.0;\r\n yScale *= -1.0;\r\n isReversed = true;\r\n }\r\n const frame1 = frame.clone();\r\n frame1.matrix.scaleColumnsInPlace(1, yScale, zScale);\r\n\r\n const result = new TorusPipe(frame1, majorRadius, minorRadius, sweep1, capped);\r\n result._isReversed = isReversed;\r\n return result;\r\n }\r\n\r\n /** Create a TorusPipe from the typical parameters of the Dgn file */\r\n public static createDgnTorusPipe(center: Point3d, vectorX: Vector3d, vectorY: Vector3d, majorRadius: number, minorRadius: number, sweep: Angle, capped: boolean) {\r\n const vectorZ = vectorX.unitCrossProductWithDefault(vectorY, 0, 0, 1);\r\n const frame = Transform.createOriginAndMatrixColumns(center, vectorX, vectorY, vectorZ);\r\n return TorusPipe.createInFrame(frame, majorRadius, minorRadius, sweep, capped);\r\n }\r\n /**\r\n * Create a TorusPipe from major arc and minor radius.\r\n * For best results, `arc` should be circular; otherwise, circularity is coerced.\r\n */\r\n public static createAlongArc(arc: Arc3d, minorRadius: number, capped: boolean): TorusPipe | undefined {\r\n if (!Angle.isAlmostEqualRadiansAllowPeriodShift(0.0, arc.sweep.startRadians))\r\n arc = arc.cloneInRotatedBasis(arc.sweep.startAngle);\r\n if (!arc.isCircular) { // ensure circularity by squaring the axes and equating their lengths\r\n const perpVector90 = arc.perpendicularVector.sizedCrossProduct(arc.vector0, arc.matrixRef.columnXMagnitude());\r\n if (!perpVector90)\r\n return undefined;\r\n arc = Arc3d.create(arc.center, arc.vector0, perpVector90, arc.sweep);\r\n }\r\n const data = arc.toScaledMatrix3d();\r\n const rigidFrame = Transform.createOriginAndMatrix(arc.center, data.axes);\r\n return TorusPipe.createInFrame(rigidFrame, data.r0, minorRadius, Angle.createRadians(arc.sweep.sweepRadians), capped);\r\n }\r\n\r\n /** Return a coordinate frame (right handed, unit axes)\r\n * * origin at center of major circle\r\n * * major circle in plane of first two columns\r\n * * last column perpendicular to first two\r\n */\r\n public getConstructiveFrame(): Transform | undefined {\r\n return this._localToWorld.cloneRigid();\r\n }\r\n /** Return the center of the torus pipe (inside the donut hole) */\r\n public cloneCenter(): Point3d { return this._localToWorld.getOrigin(); }\r\n /** return unit vector along the x axis (in the major hoop plane) */\r\n public cloneVectorX(): Vector3d {\r\n const xAxis = this._localToWorld.matrix.columnX();\r\n return xAxis.normalizeWithDefault(1, 0, 0, xAxis);\r\n }\r\n /** return unit vector along the y axis (in the major hoop plane) */\r\n public cloneVectorY(): Vector3d {\r\n const yAxis = this._localToWorld.matrix.columnY();\r\n return yAxis.normalizeWithDefault(0, 1, 0, yAxis);\r\n }\r\n /** return unit vector along the z axis */\r\n public cloneVectorZ(): Vector3d {\r\n const zAxis = this._localToWorld.matrix.columnZ();\r\n return zAxis.normalizeWithDefault(0, 0, 1, zAxis);\r\n }\r\n /** get the major hoop radius (`radiusA`) in world coordinates */\r\n public getMajorRadius(): number { return this._radiusA * this._localToWorld.matrix.columnXMagnitude(); }\r\n /** get the minor hoop radius (`radiusB`) in world coordinates */\r\n public getMinorRadius(): number { return this._radiusB * this._localToWorld.matrix.columnZMagnitude(); }\r\n /** get the sweep angle along the major circle. */\r\n public getSweepAngle(): Angle { return this._sweep.clone(); }\r\n /** Ask if this TorusPipe is labeled as reversed */\r\n public getIsReversed(): boolean { return this._isReversed; }\r\n /** Return the sweep angle as a fraction of full 360 degrees (2PI radians) */\r\n public getThetaFraction(): number { return this._sweep.radians / (Math.PI * 2.0); }\r\n /** Return a (clone of) the TorusPipe's local to world transformation. */\r\n public cloneLocalToWorld(): Transform { return this._localToWorld.clone(); }\r\n /** ask if `other` is an instance of `TorusPipe` */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof TorusPipe; }\r\n\r\n /** test if `this` and `other` have nearly equal geometry */\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof TorusPipe) {\r\n if ((!this._sweep.isFullCircle) && this.capped !== other.capped)\r\n return false;\r\n // Compare getter output so that we can equate TorusPipes created/transformed in equivalent ways.\r\n // In particular, the column vectors contribute their scale to the radii, so we ignore their length.\r\n if (!this.cloneCenter().isAlmostEqual(other.cloneCenter()))\r\n return false;\r\n if (!this.cloneVectorX().isAlmostEqual(other.cloneVectorX()))\r\n return false;\r\n if (!this.cloneVectorY().isAlmostEqual(other.cloneVectorY()))\r\n return false;\r\n if (!this.cloneVectorZ().isAlmostEqual(other.cloneVectorZ()))\r\n return false;\r\n if (!Geometry.isSameCoordinate(this.getMinorRadius(), other.getMinorRadius()))\r\n return false;\r\n if (!Geometry.isSameCoordinate(this.getMajorRadius(), other.getMajorRadius()))\r\n return false;\r\n if (!this.getSweepAngle().isAlmostEqualNoPeriodShift(other.getSweepAngle()))\r\n return false;\r\n // ignore _isReversed; it doesn't affect geometry\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Return the angle (in radians) for given fractional position around the major hoop.\r\n */\r\n public vFractionToRadians(v: number): number { return this._sweep.radians * v; }\r\n /** Second step of double dispatch: call `handler.handleTorusPipe(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleTorusPipe(this);\r\n }\r\n\r\n /**\r\n * Return the Arc3d section at vFraction. For the TorusPipe, this is a minor circle.\r\n * @param vFraction fractional position along the sweep direction\r\n */\r\n public constantVSection(v: number): Loop {\r\n const thetaRadians = this.vFractionToRadians(v);\r\n const c0 = Math.cos(thetaRadians);\r\n const s0 = Math.sin(thetaRadians);\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const center = this._localToWorld.multiplyXYZ(majorRadius * c0, majorRadius * s0, 0);\r\n const vector0 = this._localToWorld.multiplyVectorXYZ(minorRadius * c0, minorRadius * s0, 0);\r\n const vector90 = this._localToWorld.multiplyVectorXYZ(0, 0, minorRadius);\r\n return Loop.create(Arc3d.create(center, vector0, vector90));\r\n }\r\n /** Return an arc at constant u, and arc sweep matching this TorusPipe sweep. */\r\n public constantUSection(uFraction: number): Path {\r\n const theta1Radians = this._sweep.radians;\r\n const phiRadians = uFraction * 2 * Math.PI;\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const transform = this._localToWorld;\r\n const axes = transform.matrix;\r\n const center = this._localToWorld.multiplyXYZ(0, 0, minorRadius * Math.sin(phiRadians));\r\n const rxy = majorRadius + minorRadius * Math.cos(phiRadians);\r\n const vector0 = axes.multiplyXYZ(rxy, 0, 0);\r\n const vector90 = axes.multiplyXYZ(0, rxy, 0);\r\n return Path.create(Arc3d.create(center, vector0, vector90, AngleSweep.createStartEndRadians(0.0, theta1Radians)));\r\n }\r\n /** extend `rangeToExtend` to include this `TorusPipe` */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const theta1Radians = this._sweep.radians;\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const transform0 = this._localToWorld;\r\n const numThetaSample = Math.ceil(theta1Radians / (Math.PI / 16.0));\r\n const numHalfPhiSample = 16;\r\n let phi0 = 0;\r\n let dPhi = 0;\r\n let numPhiSample = 0;\r\n let theta = 0;\r\n let cosTheta = 0;\r\n let sinTheta = 0;\r\n let rxy = 0;\r\n let phi = 0;\r\n let j = 0;\r\n const dTheta = theta1Radians / numThetaSample;\r\n for (let i = 0; i <= numThetaSample; i++) {\r\n theta = i * dTheta;\r\n cosTheta = Math.cos(theta);\r\n sinTheta = Math.sin(theta);\r\n // At the ends, do the entire phi circle.\r\n // Otherwise only do the outer half\r\n if (i === 0 || i === numThetaSample) {\r\n phi0 = -Math.PI;\r\n dPhi = 2.0 * Math.PI / numHalfPhiSample;\r\n numPhiSample = numHalfPhiSample;\r\n } else {\r\n phi0 = -0.5 * Math.PI;\r\n dPhi = Math.PI / numHalfPhiSample;\r\n numPhiSample = 2 * numHalfPhiSample - 1;\r\n }\r\n if (transform) {\r\n for (j = 0; j <= numPhiSample; j++) {\r\n phi = phi0 + j * dPhi;\r\n rxy = majorRadius + minorRadius * Math.cos(phi);\r\n rangeToExtend.extendTransformTransformedXYZ(transform, transform0,\r\n cosTheta * rxy, sinTheta * rxy,\r\n Math.sin(phi) * minorRadius);\r\n }\r\n } else {\r\n for (j = 0; j <= numPhiSample; j++) {\r\n phi = phi0 + j * dPhi;\r\n rxy = majorRadius + minorRadius * Math.cos(phi);\r\n rangeToExtend.extendTransformedXYZ(transform0,\r\n cosTheta * rxy, sinTheta * rxy,\r\n Math.sin(phi) * minorRadius);\r\n }\r\n }\r\n }\r\n }\r\n /** Evaluate as a uv surface\r\n * @param u fractional position in minor (phi)\r\n * @param v fractional position on major (theta) arc\r\n */\r\n public uvFractionToPoint(u: number, v: number, result?: Point3d): Point3d {\r\n const thetaRadians = v * this._sweep.radians;\r\n const phiRadians = u * Math.PI * 2.0;\r\n const cosTheta = Math.cos(thetaRadians);\r\n const sinTheta = Math.sin(thetaRadians);\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const rxy = majorRadius + Math.cos(phiRadians) * minorRadius;\r\n return this._localToWorld.multiplyXYZ(rxy * cosTheta, rxy * sinTheta, minorRadius * Math.sin(phiRadians), result);\r\n }\r\n /** Evaluate as a uv surface, returning point and two vectors.\r\n * @param u fractional position in minor (phi)\r\n * @param v fractional position on major (theta) arc\r\n */\r\n public uvFractionToPointAndTangents(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const thetaRadians = v * this._sweep.radians;\r\n const phiRadians = u * Math.PI * 2.0;\r\n const fTheta = this._sweep.radians;\r\n const fPhi = Math.PI * 2.0;\r\n const cosTheta = Math.cos(thetaRadians);\r\n const sinTheta = Math.sin(thetaRadians);\r\n const sinPhi = Math.sin(phiRadians);\r\n const cosPhi = Math.cos(phiRadians);\r\n const majorRadius = this._radiusA;\r\n const minorRadius = this._radiusB;\r\n const rxy = majorRadius + Math.cos(phiRadians) * minorRadius;\r\n const rSinPhi = minorRadius * sinPhi;\r\n const rCosPhi = minorRadius * cosPhi; // appears only as derivative of rSinPhi.\r\n return Plane3dByOriginAndVectors.createOriginAndVectors(\r\n this._localToWorld.multiplyXYZ(cosTheta * rxy, sinTheta * rxy, rSinPhi),\r\n this._localToWorld.multiplyVectorXYZ(-cosTheta * rSinPhi * fPhi, -sinTheta * rSinPhi * fPhi, rCosPhi * fPhi),\r\n this._localToWorld.multiplyVectorXYZ(-rxy * sinTheta * fTheta, rxy * cosTheta * fTheta, 0),\r\n result);\r\n }\r\n /**\r\n * Directional distance query\r\n * * u direction is around the (full) minor hoop\r\n * * v direction is around the outer radius, sum of (absolute values of) major and minor radii.\r\n */\r\n public maxIsoParametricDistance(): Vector2d {\r\n const a = Math.abs(this.getMajorRadius());\r\n const b = Math.abs(this.getMinorRadius());\r\n return Vector2d.create(b * Math.PI * 2.0, (a + b) * this._sweep.radians);\r\n }\r\n /**\r\n * @return true if this is a closed volume.\r\n */\r\n public get isClosedVolume(): boolean {\r\n return this.capped || this._sweep.isFullCircle;\r\n }\r\n\r\n}\r\n"]}
@@ -1,6 +1,3 @@
1
- /** @packageDocumentation
2
- * @module Topology
3
- */
4
1
  import { ConvexClipPlaneSet } from "../clipping/ConvexClipPlaneSet";
5
2
  import { LineSegment3d } from "../curve/LineSegment3d";
6
3
  import { LineString3d } from "../curve/LineString3d";
@@ -79,7 +76,10 @@ export declare class ChainMergeContext {
79
76
  * @param node node with x,y,z coordinates
80
77
  */
81
78
  private primarySortKey;
82
- /** Return difference of sortData members as sort comparison */
79
+ /**
80
+ * Return difference of sortData members as sort comparison.
81
+ * Input node `sortData` must be defined.
82
+ */
83
83
  private static nodeCompareSortData;
84
84
  /** test if nodeA is a dangling edge end (i.e. edges around vertex equal 1, but detect it without walking all the way around. */
85
85
  private static isIsolatedEnd;
@@ -1 +1 @@
1
- {"version":3,"file":"ChainMerge.d.ts","sourceRoot":"","sources":["../../../src/topology/ChainMerge.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAY,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAIlE;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,QAAQ,CAAC;CACjC;AAoDD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,MAAM,CAAC,CAAyB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAqB;IAC5C,OAAO;IAIP,uEAAuE;IACvE,IAAW,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,SAAS,EAA0B;IACpF,+CAA+C;IAC/C,IAAW,KAAK,IAAI,sBAAsB,GAAG,SAAS,CAAwB;IAE9E,uEAAuE;IACvE,IAAW,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,EAAkC;IAChG,+CAA+C;IAC/C,IAAW,aAAa,IAAI,kBAAkB,GAAG,SAAS,CAAgC;IAE1F;;;;;;;;OAQG;WACW,MAAM,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,iBAAiB;IAI3E,2CAA2C;IACpC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IAGlD,mDAAmD;IAC5C,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE;IAKlD;;OAEG;IACI,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,GAAE,OAAe;IAgB/E;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAGtB,+DAA+D;IAC/D,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAGlC,gIAAgI;IAChI,OAAO,CAAC,MAAM,CAAC,aAAa;IAI5B,6IAA6I;IAC7I,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAKpC;;;;OAIG;IACI,0BAA0B;IA8BjC;;;;OAIG;IACH,OAAO,CAAC,uCAAuC;IAe/C;;;;OAIG;IACH,OAAO,CAAC,2CAA2C;IAiBnD;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACI,oBAAoB,IAAI,YAAY,EAAE;IAmBtC,+BAA+B,IAAI,gBAAgB,EAAE;CAmB7D"}
1
+ {"version":3,"file":"ChainMerge.d.ts","sourceRoot":"","sources":["../../../src/topology/ChainMerge.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAY,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAIlE;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,QAAQ,CAAC;CACjC;AAoDD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,MAAM,CAAC,CAAyB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAqB;IAC5C,OAAO;IAIP,uEAAuE;IACvE,IAAW,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,SAAS,EAA0B;IACpF,+CAA+C;IAC/C,IAAW,KAAK,IAAI,sBAAsB,GAAG,SAAS,CAAwB;IAE9E,uEAAuE;IACvE,IAAW,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,EAAkC;IAChG,+CAA+C;IAC/C,IAAW,aAAa,IAAI,kBAAkB,GAAG,SAAS,CAAgC;IAE1F;;;;;;;;OAQG;WACW,MAAM,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,iBAAiB;IAI3E,2CAA2C;IACpC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IAGlD,mDAAmD;IAC5C,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE;IAKlD;;OAEG;IACI,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,GAAE,OAAe;IAgB/E;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAGtB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAIlC,gIAAgI;IAChI,OAAO,CAAC,MAAM,CAAC,aAAa;IAI5B,6IAA6I;IAC7I,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAKpC;;;;OAIG;IACI,0BAA0B;IAgCjC;;;;OAIG;IACH,OAAO,CAAC,uCAAuC;IAe/C;;;;OAIG;IACH,OAAO,CAAC,2CAA2C;IAiBnD;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACI,oBAAoB,IAAI,YAAY,EAAE;IAmBtC,+BAA+B,IAAI,gBAAgB,EAAE;CAmB7D"}