@itwin/core-geometry 5.4.0-dev.10 → 5.4.0-dev.11

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 (452) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.js.map +1 -1
  4. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  5. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  7. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  10. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  11. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  12. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  13. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  14. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  15. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  16. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  17. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  18. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  19. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  20. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  21. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  22. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  23. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  24. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  25. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  26. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  27. package/lib/cjs/core-geometry.js.map +1 -1
  28. package/lib/cjs/curve/Arc3d.js.map +1 -1
  29. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  30. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  31. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  32. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  33. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  34. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  35. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  36. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  37. package/lib/cjs/curve/CurveOps.js.map +1 -1
  38. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  39. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  40. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  41. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  42. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  43. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  44. package/lib/cjs/curve/LineString3d.js.map +1 -1
  45. package/lib/cjs/curve/Loop.js.map +1 -1
  46. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  47. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  48. package/lib/cjs/curve/Path.js.map +1 -1
  49. package/lib/cjs/curve/PointString3d.js.map +1 -1
  50. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  51. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  52. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  53. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  54. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  55. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  56. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  57. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  58. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  59. package/lib/cjs/curve/RegionOps.js.map +1 -1
  60. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  61. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  62. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  63. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  64. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  65. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  66. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  67. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  68. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  69. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  70. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  71. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  72. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  73. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  74. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  75. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  76. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  77. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  78. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  79. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  80. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  81. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  82. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  83. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  84. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  85. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  86. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  87. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  88. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  89. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  90. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  91. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  92. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  93. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  94. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  95. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  96. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  97. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  98. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  99. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  100. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  101. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  102. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  103. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  104. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  105. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  106. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  107. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  108. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  109. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  110. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  111. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  112. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  113. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  114. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  115. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  116. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  117. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  118. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  119. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  120. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  121. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  122. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  123. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  124. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  125. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  126. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  127. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  128. package/lib/cjs/geometry3d/Range.js.map +1 -1
  129. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  130. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  131. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  132. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  133. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  134. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  135. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  136. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  137. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  138. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  139. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  140. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  141. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  142. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  143. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  144. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  145. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  146. package/lib/cjs/numerics/Complex.js.map +1 -1
  147. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  148. package/lib/cjs/numerics/Newton.js.map +1 -1
  149. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  150. package/lib/cjs/numerics/PolarData.js.map +1 -1
  151. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  152. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  153. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  154. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  155. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  156. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  157. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  158. package/lib/cjs/polyface/AuxData.js.map +1 -1
  159. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  160. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  161. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  162. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  163. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  164. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  165. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  166. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  167. package/lib/cjs/polyface/Polyface.js.map +1 -1
  168. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  169. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  170. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  171. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  172. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  173. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  174. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  175. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  176. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  177. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  178. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  179. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  180. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  181. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  182. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  183. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  184. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  185. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  186. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  187. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  188. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  189. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  190. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  191. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  192. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  193. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  194. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  195. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  196. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  197. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  198. package/lib/cjs/solid/Box.js.map +1 -1
  199. package/lib/cjs/solid/Cone.js.map +1 -1
  200. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  201. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  202. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  203. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  204. package/lib/cjs/solid/Sphere.js.map +1 -1
  205. package/lib/cjs/solid/SweepContour.js.map +1 -1
  206. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  207. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  208. package/lib/cjs/topology/Graph.js.map +1 -1
  209. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  210. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  211. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  212. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  213. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  214. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  215. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  216. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  217. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  218. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  219. package/lib/cjs/topology/MaskManager.js.map +1 -1
  220. package/lib/cjs/topology/Merging.js.map +1 -1
  221. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  222. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  223. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  224. package/lib/cjs/topology/Triangulation.js.map +1 -1
  225. package/lib/cjs/topology/Voronoi.js.map +1 -1
  226. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  227. package/lib/esm/Constant.js.map +1 -1
  228. package/lib/esm/Geometry.js.map +1 -1
  229. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  230. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  231. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  232. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  233. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  234. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  235. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  236. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  237. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  238. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  239. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  240. package/lib/esm/bspline/KnotVector.js.map +1 -1
  241. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  242. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  243. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  244. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  245. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  246. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  247. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  248. package/lib/esm/clipping/ClipVector.js.map +1 -1
  249. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  250. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  251. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  252. package/lib/esm/core-geometry.js.map +1 -1
  253. package/lib/esm/curve/Arc3d.js.map +1 -1
  254. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  255. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  256. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  257. package/lib/esm/curve/CurveCollection.js.map +1 -1
  258. package/lib/esm/curve/CurveCurve.js.map +1 -1
  259. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  260. package/lib/esm/curve/CurveFactory.js.map +1 -1
  261. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  262. package/lib/esm/curve/CurveOps.js.map +1 -1
  263. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  264. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  265. package/lib/esm/curve/CurveTypes.js.map +1 -1
  266. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  267. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  268. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  269. package/lib/esm/curve/LineString3d.js.map +1 -1
  270. package/lib/esm/curve/Loop.js.map +1 -1
  271. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  272. package/lib/esm/curve/ParityRegion.js.map +1 -1
  273. package/lib/esm/curve/Path.js.map +1 -1
  274. package/lib/esm/curve/PointString3d.js.map +1 -1
  275. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  276. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  277. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  278. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  279. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  280. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  281. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  282. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  283. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  284. package/lib/esm/curve/RegionOps.js.map +1 -1
  285. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  286. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  287. package/lib/esm/curve/UnionRegion.js.map +1 -1
  288. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  289. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  290. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  291. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  292. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  293. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  294. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  295. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  296. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  297. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  298. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  299. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  300. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  301. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  302. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  303. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  304. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  305. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  306. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  307. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  308. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  309. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  310. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  311. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  312. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  313. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  314. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  315. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  316. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  317. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  318. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  319. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  320. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  321. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  322. package/lib/esm/geometry3d/Angle.js.map +1 -1
  323. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  324. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  325. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  326. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  327. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  328. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  329. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  330. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  331. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  332. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  333. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  334. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  335. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  336. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  337. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  338. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  339. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  340. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  341. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  342. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  343. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  344. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  345. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  346. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  347. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  348. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  349. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  350. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  351. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  352. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  353. package/lib/esm/geometry3d/Range.js.map +1 -1
  354. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  355. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  356. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  357. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  358. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  359. package/lib/esm/geometry3d/Transform.js.map +1 -1
  360. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  361. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  362. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  363. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  364. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  365. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  366. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  367. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  368. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  369. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  370. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  371. package/lib/esm/numerics/Complex.js.map +1 -1
  372. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  373. package/lib/esm/numerics/Newton.js.map +1 -1
  374. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  375. package/lib/esm/numerics/PolarData.js.map +1 -1
  376. package/lib/esm/numerics/Polynomials.js.map +1 -1
  377. package/lib/esm/numerics/Quadrature.js.map +1 -1
  378. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  379. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  380. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  381. package/lib/esm/numerics/UnionFind.js.map +1 -1
  382. package/lib/esm/numerics/UsageSums.js.map +1 -1
  383. package/lib/esm/polyface/AuxData.js.map +1 -1
  384. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  385. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  386. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  387. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  388. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  389. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  390. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  391. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  392. package/lib/esm/polyface/Polyface.js.map +1 -1
  393. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  394. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  395. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  396. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  397. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  398. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  399. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  400. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  401. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  402. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  403. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  404. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  405. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  406. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  407. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  408. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  409. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  410. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  411. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  412. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  413. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  414. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  415. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  416. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  417. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  418. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  419. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  420. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  421. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  422. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  423. package/lib/esm/solid/Box.js.map +1 -1
  424. package/lib/esm/solid/Cone.js.map +1 -1
  425. package/lib/esm/solid/LinearSweep.js.map +1 -1
  426. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  427. package/lib/esm/solid/RuledSweep.js.map +1 -1
  428. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  429. package/lib/esm/solid/Sphere.js.map +1 -1
  430. package/lib/esm/solid/SweepContour.js.map +1 -1
  431. package/lib/esm/solid/TorusPipe.js.map +1 -1
  432. package/lib/esm/topology/ChainMerge.js.map +1 -1
  433. package/lib/esm/topology/Graph.js.map +1 -1
  434. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  435. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  436. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  437. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  438. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  439. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  440. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  441. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  442. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  443. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  444. package/lib/esm/topology/MaskManager.js.map +1 -1
  445. package/lib/esm/topology/Merging.js.map +1 -1
  446. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  447. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  448. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  449. package/lib/esm/topology/Triangulation.js.map +1 -1
  450. package/lib/esm/topology/Voronoi.js.map +1 -1
  451. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  452. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"GeometrySamples.js","sourceRoot":"","sources":["../../../src/serialization/GeometrySamples.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 Serialization\n */\nimport { BezierCurve3d } from \"../bspline/BezierCurve3d\";\nimport { BezierCurve3dH } from \"../bspline/BezierCurve3dH\";\nimport { BSplineCurve3d, BSplineCurve3dBase } from \"../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\nimport { BSplineSurface3d, BSplineSurface3dH, UVSelect, WeightStyle } from \"../bspline/BSplineSurface\";\nimport { InterpolationCurve3d, InterpolationCurve3dOptions } from \"../bspline/InterpolationCurve3d\";\nimport { BSplineWrapMode, KnotVector } from \"../bspline/KnotVector\";\nimport { ClipPlane } from \"../clipping/ClipPlane\";\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\nimport { UnionOfConvexClipPlaneSets } from \"../clipping/UnionOfConvexClipPlaneSets\";\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\nimport { CurveChainWithDistanceIndex } from \"../curve/CurveChainWithDistanceIndex\";\nimport { BagOfCurves } from \"../curve/CurveCollection\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { Path } from \"../curve/Path\";\nimport { PointString3d } from \"../curve/PointString3d\";\nimport { DirectSpiral3d } from \"../curve/spiral/DirectSpiral3d\";\nimport { IntegratedSpiral3d } from \"../curve/spiral/IntegratedSpiral3d\";\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { AxisOrder, Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\nimport { UVSurface } from \"../geometry3d/GeometryHandler\";\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { Range1d, Range2d, Range3d } from \"../geometry3d/Range\";\nimport { Ray3d } from \"../geometry3d/Ray3d\";\nimport { Segment1d } from \"../geometry3d/Segment1d\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYAndZ } from \"../geometry3d/XYZProps\";\nimport { Map4d } from \"../geometry4d/Map4d\";\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\nimport { Point4d } from \"../geometry4d/Point4d\";\nimport { AuxChannel, AuxChannelData, AuxChannelDataType, PolyfaceAuxData } from \"../polyface/AuxData\";\nimport { IndexedPolyface } from \"../polyface/Polyface\";\nimport { PolyfaceBuilder } from \"../polyface/PolyfaceBuilder\";\nimport { PolyfaceData } from \"../polyface/PolyfaceData\";\nimport { Box } from \"../solid/Box\";\nimport { Cone } from \"../solid/Cone\";\nimport { LinearSweep } from \"../solid/LinearSweep\";\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\nimport { RuledSweep } from \"../solid/RuledSweep\";\nimport { SolidPrimitive } from \"../solid/SolidPrimitive\";\nimport { Sphere } from \"../solid/Sphere\";\nimport { TorusPipe } from \"../solid/TorusPipe\";\n\n/**\n * Function to be called to obtain function value at (i,n), for\n * * n fixed over many calls\n * * n may be assumed 1 or greater (so fraction = i/n is safe)\n * * i varies from 0 to n\n * @alpha\n */\nexport type SteppedIndexFunction = (i: number, n: number) => number;\n/**\n * Static methods to create functions of type SteppedIndexFunction\n * * Convention: constant value is optional last argument, with default value 0\n * @alpha\n */\nexport class SteppedIndexFunctionFactory {\n /** Returns a callable function that returns a constant value. */\n public static createConstant(value: number = 0): SteppedIndexFunction {\n return (_i: number, _n: number) => value;\n }\n /**\n * Return a function that steps linearly\n * * f(i,n) = y0 + (i/n) * a\n */\n public static createLinear(a: number, f0: number = 0): SteppedIndexFunction {\n return (i: number, n: number) => (f0 + a * (i / n));\n }\n /**\n * Return a function that steps with cosine of angles in sweep\n * * f(i,n) = y0 + amplitude * cos(i/n)\n */\n public static createCosine(amplitude: number, sweep: AngleSweep = AngleSweep.create360(), f0: number = 0): SteppedIndexFunction {\n return (i: number, n: number) => (f0 + amplitude * Math.cos(sweep.fractionToRadians(i / n)));\n }\n /**\n * Return a function that steps with cosine of angles in sweep.\n * * f(i,n) = y0 + amplitude * sin(i/n)\n */\n public static createSine(amplitude: number, sweep: AngleSweep = AngleSweep.create360(), f0: number = 0): SteppedIndexFunction {\n return (i: number, n: number) => (f0 + amplitude * Math.sin(sweep.fractionToRadians(i / n)));\n }\n}\n// cspell:word Franke bivariate\n/**\n * Implement Franke's function, a smooth bivariate real-valued function with interesting features over [0,1]x[0,1].\n * * This surface is commonly used to test interpolation algorithms. See https://www.sfu.ca/~ssurjano/franke2d.html\n * @internal\n */\nclass FrankeSurface implements UVSurface {\n public scales: number[] | undefined;\n public constructor(scales: number[] | undefined) {\n this.scales = scales;\n }\n private exp0(u: number, v: number): number {\n return Math.exp(-0.25 * (u * u + v * v) + u + v - 2);\n }\n private exp1(u: number, v: number): number {\n return Math.exp(-(((u + 1) * (u + 1)) / 49 + 0.1 * (v + 1)));\n }\n private exp2(u: number, v: number): number {\n return Math.exp(-0.25 * ((u - 7) * (u - 7) + (v - 3) * (v - 3)));\n }\n private exp3(u: number, v: number): number {\n return Math.exp(-((u - 4) * (u - 4) + (v - 7) * (v - 7)));\n }\n private f(u: number, v: number): number {\n const f0 = 0.75 * this.exp0(u, v);\n const f1 = 0.75 * this.exp1(u, v);\n const f2 = 0.5 * this.exp2(u, v);\n const f3 = -0.2 * this.exp3(u, v);\n if (this.scales !== undefined) {\n const numScale = this.scales.length;\n let f = 0;\n if (numScale >= 1)\n f += this.scales[0] * f0;\n if (numScale >= 2)\n f += this.scales[1] * f1;\n if (numScale >= 3)\n f += this.scales[2] * f2;\n if (numScale >= 4)\n f += this.scales[3] * f3;\n return f;\n } else\n return f0 + f1 + f2 + f3;\n }\n private du(u: number, v: number): number {\n const du0 = -3.375 * (u - 2) * this.exp0(u, v);\n const du1 = -(27 / 98) * (u + 1) * this.exp1(u, v);\n const du2 = -2.25 * (u - 7) * this.exp2(u, v);\n const du3 = 3.6 * (u - 4) * this.exp3(u, v);\n return du0 + du1 + du2 + du3;\n }\n private dv(u: number, v: number): number {\n const dv0 = -3.375 * (v - 2) * this.exp0(u, v);\n const dv1 = -0.675 * this.exp1(u, v);\n const dv2 = -2.25 * (v - 3) * this.exp2(u, v);\n const dv3 = 3.6 * (v - 7) * this.exp3(u, v);\n return dv0 + dv1 + dv2 + dv3;\n }\n public uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d {\n const u = 9 * uFraction;\n const v = 9 * vFraction;\n return Point3d.create(uFraction, vFraction, this.f(u, v), result);\n }\n public uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\n const u = 9 * uFraction;\n const v = 9 * vFraction;\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(uFraction, vFraction, this.f(u, v), 1, 0, this.du(u, v), 0, 1, this.dv(u, v), result);\n }\n}\n/**\n * `Sample` has static methods to create a variety of geometry samples useful in testing.\n * @alpha\n */\nexport class Sample {\n /** Array with assorted Point2d samples */\n public static readonly point2d: Point2d[] = [\n Point2d.create(0, 0),\n Point2d.create(1, 0),\n Point2d.create(0, 1),\n Point2d.create(2, 3)];\n /** Array with assorted Point3d samples */\n public static readonly point3d: Point3d[] = [\n Point3d.create(0, 0, 0),\n Point3d.create(1, 0, 0),\n Point3d.create(0, 1, 0),\n Point3d.create(0, 1, 0),\n Point3d.create(0, 0, 1),\n Point3d.create(2, 3, 0),\n Point3d.create(0, 2, 5),\n Point3d.create(-3, 0, 5),\n Point3d.create(4, 3, -2)];\n /**\n * Return an array of Point3d, with x,y,z all stepping through a range of values.\n * x varies fastest, then y then z\n */\n public static createPoint3dLattice(low: number, step: number, high: number): Point3d[] {\n const points = [];\n for (let z = low; z <= high; z += step)\n for (let y = low; y <= high; y += step)\n for (let x = low; x <= high; x += step)\n points.push(Point3d.create(x, y, z));\n return points;\n }\n /**\n * Return an array of Point2d, with x,y all stepping through a range of values.\n * x varies fastest, then y\n */\n public static createPoint2dLattice(low: number, step: number, high: number): Point2d[] {\n const points = [];\n for (let y = low; y <= high; y += step)\n for (let x = low; x <= high; x += step)\n points.push(Point2d.create(x, y));\n return points;\n }\n /** Array with assorted Point4d samples */\n public static readonly point4d: Point4d[] = [\n Point4d.create(0, 0, 0, 1),\n Point4d.create(1, 0, 0, 1),\n Point4d.create(0, 1, 0, 1),\n Point4d.create(0, 1, 0, 1),\n Point4d.create(0, 0, 1, 1),\n Point4d.create(2, 3, 0, 1),\n Point4d.create(0, 2, 5, 1),\n Point4d.create(-3, 0, 5, 1),\n Point4d.create(-3, 0, 5, 0.3),\n Point4d.create(-3, 0, 5, -0.2),\n Point4d.create(4, 3, -2, 1)];\n /** Array with assorted nonzero vector samples. */\n public static createNonZeroVectors(): Vector3d[] {\n return [\n Vector3d.create(1, 0, 0),\n Vector3d.create(0, 1, 0),\n Vector3d.create(0, 0, 1),\n Vector3d.create(-1, 0, 0),\n Vector3d.create(0, -1, 0),\n Vector3d.create(0, 0, -1),\n Vector3d.createPolar(1.0, Angle.createDegrees(20)),\n Vector3d.createSpherical(1.0, Angle.createDegrees(20), Angle.createDegrees(10)),\n Vector3d.createPolar(2.0, Angle.createDegrees(20)),\n Vector3d.createSpherical(2.0, Angle.createDegrees(20), Angle.createDegrees(10)),\n Vector3d.create(2, 3, 0),\n ];\n }\n /** Array with assorted nonzero Vector2d samples */\n public static readonly vector2d: Vector2d[] = [\n Vector2d.create(1, 0),\n Vector2d.create(0, 1),\n Vector2d.create(0, 0),\n Vector2d.create(-1, 0),\n Vector2d.create(0, -1),\n Vector2d.create(0, 0),\n Vector2d.createPolar(1.0, Angle.createDegrees(20)),\n Vector2d.createPolar(2.0, Angle.createDegrees(20)),\n Vector2d.create(2, 3),\n ];\n /** Return an array with assorted Range3d samples */\n public static createRange3ds(): Range3d[] {\n return [\n Range3d.createXYZXYZ(0, 0, 0, 1, 1, 1),\n Range3d.createXYZ(1, 2, 3),\n Range3d.createXYZXYZ(-2, -3, 1, 200, 301, 8),\n ];\n }\n /** Create 5 points of a (axis aligned) rectangle with corners (x0,y0) and (x0+ax, y0 + ay) */\n public static createRectangleXY(x0: number, y0: number, ax: number, ay: number, z: number = 0): Point3d[] {\n return [\n Point3d.create(x0, y0, z),\n Point3d.create(x0 + ax, y0, z),\n Point3d.create(x0 + ax, y0 + ay, z),\n Point3d.create(x0, y0 + ay, z),\n Point3d.create(x0, y0, z),\n ];\n }\n /** Create 5 points of a (axis aligned) rectangle with corners (cx-ax,cy-ay) and (cx+ax,cy+ay) */\n public static createCenteredRectangleXY(cx: number, cy: number, ax: number, ay: number, z: number = 0): Point3d[] {\n return this.createRectangleXY(cx - ax, cy - ay, 2 * ax, 2 * ay, z);\n }\n /**\n * Access the last point in the array. push another shifted by dx,dy,dz.\n * * No push if all are 0.\n * * If array is empty, push a leading 000\n */\n public static pushMove(data: Point3d[], dx: number, dy: number, dz: number = 0.0) {\n if (data.length === 0)\n data.push(Point3d.create(0, 0, 0));\n const back = data[data.length - 1];\n if (dx !== 0 || dy !== 0 || dz !== 0)\n data.push(Point3d.create(back.x + dx, back.y + dy, back.z + dz));\n }\n /** Return an array with numPoints on the unit circle (counting closure) */\n public static createUnitCircle(numPoints: number): Point3d[] {\n const points: Point3d[] = [];\n const dTheta = Geometry.safeDivideFraction(Math.PI * 2, numPoints - 1, 0.0);\n for (let i = 0; i + 1 < numPoints; i++) {\n const theta = i * dTheta;\n points.push(Point3d.create(Math.cos(theta), Math.sin(theta), 0.0));\n }\n points.push(points[0].clone());\n return points;\n }\n /**\n * Create points for an L shaped polygon\n * * lower left at x0,y0.\n * * ax,ay are larger side lengths (lower left to corners along x and y directions)\n * * bx,by are smaller side lengths (inner corner to points along x and y directions)\n */\n public static createLShapedPolygon(x0: number, y0: number, ax: number, ay: number, bx: number, by: number, z: number = 0): Point3d[] {\n return [\n Point3d.create(x0, y0, z),\n Point3d.create(x0 + ax, y0, z),\n Point3d.create(x0 + ax, y0 + by),\n Point3d.create(x0 + bx, y0 + by),\n Point3d.create(x0 + bx, y0 + ay, z),\n Point3d.create(x0, y0 + ay, z),\n Point3d.create(x0, y0, z),\n ];\n }\n /** Create assorted clip planes. */\n public static createClipPlanes(): ClipPlane[] {\n const plane0 = ClipPlane.createNormalAndDistance(Vector3d.create(1, 0, 0), 2.0)!;\n const plane1 = plane0.cloneNegated();\n const plane2 = plane1.clone();\n plane2.setFlags(true, true);\n return [\n plane0, plane1, plane2,\n ClipPlane.createNormalAndDistance(Vector3d.create(3, 4, 0), 2.0)!,\n ClipPlane.createEdgeXY(Point3d.create(1, 0, 0), Point3d.create(24, 32, 0))!,\n ];\n }\n /**\n * * A first-quadrant unit square\n * * Two squares -- first and fourth quadrant unit squares\n * * Three squares -- first, second and fourth quadrant unit squares\n */\n public static createClipPlaneSets(): UnionOfConvexClipPlaneSets[] {\n const result = [];\n const quadrant1 = ConvexClipPlaneSet.createXYBox(0, 0, 1, 1);\n result.push(UnionOfConvexClipPlaneSets.createConvexSets([quadrant1.clone()]));\n const quadrant2 = ConvexClipPlaneSet.createXYBox(-1, 0, 0, 1);\n const quadrant4 = ConvexClipPlaneSet.createXYBox(0, -1, 1, 0);\n result.push(\n UnionOfConvexClipPlaneSets.createConvexSets([\n quadrant1.clone(),\n quadrant4.clone(),\n ]),\n );\n result.push(\n UnionOfConvexClipPlaneSets.createConvexSets([\n quadrant1.clone(),\n quadrant2.clone(),\n quadrant4.clone(),\n ]),\n );\n return result;\n }\n /**\n * Create (unweighted) bspline curves.\n * order varies from 2 to 5\n */\n public static createBsplineCurves(includeMultipleKnots: boolean = false): BSplineCurve3d[] {\n const result: BSplineCurve3d[] = [];\n const yScale = 0.1;\n for (const order of [2, 3, 4, 5]) {\n const points = [];\n for (const x of [0, 1, 2, 3, 4, 5, 7]) {\n points.push(Point3d.create(x, yScale * (1 + x * x), 0.0));\n }\n const curve = BSplineCurve3d.createUniformKnots(points, order) as BSplineCurve3d;\n result.push(curve);\n }\n if (includeMultipleKnots) {\n const interiorKnotCandidates = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8];\n for (const order of [3, 4]) {\n const numPoints = 8;\n const points = [];\n for (let i = 0; i < numPoints; i++)\n points.push(Point3d.create(i, i * i, 0));\n const knots = [];\n for (let i = 0; i < order - 1; i++)\n knots.push(0);\n const numInteriorNeeded = numPoints - order;\n for (let i = 0; i < numInteriorNeeded; i++)\n knots.push(interiorKnotCandidates[i]);\n const lastKnot = knots[knots.length - 1] + 1;\n for (let i = 0; i < order - 1; i++)\n knots.push(lastKnot);\n const curve = BSplineCurve3d.create(points, knots, order);\n if (curve)\n result.push(curve);\n }\n }\n return result;\n }\n /**\n * Create weighted bspline curves.\n * order varies from 2 to 5\n */\n public static createBspline3dHCurves(): BSplineCurve3dH[] {\n const result: BSplineCurve3dH[] = [];\n const yScale = 0.1;\n for (const weightVariation of [0, 0.125]) {\n for (const order of [2, 3, 4, 5]) {\n const points = [];\n for (const x of [0, 1, 2, 3, 4, 5, 7]) {\n points.push(Point4d.create(x, yScale * (1 + x * x), 0.0, 1.0 + weightVariation * Math.sin(x * Math.PI * 0.25)));\n }\n const curve = BSplineCurve3dH.createUniformKnots(points, order) as BSplineCurve3dH;\n result.push(curve);\n }\n }\n return result;\n }\n /** Create various orders of non-rational B-spline curves with helical poles. */\n public static createBsplineCurveHelices(\n radius: number, height: number, numTurns: number, numSamplesPerTurn: number,\n ): BSplineCurve3d[] {\n const pts: Point3d[] = [];\n const zDelta = (height / numTurns) / numSamplesPerTurn;\n const aDelta = 2 * Math.PI / numSamplesPerTurn;\n for (let iTurn = 0; iTurn < numTurns; ++iTurn) {\n for (let iSample = 0; iSample < numSamplesPerTurn; iSample++) {\n pts.push(\n Point3d.create(radius * Math.cos(iSample * aDelta), radius * Math.sin(iSample * aDelta), pts.length * zDelta),\n );\n }\n }\n const result: BSplineCurve3d[] = [];\n for (const order of [2, 3, 4, 9, 16, 25]) {\n if (order > pts.length)\n continue;\n const curve = BSplineCurve3d.createUniformKnots(pts, order);\n if (curve !== undefined)\n result.push(curve);\n }\n return result;\n }\n /** Create weighted bsplines for circular arcs. */\n public static createBspline3dHArcs(): BSplineCurve3dH[] {\n const result: BSplineCurve3dH[] = [];\n const halfRadians = Angle.degreesToRadians(60.0);\n const c = Math.cos(halfRadians);\n const s = Math.sin(halfRadians);\n // const sec = 1.0 / c;\n // const t = s / c;\n const points = [\n Point4d.create(1, 0, 0, 1),\n Point4d.create(c, s, 0, c),\n Point4d.create(-c, s, 0, 1),\n Point4d.create(-1, 0, 0, c),\n Point4d.create(-c, -s, 0, 1),\n Point4d.create(c, -s, 0, c),\n Point4d.create(1, 0, 0, 1),\n ];\n const knots = [0, 0, 1, 1, 2, 2, 3, 3];\n const curve = BSplineCurve3dH.create(points, knots, 3) as BSplineCurve3dH;\n result.push(curve);\n return result;\n }\n /**\n * Return array [x,y,z,w] bspline control points for an arc in 90 degree bspline spans.\n * @param points array of [x,y,z,w]\n * @param center center of arc\n * @param axes matrix with 0 and 90 degree axes\n * @param radius0 radius multiplier for x direction.\n * @param radius90 radius multiplier for y direction.\n * @param applyWeightsToXYZ\n */\n public static createBsplineArc90SectionToXYZWArrays(\n center: Point3d,\n axes: Matrix3d,\n radius0: number,\n radius90: number,\n applyWeightsToXYZ: boolean,\n ): number[][] {\n const a = Math.sqrt(0.5);\n const xyz = Point3d.create();\n Matrix3d.xyzPlusMatrixTimesCoordinates(center, axes, radius0, 0.0, 0, xyz);\n const controlPoints = [];\n controlPoints.push([xyz.x, xyz.y, xyz.z, 1.0]);\n const cornerTrig = [1, 1, -1, -1, 1];\n const axisTrig = [1, 0, -1, 0, 1];\n for (let i = 0; i < 4; i++) {\n Matrix3d.xyzPlusMatrixTimesCoordinates(\n center, axes, radius0 * cornerTrig[i + 1], radius90 * cornerTrig[i], 0, xyz,\n );\n controlPoints.push([xyz.x, xyz.y, xyz.z, a]);\n Matrix3d.xyzPlusMatrixTimesCoordinates(\n center, axes, radius0 * axisTrig[i + 1], radius90 * axisTrig[i], 0, xyz,\n );\n controlPoints.push([xyz.x, xyz.y, xyz.z, 1.0]);\n }\n if (applyWeightsToXYZ) {\n for (const xyzw of controlPoints) {\n const b = xyzw[3];\n xyzw[0] *= b;\n xyzw[1] *= b;\n xyzw[2] *= b;\n }\n }\n return controlPoints;\n }\n /**\n * Create both unweighted and weighted bspline curves.\n * (This is the combined results from createBsplineCurves and createBspline3dHCurves)\n */\n public static createMixedBsplineCurves(): BSplineCurve3dBase[] {\n const arrayA = Sample.createBsplineCurves();\n const arrayB = Sample.createBspline3dHCurves();\n const result = [];\n for (const a of arrayA) result.push(a);\n for (const b of arrayB) result.push(b);\n return result;\n }\n /** Create a plane from origin and normal coordinates -- default to 001 normal if needed. */\n public static createPlane(x: number, y: number, z: number, u: number, v: number, w: number): Plane3dByOriginAndUnitNormal {\n const point = Point3d.create(x, y, z);\n const vector = Vector3d.create(u, v, w).normalize();\n if (vector) {\n const plane = Plane3dByOriginAndUnitNormal.create(point, vector);\n if (plane)\n return plane;\n }\n return Sample.createPlane(x, y, z, u, v, 1);\n }\n /** Create ray from (x,y,z) and direction components. (Normalize the direction) */\n public static createRay(x: number, y: number, z: number, u: number, v: number, w: number): Ray3d {\n return Ray3d.create(\n Point3d.create(x, y, z),\n Vector3d.create(u, v, w).normalize() as Vector3d,\n );\n }\n /** Assorted Plane3dBYOriginAndUnitNormal */\n public static readonly plane3dByOriginAndUnitNormal: Plane3dByOriginAndUnitNormal[] = [\n Plane3dByOriginAndUnitNormal.createXYPlane(),\n Plane3dByOriginAndUnitNormal.createYZPlane(),\n Plane3dByOriginAndUnitNormal.createZXPlane(),\n Sample.createPlane(0, 0, 0, 3, 0, 1),\n Sample.createPlane(1, 2, 3, 2, 4, -1),\n ];\n\n /** Assorted Ray3d, not all unit direction vectors. */\n public static readonly ray3d: Ray3d[] = [\n Sample.createRay(0, 0, 0, 1, 0, 0),\n Sample.createRay(0, 0, 0, 0, 1, 0),\n Sample.createRay(0, 0, 0, 0, 0, 1),\n Sample.createRay(0, 0, 0, 1, 2, 0),\n Sample.createRay(1, 2, 3, 4, 2, -1),\n ];\n /** Assorted angles. All principal directions, some others included. */\n public static readonly angle: Angle[] = [\n Angle.createDegrees(0),\n Angle.createDegrees(90),\n Angle.createDegrees(180),\n Angle.createDegrees(-90),\n Angle.createDegrees(30),\n Angle.createDegrees(-105),\n ];\n /** Assorted angle sweeps */\n public static readonly angleSweep: AngleSweep[] = [\n AngleSweep.createStartEndDegrees(0, 90),\n AngleSweep.createStartEndDegrees(0, 180),\n AngleSweep.createStartEndDegrees(-90, 0),\n AngleSweep.createStartEndDegrees(0, -90),\n AngleSweep.createStartEndDegrees(0, 30),\n AngleSweep.createStartEndDegrees(45, 110),\n ];\n /** Assorted line segments */\n public static readonly lineSegment3d: LineSegment3d[] = [\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(1, 0, 0)),\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(0, 1, 0)),\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(0, 0, 1)),\n LineSegment3d.create(Point3d.create(1, 2, 3), Point3d.create(-2, -3, 0.5)),\n ];\n /** Assorted lines strings */\n public static createLineStrings(): LineString3d[] {\n return [\n LineString3d.createPoints([\n Point3d.create(0, 0, 0),\n Point3d.create(1, 0, 0),\n ]),\n LineString3d.createPoints([\n Point3d.create(0, 0, 0),\n Point3d.create(1, 0, 0),\n Point3d.create(1, 1, 0),\n ]),\n LineString3d.createPoints([\n Point3d.create(0, 0, 0),\n Point3d.create(1, 0, 0),\n Point3d.create(1, 1, 0),\n Point3d.create(2, 2, 0),\n ]),\n ];\n }\n /** Assorted Range1d: single point, null, simple forward, simple reverse */\n public static readonly range1d: Range1d[] = [\n Range1d.createX(1),\n Range1d.createNull(),\n Range1d.createXX(1, 2),\n Range1d.createXX(2, 1),\n ];\n /** Assorted range2d: single point, null, 2 point with various creation orders. */\n public static readonly range2d: Range2d[] = [\n Range2d.createXY(1, 2),\n Range2d.createNull(),\n Range2d.createXYXY(1, 2, 0, 3),\n Range2d.createXYXY(1, 2, 3, 4),\n ];\n /** Assorted range2d: single point, null, 2 point with various creation orders. */\n public static readonly range3d: Range3d[] = [\n Range3d.createXYZ(1, 2, 3),\n Range3d.createNull(),\n Range3d.createXYZXYZ(1, 2, 0, 3, 4, 7),\n Range3d.createXYZXYZ(1, 2, 3, -2, -4, -1),\n ];\n /**\n * Assorted Matrix3d:\n * * identity\n * * rotation around x\n * * rotation around general vector\n * * uniform scale\n * * nonuniform scale (including negative scales!)\n */\n public static createMatrix3dArray(): Matrix3d[] {\n return [\n Matrix3d.createIdentity(),\n Matrix3d.createRotationAroundVector(\n Vector3d.create(1, 0, 0), Angle.createDegrees(10),\n ) as Matrix3d,\n Matrix3d.createRotationAroundVector(\n Vector3d.create(1, -2, 5), Angle.createDegrees(-6.0),\n ) as Matrix3d,\n Matrix3d.createRotationAroundVector(\n Vector3d.create(1, 2, 3), Angle.createDegrees(49.0),\n ) as Matrix3d,\n Matrix3d.createUniformScale(2.0),\n Matrix3d.createScale(1, 1, -1),\n Matrix3d.createScale(2, 3, 4),\n ];\n }\n /** Assorted invertible transforms. */\n public static createInvertibleTransforms(): Transform[] {\n return [\n Transform.createIdentity(),\n Transform.createTranslationXYZ(1, 2, 0),\n Transform.createTranslationXYZ(1, 2, 3),\n Transform.createFixedPointAndMatrix(\n Point3d.create(4, 1, -2),\n Matrix3d.createUniformScale(2.0),\n ),\n Transform.createFixedPointAndMatrix(\n Point3d.create(4, 1, -2),\n Matrix3d.createRotationAroundVector(\n Vector3d.create(1, 2, 3), Angle.createRadians(10),\n ) as Matrix3d,\n ),\n ];\n }\n /**\n * Return an array of Matrix3d with various skew and scale. This includes at least:\n * * identity\n * * 3 distinct diagonals.\n * * The distinct diagonal base with smaller value added to other 6 spots in succession.\n * * the distinct diagonals with all others also smaller non-zeros.\n */\n public static createScaleSkewMatrix3d(): Matrix3d[] {\n return [\n Matrix3d.createRowValues(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1,\n ),\n Matrix3d.createRowValues(\n 5, 0, 0,\n 0, 6, 0,\n 0, 0, 7,\n ),\n Matrix3d.createRowValues(\n 5, 2, 0,\n 0, 6, 0,\n 0, 0, 7,\n ),\n Matrix3d.createRowValues(\n 5, 0, 2,\n 0, 6, 0,\n 0, 0, 7,\n ),\n Matrix3d.createRowValues(\n 5, 0, 0,\n 1, 6, 0,\n 0, 0, 7,\n ),\n Matrix3d.createRowValues(\n 5, 0, 0,\n 0, 6, 1,\n 0, 0, 7,\n ),\n Matrix3d.createRowValues(\n 5, 0, 0,\n 0, 6, 0,\n 1, 0, 7,\n ),\n Matrix3d.createRowValues(\n 5, 0, 0,\n 0, 6, 0,\n 0, 1, 7,\n ),\n Matrix3d.createRowValues(\n 5, 2, 3,\n 2, 6, 1,\n -1, 2, 7,\n ),\n ];\n }\n /**\n * Return an array of singular Matrix3d. This includes at least:\n * * all zeros\n * * one non-zero column\n * * two independent columns, third is zero\n * * two independent columns, third is sum of those\n * * two independent columns, third is copy of one\n */\n public static createSingularMatrix3d(): Matrix3d[] {\n const vectorU = Vector3d.create(2, 3, 6);\n const vectorV = Vector3d.create(-1, 5, 2);\n const vectorUPlusV = vectorU.plus(vectorV);\n const vector0 = Vector3d.createZero();\n return [\n Matrix3d.createZero(),\n // one non-zero column\n Matrix3d.createColumns(vectorU, vector0, vector0),\n Matrix3d.createColumns(vector0, vectorU, vector0),\n Matrix3d.createColumns(vector0, vector0, vectorU),\n // two independent non-zero columns with one zero column\n Matrix3d.createColumns(vectorU, vectorV, vector0),\n Matrix3d.createColumns(vector0, vectorU, vectorV),\n Matrix3d.createColumns(vectorU, vector0, vectorV),\n // two independent columns with one dependent column\n Matrix3d.createColumns(vectorU, vectorV, vectorUPlusV),\n Matrix3d.createColumns(vectorU, vectorUPlusV, vectorV),\n Matrix3d.createColumns(vectorUPlusV, vectorU, vectorV),\n // two independent with columns with one duplicate column\n Matrix3d.createColumns(vectorU, vectorU, vectorV),\n Matrix3d.createColumns(vectorU, vectorV, vectorU),\n Matrix3d.createColumns(vectorV, vectorU, vectorU),\n ];\n }\n /**\n * Return an array of rigid transforms. This includes (at least)\n * * Identity\n * * translation with identity matrix\n * * rotation around origin and arbitrary vector\n * * rotation around space point and arbitrary vector\n * * use given refDistance is crude distance of translation and distance to fixed point.\n */\n public static createRigidTransforms(distanceScale: number = 4.0): Transform[] {\n const distanceScale3 = distanceScale / 3.0;\n const distanceScale4 = distanceScale / 4.0;\n return [\n Transform.createIdentity(),\n Transform.createTranslationXYZ(\n distanceScale3 * 1,\n distanceScale3 * 2,\n distanceScale3 * 3,\n ),\n Transform.createFixedPointAndMatrix(\n Point3d.create(0, 0, 0),\n Matrix3d.createRotationAroundVector(\n Vector3d.unitY(), Angle.createDegrees(10)) as Matrix3d,\n ),\n Transform.createFixedPointAndMatrix(\n Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2),\n Matrix3d.createRotationAroundVector(\n Vector3d.create(1, 2, 3), Angle.createDegrees(10)) as Matrix3d,\n ),\n Transform.createFixedPointAndMatrix(\n Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2),\n Matrix3d.createRotationAroundVector(\n Vector3d.create(-2, 1, 4), Angle.createDegrees(35)) as Matrix3d,\n ),\n ];\n }\n /** Return a single rigid transform with all terms nonzero. */\n public static createMessyRigidTransform(fixedPoint?: Point3d): Transform {\n return Transform.createFixedPointAndMatrix(\n fixedPoint ? fixedPoint : Point3d.create(1, 2, 3),\n Matrix3d.createRotationAroundVector(Vector3d.create(0.3, -0.2, 1.2), Angle.createDegrees(15.7))!);\n }\n /**\n * Return various rigid matrices:\n * * identity\n * * small rotations around x, y, z\n * * small rotation around (1,2,3)\n */\n public static createRigidAxes(): Matrix3d[] {\n return [\n Matrix3d.createIdentity(),\n Matrix3d.createRotationAroundVector(\n Vector3d.unitX(), Angle.createDegrees(10),\n ) as Matrix3d,\n Matrix3d.createRotationAroundVector(\n Vector3d.unitY(), Angle.createDegrees(10),\n ) as Matrix3d,\n Matrix3d.createRotationAroundVector(\n Vector3d.unitZ(), Angle.createDegrees(10),\n ) as Matrix3d,\n Matrix3d.createRotationAroundVector(\n Vector3d.create(1, 2, 3), Angle.createDegrees(10),\n ) as Matrix3d,\n ];\n }\n /**\n * Return various Matrix4d\n * * Simple promotion of each Sample.createInvertibleTransforms ()\n * * optional nasty [1,2,3,4...15] row order\n * @param includeIrregular if true, include [1,2,..15] row major\n */ // promote each transform[] to a Matrix4d.\n public static createMatrix4ds(includeIrregular: boolean = false): Matrix4d[] {\n const result = [];\n let transform;\n for (transform of Sample.createInvertibleTransforms())\n result.push(Matrix4d.createTransform(transform));\n if (includeIrregular) {\n result.push(\n Matrix4d.createRowValues(\n 1, 2, 3, 4,\n 5, 6, 7, 8,\n 9, 10, 11, 12,\n 13, 14, 15, 16,\n ),\n );\n }\n return result;\n }\n /** Create full Map4d for each `Sample.createInvertibleTransforms()` */\n public static createMap4ds(): Map4d[] {\n const result = [];\n let transform;\n for (transform of Sample.createInvertibleTransforms()) {\n const inverse = transform.inverse();\n if (inverse) {\n const map = Map4d.createTransform(transform, inverse);\n if (map)\n result.push(map);\n }\n }\n return result;\n }\n /** Assorted simple `Path` objects. */\n public static createSimplePaths(withGaps: boolean = false): Path[] {\n const point0 = Point3d.create(0, 0, 0);\n const point1 = Point3d.create(10, 0, 0);\n\n const p1 = [\n point1, Point3d.create(0, 10, 0),\n Point3d.create(6, 10, 0),\n Point3d.create(6, 10, 0),\n Point3d.create(0, 10, 0),\n ];\n const segment1 = LineSegment3d.create(point0, point1);\n const vectorU = Vector3d.unitX(3);\n const vectorV = Vector3d.unitY(3);\n const arc2 = Arc3d.create(point1.minus(vectorU), vectorU, vectorV, AngleSweep.createStartEndDegrees(0, 90));\n const simplePaths = [\n Path.create(segment1),\n Path.create(segment1, arc2),\n Path.create(\n LineSegment3d.create(point0, point1),\n LineString3d.create(p1)),\n Sample.createCappedArcPath(4, 0, 180),\n ];\n if (withGaps)\n simplePaths.push(\n Path.create(\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(10, 0, 0)),\n LineSegment3d.create(Point3d.create(10, 10, 0), Point3d.create(5, 0, 0)),\n ),\n );\n return simplePaths;\n }\n /**\n * Assorted `Path` with lines and arcs.\n * Specifically useful for offset tests.\n */\n public static createLineArcPaths(): Path[] {\n const paths = [];\n const x1 = 10.0;\n const y2 = 5.0;\n const y3 = 10.0;\n for (const y0 of [0, -1, 1]) {\n for (const x2 of [15, 11, 20, 9, 7]) {\n\n const point0 = Point3d.create(0, y0, 0);\n const point1 = Point3d.create(x1, 0, 0);\n const point2 = Point3d.create(x2, y2, 0);\n const point3 = Point3d.create(x1, y3, 0);\n const point4 = Point3d.create(0, y3 + y0, 0);\n const path0 = Path.create();\n path0.tryAddChild(LineString3d.create(point0, point1, point2, point3, point4));\n paths.push(path0);\n const path1 = Path.create();\n path1.tryAddChild(LineSegment3d.create(point0, point1));\n path1.tryAddChild(Arc3d.createCircularStartMiddleEnd(point1, Point3d.create(x2, y2, 0), point3));\n path1.tryAddChild(LineSegment3d.create(point3, point4));\n paths.push(path1);\n }\n }\n return paths;\n }\n /** Assorted `PointString3d` objects. */\n public static createSimplePointStrings(): PointString3d[] {\n const p1 = [\n [Point3d.create(0, 10, 0)],\n [Point3d.create(6, 10, 0)],\n [Point3d.create(6, 10, 0), [Point3d.create(6, 10, 0)]],\n ];\n const simplePaths = [\n PointString3d.create(Point3d.create(1, 2, 0)),\n PointString3d.create(Point3d.create(0, 0, 0), Point3d.create(10, 0, 0)),\n PointString3d.create(Point3d.create(10, 0, 0), Point3d.create(10, 5, 0)),\n PointString3d.create(p1),\n ];\n return simplePaths;\n }\n /** Assorted `Loop` objects */\n public static createSimpleLoops(): Loop[] {\n const point0 = Point3d.create(0, 0, 0);\n const point1 = Point3d.create(10, 0, 0);\n const point2 = Point3d.create(10, 5, 0);\n const point3 = Point3d.create(0, 5, 0);\n const result = [\n // rectangle with single linestring\n Loop.create(LineString3d.create(point0, point1, point2, point3, point0)),\n // unit circle\n Loop.create(Arc3d.createUnitCircle()),\n // rectangle, but with individual line segments\n Loop.create(\n LineSegment3d.create(point0, point1),\n LineSegment3d.create(point1, point2),\n LineSegment3d.create(point2, point3),\n LineSegment3d.create(point3, point0),\n ),\n // Semicircle\n Sample.createCappedArcLoop(4, -90, 90),\n ];\n return result;\n }\n /**\n * Create a square wave along x direction\n * @param dx0 distance along x axis at y=0\n * @param dy vertical rise\n * @param dx1 distance along x axis at y=dy\n * @param numPhase number of phases of the jump.\n * @param dyReturn y value for return to origin. If 0, the wave ends at y=0 after then final \"down\" with one extra horizontal dx0\n * If nonzero, rise to that y value, return to x=0, and return down to origin.\n */\n public static createSquareWave(origin: Point3d, dx0: number, dy: number, dx1: number, numPhase: number, dyReturn: number): Point3d[] {\n const result = [origin.clone()];\n for (let i = 0; i < numPhase; i++) {\n this.pushMove(result, dx0, 0);\n this.pushMove(result, 0, dy);\n this.pushMove(result, dx1, 0);\n this.pushMove(result, 0, -dy);\n }\n this.pushMove(result, dx0, 0);\n if (dyReturn !== 0.0) {\n this.pushMove(result, 0, dyReturn);\n result.push(Point3d.create(origin.x, origin.y + dyReturn));\n result.push(result[0].clone());\n }\n return result;\n }\n /**\n * Create multiple interpolated points between two points\n * @param point0 start point (at fraction0)\n * @param point1 end point (at fraction1)\n * @param numPoints total number of points. This is force to at least 2.\n * @param result optional existing array to receive points.\n * @param index0 optional index of first point. Default is 0.\n * @param index1 optional index of final point. Default is numPoints\n */\n public static createInterpolatedPoints(point0: Point3d, point1: Point3d, numPoints: number, result?: Point3d[], index0?: number, index1?: number): Point3d[] {\n if (numPoints < 2)\n numPoints = 2;\n if (result === undefined)\n result = [];\n if (index0 === undefined)\n index0 = 0;\n if (index1 === undefined)\n index1 = numPoints;\n for (let i = index0; i <= index1; i++) {\n result.push(point0.interpolate(i / numPoints, point1));\n }\n return result;\n }\n /**\n * Append numPhase teeth. Each tooth starts with dxLow dwell at initial y, then sloped rise, then dwell at top, then sloped fall\n * * If no points are present, start with 000. (this happens in pushMove) Otherwise start from final point.\n * * return points array reference.\n * @param points point array to receive points\n * @param dxLow starting step along x direction\n * @param riseX width of rising and falling parts\n * @param riseY height of rise\n * @param dxHigh width at top\n * @param numPhase number of phases.\n */\n public static appendSawTooth(points: Point3d[], dxLow: number, riseX: number, riseY: number, dxHigh: number, numPhase: number): Point3d[] {\n for (let i = 0; i < numPhase; i++) {\n this.pushMove(points, dxLow, 0, 0);\n this.pushMove(points, riseX, riseY, 0);\n this.pushMove(points, dxHigh, 0, 0);\n this.pushMove(points, riseX, -riseY, 0);\n }\n return points;\n }\n /** Append sawtooth with x distances successively scaled by xFactor */\n public static appendVariableSawTooth(points: Point3d[], dxLow: number, riseX: number, riseY: number, dxHigh: number, numPhase: number, xFactor: number): Point3d[] {\n let factor = 1.0;\n for (let i = 0; i < numPhase; i++) {\n this.appendSawTooth(points, factor * dxLow, factor * riseX, riseY, factor * dxHigh, 1);\n factor *= xFactor;\n }\n return points;\n }\n /**\n * Create a pair of sawtooth patterns, one (nominally) outbound and up, the other inbound and down.\n * * return phase count adjusted to end at start x\n * * enter return dx values as lengths -- sign will be negated in construction.\n * @param origin start of entire path.\n * @param dxLow low outbound dwell\n * @param riseX x part of outbound rise and fall\n * @param riseY y part of outbound rise and fall\n * @param dxHigh high outbound dwell\n * @param numPhaseOutbound number of phases outbound. Final phase followed by dxLow dwell.\n * @param dyFinal rise after final dwell.\n * @param dxLowReturn dwell at return high\n * @param riseXReturn rise x part of return\n * @param riseYReturn rise y part of return\n * @param dxHighReturn dwell at return high\n */\n public static createBidirectionalSawtooth(origin: Point3d, dxLow: number, riseX: number, riseY: number, dxHigh: number, numPhaseOutbound: number,\n dyFinal: number,\n dxLowReturn: number, riseXReturn: number, riseYReturn: number, dxHighReturn: number): Point3d[] {\n const data = [origin.clone()];\n const x0 = data[0].x;\n this.appendSawTooth(data, dxLow, riseX, riseY, dxHigh, numPhaseOutbound);\n this.pushMove(data, dxLow, 0, 0);\n this.pushMove(data, 0, dyFinal);\n const x1 = data[data.length - 1].x;\n const returnPhase = Math.abs(dxLowReturn + 2 * riseXReturn + dxHighReturn);\n const totalDX = Math.abs(x1 - x0);\n const numReturnPhase = Math.floor(Math.abs(totalDX / returnPhase));\n this.appendSawTooth(data, -dxLowReturn, -riseXReturn, riseYReturn, -dxHighReturn, numReturnPhase);\n const x2 = data[data.length - 1].x;\n this.pushMove(data, x0 - x2, 0, 0);\n data.push(data[0].clone());\n return data;\n }\n /**\n * Append to a linestring, taking steps along given vector directions\n * If the linestring is empty, a 000 point is added.\n * @param linestring LineString3d to receive points.\n * @param numPhase number of phases of the sawtooth\n * @param vectors any number of vector steps.\n */\n public static appendPhases(linestring: LineString3d, numPhase: number, ...vectors: Vector3d[]): void {\n const tailPoint = linestring.endPoint(); // and this defaults to 000 . ..\n if (linestring.numPoints() === 0)\n linestring.addPoint(tailPoint);\n\n for (let i = 0; i < numPhase; i++) {\n for (const v of vectors) {\n tailPoint.addInPlace(v);\n linestring.addPoint(tailPoint);\n }\n }\n }\n /**\n * Assorted regions with arc boundaries\n * * full circle\n * * with varying sweep:\n * * partial arc with single chord closure\n * * partial arc with 2-edge closure via center\n */\n public static createArcRegions(): Loop[] {\n const result = [];\n const center = Point3d.create(0, 0, 0);\n for (const sweep of [\n AngleSweep.createStartEndDegrees(0, 360),\n AngleSweep.createStartEndDegrees(-20, 20),\n AngleSweep.createStartEndDegrees(0, 90),\n AngleSweep.createStartEndDegrees(0, 180),\n ]) {\n const arc0 = Arc3d.createXY(Point3d.create(0, 0), 2.0, sweep);\n if (arc0.sweep.isFullCircle) {\n result.push(Loop.create(arc0));\n } else {\n const chord = LineSegment3d.create(arc0.endPoint(), arc0.startPoint());\n result.push(Loop.create(arc0, chord));\n result.push(Loop.create(arc0, LineString3d.create(arc0.endPoint(), center, arc0.startPoint())));\n }\n }\n return result;\n }\n /**\n * Assorted loops in xy plane:\n * * unit square\n * * rectangle\n * * L shape\n */\n public static createSimpleXYPointLoops(): Point3d[][] {\n const result = [];\n result.push(Sample.createRectangleXY(0, 0, 1, 1));\n result.push(Sample.createRectangleXY(0, 0, 4, 3));\n result.push(Sample.createLShapedPolygon(0, 0, 5, 4, 1, 2));\n return result;\n }\n /** Assorted `ParityRegion` objects */\n public static createSimpleParityRegions(includeBCurves: boolean = false): ParityRegion[] {\n const pointC = Point3d.create(-5, 0, 0);\n const point0 = Point3d.create(0, 0, 0);\n const point1 = Point3d.create(4, 2, 0);\n const point2 = Point3d.create(6, 4, 0);\n const point3 = Point3d.create(5, 5, 0);\n const point4 = Point3d.create(8, 3, 0);\n const reverseSweep = AngleSweep.createStartEndDegrees(0, -360);\n const ax = 10.0;\n const ay = 8.0;\n const bx = -3.0;\n const by = 2.0;\n const r2 = 0.5;\n const r2A = 2.5;\n const pointA = point0.plusXYZ(ax, 0, 0);\n const pointB = pointA.plusXYZ(0, ay, 0);\n const pointC1 = point0.plusXYZ(0, ay);\n const result = [\n ParityRegion.create(\n Loop.create(\n LineString3d.create(point0, pointA, pointB),\n Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0),\n ),\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\n ),\n ParityRegion.create(\n Loop.create(Arc3d.createXY(pointC, 2.0)),\n Loop.create(Arc3d.createXY(pointC, 1.0, reverseSweep)),\n ),\n ParityRegion.create(\n Loop.create(LineString3d.createRectangleXY(point0, ax, ay)),\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\n ),\n ParityRegion.create(\n Loop.create(LineString3d.createRectangleXY(point0, ax, ay)),\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\n Loop.create(Arc3d.createXY(point2, r2, reverseSweep)),\n ),\n ParityRegion.create(\n Loop.create(LineString3d.createRectangleXY(point0, ax, ay)),\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\n Loop.create(Arc3d.createXY(point2, r2, reverseSweep)),\n Loop.create(LineString3d.createRectangleXY(point3, bx, by)),\n ),\n ParityRegion.create(\n Loop.create(\n LineString3d.create(point0, pointA, pointB),\n Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0),\n ),\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\n Loop.create(Arc3d.create(point4, Vector3d.create(-r2, 0), Vector3d.create(0, r2A))),\n Loop.create(LineString3d.createRectangleXY(point3, bx, by)),\n ),\n ];\n if (includeBCurves) {\n const ey = 1.0;\n result.push(\n ParityRegion.create(\n Loop.create(\n LineSegment3d.create(point0, pointA),\n BSplineCurve3d.createUniformKnots(\n [\n pointA,\n Point3d.create(ax + 1, ey),\n Point3d.create(ax + 1, 2 * ey),\n Point3d.create(ax + 2, 3 * ey),\n Point3d.create(ax + 1, 4 * ey),\n pointB,\n ],\n 3)!,\n Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0),\n ),\n ),\n );\n }\n return result;\n }\n /** Union region. */\n public static createSimpleUnions(): UnionRegion[] {\n const parityRegions = Sample.createSimpleParityRegions();\n const parityRange = parityRegions[0].range();\n const ax = 3.0;\n const ay = 1.0;\n const bx = 4.0;\n const by = 2.0;\n const result = [\n UnionRegion.create(\n Loop.create(LineString3d.createRectangleXY(Point3d.create(0, 0, 0), ax, ay)),\n Loop.create(LineString3d.createRectangleXY(Point3d.create(0, 2 * ay, 0), bx, by)),\n ),\n UnionRegion.create(\n Loop.create(\n LineString3d.create(\n Sample.createRectangleXY(\n parityRange.low.x,\n parityRange.high.y + 0.5,\n parityRange.xLength(),\n parityRange.yLength(),\n ),\n ),\n ),\n parityRegions[0],\n ),\n ];\n return result;\n }\n /** Assorted unstructured curve sets. */\n public static createBagOfCurves(): BagOfCurves[] {\n const parityRegions = Sample.createSimpleParityRegions();\n const loops = Sample.createSimpleLoops();\n const result = [\n BagOfCurves.create(loops[0], parityRegions[0], LineSegment3d.createXYXY(0, 1, 4, 2, 1)),\n // a bag with just an arc\n BagOfCurves.create(Arc3d.createUnitCircle()),\n // a bag with just a line segment\n BagOfCurves.create(LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(1, 1, 0))),\n // a bag with just a linestring\n BagOfCurves.create(LineString3d.create(Point3d.create(0, 0, 0), Point3d.create(1, 1, 0), Point3d.create(2, 1, 0))),\n ];\n return result;\n }\n /**\n * Assorted smooth curve primitives:\n * * line segments\n * * arcs\n */\n public static createSmoothCurvePrimitives(size: number = 1.0): CurvePrimitive[] {\n const alpha = 0.1;\n const beta = 0.3;\n return [\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(size, 0, 0)),\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(size, size, 0)),\n Arc3d.create(\n Point3d.create(0, 0, 0),\n Vector3d.create(size, 0, 0),\n Vector3d.create(0, size, 0),\n AngleSweep.createStartEndDegrees(0, 90),\n ),\n Arc3d.create(\n Point3d.create(0, 0, 0),\n Vector3d.create(size, 0, 0),\n Vector3d.create(0, size, 0),\n AngleSweep.createStartEndDegrees(-40, 270),\n ),\n Arc3d.create(\n Point3d.create(0, 0, 0),\n Vector3d.create(size, alpha * size, 0),\n Vector3d.create(-alpha * beta * size, beta * size, 0),\n AngleSweep.createStartEndDegrees(-40, 270),\n ),\n ];\n }\n /** Assorted small polyface grids, possibly expanded by gridMultiplier */\n public static createSimpleIndexedPolyfaces(gridMultiplier: number): IndexedPolyface[] {\n const meshes = [\n Sample.createTriangularUnitGridPolyface(\n Point3d.create(),\n Vector3d.unitX(),\n Vector3d.unitY(),\n gridMultiplier * 3, 2 * gridMultiplier, false, false, false),\n Sample.createTriangularUnitGridPolyface(\n Point3d.create(),\n Vector3d.unitX(),\n Vector3d.unitY(),\n 3 * gridMultiplier, 2 * gridMultiplier, true, false, false),\n Sample.createTriangularUnitGridPolyface(\n Point3d.create(),\n Vector3d.unitX(),\n Vector3d.unitY(),\n 3 * gridMultiplier, 2 * gridMultiplier, false, true, false),\n Sample.createTriangularUnitGridPolyface(\n Point3d.create(),\n Vector3d.unitX(),\n Vector3d.unitY(),\n 3 * gridMultiplier, 2 * gridMultiplier, false, false, true),\n Sample.createTriangularUnitGridPolyface(\n Point3d.create(),\n Vector3d.unitX(),\n Vector3d.unitY(),\n 3 * gridMultiplier, 2 * gridMultiplier, true, true, true),\n ];\n for (const m of meshes)\n m.expectedClosure = 1;\n return meshes;\n }\n /**\n * Build a mesh that is a (possibly skewed) grid in a plane.\n * @param origin \"lower left\" coordinate\n * @param vectorX step in \"X\" direction\n * @param vectorY step in \"Y\" direction\n * @param numXVertices number of vertices in X direction\n * @param numYVertices number of vertices in y direction\n * @param createParams true to create parameters, with parameter value `(i,j)` for point at (0 based) vertex in x,y directions\n * @param createNormals true to create a (single) normal indexed from all facets\n * @param createColors true to create a single color on each quad (shared between both triangles in quad if triangulating)\n * @param triangulate whether to triangulate the quads (default true)\n * @note edgeVisible is false only on the diagonals\n */\n public static createTriangularUnitGridPolyface(\n origin: Point3d, vectorX: Vector3d, vectorY: Vector3d,\n numXVertices: number, numYVertices: number, createParams: boolean = false, createNormals: boolean = false,\n createColors: boolean = false, triangulate: boolean = true,\n ): IndexedPolyface {\n const mesh = IndexedPolyface.create(createNormals, createParams, createColors);\n const normal = vectorX.crossProduct(vectorY);\n if (createNormals) {\n normal.normalizeInPlace();\n mesh.addNormalXYZ(normal.x, normal.y, normal.z); // use XYZ to help coverage count!!\n }\n // Push to coordinate arrays\n for (let j = 0; j < numYVertices; j++) {\n for (let i = 0; i < numXVertices; i++) {\n mesh.addPoint(origin.plus2Scaled(vectorX, i, vectorY, j));\n if (createParams)\n mesh.addParamUV(i, j);\n }\n }\n let color = 0xFF5CE51A; // arbitrary color so colorIndex is different from color.\n const colorDiff = 0x12345;\n // Push elements to index array (vertices are calculated using i and j positioning for each point)\n let thisColorIndex = 0;\n for (let j = 0; j + 1 < numYVertices; j++) {\n for (let i = 0; i + 1 < numXVertices; i++) {\n const vertex00 = numXVertices * j + i;\n const vertex10 = vertex00 + 1;\n const vertex01 = vertex00 + numXVertices;\n const vertex11 = vertex01 + 1;\n if (triangulate) {\n // Push lower triangle\n mesh.addPointIndex(vertex00, true);\n mesh.addPointIndex(vertex10, true);\n mesh.addPointIndex(vertex11, false);\n // make color === faceIndex\n if (createColors) {\n thisColorIndex = mesh.addColor(color += colorDiff);\n mesh.addColorIndex(thisColorIndex);\n mesh.addColorIndex(thisColorIndex);\n mesh.addColorIndex(thisColorIndex);\n }\n // param indexing matches points . .\n if (createParams) {\n mesh.addParamIndex(vertex00);\n mesh.addParamIndex(vertex10);\n mesh.addParamIndex(vertex11);\n }\n if (createNormals) {\n mesh.addNormalIndex(0);\n mesh.addNormalIndex(0);\n mesh.addNormalIndex(0);\n }\n mesh.terminateFacet(false);\n // upper triangle\n mesh.addPointIndex(vertex11, true);\n mesh.addPointIndex(vertex01, true);\n mesh.addPointIndex(vertex00, false);\n // make color === faceIndex\n if (createColors) {\n mesh.addColorIndex(thisColorIndex);\n mesh.addColorIndex(thisColorIndex);\n mesh.addColorIndex(thisColorIndex);\n }\n // param indexing matches points.\n if (createParams) {\n mesh.addParamIndex(vertex11);\n mesh.addParamIndex(vertex01);\n mesh.addParamIndex(vertex00);\n }\n if (createNormals) {\n mesh.addNormalIndex(0);\n mesh.addNormalIndex(0);\n mesh.addNormalIndex(0);\n }\n mesh.terminateFacet(false);\n } else {\n // Push quad\n mesh.addPointIndex(vertex00, true);\n mesh.addPointIndex(vertex10, true);\n mesh.addPointIndex(vertex11, true);\n mesh.addPointIndex(vertex01, true);\n // make color === faceIndex\n if (createColors) {\n thisColorIndex = mesh.addColor(color += colorDiff);\n mesh.addColorIndex(thisColorIndex);\n mesh.addColorIndex(thisColorIndex);\n mesh.addColorIndex(thisColorIndex);\n mesh.addColorIndex(thisColorIndex);\n }\n // param indexing matches points . .\n if (createParams) {\n mesh.addParamIndex(vertex00);\n mesh.addParamIndex(vertex10);\n mesh.addParamIndex(vertex11);\n mesh.addParamIndex(vertex01);\n }\n if (createNormals) {\n mesh.addNormalIndex(0);\n mesh.addNormalIndex(0);\n mesh.addNormalIndex(0);\n mesh.addNormalIndex(0);\n }\n mesh.terminateFacet(false);\n }\n }\n }\n return mesh;\n }\n /** Create an xy grid of points in single array with x varying fastest. */\n public static createXYGrid(numU: number, numV: number, dX: number = 1.0, dY: number = 1.0): Point3d[] {\n const points = [];\n for (let j = 0; j < numV; j++) {\n for (let i = 0; i < numU; i++) {\n points.push(Point3d.create(i * dX, j * dY, 0));\n }\n }\n return points;\n }\n /** Create simple bspline surface on xy plane grid. */\n public static createXYGridBsplineSurface(numU: number, numV: number, orderU: number, orderV: number): BSplineSurface3d | undefined {\n return BSplineSurface3d.create(\n Sample.createXYGrid(numU, numV, 1.0, 1.0), numU, orderU, undefined, numV, orderV, undefined);\n }\n /**\n * Create a bspline surface whose poles area on circular paths.\n * * (BUT not weighted bspline, therefore although u and v isolines \"go around\" they are not true circles.)\n * @param radiusU major radius\n * @param radiusV minor radius\n * @param numU number of facets around major hoop\n * @param numV number of facets around minor hoop\n * @param orderU major hoop order\n * @param orderV minor hoop order\n */\n public static createPseudoTorusBsplineSurface(radiusU: number, radiusV: number, numU: number, numV: number, orderU: number, orderV: number): BSplineSurface3d | undefined {\n const points = [];\n const numUPole = numU + orderU - 1; // degreeU wrap-around poles\n const numVPole = numV + orderV - 1; // degreeV wrap-around poles\n const uKnots = KnotVector.createUniformWrapped(numU, orderU - 1, 0, 1);\n const vKnots = KnotVector.createUniformWrapped(numV, orderV - 1, 0, 1);\n const dURadians = 2.0 * Math.PI / numU;\n const dVRadians = 2.0 * Math.PI / numV;\n for (let iV = 0; iV < numVPole; iV++) {\n const vRadians = iV * dVRadians;\n const cV = Math.cos(vRadians);\n const sV = Math.sin(vRadians);\n for (let iU = 0; iU < numUPole; iU++) {\n const uRadians = iU * dURadians;\n const cU = Math.cos(uRadians);\n const sU = Math.sin(uRadians);\n const rho = radiusU + cV * radiusV;\n points.push(Point3d.create(rho * cU, rho * sU, sV * radiusV));\n }\n }\n const result = BSplineSurface3d.create(points, numUPole, orderU, uKnots.knots, numVPole, orderV, vKnots.knots);\n if (result) {\n result.setWrappable(UVSelect.uDirection, BSplineWrapMode.OpenByAddingControlPoints);\n result.setWrappable(UVSelect.vDirection, BSplineWrapMode.OpenByAddingControlPoints);\n }\n return result;\n }\n /**\n * Create a Bspline surface for a cone.\n * @param centerA center at section A\n * @param centerB center at section B\n * @param radiusA radius at point A\n * @param radiusB radius at point B\n */\n public static createConeBsplineSurface(\n centerA: Point3d,\n centerB: Point3d,\n radiusA: number,\n radiusB: number,\n numSection: number): BSplineSurface3dH | undefined {\n if (numSection < 2)\n numSection = 2;\n const controlPoints: number[][][] = [];\n const numVPole = numSection;\n const q1 = 0.25;\n const q2 = 0.5;\n const q3 = 0.75;\n const uKnots = [0, 0, q1, q1, q2, q2, q3, q3, 1, 1];\n const vKnots = [];\n const dv = 1.0 / (numSection - 1);\n for (let i = 0; i < numSection; i++) {\n vKnots.push(i * dv);\n }\n const center = Point3d.create();\n const vectorAB = Vector3d.createStartEnd(centerA, centerB);\n const axes = Matrix3d.createRigidHeadsUp(vectorAB, AxisOrder.ZXY);\n let r0, r90, v;\n for (let iV = 0; iV < numVPole; iV++) {\n v = iV * dv;\n centerA.interpolate(v, centerB, center);\n r0 = r90 = Geometry.interpolate(radiusA, v, radiusB);\n controlPoints.push(Sample.createBsplineArc90SectionToXYZWArrays(center, axes, r0, r90, false));\n }\n const result = BSplineSurface3dH.createGrid(controlPoints,\n WeightStyle.WeightsSeparateFromCoordinates,\n 3, uKnots, 2, vKnots);\n if (result)\n result.setWrappable(UVSelect.uDirection, BSplineWrapMode.OpenByRemovingKnots);\n return result;\n }\n /** Create bspline surface on xy grid with weights. */\n public static createWeightedXYGridBsplineSurface(\n numU: number, numV: number, orderU: number, orderV: number,\n weight00: number = 1.0,\n weight10: number = 1.0,\n weight01: number = 1.0,\n weight11: number = 1.0): BSplineSurface3dH | undefined {\n const xyzPoles = Sample.createXYGrid(numU, numV, 1.0, 1.0);\n const weights = [];\n for (let i = 0; i < numU; i++)\n for (let j = 0; j < numV; j++) {\n const wu0 = Geometry.interpolate(weight00, i / (numU - 1), weight10);\n const wu1 = Geometry.interpolate(weight01, i / (numU - 1), weight11);\n weights.push(Geometry.interpolate(wu0, j / (numV - 1), wu1));\n }\n return BSplineSurface3dH.create(\n xyzPoles,\n weights,\n numU, orderU, undefined,\n numV, orderV, undefined,\n );\n }\n /** Assorted linear sweeps */\n public static createSimpleLinearSweeps(): LinearSweep[] {\n const result: LinearSweep[] = [];\n const base = Loop.create(LineString3d.createRectangleXY(Point3d.create(), 2, 3));\n const vectorZ = Vector3d.create(0, 0, 1.234);\n const vectorQ = Vector3d.create(0.1, 0.21, 1.234);\n result.push(LinearSweep.create(base, vectorZ, false)!);\n result.push(LinearSweep.create(base, vectorZ, true)!);\n result.push(LinearSweep.create(base, vectorQ, false)!);\n result.push(LinearSweep.create(base, vectorQ, true)!);\n result.push(LinearSweep.create(Sample.createCappedArcLoop(5, -45, 90), vectorQ, true)!);\n for (const curve of Sample.createSmoothCurvePrimitives()) {\n const path = Path.create(curve);\n result.push(LinearSweep.create(path, vectorZ, false)!);\n }\n // coordinates for a clearly unclosed linestring ....\n const xyPoints = [\n Point2d.create(0, 0),\n Point2d.create(1, 0),\n Point2d.create(1, 1),\n ];\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, false)!);\n // this forces artificial closure point . . .\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, true)!);\n // add a not-quite-exact closure point ...\n const e = 1.0e-11;\n xyPoints.push(Point2d.create(e, e));\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, false)!);\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, true)!);\n // make it a better closure\n xyPoints.pop();\n xyPoints.push(xyPoints[0]);\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, false)!);\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, true)!);\n // negative sweep ...\n result.push(LinearSweep.createZSweep(xyPoints, 1, -3, true)!);\n return result;\n }\n /**\n * Create an array of primitives with an arc centered at origin and a line segment closing back to the arc start.\n * This can be bundled into Path or Loop by caller.\n */\n public static createCappedArcPrimitives(radius: number, startDegrees: number, endDegrees: number): CurvePrimitive[] {\n const arc = Arc3d.create(\n Point3d.create(0, 0, 0),\n Vector3d.unitX(radius),\n Vector3d.unitY(radius),\n AngleSweep.createStartEndDegrees(startDegrees, endDegrees),\n );\n return [arc, LineSegment3d.create(arc.fractionToPoint(1.0), arc.fractionToPoint(0.0))];\n }\n /** Return a Path structure for a segment of arc, with closure segment */\n public static createCappedArcPath(radius: number, startDegrees: number, endDegrees: number): Path {\n return Path.createArray(Sample.createCappedArcPrimitives(radius, startDegrees, endDegrees));\n }\n /** Return a Loop structure for a segment of arc, with closure segment */\n public static createCappedArcLoop(radius: number, startDegrees: number, endDegrees: number): Loop {\n return Loop.createArray(Sample.createCappedArcPrimitives(radius, startDegrees, endDegrees));\n }\n /** Create assorted rotational sweeps. */\n public static createSimpleRotationalSweeps(): RotationalSweep[] {\n const result: RotationalSweep[] = [];\n // rectangle in xy plane\n const base = Loop.create(LineString3d.createRectangleXY(Point3d.create(1, 0, 0), 2, 3));\n // rotate around the y axis\n for (const axis of [\n Ray3d.createXYZUVW(0, 0, 0, 0, 1, 0),\n Ray3d.createXYZUVW(5, 0, 0, 0, 1, 0),\n Ray3d.createXYZUVW(-1, 0, 0, -1, 1, 0),\n ]) {\n result.push(RotationalSweep.create(base, axis, Angle.createDegrees(45.0), false)!);\n result.push(RotationalSweep.create(base, axis, Angle.createDegrees(150.0), true)!);\n }\n return result;\n }\n /** Create assorted spheres */\n public static createSpheres(includeEllipsoidal: boolean = false): Sphere[] {\n const result: Sphere[] = [];\n result.push(Sphere.createCenterRadius(Point3d.create(0, 0, 0), 1.0));\n result.push(Sphere.createCenterRadius(Point3d.create(1, 2, 3), 3.0));\n const s1 = Sphere.createCenterRadius(\n Point3d.create(1, 2, 3), 2.0,\n AngleSweep.createStartEndDegrees(-45, 80),\n );\n s1.capped = true;\n result.push(s1);\n // still a sphere, but with axes KIJ . .\n const s2 = Sphere.createFromAxesAndScales(\n Point3d.create(1, 2, 3),\n Matrix3d.createRowValues(\n 0, 1, 0,\n 0, 0, 1,\n 1, 0, 0,\n ),\n 4, 4, 4,\n AngleSweep.createStartEndDegrees(-45, 45),\n true,\n )!;\n result.push(s2);\n if (includeEllipsoidal)\n result.push(\n Sphere.createDgnSphere(\n Point3d.create(1, 2, 3),\n Vector3d.unitX(),\n Vector3d.unitZ(),\n 3,\n 2,\n AngleSweep.createFullLatitude(), false,\n )!,\n );\n return result;\n }\n /** Create true (non-spherical) ellipsoids. */\n public static createEllipsoids(): Sphere[] {\n return [\n Sphere.createEllipsoid(\n Transform.createOriginAndMatrix(\n Point3d.create(0, 0, 0),\n Matrix3d.createRowValues(\n 4, 1, 1,\n 1, 4, 1,\n 0.5, 0.2, 5),\n ),\n AngleSweep.createFullLatitude(),\n true,\n )!,\n ];\n }\n /** Create assorted cones. */\n public static createCones(): Cone[] {\n const result: Cone[] = [];\n const origin = Point3d.create(0, 0, 0);\n const topZ = Point3d.create(0, 0, 5);\n const centerA = Point3d.create(1, 2, 1);\n const centerB = Point3d.create(2, 3, 8);\n result.push(Cone.createAxisPoints(Point3d.create(0, 0, 0), Point3d.create(0, 0, 1), 0.5, 0.5, false) as Cone);\n result.push(Cone.createAxisPoints(centerA, centerB, 0.5, 0.5, false) as Cone);\n result.push(Cone.createAxisPoints(origin, topZ, 1.0, 0.2, true) as Cone);\n result.push(Cone.createAxisPoints(centerA, centerB, 0.2, 0.5, false) as Cone);\n result.push(Cone.createAxisPoints(origin, centerB, 1.0, 0.0, false) as Cone);\n result.push(Cone.createAxisPoints(topZ, origin, 0.0, 1.0, true) as Cone);\n return result;\n }\n /** Return a TorusPipe with swept circle in xz plane rotating through an angle range around the Z axis. */\n public static createPartialTorusAroundZ(\n majorRadius: number, majorSweep: Angle, minorRadius: number, minorStart: Angle, minorEnd: Angle,\n ): RotationalSweep {\n const arc = Arc3d.createXYZXYZXYZ(\n majorRadius, 0, 0,\n minorRadius, 0, 0,\n 0, minorRadius, 0,\n AngleSweep.createStartEnd(minorStart, minorEnd),\n );\n const contour = Path.create(arc);\n return RotationalSweep.create(contour, Ray3d.createZAxis(), majorSweep, false)!;\n }\n /** Create assorted Torus Pipes */\n public static createTorusPipes(): TorusPipe[] {\n const result: TorusPipe[] = [];\n const center = Point3d.create(1, 2, 3);\n const frame = Matrix3d.createRotationAroundVector(\n Vector3d.create(1, 2, 3), Angle.createRadians(10),\n ) as Matrix3d;\n const vectorX = frame.columnX();\n const vectorY = frame.columnY();\n const vectorZ = frame.columnZ();\n result.push(TorusPipe.createInFrame(Transform.createIdentity(), 5.0, 0.8, Angle.create360(), false)!);\n result.push(TorusPipe.createInFrame(Transform.createIdentity(), 5.0, 1.0, Angle.createDegrees(90), true)!);\n result.push(TorusPipe.createDgnTorusPipe(center, vectorX, vectorY, 10, 1, Angle.createDegrees(180), true)!);\n result.push(TorusPipe.createDgnTorusPipe(center, vectorY, vectorZ, 10, 1, Angle.createDegrees(45), true) as TorusPipe);\n return result;\n }\n /** Create assorted boxes. */\n public static createBoxes(capped: boolean = true): Box[] {\n const result: Box[] = [];\n const cornerA = Point3d.create(1, 2, 3);\n const aX = 3.0;\n const aY = 2.0;\n const bX = 1.5;\n const bY = 1.0;\n const h = 5.0;\n const frame = Matrix3d.createRotationAroundVector(\n Vector3d.create(0, 0, 1), Angle.createDegrees(10),\n ) as Matrix3d;\n const vectorX = frame.columnX();\n const vectorY = frame.columnY();\n const cornerB = Matrix3d.xyzPlusMatrixTimesCoordinates(cornerA, frame, 0, 0, h);\n result.push(\n Box.createDgnBox(\n cornerA, Vector3d.unitX(), Vector3d.unitY(), cornerB, aX, aY, aX, aY, capped,\n ) as Box,\n );\n result.push(\n Box.createDgnBox(\n cornerA, Vector3d.unitX(), Vector3d.unitY(), cornerB, aX, aY, bX, bY, capped,\n ) as Box,\n );\n result.push(\n Box.createDgnBox(\n cornerA, vectorX, vectorY, cornerB, aX, aY, bX, bY, capped,\n ) as Box,\n );\n const frameY = Matrix3d.createRotationAroundVector(\n Vector3d.create(0, 1, 0),\n Angle.createDegrees(10),\n ) as Matrix3d;\n result.push(\n Box.createDgnBox(\n cornerA, frameY.columnX(), frameY.columnY(),\n cornerA.plusScaled(frameY.columnZ(), h), aX, aY, bX, bY, capped,\n ) as Box,\n );\n return result;\n }\n /** Create an array of points for a rectangle with corners (x0,y0,z) and (x1,y1,z) */\n public static createRectangle(\n x0: number, y0: number, x1: number, y1: number, z: number = 0.0, closed: boolean = false,\n ): Point3d[] {\n const points = [\n Point3d.create(x0, y0, z),\n Point3d.create(x1, y0, z),\n Point3d.create(x1, y1, z),\n Point3d.create(x0, y1, z),\n ];\n if (closed)\n points.push(Point3d.create(x0, y0, z));\n return points;\n }\n /** Create an array of points for a rectangle with corners of a Range2d. */\n public static createRectangleInRange2d(range: Range2d, z: number = 0.0, closed: boolean = false): Point3d[] {\n const x0 = range.low.x;\n const x1 = range.high.x;\n const y0 = range.low.y;\n const y1 = range.high.y;\n return this.createRectangle(x0, y0, x1, y1, z, closed);\n }\n /** Create assorted ruled sweeps */\n public static createRuledSweeps(\n includeParityRegion: boolean = false, includeBagOfCurves: boolean = false,\n ): RuledSweep[] {\n const allSweeps = [];\n const contour0 = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 3, 2, 0)));\n const contour1 = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 3, 2.5, 2)));\n const contour2 = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 4, 3.5, 4)));\n const contour3 = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 2, 1, 7)));\n const allContours = [contour0, contour1, contour2];\n allSweeps.push(RuledSweep.create([contour0, contour1], true)!);\n allSweeps.push(RuledSweep.create([contour0, contour1, contour2], true)!);\n allSweeps.push(RuledSweep.create([contour0, contour1, contour2, contour3], true)!);\n allSweeps.push(RuledSweep.create(allContours, false)!);\n const curves = Sample.createSmoothCurvePrimitives();\n for (const c of curves) {\n const frame = c.fractionToFrenetFrame(0.0);\n if (frame) {\n const perpVector = frame.matrix.columnZ();\n perpVector.scaleInPlace(10.0);\n const c1 = c.cloneTransformed(Transform.createTranslation(perpVector)) as CurvePrimitive;\n allSweeps.push(RuledSweep.create([Path.create(c), Path.create(c1)], false)!);\n }\n }\n if (includeParityRegion) {\n const outer = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 5, 6, 0)));\n const inner = Loop.create(LineString3d.create(this.createRectangleXY(1, 1, 2, 3, 0)));\n const contourA = ParityRegion.create(outer, inner);\n const contourB = contourA.clone();\n contourB.tryTranslateInPlace(0, 0, 2);\n allSweeps.push(RuledSweep.create([contourA, contourB], false)!);\n }\n if (includeBagOfCurves) {\n const contourA = BagOfCurves.create(LineSegment3d.createXYZXYZ(1, 1, 0, 3, 1, 0));\n const contourB = BagOfCurves.create(LineSegment3d.createXYZXYZ(1, 1, 1, 3, 1, 1));\n allSweeps.push(RuledSweep.create([contourA, contourB], false)!);\n }\n return allSweeps;\n }\n /**\n * Uniformly spaced numbers\n * @param a0 first entry\n * @param delta step between entries\n * @param n number of entries\n */\n public static createGrowableArrayCountedSteps(a0: number, delta: number, n: number): GrowableFloat64Array {\n const data = new GrowableFloat64Array(n);\n for (let i = 0; i < n; i++)\n data.push(a0 + i * delta);\n return data;\n }\n /**\n * Create points on a unit circle\n * @param radius first entry\n * @param numEdge number of edges of chorded circle. Angle step is 2PI/numEdge (whether or not closed)\n * @param closed true to include final point (i.e. return numEdge+1 points)\n */\n public static createGrowableArrayCirclePoints(radius: number, numEdge: number, closed: boolean = false,\n centerX: number = 0, centerY: number = 0, data?: GrowableXYZArray): GrowableXYZArray {\n if (!data) data = new GrowableXYZArray();\n data.ensureCapacity(numEdge + (closed ? 1 : 0));\n const delta = 2.0 * Math.PI / numEdge;\n for (let i = 0; i < numEdge; i++) {\n const radians = i * delta;\n data.push(Point3d.create(centerX + radius * Math.cos(radians), centerY + radius * Math.sin(radians)));\n }\n return data;\n }\n private static pushIfDistinct(points: Point3d[], xyz: Point3d, tol: number = 1.0e-12) {\n if (points.length === 0 || points[points.length - 1].distanceXY(xyz) > tol)\n points.push(xyz);\n }\n private static appendToFractalEval(points: Point3d[], pointA: Point3d, pointB: Point3d, pattern: Point2d[], numRecursion: number, perpendicularFactor: number) {\n const point0 = pointA.clone();\n Sample.pushIfDistinct(points, pointA);\n for (const uv of pattern) {\n const point1 = pointA.interpolatePerpendicularXY(uv.x, pointB, perpendicularFactor * uv.y);\n if (numRecursion > 0)\n Sample.appendToFractalEval(points, point0, point1, pattern, numRecursion - 1, perpendicularFactor);\n Sample.pushIfDistinct(points, point1);\n point0.setFrom(point1);\n }\n Sample.pushIfDistinct(points, pointB);\n }\n /**\n * For each edge of points, construct a transform (with scale, rotate, and translate) that spreads the patter out along the edge.\n * Repeat recursively for each edge\n * @returns Returns an array of recursively generated fractal points\n * @param poles level-0 (coarse) polygon whose edges are to be replaced by recursive fractals\n * @param pattern pattern to map to each edge of poles (and to edges of the recursion)\n * @param numRecursion number of recursions\n * @param perpendicularFactor factor to apply to perpendicular sizing.\n */\n public static createRecursiveFractalPolygon(\n poles: Point3d[], pattern: Point2d[], numRecursion: number, perpendicularFactor: number,\n ): Point3d[] {\n const points: Point3d[] = [];\n Sample.pushIfDistinct(points, poles[0]);\n for (let i = 0; i + 1 < poles.length; i++) {\n if (numRecursion > 0)\n Sample.appendToFractalEval(points, poles[i], poles[i + 1], pattern, numRecursion - 1, perpendicularFactor);\n Sample.pushIfDistinct(points, poles[i + 1]);\n }\n return points;\n }\n /**\n * Primary shape is a \"triangle\" with lower edge pushed in so it becomes a mild nonconvex quad.\n * Fractal effects are gentle.\n */\n public static nonConvexQuadSimpleFractal(numRecursion: number, perpendicularFactor: number): Point3d[] {\n const pattern: Point2d[] = [\n Point2d.create(),\n Point2d.create(0.5, 0.1),\n Point2d.create(1.0, 0.0),\n ];\n const poles: Point3d[] = [\n Point3d.create(0, 0, 0),\n Point3d.create(0.6, 0.1, 0),\n Point3d.create(1, 0.1, 0),\n Point3d.create(0.6, 1, 0),\n Point3d.create(),\n ];\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\n }\n /** Create a diamond with convex fractal */\n public static createFractalDiamondConvexPattern(numRecursion: number, perpendicularFactor: number): Point3d[] {\n const pattern: Point2d[] = [\n Point2d.create(),\n Point2d.create(0.3, 0.05),\n Point2d.create(0.5, 0.10),\n Point2d.create(0.7, 0.04),\n Point2d.create(1.0, 0.0),\n ];\n const poles: Point3d[] = [\n Point3d.create(0, -1, 0),\n Point3d.create(1, 0, 0),\n Point3d.create(0, 1, 0),\n Point3d.create(-1, 0, 0),\n Point3d.create(0, -1, 0),\n ];\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\n }\n /** Create l on a square, with pattern shift to both directions. */\n public static createFractalSquareReversingPattern(numRecursion: number, perpendicularFactor: number): Point3d[] {\n const pattern: Point2d[] = [\n Point2d.create(),\n Point2d.create(0.25, 0),\n Point2d.create(0.5, 0.2),\n Point2d.create(0.75, -0.1),\n Point2d.create(1.0, 0.0),\n ];\n const poles: Point3d[] = [\n Point3d.create(),\n Point3d.create(1, 0, 0),\n Point3d.create(1, 1, 0),\n Point3d.create(0, 1, 0),\n Point3d.create(0, 0, 0),\n ];\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\n }\n /** Create a fractal on a non-convex base and reversing pattern */\n public static createFractalHatReversingPattern(numRecursion: number, perpendicularFactor: number): Point3d[] {\n const pattern: Point2d[] = [\n Point2d.create(),\n Point2d.create(0.25, 0),\n Point2d.create(0.25, 0.1),\n Point2d.create(0.50, 0.1),\n Point2d.create(0.50, -0.1),\n Point2d.create(0.75, -0.1),\n Point2d.create(0.75, 0),\n Point2d.create(1.0, 0.0),\n ];\n const poles: Point3d[] = [\n Point3d.create(),\n Point3d.create(1, 0, 0),\n Point3d.create(1, 1, 0),\n Point3d.create(0, 1, 0),\n Point3d.create(0, 0, 0),\n ];\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\n }\n /** Create a fractal on a primary L shape with a reversing pattern */\n public static createFractalLReversingPattern(numRecursion: number, perpendicularFactor: number): Point3d[] {\n const pattern: Point2d[] = [\n Point2d.create(),\n Point2d.create(0.25, 0),\n Point2d.create(0.5, 0.2),\n Point2d.create(0.75, -0.1),\n Point2d.create(1.0, 0.0),\n ];\n const poles: Point3d[] = [\n Point3d.create(),\n Point3d.create(1, 0, 0),\n Point3d.create(1, 1, 0),\n Point3d.create(2, 2, 0),\n Point3d.create(2, 3, 0),\n Point3d.create(0, 3, 0),\n Point3d.create(),\n ];\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\n }\n /** Fractal with fewer concavity changes.... */\n public static createFractalLMildConcavePatter(numRecursion: number, perpendicularFactor: number): Point3d[] {\n const pattern: Point2d[] = [\n Point2d.create(),\n Point2d.create(0.25, 0.05),\n Point2d.create(0.5, 0.15),\n Point2d.create(0.75, 0.05),\n Point2d.create(1.0, 0.0),\n ];\n const poles: Point3d[] = [\n Point3d.create(),\n Point3d.create(1, 0, 0),\n Point3d.create(1, 1, 0),\n Point3d.create(2, 2, 0),\n Point3d.create(1.5, 3, 0),\n Point3d.create(0, 3, 0),\n Point3d.create(),\n ];\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\n }\n /** Append interpolated points from the array tail to the target. */\n public static appendSplits(points: Point3d[], target: Point3d, numSplit: number, includeTarget: boolean) {\n const pointA = points[points.length - 1];\n for (let i = 0; i < numSplit; i++)\n points.push(pointA.interpolate(i / numSplit, target));\n if (includeTarget)\n points.push(target);\n }\n /**\n * Triangle with 3 given vertices, and indicated extra points on each each.\n * @param numSplitAB number of extra points on edge AB\n * @param numSplitBC number of extra points on edge BC\n * @param numSplitCA number of extra points on edge CA\n * @param wrap true to replicate vertexA at end\n * @param xyzA vertexA\n * @param xyzB vertexB\n * @param xyzC vertexC\n */\n public static createTriangleWithSplitEdges(\n numSplitAB: number,\n numSplitBC: number,\n numSplitCA: number,\n wrap: boolean = true,\n xyzA: Point3d = Point3d.create(0, 0, 0),\n xyzB: Point3d = Point3d.create(1, 0, 0),\n xyzC: Point3d = Point3d.create(0, 1, 0)): Point3d[] {\n const result = [xyzA.clone()];\n Sample.appendSplits(result, xyzB, numSplitAB, true);\n Sample.appendSplits(result, xyzC, numSplitBC, true);\n Sample.appendSplits(result, xyzA, numSplitCA, wrap);\n return result;\n }\n /** Create a box (xyz) from half-lengths and center. */\n public static createCenteredBoxEdges(ax: number = 1, ay: number = 1, az: number = 0, cx: number = 0, cy: number = 0, cz: number = 0,\n geometry?: GeometryQuery[]): GeometryQuery[] {\n if (!geometry)\n geometry = [];\n const x0 = cx - ax;\n const y0 = cy - ay;\n const z0 = cz - az;\n const x1 = cx + ax;\n const y1 = cy + ay;\n const z1 = cz + az;\n for (const z of [z0, z1]) {\n geometry.push(\n LineString3d.create(\n Point3d.create(x0, y0, z),\n Point3d.create(x1, y0, z),\n Point3d.create(x1, y1, z),\n Point3d.create(x0, y1, z),\n Point3d.create(x0, y0, z),\n ),\n );\n }\n geometry.push(LineSegment3d.createXYZXYZ(x0, y0, z0, x0, y0, z1));\n geometry.push(LineSegment3d.createXYZXYZ(x1, y0, z0, x1, y0, z1));\n geometry.push(LineSegment3d.createXYZXYZ(x1, y1, z0, x1, y1, z1));\n geometry.push(LineSegment3d.createXYZXYZ(x0, y1, z0, x0, y1, z1));\n return geometry;\n }\n /**\n * Assorted transition spirals\n * * (All combinations of bearing radius bearing radius length subsets.)\n */\n public static createSimpleTransitionSpirals(): TransitionSpiral3d[] {\n // 5 spirals exercise the intricate \"4 out of 5\" input rules for spirals . ..\n const r1 = 1000.0;\n const r0 = 0.0;\n const averageCurvature = IntegratedSpiral3d.averageCurvatureR0R1(r0, r1);\n const arcLength = 100.0;\n const dThetaRadians = arcLength * averageCurvature;\n return [\n IntegratedSpiral3d.createFrom4OutOf5(\n \"clothoid\", r0, r1,\n Angle.createDegrees(0),\n Angle.createRadians(dThetaRadians),\n undefined,\n undefined,\n Transform.createIdentity(),\n )!,\n IntegratedSpiral3d.createFrom4OutOf5(\n \"bloss\", r0, r1,\n Angle.createDegrees(0),\n undefined,\n arcLength,\n undefined,\n Transform.createIdentity(),\n )!,\n IntegratedSpiral3d.createFrom4OutOf5(\n \"clothoid\", r0, r1,\n undefined,\n Angle.createRadians(dThetaRadians),\n arcLength,\n undefined,\n Transform.createIdentity(),\n )!,\n IntegratedSpiral3d.createFrom4OutOf5(\n \"biquadratic\", r0, undefined,\n Angle.createDegrees(0),\n Angle.createRadians(dThetaRadians),\n arcLength,\n undefined,\n Transform.createIdentity(),\n )!,\n IntegratedSpiral3d.createFrom4OutOf5(\n \"sine\", undefined, r1,\n Angle.createDegrees(0),\n Angle.createRadians(dThetaRadians),\n arcLength,\n undefined,\n Transform.createIdentity(),\n )!,\n IntegratedSpiral3d.createFrom4OutOf5(\n \"cosine\", r0, r1,\n Angle.createDegrees(0),\n Angle.createRadians(dThetaRadians),\n undefined,\n Segment1d.create(0, 0.5),\n Transform.createOriginAndMatrix(\n Point3d.create(1, 2, 0),\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\n ),\n )!,\n DirectSpiral3d.createFromLengthAndRadius(\n \"Arema\", r0, r1,\n Angle.createDegrees(0),\n undefined,\n arcLength,\n undefined,\n Transform.createOriginAndMatrix(\n Point3d.create(1, 2, 0),\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\n ),\n )!,\n DirectSpiral3d.createFromLengthAndRadius(\n \"ChineseCubic\", r0, r1,\n Angle.createDegrees(0),\n undefined,\n arcLength,\n undefined,\n Transform.createOriginAndMatrix(\n Point3d.create(1, 2, 0),\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\n ),\n )!,\n DirectSpiral3d.createFromLengthAndRadius(\n \"JapaneseCubic\", r0, r1,\n Angle.createDegrees(0),\n undefined,\n arcLength,\n undefined,\n Transform.createOriginAndMatrix(\n Point3d.create(1, 2, 0),\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\n ),\n )!,\n DirectSpiral3d.createFromLengthAndRadius(\n \"DirectHalfCosine\", r0, r1,\n Angle.createDegrees(0),\n undefined,\n arcLength,\n undefined,\n Transform.createOriginAndMatrix(\n Point3d.create(1, 2, 0),\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\n ),\n )!,\n DirectSpiral3d.createCzechCubic(Transform.createIdentity(), arcLength, r1)!,\n ];\n }\n /**\n * Create a Bezier curve with significant twist effects\n * * r and theta are circle in xy plane at steps in thetaStepper\n * * z varies with sin(phi) at steps in phiStepper.\n */\n public static createTwistingBezier(order: number,\n x0: number,\n y0: number,\n r: number,\n thetaStepper: AngleSweep,\n phiStepper: AngleSweep,\n weightInterval?: Segment1d,\n ): CurvePrimitive | undefined {\n if (weightInterval !== undefined) {\n const points = [];\n for (let i = 0; i < order; i++) {\n const theta = thetaStepper.fractionToRadians(i);\n const phi = phiStepper.fractionToRadians(i);\n const weight = weightInterval.fractionToPoint(i / (order - 1));\n points.push(\n Point4d.create(\n weight * (x0 + r * Math.cos(theta)),\n weight * (y0 + r * Math.sin(theta)),\n weight * Math.sin(phi), weight,\n ),\n );\n }\n return BezierCurve3dH.create(points)!;\n } else {\n const points = [];\n for (let i = 0; i < order; i++) {\n const theta = thetaStepper.fractionToRadians(i);\n const phi = phiStepper.fractionToRadians(i);\n points.push(Point3d.create(x0 + r * Math.cos(theta), y0 + r * Math.sin(theta), Math.sin(phi)));\n }\n return BezierCurve3d.create(points);\n }\n }\n /**\n * Create various curve chains with distance indexing.\n * * LineSegment\n * * CircularArc\n * * LineString\n * * order 3 bspline\n * * order 4 bspline\n * * alternating lines and arcs\n * * arc spline with corners\n * * arc spline with smooth joins\n * * interpolation curve 2 pts\n * * interpolation curve 3 pts\n * * interpolation curve >3 pts\n * * integrated spiral (bloss)\n * * direct spiral (half-cosine)\n */\n public static createCurveChainWithDistanceIndex(): CurveChainWithDistanceIndex[] {\n const pointsA = [\n Point3d.create(0, 0, 0),\n Point3d.create(1, 3, 0),\n Point3d.create(2, 4, 0),\n Point3d.create(3, 3, 0),\n Point3d.create(4, 0, 0),\n ];\n const result = [];\n // one singleton per basic curve type ...\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create(LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(5, 0, 0))),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create(\n Arc3d.createCircularStartMiddleEnd(\n Point3d.create(0, 0, 0), Point3d.create(3, 3, 0), Point3d.create(6, 0, 0),\n ),\n ),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create(LineString3d.create(pointsA)),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create(BSplineCurve3d.createUniformKnots(pointsA, 3)!),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create(BSplineCurve3d.createUniformKnots(pointsA, 4)!),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create(\n LineSegment3d.create(pointsA[0], pointsA[1]),\n Arc3d.createCircularStartMiddleEnd(pointsA[1], pointsA[2], pointsA[3]),\n LineSegment3d.create(pointsA[3], pointsA[4]),\n ),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create( // arc spline with corners\n Arc3d.createXY(Point3d.create(5, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\n Arc3d.createXY(Point3d.create(15, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\n Arc3d.createXY(Point3d.create(25, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\n ),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create( // arc spline with smooth joins\n Arc3d.createXY(Point3d.create(5, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\n Arc3d.createXY(Point3d.create(15, 0), 5, AngleSweep.createStartEndDegrees(180, 360)),\n Arc3d.createXY(Point3d.create(25, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\n ),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create( // 2-pt Interpolation Curve\n InterpolationCurve3d.createCapture(\n InterpolationCurve3dOptions.create(\n { fitPoints: [pointsA[0], pointsA[1]] },\n ),\n )!,\n ),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create( // 3-pt Interpolation Curve\n InterpolationCurve3d.createCapture(\n InterpolationCurve3dOptions.create(\n { fitPoints: [pointsA[0], pointsA[1], pointsA[2]] },\n ),\n )!,\n ),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create(\n InterpolationCurve3d.createCapture(\n InterpolationCurve3dOptions.create(\n { fitPoints: pointsA, startTangent: Point3d.create(1, -1), endTangent: Point3d.create(-1, -1) },\n ),\n )!,\n ),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create(\n IntegratedSpiral3d.createRadiusRadiusBearingBearing(\n Segment1d.create(0, 100),\n AngleSweep.createStartEndDegrees(10, 75),\n Segment1d.create(0, 1),\n Transform.createOriginAndMatrix(\n Point3d.createZero(), Matrix3d.createRotationAroundAxisIndex(2, Angle.createDegrees(30)),\n ),\n \"bloss\",\n )!,\n ),\n ),\n );\n result.push(\n CurveChainWithDistanceIndex.createCapture(\n Path.create(\n DirectSpiral3d.createDirectHalfCosine(\n Transform.createOriginAndMatrix(\n Point3d.createZero(), Matrix3d.createRotationAroundAxisIndex(2, Angle.createDegrees(110)),\n ),\n 50,\n 350,\n Segment1d.create(0, 1),\n )!,\n ),\n ),\n );\n return result;\n }\n /**\n * Create a square wave path.\n * @param numTooth number of teeth.\n * @param dxA x size of \"A\" part\n * @param dxB x size of \"B\" part\n * @param yA y for A part\n * @param yB y for B part\n * @param structure 1 for line segments, 2 for one linestring per tooth, 0 for single linestring\n */\n public static createSquareWavePath(\n numTooth: number, dxA: number, dxB: number, yA: number, yB: number, structure: number,\n ): Path {\n const dxAB = dxA + dxB;\n const path = Path.create();\n // build the whole linestring ...\n const allPoints = new GrowableXYZArray(4 * numTooth);\n let x2 = 0.0;\n for (let i = 0; i < numTooth; i++) {\n const x0 = i * dxAB;\n const x1 = x0 + dxA;\n x2 = (i + 1) * dxAB;\n allPoints.pushXYZ(x0, yA, 0);\n allPoints.pushXYZ(x1, yA, 0.0);\n allPoints.pushXYZ(x1, yB, 0.0);\n allPoints.pushXYZ(x2, yB, 0.0);\n }\n allPoints.pushXYZ(x2, yA, 0.0);\n const numPoints = allPoints.length;\n if (structure === 1) {\n const pointA = Point3d.create();\n const pointB = Point3d.create();\n allPoints.getPoint3dAtUncheckedPointIndex(0, pointA);\n for (let i1 = 0; i1 + 1 < numPoints; i1++) {\n allPoints.getPoint3dAtUncheckedPointIndex(i1, pointB);\n path.tryAddChild(LineSegment3d.create(pointA, pointB));\n pointA.setFromPoint3d(pointB);\n }\n } else if (structure === 2) {\n for (let i0 = 0; i0 + 4 < numPoints; i0 += 4) {\n const ls = LineString3d.create();\n ls.addSteppedPoints(allPoints, i0, 1, 5);\n path.tryAddChild(ls);\n }\n } else {\n const ls = LineString3d.create();\n ls.addSteppedPoints(allPoints, 0, 1, numPoints);\n path.tryAddChild(ls);\n }\n return path;\n }\n /**\n * Create various elliptic arcs\n * * circle with vector0, vector90 aligned with x,y\n * * circle with axes rotated\n * *\n * @param radiusRatio = vector90.magnitude / vector0.magnitude\n */\n public static createArcs(radiusRatio: number = 1.0, sweep: AngleSweep = AngleSweep.create360()): Arc3d[] {\n const arcs = [];\n const center0 = Point3d.create(0, 0, 0);\n const a = 1.0;\n const b = radiusRatio;\n const direction0 = Vector3d.createPolar(a, Angle.createDegrees(35.0));\n const direction90 = direction0.rotate90CCWXY();\n direction90.scaleInPlace(radiusRatio);\n arcs.push(Arc3d.create(center0, Vector3d.create(a, 0, 0), Vector3d.create(0, b, 0), sweep));\n arcs.push(Arc3d.create(center0, direction0, direction90, sweep));\n return arcs;\n }\n /**\n * Create many arcs, optionally including skews\n * * @param skewFactor array of skew factors. for each skew factor, all base arcs are replicated with vector90 shifted by the factor times vector0\n */\n public static createManyArcs(skewFactors: number[] = []): Arc3d[] {\n const result: Arc3d[] = [];\n const sweep1 = AngleSweep.createStartEndDegrees(-10, 75);\n const sweep2 = AngleSweep.createStartEndDegrees(160.0, 380.0);\n for (const arcs of [\n Sample.createArcs(1.0), Sample.createArcs(0.5),\n Sample.createArcs(1.0, sweep1), Sample.createArcs(0.3, sweep2),\n ]) {\n for (const arc of arcs)\n result.push(arc);\n }\n const numBase = result.length;\n for (const skewFactor of skewFactors) {\n for (let i = 0; i < numBase; i++) {\n const originalArc = result[i];\n result.push(Arc3d.create(originalArc.center, originalArc.vector0, originalArc.vector90.plusScaled(originalArc.vector0, skewFactor), originalArc.sweep));\n }\n }\n return result;\n }\n /**\n * Create edges of a range box.\n * * Line strings on low and high z\n * * single lines on each low z to high z edge.\n * * @param range (possibly null) range\n */\n public static createRangeEdges(range: Range3d): BagOfCurves | undefined {\n if (range.isNull)\n return undefined;\n const corners = range.corners();\n return BagOfCurves.create(\n LineString3d.create(corners[0], corners[1], corners[3], corners[2], corners[0]),\n LineString3d.create(corners[4], corners[5], corners[7], corners[6], corners[4]),\n LineSegment3d.create(corners[0], corners[4]),\n LineSegment3d.create(corners[1], corners[5]),\n LineSegment3d.create(corners[2], corners[6]),\n LineSegment3d.create(corners[3], corners[7]),\n );\n }\n /** Create swept \"solids\" that can be capped.\n * * At least one of each solid type.\n * * each is within 10 of the origin all directions.\n * @param capped true to include caps\n * @param rotationAngle angle of rotation for the angular sweep. The default is 90 degrees.\n * Beware that the rotation sweep created with the default or any positive angle produces a mesh with inward normals.\n */\n public static createClosedSolidSampler(capped: boolean, rotationAngle: Angle = Angle.createDegrees(90)): SolidPrimitive[] {\n const result = [];\n result.push(Box.createRange(Range3d.createXYZXYZ(0, 0, 0, 3, 2, 5), capped)!);\n result.push(Cone.createAxisPoints(Point3d.create(0, 0, 0), Point3d.create(0, 0, 5), 1.0, 1.0, capped)!);\n result.push(Sphere.createCenterRadius(Point3d.create(0, 0, 0), 1.0));\n result.push(TorusPipe.createInFrame(Transform.createIdentity(), 3.0, 1.0, Angle.create360(), capped)!);\n const arcA = Arc3d.createXY(Point3d.create(6, 1, 0), 1.0, AngleSweep.createStartEndDegrees(-90, 0));\n const point0 = arcA.fractionAndDistanceToPointOnTangent(0.0, -4);\n const pointQ1 = arcA.fractionAndDistanceToPointOnTangent(1.0, 2);\n const pointQ2 = arcA.fractionAndDistanceToPointOnTangent(1.0, 0.5);\n const pointR1 = Point3d.create(point0.x, pointQ1.y);\n const pointR2 = Point3d.create(point0.x, pointQ1.y);\n const pointR3 = Point3d.create(pointQ1.x - 1, pointQ1.y);\n const pointR4 = Point3d.create(pointQ1.x - 3, pointQ1.y);\n const linestringQ1 = LineString3d.create(arcA.fractionToPoint(1.0), pointQ1, pointR1, point0);\n const linestringQ2 = LineString3d.create(arcA.fractionToPoint(1.0), pointQ2, pointR2, point0);\n const linestringQ3 = LineString3d.create(arcA.fractionToPoint(1.0), pointQ2, pointR3, pointR4, point0);\n const contourZ = Path.create(linestringQ1.clone());\n const contourA = Loop.create(\n LineSegment3d.create(point0, arcA.fractionToPoint(0)),\n arcA.clone(),\n linestringQ1.clone(),\n );\n const contourB = Loop.create(\n LineSegment3d.create(point0, arcA.fractionToPoint(0)),\n arcA.clone(),\n linestringQ2.clone(),\n );\n const contourC1 = Loop.create(\n LineSegment3d.create(point0, arcA.fractionToPoint(0)),\n arcA.clone(),\n linestringQ3.clone(),\n );\n contourB.tryTransformInPlace(Transform.createTranslationXYZ(1, 1, 3));\n // const contourC = contourB.cloneTransformed(Transform.createTranslationXYZ(2, 1, 4))!;\n result.push(LinearSweep.create(contourA, Vector3d.create(0, 0, 5), capped)!);\n result.push(LinearSweep.create(contourC1, Vector3d.create(0, 0, 5), capped)!);\n const axis = Ray3d.createXYZUVW(0, 8, 0, 1, 0, 0);\n result.push(RotationalSweep.create(contourA.clone(), axis.clone(), rotationAngle, capped)!);\n if (!capped)\n result.push(RotationalSweep.create(contourZ.clone(), axis.clone(), rotationAngle, false)!);\n result.push(RuledSweep.create([contourA.clone(), contourB.clone()], capped)!);\n const transformC = Transform.createScaleAboutPoint(Point3d.create(0, 0, 8), 0.5);\n const contourC = contourB.cloneTransformed(transformC)!;\n result.push(RuledSweep.create([contourA.clone(), contourB.clone(), contourC.clone()], capped)!);\n return result;\n }\n /**\n * Create points:\n * * `numRadialEdges` radially from origin to polar point (r,sweep.start)\n * * `numArcEdges` along arc from (r,sweep.start) to (r,sweep.end)\n * * `numRadialEdges` returning to origin.\n * * optionally include closure point at origin.\n * @param x0 center x\n * @param y0 center y\n * @param radius radius of circle.\n * @param sweep start and end angles of sweep.\n * @param numRadialEdges number of edges from center to arc\n * @param numArcEdges number of edges along arc\n * @param addClosure true to repeat center as closure point\n */\n public static createCutPie(\n x0: number, y0: number, radius: number, sweep: AngleSweep, numRadialEdges: number, numArcEdges: number, addClosure = false,\n ): Point3d[] {\n const points = [];\n const center = Point3d.create(x0, y0);\n points.push(center);\n const pointA = Point3d.create(x0 + radius * Math.cos(sweep.startRadians), y0 + radius * Math.sin(sweep.startRadians));\n const pointB = Point3d.create(x0 + radius * Math.cos(sweep.endRadians), y0 + radius * Math.sin(sweep.endRadians));\n for (let i = 1; i < numRadialEdges; i++)\n points.push(center.interpolate(i / numRadialEdges, pointA));\n points.push(pointA);\n for (let i = 1; i < numArcEdges; i++) {\n const radians = sweep.fractionToRadians(i / numArcEdges);\n points.push(Point3d.create(x0 + radius * Math.cos(radians), y0 + radius * Math.sin(radians)));\n }\n points.push(pointB);\n for (let i = 1; i < numRadialEdges; i++)\n points.push(pointB.interpolate(i / numRadialEdges, center));\n if (addClosure)\n points.push(center.clone());\n return points;\n }\n /**\n * * Let ay = 4\n * * Base polygon has vertices (0,0), (ax,0), (2*ax,0), (2* ax,ay), (ax,ay), (0,ay), (0,0).\n * * Shift the x coordinates of vertices 1,4 by indicated amounts (0-based numbering)\n * * Shift the y coordinates for points 1,2,3,4 by indicated amounts (in 0-based numbering)\n * * This is useful for testing non-y-monotonic face situations.\n * * Return as points.\n * @param dy1\n * @param dy2\n * @param dy3\n * @param dy4\n */\n public static createVerticalStaggerPolygon(\n dy1: number, dy2: number, dy3: number, dy4: number, ax: number, ay: number, dx1: number, dx4: number,\n ): Point3d[] {\n const points = [];\n points.push(Point3d.create(0, 0));\n points.push(Point3d.create(ax + dx1, dy1));\n points.push(Point3d.create(2 * ax, dy2));\n points.push(Point3d.create(2 * ax, ay + dy3));\n points.push(Point3d.create(ax + dx4, ay + dy4));\n points.push(Point3d.create(0.0, ay));\n points.push(Point3d.create(0, 0));\n return points;\n }\n\n // cspell:word creat\n /** @deprecated in 4.0.0 - will not be removed until after 2026-06-13. Use createVerticalStaggerPolygon instead. */\n public static creatVerticalStaggerPolygon(\n dy1: number, dy2: number, dy3: number, dy4: number, ax: number, ay: number, dx1: number, dx4: number,\n ): Point3d[] {\n return this.createVerticalStaggerPolygon(dy1, dy2, dy3, dy4, ax, ay, dx1, dx4);\n }\n\n /**\n * Make line segments for each pair of adjacent points.\n * @param points array of points\n * @param forceClosure if true, inspect coordinates to determine if a closure edge is needed.\n */\n public static convertPointsToSegments(points: Point3d[], forceClosure: boolean = false): LineSegment3d[] {\n const segments = [];\n const n = points.length;\n for (let i = 0; i + 1 < n; i++) {\n segments.push(LineSegment3d.create(points[i], points[i + 1]));\n }\n if (forceClosure && n > 1 && !points[0].isAlmostEqual(points[n - 1]))\n segments.push(LineSegment3d.create(points[n - 1], points[0]));\n return segments;\n }\n /**\n * Create a regular polygon\n * @param angle0 angle from x axis to first point.\n * @param numPoint number of points\n * @param close true to add closure edge.\n */\n public static createRegularPolygon(\n cx: number, cy: number, cz: number, angle0: Angle, r: number, numPoint: number, close: boolean,\n ): Point3d[] {\n const points = [];\n const angleStepRadians = 2.0 * Math.PI / numPoint;\n let radians;\n for (let i = 0; i < numPoint; i++) {\n radians = angle0.radians + i * angleStepRadians;\n points.push(Point3d.create(cx + r * Math.cos(radians), cy + r * Math.sin(radians), cz));\n }\n if (close)\n points.push(points[0].clone());\n return points;\n }\n /**\n * Create a star by alternating radii (with equal angular steps)\n * @param r0 first point radius\n * @param r1 second point radius (if undefined, this is skipped and the result is points on a circle.)\n * @param numPoint number of points\n * @param close true to add closure edge.\n */\n public static createStar(\n cx: number, cy: number, cz: number, r0: number, r1: number | undefined, numPoint: number, close: boolean, theta0?: Angle,\n ): Point3d[] {\n const points = [];\n const angleStepRadians = Math.PI / numPoint;\n const radians0 = theta0 === undefined ? 0.0 : theta0.radians;\n let radians;\n for (let i = 0; i < numPoint; i++) {\n radians = radians0 + 2 * i * angleStepRadians;\n points.push(Point3d.create(cx + r0 * Math.cos(radians), cy + r0 * Math.sin(radians), cz));\n if (r1 !== undefined) {\n radians = radians0 + (2 * i + 1) * angleStepRadians;\n points.push(Point3d.create(cx + r1 * Math.cos(radians), cy + r1 * Math.sin(radians), cz));\n }\n }\n if (close)\n points.push(points[0].clone());\n return points;\n }\n /**\n * Create an outer star A\n * Place multiple inner stars B with centers on circle C\n * @param rA0 radius to star tips on starA\n * @param rA1 radius to star tips on starA\n * @param numAPoint number of points on starA\n * @param rB0 radius to star B tips\n * @param rB1 radius to star B tips\n * @param numBPoint\n * @param rC radius for inner star centers\n * @param numC number of inner stars\n */\n public static createStarsInStars(rA0: number, rA1: number, numAPoint: number, rB0: number, rB1: number, numBPoint: number, rC: number, numC: number, close: boolean): Point3d[][] {\n const loops: Point3d[][] = [];\n loops.push(this.createStar(0, 0, 0, rA0, rA1, numAPoint, close));\n if (numC > 0) {\n const radiansStep = Math.PI * 2.0 / numC;\n for (let i = 0; i < numC; i++) {\n const radians = i * radiansStep;\n loops.push(\n this.createStar(rC * Math.cos(radians), rC * Math.sin(radians), 0.0, rB0, rB1, numBPoint, close),\n );\n }\n }\n return loops;\n }\n private static appendGeometry(source: GeometryQuery[], dest: GeometryQuery[]) {\n for (const g of source) dest.push(g);\n }\n /** Create a simple example of each GeometryQuery type .... */\n public static createAllGeometryQueryTypes(): GeometryQuery[] {\n const result: GeometryQuery[] = [];\n const pointA = Point3d.create(0, 0, 0);\n const pointB = Point3d.create(1, 0, 0);\n const pointC = Point3d.create(1, 1, 0);\n const pointD = Point3d.create(0, 1, 0);\n const pointABC = [pointA, pointB, pointC];\n const pointABCD = [pointA, pointB, pointC, pointD];\n const pointABCD1 = [pointA, pointB, pointC, pointD, pointA];\n result.push(LineSegment3d.create(pointA, pointB));\n result.push(CoordinateXYZ.create(pointA));\n result.push(Arc3d.createCircularStartMiddleEnd(pointA, pointB, pointC));\n result.push(PointString3d.create(pointA, pointB));\n result.push(\n IntegratedSpiral3d.createRadiusRadiusBearingBearing(\n Segment1d.create(0, 100),\n AngleSweep.createStartEndDegrees(0, 5),\n Segment1d.create(0, 0.5),\n Transform.createIdentity(),\n )!,\n );\n result.push(LineString3d.create(pointABCD));\n result.push(BezierCurve3d.create(pointABC)!);\n result.push(BezierCurve3dH.create(pointABC)!);\n result.push(BSplineCurve3d.createUniformKnots(pointABC, 3)!);\n result.push(BSplineCurve3dH.createUniformKnots(pointABC, 3)!);\n result.push(Loop.create(LineString3d.create(pointABCD1)));\n result.push(Path.create(LineString3d.create(pointABCD)));\n result.push(this.createConeBsplineSurface(pointA, pointC, 1, 2, 4)!);\n result.push(this.createXYGridBsplineSurface(8, 4, 4, 3)!);\n this.appendGeometry(this.createClosedSolidSampler(true), result);\n result.push(this.createTriangularUnitGridPolyface(pointA, Vector3d.unitX(), Vector3d.unitY(), 4, 5));\n result.push(\n this.createTriangularUnitGridPolyface(\n pointA, Vector3d.unitX(), Vector3d.unitY(), 4, 5, true, true, true, false,\n ),\n );\n this.appendGeometry(this.createSimpleParityRegions(), result);\n this.appendGeometry(this.createSimpleUnions(), result);\n this.appendGeometry(this.createBagOfCurves(), result);\n return result;\n }\n /**\n * Create points on a sine wave.\n * * Point i is origin + (i * xStep, a *sin(theta0 + i * dTheta), b * sin(beta0 + i * dBeta)).\n * * Default b is zero, so it is a simple sine wave.\n * * If the dTheta and dBeta are equal, it is a sine wave in a tilted plane.\n * * If dTheta and dBeta are different it is a non-planar curve.\n */\n public static createPointSineWave(\n origin: XYAndZ | undefined,\n numInterval: number = 24,\n xStep: number = Math.PI / 12,\n a: number = 1,\n thetaSweep: AngleSweep = AngleSweep.createStartEndDegrees(0, 360),\n b: number = 0,\n betaSweep: AngleSweep = AngleSweep.createStartEndDegrees(0, 180),\n ): Point3d[] {\n return this.createPointsByIndexFunctions(\n numInterval, SteppedIndexFunctionFactory.createLinear(xStep, origin ? origin.x : 0),\n SteppedIndexFunctionFactory.createCosine(a, thetaSweep, origin ? origin.y : 0),\n SteppedIndexFunctionFactory.createCosine(b, betaSweep, origin ? origin.z : 0),\n );\n }\n /**\n * Create points with x,y,z independent functions of i and numInterval,\n * Point3d.create (fx(i,numInterval), fy(i,numInterval), fz(i, numInterval));\n */\n public static createPointsByIndexFunctions(\n numInterval: number, fx: SteppedIndexFunction, fy: SteppedIndexFunction, fz?: SteppedIndexFunction,\n ): Point3d[] {\n const points = [];\n if (numInterval > 0) {\n for (let i = 0; i <= numInterval; i++) {\n points.push(Point3d.create(fx(i, numInterval), fy(i, numInterval), fz ? fz(i, numInterval) : 0));\n }\n }\n return points;\n }\n /**\n * Add an AuxData (with multiple AuxChannelData) using data evaluated by a function of input and xyz.\n * @param data existing polyface data object to receive the additional AuxChannel\n * @param channelIndex\n * @param name name of channel\n * @param inputName name of input\n * @param input0 input value for channel 0\n * @param inputStep step between inputs (channels)\n * @param numInput number of channels (inputs)\n * @param dataType\n * @param scalarFunction function to return the scalar value at (input, point)\n */\n public static addAuxDataScalarChannel(\n data: PolyfaceData,\n channelIndex: number,\n name: string | undefined,\n inputName: string | undefined,\n input0: number, inputStep: number, numInput: number,\n dataType: AuxChannelDataType,\n scalarFunction: (input: number, xyz: Point3d) => number,\n ): void {\n if (!data.auxData)\n data.auxData = new PolyfaceAuxData([], []);\n const channelDataArray = [];\n const xyz = Point3d.create();\n for (let i = 0; i < numInput; i++) {\n const input = input0 + i * inputStep;\n const values = [];\n for (let k = 0; k < data.point.length; k++) {\n data.point.getPoint3dAtUncheckedPointIndex(k, xyz);\n values.push(scalarFunction(input, xyz));\n }\n channelDataArray.push(new AuxChannelData(input, values));\n }\n const channel = new AuxChannel(channelDataArray, dataType, name, inputName);\n for (const _q of data.pointIndex) {\n data.auxData.indices.push(channelIndex);\n }\n data.auxData.channels.push(channel);\n }\n /**\n * Create a mesh between concentric arcs\n * @param edgesPerQuadrant edges per 90 degrees\n * @param center arc center\n * @param r0 first radius\n * @param r1 second radius\n * @param theta0 start angle\n * @param theta1 end angle.\n * @returns\n */\n public static createMeshInAnnulus(\n edgesPerQuadrant: number, center: Point3d, r0: number, r1: number, theta0: Angle, theta1: Angle,\n ): IndexedPolyface | undefined {\n const point0 = [];\n const point1 = [];\n if (edgesPerQuadrant < 1)\n edgesPerQuadrant = 1;\n let edgeCount = Math.ceil(edgesPerQuadrant * (theta1.degrees - theta0.degrees) / 90);\n if (edgeCount < 1)\n edgeCount = 1;\n for (let i = 0; i <= edgeCount; i++) {\n const theta = Angle.createInterpolate(theta0, i / edgeCount, theta1);\n point0.push(center.plusXYZ(r0 * theta.cos(), r0 * theta.sin(), 0));\n point1.push(center.plusXYZ(r1 * theta.cos(), r1 * theta.sin(), 0));\n }\n point1.reverse();\n const builder = PolyfaceBuilder.create();\n builder.addGreedyTriangulationBetweenLineStrings(point0, point1);\n return builder.claimPolyface();\n }\n /** Create strokes on an arc at radius r0, then returning at radius r1. */\n public static createAnnulusPolyline(\n edgesPerQuadrant: number, center: Point3d, r0: number, r1: number, theta0: Angle, theta1: Angle, addClosure: boolean,\n ): Point3d[] {\n const point0: Point3d[] = [];\n const point1: Point3d[] = [];\n if (edgesPerQuadrant < 1)\n edgesPerQuadrant = 1;\n let edgeCount = Math.ceil(edgesPerQuadrant * (theta1.degrees - theta0.degrees) / 90);\n if (edgeCount < 1)\n edgeCount = 1;\n for (let i = 0; i <= edgeCount; i++) {\n const theta = Angle.createInterpolate(theta0, i / edgeCount, theta1);\n point0.push(center.plusXYZ(r0 * theta.cos(), r0 * theta.sin(), 0));\n point1.push(center.plusXYZ(r1 * theta.cos(), r1 * theta.sin(), 0));\n }\n while (point1.length > 0)\n point0.push(point1.pop()!);\n if (addClosure)\n point0.push(point0[0].clone());\n return point0;\n }\n /**\n * Create a grid of lat-long points on a sphere.\n * * If pole latitudes appear in the evaluation, a single point (not a circle) is evaluated.\n * * Circles at various latitudes proceed south to north.\n * * If first and last angles of longitudeSweep match, that meridian is not duplicated.\n * * Longitudes can wrap freely.\n * @param transform local to world\n * @param numLatitudeStep number of latitude steps (poles count if they are in the sweeps)\n * @param numLongitudeStep number of longitude steps\n * @param latitudeSweep angle range for latitudes\n * @param longitudeSweep angle range for longitudes\n */\n public static createGridPointsOnEllipsoid(\n transform: Transform,\n numLatitudeStep: number,\n numLongitudeStep: number,\n latitudeSweep: AngleSweep = AngleSweep.createStartEndDegrees(-90, 90),\n longitudeSweep: AngleSweep = AngleSweep.createStartEndDegrees(0, 360),\n ): Point3d[] {\n const points: Point3d[] = [];\n const numJ = numLatitudeStep + 1;\n const jFractionStep = 1.0 / numJ;\n let numI = numLongitudeStep;\n const iFractionStep = 1.0 / numI;\n if (longitudeSweep.isFullCircle)\n numI--;\n for (let j = 0; j < numJ; j++) {\n const phi = latitudeSweep.fractionToRadians(jFractionStep * j);\n const sinPhi = Math.sin(phi);\n const cosPhi = Math.cos(phi);\n const numIThisCircle = Angle.isAlmostEqualRadiansAllowPeriodShift(phi, -90) ? 1 : numI;\n for (let i = 0; i < numIThisCircle; i++) {\n const theta = longitudeSweep.fractionToRadians(iFractionStep * i);\n const cosTheta = Math.cos(theta);\n const sinTheta = Math.sin(theta);\n points.push(transform.multiplyXYZ(cosTheta * cosPhi, sinTheta * cosPhi, sinPhi));\n }\n }\n return points;\n }\n /**\n * Return an array of points on a circular arc.\n * @param edgesPerQuadrant number of edges per 90 degrees\n * @param center arc center\n * @param r0 arc radius\n * @param theta0 start angle\n * @param theta1 end angle\n * @param addClosure true to add a closure stroke\n * @returns\n */\n public static createArcStrokes(\n edgesPerQuadrant: number, center: Point3d, r0: number, theta0: Angle, theta1: Angle, addClosure: boolean = true, z: number = 0,\n ): Point3d[] {\n const point0: Point3d[] = [];\n if (edgesPerQuadrant < 1)\n edgesPerQuadrant = 1;\n let edgeCount = Math.ceil(edgesPerQuadrant * (theta1.degrees - theta0.degrees) / 90);\n if (edgeCount < 1)\n edgeCount = 1;\n for (let i = 0; i <= edgeCount; i++) {\n const theta = Angle.createInterpolate(theta0, i / edgeCount, theta1);\n point0.push(center.plusXYZ(r0 * theta.cos(), r0 * theta.sin(), z));\n }\n if (addClosure)\n point0.push(point0[0].clone());\n return point0;\n }\n /**\n * Create a mesh with\n * * xy facets are 1x1 quads starting at origin\n * * acceptFunction is called to accept or reject each quad's lower left xy coordinates\n * @param xzPoints array of points in the xz plane. Expected to have increasing x and all integer coordinates.\n * @param ySweep distance to sweep in y direction\n * @param acceptFunction (x0: number, y0: number)=> boolean\n */\n public static sweepXZLineStringToMeshWithHoles(\n xzPoints: number[][], ySweep: number, acceptFunction: (x0: number, y0: number) => boolean,\n ): IndexedPolyface {\n const builder = PolyfaceBuilder.create();\n for (let i0 = 0; i0 + 1 < xzPoints.length; i0++) {\n const x0 = xzPoints[i0][0];\n const z0 = xzPoints[i0][1];\n const i1 = i0 + 1;\n const x1 = xzPoints[i1][0];\n const z1 = xzPoints[i1][1];\n for (let xA = x0; xA + 1 <= x1; xA++) {\n const xB = xA + 1;\n const sA = (xA - x0) / (x1 - x0);\n const sB = (xB - x0) / (x1 - x0);\n const zA = Geometry.interpolate(z0, sA, z1);\n const zB = Geometry.interpolate(z0, sB, z1);\n for (let yC = 0; yC + 1 <= ySweep; yC++) {\n const yD = yC + 1;\n if (acceptFunction(xA, yC))\n builder.addPolygon([\n Point3d.create(xA, yC, zA),\n Point3d.create(xB, yC, zB),\n Point3d.create(xB, yD, zB),\n Point3d.create(xA, yD, zA),\n ]);\n }\n }\n }\n return builder.claimPolyface(true);\n }\n /**\n * Successively move in directions in the steps array, creating numStroke total strokes.\n * * In typical use there are two entries in the steps vector, giving the effect of stair steps if they are perpendicular.\n * * if start is a single point, create a new point array with start as its first entry.\n * * if start is an array, add to it.\n * * if start is an empty array, push 000 as starting point.\n * @param start start point or prior array of points whose last is start point.\n * @param steps array of vectors giving step vectors.\n * @param numStroke number of steps to take.\n */\n public static createZigZag(start: Point3d | Point3d[], steps: Vector3d[], numStroke: number): Point3d[] {\n let result: Point3d[];\n if (Array.isArray(start)) {\n result = start;\n if (result.length === 0)\n result.push(Point3d.create(0, 0, 0));\n } else {\n result = [start.clone()];\n }\n let numAdded = 0;\n for (; ;) {\n for (const step of steps) {\n if (++numAdded > numStroke)\n return result;\n result.push(result[result.length - 1].plus(step));\n }\n }\n }\n /** Create a point on the polar parametric curve r = cos(a * theta), aka \"rose\".\n * @param theta angle\n * @param a period multiplier. If odd, this is the petal count; if even, twice the number of petals.\n * @param z z-coordinate for output\n */\n public static createRosePoint3d(theta: number, a: number, z: number = 0): Point3d {\n const r = Math.cos(a * theta);\n return Point3d.create(r * Math.cos(theta), r * Math.sin(theta), z);\n }\n /** Create a point on the polar parametric curve r = cos(a * theta), aka \"rose\".\n * @param theta angle\n * @param a period multiplier. If odd, this is the petal count; if even, twice the number of petals.\n */\n public static createRosePoint2d(theta: number, a: number): Point2d {\n return Point2d.createFrom(Sample.createRosePoint3d(theta, a));\n }\n /**\n * Create a mesh surface from samples of a smooth real-valued function over [0,1]x[0,1] with multiple humps and dips.\n * * The facets are bilinear quads, so if planar facets are required, set `options.shouldTriangulate = true`.\n * @param size grid size; the number of intervals on each side of the unit square domain.\n * @param scales = array of 4 (four) numbers to scale the corresponding Franke exponential. If undefined, all scales are 1.\n */\n public static createMeshFromFrankeSurface(\n size: number,\n options?: StrokeOptions,\n scales?: number[]): IndexedPolyface | undefined {\n const builder = PolyfaceBuilder.create(options);\n builder.addUVGridBody(new FrankeSurface(scales), size, size);\n return builder.claimPolyface(true);\n }\n /** Stroke a helix over the unit circle. Place in space via a transform.\n * The various columns of the transform become the critical measures for the (elliptic) helix:\n * The unit cylinder maps to an elliptic cylinder with x and y columns as 0 and 90 degree vectors.\n * the Helix pitch is equal to the length of the z axis in the transform.\n * The completeTurns parameter (which does NOT need to be an integer) is the local z of the last point\n */\n public static createHelixPoints(\n completeTurns: number,\n numPoints: number,\n placement?: Transform,\n ): Point3d[] {\n const points: Point3d[] = [];\n if (numPoints < 2)\n numPoints = 2;\n const dThetaRadians = completeTurns * Math.PI * 2 / (numPoints - 1);\n const dz = completeTurns / (numPoints - 1);\n for (let i = 0; i < numPoints; i++) {\n const thetaRadians = dThetaRadians * i;\n points.push(Point3d.create(Math.cos(thetaRadians), Math.sin(thetaRadians), i * dz));\n }\n if (placement)\n placement.multiplyPoint3dArrayInPlace(points);\n return points;\n }\n\n}\n"]}
1
+ {"version":3,"file":"GeometrySamples.js","sourceRoot":"","sources":["../../../src/serialization/GeometrySamples.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 Serialization\r\n */\r\nimport { BezierCurve3d } from \"../bspline/BezierCurve3d\";\r\nimport { BezierCurve3dH } from \"../bspline/BezierCurve3dH\";\r\nimport { BSplineCurve3d, BSplineCurve3dBase } from \"../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\r\nimport { BSplineSurface3d, BSplineSurface3dH, UVSelect, WeightStyle } from \"../bspline/BSplineSurface\";\r\nimport { InterpolationCurve3d, InterpolationCurve3dOptions } from \"../bspline/InterpolationCurve3d\";\r\nimport { BSplineWrapMode, KnotVector } from \"../bspline/KnotVector\";\r\nimport { ClipPlane } from \"../clipping/ClipPlane\";\r\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\r\nimport { UnionOfConvexClipPlaneSets } from \"../clipping/UnionOfConvexClipPlaneSets\";\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\r\nimport { CurveChainWithDistanceIndex } from \"../curve/CurveChainWithDistanceIndex\";\r\nimport { BagOfCurves } from \"../curve/CurveCollection\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\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 { PointString3d } from \"../curve/PointString3d\";\r\nimport { DirectSpiral3d } from \"../curve/spiral/DirectSpiral3d\";\r\nimport { IntegratedSpiral3d } from \"../curve/spiral/IntegratedSpiral3d\";\r\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { UnionRegion } from \"../curve/UnionRegion\";\r\nimport { AxisOrder, Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\r\nimport { UVSurface } from \"../geometry3d/GeometryHandler\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range1d, Range2d, Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { XYAndZ } from \"../geometry3d/XYZProps\";\r\nimport { Map4d } from \"../geometry4d/Map4d\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { AuxChannel, AuxChannelData, AuxChannelDataType, PolyfaceAuxData } from \"../polyface/AuxData\";\r\nimport { IndexedPolyface } from \"../polyface/Polyface\";\r\nimport { PolyfaceBuilder } from \"../polyface/PolyfaceBuilder\";\r\nimport { PolyfaceData } from \"../polyface/PolyfaceData\";\r\nimport { Box } from \"../solid/Box\";\r\nimport { Cone } from \"../solid/Cone\";\r\nimport { LinearSweep } from \"../solid/LinearSweep\";\r\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\r\nimport { RuledSweep } from \"../solid/RuledSweep\";\r\nimport { SolidPrimitive } from \"../solid/SolidPrimitive\";\r\nimport { Sphere } from \"../solid/Sphere\";\r\nimport { TorusPipe } from \"../solid/TorusPipe\";\r\n\r\n/**\r\n * Function to be called to obtain function value at (i,n), for\r\n * * n fixed over many calls\r\n * * n may be assumed 1 or greater (so fraction = i/n is safe)\r\n * * i varies from 0 to n\r\n * @alpha\r\n */\r\nexport type SteppedIndexFunction = (i: number, n: number) => number;\r\n/**\r\n * Static methods to create functions of type SteppedIndexFunction\r\n * * Convention: constant value is optional last argument, with default value 0\r\n * @alpha\r\n */\r\nexport class SteppedIndexFunctionFactory {\r\n /** Returns a callable function that returns a constant value. */\r\n public static createConstant(value: number = 0): SteppedIndexFunction {\r\n return (_i: number, _n: number) => value;\r\n }\r\n /**\r\n * Return a function that steps linearly\r\n * * f(i,n) = y0 + (i/n) * a\r\n */\r\n public static createLinear(a: number, f0: number = 0): SteppedIndexFunction {\r\n return (i: number, n: number) => (f0 + a * (i / n));\r\n }\r\n /**\r\n * Return a function that steps with cosine of angles in sweep\r\n * * f(i,n) = y0 + amplitude * cos(i/n)\r\n */\r\n public static createCosine(amplitude: number, sweep: AngleSweep = AngleSweep.create360(), f0: number = 0): SteppedIndexFunction {\r\n return (i: number, n: number) => (f0 + amplitude * Math.cos(sweep.fractionToRadians(i / n)));\r\n }\r\n /**\r\n * Return a function that steps with cosine of angles in sweep.\r\n * * f(i,n) = y0 + amplitude * sin(i/n)\r\n */\r\n public static createSine(amplitude: number, sweep: AngleSweep = AngleSweep.create360(), f0: number = 0): SteppedIndexFunction {\r\n return (i: number, n: number) => (f0 + amplitude * Math.sin(sweep.fractionToRadians(i / n)));\r\n }\r\n}\r\n// cspell:word Franke bivariate\r\n/**\r\n * Implement Franke's function, a smooth bivariate real-valued function with interesting features over [0,1]x[0,1].\r\n * * This surface is commonly used to test interpolation algorithms. See https://www.sfu.ca/~ssurjano/franke2d.html\r\n * @internal\r\n */\r\nclass FrankeSurface implements UVSurface {\r\n public scales: number[] | undefined;\r\n public constructor(scales: number[] | undefined) {\r\n this.scales = scales;\r\n }\r\n private exp0(u: number, v: number): number {\r\n return Math.exp(-0.25 * (u * u + v * v) + u + v - 2);\r\n }\r\n private exp1(u: number, v: number): number {\r\n return Math.exp(-(((u + 1) * (u + 1)) / 49 + 0.1 * (v + 1)));\r\n }\r\n private exp2(u: number, v: number): number {\r\n return Math.exp(-0.25 * ((u - 7) * (u - 7) + (v - 3) * (v - 3)));\r\n }\r\n private exp3(u: number, v: number): number {\r\n return Math.exp(-((u - 4) * (u - 4) + (v - 7) * (v - 7)));\r\n }\r\n private f(u: number, v: number): number {\r\n const f0 = 0.75 * this.exp0(u, v);\r\n const f1 = 0.75 * this.exp1(u, v);\r\n const f2 = 0.5 * this.exp2(u, v);\r\n const f3 = -0.2 * this.exp3(u, v);\r\n if (this.scales !== undefined) {\r\n const numScale = this.scales.length;\r\n let f = 0;\r\n if (numScale >= 1)\r\n f += this.scales[0] * f0;\r\n if (numScale >= 2)\r\n f += this.scales[1] * f1;\r\n if (numScale >= 3)\r\n f += this.scales[2] * f2;\r\n if (numScale >= 4)\r\n f += this.scales[3] * f3;\r\n return f;\r\n } else\r\n return f0 + f1 + f2 + f3;\r\n }\r\n private du(u: number, v: number): number {\r\n const du0 = -3.375 * (u - 2) * this.exp0(u, v);\r\n const du1 = -(27 / 98) * (u + 1) * this.exp1(u, v);\r\n const du2 = -2.25 * (u - 7) * this.exp2(u, v);\r\n const du3 = 3.6 * (u - 4) * this.exp3(u, v);\r\n return du0 + du1 + du2 + du3;\r\n }\r\n private dv(u: number, v: number): number {\r\n const dv0 = -3.375 * (v - 2) * this.exp0(u, v);\r\n const dv1 = -0.675 * this.exp1(u, v);\r\n const dv2 = -2.25 * (v - 3) * this.exp2(u, v);\r\n const dv3 = 3.6 * (v - 7) * this.exp3(u, v);\r\n return dv0 + dv1 + dv2 + dv3;\r\n }\r\n public uvFractionToPoint(uFraction: number, vFraction: number, result?: Point3d): Point3d {\r\n const u = 9 * uFraction;\r\n const v = 9 * vFraction;\r\n return Point3d.create(uFraction, vFraction, this.f(u, v), result);\r\n }\r\n public uvFractionToPointAndTangents(uFraction: number, vFraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const u = 9 * uFraction;\r\n const v = 9 * vFraction;\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(uFraction, vFraction, this.f(u, v), 1, 0, this.du(u, v), 0, 1, this.dv(u, v), result);\r\n }\r\n}\r\n/**\r\n * `Sample` has static methods to create a variety of geometry samples useful in testing.\r\n * @alpha\r\n */\r\nexport class Sample {\r\n /** Array with assorted Point2d samples */\r\n public static readonly point2d: Point2d[] = [\r\n Point2d.create(0, 0),\r\n Point2d.create(1, 0),\r\n Point2d.create(0, 1),\r\n Point2d.create(2, 3)];\r\n /** Array with assorted Point3d samples */\r\n public static readonly point3d: Point3d[] = [\r\n Point3d.create(0, 0, 0),\r\n Point3d.create(1, 0, 0),\r\n Point3d.create(0, 1, 0),\r\n Point3d.create(0, 1, 0),\r\n Point3d.create(0, 0, 1),\r\n Point3d.create(2, 3, 0),\r\n Point3d.create(0, 2, 5),\r\n Point3d.create(-3, 0, 5),\r\n Point3d.create(4, 3, -2)];\r\n /**\r\n * Return an array of Point3d, with x,y,z all stepping through a range of values.\r\n * x varies fastest, then y then z\r\n */\r\n public static createPoint3dLattice(low: number, step: number, high: number): Point3d[] {\r\n const points = [];\r\n for (let z = low; z <= high; z += step)\r\n for (let y = low; y <= high; y += step)\r\n for (let x = low; x <= high; x += step)\r\n points.push(Point3d.create(x, y, z));\r\n return points;\r\n }\r\n /**\r\n * Return an array of Point2d, with x,y all stepping through a range of values.\r\n * x varies fastest, then y\r\n */\r\n public static createPoint2dLattice(low: number, step: number, high: number): Point2d[] {\r\n const points = [];\r\n for (let y = low; y <= high; y += step)\r\n for (let x = low; x <= high; x += step)\r\n points.push(Point2d.create(x, y));\r\n return points;\r\n }\r\n /** Array with assorted Point4d samples */\r\n public static readonly point4d: Point4d[] = [\r\n Point4d.create(0, 0, 0, 1),\r\n Point4d.create(1, 0, 0, 1),\r\n Point4d.create(0, 1, 0, 1),\r\n Point4d.create(0, 1, 0, 1),\r\n Point4d.create(0, 0, 1, 1),\r\n Point4d.create(2, 3, 0, 1),\r\n Point4d.create(0, 2, 5, 1),\r\n Point4d.create(-3, 0, 5, 1),\r\n Point4d.create(-3, 0, 5, 0.3),\r\n Point4d.create(-3, 0, 5, -0.2),\r\n Point4d.create(4, 3, -2, 1)];\r\n /** Array with assorted nonzero vector samples. */\r\n public static createNonZeroVectors(): Vector3d[] {\r\n return [\r\n Vector3d.create(1, 0, 0),\r\n Vector3d.create(0, 1, 0),\r\n Vector3d.create(0, 0, 1),\r\n Vector3d.create(-1, 0, 0),\r\n Vector3d.create(0, -1, 0),\r\n Vector3d.create(0, 0, -1),\r\n Vector3d.createPolar(1.0, Angle.createDegrees(20)),\r\n Vector3d.createSpherical(1.0, Angle.createDegrees(20), Angle.createDegrees(10)),\r\n Vector3d.createPolar(2.0, Angle.createDegrees(20)),\r\n Vector3d.createSpherical(2.0, Angle.createDegrees(20), Angle.createDegrees(10)),\r\n Vector3d.create(2, 3, 0),\r\n ];\r\n }\r\n /** Array with assorted nonzero Vector2d samples */\r\n public static readonly vector2d: Vector2d[] = [\r\n Vector2d.create(1, 0),\r\n Vector2d.create(0, 1),\r\n Vector2d.create(0, 0),\r\n Vector2d.create(-1, 0),\r\n Vector2d.create(0, -1),\r\n Vector2d.create(0, 0),\r\n Vector2d.createPolar(1.0, Angle.createDegrees(20)),\r\n Vector2d.createPolar(2.0, Angle.createDegrees(20)),\r\n Vector2d.create(2, 3),\r\n ];\r\n /** Return an array with assorted Range3d samples */\r\n public static createRange3ds(): Range3d[] {\r\n return [\r\n Range3d.createXYZXYZ(0, 0, 0, 1, 1, 1),\r\n Range3d.createXYZ(1, 2, 3),\r\n Range3d.createXYZXYZ(-2, -3, 1, 200, 301, 8),\r\n ];\r\n }\r\n /** Create 5 points of a (axis aligned) rectangle with corners (x0,y0) and (x0+ax, y0 + ay) */\r\n public static createRectangleXY(x0: number, y0: number, ax: number, ay: number, z: number = 0): Point3d[] {\r\n return [\r\n Point3d.create(x0, y0, z),\r\n Point3d.create(x0 + ax, y0, z),\r\n Point3d.create(x0 + ax, y0 + ay, z),\r\n Point3d.create(x0, y0 + ay, z),\r\n Point3d.create(x0, y0, z),\r\n ];\r\n }\r\n /** Create 5 points of a (axis aligned) rectangle with corners (cx-ax,cy-ay) and (cx+ax,cy+ay) */\r\n public static createCenteredRectangleXY(cx: number, cy: number, ax: number, ay: number, z: number = 0): Point3d[] {\r\n return this.createRectangleXY(cx - ax, cy - ay, 2 * ax, 2 * ay, z);\r\n }\r\n /**\r\n * Access the last point in the array. push another shifted by dx,dy,dz.\r\n * * No push if all are 0.\r\n * * If array is empty, push a leading 000\r\n */\r\n public static pushMove(data: Point3d[], dx: number, dy: number, dz: number = 0.0) {\r\n if (data.length === 0)\r\n data.push(Point3d.create(0, 0, 0));\r\n const back = data[data.length - 1];\r\n if (dx !== 0 || dy !== 0 || dz !== 0)\r\n data.push(Point3d.create(back.x + dx, back.y + dy, back.z + dz));\r\n }\r\n /** Return an array with numPoints on the unit circle (counting closure) */\r\n public static createUnitCircle(numPoints: number): Point3d[] {\r\n const points: Point3d[] = [];\r\n const dTheta = Geometry.safeDivideFraction(Math.PI * 2, numPoints - 1, 0.0);\r\n for (let i = 0; i + 1 < numPoints; i++) {\r\n const theta = i * dTheta;\r\n points.push(Point3d.create(Math.cos(theta), Math.sin(theta), 0.0));\r\n }\r\n points.push(points[0].clone());\r\n return points;\r\n }\r\n /**\r\n * Create points for an L shaped polygon\r\n * * lower left at x0,y0.\r\n * * ax,ay are larger side lengths (lower left to corners along x and y directions)\r\n * * bx,by are smaller side lengths (inner corner to points along x and y directions)\r\n */\r\n public static createLShapedPolygon(x0: number, y0: number, ax: number, ay: number, bx: number, by: number, z: number = 0): Point3d[] {\r\n return [\r\n Point3d.create(x0, y0, z),\r\n Point3d.create(x0 + ax, y0, z),\r\n Point3d.create(x0 + ax, y0 + by),\r\n Point3d.create(x0 + bx, y0 + by),\r\n Point3d.create(x0 + bx, y0 + ay, z),\r\n Point3d.create(x0, y0 + ay, z),\r\n Point3d.create(x0, y0, z),\r\n ];\r\n }\r\n /** Create assorted clip planes. */\r\n public static createClipPlanes(): ClipPlane[] {\r\n const plane0 = ClipPlane.createNormalAndDistance(Vector3d.create(1, 0, 0), 2.0)!;\r\n const plane1 = plane0.cloneNegated();\r\n const plane2 = plane1.clone();\r\n plane2.setFlags(true, true);\r\n return [\r\n plane0, plane1, plane2,\r\n ClipPlane.createNormalAndDistance(Vector3d.create(3, 4, 0), 2.0)!,\r\n ClipPlane.createEdgeXY(Point3d.create(1, 0, 0), Point3d.create(24, 32, 0))!,\r\n ];\r\n }\r\n /**\r\n * * A first-quadrant unit square\r\n * * Two squares -- first and fourth quadrant unit squares\r\n * * Three squares -- first, second and fourth quadrant unit squares\r\n */\r\n public static createClipPlaneSets(): UnionOfConvexClipPlaneSets[] {\r\n const result = [];\r\n const quadrant1 = ConvexClipPlaneSet.createXYBox(0, 0, 1, 1);\r\n result.push(UnionOfConvexClipPlaneSets.createConvexSets([quadrant1.clone()]));\r\n const quadrant2 = ConvexClipPlaneSet.createXYBox(-1, 0, 0, 1);\r\n const quadrant4 = ConvexClipPlaneSet.createXYBox(0, -1, 1, 0);\r\n result.push(\r\n UnionOfConvexClipPlaneSets.createConvexSets([\r\n quadrant1.clone(),\r\n quadrant4.clone(),\r\n ]),\r\n );\r\n result.push(\r\n UnionOfConvexClipPlaneSets.createConvexSets([\r\n quadrant1.clone(),\r\n quadrant2.clone(),\r\n quadrant4.clone(),\r\n ]),\r\n );\r\n return result;\r\n }\r\n /**\r\n * Create (unweighted) bspline curves.\r\n * order varies from 2 to 5\r\n */\r\n public static createBsplineCurves(includeMultipleKnots: boolean = false): BSplineCurve3d[] {\r\n const result: BSplineCurve3d[] = [];\r\n const yScale = 0.1;\r\n for (const order of [2, 3, 4, 5]) {\r\n const points = [];\r\n for (const x of [0, 1, 2, 3, 4, 5, 7]) {\r\n points.push(Point3d.create(x, yScale * (1 + x * x), 0.0));\r\n }\r\n const curve = BSplineCurve3d.createUniformKnots(points, order) as BSplineCurve3d;\r\n result.push(curve);\r\n }\r\n if (includeMultipleKnots) {\r\n const interiorKnotCandidates = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8];\r\n for (const order of [3, 4]) {\r\n const numPoints = 8;\r\n const points = [];\r\n for (let i = 0; i < numPoints; i++)\r\n points.push(Point3d.create(i, i * i, 0));\r\n const knots = [];\r\n for (let i = 0; i < order - 1; i++)\r\n knots.push(0);\r\n const numInteriorNeeded = numPoints - order;\r\n for (let i = 0; i < numInteriorNeeded; i++)\r\n knots.push(interiorKnotCandidates[i]);\r\n const lastKnot = knots[knots.length - 1] + 1;\r\n for (let i = 0; i < order - 1; i++)\r\n knots.push(lastKnot);\r\n const curve = BSplineCurve3d.create(points, knots, order);\r\n if (curve)\r\n result.push(curve);\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Create weighted bspline curves.\r\n * order varies from 2 to 5\r\n */\r\n public static createBspline3dHCurves(): BSplineCurve3dH[] {\r\n const result: BSplineCurve3dH[] = [];\r\n const yScale = 0.1;\r\n for (const weightVariation of [0, 0.125]) {\r\n for (const order of [2, 3, 4, 5]) {\r\n const points = [];\r\n for (const x of [0, 1, 2, 3, 4, 5, 7]) {\r\n points.push(Point4d.create(x, yScale * (1 + x * x), 0.0, 1.0 + weightVariation * Math.sin(x * Math.PI * 0.25)));\r\n }\r\n const curve = BSplineCurve3dH.createUniformKnots(points, order) as BSplineCurve3dH;\r\n result.push(curve);\r\n }\r\n }\r\n return result;\r\n }\r\n /** Create various orders of non-rational B-spline curves with helical poles. */\r\n public static createBsplineCurveHelices(\r\n radius: number, height: number, numTurns: number, numSamplesPerTurn: number,\r\n ): BSplineCurve3d[] {\r\n const pts: Point3d[] = [];\r\n const zDelta = (height / numTurns) / numSamplesPerTurn;\r\n const aDelta = 2 * Math.PI / numSamplesPerTurn;\r\n for (let iTurn = 0; iTurn < numTurns; ++iTurn) {\r\n for (let iSample = 0; iSample < numSamplesPerTurn; iSample++) {\r\n pts.push(\r\n Point3d.create(radius * Math.cos(iSample * aDelta), radius * Math.sin(iSample * aDelta), pts.length * zDelta),\r\n );\r\n }\r\n }\r\n const result: BSplineCurve3d[] = [];\r\n for (const order of [2, 3, 4, 9, 16, 25]) {\r\n if (order > pts.length)\r\n continue;\r\n const curve = BSplineCurve3d.createUniformKnots(pts, order);\r\n if (curve !== undefined)\r\n result.push(curve);\r\n }\r\n return result;\r\n }\r\n /** Create weighted bsplines for circular arcs. */\r\n public static createBspline3dHArcs(): BSplineCurve3dH[] {\r\n const result: BSplineCurve3dH[] = [];\r\n const halfRadians = Angle.degreesToRadians(60.0);\r\n const c = Math.cos(halfRadians);\r\n const s = Math.sin(halfRadians);\r\n // const sec = 1.0 / c;\r\n // const t = s / c;\r\n const points = [\r\n Point4d.create(1, 0, 0, 1),\r\n Point4d.create(c, s, 0, c),\r\n Point4d.create(-c, s, 0, 1),\r\n Point4d.create(-1, 0, 0, c),\r\n Point4d.create(-c, -s, 0, 1),\r\n Point4d.create(c, -s, 0, c),\r\n Point4d.create(1, 0, 0, 1),\r\n ];\r\n const knots = [0, 0, 1, 1, 2, 2, 3, 3];\r\n const curve = BSplineCurve3dH.create(points, knots, 3) as BSplineCurve3dH;\r\n result.push(curve);\r\n return result;\r\n }\r\n /**\r\n * Return array [x,y,z,w] bspline control points for an arc in 90 degree bspline spans.\r\n * @param points array of [x,y,z,w]\r\n * @param center center of arc\r\n * @param axes matrix with 0 and 90 degree axes\r\n * @param radius0 radius multiplier for x direction.\r\n * @param radius90 radius multiplier for y direction.\r\n * @param applyWeightsToXYZ\r\n */\r\n public static createBsplineArc90SectionToXYZWArrays(\r\n center: Point3d,\r\n axes: Matrix3d,\r\n radius0: number,\r\n radius90: number,\r\n applyWeightsToXYZ: boolean,\r\n ): number[][] {\r\n const a = Math.sqrt(0.5);\r\n const xyz = Point3d.create();\r\n Matrix3d.xyzPlusMatrixTimesCoordinates(center, axes, radius0, 0.0, 0, xyz);\r\n const controlPoints = [];\r\n controlPoints.push([xyz.x, xyz.y, xyz.z, 1.0]);\r\n const cornerTrig = [1, 1, -1, -1, 1];\r\n const axisTrig = [1, 0, -1, 0, 1];\r\n for (let i = 0; i < 4; i++) {\r\n Matrix3d.xyzPlusMatrixTimesCoordinates(\r\n center, axes, radius0 * cornerTrig[i + 1], radius90 * cornerTrig[i], 0, xyz,\r\n );\r\n controlPoints.push([xyz.x, xyz.y, xyz.z, a]);\r\n Matrix3d.xyzPlusMatrixTimesCoordinates(\r\n center, axes, radius0 * axisTrig[i + 1], radius90 * axisTrig[i], 0, xyz,\r\n );\r\n controlPoints.push([xyz.x, xyz.y, xyz.z, 1.0]);\r\n }\r\n if (applyWeightsToXYZ) {\r\n for (const xyzw of controlPoints) {\r\n const b = xyzw[3];\r\n xyzw[0] *= b;\r\n xyzw[1] *= b;\r\n xyzw[2] *= b;\r\n }\r\n }\r\n return controlPoints;\r\n }\r\n /**\r\n * Create both unweighted and weighted bspline curves.\r\n * (This is the combined results from createBsplineCurves and createBspline3dHCurves)\r\n */\r\n public static createMixedBsplineCurves(): BSplineCurve3dBase[] {\r\n const arrayA = Sample.createBsplineCurves();\r\n const arrayB = Sample.createBspline3dHCurves();\r\n const result = [];\r\n for (const a of arrayA) result.push(a);\r\n for (const b of arrayB) result.push(b);\r\n return result;\r\n }\r\n /** Create a plane from origin and normal coordinates -- default to 001 normal if needed. */\r\n public static createPlane(x: number, y: number, z: number, u: number, v: number, w: number): Plane3dByOriginAndUnitNormal {\r\n const point = Point3d.create(x, y, z);\r\n const vector = Vector3d.create(u, v, w).normalize();\r\n if (vector) {\r\n const plane = Plane3dByOriginAndUnitNormal.create(point, vector);\r\n if (plane)\r\n return plane;\r\n }\r\n return Sample.createPlane(x, y, z, u, v, 1);\r\n }\r\n /** Create ray from (x,y,z) and direction components. (Normalize the direction) */\r\n public static createRay(x: number, y: number, z: number, u: number, v: number, w: number): Ray3d {\r\n return Ray3d.create(\r\n Point3d.create(x, y, z),\r\n Vector3d.create(u, v, w).normalize() as Vector3d,\r\n );\r\n }\r\n /** Assorted Plane3dBYOriginAndUnitNormal */\r\n public static readonly plane3dByOriginAndUnitNormal: Plane3dByOriginAndUnitNormal[] = [\r\n Plane3dByOriginAndUnitNormal.createXYPlane(),\r\n Plane3dByOriginAndUnitNormal.createYZPlane(),\r\n Plane3dByOriginAndUnitNormal.createZXPlane(),\r\n Sample.createPlane(0, 0, 0, 3, 0, 1),\r\n Sample.createPlane(1, 2, 3, 2, 4, -1),\r\n ];\r\n\r\n /** Assorted Ray3d, not all unit direction vectors. */\r\n public static readonly ray3d: Ray3d[] = [\r\n Sample.createRay(0, 0, 0, 1, 0, 0),\r\n Sample.createRay(0, 0, 0, 0, 1, 0),\r\n Sample.createRay(0, 0, 0, 0, 0, 1),\r\n Sample.createRay(0, 0, 0, 1, 2, 0),\r\n Sample.createRay(1, 2, 3, 4, 2, -1),\r\n ];\r\n /** Assorted angles. All principal directions, some others included. */\r\n public static readonly angle: Angle[] = [\r\n Angle.createDegrees(0),\r\n Angle.createDegrees(90),\r\n Angle.createDegrees(180),\r\n Angle.createDegrees(-90),\r\n Angle.createDegrees(30),\r\n Angle.createDegrees(-105),\r\n ];\r\n /** Assorted angle sweeps */\r\n public static readonly angleSweep: AngleSweep[] = [\r\n AngleSweep.createStartEndDegrees(0, 90),\r\n AngleSweep.createStartEndDegrees(0, 180),\r\n AngleSweep.createStartEndDegrees(-90, 0),\r\n AngleSweep.createStartEndDegrees(0, -90),\r\n AngleSweep.createStartEndDegrees(0, 30),\r\n AngleSweep.createStartEndDegrees(45, 110),\r\n ];\r\n /** Assorted line segments */\r\n public static readonly lineSegment3d: LineSegment3d[] = [\r\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(1, 0, 0)),\r\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(0, 1, 0)),\r\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(0, 0, 1)),\r\n LineSegment3d.create(Point3d.create(1, 2, 3), Point3d.create(-2, -3, 0.5)),\r\n ];\r\n /** Assorted lines strings */\r\n public static createLineStrings(): LineString3d[] {\r\n return [\r\n LineString3d.createPoints([\r\n Point3d.create(0, 0, 0),\r\n Point3d.create(1, 0, 0),\r\n ]),\r\n LineString3d.createPoints([\r\n Point3d.create(0, 0, 0),\r\n Point3d.create(1, 0, 0),\r\n Point3d.create(1, 1, 0),\r\n ]),\r\n LineString3d.createPoints([\r\n Point3d.create(0, 0, 0),\r\n Point3d.create(1, 0, 0),\r\n Point3d.create(1, 1, 0),\r\n Point3d.create(2, 2, 0),\r\n ]),\r\n ];\r\n }\r\n /** Assorted Range1d: single point, null, simple forward, simple reverse */\r\n public static readonly range1d: Range1d[] = [\r\n Range1d.createX(1),\r\n Range1d.createNull(),\r\n Range1d.createXX(1, 2),\r\n Range1d.createXX(2, 1),\r\n ];\r\n /** Assorted range2d: single point, null, 2 point with various creation orders. */\r\n public static readonly range2d: Range2d[] = [\r\n Range2d.createXY(1, 2),\r\n Range2d.createNull(),\r\n Range2d.createXYXY(1, 2, 0, 3),\r\n Range2d.createXYXY(1, 2, 3, 4),\r\n ];\r\n /** Assorted range2d: single point, null, 2 point with various creation orders. */\r\n public static readonly range3d: Range3d[] = [\r\n Range3d.createXYZ(1, 2, 3),\r\n Range3d.createNull(),\r\n Range3d.createXYZXYZ(1, 2, 0, 3, 4, 7),\r\n Range3d.createXYZXYZ(1, 2, 3, -2, -4, -1),\r\n ];\r\n /**\r\n * Assorted Matrix3d:\r\n * * identity\r\n * * rotation around x\r\n * * rotation around general vector\r\n * * uniform scale\r\n * * nonuniform scale (including negative scales!)\r\n */\r\n public static createMatrix3dArray(): Matrix3d[] {\r\n return [\r\n Matrix3d.createIdentity(),\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.create(1, 0, 0), Angle.createDegrees(10),\r\n ) as Matrix3d,\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.create(1, -2, 5), Angle.createDegrees(-6.0),\r\n ) as Matrix3d,\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.create(1, 2, 3), Angle.createDegrees(49.0),\r\n ) as Matrix3d,\r\n Matrix3d.createUniformScale(2.0),\r\n Matrix3d.createScale(1, 1, -1),\r\n Matrix3d.createScale(2, 3, 4),\r\n ];\r\n }\r\n /** Assorted invertible transforms. */\r\n public static createInvertibleTransforms(): Transform[] {\r\n return [\r\n Transform.createIdentity(),\r\n Transform.createTranslationXYZ(1, 2, 0),\r\n Transform.createTranslationXYZ(1, 2, 3),\r\n Transform.createFixedPointAndMatrix(\r\n Point3d.create(4, 1, -2),\r\n Matrix3d.createUniformScale(2.0),\r\n ),\r\n Transform.createFixedPointAndMatrix(\r\n Point3d.create(4, 1, -2),\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.create(1, 2, 3), Angle.createRadians(10),\r\n ) as Matrix3d,\r\n ),\r\n ];\r\n }\r\n /**\r\n * Return an array of Matrix3d with various skew and scale. This includes at least:\r\n * * identity\r\n * * 3 distinct diagonals.\r\n * * The distinct diagonal base with smaller value added to other 6 spots in succession.\r\n * * the distinct diagonals with all others also smaller non-zeros.\r\n */\r\n public static createScaleSkewMatrix3d(): Matrix3d[] {\r\n return [\r\n Matrix3d.createRowValues(\r\n 1, 0, 0,\r\n 0, 1, 0,\r\n 0, 0, 1,\r\n ),\r\n Matrix3d.createRowValues(\r\n 5, 0, 0,\r\n 0, 6, 0,\r\n 0, 0, 7,\r\n ),\r\n Matrix3d.createRowValues(\r\n 5, 2, 0,\r\n 0, 6, 0,\r\n 0, 0, 7,\r\n ),\r\n Matrix3d.createRowValues(\r\n 5, 0, 2,\r\n 0, 6, 0,\r\n 0, 0, 7,\r\n ),\r\n Matrix3d.createRowValues(\r\n 5, 0, 0,\r\n 1, 6, 0,\r\n 0, 0, 7,\r\n ),\r\n Matrix3d.createRowValues(\r\n 5, 0, 0,\r\n 0, 6, 1,\r\n 0, 0, 7,\r\n ),\r\n Matrix3d.createRowValues(\r\n 5, 0, 0,\r\n 0, 6, 0,\r\n 1, 0, 7,\r\n ),\r\n Matrix3d.createRowValues(\r\n 5, 0, 0,\r\n 0, 6, 0,\r\n 0, 1, 7,\r\n ),\r\n Matrix3d.createRowValues(\r\n 5, 2, 3,\r\n 2, 6, 1,\r\n -1, 2, 7,\r\n ),\r\n ];\r\n }\r\n /**\r\n * Return an array of singular Matrix3d. This includes at least:\r\n * * all zeros\r\n * * one non-zero column\r\n * * two independent columns, third is zero\r\n * * two independent columns, third is sum of those\r\n * * two independent columns, third is copy of one\r\n */\r\n public static createSingularMatrix3d(): Matrix3d[] {\r\n const vectorU = Vector3d.create(2, 3, 6);\r\n const vectorV = Vector3d.create(-1, 5, 2);\r\n const vectorUPlusV = vectorU.plus(vectorV);\r\n const vector0 = Vector3d.createZero();\r\n return [\r\n Matrix3d.createZero(),\r\n // one non-zero column\r\n Matrix3d.createColumns(vectorU, vector0, vector0),\r\n Matrix3d.createColumns(vector0, vectorU, vector0),\r\n Matrix3d.createColumns(vector0, vector0, vectorU),\r\n // two independent non-zero columns with one zero column\r\n Matrix3d.createColumns(vectorU, vectorV, vector0),\r\n Matrix3d.createColumns(vector0, vectorU, vectorV),\r\n Matrix3d.createColumns(vectorU, vector0, vectorV),\r\n // two independent columns with one dependent column\r\n Matrix3d.createColumns(vectorU, vectorV, vectorUPlusV),\r\n Matrix3d.createColumns(vectorU, vectorUPlusV, vectorV),\r\n Matrix3d.createColumns(vectorUPlusV, vectorU, vectorV),\r\n // two independent with columns with one duplicate column\r\n Matrix3d.createColumns(vectorU, vectorU, vectorV),\r\n Matrix3d.createColumns(vectorU, vectorV, vectorU),\r\n Matrix3d.createColumns(vectorV, vectorU, vectorU),\r\n ];\r\n }\r\n /**\r\n * Return an array of rigid transforms. This includes (at least)\r\n * * Identity\r\n * * translation with identity matrix\r\n * * rotation around origin and arbitrary vector\r\n * * rotation around space point and arbitrary vector\r\n * * use given refDistance is crude distance of translation and distance to fixed point.\r\n */\r\n public static createRigidTransforms(distanceScale: number = 4.0): Transform[] {\r\n const distanceScale3 = distanceScale / 3.0;\r\n const distanceScale4 = distanceScale / 4.0;\r\n return [\r\n Transform.createIdentity(),\r\n Transform.createTranslationXYZ(\r\n distanceScale3 * 1,\r\n distanceScale3 * 2,\r\n distanceScale3 * 3,\r\n ),\r\n Transform.createFixedPointAndMatrix(\r\n Point3d.create(0, 0, 0),\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.unitY(), Angle.createDegrees(10)) as Matrix3d,\r\n ),\r\n Transform.createFixedPointAndMatrix(\r\n Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2),\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.create(1, 2, 3), Angle.createDegrees(10)) as Matrix3d,\r\n ),\r\n Transform.createFixedPointAndMatrix(\r\n Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2),\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.create(-2, 1, 4), Angle.createDegrees(35)) as Matrix3d,\r\n ),\r\n ];\r\n }\r\n /** Return a single rigid transform with all terms nonzero. */\r\n public static createMessyRigidTransform(fixedPoint?: Point3d): Transform {\r\n return Transform.createFixedPointAndMatrix(\r\n fixedPoint ? fixedPoint : Point3d.create(1, 2, 3),\r\n Matrix3d.createRotationAroundVector(Vector3d.create(0.3, -0.2, 1.2), Angle.createDegrees(15.7))!);\r\n }\r\n /**\r\n * Return various rigid matrices:\r\n * * identity\r\n * * small rotations around x, y, z\r\n * * small rotation around (1,2,3)\r\n */\r\n public static createRigidAxes(): Matrix3d[] {\r\n return [\r\n Matrix3d.createIdentity(),\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.unitX(), Angle.createDegrees(10),\r\n ) as Matrix3d,\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.unitY(), Angle.createDegrees(10),\r\n ) as Matrix3d,\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.unitZ(), Angle.createDegrees(10),\r\n ) as Matrix3d,\r\n Matrix3d.createRotationAroundVector(\r\n Vector3d.create(1, 2, 3), Angle.createDegrees(10),\r\n ) as Matrix3d,\r\n ];\r\n }\r\n /**\r\n * Return various Matrix4d\r\n * * Simple promotion of each Sample.createInvertibleTransforms ()\r\n * * optional nasty [1,2,3,4...15] row order\r\n * @param includeIrregular if true, include [1,2,..15] row major\r\n */ // promote each transform[] to a Matrix4d.\r\n public static createMatrix4ds(includeIrregular: boolean = false): Matrix4d[] {\r\n const result = [];\r\n let transform;\r\n for (transform of Sample.createInvertibleTransforms())\r\n result.push(Matrix4d.createTransform(transform));\r\n if (includeIrregular) {\r\n result.push(\r\n Matrix4d.createRowValues(\r\n 1, 2, 3, 4,\r\n 5, 6, 7, 8,\r\n 9, 10, 11, 12,\r\n 13, 14, 15, 16,\r\n ),\r\n );\r\n }\r\n return result;\r\n }\r\n /** Create full Map4d for each `Sample.createInvertibleTransforms()` */\r\n public static createMap4ds(): Map4d[] {\r\n const result = [];\r\n let transform;\r\n for (transform of Sample.createInvertibleTransforms()) {\r\n const inverse = transform.inverse();\r\n if (inverse) {\r\n const map = Map4d.createTransform(transform, inverse);\r\n if (map)\r\n result.push(map);\r\n }\r\n }\r\n return result;\r\n }\r\n /** Assorted simple `Path` objects. */\r\n public static createSimplePaths(withGaps: boolean = false): Path[] {\r\n const point0 = Point3d.create(0, 0, 0);\r\n const point1 = Point3d.create(10, 0, 0);\r\n\r\n const p1 = [\r\n point1, Point3d.create(0, 10, 0),\r\n Point3d.create(6, 10, 0),\r\n Point3d.create(6, 10, 0),\r\n Point3d.create(0, 10, 0),\r\n ];\r\n const segment1 = LineSegment3d.create(point0, point1);\r\n const vectorU = Vector3d.unitX(3);\r\n const vectorV = Vector3d.unitY(3);\r\n const arc2 = Arc3d.create(point1.minus(vectorU), vectorU, vectorV, AngleSweep.createStartEndDegrees(0, 90));\r\n const simplePaths = [\r\n Path.create(segment1),\r\n Path.create(segment1, arc2),\r\n Path.create(\r\n LineSegment3d.create(point0, point1),\r\n LineString3d.create(p1)),\r\n Sample.createCappedArcPath(4, 0, 180),\r\n ];\r\n if (withGaps)\r\n simplePaths.push(\r\n Path.create(\r\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(10, 0, 0)),\r\n LineSegment3d.create(Point3d.create(10, 10, 0), Point3d.create(5, 0, 0)),\r\n ),\r\n );\r\n return simplePaths;\r\n }\r\n /**\r\n * Assorted `Path` with lines and arcs.\r\n * Specifically useful for offset tests.\r\n */\r\n public static createLineArcPaths(): Path[] {\r\n const paths = [];\r\n const x1 = 10.0;\r\n const y2 = 5.0;\r\n const y3 = 10.0;\r\n for (const y0 of [0, -1, 1]) {\r\n for (const x2 of [15, 11, 20, 9, 7]) {\r\n\r\n const point0 = Point3d.create(0, y0, 0);\r\n const point1 = Point3d.create(x1, 0, 0);\r\n const point2 = Point3d.create(x2, y2, 0);\r\n const point3 = Point3d.create(x1, y3, 0);\r\n const point4 = Point3d.create(0, y3 + y0, 0);\r\n const path0 = Path.create();\r\n path0.tryAddChild(LineString3d.create(point0, point1, point2, point3, point4));\r\n paths.push(path0);\r\n const path1 = Path.create();\r\n path1.tryAddChild(LineSegment3d.create(point0, point1));\r\n path1.tryAddChild(Arc3d.createCircularStartMiddleEnd(point1, Point3d.create(x2, y2, 0), point3));\r\n path1.tryAddChild(LineSegment3d.create(point3, point4));\r\n paths.push(path1);\r\n }\r\n }\r\n return paths;\r\n }\r\n /** Assorted `PointString3d` objects. */\r\n public static createSimplePointStrings(): PointString3d[] {\r\n const p1 = [\r\n [Point3d.create(0, 10, 0)],\r\n [Point3d.create(6, 10, 0)],\r\n [Point3d.create(6, 10, 0), [Point3d.create(6, 10, 0)]],\r\n ];\r\n const simplePaths = [\r\n PointString3d.create(Point3d.create(1, 2, 0)),\r\n PointString3d.create(Point3d.create(0, 0, 0), Point3d.create(10, 0, 0)),\r\n PointString3d.create(Point3d.create(10, 0, 0), Point3d.create(10, 5, 0)),\r\n PointString3d.create(p1),\r\n ];\r\n return simplePaths;\r\n }\r\n /** Assorted `Loop` objects */\r\n public static createSimpleLoops(): Loop[] {\r\n const point0 = Point3d.create(0, 0, 0);\r\n const point1 = Point3d.create(10, 0, 0);\r\n const point2 = Point3d.create(10, 5, 0);\r\n const point3 = Point3d.create(0, 5, 0);\r\n const result = [\r\n // rectangle with single linestring\r\n Loop.create(LineString3d.create(point0, point1, point2, point3, point0)),\r\n // unit circle\r\n Loop.create(Arc3d.createUnitCircle()),\r\n // rectangle, but with individual line segments\r\n Loop.create(\r\n LineSegment3d.create(point0, point1),\r\n LineSegment3d.create(point1, point2),\r\n LineSegment3d.create(point2, point3),\r\n LineSegment3d.create(point3, point0),\r\n ),\r\n // Semicircle\r\n Sample.createCappedArcLoop(4, -90, 90),\r\n ];\r\n return result;\r\n }\r\n /**\r\n * Create a square wave along x direction\r\n * @param dx0 distance along x axis at y=0\r\n * @param dy vertical rise\r\n * @param dx1 distance along x axis at y=dy\r\n * @param numPhase number of phases of the jump.\r\n * @param dyReturn y value for return to origin. If 0, the wave ends at y=0 after then final \"down\" with one extra horizontal dx0\r\n * If nonzero, rise to that y value, return to x=0, and return down to origin.\r\n */\r\n public static createSquareWave(origin: Point3d, dx0: number, dy: number, dx1: number, numPhase: number, dyReturn: number): Point3d[] {\r\n const result = [origin.clone()];\r\n for (let i = 0; i < numPhase; i++) {\r\n this.pushMove(result, dx0, 0);\r\n this.pushMove(result, 0, dy);\r\n this.pushMove(result, dx1, 0);\r\n this.pushMove(result, 0, -dy);\r\n }\r\n this.pushMove(result, dx0, 0);\r\n if (dyReturn !== 0.0) {\r\n this.pushMove(result, 0, dyReturn);\r\n result.push(Point3d.create(origin.x, origin.y + dyReturn));\r\n result.push(result[0].clone());\r\n }\r\n return result;\r\n }\r\n /**\r\n * Create multiple interpolated points between two points\r\n * @param point0 start point (at fraction0)\r\n * @param point1 end point (at fraction1)\r\n * @param numPoints total number of points. This is force to at least 2.\r\n * @param result optional existing array to receive points.\r\n * @param index0 optional index of first point. Default is 0.\r\n * @param index1 optional index of final point. Default is numPoints\r\n */\r\n public static createInterpolatedPoints(point0: Point3d, point1: Point3d, numPoints: number, result?: Point3d[], index0?: number, index1?: number): Point3d[] {\r\n if (numPoints < 2)\r\n numPoints = 2;\r\n if (result === undefined)\r\n result = [];\r\n if (index0 === undefined)\r\n index0 = 0;\r\n if (index1 === undefined)\r\n index1 = numPoints;\r\n for (let i = index0; i <= index1; i++) {\r\n result.push(point0.interpolate(i / numPoints, point1));\r\n }\r\n return result;\r\n }\r\n /**\r\n * Append numPhase teeth. Each tooth starts with dxLow dwell at initial y, then sloped rise, then dwell at top, then sloped fall\r\n * * If no points are present, start with 000. (this happens in pushMove) Otherwise start from final point.\r\n * * return points array reference.\r\n * @param points point array to receive points\r\n * @param dxLow starting step along x direction\r\n * @param riseX width of rising and falling parts\r\n * @param riseY height of rise\r\n * @param dxHigh width at top\r\n * @param numPhase number of phases.\r\n */\r\n public static appendSawTooth(points: Point3d[], dxLow: number, riseX: number, riseY: number, dxHigh: number, numPhase: number): Point3d[] {\r\n for (let i = 0; i < numPhase; i++) {\r\n this.pushMove(points, dxLow, 0, 0);\r\n this.pushMove(points, riseX, riseY, 0);\r\n this.pushMove(points, dxHigh, 0, 0);\r\n this.pushMove(points, riseX, -riseY, 0);\r\n }\r\n return points;\r\n }\r\n /** Append sawtooth with x distances successively scaled by xFactor */\r\n public static appendVariableSawTooth(points: Point3d[], dxLow: number, riseX: number, riseY: number, dxHigh: number, numPhase: number, xFactor: number): Point3d[] {\r\n let factor = 1.0;\r\n for (let i = 0; i < numPhase; i++) {\r\n this.appendSawTooth(points, factor * dxLow, factor * riseX, riseY, factor * dxHigh, 1);\r\n factor *= xFactor;\r\n }\r\n return points;\r\n }\r\n /**\r\n * Create a pair of sawtooth patterns, one (nominally) outbound and up, the other inbound and down.\r\n * * return phase count adjusted to end at start x\r\n * * enter return dx values as lengths -- sign will be negated in construction.\r\n * @param origin start of entire path.\r\n * @param dxLow low outbound dwell\r\n * @param riseX x part of outbound rise and fall\r\n * @param riseY y part of outbound rise and fall\r\n * @param dxHigh high outbound dwell\r\n * @param numPhaseOutbound number of phases outbound. Final phase followed by dxLow dwell.\r\n * @param dyFinal rise after final dwell.\r\n * @param dxLowReturn dwell at return high\r\n * @param riseXReturn rise x part of return\r\n * @param riseYReturn rise y part of return\r\n * @param dxHighReturn dwell at return high\r\n */\r\n public static createBidirectionalSawtooth(origin: Point3d, dxLow: number, riseX: number, riseY: number, dxHigh: number, numPhaseOutbound: number,\r\n dyFinal: number,\r\n dxLowReturn: number, riseXReturn: number, riseYReturn: number, dxHighReturn: number): Point3d[] {\r\n const data = [origin.clone()];\r\n const x0 = data[0].x;\r\n this.appendSawTooth(data, dxLow, riseX, riseY, dxHigh, numPhaseOutbound);\r\n this.pushMove(data, dxLow, 0, 0);\r\n this.pushMove(data, 0, dyFinal);\r\n const x1 = data[data.length - 1].x;\r\n const returnPhase = Math.abs(dxLowReturn + 2 * riseXReturn + dxHighReturn);\r\n const totalDX = Math.abs(x1 - x0);\r\n const numReturnPhase = Math.floor(Math.abs(totalDX / returnPhase));\r\n this.appendSawTooth(data, -dxLowReturn, -riseXReturn, riseYReturn, -dxHighReturn, numReturnPhase);\r\n const x2 = data[data.length - 1].x;\r\n this.pushMove(data, x0 - x2, 0, 0);\r\n data.push(data[0].clone());\r\n return data;\r\n }\r\n /**\r\n * Append to a linestring, taking steps along given vector directions\r\n * If the linestring is empty, a 000 point is added.\r\n * @param linestring LineString3d to receive points.\r\n * @param numPhase number of phases of the sawtooth\r\n * @param vectors any number of vector steps.\r\n */\r\n public static appendPhases(linestring: LineString3d, numPhase: number, ...vectors: Vector3d[]): void {\r\n const tailPoint = linestring.endPoint(); // and this defaults to 000 . ..\r\n if (linestring.numPoints() === 0)\r\n linestring.addPoint(tailPoint);\r\n\r\n for (let i = 0; i < numPhase; i++) {\r\n for (const v of vectors) {\r\n tailPoint.addInPlace(v);\r\n linestring.addPoint(tailPoint);\r\n }\r\n }\r\n }\r\n /**\r\n * Assorted regions with arc boundaries\r\n * * full circle\r\n * * with varying sweep:\r\n * * partial arc with single chord closure\r\n * * partial arc with 2-edge closure via center\r\n */\r\n public static createArcRegions(): Loop[] {\r\n const result = [];\r\n const center = Point3d.create(0, 0, 0);\r\n for (const sweep of [\r\n AngleSweep.createStartEndDegrees(0, 360),\r\n AngleSweep.createStartEndDegrees(-20, 20),\r\n AngleSweep.createStartEndDegrees(0, 90),\r\n AngleSweep.createStartEndDegrees(0, 180),\r\n ]) {\r\n const arc0 = Arc3d.createXY(Point3d.create(0, 0), 2.0, sweep);\r\n if (arc0.sweep.isFullCircle) {\r\n result.push(Loop.create(arc0));\r\n } else {\r\n const chord = LineSegment3d.create(arc0.endPoint(), arc0.startPoint());\r\n result.push(Loop.create(arc0, chord));\r\n result.push(Loop.create(arc0, LineString3d.create(arc0.endPoint(), center, arc0.startPoint())));\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Assorted loops in xy plane:\r\n * * unit square\r\n * * rectangle\r\n * * L shape\r\n */\r\n public static createSimpleXYPointLoops(): Point3d[][] {\r\n const result = [];\r\n result.push(Sample.createRectangleXY(0, 0, 1, 1));\r\n result.push(Sample.createRectangleXY(0, 0, 4, 3));\r\n result.push(Sample.createLShapedPolygon(0, 0, 5, 4, 1, 2));\r\n return result;\r\n }\r\n /** Assorted `ParityRegion` objects */\r\n public static createSimpleParityRegions(includeBCurves: boolean = false): ParityRegion[] {\r\n const pointC = Point3d.create(-5, 0, 0);\r\n const point0 = Point3d.create(0, 0, 0);\r\n const point1 = Point3d.create(4, 2, 0);\r\n const point2 = Point3d.create(6, 4, 0);\r\n const point3 = Point3d.create(5, 5, 0);\r\n const point4 = Point3d.create(8, 3, 0);\r\n const reverseSweep = AngleSweep.createStartEndDegrees(0, -360);\r\n const ax = 10.0;\r\n const ay = 8.0;\r\n const bx = -3.0;\r\n const by = 2.0;\r\n const r2 = 0.5;\r\n const r2A = 2.5;\r\n const pointA = point0.plusXYZ(ax, 0, 0);\r\n const pointB = pointA.plusXYZ(0, ay, 0);\r\n const pointC1 = point0.plusXYZ(0, ay);\r\n const result = [\r\n ParityRegion.create(\r\n Loop.create(\r\n LineString3d.create(point0, pointA, pointB),\r\n Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0),\r\n ),\r\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\r\n ),\r\n ParityRegion.create(\r\n Loop.create(Arc3d.createXY(pointC, 2.0)),\r\n Loop.create(Arc3d.createXY(pointC, 1.0, reverseSweep)),\r\n ),\r\n ParityRegion.create(\r\n Loop.create(LineString3d.createRectangleXY(point0, ax, ay)),\r\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\r\n ),\r\n ParityRegion.create(\r\n Loop.create(LineString3d.createRectangleXY(point0, ax, ay)),\r\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\r\n Loop.create(Arc3d.createXY(point2, r2, reverseSweep)),\r\n ),\r\n ParityRegion.create(\r\n Loop.create(LineString3d.createRectangleXY(point0, ax, ay)),\r\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\r\n Loop.create(Arc3d.createXY(point2, r2, reverseSweep)),\r\n Loop.create(LineString3d.createRectangleXY(point3, bx, by)),\r\n ),\r\n ParityRegion.create(\r\n Loop.create(\r\n LineString3d.create(point0, pointA, pointB),\r\n Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0),\r\n ),\r\n Loop.create(LineString3d.createRectangleXY(point1, bx, by)),\r\n Loop.create(Arc3d.create(point4, Vector3d.create(-r2, 0), Vector3d.create(0, r2A))),\r\n Loop.create(LineString3d.createRectangleXY(point3, bx, by)),\r\n ),\r\n ];\r\n if (includeBCurves) {\r\n const ey = 1.0;\r\n result.push(\r\n ParityRegion.create(\r\n Loop.create(\r\n LineSegment3d.create(point0, pointA),\r\n BSplineCurve3d.createUniformKnots(\r\n [\r\n pointA,\r\n Point3d.create(ax + 1, ey),\r\n Point3d.create(ax + 1, 2 * ey),\r\n Point3d.create(ax + 2, 3 * ey),\r\n Point3d.create(ax + 1, 4 * ey),\r\n pointB,\r\n ],\r\n 3)!,\r\n Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0),\r\n ),\r\n ),\r\n );\r\n }\r\n return result;\r\n }\r\n /** Union region. */\r\n public static createSimpleUnions(): UnionRegion[] {\r\n const parityRegions = Sample.createSimpleParityRegions();\r\n const parityRange = parityRegions[0].range();\r\n const ax = 3.0;\r\n const ay = 1.0;\r\n const bx = 4.0;\r\n const by = 2.0;\r\n const result = [\r\n UnionRegion.create(\r\n Loop.create(LineString3d.createRectangleXY(Point3d.create(0, 0, 0), ax, ay)),\r\n Loop.create(LineString3d.createRectangleXY(Point3d.create(0, 2 * ay, 0), bx, by)),\r\n ),\r\n UnionRegion.create(\r\n Loop.create(\r\n LineString3d.create(\r\n Sample.createRectangleXY(\r\n parityRange.low.x,\r\n parityRange.high.y + 0.5,\r\n parityRange.xLength(),\r\n parityRange.yLength(),\r\n ),\r\n ),\r\n ),\r\n parityRegions[0],\r\n ),\r\n ];\r\n return result;\r\n }\r\n /** Assorted unstructured curve sets. */\r\n public static createBagOfCurves(): BagOfCurves[] {\r\n const parityRegions = Sample.createSimpleParityRegions();\r\n const loops = Sample.createSimpleLoops();\r\n const result = [\r\n BagOfCurves.create(loops[0], parityRegions[0], LineSegment3d.createXYXY(0, 1, 4, 2, 1)),\r\n // a bag with just an arc\r\n BagOfCurves.create(Arc3d.createUnitCircle()),\r\n // a bag with just a line segment\r\n BagOfCurves.create(LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(1, 1, 0))),\r\n // a bag with just a linestring\r\n BagOfCurves.create(LineString3d.create(Point3d.create(0, 0, 0), Point3d.create(1, 1, 0), Point3d.create(2, 1, 0))),\r\n ];\r\n return result;\r\n }\r\n /**\r\n * Assorted smooth curve primitives:\r\n * * line segments\r\n * * arcs\r\n */\r\n public static createSmoothCurvePrimitives(size: number = 1.0): CurvePrimitive[] {\r\n const alpha = 0.1;\r\n const beta = 0.3;\r\n return [\r\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(size, 0, 0)),\r\n LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(size, size, 0)),\r\n Arc3d.create(\r\n Point3d.create(0, 0, 0),\r\n Vector3d.create(size, 0, 0),\r\n Vector3d.create(0, size, 0),\r\n AngleSweep.createStartEndDegrees(0, 90),\r\n ),\r\n Arc3d.create(\r\n Point3d.create(0, 0, 0),\r\n Vector3d.create(size, 0, 0),\r\n Vector3d.create(0, size, 0),\r\n AngleSweep.createStartEndDegrees(-40, 270),\r\n ),\r\n Arc3d.create(\r\n Point3d.create(0, 0, 0),\r\n Vector3d.create(size, alpha * size, 0),\r\n Vector3d.create(-alpha * beta * size, beta * size, 0),\r\n AngleSweep.createStartEndDegrees(-40, 270),\r\n ),\r\n ];\r\n }\r\n /** Assorted small polyface grids, possibly expanded by gridMultiplier */\r\n public static createSimpleIndexedPolyfaces(gridMultiplier: number): IndexedPolyface[] {\r\n const meshes = [\r\n Sample.createTriangularUnitGridPolyface(\r\n Point3d.create(),\r\n Vector3d.unitX(),\r\n Vector3d.unitY(),\r\n gridMultiplier * 3, 2 * gridMultiplier, false, false, false),\r\n Sample.createTriangularUnitGridPolyface(\r\n Point3d.create(),\r\n Vector3d.unitX(),\r\n Vector3d.unitY(),\r\n 3 * gridMultiplier, 2 * gridMultiplier, true, false, false),\r\n Sample.createTriangularUnitGridPolyface(\r\n Point3d.create(),\r\n Vector3d.unitX(),\r\n Vector3d.unitY(),\r\n 3 * gridMultiplier, 2 * gridMultiplier, false, true, false),\r\n Sample.createTriangularUnitGridPolyface(\r\n Point3d.create(),\r\n Vector3d.unitX(),\r\n Vector3d.unitY(),\r\n 3 * gridMultiplier, 2 * gridMultiplier, false, false, true),\r\n Sample.createTriangularUnitGridPolyface(\r\n Point3d.create(),\r\n Vector3d.unitX(),\r\n Vector3d.unitY(),\r\n 3 * gridMultiplier, 2 * gridMultiplier, true, true, true),\r\n ];\r\n for (const m of meshes)\r\n m.expectedClosure = 1;\r\n return meshes;\r\n }\r\n /**\r\n * Build a mesh that is a (possibly skewed) grid in a plane.\r\n * @param origin \"lower left\" coordinate\r\n * @param vectorX step in \"X\" direction\r\n * @param vectorY step in \"Y\" direction\r\n * @param numXVertices number of vertices in X direction\r\n * @param numYVertices number of vertices in y direction\r\n * @param createParams true to create parameters, with parameter value `(i,j)` for point at (0 based) vertex in x,y directions\r\n * @param createNormals true to create a (single) normal indexed from all facets\r\n * @param createColors true to create a single color on each quad (shared between both triangles in quad if triangulating)\r\n * @param triangulate whether to triangulate the quads (default true)\r\n * @note edgeVisible is false only on the diagonals\r\n */\r\n public static createTriangularUnitGridPolyface(\r\n origin: Point3d, vectorX: Vector3d, vectorY: Vector3d,\r\n numXVertices: number, numYVertices: number, createParams: boolean = false, createNormals: boolean = false,\r\n createColors: boolean = false, triangulate: boolean = true,\r\n ): IndexedPolyface {\r\n const mesh = IndexedPolyface.create(createNormals, createParams, createColors);\r\n const normal = vectorX.crossProduct(vectorY);\r\n if (createNormals) {\r\n normal.normalizeInPlace();\r\n mesh.addNormalXYZ(normal.x, normal.y, normal.z); // use XYZ to help coverage count!!\r\n }\r\n // Push to coordinate arrays\r\n for (let j = 0; j < numYVertices; j++) {\r\n for (let i = 0; i < numXVertices; i++) {\r\n mesh.addPoint(origin.plus2Scaled(vectorX, i, vectorY, j));\r\n if (createParams)\r\n mesh.addParamUV(i, j);\r\n }\r\n }\r\n let color = 0xFF5CE51A; // arbitrary color so colorIndex is different from color.\r\n const colorDiff = 0x12345;\r\n // Push elements to index array (vertices are calculated using i and j positioning for each point)\r\n let thisColorIndex = 0;\r\n for (let j = 0; j + 1 < numYVertices; j++) {\r\n for (let i = 0; i + 1 < numXVertices; i++) {\r\n const vertex00 = numXVertices * j + i;\r\n const vertex10 = vertex00 + 1;\r\n const vertex01 = vertex00 + numXVertices;\r\n const vertex11 = vertex01 + 1;\r\n if (triangulate) {\r\n // Push lower triangle\r\n mesh.addPointIndex(vertex00, true);\r\n mesh.addPointIndex(vertex10, true);\r\n mesh.addPointIndex(vertex11, false);\r\n // make color === faceIndex\r\n if (createColors) {\r\n thisColorIndex = mesh.addColor(color += colorDiff);\r\n mesh.addColorIndex(thisColorIndex);\r\n mesh.addColorIndex(thisColorIndex);\r\n mesh.addColorIndex(thisColorIndex);\r\n }\r\n // param indexing matches points . .\r\n if (createParams) {\r\n mesh.addParamIndex(vertex00);\r\n mesh.addParamIndex(vertex10);\r\n mesh.addParamIndex(vertex11);\r\n }\r\n if (createNormals) {\r\n mesh.addNormalIndex(0);\r\n mesh.addNormalIndex(0);\r\n mesh.addNormalIndex(0);\r\n }\r\n mesh.terminateFacet(false);\r\n // upper triangle\r\n mesh.addPointIndex(vertex11, true);\r\n mesh.addPointIndex(vertex01, true);\r\n mesh.addPointIndex(vertex00, false);\r\n // make color === faceIndex\r\n if (createColors) {\r\n mesh.addColorIndex(thisColorIndex);\r\n mesh.addColorIndex(thisColorIndex);\r\n mesh.addColorIndex(thisColorIndex);\r\n }\r\n // param indexing matches points.\r\n if (createParams) {\r\n mesh.addParamIndex(vertex11);\r\n mesh.addParamIndex(vertex01);\r\n mesh.addParamIndex(vertex00);\r\n }\r\n if (createNormals) {\r\n mesh.addNormalIndex(0);\r\n mesh.addNormalIndex(0);\r\n mesh.addNormalIndex(0);\r\n }\r\n mesh.terminateFacet(false);\r\n } else {\r\n // Push quad\r\n mesh.addPointIndex(vertex00, true);\r\n mesh.addPointIndex(vertex10, true);\r\n mesh.addPointIndex(vertex11, true);\r\n mesh.addPointIndex(vertex01, true);\r\n // make color === faceIndex\r\n if (createColors) {\r\n thisColorIndex = mesh.addColor(color += colorDiff);\r\n mesh.addColorIndex(thisColorIndex);\r\n mesh.addColorIndex(thisColorIndex);\r\n mesh.addColorIndex(thisColorIndex);\r\n mesh.addColorIndex(thisColorIndex);\r\n }\r\n // param indexing matches points . .\r\n if (createParams) {\r\n mesh.addParamIndex(vertex00);\r\n mesh.addParamIndex(vertex10);\r\n mesh.addParamIndex(vertex11);\r\n mesh.addParamIndex(vertex01);\r\n }\r\n if (createNormals) {\r\n mesh.addNormalIndex(0);\r\n mesh.addNormalIndex(0);\r\n mesh.addNormalIndex(0);\r\n mesh.addNormalIndex(0);\r\n }\r\n mesh.terminateFacet(false);\r\n }\r\n }\r\n }\r\n return mesh;\r\n }\r\n /** Create an xy grid of points in single array with x varying fastest. */\r\n public static createXYGrid(numU: number, numV: number, dX: number = 1.0, dY: number = 1.0): Point3d[] {\r\n const points = [];\r\n for (let j = 0; j < numV; j++) {\r\n for (let i = 0; i < numU; i++) {\r\n points.push(Point3d.create(i * dX, j * dY, 0));\r\n }\r\n }\r\n return points;\r\n }\r\n /** Create simple bspline surface on xy plane grid. */\r\n public static createXYGridBsplineSurface(numU: number, numV: number, orderU: number, orderV: number): BSplineSurface3d | undefined {\r\n return BSplineSurface3d.create(\r\n Sample.createXYGrid(numU, numV, 1.0, 1.0), numU, orderU, undefined, numV, orderV, undefined);\r\n }\r\n /**\r\n * Create a bspline surface whose poles area on circular paths.\r\n * * (BUT not weighted bspline, therefore although u and v isolines \"go around\" they are not true circles.)\r\n * @param radiusU major radius\r\n * @param radiusV minor radius\r\n * @param numU number of facets around major hoop\r\n * @param numV number of facets around minor hoop\r\n * @param orderU major hoop order\r\n * @param orderV minor hoop order\r\n */\r\n public static createPseudoTorusBsplineSurface(radiusU: number, radiusV: number, numU: number, numV: number, orderU: number, orderV: number): BSplineSurface3d | undefined {\r\n const points = [];\r\n const numUPole = numU + orderU - 1; // degreeU wrap-around poles\r\n const numVPole = numV + orderV - 1; // degreeV wrap-around poles\r\n const uKnots = KnotVector.createUniformWrapped(numU, orderU - 1, 0, 1);\r\n const vKnots = KnotVector.createUniformWrapped(numV, orderV - 1, 0, 1);\r\n const dURadians = 2.0 * Math.PI / numU;\r\n const dVRadians = 2.0 * Math.PI / numV;\r\n for (let iV = 0; iV < numVPole; iV++) {\r\n const vRadians = iV * dVRadians;\r\n const cV = Math.cos(vRadians);\r\n const sV = Math.sin(vRadians);\r\n for (let iU = 0; iU < numUPole; iU++) {\r\n const uRadians = iU * dURadians;\r\n const cU = Math.cos(uRadians);\r\n const sU = Math.sin(uRadians);\r\n const rho = radiusU + cV * radiusV;\r\n points.push(Point3d.create(rho * cU, rho * sU, sV * radiusV));\r\n }\r\n }\r\n const result = BSplineSurface3d.create(points, numUPole, orderU, uKnots.knots, numVPole, orderV, vKnots.knots);\r\n if (result) {\r\n result.setWrappable(UVSelect.uDirection, BSplineWrapMode.OpenByAddingControlPoints);\r\n result.setWrappable(UVSelect.vDirection, BSplineWrapMode.OpenByAddingControlPoints);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Create a Bspline surface for a cone.\r\n * @param centerA center at section A\r\n * @param centerB center at section B\r\n * @param radiusA radius at point A\r\n * @param radiusB radius at point B\r\n */\r\n public static createConeBsplineSurface(\r\n centerA: Point3d,\r\n centerB: Point3d,\r\n radiusA: number,\r\n radiusB: number,\r\n numSection: number): BSplineSurface3dH | undefined {\r\n if (numSection < 2)\r\n numSection = 2;\r\n const controlPoints: number[][][] = [];\r\n const numVPole = numSection;\r\n const q1 = 0.25;\r\n const q2 = 0.5;\r\n const q3 = 0.75;\r\n const uKnots = [0, 0, q1, q1, q2, q2, q3, q3, 1, 1];\r\n const vKnots = [];\r\n const dv = 1.0 / (numSection - 1);\r\n for (let i = 0; i < numSection; i++) {\r\n vKnots.push(i * dv);\r\n }\r\n const center = Point3d.create();\r\n const vectorAB = Vector3d.createStartEnd(centerA, centerB);\r\n const axes = Matrix3d.createRigidHeadsUp(vectorAB, AxisOrder.ZXY);\r\n let r0, r90, v;\r\n for (let iV = 0; iV < numVPole; iV++) {\r\n v = iV * dv;\r\n centerA.interpolate(v, centerB, center);\r\n r0 = r90 = Geometry.interpolate(radiusA, v, radiusB);\r\n controlPoints.push(Sample.createBsplineArc90SectionToXYZWArrays(center, axes, r0, r90, false));\r\n }\r\n const result = BSplineSurface3dH.createGrid(controlPoints,\r\n WeightStyle.WeightsSeparateFromCoordinates,\r\n 3, uKnots, 2, vKnots);\r\n if (result)\r\n result.setWrappable(UVSelect.uDirection, BSplineWrapMode.OpenByRemovingKnots);\r\n return result;\r\n }\r\n /** Create bspline surface on xy grid with weights. */\r\n public static createWeightedXYGridBsplineSurface(\r\n numU: number, numV: number, orderU: number, orderV: number,\r\n weight00: number = 1.0,\r\n weight10: number = 1.0,\r\n weight01: number = 1.0,\r\n weight11: number = 1.0): BSplineSurface3dH | undefined {\r\n const xyzPoles = Sample.createXYGrid(numU, numV, 1.0, 1.0);\r\n const weights = [];\r\n for (let i = 0; i < numU; i++)\r\n for (let j = 0; j < numV; j++) {\r\n const wu0 = Geometry.interpolate(weight00, i / (numU - 1), weight10);\r\n const wu1 = Geometry.interpolate(weight01, i / (numU - 1), weight11);\r\n weights.push(Geometry.interpolate(wu0, j / (numV - 1), wu1));\r\n }\r\n return BSplineSurface3dH.create(\r\n xyzPoles,\r\n weights,\r\n numU, orderU, undefined,\r\n numV, orderV, undefined,\r\n );\r\n }\r\n /** Assorted linear sweeps */\r\n public static createSimpleLinearSweeps(): LinearSweep[] {\r\n const result: LinearSweep[] = [];\r\n const base = Loop.create(LineString3d.createRectangleXY(Point3d.create(), 2, 3));\r\n const vectorZ = Vector3d.create(0, 0, 1.234);\r\n const vectorQ = Vector3d.create(0.1, 0.21, 1.234);\r\n result.push(LinearSweep.create(base, vectorZ, false)!);\r\n result.push(LinearSweep.create(base, vectorZ, true)!);\r\n result.push(LinearSweep.create(base, vectorQ, false)!);\r\n result.push(LinearSweep.create(base, vectorQ, true)!);\r\n result.push(LinearSweep.create(Sample.createCappedArcLoop(5, -45, 90), vectorQ, true)!);\r\n for (const curve of Sample.createSmoothCurvePrimitives()) {\r\n const path = Path.create(curve);\r\n result.push(LinearSweep.create(path, vectorZ, false)!);\r\n }\r\n // coordinates for a clearly unclosed linestring ....\r\n const xyPoints = [\r\n Point2d.create(0, 0),\r\n Point2d.create(1, 0),\r\n Point2d.create(1, 1),\r\n ];\r\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, false)!);\r\n // this forces artificial closure point . . .\r\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, true)!);\r\n // add a not-quite-exact closure point ...\r\n const e = 1.0e-11;\r\n xyPoints.push(Point2d.create(e, e));\r\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, false)!);\r\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, true)!);\r\n // make it a better closure\r\n xyPoints.pop();\r\n xyPoints.push(xyPoints[0]);\r\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, false)!);\r\n result.push(LinearSweep.createZSweep(xyPoints, 1, 3, true)!);\r\n // negative sweep ...\r\n result.push(LinearSweep.createZSweep(xyPoints, 1, -3, true)!);\r\n return result;\r\n }\r\n /**\r\n * Create an array of primitives with an arc centered at origin and a line segment closing back to the arc start.\r\n * This can be bundled into Path or Loop by caller.\r\n */\r\n public static createCappedArcPrimitives(radius: number, startDegrees: number, endDegrees: number): CurvePrimitive[] {\r\n const arc = Arc3d.create(\r\n Point3d.create(0, 0, 0),\r\n Vector3d.unitX(radius),\r\n Vector3d.unitY(radius),\r\n AngleSweep.createStartEndDegrees(startDegrees, endDegrees),\r\n );\r\n return [arc, LineSegment3d.create(arc.fractionToPoint(1.0), arc.fractionToPoint(0.0))];\r\n }\r\n /** Return a Path structure for a segment of arc, with closure segment */\r\n public static createCappedArcPath(radius: number, startDegrees: number, endDegrees: number): Path {\r\n return Path.createArray(Sample.createCappedArcPrimitives(radius, startDegrees, endDegrees));\r\n }\r\n /** Return a Loop structure for a segment of arc, with closure segment */\r\n public static createCappedArcLoop(radius: number, startDegrees: number, endDegrees: number): Loop {\r\n return Loop.createArray(Sample.createCappedArcPrimitives(radius, startDegrees, endDegrees));\r\n }\r\n /** Create assorted rotational sweeps. */\r\n public static createSimpleRotationalSweeps(): RotationalSweep[] {\r\n const result: RotationalSweep[] = [];\r\n // rectangle in xy plane\r\n const base = Loop.create(LineString3d.createRectangleXY(Point3d.create(1, 0, 0), 2, 3));\r\n // rotate around the y axis\r\n for (const axis of [\r\n Ray3d.createXYZUVW(0, 0, 0, 0, 1, 0),\r\n Ray3d.createXYZUVW(5, 0, 0, 0, 1, 0),\r\n Ray3d.createXYZUVW(-1, 0, 0, -1, 1, 0),\r\n ]) {\r\n result.push(RotationalSweep.create(base, axis, Angle.createDegrees(45.0), false)!);\r\n result.push(RotationalSweep.create(base, axis, Angle.createDegrees(150.0), true)!);\r\n }\r\n return result;\r\n }\r\n /** Create assorted spheres */\r\n public static createSpheres(includeEllipsoidal: boolean = false): Sphere[] {\r\n const result: Sphere[] = [];\r\n result.push(Sphere.createCenterRadius(Point3d.create(0, 0, 0), 1.0));\r\n result.push(Sphere.createCenterRadius(Point3d.create(1, 2, 3), 3.0));\r\n const s1 = Sphere.createCenterRadius(\r\n Point3d.create(1, 2, 3), 2.0,\r\n AngleSweep.createStartEndDegrees(-45, 80),\r\n );\r\n s1.capped = true;\r\n result.push(s1);\r\n // still a sphere, but with axes KIJ . .\r\n const s2 = Sphere.createFromAxesAndScales(\r\n Point3d.create(1, 2, 3),\r\n Matrix3d.createRowValues(\r\n 0, 1, 0,\r\n 0, 0, 1,\r\n 1, 0, 0,\r\n ),\r\n 4, 4, 4,\r\n AngleSweep.createStartEndDegrees(-45, 45),\r\n true,\r\n )!;\r\n result.push(s2);\r\n if (includeEllipsoidal)\r\n result.push(\r\n Sphere.createDgnSphere(\r\n Point3d.create(1, 2, 3),\r\n Vector3d.unitX(),\r\n Vector3d.unitZ(),\r\n 3,\r\n 2,\r\n AngleSweep.createFullLatitude(), false,\r\n )!,\r\n );\r\n return result;\r\n }\r\n /** Create true (non-spherical) ellipsoids. */\r\n public static createEllipsoids(): Sphere[] {\r\n return [\r\n Sphere.createEllipsoid(\r\n Transform.createOriginAndMatrix(\r\n Point3d.create(0, 0, 0),\r\n Matrix3d.createRowValues(\r\n 4, 1, 1,\r\n 1, 4, 1,\r\n 0.5, 0.2, 5),\r\n ),\r\n AngleSweep.createFullLatitude(),\r\n true,\r\n )!,\r\n ];\r\n }\r\n /** Create assorted cones. */\r\n public static createCones(): Cone[] {\r\n const result: Cone[] = [];\r\n const origin = Point3d.create(0, 0, 0);\r\n const topZ = Point3d.create(0, 0, 5);\r\n const centerA = Point3d.create(1, 2, 1);\r\n const centerB = Point3d.create(2, 3, 8);\r\n result.push(Cone.createAxisPoints(Point3d.create(0, 0, 0), Point3d.create(0, 0, 1), 0.5, 0.5, false) as Cone);\r\n result.push(Cone.createAxisPoints(centerA, centerB, 0.5, 0.5, false) as Cone);\r\n result.push(Cone.createAxisPoints(origin, topZ, 1.0, 0.2, true) as Cone);\r\n result.push(Cone.createAxisPoints(centerA, centerB, 0.2, 0.5, false) as Cone);\r\n result.push(Cone.createAxisPoints(origin, centerB, 1.0, 0.0, false) as Cone);\r\n result.push(Cone.createAxisPoints(topZ, origin, 0.0, 1.0, true) as Cone);\r\n return result;\r\n }\r\n /** Return a TorusPipe with swept circle in xz plane rotating through an angle range around the Z axis. */\r\n public static createPartialTorusAroundZ(\r\n majorRadius: number, majorSweep: Angle, minorRadius: number, minorStart: Angle, minorEnd: Angle,\r\n ): RotationalSweep {\r\n const arc = Arc3d.createXYZXYZXYZ(\r\n majorRadius, 0, 0,\r\n minorRadius, 0, 0,\r\n 0, minorRadius, 0,\r\n AngleSweep.createStartEnd(minorStart, minorEnd),\r\n );\r\n const contour = Path.create(arc);\r\n return RotationalSweep.create(contour, Ray3d.createZAxis(), majorSweep, false)!;\r\n }\r\n /** Create assorted Torus Pipes */\r\n public static createTorusPipes(): TorusPipe[] {\r\n const result: TorusPipe[] = [];\r\n const center = Point3d.create(1, 2, 3);\r\n const frame = Matrix3d.createRotationAroundVector(\r\n Vector3d.create(1, 2, 3), Angle.createRadians(10),\r\n ) as Matrix3d;\r\n const vectorX = frame.columnX();\r\n const vectorY = frame.columnY();\r\n const vectorZ = frame.columnZ();\r\n result.push(TorusPipe.createInFrame(Transform.createIdentity(), 5.0, 0.8, Angle.create360(), false)!);\r\n result.push(TorusPipe.createInFrame(Transform.createIdentity(), 5.0, 1.0, Angle.createDegrees(90), true)!);\r\n result.push(TorusPipe.createDgnTorusPipe(center, vectorX, vectorY, 10, 1, Angle.createDegrees(180), true)!);\r\n result.push(TorusPipe.createDgnTorusPipe(center, vectorY, vectorZ, 10, 1, Angle.createDegrees(45), true) as TorusPipe);\r\n return result;\r\n }\r\n /** Create assorted boxes. */\r\n public static createBoxes(capped: boolean = true): Box[] {\r\n const result: Box[] = [];\r\n const cornerA = Point3d.create(1, 2, 3);\r\n const aX = 3.0;\r\n const aY = 2.0;\r\n const bX = 1.5;\r\n const bY = 1.0;\r\n const h = 5.0;\r\n const frame = Matrix3d.createRotationAroundVector(\r\n Vector3d.create(0, 0, 1), Angle.createDegrees(10),\r\n ) as Matrix3d;\r\n const vectorX = frame.columnX();\r\n const vectorY = frame.columnY();\r\n const cornerB = Matrix3d.xyzPlusMatrixTimesCoordinates(cornerA, frame, 0, 0, h);\r\n result.push(\r\n Box.createDgnBox(\r\n cornerA, Vector3d.unitX(), Vector3d.unitY(), cornerB, aX, aY, aX, aY, capped,\r\n ) as Box,\r\n );\r\n result.push(\r\n Box.createDgnBox(\r\n cornerA, Vector3d.unitX(), Vector3d.unitY(), cornerB, aX, aY, bX, bY, capped,\r\n ) as Box,\r\n );\r\n result.push(\r\n Box.createDgnBox(\r\n cornerA, vectorX, vectorY, cornerB, aX, aY, bX, bY, capped,\r\n ) as Box,\r\n );\r\n const frameY = Matrix3d.createRotationAroundVector(\r\n Vector3d.create(0, 1, 0),\r\n Angle.createDegrees(10),\r\n ) as Matrix3d;\r\n result.push(\r\n Box.createDgnBox(\r\n cornerA, frameY.columnX(), frameY.columnY(),\r\n cornerA.plusScaled(frameY.columnZ(), h), aX, aY, bX, bY, capped,\r\n ) as Box,\r\n );\r\n return result;\r\n }\r\n /** Create an array of points for a rectangle with corners (x0,y0,z) and (x1,y1,z) */\r\n public static createRectangle(\r\n x0: number, y0: number, x1: number, y1: number, z: number = 0.0, closed: boolean = false,\r\n ): Point3d[] {\r\n const points = [\r\n Point3d.create(x0, y0, z),\r\n Point3d.create(x1, y0, z),\r\n Point3d.create(x1, y1, z),\r\n Point3d.create(x0, y1, z),\r\n ];\r\n if (closed)\r\n points.push(Point3d.create(x0, y0, z));\r\n return points;\r\n }\r\n /** Create an array of points for a rectangle with corners of a Range2d. */\r\n public static createRectangleInRange2d(range: Range2d, z: number = 0.0, closed: boolean = false): Point3d[] {\r\n const x0 = range.low.x;\r\n const x1 = range.high.x;\r\n const y0 = range.low.y;\r\n const y1 = range.high.y;\r\n return this.createRectangle(x0, y0, x1, y1, z, closed);\r\n }\r\n /** Create assorted ruled sweeps */\r\n public static createRuledSweeps(\r\n includeParityRegion: boolean = false, includeBagOfCurves: boolean = false,\r\n ): RuledSweep[] {\r\n const allSweeps = [];\r\n const contour0 = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 3, 2, 0)));\r\n const contour1 = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 3, 2.5, 2)));\r\n const contour2 = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 4, 3.5, 4)));\r\n const contour3 = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 2, 1, 7)));\r\n const allContours = [contour0, contour1, contour2];\r\n allSweeps.push(RuledSweep.create([contour0, contour1], true)!);\r\n allSweeps.push(RuledSweep.create([contour0, contour1, contour2], true)!);\r\n allSweeps.push(RuledSweep.create([contour0, contour1, contour2, contour3], true)!);\r\n allSweeps.push(RuledSweep.create(allContours, false)!);\r\n const curves = Sample.createSmoothCurvePrimitives();\r\n for (const c of curves) {\r\n const frame = c.fractionToFrenetFrame(0.0);\r\n if (frame) {\r\n const perpVector = frame.matrix.columnZ();\r\n perpVector.scaleInPlace(10.0);\r\n const c1 = c.cloneTransformed(Transform.createTranslation(perpVector)) as CurvePrimitive;\r\n allSweeps.push(RuledSweep.create([Path.create(c), Path.create(c1)], false)!);\r\n }\r\n }\r\n if (includeParityRegion) {\r\n const outer = Loop.create(LineString3d.create(this.createRectangleXY(0, 0, 5, 6, 0)));\r\n const inner = Loop.create(LineString3d.create(this.createRectangleXY(1, 1, 2, 3, 0)));\r\n const contourA = ParityRegion.create(outer, inner);\r\n const contourB = contourA.clone();\r\n contourB.tryTranslateInPlace(0, 0, 2);\r\n allSweeps.push(RuledSweep.create([contourA, contourB], false)!);\r\n }\r\n if (includeBagOfCurves) {\r\n const contourA = BagOfCurves.create(LineSegment3d.createXYZXYZ(1, 1, 0, 3, 1, 0));\r\n const contourB = BagOfCurves.create(LineSegment3d.createXYZXYZ(1, 1, 1, 3, 1, 1));\r\n allSweeps.push(RuledSweep.create([contourA, contourB], false)!);\r\n }\r\n return allSweeps;\r\n }\r\n /**\r\n * Uniformly spaced numbers\r\n * @param a0 first entry\r\n * @param delta step between entries\r\n * @param n number of entries\r\n */\r\n public static createGrowableArrayCountedSteps(a0: number, delta: number, n: number): GrowableFloat64Array {\r\n const data = new GrowableFloat64Array(n);\r\n for (let i = 0; i < n; i++)\r\n data.push(a0 + i * delta);\r\n return data;\r\n }\r\n /**\r\n * Create points on a unit circle\r\n * @param radius first entry\r\n * @param numEdge number of edges of chorded circle. Angle step is 2PI/numEdge (whether or not closed)\r\n * @param closed true to include final point (i.e. return numEdge+1 points)\r\n */\r\n public static createGrowableArrayCirclePoints(radius: number, numEdge: number, closed: boolean = false,\r\n centerX: number = 0, centerY: number = 0, data?: GrowableXYZArray): GrowableXYZArray {\r\n if (!data) data = new GrowableXYZArray();\r\n data.ensureCapacity(numEdge + (closed ? 1 : 0));\r\n const delta = 2.0 * Math.PI / numEdge;\r\n for (let i = 0; i < numEdge; i++) {\r\n const radians = i * delta;\r\n data.push(Point3d.create(centerX + radius * Math.cos(radians), centerY + radius * Math.sin(radians)));\r\n }\r\n return data;\r\n }\r\n private static pushIfDistinct(points: Point3d[], xyz: Point3d, tol: number = 1.0e-12) {\r\n if (points.length === 0 || points[points.length - 1].distanceXY(xyz) > tol)\r\n points.push(xyz);\r\n }\r\n private static appendToFractalEval(points: Point3d[], pointA: Point3d, pointB: Point3d, pattern: Point2d[], numRecursion: number, perpendicularFactor: number) {\r\n const point0 = pointA.clone();\r\n Sample.pushIfDistinct(points, pointA);\r\n for (const uv of pattern) {\r\n const point1 = pointA.interpolatePerpendicularXY(uv.x, pointB, perpendicularFactor * uv.y);\r\n if (numRecursion > 0)\r\n Sample.appendToFractalEval(points, point0, point1, pattern, numRecursion - 1, perpendicularFactor);\r\n Sample.pushIfDistinct(points, point1);\r\n point0.setFrom(point1);\r\n }\r\n Sample.pushIfDistinct(points, pointB);\r\n }\r\n /**\r\n * For each edge of points, construct a transform (with scale, rotate, and translate) that spreads the patter out along the edge.\r\n * Repeat recursively for each edge\r\n * @returns Returns an array of recursively generated fractal points\r\n * @param poles level-0 (coarse) polygon whose edges are to be replaced by recursive fractals\r\n * @param pattern pattern to map to each edge of poles (and to edges of the recursion)\r\n * @param numRecursion number of recursions\r\n * @param perpendicularFactor factor to apply to perpendicular sizing.\r\n */\r\n public static createRecursiveFractalPolygon(\r\n poles: Point3d[], pattern: Point2d[], numRecursion: number, perpendicularFactor: number,\r\n ): Point3d[] {\r\n const points: Point3d[] = [];\r\n Sample.pushIfDistinct(points, poles[0]);\r\n for (let i = 0; i + 1 < poles.length; i++) {\r\n if (numRecursion > 0)\r\n Sample.appendToFractalEval(points, poles[i], poles[i + 1], pattern, numRecursion - 1, perpendicularFactor);\r\n Sample.pushIfDistinct(points, poles[i + 1]);\r\n }\r\n return points;\r\n }\r\n /**\r\n * Primary shape is a \"triangle\" with lower edge pushed in so it becomes a mild nonconvex quad.\r\n * Fractal effects are gentle.\r\n */\r\n public static nonConvexQuadSimpleFractal(numRecursion: number, perpendicularFactor: number): Point3d[] {\r\n const pattern: Point2d[] = [\r\n Point2d.create(),\r\n Point2d.create(0.5, 0.1),\r\n Point2d.create(1.0, 0.0),\r\n ];\r\n const poles: Point3d[] = [\r\n Point3d.create(0, 0, 0),\r\n Point3d.create(0.6, 0.1, 0),\r\n Point3d.create(1, 0.1, 0),\r\n Point3d.create(0.6, 1, 0),\r\n Point3d.create(),\r\n ];\r\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\r\n }\r\n /** Create a diamond with convex fractal */\r\n public static createFractalDiamondConvexPattern(numRecursion: number, perpendicularFactor: number): Point3d[] {\r\n const pattern: Point2d[] = [\r\n Point2d.create(),\r\n Point2d.create(0.3, 0.05),\r\n Point2d.create(0.5, 0.10),\r\n Point2d.create(0.7, 0.04),\r\n Point2d.create(1.0, 0.0),\r\n ];\r\n const poles: Point3d[] = [\r\n Point3d.create(0, -1, 0),\r\n Point3d.create(1, 0, 0),\r\n Point3d.create(0, 1, 0),\r\n Point3d.create(-1, 0, 0),\r\n Point3d.create(0, -1, 0),\r\n ];\r\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\r\n }\r\n /** Create l on a square, with pattern shift to both directions. */\r\n public static createFractalSquareReversingPattern(numRecursion: number, perpendicularFactor: number): Point3d[] {\r\n const pattern: Point2d[] = [\r\n Point2d.create(),\r\n Point2d.create(0.25, 0),\r\n Point2d.create(0.5, 0.2),\r\n Point2d.create(0.75, -0.1),\r\n Point2d.create(1.0, 0.0),\r\n ];\r\n const poles: Point3d[] = [\r\n Point3d.create(),\r\n Point3d.create(1, 0, 0),\r\n Point3d.create(1, 1, 0),\r\n Point3d.create(0, 1, 0),\r\n Point3d.create(0, 0, 0),\r\n ];\r\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\r\n }\r\n /** Create a fractal on a non-convex base and reversing pattern */\r\n public static createFractalHatReversingPattern(numRecursion: number, perpendicularFactor: number): Point3d[] {\r\n const pattern: Point2d[] = [\r\n Point2d.create(),\r\n Point2d.create(0.25, 0),\r\n Point2d.create(0.25, 0.1),\r\n Point2d.create(0.50, 0.1),\r\n Point2d.create(0.50, -0.1),\r\n Point2d.create(0.75, -0.1),\r\n Point2d.create(0.75, 0),\r\n Point2d.create(1.0, 0.0),\r\n ];\r\n const poles: Point3d[] = [\r\n Point3d.create(),\r\n Point3d.create(1, 0, 0),\r\n Point3d.create(1, 1, 0),\r\n Point3d.create(0, 1, 0),\r\n Point3d.create(0, 0, 0),\r\n ];\r\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\r\n }\r\n /** Create a fractal on a primary L shape with a reversing pattern */\r\n public static createFractalLReversingPattern(numRecursion: number, perpendicularFactor: number): Point3d[] {\r\n const pattern: Point2d[] = [\r\n Point2d.create(),\r\n Point2d.create(0.25, 0),\r\n Point2d.create(0.5, 0.2),\r\n Point2d.create(0.75, -0.1),\r\n Point2d.create(1.0, 0.0),\r\n ];\r\n const poles: Point3d[] = [\r\n Point3d.create(),\r\n Point3d.create(1, 0, 0),\r\n Point3d.create(1, 1, 0),\r\n Point3d.create(2, 2, 0),\r\n Point3d.create(2, 3, 0),\r\n Point3d.create(0, 3, 0),\r\n Point3d.create(),\r\n ];\r\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\r\n }\r\n /** Fractal with fewer concavity changes.... */\r\n public static createFractalLMildConcavePatter(numRecursion: number, perpendicularFactor: number): Point3d[] {\r\n const pattern: Point2d[] = [\r\n Point2d.create(),\r\n Point2d.create(0.25, 0.05),\r\n Point2d.create(0.5, 0.15),\r\n Point2d.create(0.75, 0.05),\r\n Point2d.create(1.0, 0.0),\r\n ];\r\n const poles: Point3d[] = [\r\n Point3d.create(),\r\n Point3d.create(1, 0, 0),\r\n Point3d.create(1, 1, 0),\r\n Point3d.create(2, 2, 0),\r\n Point3d.create(1.5, 3, 0),\r\n Point3d.create(0, 3, 0),\r\n Point3d.create(),\r\n ];\r\n return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);\r\n }\r\n /** Append interpolated points from the array tail to the target. */\r\n public static appendSplits(points: Point3d[], target: Point3d, numSplit: number, includeTarget: boolean) {\r\n const pointA = points[points.length - 1];\r\n for (let i = 0; i < numSplit; i++)\r\n points.push(pointA.interpolate(i / numSplit, target));\r\n if (includeTarget)\r\n points.push(target);\r\n }\r\n /**\r\n * Triangle with 3 given vertices, and indicated extra points on each each.\r\n * @param numSplitAB number of extra points on edge AB\r\n * @param numSplitBC number of extra points on edge BC\r\n * @param numSplitCA number of extra points on edge CA\r\n * @param wrap true to replicate vertexA at end\r\n * @param xyzA vertexA\r\n * @param xyzB vertexB\r\n * @param xyzC vertexC\r\n */\r\n public static createTriangleWithSplitEdges(\r\n numSplitAB: number,\r\n numSplitBC: number,\r\n numSplitCA: number,\r\n wrap: boolean = true,\r\n xyzA: Point3d = Point3d.create(0, 0, 0),\r\n xyzB: Point3d = Point3d.create(1, 0, 0),\r\n xyzC: Point3d = Point3d.create(0, 1, 0)): Point3d[] {\r\n const result = [xyzA.clone()];\r\n Sample.appendSplits(result, xyzB, numSplitAB, true);\r\n Sample.appendSplits(result, xyzC, numSplitBC, true);\r\n Sample.appendSplits(result, xyzA, numSplitCA, wrap);\r\n return result;\r\n }\r\n /** Create a box (xyz) from half-lengths and center. */\r\n public static createCenteredBoxEdges(ax: number = 1, ay: number = 1, az: number = 0, cx: number = 0, cy: number = 0, cz: number = 0,\r\n geometry?: GeometryQuery[]): GeometryQuery[] {\r\n if (!geometry)\r\n geometry = [];\r\n const x0 = cx - ax;\r\n const y0 = cy - ay;\r\n const z0 = cz - az;\r\n const x1 = cx + ax;\r\n const y1 = cy + ay;\r\n const z1 = cz + az;\r\n for (const z of [z0, z1]) {\r\n geometry.push(\r\n LineString3d.create(\r\n Point3d.create(x0, y0, z),\r\n Point3d.create(x1, y0, z),\r\n Point3d.create(x1, y1, z),\r\n Point3d.create(x0, y1, z),\r\n Point3d.create(x0, y0, z),\r\n ),\r\n );\r\n }\r\n geometry.push(LineSegment3d.createXYZXYZ(x0, y0, z0, x0, y0, z1));\r\n geometry.push(LineSegment3d.createXYZXYZ(x1, y0, z0, x1, y0, z1));\r\n geometry.push(LineSegment3d.createXYZXYZ(x1, y1, z0, x1, y1, z1));\r\n geometry.push(LineSegment3d.createXYZXYZ(x0, y1, z0, x0, y1, z1));\r\n return geometry;\r\n }\r\n /**\r\n * Assorted transition spirals\r\n * * (All combinations of bearing radius bearing radius length subsets.)\r\n */\r\n public static createSimpleTransitionSpirals(): TransitionSpiral3d[] {\r\n // 5 spirals exercise the intricate \"4 out of 5\" input rules for spirals . ..\r\n const r1 = 1000.0;\r\n const r0 = 0.0;\r\n const averageCurvature = IntegratedSpiral3d.averageCurvatureR0R1(r0, r1);\r\n const arcLength = 100.0;\r\n const dThetaRadians = arcLength * averageCurvature;\r\n return [\r\n IntegratedSpiral3d.createFrom4OutOf5(\r\n \"clothoid\", r0, r1,\r\n Angle.createDegrees(0),\r\n Angle.createRadians(dThetaRadians),\r\n undefined,\r\n undefined,\r\n Transform.createIdentity(),\r\n )!,\r\n IntegratedSpiral3d.createFrom4OutOf5(\r\n \"bloss\", r0, r1,\r\n Angle.createDegrees(0),\r\n undefined,\r\n arcLength,\r\n undefined,\r\n Transform.createIdentity(),\r\n )!,\r\n IntegratedSpiral3d.createFrom4OutOf5(\r\n \"clothoid\", r0, r1,\r\n undefined,\r\n Angle.createRadians(dThetaRadians),\r\n arcLength,\r\n undefined,\r\n Transform.createIdentity(),\r\n )!,\r\n IntegratedSpiral3d.createFrom4OutOf5(\r\n \"biquadratic\", r0, undefined,\r\n Angle.createDegrees(0),\r\n Angle.createRadians(dThetaRadians),\r\n arcLength,\r\n undefined,\r\n Transform.createIdentity(),\r\n )!,\r\n IntegratedSpiral3d.createFrom4OutOf5(\r\n \"sine\", undefined, r1,\r\n Angle.createDegrees(0),\r\n Angle.createRadians(dThetaRadians),\r\n arcLength,\r\n undefined,\r\n Transform.createIdentity(),\r\n )!,\r\n IntegratedSpiral3d.createFrom4OutOf5(\r\n \"cosine\", r0, r1,\r\n Angle.createDegrees(0),\r\n Angle.createRadians(dThetaRadians),\r\n undefined,\r\n Segment1d.create(0, 0.5),\r\n Transform.createOriginAndMatrix(\r\n Point3d.create(1, 2, 0),\r\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\r\n ),\r\n )!,\r\n DirectSpiral3d.createFromLengthAndRadius(\r\n \"Arema\", r0, r1,\r\n Angle.createDegrees(0),\r\n undefined,\r\n arcLength,\r\n undefined,\r\n Transform.createOriginAndMatrix(\r\n Point3d.create(1, 2, 0),\r\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\r\n ),\r\n )!,\r\n DirectSpiral3d.createFromLengthAndRadius(\r\n \"ChineseCubic\", r0, r1,\r\n Angle.createDegrees(0),\r\n undefined,\r\n arcLength,\r\n undefined,\r\n Transform.createOriginAndMatrix(\r\n Point3d.create(1, 2, 0),\r\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\r\n ),\r\n )!,\r\n DirectSpiral3d.createFromLengthAndRadius(\r\n \"JapaneseCubic\", r0, r1,\r\n Angle.createDegrees(0),\r\n undefined,\r\n arcLength,\r\n undefined,\r\n Transform.createOriginAndMatrix(\r\n Point3d.create(1, 2, 0),\r\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\r\n ),\r\n )!,\r\n DirectSpiral3d.createFromLengthAndRadius(\r\n \"DirectHalfCosine\", r0, r1,\r\n Angle.createDegrees(0),\r\n undefined,\r\n arcLength,\r\n undefined,\r\n Transform.createOriginAndMatrix(\r\n Point3d.create(1, 2, 0),\r\n Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(15)),\r\n ),\r\n )!,\r\n DirectSpiral3d.createCzechCubic(Transform.createIdentity(), arcLength, r1)!,\r\n ];\r\n }\r\n /**\r\n * Create a Bezier curve with significant twist effects\r\n * * r and theta are circle in xy plane at steps in thetaStepper\r\n * * z varies with sin(phi) at steps in phiStepper.\r\n */\r\n public static createTwistingBezier(order: number,\r\n x0: number,\r\n y0: number,\r\n r: number,\r\n thetaStepper: AngleSweep,\r\n phiStepper: AngleSweep,\r\n weightInterval?: Segment1d,\r\n ): CurvePrimitive | undefined {\r\n if (weightInterval !== undefined) {\r\n const points = [];\r\n for (let i = 0; i < order; i++) {\r\n const theta = thetaStepper.fractionToRadians(i);\r\n const phi = phiStepper.fractionToRadians(i);\r\n const weight = weightInterval.fractionToPoint(i / (order - 1));\r\n points.push(\r\n Point4d.create(\r\n weight * (x0 + r * Math.cos(theta)),\r\n weight * (y0 + r * Math.sin(theta)),\r\n weight * Math.sin(phi), weight,\r\n ),\r\n );\r\n }\r\n return BezierCurve3dH.create(points)!;\r\n } else {\r\n const points = [];\r\n for (let i = 0; i < order; i++) {\r\n const theta = thetaStepper.fractionToRadians(i);\r\n const phi = phiStepper.fractionToRadians(i);\r\n points.push(Point3d.create(x0 + r * Math.cos(theta), y0 + r * Math.sin(theta), Math.sin(phi)));\r\n }\r\n return BezierCurve3d.create(points);\r\n }\r\n }\r\n /**\r\n * Create various curve chains with distance indexing.\r\n * * LineSegment\r\n * * CircularArc\r\n * * LineString\r\n * * order 3 bspline\r\n * * order 4 bspline\r\n * * alternating lines and arcs\r\n * * arc spline with corners\r\n * * arc spline with smooth joins\r\n * * interpolation curve 2 pts\r\n * * interpolation curve 3 pts\r\n * * interpolation curve >3 pts\r\n * * integrated spiral (bloss)\r\n * * direct spiral (half-cosine)\r\n */\r\n public static createCurveChainWithDistanceIndex(): CurveChainWithDistanceIndex[] {\r\n const pointsA = [\r\n Point3d.create(0, 0, 0),\r\n Point3d.create(1, 3, 0),\r\n Point3d.create(2, 4, 0),\r\n Point3d.create(3, 3, 0),\r\n Point3d.create(4, 0, 0),\r\n ];\r\n const result = [];\r\n // one singleton per basic curve type ...\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create(LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(5, 0, 0))),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create(\r\n Arc3d.createCircularStartMiddleEnd(\r\n Point3d.create(0, 0, 0), Point3d.create(3, 3, 0), Point3d.create(6, 0, 0),\r\n ),\r\n ),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create(LineString3d.create(pointsA)),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create(BSplineCurve3d.createUniformKnots(pointsA, 3)!),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create(BSplineCurve3d.createUniformKnots(pointsA, 4)!),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create(\r\n LineSegment3d.create(pointsA[0], pointsA[1]),\r\n Arc3d.createCircularStartMiddleEnd(pointsA[1], pointsA[2], pointsA[3]),\r\n LineSegment3d.create(pointsA[3], pointsA[4]),\r\n ),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create( // arc spline with corners\r\n Arc3d.createXY(Point3d.create(5, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\r\n Arc3d.createXY(Point3d.create(15, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\r\n Arc3d.createXY(Point3d.create(25, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\r\n ),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create( // arc spline with smooth joins\r\n Arc3d.createXY(Point3d.create(5, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\r\n Arc3d.createXY(Point3d.create(15, 0), 5, AngleSweep.createStartEndDegrees(180, 360)),\r\n Arc3d.createXY(Point3d.create(25, 0), 5, AngleSweep.createStartEndDegrees(180, 0)),\r\n ),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create( // 2-pt Interpolation Curve\r\n InterpolationCurve3d.createCapture(\r\n InterpolationCurve3dOptions.create(\r\n { fitPoints: [pointsA[0], pointsA[1]] },\r\n ),\r\n )!,\r\n ),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create( // 3-pt Interpolation Curve\r\n InterpolationCurve3d.createCapture(\r\n InterpolationCurve3dOptions.create(\r\n { fitPoints: [pointsA[0], pointsA[1], pointsA[2]] },\r\n ),\r\n )!,\r\n ),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create(\r\n InterpolationCurve3d.createCapture(\r\n InterpolationCurve3dOptions.create(\r\n { fitPoints: pointsA, startTangent: Point3d.create(1, -1), endTangent: Point3d.create(-1, -1) },\r\n ),\r\n )!,\r\n ),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create(\r\n IntegratedSpiral3d.createRadiusRadiusBearingBearing(\r\n Segment1d.create(0, 100),\r\n AngleSweep.createStartEndDegrees(10, 75),\r\n Segment1d.create(0, 1),\r\n Transform.createOriginAndMatrix(\r\n Point3d.createZero(), Matrix3d.createRotationAroundAxisIndex(2, Angle.createDegrees(30)),\r\n ),\r\n \"bloss\",\r\n )!,\r\n ),\r\n ),\r\n );\r\n result.push(\r\n CurveChainWithDistanceIndex.createCapture(\r\n Path.create(\r\n DirectSpiral3d.createDirectHalfCosine(\r\n Transform.createOriginAndMatrix(\r\n Point3d.createZero(), Matrix3d.createRotationAroundAxisIndex(2, Angle.createDegrees(110)),\r\n ),\r\n 50,\r\n 350,\r\n Segment1d.create(0, 1),\r\n )!,\r\n ),\r\n ),\r\n );\r\n return result;\r\n }\r\n /**\r\n * Create a square wave path.\r\n * @param numTooth number of teeth.\r\n * @param dxA x size of \"A\" part\r\n * @param dxB x size of \"B\" part\r\n * @param yA y for A part\r\n * @param yB y for B part\r\n * @param structure 1 for line segments, 2 for one linestring per tooth, 0 for single linestring\r\n */\r\n public static createSquareWavePath(\r\n numTooth: number, dxA: number, dxB: number, yA: number, yB: number, structure: number,\r\n ): Path {\r\n const dxAB = dxA + dxB;\r\n const path = Path.create();\r\n // build the whole linestring ...\r\n const allPoints = new GrowableXYZArray(4 * numTooth);\r\n let x2 = 0.0;\r\n for (let i = 0; i < numTooth; i++) {\r\n const x0 = i * dxAB;\r\n const x1 = x0 + dxA;\r\n x2 = (i + 1) * dxAB;\r\n allPoints.pushXYZ(x0, yA, 0);\r\n allPoints.pushXYZ(x1, yA, 0.0);\r\n allPoints.pushXYZ(x1, yB, 0.0);\r\n allPoints.pushXYZ(x2, yB, 0.0);\r\n }\r\n allPoints.pushXYZ(x2, yA, 0.0);\r\n const numPoints = allPoints.length;\r\n if (structure === 1) {\r\n const pointA = Point3d.create();\r\n const pointB = Point3d.create();\r\n allPoints.getPoint3dAtUncheckedPointIndex(0, pointA);\r\n for (let i1 = 0; i1 + 1 < numPoints; i1++) {\r\n allPoints.getPoint3dAtUncheckedPointIndex(i1, pointB);\r\n path.tryAddChild(LineSegment3d.create(pointA, pointB));\r\n pointA.setFromPoint3d(pointB);\r\n }\r\n } else if (structure === 2) {\r\n for (let i0 = 0; i0 + 4 < numPoints; i0 += 4) {\r\n const ls = LineString3d.create();\r\n ls.addSteppedPoints(allPoints, i0, 1, 5);\r\n path.tryAddChild(ls);\r\n }\r\n } else {\r\n const ls = LineString3d.create();\r\n ls.addSteppedPoints(allPoints, 0, 1, numPoints);\r\n path.tryAddChild(ls);\r\n }\r\n return path;\r\n }\r\n /**\r\n * Create various elliptic arcs\r\n * * circle with vector0, vector90 aligned with x,y\r\n * * circle with axes rotated\r\n * *\r\n * @param radiusRatio = vector90.magnitude / vector0.magnitude\r\n */\r\n public static createArcs(radiusRatio: number = 1.0, sweep: AngleSweep = AngleSweep.create360()): Arc3d[] {\r\n const arcs = [];\r\n const center0 = Point3d.create(0, 0, 0);\r\n const a = 1.0;\r\n const b = radiusRatio;\r\n const direction0 = Vector3d.createPolar(a, Angle.createDegrees(35.0));\r\n const direction90 = direction0.rotate90CCWXY();\r\n direction90.scaleInPlace(radiusRatio);\r\n arcs.push(Arc3d.create(center0, Vector3d.create(a, 0, 0), Vector3d.create(0, b, 0), sweep));\r\n arcs.push(Arc3d.create(center0, direction0, direction90, sweep));\r\n return arcs;\r\n }\r\n /**\r\n * Create many arcs, optionally including skews\r\n * * @param skewFactor array of skew factors. for each skew factor, all base arcs are replicated with vector90 shifted by the factor times vector0\r\n */\r\n public static createManyArcs(skewFactors: number[] = []): Arc3d[] {\r\n const result: Arc3d[] = [];\r\n const sweep1 = AngleSweep.createStartEndDegrees(-10, 75);\r\n const sweep2 = AngleSweep.createStartEndDegrees(160.0, 380.0);\r\n for (const arcs of [\r\n Sample.createArcs(1.0), Sample.createArcs(0.5),\r\n Sample.createArcs(1.0, sweep1), Sample.createArcs(0.3, sweep2),\r\n ]) {\r\n for (const arc of arcs)\r\n result.push(arc);\r\n }\r\n const numBase = result.length;\r\n for (const skewFactor of skewFactors) {\r\n for (let i = 0; i < numBase; i++) {\r\n const originalArc = result[i];\r\n result.push(Arc3d.create(originalArc.center, originalArc.vector0, originalArc.vector90.plusScaled(originalArc.vector0, skewFactor), originalArc.sweep));\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Create edges of a range box.\r\n * * Line strings on low and high z\r\n * * single lines on each low z to high z edge.\r\n * * @param range (possibly null) range\r\n */\r\n public static createRangeEdges(range: Range3d): BagOfCurves | undefined {\r\n if (range.isNull)\r\n return undefined;\r\n const corners = range.corners();\r\n return BagOfCurves.create(\r\n LineString3d.create(corners[0], corners[1], corners[3], corners[2], corners[0]),\r\n LineString3d.create(corners[4], corners[5], corners[7], corners[6], corners[4]),\r\n LineSegment3d.create(corners[0], corners[4]),\r\n LineSegment3d.create(corners[1], corners[5]),\r\n LineSegment3d.create(corners[2], corners[6]),\r\n LineSegment3d.create(corners[3], corners[7]),\r\n );\r\n }\r\n /** Create swept \"solids\" that can be capped.\r\n * * At least one of each solid type.\r\n * * each is within 10 of the origin all directions.\r\n * @param capped true to include caps\r\n * @param rotationAngle angle of rotation for the angular sweep. The default is 90 degrees.\r\n * Beware that the rotation sweep created with the default or any positive angle produces a mesh with inward normals.\r\n */\r\n public static createClosedSolidSampler(capped: boolean, rotationAngle: Angle = Angle.createDegrees(90)): SolidPrimitive[] {\r\n const result = [];\r\n result.push(Box.createRange(Range3d.createXYZXYZ(0, 0, 0, 3, 2, 5), capped)!);\r\n result.push(Cone.createAxisPoints(Point3d.create(0, 0, 0), Point3d.create(0, 0, 5), 1.0, 1.0, capped)!);\r\n result.push(Sphere.createCenterRadius(Point3d.create(0, 0, 0), 1.0));\r\n result.push(TorusPipe.createInFrame(Transform.createIdentity(), 3.0, 1.0, Angle.create360(), capped)!);\r\n const arcA = Arc3d.createXY(Point3d.create(6, 1, 0), 1.0, AngleSweep.createStartEndDegrees(-90, 0));\r\n const point0 = arcA.fractionAndDistanceToPointOnTangent(0.0, -4);\r\n const pointQ1 = arcA.fractionAndDistanceToPointOnTangent(1.0, 2);\r\n const pointQ2 = arcA.fractionAndDistanceToPointOnTangent(1.0, 0.5);\r\n const pointR1 = Point3d.create(point0.x, pointQ1.y);\r\n const pointR2 = Point3d.create(point0.x, pointQ1.y);\r\n const pointR3 = Point3d.create(pointQ1.x - 1, pointQ1.y);\r\n const pointR4 = Point3d.create(pointQ1.x - 3, pointQ1.y);\r\n const linestringQ1 = LineString3d.create(arcA.fractionToPoint(1.0), pointQ1, pointR1, point0);\r\n const linestringQ2 = LineString3d.create(arcA.fractionToPoint(1.0), pointQ2, pointR2, point0);\r\n const linestringQ3 = LineString3d.create(arcA.fractionToPoint(1.0), pointQ2, pointR3, pointR4, point0);\r\n const contourZ = Path.create(linestringQ1.clone());\r\n const contourA = Loop.create(\r\n LineSegment3d.create(point0, arcA.fractionToPoint(0)),\r\n arcA.clone(),\r\n linestringQ1.clone(),\r\n );\r\n const contourB = Loop.create(\r\n LineSegment3d.create(point0, arcA.fractionToPoint(0)),\r\n arcA.clone(),\r\n linestringQ2.clone(),\r\n );\r\n const contourC1 = Loop.create(\r\n LineSegment3d.create(point0, arcA.fractionToPoint(0)),\r\n arcA.clone(),\r\n linestringQ3.clone(),\r\n );\r\n contourB.tryTransformInPlace(Transform.createTranslationXYZ(1, 1, 3));\r\n // const contourC = contourB.cloneTransformed(Transform.createTranslationXYZ(2, 1, 4))!;\r\n result.push(LinearSweep.create(contourA, Vector3d.create(0, 0, 5), capped)!);\r\n result.push(LinearSweep.create(contourC1, Vector3d.create(0, 0, 5), capped)!);\r\n const axis = Ray3d.createXYZUVW(0, 8, 0, 1, 0, 0);\r\n result.push(RotationalSweep.create(contourA.clone(), axis.clone(), rotationAngle, capped)!);\r\n if (!capped)\r\n result.push(RotationalSweep.create(contourZ.clone(), axis.clone(), rotationAngle, false)!);\r\n result.push(RuledSweep.create([contourA.clone(), contourB.clone()], capped)!);\r\n const transformC = Transform.createScaleAboutPoint(Point3d.create(0, 0, 8), 0.5);\r\n const contourC = contourB.cloneTransformed(transformC)!;\r\n result.push(RuledSweep.create([contourA.clone(), contourB.clone(), contourC.clone()], capped)!);\r\n return result;\r\n }\r\n /**\r\n * Create points:\r\n * * `numRadialEdges` radially from origin to polar point (r,sweep.start)\r\n * * `numArcEdges` along arc from (r,sweep.start) to (r,sweep.end)\r\n * * `numRadialEdges` returning to origin.\r\n * * optionally include closure point at origin.\r\n * @param x0 center x\r\n * @param y0 center y\r\n * @param radius radius of circle.\r\n * @param sweep start and end angles of sweep.\r\n * @param numRadialEdges number of edges from center to arc\r\n * @param numArcEdges number of edges along arc\r\n * @param addClosure true to repeat center as closure point\r\n */\r\n public static createCutPie(\r\n x0: number, y0: number, radius: number, sweep: AngleSweep, numRadialEdges: number, numArcEdges: number, addClosure = false,\r\n ): Point3d[] {\r\n const points = [];\r\n const center = Point3d.create(x0, y0);\r\n points.push(center);\r\n const pointA = Point3d.create(x0 + radius * Math.cos(sweep.startRadians), y0 + radius * Math.sin(sweep.startRadians));\r\n const pointB = Point3d.create(x0 + radius * Math.cos(sweep.endRadians), y0 + radius * Math.sin(sweep.endRadians));\r\n for (let i = 1; i < numRadialEdges; i++)\r\n points.push(center.interpolate(i / numRadialEdges, pointA));\r\n points.push(pointA);\r\n for (let i = 1; i < numArcEdges; i++) {\r\n const radians = sweep.fractionToRadians(i / numArcEdges);\r\n points.push(Point3d.create(x0 + radius * Math.cos(radians), y0 + radius * Math.sin(radians)));\r\n }\r\n points.push(pointB);\r\n for (let i = 1; i < numRadialEdges; i++)\r\n points.push(pointB.interpolate(i / numRadialEdges, center));\r\n if (addClosure)\r\n points.push(center.clone());\r\n return points;\r\n }\r\n /**\r\n * * Let ay = 4\r\n * * Base polygon has vertices (0,0), (ax,0), (2*ax,0), (2* ax,ay), (ax,ay), (0,ay), (0,0).\r\n * * Shift the x coordinates of vertices 1,4 by indicated amounts (0-based numbering)\r\n * * Shift the y coordinates for points 1,2,3,4 by indicated amounts (in 0-based numbering)\r\n * * This is useful for testing non-y-monotonic face situations.\r\n * * Return as points.\r\n * @param dy1\r\n * @param dy2\r\n * @param dy3\r\n * @param dy4\r\n */\r\n public static createVerticalStaggerPolygon(\r\n dy1: number, dy2: number, dy3: number, dy4: number, ax: number, ay: number, dx1: number, dx4: number,\r\n ): Point3d[] {\r\n const points = [];\r\n points.push(Point3d.create(0, 0));\r\n points.push(Point3d.create(ax + dx1, dy1));\r\n points.push(Point3d.create(2 * ax, dy2));\r\n points.push(Point3d.create(2 * ax, ay + dy3));\r\n points.push(Point3d.create(ax + dx4, ay + dy4));\r\n points.push(Point3d.create(0.0, ay));\r\n points.push(Point3d.create(0, 0));\r\n return points;\r\n }\r\n\r\n // cspell:word creat\r\n /** @deprecated in 4.0.0 - will not be removed until after 2026-06-13. Use createVerticalStaggerPolygon instead. */\r\n public static creatVerticalStaggerPolygon(\r\n dy1: number, dy2: number, dy3: number, dy4: number, ax: number, ay: number, dx1: number, dx4: number,\r\n ): Point3d[] {\r\n return this.createVerticalStaggerPolygon(dy1, dy2, dy3, dy4, ax, ay, dx1, dx4);\r\n }\r\n\r\n /**\r\n * Make line segments for each pair of adjacent points.\r\n * @param points array of points\r\n * @param forceClosure if true, inspect coordinates to determine if a closure edge is needed.\r\n */\r\n public static convertPointsToSegments(points: Point3d[], forceClosure: boolean = false): LineSegment3d[] {\r\n const segments = [];\r\n const n = points.length;\r\n for (let i = 0; i + 1 < n; i++) {\r\n segments.push(LineSegment3d.create(points[i], points[i + 1]));\r\n }\r\n if (forceClosure && n > 1 && !points[0].isAlmostEqual(points[n - 1]))\r\n segments.push(LineSegment3d.create(points[n - 1], points[0]));\r\n return segments;\r\n }\r\n /**\r\n * Create a regular polygon\r\n * @param angle0 angle from x axis to first point.\r\n * @param numPoint number of points\r\n * @param close true to add closure edge.\r\n */\r\n public static createRegularPolygon(\r\n cx: number, cy: number, cz: number, angle0: Angle, r: number, numPoint: number, close: boolean,\r\n ): Point3d[] {\r\n const points = [];\r\n const angleStepRadians = 2.0 * Math.PI / numPoint;\r\n let radians;\r\n for (let i = 0; i < numPoint; i++) {\r\n radians = angle0.radians + i * angleStepRadians;\r\n points.push(Point3d.create(cx + r * Math.cos(radians), cy + r * Math.sin(radians), cz));\r\n }\r\n if (close)\r\n points.push(points[0].clone());\r\n return points;\r\n }\r\n /**\r\n * Create a star by alternating radii (with equal angular steps)\r\n * @param r0 first point radius\r\n * @param r1 second point radius (if undefined, this is skipped and the result is points on a circle.)\r\n * @param numPoint number of points\r\n * @param close true to add closure edge.\r\n */\r\n public static createStar(\r\n cx: number, cy: number, cz: number, r0: number, r1: number | undefined, numPoint: number, close: boolean, theta0?: Angle,\r\n ): Point3d[] {\r\n const points = [];\r\n const angleStepRadians = Math.PI / numPoint;\r\n const radians0 = theta0 === undefined ? 0.0 : theta0.radians;\r\n let radians;\r\n for (let i = 0; i < numPoint; i++) {\r\n radians = radians0 + 2 * i * angleStepRadians;\r\n points.push(Point3d.create(cx + r0 * Math.cos(radians), cy + r0 * Math.sin(radians), cz));\r\n if (r1 !== undefined) {\r\n radians = radians0 + (2 * i + 1) * angleStepRadians;\r\n points.push(Point3d.create(cx + r1 * Math.cos(radians), cy + r1 * Math.sin(radians), cz));\r\n }\r\n }\r\n if (close)\r\n points.push(points[0].clone());\r\n return points;\r\n }\r\n /**\r\n * Create an outer star A\r\n * Place multiple inner stars B with centers on circle C\r\n * @param rA0 radius to star tips on starA\r\n * @param rA1 radius to star tips on starA\r\n * @param numAPoint number of points on starA\r\n * @param rB0 radius to star B tips\r\n * @param rB1 radius to star B tips\r\n * @param numBPoint\r\n * @param rC radius for inner star centers\r\n * @param numC number of inner stars\r\n */\r\n public static createStarsInStars(rA0: number, rA1: number, numAPoint: number, rB0: number, rB1: number, numBPoint: number, rC: number, numC: number, close: boolean): Point3d[][] {\r\n const loops: Point3d[][] = [];\r\n loops.push(this.createStar(0, 0, 0, rA0, rA1, numAPoint, close));\r\n if (numC > 0) {\r\n const radiansStep = Math.PI * 2.0 / numC;\r\n for (let i = 0; i < numC; i++) {\r\n const radians = i * radiansStep;\r\n loops.push(\r\n this.createStar(rC * Math.cos(radians), rC * Math.sin(radians), 0.0, rB0, rB1, numBPoint, close),\r\n );\r\n }\r\n }\r\n return loops;\r\n }\r\n private static appendGeometry(source: GeometryQuery[], dest: GeometryQuery[]) {\r\n for (const g of source) dest.push(g);\r\n }\r\n /** Create a simple example of each GeometryQuery type .... */\r\n public static createAllGeometryQueryTypes(): GeometryQuery[] {\r\n const result: GeometryQuery[] = [];\r\n const pointA = Point3d.create(0, 0, 0);\r\n const pointB = Point3d.create(1, 0, 0);\r\n const pointC = Point3d.create(1, 1, 0);\r\n const pointD = Point3d.create(0, 1, 0);\r\n const pointABC = [pointA, pointB, pointC];\r\n const pointABCD = [pointA, pointB, pointC, pointD];\r\n const pointABCD1 = [pointA, pointB, pointC, pointD, pointA];\r\n result.push(LineSegment3d.create(pointA, pointB));\r\n result.push(CoordinateXYZ.create(pointA));\r\n result.push(Arc3d.createCircularStartMiddleEnd(pointA, pointB, pointC));\r\n result.push(PointString3d.create(pointA, pointB));\r\n result.push(\r\n IntegratedSpiral3d.createRadiusRadiusBearingBearing(\r\n Segment1d.create(0, 100),\r\n AngleSweep.createStartEndDegrees(0, 5),\r\n Segment1d.create(0, 0.5),\r\n Transform.createIdentity(),\r\n )!,\r\n );\r\n result.push(LineString3d.create(pointABCD));\r\n result.push(BezierCurve3d.create(pointABC)!);\r\n result.push(BezierCurve3dH.create(pointABC)!);\r\n result.push(BSplineCurve3d.createUniformKnots(pointABC, 3)!);\r\n result.push(BSplineCurve3dH.createUniformKnots(pointABC, 3)!);\r\n result.push(Loop.create(LineString3d.create(pointABCD1)));\r\n result.push(Path.create(LineString3d.create(pointABCD)));\r\n result.push(this.createConeBsplineSurface(pointA, pointC, 1, 2, 4)!);\r\n result.push(this.createXYGridBsplineSurface(8, 4, 4, 3)!);\r\n this.appendGeometry(this.createClosedSolidSampler(true), result);\r\n result.push(this.createTriangularUnitGridPolyface(pointA, Vector3d.unitX(), Vector3d.unitY(), 4, 5));\r\n result.push(\r\n this.createTriangularUnitGridPolyface(\r\n pointA, Vector3d.unitX(), Vector3d.unitY(), 4, 5, true, true, true, false,\r\n ),\r\n );\r\n this.appendGeometry(this.createSimpleParityRegions(), result);\r\n this.appendGeometry(this.createSimpleUnions(), result);\r\n this.appendGeometry(this.createBagOfCurves(), result);\r\n return result;\r\n }\r\n /**\r\n * Create points on a sine wave.\r\n * * Point i is origin + (i * xStep, a *sin(theta0 + i * dTheta), b * sin(beta0 + i * dBeta)).\r\n * * Default b is zero, so it is a simple sine wave.\r\n * * If the dTheta and dBeta are equal, it is a sine wave in a tilted plane.\r\n * * If dTheta and dBeta are different it is a non-planar curve.\r\n */\r\n public static createPointSineWave(\r\n origin: XYAndZ | undefined,\r\n numInterval: number = 24,\r\n xStep: number = Math.PI / 12,\r\n a: number = 1,\r\n thetaSweep: AngleSweep = AngleSweep.createStartEndDegrees(0, 360),\r\n b: number = 0,\r\n betaSweep: AngleSweep = AngleSweep.createStartEndDegrees(0, 180),\r\n ): Point3d[] {\r\n return this.createPointsByIndexFunctions(\r\n numInterval, SteppedIndexFunctionFactory.createLinear(xStep, origin ? origin.x : 0),\r\n SteppedIndexFunctionFactory.createCosine(a, thetaSweep, origin ? origin.y : 0),\r\n SteppedIndexFunctionFactory.createCosine(b, betaSweep, origin ? origin.z : 0),\r\n );\r\n }\r\n /**\r\n * Create points with x,y,z independent functions of i and numInterval,\r\n * Point3d.create (fx(i,numInterval), fy(i,numInterval), fz(i, numInterval));\r\n */\r\n public static createPointsByIndexFunctions(\r\n numInterval: number, fx: SteppedIndexFunction, fy: SteppedIndexFunction, fz?: SteppedIndexFunction,\r\n ): Point3d[] {\r\n const points = [];\r\n if (numInterval > 0) {\r\n for (let i = 0; i <= numInterval; i++) {\r\n points.push(Point3d.create(fx(i, numInterval), fy(i, numInterval), fz ? fz(i, numInterval) : 0));\r\n }\r\n }\r\n return points;\r\n }\r\n /**\r\n * Add an AuxData (with multiple AuxChannelData) using data evaluated by a function of input and xyz.\r\n * @param data existing polyface data object to receive the additional AuxChannel\r\n * @param channelIndex\r\n * @param name name of channel\r\n * @param inputName name of input\r\n * @param input0 input value for channel 0\r\n * @param inputStep step between inputs (channels)\r\n * @param numInput number of channels (inputs)\r\n * @param dataType\r\n * @param scalarFunction function to return the scalar value at (input, point)\r\n */\r\n public static addAuxDataScalarChannel(\r\n data: PolyfaceData,\r\n channelIndex: number,\r\n name: string | undefined,\r\n inputName: string | undefined,\r\n input0: number, inputStep: number, numInput: number,\r\n dataType: AuxChannelDataType,\r\n scalarFunction: (input: number, xyz: Point3d) => number,\r\n ): void {\r\n if (!data.auxData)\r\n data.auxData = new PolyfaceAuxData([], []);\r\n const channelDataArray = [];\r\n const xyz = Point3d.create();\r\n for (let i = 0; i < numInput; i++) {\r\n const input = input0 + i * inputStep;\r\n const values = [];\r\n for (let k = 0; k < data.point.length; k++) {\r\n data.point.getPoint3dAtUncheckedPointIndex(k, xyz);\r\n values.push(scalarFunction(input, xyz));\r\n }\r\n channelDataArray.push(new AuxChannelData(input, values));\r\n }\r\n const channel = new AuxChannel(channelDataArray, dataType, name, inputName);\r\n for (const _q of data.pointIndex) {\r\n data.auxData.indices.push(channelIndex);\r\n }\r\n data.auxData.channels.push(channel);\r\n }\r\n /**\r\n * Create a mesh between concentric arcs\r\n * @param edgesPerQuadrant edges per 90 degrees\r\n * @param center arc center\r\n * @param r0 first radius\r\n * @param r1 second radius\r\n * @param theta0 start angle\r\n * @param theta1 end angle.\r\n * @returns\r\n */\r\n public static createMeshInAnnulus(\r\n edgesPerQuadrant: number, center: Point3d, r0: number, r1: number, theta0: Angle, theta1: Angle,\r\n ): IndexedPolyface | undefined {\r\n const point0 = [];\r\n const point1 = [];\r\n if (edgesPerQuadrant < 1)\r\n edgesPerQuadrant = 1;\r\n let edgeCount = Math.ceil(edgesPerQuadrant * (theta1.degrees - theta0.degrees) / 90);\r\n if (edgeCount < 1)\r\n edgeCount = 1;\r\n for (let i = 0; i <= edgeCount; i++) {\r\n const theta = Angle.createInterpolate(theta0, i / edgeCount, theta1);\r\n point0.push(center.plusXYZ(r0 * theta.cos(), r0 * theta.sin(), 0));\r\n point1.push(center.plusXYZ(r1 * theta.cos(), r1 * theta.sin(), 0));\r\n }\r\n point1.reverse();\r\n const builder = PolyfaceBuilder.create();\r\n builder.addGreedyTriangulationBetweenLineStrings(point0, point1);\r\n return builder.claimPolyface();\r\n }\r\n /** Create strokes on an arc at radius r0, then returning at radius r1. */\r\n public static createAnnulusPolyline(\r\n edgesPerQuadrant: number, center: Point3d, r0: number, r1: number, theta0: Angle, theta1: Angle, addClosure: boolean,\r\n ): Point3d[] {\r\n const point0: Point3d[] = [];\r\n const point1: Point3d[] = [];\r\n if (edgesPerQuadrant < 1)\r\n edgesPerQuadrant = 1;\r\n let edgeCount = Math.ceil(edgesPerQuadrant * (theta1.degrees - theta0.degrees) / 90);\r\n if (edgeCount < 1)\r\n edgeCount = 1;\r\n for (let i = 0; i <= edgeCount; i++) {\r\n const theta = Angle.createInterpolate(theta0, i / edgeCount, theta1);\r\n point0.push(center.plusXYZ(r0 * theta.cos(), r0 * theta.sin(), 0));\r\n point1.push(center.plusXYZ(r1 * theta.cos(), r1 * theta.sin(), 0));\r\n }\r\n while (point1.length > 0)\r\n point0.push(point1.pop()!);\r\n if (addClosure)\r\n point0.push(point0[0].clone());\r\n return point0;\r\n }\r\n /**\r\n * Create a grid of lat-long points on a sphere.\r\n * * If pole latitudes appear in the evaluation, a single point (not a circle) is evaluated.\r\n * * Circles at various latitudes proceed south to north.\r\n * * If first and last angles of longitudeSweep match, that meridian is not duplicated.\r\n * * Longitudes can wrap freely.\r\n * @param transform local to world\r\n * @param numLatitudeStep number of latitude steps (poles count if they are in the sweeps)\r\n * @param numLongitudeStep number of longitude steps\r\n * @param latitudeSweep angle range for latitudes\r\n * @param longitudeSweep angle range for longitudes\r\n */\r\n public static createGridPointsOnEllipsoid(\r\n transform: Transform,\r\n numLatitudeStep: number,\r\n numLongitudeStep: number,\r\n latitudeSweep: AngleSweep = AngleSweep.createStartEndDegrees(-90, 90),\r\n longitudeSweep: AngleSweep = AngleSweep.createStartEndDegrees(0, 360),\r\n ): Point3d[] {\r\n const points: Point3d[] = [];\r\n const numJ = numLatitudeStep + 1;\r\n const jFractionStep = 1.0 / numJ;\r\n let numI = numLongitudeStep;\r\n const iFractionStep = 1.0 / numI;\r\n if (longitudeSweep.isFullCircle)\r\n numI--;\r\n for (let j = 0; j < numJ; j++) {\r\n const phi = latitudeSweep.fractionToRadians(jFractionStep * j);\r\n const sinPhi = Math.sin(phi);\r\n const cosPhi = Math.cos(phi);\r\n const numIThisCircle = Angle.isAlmostEqualRadiansAllowPeriodShift(phi, -90) ? 1 : numI;\r\n for (let i = 0; i < numIThisCircle; i++) {\r\n const theta = longitudeSweep.fractionToRadians(iFractionStep * i);\r\n const cosTheta = Math.cos(theta);\r\n const sinTheta = Math.sin(theta);\r\n points.push(transform.multiplyXYZ(cosTheta * cosPhi, sinTheta * cosPhi, sinPhi));\r\n }\r\n }\r\n return points;\r\n }\r\n /**\r\n * Return an array of points on a circular arc.\r\n * @param edgesPerQuadrant number of edges per 90 degrees\r\n * @param center arc center\r\n * @param r0 arc radius\r\n * @param theta0 start angle\r\n * @param theta1 end angle\r\n * @param addClosure true to add a closure stroke\r\n * @returns\r\n */\r\n public static createArcStrokes(\r\n edgesPerQuadrant: number, center: Point3d, r0: number, theta0: Angle, theta1: Angle, addClosure: boolean = true, z: number = 0,\r\n ): Point3d[] {\r\n const point0: Point3d[] = [];\r\n if (edgesPerQuadrant < 1)\r\n edgesPerQuadrant = 1;\r\n let edgeCount = Math.ceil(edgesPerQuadrant * (theta1.degrees - theta0.degrees) / 90);\r\n if (edgeCount < 1)\r\n edgeCount = 1;\r\n for (let i = 0; i <= edgeCount; i++) {\r\n const theta = Angle.createInterpolate(theta0, i / edgeCount, theta1);\r\n point0.push(center.plusXYZ(r0 * theta.cos(), r0 * theta.sin(), z));\r\n }\r\n if (addClosure)\r\n point0.push(point0[0].clone());\r\n return point0;\r\n }\r\n /**\r\n * Create a mesh with\r\n * * xy facets are 1x1 quads starting at origin\r\n * * acceptFunction is called to accept or reject each quad's lower left xy coordinates\r\n * @param xzPoints array of points in the xz plane. Expected to have increasing x and all integer coordinates.\r\n * @param ySweep distance to sweep in y direction\r\n * @param acceptFunction (x0: number, y0: number)=> boolean\r\n */\r\n public static sweepXZLineStringToMeshWithHoles(\r\n xzPoints: number[][], ySweep: number, acceptFunction: (x0: number, y0: number) => boolean,\r\n ): IndexedPolyface {\r\n const builder = PolyfaceBuilder.create();\r\n for (let i0 = 0; i0 + 1 < xzPoints.length; i0++) {\r\n const x0 = xzPoints[i0][0];\r\n const z0 = xzPoints[i0][1];\r\n const i1 = i0 + 1;\r\n const x1 = xzPoints[i1][0];\r\n const z1 = xzPoints[i1][1];\r\n for (let xA = x0; xA + 1 <= x1; xA++) {\r\n const xB = xA + 1;\r\n const sA = (xA - x0) / (x1 - x0);\r\n const sB = (xB - x0) / (x1 - x0);\r\n const zA = Geometry.interpolate(z0, sA, z1);\r\n const zB = Geometry.interpolate(z0, sB, z1);\r\n for (let yC = 0; yC + 1 <= ySweep; yC++) {\r\n const yD = yC + 1;\r\n if (acceptFunction(xA, yC))\r\n builder.addPolygon([\r\n Point3d.create(xA, yC, zA),\r\n Point3d.create(xB, yC, zB),\r\n Point3d.create(xB, yD, zB),\r\n Point3d.create(xA, yD, zA),\r\n ]);\r\n }\r\n }\r\n }\r\n return builder.claimPolyface(true);\r\n }\r\n /**\r\n * Successively move in directions in the steps array, creating numStroke total strokes.\r\n * * In typical use there are two entries in the steps vector, giving the effect of stair steps if they are perpendicular.\r\n * * if start is a single point, create a new point array with start as its first entry.\r\n * * if start is an array, add to it.\r\n * * if start is an empty array, push 000 as starting point.\r\n * @param start start point or prior array of points whose last is start point.\r\n * @param steps array of vectors giving step vectors.\r\n * @param numStroke number of steps to take.\r\n */\r\n public static createZigZag(start: Point3d | Point3d[], steps: Vector3d[], numStroke: number): Point3d[] {\r\n let result: Point3d[];\r\n if (Array.isArray(start)) {\r\n result = start;\r\n if (result.length === 0)\r\n result.push(Point3d.create(0, 0, 0));\r\n } else {\r\n result = [start.clone()];\r\n }\r\n let numAdded = 0;\r\n for (; ;) {\r\n for (const step of steps) {\r\n if (++numAdded > numStroke)\r\n return result;\r\n result.push(result[result.length - 1].plus(step));\r\n }\r\n }\r\n }\r\n /** Create a point on the polar parametric curve r = cos(a * theta), aka \"rose\".\r\n * @param theta angle\r\n * @param a period multiplier. If odd, this is the petal count; if even, twice the number of petals.\r\n * @param z z-coordinate for output\r\n */\r\n public static createRosePoint3d(theta: number, a: number, z: number = 0): Point3d {\r\n const r = Math.cos(a * theta);\r\n return Point3d.create(r * Math.cos(theta), r * Math.sin(theta), z);\r\n }\r\n /** Create a point on the polar parametric curve r = cos(a * theta), aka \"rose\".\r\n * @param theta angle\r\n * @param a period multiplier. If odd, this is the petal count; if even, twice the number of petals.\r\n */\r\n public static createRosePoint2d(theta: number, a: number): Point2d {\r\n return Point2d.createFrom(Sample.createRosePoint3d(theta, a));\r\n }\r\n /**\r\n * Create a mesh surface from samples of a smooth real-valued function over [0,1]x[0,1] with multiple humps and dips.\r\n * * The facets are bilinear quads, so if planar facets are required, set `options.shouldTriangulate = true`.\r\n * @param size grid size; the number of intervals on each side of the unit square domain.\r\n * @param scales = array of 4 (four) numbers to scale the corresponding Franke exponential. If undefined, all scales are 1.\r\n */\r\n public static createMeshFromFrankeSurface(\r\n size: number,\r\n options?: StrokeOptions,\r\n scales?: number[]): IndexedPolyface | undefined {\r\n const builder = PolyfaceBuilder.create(options);\r\n builder.addUVGridBody(new FrankeSurface(scales), size, size);\r\n return builder.claimPolyface(true);\r\n }\r\n /** Stroke a helix over the unit circle. Place in space via a transform.\r\n * The various columns of the transform become the critical measures for the (elliptic) helix:\r\n * The unit cylinder maps to an elliptic cylinder with x and y columns as 0 and 90 degree vectors.\r\n * the Helix pitch is equal to the length of the z axis in the transform.\r\n * The completeTurns parameter (which does NOT need to be an integer) is the local z of the last point\r\n */\r\n public static createHelixPoints(\r\n completeTurns: number,\r\n numPoints: number,\r\n placement?: Transform,\r\n ): Point3d[] {\r\n const points: Point3d[] = [];\r\n if (numPoints < 2)\r\n numPoints = 2;\r\n const dThetaRadians = completeTurns * Math.PI * 2 / (numPoints - 1);\r\n const dz = completeTurns / (numPoints - 1);\r\n for (let i = 0; i < numPoints; i++) {\r\n const thetaRadians = dThetaRadians * i;\r\n points.push(Point3d.create(Math.cos(thetaRadians), Math.sin(thetaRadians), i * dz));\r\n }\r\n if (placement)\r\n placement.multiplyPoint3dArrayInPlace(points);\r\n return points;\r\n }\r\n\r\n}\r\n"]}