@itwin/core-geometry 5.0.0-dev.9 → 5.0.0-dev.92

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 (1004) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/lib/cjs/Constant.js +17 -17
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.d.ts +2 -4
  5. package/lib/cjs/Geometry.d.ts.map +1 -1
  6. package/lib/cjs/Geometry.js +37 -39
  7. package/lib/cjs/Geometry.js.map +1 -1
  8. package/lib/cjs/bspline/AkimaCurve3d.js +3 -1
  9. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  10. package/lib/cjs/bspline/BSpline1dNd.d.ts +90 -54
  11. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  12. package/lib/cjs/bspline/BSpline1dNd.js +137 -84
  13. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  14. package/lib/cjs/bspline/BSplineCurve.d.ts +193 -155
  15. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurve.js +249 -181
  17. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  18. package/lib/cjs/bspline/BSplineCurve3dH.js +1 -0
  19. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  20. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  21. package/lib/cjs/bspline/BSplineCurveOps.js +18 -21
  22. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  23. package/lib/cjs/bspline/BSplineSurface.js +22 -2
  24. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  25. package/lib/cjs/bspline/Bezier1dNd.js +6 -0
  26. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  27. package/lib/cjs/bspline/BezierCurve3d.d.ts +3 -1
  28. package/lib/cjs/bspline/BezierCurve3d.d.ts.map +1 -1
  29. package/lib/cjs/bspline/BezierCurve3d.js +5 -5
  30. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  31. package/lib/cjs/bspline/BezierCurve3dH.js +2 -0
  32. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  33. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  34. package/lib/cjs/bspline/BezierCurveBase.js +21 -2
  35. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  36. package/lib/cjs/bspline/InterpolationCurve3d.js +12 -1
  37. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  38. package/lib/cjs/bspline/KnotVector.d.ts +82 -60
  39. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  40. package/lib/cjs/bspline/KnotVector.js +144 -84
  41. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  42. package/lib/cjs/bspline/SurfaceLocationDetail.js +12 -0
  43. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  44. package/lib/cjs/clipping/AlternatingConvexClipTree.js +14 -13
  45. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  46. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  47. package/lib/cjs/clipping/BooleanClipNode.js +4 -0
  48. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  49. package/lib/cjs/clipping/ClipPlane.js +10 -1
  50. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  51. package/lib/cjs/clipping/ClipPrimitive.js +19 -0
  52. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  53. package/lib/cjs/clipping/ClipUtils.js +5 -1
  54. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  55. package/lib/cjs/clipping/ClipVector.js +11 -8
  56. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  57. package/lib/cjs/clipping/ConvexClipPlaneSet.js +5 -3
  58. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  59. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  60. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  61. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  62. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  63. package/lib/cjs/core-geometry.d.ts +1 -0
  64. package/lib/cjs/core-geometry.d.ts.map +1 -1
  65. package/lib/cjs/core-geometry.js +1 -0
  66. package/lib/cjs/core-geometry.js.map +1 -1
  67. package/lib/cjs/curve/Arc3d.d.ts +17 -3
  68. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  69. package/lib/cjs/curve/Arc3d.js +50 -21
  70. package/lib/cjs/curve/Arc3d.js.map +1 -1
  71. package/lib/cjs/curve/ConstructCurveBetweenCurves.js +3 -0
  72. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  73. package/lib/cjs/curve/CoordinateXYZ.js +3 -2
  74. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  75. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  76. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  77. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +25 -10
  78. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  79. package/lib/cjs/curve/CurveCollection.d.ts +10 -0
  80. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  81. package/lib/cjs/curve/CurveCollection.js +35 -9
  82. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  83. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  84. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  85. package/lib/cjs/curve/CurveFactory.d.ts +87 -53
  86. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  87. package/lib/cjs/curve/CurveFactory.js +213 -135
  88. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  89. package/lib/cjs/curve/CurveLocationDetail.js +44 -0
  90. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  91. package/lib/cjs/curve/CurveOps.js.map +1 -1
  92. package/lib/cjs/curve/CurvePrimitive.d.ts +7 -10
  93. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  94. package/lib/cjs/curve/CurvePrimitive.js +27 -12
  95. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  96. package/lib/cjs/curve/CurveProcessor.js +2 -0
  97. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  98. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  99. package/lib/cjs/curve/CurveWireMomentsXYZ.js +2 -0
  100. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  101. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  102. package/lib/cjs/curve/LineSegment3d.js +6 -2
  103. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  104. package/lib/cjs/curve/LineString3d.js +27 -7
  105. package/lib/cjs/curve/LineString3d.js.map +1 -1
  106. package/lib/cjs/curve/Loop.js +12 -4
  107. package/lib/cjs/curve/Loop.js.map +1 -1
  108. package/lib/cjs/curve/OffsetOptions.js +25 -21
  109. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  110. package/lib/cjs/curve/ParityRegion.js +4 -2
  111. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  112. package/lib/cjs/curve/Path.js +2 -2
  113. package/lib/cjs/curve/Path.js.map +1 -1
  114. package/lib/cjs/curve/PointString3d.js +3 -2
  115. package/lib/cjs/curve/PointString3d.js.map +1 -1
  116. package/lib/cjs/curve/ProxyCurve.js +1 -0
  117. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  118. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  119. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  120. package/lib/cjs/curve/Query/CurveSplitContext.js +3 -0
  121. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  122. package/lib/cjs/curve/Query/CylindricalRange.js +6 -2
  123. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  124. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  125. package/lib/cjs/curve/Query/PlanarSubdivision.js +4 -6
  126. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  127. package/lib/cjs/curve/Query/StrokeCountChain.js +12 -0
  128. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  129. package/lib/cjs/curve/Query/StrokeCountMap.js +14 -0
  130. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  131. package/lib/cjs/curve/RegionMomentsXY.js +4 -5
  132. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  133. package/lib/cjs/curve/RegionOps.js +9 -10
  134. package/lib/cjs/curve/RegionOps.js.map +1 -1
  135. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +24 -1
  136. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  137. package/lib/cjs/curve/StrokeOptions.d.ts +4 -4
  138. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  139. package/lib/cjs/curve/StrokeOptions.js +23 -6
  140. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  141. package/lib/cjs/curve/UnionRegion.js +4 -2
  142. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  143. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  144. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  145. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js +6 -0
  146. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  147. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js +2 -0
  148. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  149. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  150. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  151. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  152. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  153. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  154. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  155. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  156. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  157. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  158. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  159. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  160. package/lib/cjs/curve/internalContexts/CurveLengthContext.js +6 -0
  161. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  162. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  163. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  164. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  165. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  166. package/lib/cjs/curve/internalContexts/GapSearchContext.js +1 -0
  167. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  168. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +12 -0
  169. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  170. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  171. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  172. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  173. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  174. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +22 -4
  175. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  176. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +1 -0
  177. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  178. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js +3 -0
  179. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  180. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  181. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  182. package/lib/cjs/curve/spiral/ClothoidSeries.js +4 -0
  183. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  184. package/lib/cjs/curve/spiral/CubicEvaluator.js +2 -0
  185. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  186. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +4 -0
  187. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  188. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  189. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  190. package/lib/cjs/curve/spiral/DirectSpiral3d.js +12 -2
  191. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  192. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +24 -4
  193. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  194. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  195. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  196. package/lib/cjs/curve/spiral/NormalizedTransition.js +5 -0
  197. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  198. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  199. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  200. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +10 -0
  201. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  202. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +10 -0
  203. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  204. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +6 -0
  205. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  206. package/lib/cjs/geometry3d/Angle.js +18 -16
  207. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  208. package/lib/cjs/geometry3d/AngleSweep.d.ts +7 -2
  209. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  210. package/lib/cjs/geometry3d/AngleSweep.js +14 -2
  211. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  212. package/lib/cjs/geometry3d/BarycentricTriangle.js +25 -0
  213. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  214. package/lib/cjs/geometry3d/BilinearPatch.js +8 -0
  215. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  216. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +5 -0
  217. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  218. package/lib/cjs/geometry3d/Ellipsoid.js +48 -0
  219. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  220. package/lib/cjs/geometry3d/FrameBuilder.js +12 -4
  221. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  222. package/lib/cjs/geometry3d/FrustumAnimation.js +7 -0
  223. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  224. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  225. package/lib/cjs/geometry3d/GrowableBlockedArray.js +12 -0
  226. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  227. package/lib/cjs/geometry3d/GrowableFloat64Array.js +3 -0
  228. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  229. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +0 -5
  230. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  231. package/lib/cjs/geometry3d/GrowableXYArray.js +16 -7
  232. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  233. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +32 -10
  234. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  235. package/lib/cjs/geometry3d/GrowableXYZArray.js +70 -16
  236. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  237. package/lib/cjs/geometry3d/IndexedCollectionInterval.js +6 -0
  238. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  239. package/lib/cjs/geometry3d/IndexedXYCollection.js +1 -0
  240. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  241. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +13 -2
  242. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  243. package/lib/cjs/geometry3d/IndexedXYZCollection.js +26 -11
  244. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  245. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  246. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  247. package/lib/cjs/geometry3d/Matrix3d.d.ts +3 -4
  248. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  249. package/lib/cjs/geometry3d/Matrix3d.js +36 -14
  250. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  251. package/lib/cjs/geometry3d/OrderedRotationAngles.js +10 -2
  252. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  253. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  254. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  255. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  256. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  257. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  258. package/lib/cjs/geometry3d/Point2dArrayCarrier.js +2 -0
  259. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  260. package/lib/cjs/geometry3d/Point2dVector2d.js +4 -0
  261. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  262. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +3 -1
  263. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  264. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +7 -10
  265. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  266. package/lib/cjs/geometry3d/Point3dVector3d.js +16 -10
  267. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  268. package/lib/cjs/geometry3d/PointHelpers.d.ts +4 -4
  269. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  270. package/lib/cjs/geometry3d/PointHelpers.js +8 -8
  271. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  272. package/lib/cjs/geometry3d/PointStreaming.js +12 -4
  273. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  274. package/lib/cjs/geometry3d/PolygonOps.d.ts +2 -2
  275. package/lib/cjs/geometry3d/PolygonOps.js +62 -25
  276. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  277. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  278. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  279. package/lib/cjs/geometry3d/PolylineOps.d.ts +9 -5
  280. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  281. package/lib/cjs/geometry3d/PolylineOps.js +12 -5
  282. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  283. package/lib/cjs/geometry3d/Range.js +21 -4
  284. package/lib/cjs/geometry3d/Range.js.map +1 -1
  285. package/lib/cjs/geometry3d/Ray2d.js +2 -0
  286. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  287. package/lib/cjs/geometry3d/Ray3d.d.ts +2 -2
  288. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  289. package/lib/cjs/geometry3d/Ray3d.js +20 -11
  290. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  291. package/lib/cjs/geometry3d/ReusableObjectCache.js +4 -0
  292. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  293. package/lib/cjs/geometry3d/Segment1d.js +4 -0
  294. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  295. package/lib/cjs/geometry3d/SortablePolygon.js +11 -0
  296. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  297. package/lib/cjs/geometry3d/Transform.d.ts +1 -1
  298. package/lib/cjs/geometry3d/Transform.js +4 -1
  299. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  300. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  301. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  302. package/lib/cjs/geometry3d/YawPitchRollAngles.js +6 -0
  303. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  304. package/lib/cjs/geometry4d/Map4d.js +2 -0
  305. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  306. package/lib/cjs/geometry4d/Matrix4d.js +1 -0
  307. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  308. package/lib/cjs/geometry4d/MomentData.d.ts +72 -73
  309. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  310. package/lib/cjs/geometry4d/MomentData.js +90 -66
  311. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  312. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  313. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  314. package/lib/cjs/geometry4d/Point4d.js +2 -0
  315. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  316. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  317. package/lib/cjs/numerics/BezierPolynomials.js +8 -0
  318. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  319. package/lib/cjs/numerics/ClusterableArray.js +29 -13
  320. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  321. package/lib/cjs/numerics/Complex.js +2 -0
  322. package/lib/cjs/numerics/Complex.js.map +1 -1
  323. package/lib/cjs/numerics/ConvexPolygon2d.js +3 -0
  324. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  325. package/lib/cjs/numerics/Newton.js +59 -4
  326. package/lib/cjs/numerics/Newton.js.map +1 -1
  327. package/lib/cjs/numerics/PascalCoefficients.js +1 -1
  328. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  329. package/lib/cjs/numerics/PolarData.js +13 -1
  330. package/lib/cjs/numerics/PolarData.js.map +1 -1
  331. package/lib/cjs/numerics/Polynomials.js +64 -26
  332. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  333. package/lib/cjs/numerics/Quadrature.js +26 -20
  334. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  335. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  336. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  337. package/lib/cjs/numerics/TriDiagonalSystem.js +11 -0
  338. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  339. package/lib/cjs/numerics/UnionFind.js +1 -0
  340. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  341. package/lib/cjs/numerics/UsageSums.js +10 -0
  342. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  343. package/lib/cjs/polyface/AuxData.js +16 -0
  344. package/lib/cjs/polyface/AuxData.js.map +1 -1
  345. package/lib/cjs/polyface/BoxTopology.js +67 -67
  346. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  347. package/lib/cjs/polyface/FacetFaceData.d.ts +1 -1
  348. package/lib/cjs/polyface/FacetFaceData.js +3 -1
  349. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  350. package/lib/cjs/polyface/FacetLocationDetail.js +30 -0
  351. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  352. package/lib/cjs/polyface/FacetOrientation.js +12 -1
  353. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  354. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  355. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  356. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +33 -23
  357. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  358. package/lib/cjs/polyface/IndexedEdgeMatcher.js +63 -33
  359. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  360. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  361. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  362. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +11 -2
  363. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  364. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  365. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  366. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +353 -0
  367. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -0
  368. package/lib/cjs/polyface/Polyface.d.ts +35 -10
  369. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  370. package/lib/cjs/polyface/Polyface.js +73 -12
  371. package/lib/cjs/polyface/Polyface.js.map +1 -1
  372. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +14 -27
  373. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  374. package/lib/cjs/polyface/PolyfaceBuilder.js +47 -79
  375. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  376. package/lib/cjs/polyface/PolyfaceClip.js +8 -0
  377. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  378. package/lib/cjs/polyface/PolyfaceData.d.ts +28 -0
  379. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  380. package/lib/cjs/polyface/PolyfaceData.js +87 -5
  381. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  382. package/lib/cjs/polyface/PolyfaceQuery.js +47 -7
  383. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  384. package/lib/cjs/polyface/RangeLengthData.js +7 -0
  385. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  386. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  387. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  388. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js +5 -2
  389. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  390. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  391. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  392. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  393. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  394. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +5 -0
  395. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  396. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  397. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  398. package/lib/cjs/polyface/TaggedNumericData.js +8 -0
  399. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  400. package/lib/cjs/polyface/TriangleCandidate.js +3 -0
  401. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  402. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  403. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  404. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  405. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  406. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  407. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  408. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  409. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  410. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +32 -0
  411. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  412. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  413. package/lib/cjs/polyface/multiclip/RangeSearch.js +5 -5
  414. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  415. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  416. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  417. package/lib/cjs/polyface/multiclip/XYPointBuckets.js +6 -0
  418. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  419. package/lib/cjs/serialization/BGFBAccessors.js +82 -164
  420. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  421. package/lib/cjs/serialization/BGFBReader.js +22 -22
  422. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  423. package/lib/cjs/serialization/BGFBWriter.js +1 -0
  424. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  425. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  426. package/lib/cjs/serialization/DeepCompare.js +17 -17
  427. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  428. package/lib/cjs/serialization/GeometrySamples.d.ts +5 -5
  429. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  430. package/lib/cjs/serialization/GeometrySamples.js +113 -112
  431. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  432. package/lib/cjs/serialization/IModelJsonSchema.d.ts +70 -63
  433. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  434. package/lib/cjs/serialization/IModelJsonSchema.js +87 -74
  435. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  436. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  437. package/lib/cjs/solid/Box.js +7 -2
  438. package/lib/cjs/solid/Box.js.map +1 -1
  439. package/lib/cjs/solid/Cone.d.ts +39 -14
  440. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  441. package/lib/cjs/solid/Cone.js +52 -16
  442. package/lib/cjs/solid/Cone.js.map +1 -1
  443. package/lib/cjs/solid/LinearSweep.js +4 -2
  444. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  445. package/lib/cjs/solid/RotationalSweep.js +5 -2
  446. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  447. package/lib/cjs/solid/RuledSweep.d.ts +26 -23
  448. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  449. package/lib/cjs/solid/RuledSweep.js +32 -24
  450. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  451. package/lib/cjs/solid/SolidPrimitive.d.ts +12 -11
  452. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  453. package/lib/cjs/solid/SolidPrimitive.js +11 -6
  454. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  455. package/lib/cjs/solid/Sphere.d.ts +34 -17
  456. package/lib/cjs/solid/Sphere.d.ts.map +1 -1
  457. package/lib/cjs/solid/Sphere.js +51 -24
  458. package/lib/cjs/solid/Sphere.js.map +1 -1
  459. package/lib/cjs/solid/SweepContour.d.ts +24 -15
  460. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  461. package/lib/cjs/solid/SweepContour.js +33 -15
  462. package/lib/cjs/solid/SweepContour.js.map +1 -1
  463. package/lib/cjs/solid/TorusPipe.js +7 -2
  464. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  465. package/lib/cjs/topology/ChainMerge.js +16 -4
  466. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  467. package/lib/cjs/topology/Graph.js +41 -6
  468. package/lib/cjs/topology/Graph.js.map +1 -1
  469. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  470. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  471. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  472. package/lib/cjs/topology/HalfEdgeGraphSearch.js +2 -0
  473. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  474. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +9 -2
  475. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  476. package/lib/cjs/topology/HalfEdgeGraphValidation.js +7 -9
  477. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  478. package/lib/cjs/topology/HalfEdgeMarkSet.js +5 -0
  479. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  480. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +6 -0
  481. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  482. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +1 -0
  483. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  484. package/lib/cjs/topology/HalfEdgePositionDetail.js +16 -0
  485. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  486. package/lib/cjs/topology/HalfEdgePriorityQueue.js +2 -0
  487. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  488. package/lib/cjs/topology/InsertAndRetriangulateContext.js +4 -0
  489. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  490. package/lib/cjs/topology/MaskManager.js +3 -0
  491. package/lib/cjs/topology/MaskManager.js.map +1 -1
  492. package/lib/cjs/topology/Merging.js +11 -6
  493. package/lib/cjs/topology/Merging.js.map +1 -1
  494. package/lib/cjs/topology/RegularizeFace.js +22 -0
  495. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  496. package/lib/cjs/topology/SignedDataSummary.js +22 -0
  497. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  498. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  499. package/lib/cjs/topology/Triangulation.js +21 -11
  500. package/lib/cjs/topology/Triangulation.js.map +1 -1
  501. package/lib/cjs/topology/XYParitySearchContext.js +13 -0
  502. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  503. package/lib/esm/Constant.js +17 -17
  504. package/lib/esm/Constant.js.map +1 -1
  505. package/lib/esm/Geometry.d.ts +2 -4
  506. package/lib/esm/Geometry.d.ts.map +1 -1
  507. package/lib/esm/Geometry.js +37 -39
  508. package/lib/esm/Geometry.js.map +1 -1
  509. package/lib/esm/bspline/AkimaCurve3d.js +3 -1
  510. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  511. package/lib/esm/bspline/BSpline1dNd.d.ts +90 -54
  512. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  513. package/lib/esm/bspline/BSpline1dNd.js +137 -84
  514. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  515. package/lib/esm/bspline/BSplineCurve.d.ts +193 -155
  516. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  517. package/lib/esm/bspline/BSplineCurve.js +249 -181
  518. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  519. package/lib/esm/bspline/BSplineCurve3dH.js +1 -0
  520. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  521. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  522. package/lib/esm/bspline/BSplineCurveOps.js +18 -21
  523. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  524. package/lib/esm/bspline/BSplineSurface.js +22 -2
  525. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  526. package/lib/esm/bspline/Bezier1dNd.js +6 -0
  527. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  528. package/lib/esm/bspline/BezierCurve3d.d.ts +3 -1
  529. package/lib/esm/bspline/BezierCurve3d.d.ts.map +1 -1
  530. package/lib/esm/bspline/BezierCurve3d.js +5 -5
  531. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  532. package/lib/esm/bspline/BezierCurve3dH.js +2 -0
  533. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  534. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  535. package/lib/esm/bspline/BezierCurveBase.js +21 -2
  536. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  537. package/lib/esm/bspline/InterpolationCurve3d.js +12 -1
  538. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  539. package/lib/esm/bspline/KnotVector.d.ts +82 -60
  540. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  541. package/lib/esm/bspline/KnotVector.js +144 -84
  542. package/lib/esm/bspline/KnotVector.js.map +1 -1
  543. package/lib/esm/bspline/SurfaceLocationDetail.js +12 -0
  544. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  545. package/lib/esm/clipping/AlternatingConvexClipTree.js +14 -13
  546. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  547. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  548. package/lib/esm/clipping/BooleanClipNode.js +4 -0
  549. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  550. package/lib/esm/clipping/ClipPlane.js +10 -1
  551. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  552. package/lib/esm/clipping/ClipPrimitive.js +19 -0
  553. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  554. package/lib/esm/clipping/ClipUtils.js +5 -1
  555. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  556. package/lib/esm/clipping/ClipVector.js +11 -8
  557. package/lib/esm/clipping/ClipVector.js.map +1 -1
  558. package/lib/esm/clipping/ConvexClipPlaneSet.js +5 -3
  559. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  560. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  561. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  562. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  563. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  564. package/lib/esm/core-geometry.d.ts +1 -0
  565. package/lib/esm/core-geometry.d.ts.map +1 -1
  566. package/lib/esm/core-geometry.js +1 -0
  567. package/lib/esm/core-geometry.js.map +1 -1
  568. package/lib/esm/curve/Arc3d.d.ts +17 -3
  569. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  570. package/lib/esm/curve/Arc3d.js +50 -21
  571. package/lib/esm/curve/Arc3d.js.map +1 -1
  572. package/lib/esm/curve/ConstructCurveBetweenCurves.js +3 -0
  573. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  574. package/lib/esm/curve/CoordinateXYZ.js +3 -2
  575. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  576. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  577. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  578. package/lib/esm/curve/CurveChainWithDistanceIndex.js +25 -10
  579. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  580. package/lib/esm/curve/CurveCollection.d.ts +10 -0
  581. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  582. package/lib/esm/curve/CurveCollection.js +35 -9
  583. package/lib/esm/curve/CurveCollection.js.map +1 -1
  584. package/lib/esm/curve/CurveCurve.js.map +1 -1
  585. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  586. package/lib/esm/curve/CurveFactory.d.ts +87 -53
  587. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  588. package/lib/esm/curve/CurveFactory.js +213 -135
  589. package/lib/esm/curve/CurveFactory.js.map +1 -1
  590. package/lib/esm/curve/CurveLocationDetail.js +44 -0
  591. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  592. package/lib/esm/curve/CurveOps.js.map +1 -1
  593. package/lib/esm/curve/CurvePrimitive.d.ts +7 -10
  594. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  595. package/lib/esm/curve/CurvePrimitive.js +27 -12
  596. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  597. package/lib/esm/curve/CurveProcessor.js +2 -0
  598. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  599. package/lib/esm/curve/CurveTypes.js.map +1 -1
  600. package/lib/esm/curve/CurveWireMomentsXYZ.js +2 -0
  601. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  602. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  603. package/lib/esm/curve/LineSegment3d.js +6 -2
  604. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  605. package/lib/esm/curve/LineString3d.js +27 -7
  606. package/lib/esm/curve/LineString3d.js.map +1 -1
  607. package/lib/esm/curve/Loop.js +12 -4
  608. package/lib/esm/curve/Loop.js.map +1 -1
  609. package/lib/esm/curve/OffsetOptions.js +25 -21
  610. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  611. package/lib/esm/curve/ParityRegion.js +4 -2
  612. package/lib/esm/curve/ParityRegion.js.map +1 -1
  613. package/lib/esm/curve/Path.js +2 -2
  614. package/lib/esm/curve/Path.js.map +1 -1
  615. package/lib/esm/curve/PointString3d.js +3 -2
  616. package/lib/esm/curve/PointString3d.js.map +1 -1
  617. package/lib/esm/curve/ProxyCurve.js +1 -0
  618. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  619. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  620. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  621. package/lib/esm/curve/Query/CurveSplitContext.js +3 -0
  622. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  623. package/lib/esm/curve/Query/CylindricalRange.js +6 -2
  624. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  625. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  626. package/lib/esm/curve/Query/PlanarSubdivision.js +4 -6
  627. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  628. package/lib/esm/curve/Query/StrokeCountChain.js +12 -0
  629. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  630. package/lib/esm/curve/Query/StrokeCountMap.js +14 -0
  631. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  632. package/lib/esm/curve/RegionMomentsXY.js +4 -5
  633. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  634. package/lib/esm/curve/RegionOps.js +9 -10
  635. package/lib/esm/curve/RegionOps.js.map +1 -1
  636. package/lib/esm/curve/RegionOpsClassificationSweeps.js +24 -1
  637. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  638. package/lib/esm/curve/StrokeOptions.d.ts +4 -4
  639. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  640. package/lib/esm/curve/StrokeOptions.js +23 -6
  641. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  642. package/lib/esm/curve/UnionRegion.js +4 -2
  643. package/lib/esm/curve/UnionRegion.js.map +1 -1
  644. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  645. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  646. package/lib/esm/curve/internalContexts/ChainCollectorContext.js +6 -0
  647. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  648. package/lib/esm/curve/internalContexts/CloneCurvesContext.js +2 -0
  649. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  650. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  651. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  652. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  653. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  654. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  655. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  656. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  657. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  658. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  659. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  660. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  661. package/lib/esm/curve/internalContexts/CurveLengthContext.js +6 -0
  662. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  663. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  664. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  665. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  666. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  667. package/lib/esm/curve/internalContexts/GapSearchContext.js +1 -0
  668. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  669. package/lib/esm/curve/internalContexts/MultiChainCollector.js +12 -0
  670. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  671. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  672. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  673. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  674. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  675. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +22 -4
  676. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  677. package/lib/esm/curve/internalContexts/SumLengthsContext.js +1 -0
  678. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  679. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js +3 -0
  680. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  681. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  682. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  683. package/lib/esm/curve/spiral/ClothoidSeries.js +4 -0
  684. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  685. package/lib/esm/curve/spiral/CubicEvaluator.js +2 -0
  686. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  687. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +4 -0
  688. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  689. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  690. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  691. package/lib/esm/curve/spiral/DirectSpiral3d.js +12 -2
  692. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  693. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +24 -4
  694. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  695. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  696. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  697. package/lib/esm/curve/spiral/NormalizedTransition.js +5 -0
  698. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  699. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  700. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  701. package/lib/esm/curve/spiral/TransitionConditionalProperties.js +10 -0
  702. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  703. package/lib/esm/curve/spiral/TransitionSpiral3d.js +10 -0
  704. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  705. package/lib/esm/curve/spiral/XYCurveEvaluator.js +6 -0
  706. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  707. package/lib/esm/geometry3d/Angle.js +18 -16
  708. package/lib/esm/geometry3d/Angle.js.map +1 -1
  709. package/lib/esm/geometry3d/AngleSweep.d.ts +7 -2
  710. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  711. package/lib/esm/geometry3d/AngleSweep.js +14 -2
  712. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  713. package/lib/esm/geometry3d/BarycentricTriangle.js +25 -0
  714. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  715. package/lib/esm/geometry3d/BilinearPatch.js +8 -0
  716. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  717. package/lib/esm/geometry3d/CoincidentGeometryOps.js +5 -0
  718. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  719. package/lib/esm/geometry3d/Ellipsoid.js +48 -0
  720. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  721. package/lib/esm/geometry3d/FrameBuilder.js +12 -4
  722. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  723. package/lib/esm/geometry3d/FrustumAnimation.js +7 -0
  724. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  725. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  726. package/lib/esm/geometry3d/GrowableBlockedArray.js +12 -0
  727. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  728. package/lib/esm/geometry3d/GrowableFloat64Array.js +3 -0
  729. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  730. package/lib/esm/geometry3d/GrowableXYArray.d.ts +0 -5
  731. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  732. package/lib/esm/geometry3d/GrowableXYArray.js +16 -7
  733. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  734. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +32 -10
  735. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  736. package/lib/esm/geometry3d/GrowableXYZArray.js +70 -16
  737. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  738. package/lib/esm/geometry3d/IndexedCollectionInterval.js +6 -0
  739. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  740. package/lib/esm/geometry3d/IndexedXYCollection.js +1 -0
  741. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  742. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +13 -2
  743. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  744. package/lib/esm/geometry3d/IndexedXYZCollection.js +26 -11
  745. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  746. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  747. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  748. package/lib/esm/geometry3d/Matrix3d.d.ts +3 -4
  749. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  750. package/lib/esm/geometry3d/Matrix3d.js +36 -14
  751. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  752. package/lib/esm/geometry3d/OrderedRotationAngles.js +10 -2
  753. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  754. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  755. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  756. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  757. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  758. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  759. package/lib/esm/geometry3d/Point2dArrayCarrier.js +2 -0
  760. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  761. package/lib/esm/geometry3d/Point2dVector2d.js +4 -0
  762. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  763. package/lib/esm/geometry3d/Point3dArrayCarrier.js +3 -1
  764. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  765. package/lib/esm/geometry3d/Point3dVector3d.d.ts +7 -10
  766. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  767. package/lib/esm/geometry3d/Point3dVector3d.js +16 -10
  768. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  769. package/lib/esm/geometry3d/PointHelpers.d.ts +4 -4
  770. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  771. package/lib/esm/geometry3d/PointHelpers.js +8 -8
  772. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  773. package/lib/esm/geometry3d/PointStreaming.js +12 -4
  774. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  775. package/lib/esm/geometry3d/PolygonOps.d.ts +2 -2
  776. package/lib/esm/geometry3d/PolygonOps.js +62 -25
  777. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  778. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  779. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  780. package/lib/esm/geometry3d/PolylineOps.d.ts +9 -5
  781. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  782. package/lib/esm/geometry3d/PolylineOps.js +12 -5
  783. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  784. package/lib/esm/geometry3d/Range.js +21 -4
  785. package/lib/esm/geometry3d/Range.js.map +1 -1
  786. package/lib/esm/geometry3d/Ray2d.js +2 -0
  787. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  788. package/lib/esm/geometry3d/Ray3d.d.ts +2 -2
  789. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  790. package/lib/esm/geometry3d/Ray3d.js +20 -11
  791. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  792. package/lib/esm/geometry3d/ReusableObjectCache.js +4 -0
  793. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  794. package/lib/esm/geometry3d/Segment1d.js +4 -0
  795. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  796. package/lib/esm/geometry3d/SortablePolygon.js +11 -0
  797. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  798. package/lib/esm/geometry3d/Transform.d.ts +1 -1
  799. package/lib/esm/geometry3d/Transform.js +4 -1
  800. package/lib/esm/geometry3d/Transform.js.map +1 -1
  801. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  802. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  803. package/lib/esm/geometry3d/YawPitchRollAngles.js +6 -0
  804. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  805. package/lib/esm/geometry4d/Map4d.js +2 -0
  806. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  807. package/lib/esm/geometry4d/Matrix4d.js +1 -0
  808. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  809. package/lib/esm/geometry4d/MomentData.d.ts +72 -73
  810. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  811. package/lib/esm/geometry4d/MomentData.js +90 -66
  812. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  813. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  814. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  815. package/lib/esm/geometry4d/Point4d.js +2 -0
  816. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  817. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  818. package/lib/esm/numerics/BezierPolynomials.js +8 -0
  819. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  820. package/lib/esm/numerics/ClusterableArray.js +29 -13
  821. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  822. package/lib/esm/numerics/Complex.js +2 -0
  823. package/lib/esm/numerics/Complex.js.map +1 -1
  824. package/lib/esm/numerics/ConvexPolygon2d.js +3 -0
  825. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  826. package/lib/esm/numerics/Newton.js +59 -4
  827. package/lib/esm/numerics/Newton.js.map +1 -1
  828. package/lib/esm/numerics/PascalCoefficients.js +1 -1
  829. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  830. package/lib/esm/numerics/PolarData.js +13 -1
  831. package/lib/esm/numerics/PolarData.js.map +1 -1
  832. package/lib/esm/numerics/Polynomials.js +64 -26
  833. package/lib/esm/numerics/Polynomials.js.map +1 -1
  834. package/lib/esm/numerics/Quadrature.js +26 -20
  835. package/lib/esm/numerics/Quadrature.js.map +1 -1
  836. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  837. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  838. package/lib/esm/numerics/TriDiagonalSystem.js +11 -0
  839. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  840. package/lib/esm/numerics/UnionFind.js +1 -0
  841. package/lib/esm/numerics/UnionFind.js.map +1 -1
  842. package/lib/esm/numerics/UsageSums.js +10 -0
  843. package/lib/esm/numerics/UsageSums.js.map +1 -1
  844. package/lib/esm/polyface/AuxData.js +16 -0
  845. package/lib/esm/polyface/AuxData.js.map +1 -1
  846. package/lib/esm/polyface/BoxTopology.js +67 -67
  847. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  848. package/lib/esm/polyface/FacetFaceData.d.ts +1 -1
  849. package/lib/esm/polyface/FacetFaceData.js +3 -1
  850. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  851. package/lib/esm/polyface/FacetLocationDetail.js +30 -0
  852. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  853. package/lib/esm/polyface/FacetOrientation.js +12 -1
  854. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  855. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  856. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  857. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +33 -23
  858. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  859. package/lib/esm/polyface/IndexedEdgeMatcher.js +63 -33
  860. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  861. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  862. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  863. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +11 -2
  864. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  865. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  866. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  867. package/lib/esm/polyface/IndexedPolyfaceWalker.js +349 -0
  868. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -0
  869. package/lib/esm/polyface/Polyface.d.ts +35 -10
  870. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  871. package/lib/esm/polyface/Polyface.js +73 -12
  872. package/lib/esm/polyface/Polyface.js.map +1 -1
  873. package/lib/esm/polyface/PolyfaceBuilder.d.ts +14 -27
  874. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  875. package/lib/esm/polyface/PolyfaceBuilder.js +48 -80
  876. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  877. package/lib/esm/polyface/PolyfaceClip.js +8 -0
  878. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  879. package/lib/esm/polyface/PolyfaceData.d.ts +28 -0
  880. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  881. package/lib/esm/polyface/PolyfaceData.js +87 -5
  882. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  883. package/lib/esm/polyface/PolyfaceQuery.js +47 -7
  884. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  885. package/lib/esm/polyface/RangeLengthData.js +7 -0
  886. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  887. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  888. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  889. package/lib/esm/polyface/RangeTree/MinimumValueTester.js +5 -2
  890. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  891. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  892. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  893. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  894. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  895. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +5 -0
  896. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  897. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  898. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  899. package/lib/esm/polyface/TaggedNumericData.js +8 -0
  900. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  901. package/lib/esm/polyface/TriangleCandidate.js +3 -0
  902. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  903. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  904. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  905. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  906. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  907. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  908. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  909. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  910. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  911. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +32 -0
  912. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  913. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  914. package/lib/esm/polyface/multiclip/RangeSearch.js +5 -5
  915. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  916. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  917. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  918. package/lib/esm/polyface/multiclip/XYPointBuckets.js +6 -0
  919. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  920. package/lib/esm/serialization/BGFBAccessors.js +82 -164
  921. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  922. package/lib/esm/serialization/BGFBReader.js +22 -22
  923. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  924. package/lib/esm/serialization/BGFBWriter.js +1 -0
  925. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  926. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  927. package/lib/esm/serialization/DeepCompare.js +17 -17
  928. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  929. package/lib/esm/serialization/GeometrySamples.d.ts +5 -5
  930. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  931. package/lib/esm/serialization/GeometrySamples.js +113 -112
  932. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  933. package/lib/esm/serialization/IModelJsonSchema.d.ts +70 -63
  934. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  935. package/lib/esm/serialization/IModelJsonSchema.js +87 -74
  936. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  937. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  938. package/lib/esm/solid/Box.js +7 -2
  939. package/lib/esm/solid/Box.js.map +1 -1
  940. package/lib/esm/solid/Cone.d.ts +39 -14
  941. package/lib/esm/solid/Cone.d.ts.map +1 -1
  942. package/lib/esm/solid/Cone.js +53 -17
  943. package/lib/esm/solid/Cone.js.map +1 -1
  944. package/lib/esm/solid/LinearSweep.js +4 -2
  945. package/lib/esm/solid/LinearSweep.js.map +1 -1
  946. package/lib/esm/solid/RotationalSweep.js +5 -2
  947. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  948. package/lib/esm/solid/RuledSweep.d.ts +26 -23
  949. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  950. package/lib/esm/solid/RuledSweep.js +32 -24
  951. package/lib/esm/solid/RuledSweep.js.map +1 -1
  952. package/lib/esm/solid/SolidPrimitive.d.ts +12 -11
  953. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  954. package/lib/esm/solid/SolidPrimitive.js +11 -6
  955. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  956. package/lib/esm/solid/Sphere.d.ts +34 -17
  957. package/lib/esm/solid/Sphere.d.ts.map +1 -1
  958. package/lib/esm/solid/Sphere.js +52 -25
  959. package/lib/esm/solid/Sphere.js.map +1 -1
  960. package/lib/esm/solid/SweepContour.d.ts +24 -15
  961. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  962. package/lib/esm/solid/SweepContour.js +33 -15
  963. package/lib/esm/solid/SweepContour.js.map +1 -1
  964. package/lib/esm/solid/TorusPipe.js +7 -2
  965. package/lib/esm/solid/TorusPipe.js.map +1 -1
  966. package/lib/esm/topology/ChainMerge.js +16 -4
  967. package/lib/esm/topology/ChainMerge.js.map +1 -1
  968. package/lib/esm/topology/Graph.js +41 -6
  969. package/lib/esm/topology/Graph.js.map +1 -1
  970. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  971. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  972. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  973. package/lib/esm/topology/HalfEdgeGraphSearch.js +2 -0
  974. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  975. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +9 -2
  976. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  977. package/lib/esm/topology/HalfEdgeGraphValidation.js +7 -9
  978. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  979. package/lib/esm/topology/HalfEdgeMarkSet.js +5 -0
  980. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  981. package/lib/esm/topology/HalfEdgeNodeXYZUV.js +6 -0
  982. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  983. package/lib/esm/topology/HalfEdgePointInGraphSearch.js +1 -0
  984. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  985. package/lib/esm/topology/HalfEdgePositionDetail.js +16 -0
  986. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  987. package/lib/esm/topology/HalfEdgePriorityQueue.js +2 -0
  988. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  989. package/lib/esm/topology/InsertAndRetriangulateContext.js +4 -0
  990. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  991. package/lib/esm/topology/MaskManager.js +3 -0
  992. package/lib/esm/topology/MaskManager.js.map +1 -1
  993. package/lib/esm/topology/Merging.js +11 -6
  994. package/lib/esm/topology/Merging.js.map +1 -1
  995. package/lib/esm/topology/RegularizeFace.js +22 -0
  996. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  997. package/lib/esm/topology/SignedDataSummary.js +22 -0
  998. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  999. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  1000. package/lib/esm/topology/Triangulation.js +21 -11
  1001. package/lib/esm/topology/Triangulation.js.map +1 -1
  1002. package/lib/esm/topology/XYParitySearchContext.js +13 -0
  1003. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  1004. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"Sphere.js","sourceRoot":"","sources":["../../../src/solid/Sphere.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 { Geometry } from \"../Geometry\";\r\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\r\nimport { GeometryHandler, UVSurface } 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 Sphere is\r\n *\r\n * * A unit sphere (but read on ....)\r\n * * mapped by an arbitrary (possibly skewed, non-uniform scaled) transform\r\n * * hence possibly the final geometry is ellipsoidal\r\n * @public\r\n */\r\nexport class Sphere extends SolidPrimitive implements UVSurface {\r\n /** String name for schema properties */\r\n public readonly solidPrimitiveType = \"sphere\";\r\n\r\n private _localToWorld: Transform; // local coordinates = unit sphere at origin\r\n private _latitudeSweep: AngleSweep;\r\n /** Return the latitude (in radians) all fractional v. */\r\n public vFractionToRadians(v: number): number {\r\n return this._latitudeSweep.fractionToRadians(v);\r\n }\r\n /** Return the longitude (in radians) all fractional u. */\r\n public uFractionToRadians(u: number): number {\r\n return u * Math.PI * 2.0;\r\n }\r\n\r\n /** Constructor CAPTURES inputs */\r\n private constructor(localToWorld: Transform, latitudeSweep: AngleSweep, capped: boolean) {\r\n super(capped);\r\n this._localToWorld = localToWorld;\r\n this._latitudeSweep = latitudeSweep;\r\n this._latitudeSweep.capLatitudeInPlace();\r\n }\r\n /** return a deep clone */\r\n public clone(): Sphere {\r\n return new Sphere(this._localToWorld.clone(), this._latitudeSweep.clone(), this.capped);\r\n }\r\n /**\r\n * Transform the sphere in place.\r\n * * Fails if the transform 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 this._latitudeSweep.reverseInPlace();\r\n return true;\r\n }\r\n /**\r\n * Return a transformed clone.\r\n * * Fails if the transform is singular.\r\n */\r\n public cloneTransformed(transform: Transform): Sphere | undefined {\r\n const result = this.clone();\r\n return result.tryTransformInPlace(transform) ? result : undefined;\r\n }\r\n /** Return a coordinate frame (right handed, unit axes)\r\n * * origin at sphere center\r\n * * equator in xy plane\r\n * * z axis perpendicular\r\n */\r\n public getConstructiveFrame(): Transform | undefined {\r\n return this._localToWorld.cloneRigid();\r\n }\r\n /** Return the latitude sweep as fraction of south pole to north pole. */\r\n public get latitudeSweepFraction(): number { return this._latitudeSweep.sweepRadians / Math.PI; }\r\n /** Create from center and radius, with optional restricted latitudes. */\r\n public static createCenterRadius(center: Point3d, radius: number, latitudeSweep?: AngleSweep): Sphere {\r\n const localToWorld = Transform.createOriginAndMatrix(center, Matrix3d.createUniformScale(radius));\r\n return new Sphere(localToWorld, latitudeSweep ? latitudeSweep.clone() : AngleSweep.createFullLatitude(), false);\r\n }\r\n /** Create an ellipsoid which is a unit sphere mapped to position by an (arbitrary, possibly skewed and scaled) transform. */\r\n public static createEllipsoid(localToWorld: Transform, latitudeSweep: AngleSweep, capped: boolean): Sphere | undefined {\r\n return new Sphere(localToWorld.clone(), latitudeSweep.clone(), capped);\r\n }\r\n\r\n /** Create a sphere from the typical parameters of the Dgn file */\r\n public static createDgnSphere(center: Point3d, vectorX: Vector3d, vectorZ: Vector3d, radiusXY: number, radiusZ: number,\r\n latitudeSweep: AngleSweep,\r\n capped: boolean): Sphere | undefined {\r\n const vectorY = vectorX.rotate90Around(vectorZ);\r\n if (vectorY && !vectorX.isParallelTo(vectorZ)) {\r\n const matrix = Matrix3d.createColumns(vectorX, vectorY, vectorZ);\r\n matrix.scaleColumns(radiusXY, radiusXY, radiusZ, matrix);\r\n const frame = Transform.createOriginAndMatrix(center, matrix);\r\n return new Sphere(frame, latitudeSweep.clone(), capped);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Create a sphere from the typical parameters of the Dgn file */\r\n public static createFromAxesAndScales(center: Point3d, axes: undefined | Matrix3d, radiusX: number, radiusY: number, radiusZ: number,\r\n latitudeSweep: AngleSweep | undefined,\r\n capped: boolean): Sphere | undefined {\r\n const localToWorld = Transform.createOriginAndMatrix(center, axes);\r\n localToWorld.matrix.scaleColumnsInPlace(radiusX, radiusY, radiusZ);\r\n return new Sphere(localToWorld, latitudeSweep ? latitudeSweep.clone() : AngleSweep.createFullLatitude(), capped);\r\n }\r\n\r\n /** return (copy of) sphere center */\r\n public cloneCenter(): Point3d { return this._localToWorld.getOrigin(); }\r\n /** return the (full length, i.e. scaled by radius) X vector from the sphere transform */\r\n public cloneVectorX(): Vector3d { return this._localToWorld.matrix.columnX(); }\r\n /** return the (full length, i.e. scaled by radius) Y vector from the sphere transform */\r\n public cloneVectorY(): Vector3d { return this._localToWorld.matrix.columnY(); }\r\n /** return the (full length, i.e. scaled by radius) Z vector from the sphere transform */\r\n public cloneVectorZ(): Vector3d { return this._localToWorld.matrix.columnZ(); }\r\n /** return (a copy of) the sphere's angle sweep. */\r\n public cloneLatitudeSweep(): AngleSweep { return this._latitudeSweep.clone(); }\r\n /** Test if the geometry is a true sphere taking the transform (which might have nonuniform scaling) is applied. */\r\n public trueSphereRadius(): number | undefined {\r\n const factors = this._localToWorld.matrix.factorRigidWithSignedScale();\r\n if (!factors) return undefined;\r\n if (factors && factors.scale > 0) // why do we rule out mirror?\r\n return factors.scale;\r\n return undefined;\r\n }\r\n /**\r\n * Return the largest of the primary xyz axis radii\r\n */\r\n public maxAxisRadius(): number {\r\n const matrix = this._localToWorld.matrix;\r\n return Geometry.maxXYZ(matrix.columnXMagnitude(), matrix.columnYMagnitude(), matrix.columnZMagnitude());\r\n }\r\n /**\r\n * Return a (clone of) the sphere's local to world transformation.\r\n */\r\n public cloneLocalToWorld(): Transform { return this._localToWorld.clone(); }\r\n /** Test if `other` is a `Sphere` */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof Sphere; }\r\n /** Test for same geometry in `other` */\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof Sphere) {\r\n if (this.capped !== other.capped) return false;\r\n if (!this._localToWorld.isAlmostEqual(other._localToWorld)) return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Return strokes for the elliptical arc cross-section at latitude sweep fraction v.\r\n * * Optional inputs control the number of strokes along the cross-section:\r\n * * If `fixedStrokeCount` is supplied, it is taken as the cross-section stroke count.\r\n * * If `fixedStrokeCount` is undefined, stroke count is computed by applying `options` to the cross-section.\r\n * * If neither input is supplied, the stroke count default is 16.\r\n * * In any case, stroke count is clamped to the interval [4,64].\r\n * @param v fractional position along the sphere axis\r\n * @param fixedStrokeCount optional stroke count in u-direction\r\n * @param options optional stroke options in u-direction\r\n * @return strokes as line string\r\n */\r\n public strokeConstantVSection(v: number, fixedStrokeCount?: number, options?: StrokeOptions): LineString3d {\r\n let strokeCount = 16;\r\n if (fixedStrokeCount !== undefined && Number.isFinite(fixedStrokeCount)) {\r\n strokeCount = fixedStrokeCount;\r\n } else if (options instanceof StrokeOptions) {\r\n strokeCount = options.applyTolerancesToArc(Geometry.maxXY(this._localToWorld.matrix.columnXMagnitude(), this._localToWorld.matrix.columnYMagnitude()));\r\n }\r\n strokeCount = Geometry.clampToStartEnd(strokeCount, 4, 64);\r\n const transform = this._localToWorld;\r\n const phi = this.vFractionToRadians(v);\r\n const c1 = Math.cos(phi);\r\n const s1 = Math.sin(phi);\r\n let c0, s0;\r\n const result = LineString3d.createForStrokes(strokeCount, options);\r\n const deltaRadians = Math.PI * 2.0 / strokeCount;\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 dXdu = Vector3d.create();\r\n const dXdv = Vector3d.create();\r\n const normal = Vector3d.create();\r\n let radians = 0;\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 c0 = Math.cos(radians);\r\n s0 = Math.sin(radians);\r\n const xyz = transform.multiplyXYZ(c1 * c0, c1 * s0, s1);\r\n result.addPoint(xyz);\r\n\r\n if (fractions)\r\n fractions.push(i / strokeCount);\r\n\r\n if (derivatives) {\r\n transform.matrix.multiplyXYZ(-c1 * s0, c1 * c0, 0.0, dXdu);\r\n derivatives.push(dXdu);\r\n }\r\n if (uvParams) {\r\n uvParams.pushXY(i / strokeCount, v);\r\n }\r\n if (surfaceNormals) {\r\n transform.matrix.multiplyXYZ(-s0, c0, 0, dXdu);\r\n transform.matrix.multiplyXYZ(-s1 * c0, -s1 * s0, c1, dXdv);\r\n dXdu.unitCrossProduct(dXdv, normal);\r\n surfaceNormals.push(normal);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /** Second step of double dispatch: call `handler.handleSphere(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleSphere(this);\r\n }\r\n /**\r\n * Return the Arc3d section at vFraction. For the sphere, this is a latitude circle.\r\n * @param vFraction fractional position along the sweep direction\r\n */\r\n public constantVSection(vFraction: number): CurveCollection | undefined {\r\n const phi = this._latitudeSweep.fractionToRadians(vFraction);\r\n const s1 = Math.sin(phi);\r\n const c1 = Math.cos(phi);\r\n const transform = this._localToWorld;\r\n const center = transform.multiplyXYZ(0, 0, s1);\r\n const vector0 = transform.matrix.multiplyXYZ(c1, 0, 0);\r\n const vector90 = transform.matrix.multiplyXYZ(0, c1, 0);\r\n return Loop.create(Arc3d.create(center, vector0, vector90));\r\n }\r\n /** Extend a range to contain this sphere. */\r\n public extendRange(range: Range3d, transform?: Transform): void {\r\n let placement = this._localToWorld;\r\n if (transform) {\r\n placement = transform.multiplyTransformTransform(placement);\r\n }\r\n\r\n range.extendTransformedXYZ(placement, -1, -1, -1);\r\n range.extendTransformedXYZ(placement, 1, -1, -1);\r\n range.extendTransformedXYZ(placement, -1, 1, -1);\r\n range.extendTransformedXYZ(placement, 1, 1, -1);\r\n\r\n range.extendTransformedXYZ(placement, -1, -1, 1);\r\n range.extendTransformedXYZ(placement, 1, -1, 1);\r\n range.extendTransformedXYZ(placement, -1, 1, 1);\r\n range.extendTransformedXYZ(placement, 1, 1, 1);\r\n\r\n }\r\n /** Evaluate as a uv surface\r\n * @param uFraction fractional position on minor arc (theta, longitude)\r\n * @param vFraction fractional position on major arc (phi, latitude)\r\n */\r\n public uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d {\r\n // sphere with radius 1 . . .\r\n const thetaRadians = this.uFractionToRadians(uFraction);\r\n const phiRadians = this.vFractionToRadians(vFraction);\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 return this._localToWorld.multiplyXYZ(cosTheta * cosPhi, sinTheta * cosPhi, sinPhi, result);\r\n }\r\n /** Evaluate as a uv surface, returning point and two vectors.\r\n * @param uFraction fractional position on minor arc (theta, longitude)\r\n * @param vFraction fractional position on major arc (phi, latitude)\r\n */\r\n public uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const thetaRadians = this.uFractionToRadians(uFraction);\r\n const phiRadians = this.vFractionToRadians(vFraction);\r\n const fTheta = Math.PI * 2.0;\r\n const fPhi = this._latitudeSweep.sweepRadians;\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 return Plane3dByOriginAndVectors.createOriginAndVectors(\r\n this._localToWorld.multiplyXYZ(cosTheta * cosPhi, sinTheta * cosPhi, sinPhi),\r\n this._localToWorld.matrix.multiplyXYZ(-fTheta * sinTheta, fTheta * cosTheta, 0), // !!! note cosTheta term is omitted -- scale is wrong, but remains non-zero at poles.\r\n this._localToWorld.matrix.multiplyXYZ(-fPhi * cosTheta * sinPhi, -fPhi * sinTheta * sinPhi, fPhi * cosPhi),\r\n result);\r\n }\r\n /**\r\n * * A sphere is can be closed two ways:\r\n * * full sphere (no caps needed for closure)\r\n * * incomplete but with caps\r\n * @return true if this is a closed volume.\r\n */\r\n public get isClosedVolume(): boolean {\r\n return this.capped || this._latitudeSweep.isFullLatitudeSweep;\r\n }\r\n /**\r\n * Directional distance query\r\n * * u direction is around latitude 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 // approximate radius at equator .. if elliptic, this is not exact . . .\r\n const rX = this._localToWorld.matrix.columnXMagnitude();\r\n const rY = this._localToWorld.matrix.columnYMagnitude();\r\n const rZ = this._localToWorld.matrix.columnZMagnitude();\r\n const rMaxU = Math.max(rX, rY);\r\n let dMaxU = Math.PI * 2.0 * rMaxU;\r\n if (!this._latitudeSweep.isRadiansInSweep(0.0))\r\n dMaxU *= Math.max(Math.cos(Math.abs(this._latitudeSweep.startRadians)), Math.cos(Math.abs(this._latitudeSweep.endRadians)));\r\n const dMaxV = Math.max(rMaxU, rZ) * Math.abs(this._latitudeSweep.sweepRadians);\r\n\r\n return Vector2d.create(dMaxU, dMaxV);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Sphere.js","sourceRoot":"","sources":["../../../src/solid/Sphere.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAW,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,OAAO,MAAO,SAAQ,cAAc;IACxC,wCAAwC;IACxB,kBAAkB,GAAG,QAAQ,CAAC;IAEtC,aAAa,CAAY,CAAE,4CAA4C;IACvE,cAAc,CAAa;IACnC,yDAAyD;IAClD,kBAAkB,CAAC,CAAS;QACjC,OAAO,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,0DAA0D;IACnD,kBAAkB,CAAC,CAAS;QACjC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;IAC3B,CAAC;IAED,kCAAkC;IAClC,YAAoB,YAAuB,EAAE,aAAyB,EAAE,MAAe;QACrF,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;IAC3C,CAAC;IACD,0BAA0B;IACnB,KAAK;QACV,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1F,CAAC;IACD;;;OAGG;IACI,mBAAmB,CAAC,SAAoB;QAC7C,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;YAC/B,OAAO,KAAK,CAAC;QACf,SAAS,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7E,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,GAAG;YACtC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;MAGE;IACK,gBAAgB,CAAC,SAAoB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,CAAC;IACD;;;;OAIG;IACI,oBAAoB;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC;IACD,yEAAyE;IACzE,IAAW,qBAAqB,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACjG,yEAAyE;IAClE,MAAM,CAAC,kBAAkB,CAAC,MAAe,EAAE,MAAc,EAAE,aAA0B,EAAE,MAAgB;QAC5G,MAAM,YAAY,GAAG,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QAClG,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC;IAC5H,CAAC;IACD,6HAA6H;IACtH,MAAM,CAAC,eAAe,CAAC,YAAuB,EAAE,aAA0B,EAAE,MAAgB;QACjG,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC;IACpI,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,eAAe,CAAC,MAAe,EAAE,OAAiB,EAAE,OAAiB,EAAE,QAAgB,EAAE,OAAe,EAAE,aAA0B,EAAE,MAAgB;QAClK,MAAM,WAAW,GAAG,QAAQ,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;QACrF,IAAI,WAAW,EAAE,CAAC;YAChB,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YAChC,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,WAAW,CAAC,CAAC;YACzF,MAAM,KAAK,GAAG,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACnE,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC;QACrH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;MAGE;IACK,MAAM,CAAC,uBAAuB,CAAC,MAAe,EAAE,IAA0B,EAAE,OAAe,EAAE,OAAe,EAAE,OAAe,EAClI,aAA0B,EAC1B,MAAgB;QAChB,MAAM,YAAY,GAAG,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnE,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACnE,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC;IAC5H,CAAC;IAED,qCAAqC;IAC9B,WAAW,KAAc,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACxE,yFAAyF;IAClF,YAAY,KAAe,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/E,yFAAyF;IAClF,YAAY,KAAe,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/E,yFAAyF;IAClF,YAAY,KAAe,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/E,mDAAmD;IAC5C,kBAAkB,KAAiB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/E,mHAAmH;IAC5G,gBAAgB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;QACvE,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAI,6BAA6B;YAC/D,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;OAEG;IACI,aAAa;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QACzC,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC1G,CAAC;IACD;;;OAGG;IACI,iBAAiB;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IACD,oCAAoC;IAC7B,mBAAmB,CAAC,KAAU,IAAa,OAAO,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC;IACnF,wCAAwC;IACxB,aAAa,CAAC,KAAoB;QAChD,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC;gBAAE,OAAO,KAAK,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;;;;;OAWG;IACI,sBAAsB,CAAC,CAAS,EAAE,gBAAyB,EAAE,OAAuB;QACzF,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,gBAAgB,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACxE,WAAW,GAAG,gBAAgB,CAAC;QACjC,CAAC;aAAM,IAAI,OAAO,YAAY,aAAa,EAAE,CAAC;YAC5C,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACzJ,CAAC;QACD,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,EAAE,EAAE,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,YAAY,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,WAAW,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAK,yBAAyB;QACjE,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,yBAAyB;QACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,wBAAwB;QAChE,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;QACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW;gBACtB,OAAO,GAAG,CAAC,GAAG,YAAY,CAAC;;gBAE3B,OAAO,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,YAAY,CAAC;YAC7C,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;YACxD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAErB,IAAI,SAAS;gBACX,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;YAElC,IAAI,WAAW,EAAE,CAAC;gBAChB,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC3D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,cAAc,EAAE,CAAC;gBACnB,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC/C,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC3D,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACpC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yEAAyE;IAClE,yBAAyB,CAAC,OAAwB;QACvD,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,SAAiB;QACvC,MAAM,GAAG,GAAG,UAAU,CAAC,wCAAwC,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACvG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACrC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,SAAiB;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACrC,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,6CAA6C;IACtC,WAAW,CAAC,KAAc,EAAE,SAAqB;QACtD,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACnC,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,GAAG,SAAS,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhD,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjD,CAAC;IACD;;;OAGG;IACI,iBAAiB,CAAC,SAAiB,EAAE,SAAiB,EAAE,MAAgB;QAC7E,6BAA6B;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,GAAG,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9F,CAAC;IACD;;;OAGG;IACI,4BAA4B,CAAC,SAAiB,EAAE,SAAiB,EAAE,MAAkC;QAC1G,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,OAAO,yBAAyB,CAAC,sBAAsB,CACrD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,GAAG,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,EAC5E,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC,EAAI,sFAAsF;QACzK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC,IAAI,GAAG,QAAQ,GAAG,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,EAC1G,MAAM,CAAC,CAAC;IACZ,CAAC;IACD;;;;;OAKG;IACH,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC;IAChE,CAAC;IACD;;;;OAIG;IACI,wBAAwB;QAC7B,wEAAwE;QACxE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC;YAC5C,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9H,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAE/E,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Solid\n */\n\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\nimport { AxisOrder, Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\nimport { GeometryHandler, UVSurface } from \"../geometry3d/GeometryHandler\";\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\nimport { Vector2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { Range3d } from \"../geometry3d/Range\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { SolidPrimitive } from \"./SolidPrimitive\";\n\n/**\n * A sphere mapped by an arbitrary transform.\n * * Typically, the stored matrix has orthogonal columns. In this case, if two columns have equal length, the\n * resulting geometry is ellipsoidal; if all three columns have equal length, the resulting geometry is a sphere.\n * * Creating a Sphere without orthogonal columns is possible, but not recommended, for the resulting geometry\n * lacks portability; for example, such a Sphere cannot be represented as a DGN element (see [[createDgnSphere]]).\n * @public\n */\nexport class Sphere extends SolidPrimitive implements UVSurface {\n /** String name for schema properties */\n public readonly solidPrimitiveType = \"sphere\";\n\n private _localToWorld: Transform; // local coordinates = unit sphere at origin\n private _latitudeSweep: AngleSweep;\n /** Return the latitude (in radians) all fractional v. */\n public vFractionToRadians(v: number): number {\n return this._latitudeSweep.fractionToRadians(v);\n }\n /** Return the longitude (in radians) all fractional u. */\n public uFractionToRadians(u: number): number {\n return u * Math.PI * 2.0;\n }\n\n /** Constructor CAPTURES inputs */\n private constructor(localToWorld: Transform, latitudeSweep: AngleSweep, capped: boolean) {\n super(capped);\n this._localToWorld = localToWorld;\n this._latitudeSweep = latitudeSweep;\n this._latitudeSweep.capLatitudeInPlace();\n }\n /** return a deep clone */\n public clone(): Sphere {\n return new Sphere(this._localToWorld.clone(), this._latitudeSweep.clone(), this.capped);\n }\n /**\n * Transform the sphere in place.\n * * Fails if the transform is singular.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n if (transform.matrix.isSingular())\n return false;\n transform.multiplyTransformTransform(this._localToWorld, this._localToWorld);\n if (transform.matrix.determinant() < 0.0)\n this._latitudeSweep.reverseInPlace();\n return true;\n }\n /**\n * Return a transformed clone.\n * * Fails if the transform is singular.\n */\n public cloneTransformed(transform: Transform): Sphere | undefined {\n const result = this.clone();\n return result.tryTransformInPlace(transform) ? result : undefined;\n }\n /**\n * Construct a rigid coordinate frame from the local coordinate frame.\n * * The returned frame is right-handed, with perpendicular unit axes.\n * * Compare to [[cloneLocalToWorld]].\n */\n public getConstructiveFrame(): Transform | undefined {\n return this._localToWorld.cloneRigid();\n }\n /** Return the latitude sweep as fraction of south pole to north pole. */\n public get latitudeSweepFraction(): number { return this._latitudeSweep.sweepRadians / Math.PI; }\n /** Create from center and radius, with optional restricted latitudes. */\n public static createCenterRadius(center: Point3d, radius: number, latitudeSweep?: AngleSweep, capped?: boolean): Sphere {\n const localToWorld = Transform.createOriginAndMatrix(center, Matrix3d.createUniformScale(radius));\n return new Sphere(localToWorld, latitudeSweep ? latitudeSweep.clone() : AngleSweep.createFullLatitude(), capped ?? false);\n }\n /** Create an ellipsoid which is a unit sphere mapped to position by an (arbitrary, possibly skewed and scaled) transform. */\n public static createEllipsoid(localToWorld: Transform, latitudeSweep?: AngleSweep, capped?: boolean): Sphere | undefined {\n return new Sphere(localToWorld.clone(), latitudeSweep ? latitudeSweep.clone() : AngleSweep.createFullLatitude(), capped ?? false);\n }\n\n /**\n * Create a sphere from the typical parameters of the DGN file.\n * * This method normalizes the input vectors, squares `vectorX` against `vectorZ`, and scales the radii by the vectors' original lengths.\n * * These restrictions allow the sphere to be represented by an element in the DGN file.\n */\n public static createDgnSphere(center: Point3d, vectorX: Vector3d, vectorZ: Vector3d, radiusXY: number, radiusZ: number, latitudeSweep?: AngleSweep, capped?: boolean): Sphere | undefined {\n const rigidMatrix = Matrix3d.createRigidFromColumns(vectorZ, vectorX, AxisOrder.ZXY);\n if (rigidMatrix) {\n radiusXY *= vectorX.magnitude();\n rigidMatrix.scaleColumns(radiusXY, radiusXY, radiusZ * vectorZ.magnitude(), rigidMatrix);\n const frame = Transform.createOriginAndMatrix(center, rigidMatrix);\n return new Sphere(frame, latitudeSweep ? latitudeSweep.clone() : AngleSweep.createFullLatitude(), capped ?? false);\n }\n return undefined;\n }\n\n /**\n * Create a sphere.\n * * If `axes` is supplied, its columns are scaled by the radii to form the sphere's local frame.\n */\n public static createFromAxesAndScales(center: Point3d, axes: undefined | Matrix3d, radiusX: number, radiusY: number, radiusZ: number,\n latitudeSweep?: AngleSweep,\n capped?: boolean): Sphere | undefined {\n const localToWorld = Transform.createOriginAndMatrix(center, axes);\n localToWorld.matrix.scaleColumnsInPlace(radiusX, radiusY, radiusZ);\n return new Sphere(localToWorld, latitudeSweep ? latitudeSweep.clone() : AngleSweep.createFullLatitude(), capped ?? false);\n }\n\n /** return (copy of) sphere center */\n public cloneCenter(): Point3d { return this._localToWorld.getOrigin(); }\n /** return the (full length, i.e. scaled by radius) X vector from the sphere transform */\n public cloneVectorX(): Vector3d { return this._localToWorld.matrix.columnX(); }\n /** return the (full length, i.e. scaled by radius) Y vector from the sphere transform */\n public cloneVectorY(): Vector3d { return this._localToWorld.matrix.columnY(); }\n /** return the (full length, i.e. scaled by radius) Z vector from the sphere transform */\n public cloneVectorZ(): Vector3d { return this._localToWorld.matrix.columnZ(); }\n /** return (a copy of) the sphere's angle sweep. */\n public cloneLatitudeSweep(): AngleSweep { return this._latitudeSweep.clone(); }\n /** Test if the geometry is a true sphere taking the transform (which might have nonuniform scaling) is applied. */\n public trueSphereRadius(): number | undefined {\n const factors = this._localToWorld.matrix.factorRigidWithSignedScale();\n if (!factors) return undefined;\n if (factors && factors.scale > 0) // why do we rule out mirror?\n return factors.scale;\n return undefined;\n }\n /**\n * Return the largest of the primary xyz axis radii\n */\n public maxAxisRadius(): number {\n const matrix = this._localToWorld.matrix;\n return Geometry.maxXYZ(matrix.columnXMagnitude(), matrix.columnYMagnitude(), matrix.columnZMagnitude());\n }\n /**\n * Return a (clone of) the sphere's local to world transformation.\n * * Compare to [[getConstructiveFrame]].\n */\n public cloneLocalToWorld(): Transform {\n return this._localToWorld.clone();\n }\n /** Test if `other` is a `Sphere` */\n public isSameGeometryClass(other: any): boolean { return other instanceof Sphere; }\n /** Test for same geometry in `other` */\n public override isAlmostEqual(other: GeometryQuery): boolean {\n if (other instanceof Sphere) {\n if (this.capped !== other.capped) return false;\n if (!this._localToWorld.isAlmostEqual(other._localToWorld)) return false;\n return true;\n }\n return false;\n }\n /**\n * Return strokes for the elliptical arc cross-section at latitude sweep fraction v.\n * * Optional inputs control the number of strokes along the cross-section:\n * * If `fixedStrokeCount` is supplied, it is taken as the cross-section stroke count.\n * * If `fixedStrokeCount` is undefined, stroke count is computed by applying `options` to the cross-section.\n * * If neither input is supplied, the stroke count default is 16.\n * * In any case, stroke count is clamped to the interval [4,64].\n * @param v fractional position along the sphere axis\n * @param fixedStrokeCount optional stroke count in u-direction\n * @param options optional stroke options in u-direction\n * @return strokes as line string\n */\n public strokeConstantVSection(v: number, fixedStrokeCount?: number, options?: StrokeOptions): LineString3d {\n let strokeCount = 16;\n if (fixedStrokeCount !== undefined && Number.isFinite(fixedStrokeCount)) {\n strokeCount = fixedStrokeCount;\n } else if (options instanceof StrokeOptions) {\n strokeCount = options.applyTolerancesToArc(Geometry.maxXY(this._localToWorld.matrix.columnXMagnitude(), this._localToWorld.matrix.columnYMagnitude()));\n }\n strokeCount = Geometry.clampToStartEnd(strokeCount, 4, 64);\n const transform = this._localToWorld;\n const phi = this.vFractionToRadians(v);\n const c1 = Math.cos(phi);\n const s1 = Math.sin(phi);\n let c0, s0;\n const result = LineString3d.createForStrokes(strokeCount, options);\n const deltaRadians = Math.PI * 2.0 / strokeCount;\n const fractions = result.fractions; // possibly undefined !!!\n const derivatives = result.packedDerivatives; // possibly undefined !!!\n const uvParams = result.packedUVParams; // possibly undefined !!\n const surfaceNormals = result.packedSurfaceNormals;\n const dXdu = Vector3d.create();\n const dXdv = Vector3d.create();\n const normal = Vector3d.create();\n let radians = 0;\n for (let i = 0; i <= strokeCount; i++) {\n if (i * 2 <= strokeCount)\n radians = i * deltaRadians;\n else\n radians = (i - strokeCount) * deltaRadians;\n c0 = Math.cos(radians);\n s0 = Math.sin(radians);\n const xyz = transform.multiplyXYZ(c1 * c0, c1 * s0, s1);\n result.addPoint(xyz);\n\n if (fractions)\n fractions.push(i / strokeCount);\n\n if (derivatives) {\n transform.matrix.multiplyXYZ(-c1 * s0, c1 * c0, 0.0, dXdu);\n derivatives.push(dXdu);\n }\n if (uvParams) {\n uvParams.pushXY(i / strokeCount, v);\n }\n if (surfaceNormals) {\n transform.matrix.multiplyXYZ(-s0, c0, 0, dXdu);\n transform.matrix.multiplyXYZ(-s1 * c0, -s1 * s0, c1, dXdv);\n dXdu.unitCrossProduct(dXdv, normal);\n surfaceNormals.push(normal);\n }\n }\n return result;\n }\n\n /** Second step of double dispatch: call `handler.handleSphere(this)` */\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\n return handler.handleSphere(this);\n }\n\n /**\n * Return the Arc3d section at uFraction. For the sphere, this is a meridian arc.\n * @param uFraction fractional position along the equator.\n */\n public constantUSection(uFraction: number): Arc3d {\n const phi = AngleSweep.fractionToSignedPeriodicFractionStartEnd(uFraction, 0, Angle.pi2Radians, false);\n const s1 = Math.sin(phi);\n const c1 = Math.cos(phi);\n const transform = this._localToWorld;\n const center = transform.getOrigin();\n const vector0 = transform.matrix.multiplyXYZ(c1, s1, 0);\n const vector90 = transform.matrix.multiplyXYZ(0, 0, 1);\n return Arc3d.create(center, vector0, vector90, this._latitudeSweep);\n }\n\n /**\n * Return the Arc3d section at vFraction. For the sphere, this is a latitude circle.\n * @param vFraction fractional position along the sweep direction\n */\n public constantVSection(vFraction: number): Loop {\n const phi = this._latitudeSweep.fractionToRadians(vFraction);\n const s1 = Math.sin(phi);\n const c1 = Math.cos(phi);\n const transform = this._localToWorld;\n const center = transform.multiplyXYZ(0, 0, s1);\n const vector0 = transform.matrix.multiplyXYZ(c1, 0, 0);\n const vector90 = transform.matrix.multiplyXYZ(0, c1, 0);\n return Loop.create(Arc3d.create(center, vector0, vector90));\n }\n /** Extend a range to contain this sphere. */\n public extendRange(range: Range3d, transform?: Transform): void {\n let placement = this._localToWorld;\n if (transform) {\n placement = transform.multiplyTransformTransform(placement);\n }\n\n range.extendTransformedXYZ(placement, -1, -1, -1);\n range.extendTransformedXYZ(placement, 1, -1, -1);\n range.extendTransformedXYZ(placement, -1, 1, -1);\n range.extendTransformedXYZ(placement, 1, 1, -1);\n\n range.extendTransformedXYZ(placement, -1, -1, 1);\n range.extendTransformedXYZ(placement, 1, -1, 1);\n range.extendTransformedXYZ(placement, -1, 1, 1);\n range.extendTransformedXYZ(placement, 1, 1, 1);\n\n }\n /** Evaluate as a uv surface\n * @param uFraction fractional position on minor arc (theta, longitude)\n * @param vFraction fractional position on major arc (phi, latitude)\n */\n public uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d {\n // sphere with radius 1 . . .\n const thetaRadians = this.uFractionToRadians(uFraction);\n const phiRadians = this.vFractionToRadians(vFraction);\n const cosTheta = Math.cos(thetaRadians);\n const sinTheta = Math.sin(thetaRadians);\n const sinPhi = Math.sin(phiRadians);\n const cosPhi = Math.cos(phiRadians);\n return this._localToWorld.multiplyXYZ(cosTheta * cosPhi, sinTheta * cosPhi, sinPhi, result);\n }\n /** Evaluate as a uv surface, returning point and two vectors.\n * @param uFraction fractional position on minor arc (theta, longitude)\n * @param vFraction fractional position on major arc (phi, latitude)\n */\n public uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\n const thetaRadians = this.uFractionToRadians(uFraction);\n const phiRadians = this.vFractionToRadians(vFraction);\n const fTheta = Math.PI * 2.0;\n const fPhi = this._latitudeSweep.sweepRadians;\n const cosTheta = Math.cos(thetaRadians);\n const sinTheta = Math.sin(thetaRadians);\n const sinPhi = Math.sin(phiRadians);\n const cosPhi = Math.cos(phiRadians);\n return Plane3dByOriginAndVectors.createOriginAndVectors(\n this._localToWorld.multiplyXYZ(cosTheta * cosPhi, sinTheta * cosPhi, sinPhi),\n this._localToWorld.matrix.multiplyXYZ(-fTheta * sinTheta, fTheta * cosTheta, 0), // !!! note cosTheta term is omitted -- scale is wrong, but remains non-zero at poles.\n this._localToWorld.matrix.multiplyXYZ(-fPhi * cosTheta * sinPhi, -fPhi * sinTheta * sinPhi, fPhi * cosPhi),\n result);\n }\n /**\n * * A sphere is can be closed two ways:\n * * full sphere (no caps needed for closure)\n * * incomplete but with caps\n * @return true if this is a closed volume.\n */\n public get isClosedVolume(): boolean {\n return this.capped || this._latitudeSweep.isFullLatitudeSweep;\n }\n /**\n * Directional distance query\n * * u direction is around latitude circle at maximum distance from axis.\n * * v direction is on a line of longitude between the latitude limits.\n */\n public maxIsoParametricDistance(): Vector2d {\n // approximate radius at equator .. if elliptic, this is not exact . . .\n const rX = this._localToWorld.matrix.columnXMagnitude();\n const rY = this._localToWorld.matrix.columnYMagnitude();\n const rZ = this._localToWorld.matrix.columnZMagnitude();\n const rMaxU = Math.max(rX, rY);\n let dMaxU = Math.PI * 2.0 * rMaxU;\n if (!this._latitudeSweep.isRadiansInSweep(0.0))\n dMaxU *= Math.max(Math.cos(Math.abs(this._latitudeSweep.startRadians)), Math.cos(Math.abs(this._latitudeSweep.endRadians)));\n const dMaxV = Math.max(rMaxU, rZ) * Math.abs(this._latitudeSweep.sweepRadians);\n\n return Vector2d.create(dMaxU, dMaxV);\n }\n}\n"]}
@@ -20,27 +20,31 @@ export declare class SweepContour {
20
20
  localToWorld: Transform;
21
21
  /** Axis used only in rotational case. */
22
22
  axis: Ray3d | undefined;
23
- /** caches */
23
+ /** Caches */
24
24
  private _xyStrokes?;
25
25
  private _facets?;
26
26
  private constructor();
27
- /** Create for linear sweep.
27
+ /**
28
+ * Create for linear sweep.
28
29
  * @param contour curve to sweep, CAPTURED. For best results, contour should be planar.
29
30
  * @param defaultNormal optional default normal for guiding coordinate frame setup.
30
31
  */
31
32
  static createForLinearSweep(contour: AnyCurve, defaultNormal?: Vector3d): SweepContour | undefined;
32
- /** Create for linear sweep.
33
- * @param points polygon to sweep, CAPTURED as a Loop. Closure point is optional. If multiple polygons are passed in, parity logic is employed.
33
+ /**
34
+ * Create for linear sweep.
35
+ * @param points polygon to sweep, CAPTURED as a Loop. Closure point is optional. If multiple polygons are passed in,
36
+ * parity logic is employed.
34
37
  * For best results, all points should be coplanar.
35
38
  * @param defaultNormal optional default normal for guiding coordinate frame setup.
36
39
  */
37
40
  static createForPolygon(points: MultiLineStringDataVariant, defaultNormal?: Vector3d): SweepContour | undefined;
38
- /** Create for rotational sweep.
41
+ /**
42
+ * Create for rotational sweep.
39
43
  * @param contour curve to sweep, CAPTURED. For best results, contour should be coplanar with axis.
40
44
  * @param axis rotation axis
41
45
  */
42
46
  static createForRotation(contour: AnyCurve, axis: Ray3d): SweepContour | undefined;
43
- /** Return (Reference to) the curves */
47
+ /** Return (Reference to) the curves. */
44
48
  getCurves(): CurveCollection;
45
49
  /**
46
50
  * Apply `transform` to the curves, axis.
@@ -53,14 +57,15 @@ export declare class SweepContour {
53
57
  cloneTransformed(transform: Transform): SweepContour | undefined;
54
58
  /** Test for near equality of curves, frame, and axis. */
55
59
  isAlmostEqual(other: any): boolean;
56
- /** Recompute the local strokes cache for this contour */
60
+ /** Recompute the local strokes cache for this contour. */
57
61
  computeXYStrokes(options?: StrokeOptions): void;
58
- /** Return cached contour strokes */
62
+ /** Return cached contour strokes. */
59
63
  get xyStrokes(): CurveCollection | undefined;
60
64
  /**
61
65
  * Build the (cached) internal facets for the contour.
62
66
  * @param options primarily how to stroke the contour, but also how to facet it.
63
- * * By default, a triangulation is computed, but if `options.maximizeConvexFacets === true`, edges between coplanar triangles are removed to return maximally convex facets.
67
+ * * By default, a triangulation is computed, but if `options.maximizeConvexFacets === true`, edges between coplanar
68
+ * triangles are removed to return maximally convex facets.
64
69
  */
65
70
  buildFacets(options?: StrokeOptions): void;
66
71
  /**
@@ -68,21 +73,25 @@ export declare class SweepContour {
68
73
  * * This protects against PolyfaceBuilder reusing facets constructed with different options settings.
69
74
  */
70
75
  purgeFacets(): void;
71
- /** Emit facets to a builder.
76
+ /**
77
+ * Emit facets to a builder.
72
78
  * This method may cache and reuse facets over multiple calls.
73
79
  */
74
80
  emitFacets(builder: PolyfaceBuilder, reverse: boolean, transform?: Transform): void;
75
- /** Emit facets to a function
81
+ /**
82
+ * Emit facets to a function.
76
83
  * This method may cache and reuse facets over multiple calls.
77
- * @param announce callback to receive the facet set
78
- * @param options how to stroke the contour
84
+ * @param announce callback to receive the facet set.
85
+ * @param options how to stroke the contour.
79
86
  */
80
87
  announceFacets(announce: (facets: IndexedPolyface) => void, options?: StrokeOptions): void;
81
88
  /**
82
89
  * Create a UnionOfConvexClipPlaneSets that clips to the swept faceted contour region.
83
90
  * @param sweepVector the sweep direction and distance:
84
- * * If undefined, the sweep direction is along the contour normal and no caps are constructed (the sweep is infinite in both directions).
85
- * * If defined, the returned clipper is inverted if and only if sweepVector is in the opposite half-space as the computed contour normal.
91
+ * * If undefined, the sweep direction is along the contour normal and no caps are constructed (the sweep is infinite
92
+ * in both directions).
93
+ * * If defined, the returned clipper is inverted if and only if sweepVector is in the opposite half-space as the
94
+ * computed contour normal.
86
95
  * @param cap0 construct a clip plane equal to the contour plane. Note that `sweepVector` must be defined.
87
96
  * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`.
88
97
  * @param options how to stroke the contour
@@ -1 +1 @@
1
- {"version":3,"file":"SweepContour.d.ts","sourceRoot":"","sources":["../../../src/solid/SweepContour.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAa,MAAM,qBAAqB,CAAC;AAM1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAW,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;;;GAIG;AACH,qBAAa,YAAY;IACvB,0EAA0E;IACnE,MAAM,EAAE,eAAe,CAAC;IAC/B,yEAAyE;IAClE,YAAY,EAAE,SAAS,CAAC;IAC/B,yCAAyC;IAClC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IAE/B,aAAa;IACb,OAAO,CAAC,UAAU,CAAC,CAAkB;IACrC,OAAO,CAAC,OAAO,CAAC,CAAkB;IAElC,OAAO;IAaP;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS;IAOzG;;;;OAIG;WACW,gBAAgB,CAAC,MAAM,EAAE,0BAA0B,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS;IAiBtH;;;OAGG;WACW,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS;IAQzF,uCAAuC;IAChC,SAAS,IAAI,eAAe;IACnC;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAgBzD,2BAA2B;IACpB,KAAK,IAAI,YAAY;IAG5B,kCAAkC;IAC3B,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS;IAMvE,yDAAyD;IAClD,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAezC,yDAAyD;IAClD,gBAAgB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAStD,oCAAoC;IACpC,IAAW,SAAS,IAAI,eAAe,GAAG,SAAS,CAElD;IAED;;;;OAIG;IACI,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAcjD;;;OAGG;IACI,WAAW;IAGlB;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAKnF;;;;OAIG;IACI,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAKjG;;;;;;;;;OASG;IACI,iCAAiC,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAE,OAAe,EAAE,IAAI,GAAE,OAAe,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,0BAA0B,GAAG,SAAS;CA8ChL"}
1
+ {"version":3,"file":"SweepContour.d.ts","sourceRoot":"","sources":["../../../src/solid/SweepContour.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAa,MAAM,qBAAqB,CAAC;AAM1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAW,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;;;GAIG;AACH,qBAAa,YAAY;IACvB,0EAA0E;IACnE,MAAM,EAAE,eAAe,CAAC;IAC/B,yEAAyE;IAClE,YAAY,EAAE,SAAS,CAAC;IAC/B,yCAAyC;IAClC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IAC/B,aAAa;IACb,OAAO,CAAC,UAAU,CAAC,CAAkB;IACrC,OAAO,CAAC,OAAO,CAAC,CAAkB;IAElC,OAAO;IAaP;;;;OAIG;WACW,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS;IAOzG;;;;;;OAMG;WACW,gBAAgB,CAAC,MAAM,EAAE,0BAA0B,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS;IAiBtH;;;;OAIG;WACW,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS;IAQzF,wCAAwC;IACjC,SAAS,IAAI,eAAe;IACnC;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAezD,2BAA2B;IACpB,KAAK,IAAI,YAAY;IAG5B,kCAAkC;IAC3B,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS;IAMvE,yDAAyD;IAClD,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAczC,0DAA0D;IACnD,gBAAgB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAStD,qCAAqC;IACrC,IAAW,SAAS,IAAI,eAAe,GAAG,SAAS,CAElD;IACD;;;;;OAKG;IACI,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAcjD;;;OAGG;IACI,WAAW;IAGlB;;;OAGG;IACI,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAKnF;;;;;OAKG;IACI,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAKjG;;;;;;;;;;;OAWG;IACI,iCAAiC,CACtC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAE,OAAe,EAAE,IAAI,GAAE,OAAe,EAAE,OAAO,CAAC,EAAE,aAAa,GAC5F,0BAA0B,GAAG,SAAS;CA8C1C"}
@@ -23,6 +23,15 @@ import { Point3d } from "../geometry3d/Point3dVector3d";
23
23
  * @public
24
24
  */
25
25
  export class SweepContour {
26
+ /** The underlying curve collection, in its world coordinates position. */
27
+ curves;
28
+ /** coordinate frame that in which the curves are all in the xy plane. */
29
+ localToWorld;
30
+ /** Axis used only in rotational case. */
31
+ axis;
32
+ /** Caches */
33
+ _xyStrokes;
34
+ _facets;
26
35
  constructor(contour, map, axis) {
27
36
  if (contour instanceof CurvePrimitive) {
28
37
  // this.curves is a CurveCollection (not AnyCurve) so that contour type determines closure.
@@ -36,7 +45,8 @@ export class SweepContour {
36
45
  this.localToWorld = map;
37
46
  this.axis = axis;
38
47
  }
39
- /** Create for linear sweep.
48
+ /**
49
+ * Create for linear sweep.
40
50
  * @param contour curve to sweep, CAPTURED. For best results, contour should be planar.
41
51
  * @param defaultNormal optional default normal for guiding coordinate frame setup.
42
52
  */
@@ -47,8 +57,10 @@ export class SweepContour {
47
57
  }
48
58
  return undefined;
49
59
  }
50
- /** Create for linear sweep.
51
- * @param points polygon to sweep, CAPTURED as a Loop. Closure point is optional. If multiple polygons are passed in, parity logic is employed.
60
+ /**
61
+ * Create for linear sweep.
62
+ * @param points polygon to sweep, CAPTURED as a Loop. Closure point is optional. If multiple polygons are passed in,
63
+ * parity logic is employed.
52
64
  * For best results, all points should be coplanar.
53
65
  * @param defaultNormal optional default normal for guiding coordinate frame setup.
54
66
  */
@@ -70,7 +82,8 @@ export class SweepContour {
70
82
  }
71
83
  return undefined;
72
84
  }
73
- /** Create for rotational sweep.
85
+ /**
86
+ * Create for rotational sweep.
74
87
  * @param contour curve to sweep, CAPTURED. For best results, contour should be coplanar with axis.
75
88
  * @param axis rotation axis
76
89
  */
@@ -82,7 +95,7 @@ export class SweepContour {
82
95
  }
83
96
  return undefined;
84
97
  }
85
- /** Return (Reference to) the curves */
98
+ /** Return (Reference to) the curves. */
86
99
  getCurves() { return this.curves; }
87
100
  /**
88
101
  * Apply `transform` to the curves, axis.
@@ -130,7 +143,7 @@ export class SweepContour {
130
143
  return false;
131
144
  return true;
132
145
  }
133
- /** Recompute the local strokes cache for this contour */
146
+ /** Recompute the local strokes cache for this contour. */
134
147
  computeXYStrokes(options) {
135
148
  this._xyStrokes = undefined;
136
149
  const worldToLocal = this.localToWorld.inverse();
@@ -140,14 +153,15 @@ export class SweepContour {
140
153
  this._xyStrokes = strokes;
141
154
  }
142
155
  }
143
- /** Return cached contour strokes */
156
+ /** Return cached contour strokes. */
144
157
  get xyStrokes() {
145
158
  return this._xyStrokes;
146
159
  }
147
160
  /**
148
161
  * Build the (cached) internal facets for the contour.
149
162
  * @param options primarily how to stroke the contour, but also how to facet it.
150
- * * By default, a triangulation is computed, but if `options.maximizeConvexFacets === true`, edges between coplanar triangles are removed to return maximally convex facets.
163
+ * * By default, a triangulation is computed, but if `options.maximizeConvexFacets === true`, edges between coplanar
164
+ * triangles are removed to return maximally convex facets.
151
165
  */
152
166
  buildFacets(options) {
153
167
  if (this._facets)
@@ -170,7 +184,8 @@ export class SweepContour {
170
184
  purgeFacets() {
171
185
  this._facets = undefined;
172
186
  }
173
- /** Emit facets to a builder.
187
+ /**
188
+ * Emit facets to a builder.
174
189
  * This method may cache and reuse facets over multiple calls.
175
190
  */
176
191
  emitFacets(builder, reverse, transform) {
@@ -178,10 +193,11 @@ export class SweepContour {
178
193
  if (this._facets)
179
194
  builder.addIndexedPolyface(this._facets, reverse, transform);
180
195
  }
181
- /** Emit facets to a function
196
+ /**
197
+ * Emit facets to a function.
182
198
  * This method may cache and reuse facets over multiple calls.
183
- * @param announce callback to receive the facet set
184
- * @param options how to stroke the contour
199
+ * @param announce callback to receive the facet set.
200
+ * @param options how to stroke the contour.
185
201
  */
186
202
  announceFacets(announce, options) {
187
203
  this.buildFacets(options);
@@ -191,8 +207,10 @@ export class SweepContour {
191
207
  /**
192
208
  * Create a UnionOfConvexClipPlaneSets that clips to the swept faceted contour region.
193
209
  * @param sweepVector the sweep direction and distance:
194
- * * If undefined, the sweep direction is along the contour normal and no caps are constructed (the sweep is infinite in both directions).
195
- * * If defined, the returned clipper is inverted if and only if sweepVector is in the opposite half-space as the computed contour normal.
210
+ * * If undefined, the sweep direction is along the contour normal and no caps are constructed (the sweep is infinite
211
+ * in both directions).
212
+ * * If defined, the returned clipper is inverted if and only if sweepVector is in the opposite half-space as the
213
+ * computed contour normal.
196
214
  * @param cap0 construct a clip plane equal to the contour plane. Note that `sweepVector` must be defined.
197
215
  * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`.
198
216
  * @param options how to stroke the contour
@@ -206,7 +224,7 @@ export class SweepContour {
206
224
  sweepVector = this.localToWorld.matrix.columnZ();
207
225
  }
208
226
  options.maximizeConvexFacets = true; // produce fewer ConvexClipPlaneSets
209
- // It's a trip around the barn, but it's easy to make a polyface and scan it . . .
227
+ // it's a trip around the barn, but it's easy to make a polyface and scan it
210
228
  this.buildFacets(options);
211
229
  const facets = this._facets;
212
230
  if (facets) {
@@ -1 +1 @@
1
- {"version":3,"file":"SweepContour.js","sourceRoot":"","sources":["../../../src/solid/SweepContour.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 { ClipPlane } from \"../clipping/ClipPlane\";\r\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\r\nimport { UnionOfConvexClipPlaneSets } from \"../clipping/UnionOfConvexClipPlaneSets\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { AnyCurve, AnyRegion } from \"../curve/CurveTypes\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { ParityRegion } from \"../curve/ParityRegion\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { RegionOps } from \"../curve/RegionOps\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { FrameBuilder } from \"../geometry3d/FrameBuilder\";\r\nimport { MultiLineStringDataVariant } from \"../geometry3d/IndexedXYZCollection\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { IndexedPolyface } from \"../polyface/Polyface\";\r\nimport { PolyfaceBuilder } from \"../polyface/PolyfaceBuilder\";\r\n\r\n/**\r\n * Sweepable planar contour with Transform for local to world interaction.\r\n * * The surface/solid classes `LinearSweep`, `RotationalSweep`, `RuledSweep` use this for their swept contours.\r\n * @public\r\n */\r\nexport class SweepContour {\r\n /** The underlying curve collection, in its world coordinates position. */\r\n public curves: CurveCollection;\r\n /** coordinate frame that in which the curves are all in the xy plane. */\r\n public localToWorld: Transform;\r\n /** Axis used only in rotational case. */\r\n public axis: Ray3d | undefined;\r\n\r\n /** caches */\r\n private _xyStrokes?: CurveCollection;\r\n private _facets?: IndexedPolyface;\r\n\r\n private constructor(contour: AnyCurve, map: Transform, axis: Ray3d | undefined) {\r\n if (contour instanceof CurvePrimitive) {\r\n // this.curves is a CurveCollection (not AnyCurve) so that contour type determines closure.\r\n // This is the only time we detect CurvePrimitive closure and wrap as a relevant CurveChain.\r\n // Note that we are ASSUMING closure means planar here. This is potentially problematic.\r\n const primitive = contour;\r\n contour = contour.startPoint().isAlmostEqual(contour.endPoint()) ? new Loop() : new Path();\r\n contour.tryAddChild(primitive);\r\n }\r\n this.curves = contour;\r\n this.localToWorld = map;\r\n this.axis = axis;\r\n }\r\n /** Create for linear sweep.\r\n * @param contour curve to sweep, CAPTURED. For best results, contour should be planar.\r\n * @param defaultNormal optional default normal for guiding coordinate frame setup.\r\n */\r\n public static createForLinearSweep(contour: AnyCurve, defaultNormal?: Vector3d): SweepContour | undefined {\r\n const localToWorld = FrameBuilder.createRightHandedFrame(defaultNormal, contour);\r\n if (localToWorld) {\r\n return new SweepContour(contour, localToWorld, undefined);\r\n }\r\n return undefined;\r\n }\r\n /** Create for linear sweep.\r\n * @param points polygon to sweep, CAPTURED as a Loop. Closure point is optional. If multiple polygons are passed in, parity logic is employed.\r\n * For best results, all points should be coplanar.\r\n * @param defaultNormal optional default normal for guiding coordinate frame setup.\r\n */\r\n public static createForPolygon(points: MultiLineStringDataVariant, defaultNormal?: Vector3d): SweepContour | undefined {\r\n const localToWorld = FrameBuilder.createRightHandedFrame(defaultNormal, points);\r\n if (localToWorld) {\r\n const linestrings = LineString3d.createArrayOfLineString3d(points);\r\n const loops = [];\r\n for (const ls of linestrings) {\r\n ls.addClosurePoint();\r\n loops.push(Loop.create(ls));\r\n }\r\n if (loops.length === 1) {\r\n return new SweepContour(loops[0], localToWorld, undefined);\r\n } else if (loops.length > 1) {\r\n return new SweepContour(ParityRegion.createLoops(loops), localToWorld, undefined);\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Create for rotational sweep.\r\n * @param contour curve to sweep, CAPTURED. For best results, contour should be coplanar with axis.\r\n * @param axis rotation axis\r\n */\r\n public static createForRotation(contour: AnyCurve, axis: Ray3d): SweepContour | undefined {\r\n // createRightHandedFrame -- the axis is a last-gasp resolver for in-plane vectors.\r\n const localToWorld = FrameBuilder.createRightHandedFrame(undefined, contour, axis);\r\n if (localToWorld) {\r\n return new SweepContour(contour, localToWorld, axis.clone());\r\n }\r\n return undefined;\r\n }\r\n /** Return (Reference to) the curves */\r\n public getCurves(): CurveCollection { return this.curves; }\r\n /**\r\n * Apply `transform` to the curves, axis.\r\n * * The local to world frame is reconstructed for the transformed curves.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (this.curves.tryTransformInPlace(transform)) {\r\n if (this.axis)\r\n this.axis.transformInPlace(transform);\r\n\r\n const localToWorld = this.axis !== undefined\r\n ? FrameBuilder.createRightHandedFrame(undefined, this.curves, this.axis)\r\n : FrameBuilder.createRightHandedFrame(undefined, this.curves);\r\n if (localToWorld) {\r\n this.localToWorld.setFrom(localToWorld);\r\n this._xyStrokes = undefined;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** Return a deep clone. */\r\n public clone(): SweepContour {\r\n return new SweepContour(this.curves.clone(), this.localToWorld.clone(), this.axis);\r\n }\r\n /** Return a transformed clone. */\r\n public cloneTransformed(transform: Transform): SweepContour | undefined {\r\n const newContour = this.clone();\r\n if (newContour.tryTransformInPlace(transform))\r\n return newContour;\r\n return undefined;\r\n }\r\n /** Test for near equality of curves, frame, and axis. */\r\n public isAlmostEqual(other: any): boolean {\r\n if (! (other instanceof SweepContour))\r\n return false;\r\n if (!this.curves.isAlmostEqual(other.curves))\r\n return false;\r\n if (!this.localToWorld.isAlmostEqual(other.localToWorld))\r\n return false;\r\n if (this.axis && other.axis) {\r\n if (!this.axis.isAlmostEqual(other.axis))\r\n return false;\r\n } else if (this.axis || other.axis)\r\n return false;\r\n return true;\r\n }\r\n\r\n /** Recompute the local strokes cache for this contour */\r\n public computeXYStrokes(options?: StrokeOptions): void {\r\n this._xyStrokes = undefined;\r\n const worldToLocal = this.localToWorld.inverse();\r\n if (worldToLocal) {\r\n const strokes = this.curves.cloneStroked(options);\r\n if (strokes.tryTransformInPlace(worldToLocal))\r\n this._xyStrokes = strokes;\r\n }\r\n }\r\n /** Return cached contour strokes */\r\n public get xyStrokes(): CurveCollection | undefined {\r\n return this._xyStrokes;\r\n }\r\n\r\n /**\r\n * Build the (cached) internal facets for the contour.\r\n * @param options primarily how to stroke the contour, but also how to facet it.\r\n * * By default, a triangulation is computed, but if `options.maximizeConvexFacets === true`, edges between coplanar triangles are removed to return maximally convex facets.\r\n */\r\n public buildFacets(options?: StrokeOptions): void {\r\n if (this._facets)\r\n return;\r\n if (!this.curves.isAnyRegion())\r\n return;\r\n const worldToLocal = this.localToWorld.inverse();\r\n if (!worldToLocal)\r\n return;\r\n const localRegion = this.curves.cloneTransformed(worldToLocal) as AnyRegion | undefined;\r\n if (!localRegion)\r\n return;\r\n if (this._facets = RegionOps.facetRegionXY(localRegion, options))\r\n this._facets.tryTransformInPlace(this.localToWorld);\r\n }\r\n /**\r\n * Delete facet cache.\r\n * * This protects against PolyfaceBuilder reusing facets constructed with different options settings.\r\n */\r\n public purgeFacets() {\r\n this._facets = undefined;\r\n }\r\n /** Emit facets to a builder.\r\n * This method may cache and reuse facets over multiple calls.\r\n */\r\n public emitFacets(builder: PolyfaceBuilder, reverse: boolean, transform?: Transform) {\r\n this.buildFacets(builder.options);\r\n if (this._facets)\r\n builder.addIndexedPolyface(this._facets, reverse, transform);\r\n }\r\n /** Emit facets to a function\r\n * This method may cache and reuse facets over multiple calls.\r\n * @param announce callback to receive the facet set\r\n * @param options how to stroke the contour\r\n */\r\n public announceFacets(announce: (facets: IndexedPolyface) => void, options?: StrokeOptions): void {\r\n this.buildFacets(options);\r\n if (this._facets)\r\n announce(this._facets);\r\n }\r\n /**\r\n * Create a UnionOfConvexClipPlaneSets that clips to the swept faceted contour region.\r\n * @param sweepVector the sweep direction and distance:\r\n * * If undefined, the sweep direction is along the contour normal and no caps are constructed (the sweep is infinite in both directions).\r\n * * If defined, the returned clipper is inverted if and only if sweepVector is in the opposite half-space as the computed contour normal.\r\n * @param cap0 construct a clip plane equal to the contour plane. Note that `sweepVector` must be defined.\r\n * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`.\r\n * @param options how to stroke the contour\r\n * @returns clipper defined by faceting then sweeping the contour region\r\n */\r\n public sweepToUnionOfConvexClipPlaneSets(sweepVector?: Vector3d, cap0: boolean = false, cap1: boolean = false, options?: StrokeOptions): UnionOfConvexClipPlaneSets | undefined {\r\n if (!options)\r\n options = StrokeOptions.createForFacets();\r\n if (!sweepVector) {\r\n cap0 = cap1 = false;\r\n sweepVector = this.localToWorld.matrix.columnZ();\r\n }\r\n options.maximizeConvexFacets = true; // produce fewer ConvexClipPlaneSets\r\n // It's a trip around the barn, but it's easy to make a polyface and scan it . . .\r\n this.buildFacets(options);\r\n const facets = this._facets;\r\n if (facets) {\r\n const point0 = Point3d.create();\r\n const point1 = Point3d.create();\r\n const result = UnionOfConvexClipPlaneSets.createEmpty();\r\n const visitor = facets.createVisitor(1);\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n const numEdges = visitor.point.length - 1;\r\n const clipper = ConvexClipPlaneSet.createEmpty();\r\n for (let i = 0; i < numEdges; i++) {\r\n visitor.point.getPoint3dAtUncheckedPointIndex(i, point0);\r\n visitor.point.getPoint3dAtUncheckedPointIndex(i + 1, point1);\r\n const plane = ClipPlane.createEdgeAndUpVector(point1, point0, sweepVector);\r\n const visible = visitor.edgeVisible[i];\r\n plane?.setFlags(!visible, !visible);\r\n clipper.addPlaneToConvexSet(plane);\r\n }\r\n result.addConvexSet(clipper);\r\n }\r\n if (cap0 || cap1) {\r\n const zVector = this.localToWorld.matrix.columnZ();\r\n const plane0Origin = this.localToWorld.getOrigin();\r\n const plane1Origin = plane0Origin.plus(sweepVector);\r\n const inwardNormal0 = zVector.clone();\r\n const inwardNormal1 = zVector.negate();\r\n const clipper = ConvexClipPlaneSet.createEmpty();\r\n if (cap0)\r\n clipper.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(inwardNormal0, plane0Origin));\r\n if (cap1)\r\n clipper.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(inwardNormal1, plane1Origin));\r\n result.addConvexSet(clipper);\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SweepContour.js","sourceRoot":"","sources":["../../../src/solid/SweepContour.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Solid\n */\n\nimport { ClipPlane } from \"../clipping/ClipPlane\";\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\nimport { UnionOfConvexClipPlaneSets } from \"../clipping/UnionOfConvexClipPlaneSets\";\nimport { CurveCollection } from \"../curve/CurveCollection\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { AnyCurve, AnyRegion } from \"../curve/CurveTypes\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { Path } from \"../curve/Path\";\nimport { RegionOps } from \"../curve/RegionOps\";\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\nimport { FrameBuilder } from \"../geometry3d/FrameBuilder\";\nimport { MultiLineStringDataVariant } from \"../geometry3d/IndexedXYZCollection\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../geometry3d/Ray3d\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { IndexedPolyface } from \"../polyface/Polyface\";\nimport { PolyfaceBuilder } from \"../polyface/PolyfaceBuilder\";\n\n/**\n * Sweepable planar contour with Transform for local to world interaction.\n * * The surface/solid classes `LinearSweep`, `RotationalSweep`, `RuledSweep` use this for their swept contours.\n * @public\n */\nexport class SweepContour {\n /** The underlying curve collection, in its world coordinates position. */\n public curves: CurveCollection;\n /** coordinate frame that in which the curves are all in the xy plane. */\n public localToWorld: Transform;\n /** Axis used only in rotational case. */\n public axis: Ray3d | undefined;\n /** Caches */\n private _xyStrokes?: CurveCollection;\n private _facets?: IndexedPolyface;\n\n private constructor(contour: AnyCurve, map: Transform, axis: Ray3d | undefined) {\n if (contour instanceof CurvePrimitive) {\n // this.curves is a CurveCollection (not AnyCurve) so that contour type determines closure.\n // This is the only time we detect CurvePrimitive closure and wrap as a relevant CurveChain.\n // Note that we are ASSUMING closure means planar here. This is potentially problematic.\n const primitive = contour;\n contour = contour.startPoint().isAlmostEqual(contour.endPoint()) ? new Loop() : new Path();\n contour.tryAddChild(primitive);\n }\n this.curves = contour;\n this.localToWorld = map;\n this.axis = axis;\n }\n /**\n * Create for linear sweep.\n * @param contour curve to sweep, CAPTURED. For best results, contour should be planar.\n * @param defaultNormal optional default normal for guiding coordinate frame setup.\n */\n public static createForLinearSweep(contour: AnyCurve, defaultNormal?: Vector3d): SweepContour | undefined {\n const localToWorld = FrameBuilder.createRightHandedFrame(defaultNormal, contour);\n if (localToWorld) {\n return new SweepContour(contour, localToWorld, undefined);\n }\n return undefined;\n }\n /**\n * Create for linear sweep.\n * @param points polygon to sweep, CAPTURED as a Loop. Closure point is optional. If multiple polygons are passed in,\n * parity logic is employed.\n * For best results, all points should be coplanar.\n * @param defaultNormal optional default normal for guiding coordinate frame setup.\n */\n public static createForPolygon(points: MultiLineStringDataVariant, defaultNormal?: Vector3d): SweepContour | undefined {\n const localToWorld = FrameBuilder.createRightHandedFrame(defaultNormal, points);\n if (localToWorld) {\n const linestrings = LineString3d.createArrayOfLineString3d(points);\n const loops = [];\n for (const ls of linestrings) {\n ls.addClosurePoint();\n loops.push(Loop.create(ls));\n }\n if (loops.length === 1) {\n return new SweepContour(loops[0], localToWorld, undefined);\n } else if (loops.length > 1) {\n return new SweepContour(ParityRegion.createLoops(loops), localToWorld, undefined);\n }\n }\n return undefined;\n }\n /**\n * Create for rotational sweep.\n * @param contour curve to sweep, CAPTURED. For best results, contour should be coplanar with axis.\n * @param axis rotation axis\n */\n public static createForRotation(contour: AnyCurve, axis: Ray3d): SweepContour | undefined {\n // createRightHandedFrame -- the axis is a last-gasp resolver for in-plane vectors.\n const localToWorld = FrameBuilder.createRightHandedFrame(undefined, contour, axis);\n if (localToWorld) {\n return new SweepContour(contour, localToWorld, axis.clone());\n }\n return undefined;\n }\n /** Return (Reference to) the curves. */\n public getCurves(): CurveCollection { return this.curves; }\n /**\n * Apply `transform` to the curves, axis.\n * * The local to world frame is reconstructed for the transformed curves.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n if (this.curves.tryTransformInPlace(transform)) {\n if (this.axis)\n this.axis.transformInPlace(transform);\n const localToWorld = this.axis !== undefined\n ? FrameBuilder.createRightHandedFrame(undefined, this.curves, this.axis)\n : FrameBuilder.createRightHandedFrame(undefined, this.curves);\n if (localToWorld) {\n this.localToWorld.setFrom(localToWorld);\n this._xyStrokes = undefined;\n return true;\n }\n }\n return false;\n }\n /** Return a deep clone. */\n public clone(): SweepContour {\n return new SweepContour(this.curves.clone(), this.localToWorld.clone(), this.axis);\n }\n /** Return a transformed clone. */\n public cloneTransformed(transform: Transform): SweepContour | undefined {\n const newContour = this.clone();\n if (newContour.tryTransformInPlace(transform))\n return newContour;\n return undefined;\n }\n /** Test for near equality of curves, frame, and axis. */\n public isAlmostEqual(other: any): boolean {\n if (!(other instanceof SweepContour))\n return false;\n if (!this.curves.isAlmostEqual(other.curves))\n return false;\n if (!this.localToWorld.isAlmostEqual(other.localToWorld))\n return false;\n if (this.axis && other.axis) {\n if (!this.axis.isAlmostEqual(other.axis))\n return false;\n } else if (this.axis || other.axis)\n return false;\n return true;\n }\n /** Recompute the local strokes cache for this contour. */\n public computeXYStrokes(options?: StrokeOptions): void {\n this._xyStrokes = undefined;\n const worldToLocal = this.localToWorld.inverse();\n if (worldToLocal) {\n const strokes = this.curves.cloneStroked(options);\n if (strokes.tryTransformInPlace(worldToLocal))\n this._xyStrokes = strokes;\n }\n }\n /** Return cached contour strokes. */\n public get xyStrokes(): CurveCollection | undefined {\n return this._xyStrokes;\n }\n /**\n * Build the (cached) internal facets for the contour.\n * @param options primarily how to stroke the contour, but also how to facet it.\n * * By default, a triangulation is computed, but if `options.maximizeConvexFacets === true`, edges between coplanar\n * triangles are removed to return maximally convex facets.\n */\n public buildFacets(options?: StrokeOptions): void {\n if (this._facets)\n return;\n if (!this.curves.isAnyRegion())\n return;\n const worldToLocal = this.localToWorld.inverse();\n if (!worldToLocal)\n return;\n const localRegion = this.curves.cloneTransformed(worldToLocal) as AnyRegion | undefined;\n if (!localRegion)\n return;\n if (this._facets = RegionOps.facetRegionXY(localRegion, options))\n this._facets.tryTransformInPlace(this.localToWorld);\n }\n /**\n * Delete facet cache.\n * * This protects against PolyfaceBuilder reusing facets constructed with different options settings.\n */\n public purgeFacets() {\n this._facets = undefined;\n }\n /**\n * Emit facets to a builder.\n * This method may cache and reuse facets over multiple calls.\n */\n public emitFacets(builder: PolyfaceBuilder, reverse: boolean, transform?: Transform) {\n this.buildFacets(builder.options);\n if (this._facets)\n builder.addIndexedPolyface(this._facets, reverse, transform);\n }\n /**\n * Emit facets to a function.\n * This method may cache and reuse facets over multiple calls.\n * @param announce callback to receive the facet set.\n * @param options how to stroke the contour.\n */\n public announceFacets(announce: (facets: IndexedPolyface) => void, options?: StrokeOptions): void {\n this.buildFacets(options);\n if (this._facets)\n announce(this._facets);\n }\n /**\n * Create a UnionOfConvexClipPlaneSets that clips to the swept faceted contour region.\n * @param sweepVector the sweep direction and distance:\n * * If undefined, the sweep direction is along the contour normal and no caps are constructed (the sweep is infinite\n * in both directions).\n * * If defined, the returned clipper is inverted if and only if sweepVector is in the opposite half-space as the\n * computed contour normal.\n * @param cap0 construct a clip plane equal to the contour plane. Note that `sweepVector` must be defined.\n * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`.\n * @param options how to stroke the contour\n * @returns clipper defined by faceting then sweeping the contour region\n */\n public sweepToUnionOfConvexClipPlaneSets(\n sweepVector?: Vector3d, cap0: boolean = false, cap1: boolean = false, options?: StrokeOptions,\n ): UnionOfConvexClipPlaneSets | undefined {\n if (!options)\n options = StrokeOptions.createForFacets();\n if (!sweepVector) {\n cap0 = cap1 = false;\n sweepVector = this.localToWorld.matrix.columnZ();\n }\n options.maximizeConvexFacets = true; // produce fewer ConvexClipPlaneSets\n // it's a trip around the barn, but it's easy to make a polyface and scan it\n this.buildFacets(options);\n const facets = this._facets;\n if (facets) {\n const point0 = Point3d.create();\n const point1 = Point3d.create();\n const result = UnionOfConvexClipPlaneSets.createEmpty();\n const visitor = facets.createVisitor(1);\n for (visitor.reset(); visitor.moveToNextFacet();) {\n const numEdges = visitor.point.length - 1;\n const clipper = ConvexClipPlaneSet.createEmpty();\n for (let i = 0; i < numEdges; i++) {\n visitor.point.getPoint3dAtUncheckedPointIndex(i, point0);\n visitor.point.getPoint3dAtUncheckedPointIndex(i + 1, point1);\n const plane = ClipPlane.createEdgeAndUpVector(point1, point0, sweepVector);\n const visible = visitor.edgeVisible[i];\n plane?.setFlags(!visible, !visible);\n clipper.addPlaneToConvexSet(plane);\n }\n result.addConvexSet(clipper);\n }\n if (cap0 || cap1) {\n const zVector = this.localToWorld.matrix.columnZ();\n const plane0Origin = this.localToWorld.getOrigin();\n const plane1Origin = plane0Origin.plus(sweepVector);\n const inwardNormal0 = zVector.clone();\n const inwardNormal1 = zVector.negate();\n const clipper = ConvexClipPlaneSet.createEmpty();\n if (cap0)\n clipper.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(inwardNormal0, plane0Origin));\n if (cap1)\n clipper.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(inwardNormal1, plane1Origin));\n result.addConvexSet(clipper);\n }\n return result;\n }\n return undefined;\n }\n}\n"]}
@@ -40,11 +40,16 @@ import { SolidPrimitive } from "./SolidPrimitive";
40
40
  * @public
41
41
  */
42
42
  export class TorusPipe extends SolidPrimitive {
43
+ /** String name for schema properties */
44
+ solidPrimitiveType = "torusPipe";
45
+ _localToWorld; // nominally rigid, but x,z column scales contribute to radiusA,radiusB
46
+ _radiusA; // radius of (large) circle in xy plane
47
+ _radiusB; // radius of (small) circle in xz plane.
48
+ _sweep;
49
+ _isReversed;
43
50
  // constructor captures the pointers!
44
51
  constructor(map, radiusA, radiusB, sweep, capped) {
45
52
  super(capped);
46
- /** String name for schema properties */
47
- this.solidPrimitiveType = "torusPipe";
48
53
  this._localToWorld = map;
49
54
  this._radiusA = radiusA;
50
55
  this._radiusB = radiusB;