@itwin/core-geometry 5.1.0-dev.0 → 5.1.0-dev.3

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 (447) hide show
  1. package/lib/cjs/Constant.js.map +1 -1
  2. package/lib/cjs/Geometry.js.map +1 -1
  3. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  4. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  5. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  7. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  9. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  10. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  11. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  12. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  13. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  14. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  15. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  16. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  17. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  18. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  19. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  20. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  21. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  22. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  23. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  24. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  25. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  26. package/lib/cjs/core-geometry.js.map +1 -1
  27. package/lib/cjs/curve/Arc3d.js.map +1 -1
  28. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  29. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  30. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  31. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  32. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  33. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  34. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  35. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  36. package/lib/cjs/curve/CurveOps.js.map +1 -1
  37. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  38. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  39. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  40. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  41. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  42. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  43. package/lib/cjs/curve/LineString3d.js.map +1 -1
  44. package/lib/cjs/curve/Loop.js.map +1 -1
  45. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  46. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  47. package/lib/cjs/curve/Path.js.map +1 -1
  48. package/lib/cjs/curve/PointString3d.js.map +1 -1
  49. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  50. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  51. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  52. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  53. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  54. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  55. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  56. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  57. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  58. package/lib/cjs/curve/RegionOps.js.map +1 -1
  59. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  60. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  61. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  62. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  63. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  64. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  65. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  66. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  67. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  68. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  69. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  70. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  71. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  72. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  73. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  74. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  75. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  76. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  77. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  78. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  79. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  80. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  81. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  82. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  83. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  84. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  85. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  86. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  87. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  88. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  89. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  90. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  91. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  92. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  93. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  94. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  95. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  96. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  97. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  98. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  99. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  100. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  101. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  102. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  103. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  104. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  105. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  106. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  107. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  108. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  109. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  110. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  111. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  112. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  113. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  114. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  115. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  116. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  117. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  118. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  119. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  120. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  121. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  122. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  123. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  124. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  125. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  126. package/lib/cjs/geometry3d/Range.js.map +1 -1
  127. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  128. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  129. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  130. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  131. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  132. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  133. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  134. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  135. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  136. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  137. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  138. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  139. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  140. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  141. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  142. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  143. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  144. package/lib/cjs/numerics/Complex.js.map +1 -1
  145. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  146. package/lib/cjs/numerics/Newton.js.map +1 -1
  147. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  148. package/lib/cjs/numerics/PolarData.js.map +1 -1
  149. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  150. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  151. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  152. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  153. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  154. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  155. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  156. package/lib/cjs/polyface/AuxData.js.map +1 -1
  157. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  158. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  159. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  160. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  161. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  162. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  163. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  164. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  165. package/lib/cjs/polyface/Polyface.js.map +1 -1
  166. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  167. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  168. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  169. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  170. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  171. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  172. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  173. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  174. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  175. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  176. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  177. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  178. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  179. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  180. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  181. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  182. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  183. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  184. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  185. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  186. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  187. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  188. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  189. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  190. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  191. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  192. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  193. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  194. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  195. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  196. package/lib/cjs/solid/Box.js.map +1 -1
  197. package/lib/cjs/solid/Cone.js.map +1 -1
  198. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  199. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  200. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  201. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  202. package/lib/cjs/solid/Sphere.js.map +1 -1
  203. package/lib/cjs/solid/SweepContour.js.map +1 -1
  204. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  205. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  206. package/lib/cjs/topology/Graph.js.map +1 -1
  207. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  208. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  209. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  210. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  211. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  212. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  213. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  214. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  215. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  216. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  217. package/lib/cjs/topology/MaskManager.js.map +1 -1
  218. package/lib/cjs/topology/Merging.js.map +1 -1
  219. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  220. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  221. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  222. package/lib/cjs/topology/Triangulation.js.map +1 -1
  223. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  224. package/lib/esm/Constant.js.map +1 -1
  225. package/lib/esm/Geometry.js.map +1 -1
  226. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  227. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  228. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  229. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  230. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  231. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  232. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  233. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  234. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  235. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  236. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  237. package/lib/esm/bspline/KnotVector.js.map +1 -1
  238. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  239. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  240. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  241. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  242. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  243. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  244. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  245. package/lib/esm/clipping/ClipVector.js.map +1 -1
  246. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  247. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  248. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  249. package/lib/esm/core-geometry.js.map +1 -1
  250. package/lib/esm/curve/Arc3d.js.map +1 -1
  251. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  252. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  253. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  254. package/lib/esm/curve/CurveCollection.js.map +1 -1
  255. package/lib/esm/curve/CurveCurve.js.map +1 -1
  256. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  257. package/lib/esm/curve/CurveFactory.js.map +1 -1
  258. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  259. package/lib/esm/curve/CurveOps.js.map +1 -1
  260. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  261. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  262. package/lib/esm/curve/CurveTypes.js.map +1 -1
  263. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  264. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  265. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  266. package/lib/esm/curve/LineString3d.js.map +1 -1
  267. package/lib/esm/curve/Loop.js.map +1 -1
  268. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  269. package/lib/esm/curve/ParityRegion.js.map +1 -1
  270. package/lib/esm/curve/Path.js.map +1 -1
  271. package/lib/esm/curve/PointString3d.js.map +1 -1
  272. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  273. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  274. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  275. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  276. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  277. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  278. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  279. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  280. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  281. package/lib/esm/curve/RegionOps.js.map +1 -1
  282. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  283. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  284. package/lib/esm/curve/UnionRegion.js.map +1 -1
  285. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  286. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  287. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  288. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  289. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  290. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  291. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  292. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  293. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  294. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  295. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  296. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  297. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  298. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  299. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  300. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  301. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  302. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  303. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  304. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  305. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  306. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  307. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  308. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  309. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  310. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  311. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  312. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  313. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  314. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  315. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  316. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  317. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  318. package/lib/esm/geometry3d/Angle.js.map +1 -1
  319. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  320. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  321. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  322. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  323. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  324. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  325. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  326. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  327. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  328. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  329. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  330. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  331. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  332. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  333. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  334. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  335. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  336. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  337. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  338. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  339. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  340. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  341. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  342. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  343. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  344. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  345. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  346. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  347. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  348. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  349. package/lib/esm/geometry3d/Range.js.map +1 -1
  350. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  351. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  352. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  353. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  354. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  355. package/lib/esm/geometry3d/Transform.js.map +1 -1
  356. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  357. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  358. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  359. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  360. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  361. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  362. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  363. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  364. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  365. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  366. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  367. package/lib/esm/numerics/Complex.js.map +1 -1
  368. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  369. package/lib/esm/numerics/Newton.js.map +1 -1
  370. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  371. package/lib/esm/numerics/PolarData.js.map +1 -1
  372. package/lib/esm/numerics/Polynomials.js.map +1 -1
  373. package/lib/esm/numerics/Quadrature.js.map +1 -1
  374. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  375. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  376. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  377. package/lib/esm/numerics/UnionFind.js.map +1 -1
  378. package/lib/esm/numerics/UsageSums.js.map +1 -1
  379. package/lib/esm/polyface/AuxData.js.map +1 -1
  380. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  381. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  382. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  383. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  384. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  385. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  386. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  387. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  388. package/lib/esm/polyface/Polyface.js.map +1 -1
  389. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  390. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  391. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  392. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  393. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  394. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  395. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  396. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  397. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  398. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  399. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  400. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  401. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  402. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  403. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  404. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  405. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  406. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  407. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  408. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  409. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  410. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  411. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  412. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  413. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  414. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  415. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  416. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  417. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  418. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  419. package/lib/esm/solid/Box.js.map +1 -1
  420. package/lib/esm/solid/Cone.js.map +1 -1
  421. package/lib/esm/solid/LinearSweep.js.map +1 -1
  422. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  423. package/lib/esm/solid/RuledSweep.js.map +1 -1
  424. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  425. package/lib/esm/solid/Sphere.js.map +1 -1
  426. package/lib/esm/solid/SweepContour.js.map +1 -1
  427. package/lib/esm/solid/TorusPipe.js.map +1 -1
  428. package/lib/esm/topology/ChainMerge.js.map +1 -1
  429. package/lib/esm/topology/Graph.js.map +1 -1
  430. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  431. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  432. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  433. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  434. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  435. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  436. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  437. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  438. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  439. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  440. package/lib/esm/topology/MaskManager.js.map +1 -1
  441. package/lib/esm/topology/Merging.js.map +1 -1
  442. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  443. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  444. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  445. package/lib/esm/topology/Triangulation.js.map +1 -1
  446. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  447. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarSubdivision.js","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { HalfEdge, HalfEdgeGraph } from \"../../topology/Graph\";\r\nimport { HalfEdgeGraphSearch } from \"../../topology/HalfEdgeGraphSearch\";\r\nimport { HalfEdgeGraphMerge } from \"../../topology/Merging\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { Loop, LoopCurveLoopCurve, SignedLoops } from \"../Loop\";\r\nimport { RegionOps } from \"../RegionOps\";\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nclass MapCurvePrimitiveToCurveLocationDetailPairArray {\r\n public primitiveToPair = new Map<CurvePrimitive, CurveLocationDetailPair[]>();\r\n // index assigned to this primitive (for debugging)\r\n public primitiveToIndex = new Map<CurvePrimitive, number>();\r\n private _numIndexedPrimitives: number = 0;\r\n public assignPrimitiveIndex(primitive: CurvePrimitive | undefined) {\r\n if (primitive !== undefined) {\r\n const index = this.primitiveToIndex.get(primitive);\r\n if (index === undefined) {\r\n this.primitiveToIndex.set(primitive, this._numIndexedPrimitives++);\r\n }\r\n }\r\n }\r\n public insertPrimitiveToPair(primitive: CurvePrimitive | undefined, pair: CurveLocationDetailPair) {\r\n if (primitive) {\r\n const priorPairs = this.primitiveToPair.get(primitive);\r\n this.assignPrimitiveIndex(primitive);\r\n if (!priorPairs) {\r\n this.primitiveToPair.set(primitive, [pair]);\r\n } else {\r\n priorPairs.push(pair);\r\n }\r\n }\r\n }\r\n public insertPair(pair: CurveLocationDetailPair) {\r\n const primitiveA = pair.detailA.curve;\r\n if (primitiveA)\r\n this.insertPrimitiveToPair(primitiveA, pair);\r\n const primitiveB = pair.detailB.curve;\r\n if (primitiveB)\r\n this.insertPrimitiveToPair(primitiveB, pair);\r\n }\r\n /** Split closed missing primitives in half and add new intersection pairs */\r\n public splitAndAppendMissingClosedPrimitives(primitives: CurvePrimitive[], tolerance: number = Geometry.smallMetricDistance) {\r\n for (const p of primitives) {\r\n let closedCurveSplitCandidate = false;\r\n if (p instanceof Arc3d)\r\n closedCurveSplitCandidate = p.sweep.isFullCircle;\r\n else if (!(p instanceof LineSegment3d) && !(p instanceof LineString3d))\r\n closedCurveSplitCandidate = p.startPoint().isAlmostEqualXY(p.endPoint(), tolerance);\r\n if (closedCurveSplitCandidate && !this.primitiveToPair.has(p)) {\r\n const p0 = p.clonePartialCurve(0.0, 0.5);\r\n const p1 = p.clonePartialCurve(0.5, 1.0);\r\n if (p0 && p1) {\r\n this.insertPair(CurveLocationDetailPair.createCapture(CurveLocationDetail.createCurveEvaluatedFraction(p0, 0.0), CurveLocationDetail.createCurveEvaluatedFraction(p1, 1.0)));\r\n this.insertPair(CurveLocationDetailPair.createCapture(CurveLocationDetail.createCurveEvaluatedFraction(p0, 1.0), CurveLocationDetail.createCurveEvaluatedFraction(p1, 0.0)));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class PlanarSubdivision {\r\n /** Create a graph from an array of curves, and an array of the curves' precomputed intersections. Z-coordinates are ignored. */\r\n public static assembleHalfEdgeGraph(primitives: CurvePrimitive[], allPairs: CurveLocationDetailPair[], mergeTolerance: number = Geometry.smallMetricDistance): HalfEdgeGraph {\r\n const detailByPrimitive = new MapCurvePrimitiveToCurveLocationDetailPairArray(); // map from key CurvePrimitive to CurveLocationDetailPair.\r\n for (const pair of allPairs)\r\n detailByPrimitive.insertPair(pair);\r\n if (primitives.length > detailByPrimitive.primitiveToPair.size)\r\n detailByPrimitive.splitAndAppendMissingClosedPrimitives(primitives, mergeTolerance); // otherwise, these single-primitive loops are missing from the graph\r\n const graph = new HalfEdgeGraph();\r\n for (const entry of detailByPrimitive.primitiveToPair.entries()) {\r\n const p = entry[0];\r\n // convert each interval intersection into two isolated intersections\r\n const details = entry[1].reduce((accumulator: CurveLocationDetailPair[], detailPair) => {\r\n if (!detailPair.detailA.hasFraction1)\r\n return [...accumulator, detailPair];\r\n const detail = getDetailOnCurve(detailPair, p)!;\r\n const detail0 = CurveLocationDetail.createCurveFractionPoint(p, detail.fraction, detail.point);\r\n const detail1 = CurveLocationDetail.createCurveFractionPoint(p, detail.fraction1!, detail.point1!);\r\n return [...accumulator, CurveLocationDetailPair.createCapture(detail0, detail0), CurveLocationDetailPair.createCapture(detail1, detail1)];\r\n }, []);\r\n // lexical sort on p intersection fraction\r\n details.sort((pairA: CurveLocationDetailPair, pairB: CurveLocationDetailPair) => {\r\n const fractionA = getFractionOnCurve(pairA, p)!;\r\n const fractionB = getFractionOnCurve(pairB, p)!;\r\n return fractionA - fractionB;\r\n });\r\n let last = {point: p.startPoint(), fraction: 0.0};\r\n for (const detailPair of details) {\r\n const detail = getDetailOnCurve(detailPair, p)!;\r\n const detailFraction = Geometry.restrictToInterval(detail.fraction, 0, 1); // truncate fraction, but don't snap point; clustering happens later\r\n last = this.addHalfEdge(graph, p, last.point, last.fraction, detail.point, detailFraction, mergeTolerance);\r\n }\r\n this.addHalfEdge(graph, p, last.point, last.fraction, p.endPoint(), 1.0, mergeTolerance);\r\n }\r\n HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he: HalfEdge) => he.sortAngle!);\r\n return graph;\r\n }\r\n /**\r\n * Create a pair of mated half edges referencing an interval of a primitive\r\n * * no action if start and end points are identical.\r\n * @param graph containing graph.\r\n * @param p the curve\r\n * @param point0 start point\r\n * @param fraction0 starting fraction\r\n * @param point1 end point\r\n * @param fraction1 end fraction\r\n * @returns end point and fraction, or start point and fraction if no action\r\n */\r\n private static addHalfEdge(graph: HalfEdgeGraph, p: CurvePrimitive, point0: Point3d, fraction0: number, point1: Point3d, fraction1: number, mergeTolerance: number = Geometry.smallMetricDistance): {point: Point3d, fraction: number} {\r\n if (point0.isAlmostEqualXY(point1, mergeTolerance))\r\n return {point: point0, fraction: fraction0};\r\n const halfEdge = graph.createEdgeXYAndZ(point0, 0, point1, 0);\r\n const detail01 = CurveLocationDetail.createCurveEvaluatedFractionFraction(p, fraction0, fraction1);\r\n const mate = halfEdge.edgeMate;\r\n halfEdge.edgeTag = detail01;\r\n halfEdge.sortData = 1.0;\r\n mate.edgeTag = detail01;\r\n mate.sortData = -1.0;\r\n halfEdge.sortAngle = sortAngle(p, fraction0, false);\r\n mate.sortAngle = sortAngle(p, fraction1, true);\r\n return {point: point1, fraction: fraction1};\r\n }\r\n /**\r\n * Based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.\r\n * @param zeroAreaTolerance absolute area tolerance for sliver face detection\r\n * @param isSliverFace whether the loop is known a priori (e.g., via topology) to have zero area\r\n * @returns the area (forced to zero if within tolerance)\r\n */\r\n public static collectSignedLoop(loop: Loop, outLoops: SignedLoops, zeroAreaTolerance: number = 1.0e-10, isSliverFace?: boolean): number{\r\n let area = isSliverFace ? 0.0 : RegionOps.computeXYArea(loop);\r\n if (area === undefined)\r\n area = 0;\r\n if (Math.abs(area) < zeroAreaTolerance)\r\n area = 0.0;\r\n (loop as any).computedAreaInPlanarSubdivision = area;\r\n if (area > 0)\r\n outLoops.positiveAreaLoops.push(loop);\r\n else if (area < 0)\r\n outLoops.negativeAreaLoops.push(loop);\r\n else\r\n outLoops.slivers.push(loop);\r\n return area;\r\n }\r\n public static createLoopInFace(faceSeed: HalfEdge,\r\n announce?: (he: HalfEdge, curve: CurvePrimitive, loop: Loop) => void): Loop {\r\n let he = faceSeed;\r\n const loop = Loop.create();\r\n do {\r\n const detail = he.edgeTag as CurveLocationDetail;\r\n if (detail) {\r\n let curve;\r\n if (he.sortData! > 0)\r\n curve = detail.curve!.clonePartialCurve(detail.fraction, detail.fraction1!);\r\n else\r\n curve = detail.curve!.clonePartialCurve(detail.fraction1!, detail.fraction);\r\n if (curve) {\r\n if (announce !== undefined)\r\n announce(he, curve, loop);\r\n loop.tryAddChild(curve);\r\n }\r\n }\r\n he = he.faceSuccessor;\r\n } while (he !== faceSeed);\r\n return loop;\r\n }\r\n // Return true if there are only two edges in the face loop, and their start curvatures are the same.\r\n private static isNullFace(he: HalfEdge): boolean {\r\n const faceHasTwoEdges = (he.faceSuccessor.faceSuccessor === he);\r\n let faceIsBanana = false;\r\n if (faceHasTwoEdges) {\r\n const c0 = HalfEdgeGraphMerge.curvatureSortKey(he);\r\n const c1 = HalfEdgeGraphMerge.curvatureSortKey(he.faceSuccessor.edgeMate);\r\n if (!Geometry.isSameCoordinate(c0, c1)) // default tol!\r\n faceIsBanana = true; // heuristic: we could also check end curvatures, and/or higher derivatives...\r\n }\r\n return faceHasTwoEdges && !faceIsBanana;\r\n }\r\n // Look across edge mates (possibly several) for a nonnull mate face.\r\n private static nonNullEdgeMate(_graph: HalfEdgeGraph, e: HalfEdge): HalfEdge | undefined {\r\n if (this.isNullFace (e))\r\n return undefined;\r\n let e1 = e.edgeMate;\r\n while (this.isNullFace(e1)){\r\n e1 = e1.faceSuccessor.edgeMate;\r\n if (e1 === e)\r\n return undefined;\r\n }\r\n return e1;\r\n }\r\n public static collectSignedLoopSetsInHalfEdgeGraph(graph: HalfEdgeGraph, zeroAreaTolerance: number = 1.0e-10): SignedLoops[] {\r\n const q = HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, undefined);\r\n const result: SignedLoops[] = [];\r\n const edgeMap = new Map<HalfEdge, LoopCurveLoopCurve>();\r\n for (const faceSeeds of q) {\r\n const componentAreas: SignedLoops = { positiveAreaLoops: [], negativeAreaLoops: [], slivers: [] };\r\n const edges: LoopCurveLoopCurve[] = [];\r\n for (const faceSeed of faceSeeds) {\r\n const isNullFace = this.isNullFace(faceSeed);\r\n const loop = this.createLoopInFace(faceSeed, (he: HalfEdge, curveC: CurvePrimitive, loopC: Loop) => {\r\n if (!isNullFace) {\r\n const mate = this.nonNullEdgeMate(graph, he);\r\n if (mate !== undefined) {\r\n const e = edgeMap.get(mate);\r\n if (e === undefined) {\r\n // Record this as loopA,edgeA of a shared edge to be completed later from the other side of the edge\r\n const e1 = new LoopCurveLoopCurve(loopC, curveC, undefined, undefined);\r\n edgeMap.set(he, e1);\r\n } else if (e instanceof LoopCurveLoopCurve) {\r\n e.setB(loopC, curveC);\r\n edges.push(e);\r\n edgeMap.delete(mate);\r\n }\r\n }\r\n }\r\n });\r\n this.collectSignedLoop(loop, componentAreas, zeroAreaTolerance, isNullFace);\r\n }\r\n componentAreas.edges = edges;\r\n result.push(componentAreas);\r\n edgeMap.clear();\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nfunction sortAngle(curve: CurvePrimitive, fraction: number, reverse: boolean): number {\r\n const ray = curve.fractionToPointAndDerivative(fraction);\r\n const s = reverse ? -1.0 : 1.0;\r\n return Math.atan2(s * ray.direction.y, s * ray.direction.x);\r\n}\r\n\r\nfunction getFractionOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): number | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA.fraction;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB.fraction;\r\n return undefined;\r\n}\r\nfunction getDetailOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): CurveLocationDetail | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB;\r\n return undefined;\r\n}\r\n"]}
1
+ {"version":3,"file":"PlanarSubdivision.js","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\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*--------------------------------------------------------------------------------------------*/\nimport { Geometry } from \"../../Geometry\";\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\nimport { HalfEdge, HalfEdgeGraph } from \"../../topology/Graph\";\nimport { HalfEdgeGraphSearch } from \"../../topology/HalfEdgeGraphSearch\";\nimport { HalfEdgeGraphMerge } from \"../../topology/Merging\";\nimport { Arc3d } from \"../Arc3d\";\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { LineSegment3d } from \"../LineSegment3d\";\nimport { LineString3d } from \"../LineString3d\";\nimport { Loop, LoopCurveLoopCurve, SignedLoops } from \"../Loop\";\nimport { RegionOps } from \"../RegionOps\";\n\n/** @packageDocumentation\n * @module Curve\n */\n\nclass MapCurvePrimitiveToCurveLocationDetailPairArray {\n public primitiveToPair = new Map<CurvePrimitive, CurveLocationDetailPair[]>();\n // index assigned to this primitive (for debugging)\n public primitiveToIndex = new Map<CurvePrimitive, number>();\n private _numIndexedPrimitives: number = 0;\n public assignPrimitiveIndex(primitive: CurvePrimitive | undefined) {\n if (primitive !== undefined) {\n const index = this.primitiveToIndex.get(primitive);\n if (index === undefined) {\n this.primitiveToIndex.set(primitive, this._numIndexedPrimitives++);\n }\n }\n }\n public insertPrimitiveToPair(primitive: CurvePrimitive | undefined, pair: CurveLocationDetailPair) {\n if (primitive) {\n const priorPairs = this.primitiveToPair.get(primitive);\n this.assignPrimitiveIndex(primitive);\n if (!priorPairs) {\n this.primitiveToPair.set(primitive, [pair]);\n } else {\n priorPairs.push(pair);\n }\n }\n }\n public insertPair(pair: CurveLocationDetailPair) {\n const primitiveA = pair.detailA.curve;\n if (primitiveA)\n this.insertPrimitiveToPair(primitiveA, pair);\n const primitiveB = pair.detailB.curve;\n if (primitiveB)\n this.insertPrimitiveToPair(primitiveB, pair);\n }\n /** Split closed missing primitives in half and add new intersection pairs */\n public splitAndAppendMissingClosedPrimitives(primitives: CurvePrimitive[], tolerance: number = Geometry.smallMetricDistance) {\n for (const p of primitives) {\n let closedCurveSplitCandidate = false;\n if (p instanceof Arc3d)\n closedCurveSplitCandidate = p.sweep.isFullCircle;\n else if (!(p instanceof LineSegment3d) && !(p instanceof LineString3d))\n closedCurveSplitCandidate = p.startPoint().isAlmostEqualXY(p.endPoint(), tolerance);\n if (closedCurveSplitCandidate && !this.primitiveToPair.has(p)) {\n const p0 = p.clonePartialCurve(0.0, 0.5);\n const p1 = p.clonePartialCurve(0.5, 1.0);\n if (p0 && p1) {\n this.insertPair(CurveLocationDetailPair.createCapture(CurveLocationDetail.createCurveEvaluatedFraction(p0, 0.0), CurveLocationDetail.createCurveEvaluatedFraction(p1, 1.0)));\n this.insertPair(CurveLocationDetailPair.createCapture(CurveLocationDetail.createCurveEvaluatedFraction(p0, 1.0), CurveLocationDetail.createCurveEvaluatedFraction(p1, 0.0)));\n }\n }\n }\n }\n}\n\n/**\n * @internal\n */\nexport class PlanarSubdivision {\n /** Create a graph from an array of curves, and an array of the curves' precomputed intersections. Z-coordinates are ignored. */\n public static assembleHalfEdgeGraph(primitives: CurvePrimitive[], allPairs: CurveLocationDetailPair[], mergeTolerance: number = Geometry.smallMetricDistance): HalfEdgeGraph {\n const detailByPrimitive = new MapCurvePrimitiveToCurveLocationDetailPairArray(); // map from key CurvePrimitive to CurveLocationDetailPair.\n for (const pair of allPairs)\n detailByPrimitive.insertPair(pair);\n if (primitives.length > detailByPrimitive.primitiveToPair.size)\n detailByPrimitive.splitAndAppendMissingClosedPrimitives(primitives, mergeTolerance); // otherwise, these single-primitive loops are missing from the graph\n const graph = new HalfEdgeGraph();\n for (const entry of detailByPrimitive.primitiveToPair.entries()) {\n const p = entry[0];\n // convert each interval intersection into two isolated intersections\n const details = entry[1].reduce((accumulator: CurveLocationDetailPair[], detailPair) => {\n if (!detailPair.detailA.hasFraction1)\n return [...accumulator, detailPair];\n const detail = getDetailOnCurve(detailPair, p)!;\n const detail0 = CurveLocationDetail.createCurveFractionPoint(p, detail.fraction, detail.point);\n const detail1 = CurveLocationDetail.createCurveFractionPoint(p, detail.fraction1!, detail.point1!);\n return [...accumulator, CurveLocationDetailPair.createCapture(detail0, detail0), CurveLocationDetailPair.createCapture(detail1, detail1)];\n }, []);\n // lexical sort on p intersection fraction\n details.sort((pairA: CurveLocationDetailPair, pairB: CurveLocationDetailPair) => {\n const fractionA = getFractionOnCurve(pairA, p)!;\n const fractionB = getFractionOnCurve(pairB, p)!;\n return fractionA - fractionB;\n });\n let last = {point: p.startPoint(), fraction: 0.0};\n for (const detailPair of details) {\n const detail = getDetailOnCurve(detailPair, p)!;\n const detailFraction = Geometry.restrictToInterval(detail.fraction, 0, 1); // truncate fraction, but don't snap point; clustering happens later\n last = this.addHalfEdge(graph, p, last.point, last.fraction, detail.point, detailFraction, mergeTolerance);\n }\n this.addHalfEdge(graph, p, last.point, last.fraction, p.endPoint(), 1.0, mergeTolerance);\n }\n HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he: HalfEdge) => he.sortAngle!);\n return graph;\n }\n /**\n * Create a pair of mated half edges referencing an interval of a primitive\n * * no action if start and end points are identical.\n * @param graph containing graph.\n * @param p the curve\n * @param point0 start point\n * @param fraction0 starting fraction\n * @param point1 end point\n * @param fraction1 end fraction\n * @returns end point and fraction, or start point and fraction if no action\n */\n private static addHalfEdge(graph: HalfEdgeGraph, p: CurvePrimitive, point0: Point3d, fraction0: number, point1: Point3d, fraction1: number, mergeTolerance: number = Geometry.smallMetricDistance): {point: Point3d, fraction: number} {\n if (point0.isAlmostEqualXY(point1, mergeTolerance))\n return {point: point0, fraction: fraction0};\n const halfEdge = graph.createEdgeXYAndZ(point0, 0, point1, 0);\n const detail01 = CurveLocationDetail.createCurveEvaluatedFractionFraction(p, fraction0, fraction1);\n const mate = halfEdge.edgeMate;\n halfEdge.edgeTag = detail01;\n halfEdge.sortData = 1.0;\n mate.edgeTag = detail01;\n mate.sortData = -1.0;\n halfEdge.sortAngle = sortAngle(p, fraction0, false);\n mate.sortAngle = sortAngle(p, fraction1, true);\n return {point: point1, fraction: fraction1};\n }\n /**\n * Based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.\n * @param zeroAreaTolerance absolute area tolerance for sliver face detection\n * @param isSliverFace whether the loop is known a priori (e.g., via topology) to have zero area\n * @returns the area (forced to zero if within tolerance)\n */\n public static collectSignedLoop(loop: Loop, outLoops: SignedLoops, zeroAreaTolerance: number = 1.0e-10, isSliverFace?: boolean): number{\n let area = isSliverFace ? 0.0 : RegionOps.computeXYArea(loop);\n if (area === undefined)\n area = 0;\n if (Math.abs(area) < zeroAreaTolerance)\n area = 0.0;\n (loop as any).computedAreaInPlanarSubdivision = area;\n if (area > 0)\n outLoops.positiveAreaLoops.push(loop);\n else if (area < 0)\n outLoops.negativeAreaLoops.push(loop);\n else\n outLoops.slivers.push(loop);\n return area;\n }\n public static createLoopInFace(faceSeed: HalfEdge,\n announce?: (he: HalfEdge, curve: CurvePrimitive, loop: Loop) => void): Loop {\n let he = faceSeed;\n const loop = Loop.create();\n do {\n const detail = he.edgeTag as CurveLocationDetail;\n if (detail) {\n let curve;\n if (he.sortData! > 0)\n curve = detail.curve!.clonePartialCurve(detail.fraction, detail.fraction1!);\n else\n curve = detail.curve!.clonePartialCurve(detail.fraction1!, detail.fraction);\n if (curve) {\n if (announce !== undefined)\n announce(he, curve, loop);\n loop.tryAddChild(curve);\n }\n }\n he = he.faceSuccessor;\n } while (he !== faceSeed);\n return loop;\n }\n // Return true if there are only two edges in the face loop, and their start curvatures are the same.\n private static isNullFace(he: HalfEdge): boolean {\n const faceHasTwoEdges = (he.faceSuccessor.faceSuccessor === he);\n let faceIsBanana = false;\n if (faceHasTwoEdges) {\n const c0 = HalfEdgeGraphMerge.curvatureSortKey(he);\n const c1 = HalfEdgeGraphMerge.curvatureSortKey(he.faceSuccessor.edgeMate);\n if (!Geometry.isSameCoordinate(c0, c1)) // default tol!\n faceIsBanana = true; // heuristic: we could also check end curvatures, and/or higher derivatives...\n }\n return faceHasTwoEdges && !faceIsBanana;\n }\n // Look across edge mates (possibly several) for a nonnull mate face.\n private static nonNullEdgeMate(_graph: HalfEdgeGraph, e: HalfEdge): HalfEdge | undefined {\n if (this.isNullFace (e))\n return undefined;\n let e1 = e.edgeMate;\n while (this.isNullFace(e1)){\n e1 = e1.faceSuccessor.edgeMate;\n if (e1 === e)\n return undefined;\n }\n return e1;\n }\n public static collectSignedLoopSetsInHalfEdgeGraph(graph: HalfEdgeGraph, zeroAreaTolerance: number = 1.0e-10): SignedLoops[] {\n const q = HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, undefined);\n const result: SignedLoops[] = [];\n const edgeMap = new Map<HalfEdge, LoopCurveLoopCurve>();\n for (const faceSeeds of q) {\n const componentAreas: SignedLoops = { positiveAreaLoops: [], negativeAreaLoops: [], slivers: [] };\n const edges: LoopCurveLoopCurve[] = [];\n for (const faceSeed of faceSeeds) {\n const isNullFace = this.isNullFace(faceSeed);\n const loop = this.createLoopInFace(faceSeed, (he: HalfEdge, curveC: CurvePrimitive, loopC: Loop) => {\n if (!isNullFace) {\n const mate = this.nonNullEdgeMate(graph, he);\n if (mate !== undefined) {\n const e = edgeMap.get(mate);\n if (e === undefined) {\n // Record this as loopA,edgeA of a shared edge to be completed later from the other side of the edge\n const e1 = new LoopCurveLoopCurve(loopC, curveC, undefined, undefined);\n edgeMap.set(he, e1);\n } else if (e instanceof LoopCurveLoopCurve) {\n e.setB(loopC, curveC);\n edges.push(e);\n edgeMap.delete(mate);\n }\n }\n }\n });\n this.collectSignedLoop(loop, componentAreas, zeroAreaTolerance, isNullFace);\n }\n componentAreas.edges = edges;\n result.push(componentAreas);\n edgeMap.clear();\n }\n return result;\n }\n}\n\nfunction sortAngle(curve: CurvePrimitive, fraction: number, reverse: boolean): number {\n const ray = curve.fractionToPointAndDerivative(fraction);\n const s = reverse ? -1.0 : 1.0;\n return Math.atan2(s * ray.direction.y, s * ray.direction.x);\n}\n\nfunction getFractionOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): number | undefined {\n if (pair.detailA.curve === curve)\n return pair.detailA.fraction;\n if (pair.detailB.curve === curve)\n return pair.detailB.fraction;\n return undefined;\n}\nfunction getDetailOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): CurveLocationDetail | undefined {\n if (pair.detailA.curve === curve)\n return pair.detailA;\n if (pair.detailB.curve === curve)\n return pair.detailB;\n return undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"StrokeCountChain.js","sourceRoot":"","sources":["../../../../src/curve/Query/StrokeCountChain.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range1d } from \"../../geometry3d/Range\";\r\nimport { AnyCurve } from \"../CurveTypes\";\r\nimport { CurveChain, CurveCollection } from \"../CurveCollection\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { Loop } from \"../Loop\";\r\nimport { ParityRegion } from \"../ParityRegion\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\nimport { StrokeCountMap } from \"./StrokeCountMap\";\r\n\r\n// cspell:word remapa\r\n/**\r\n * abstract methods for callbacks during sweeps of collections of StrokeCount Structures.\r\n * * A set of StrokeCountMaps are to be visited multiple times.\r\n * * The logic that controls the sweep is as below.\r\n * * The callback object controls the number of sweeps and can adapt its action to the respective sweeps.\r\n * * Note that a \"false\" from cb.startPass() terminates passes for this chainIndex and primitiveIndex, but all others exit the whole sequence.\r\n * * This logic occurs 2 or three levels deep\r\n * * outer level is \"chains\". Simple swept path or loops have only one outer; parity regions have one outer per loop of the parity region\r\n * * second level is primitive within chain.\r\n * * If the primitives in a set are \"single component\", second level is lowest.\r\n * * startSweep() and endSweep() calls are two parameters, with undefined componentIndex\r\n * * If the primitives in a set are multi-component, there is a third level looping through corresponding components.\r\n * `\r\n * if (!cb.startSweeps (chainIndex, primitiveIndex, componentIndex))\r\n * return false;\r\n * for (let pass = 0;cb.startPass (pass); pass++){\r\n * for (each map in working set)\r\n * if (!cb.visit (pass, map)) return false;\r\n * if (!cb.endPass ()) return false;\r\n * }\r\n * }\r\n * if (!cb.endSweeps (chainIndex, primitiveIndex, componentIndex)) return false;\r\n * return true;\r\n * `\r\n * @internal\r\n */\r\nexport abstract class StrokeCountMapMultipassVisitor {\r\n /**\r\n * called to announce the beginning of one or more sweeps through related StrokeCountMap's\r\n * @param chainIndex index of loop or path within the various contours.\r\n * @param primitiveIndex index of primitive within the loop or path.\r\n * @param componentIndex optional component index.\r\n * @returns the number of sweeps to perform.\r\n */\r\n public startSweeps(_chainIndex: number, _primitiveIndex: number, _componentIndex?: number): boolean { return true; }\r\n /**\r\n * announce the beginning of a sweep pass.\r\n * @param pass the index (0,1...) for this sweep pass.\r\n * @return true to execute this pass. false to break from the pass loop (next method called is endSweeps)\r\n */\r\n public abstract startPass(pass: number): boolean;\r\n public abstract visit(pass: number, map: StrokeCountMap): boolean;\r\n /**\r\n * announce the end of a pass\r\n * @param pass the index (0,1...) for this sweep pass.\r\n * @return true to continue the sweeps.\r\n */\r\n\r\n public abstract endPass(pass: number): boolean;\r\n /**\r\n * announce the end of handling for particular chainIndex and primitiveIndex;\r\n * @return true to continue outer loops.\r\n */\r\n public endSweeps(_chainIndex: number, _primitiveIndex: number, _componentIndex?: number): boolean { return true; }\r\n\r\n}\r\n/**\r\n * * pass 1: determine max numStroke\r\n * * pass 2: impose max numStroke\r\n * @internal\r\n */\r\nexport class StrokeCountMapVisitorApplyMaxCount extends StrokeCountMapMultipassVisitor {\r\n public myMap: StrokeCountMap;\r\n public constructor() {\r\n super();\r\n this.myMap = StrokeCountMap.createWithComponentIndex();\r\n }\r\n /** set up for a pass through corresponding maps. */\r\n public startPass(pass: number): boolean {\r\n if (pass === 0) {\r\n this.myMap.numStroke = 0;\r\n return true;\r\n } else if (pass === 1) {\r\n // nothing to change == numStroke will be applied to each primitive.\r\n return true;\r\n }\r\n // all other pass numbers are rejected ...\r\n return false;\r\n }\r\n /** visit one of the set of corresponding maps. */\r\n public visit(pass: number, map: StrokeCountMap): boolean {\r\n if (pass === 0) {\r\n if (map.numStroke > this.myMap.numStroke)\r\n this.myMap.numStroke = map.numStroke;\r\n return true;\r\n } else if (pass === 1) {\r\n // apply the max from prior pass\r\n map.numStroke = this.myMap.numStroke;\r\n return true;\r\n }\r\n // no other pass values should happen -- canceled by startPass.\r\n return false;\r\n }\r\n\r\n public endPass(_pass: number): boolean { return true; }\r\n}\r\n/**\r\n * * pass 1: determine max curveLength among maps presented.\r\n * * pass 2: set the a0 and a1 values to 0 and that max distance\r\n * @internal\r\n */\r\nexport class StrokeCountMapVisitorApplyMaxCurveLength extends StrokeCountMapMultipassVisitor {\r\n public maxCurveLength: number;\r\n public constructor() {\r\n super();\r\n this.maxCurveLength = 0.0;\r\n }\r\n /** set up for a pass through corresponding maps. */\r\n public startPass(pass: number): boolean {\r\n if (pass === 0) {\r\n this.maxCurveLength = 0;\r\n return true;\r\n } else if (pass === 1) {\r\n // nothing to change == numStroke will be applied to each primitive.\r\n return true;\r\n }\r\n // all other pass numbers are rejected ...\r\n return false;\r\n }\r\n /** visit one of the set of corresponding maps. */\r\n public visit(pass: number, map: StrokeCountMap): boolean {\r\n if (pass === 0) {\r\n this.maxCurveLength = Geometry.maxXY(map.curveLength, this.maxCurveLength);\r\n return true;\r\n } else if (pass === 1) {\r\n // apply the max from prior pass\r\n map.a0 = 0.0;\r\n map.a1 = this.maxCurveLength;\r\n return true;\r\n }\r\n // no other pass values should happen -- canceled by startPass.\r\n return false;\r\n }\r\n\r\n public endPass(_pass: number): boolean { return true; }\r\n}\r\n/**\r\n * class `StrokeCountChain` contains:\r\n * * `maps` = an array of `StrokeCountMap`\r\n * * `parent` = parent CurveCollection.\r\n *\r\n * An instance is normally created with either a `Path` or `Loop` as the parent.\r\n */\r\nexport class StrokeCountChain {\r\n public maps: StrokeCountMap[];\r\n public parent?: CurveCollection;\r\n /**\r\n * options are used (with different purposes) at two times:\r\n * * When the StrokeCountChain is created, the options affect the stroke counts. This is just creating markup, not actual strokes.\r\n * * When actual stroking happens, the options control creation of parameters and tangents.\r\n */\r\n public options?: StrokeOptions;\r\n\r\n private constructor(parent?: CurveCollection, options?: StrokeOptions) {\r\n this.parent = parent;\r\n this.maps = [];\r\n this.options = options;\r\n }\r\n public static createForCurveChain(chain: CurveChain, options?: StrokeOptions): StrokeCountChain {\r\n const result = new StrokeCountChain(chain, options);\r\n result.parent = chain;\r\n // A chain can only contain primitives !!!!\r\n for (const p of chain.children) {\r\n p.computeAndAttachRecursiveStrokeCounts(options);\r\n if (p.strokeData)\r\n result.maps.push(p.strokeData);\r\n }\r\n return result;\r\n }\r\n public getStrokes(): LineString3d {\r\n const ls = LineString3d.create();\r\n if (this.options) {\r\n if (this.options.needNormals || this.options.needParams) {\r\n ls.ensureEmptyFractions();\r\n ls.ensureEmptyDerivatives();\r\n ls.ensureEmptyUVParams();\r\n }\r\n }\r\n for (const m of this.maps) {\r\n if (m.primitive)\r\n m.primitive.addMappedStrokesToLineString3D(m, ls);\r\n }\r\n return ls;\r\n\r\n }\r\n /** internal form of */\r\n private static applySummed01LimitsWithinArray(maps: StrokeCountMap[], incomingSum: number): number {\r\n let movingSum = incomingSum;\r\n for (const m of maps) {\r\n m.a0 += movingSum;\r\n if (m.componentData) {\r\n m.a1 = this.applySummed01LimitsWithinArray(m.componentData, m.a0);\r\n } else {\r\n m.a1 += movingSum;\r\n }\r\n movingSum = m.a1;\r\n }\r\n return movingSum;\r\n }\r\n /**\r\n * walk the maps in the array.\r\n * * in maps with no component data\r\n * * increment map.a0 and map.a1 by the incoming distance a0\r\n * * in maps with component data:\r\n * * recurse through the component array.\r\n * * increment map.a0 by the incoming a0.\r\n * * returned a1 from the componentData array becomes a1\r\n * @returns upper value of a1 in final map.\r\n * @param maps\r\n * @param incomingSum lower value to add to a0 for first map.\r\n */\r\n public applySummed01Limits(incomingSum: number): number {\r\n return StrokeCountChain.applySummed01LimitsWithinArray(this.maps, incomingSum);\r\n }\r\n}\r\n\r\n/**\r\n * class `StrokeCountSection`\\\r\n * * contains an array of `StrokeCountChain`.\r\n * * Hence it is the internal node level of a (1-level-deep) tree of `StrokeCountChain`\r\n * @internal\r\n */\r\nexport class StrokeCountSection {\r\n public chains: StrokeCountChain[];\r\n public parent?: CurveCollection;\r\n private constructor(parent?: CurveCollection) { this.parent = parent; this.chains = []; }\r\n /**\r\n * construct array of arrays of `StrokeCountMap`s\r\n * @param parent\r\n */\r\n public static createForParityRegionOrChain(parent: CurveCollection, options?: StrokeOptions): StrokeCountSection {\r\n const result = new StrokeCountSection(parent);\r\n if (parent instanceof ParityRegion) {\r\n for (const child of parent.children) {\r\n const p = StrokeCountChain.createForCurveChain(child, options);\r\n result.chains.push(p);\r\n }\r\n } else if (parent instanceof CurveChain) {\r\n result.chains.push(StrokeCountChain.createForCurveChain(parent, options));\r\n }\r\n return result;\r\n }\r\n /** test if all sections have the same structure. */\r\n public static areSectionsCompatible(sections: StrokeCountSection[], enforceCounts: boolean): boolean {\r\n if (sections.length < 2)\r\n return true; // hm.. don't know if that is useful, but nothing to check here.\r\n const numChains = sections[0].chains.length;\r\n for (let i = 1; i < sections.length; i++) {\r\n // first level: must match number of paths or loops\r\n if (sections[i].chains.length !== numChains)\r\n return false;\r\n // second level: must have same number of primitives in each path or loop\r\n for (let j = 0; j < sections[0].chains.length; j++) {\r\n const numPrimitive = sections[0].chains[j].maps.length;\r\n if (sections[i].chains[j].maps.length !== numPrimitive)\r\n return false;\r\n for (let k = 0; k < numPrimitive; k++) {\r\n if (!sections[0].chains[j].maps[k].isCompatibleComponentStructure(sections[i].chains[j].maps[k], enforceCounts))\r\n return false;\r\n }\r\n }\r\n\r\n }\r\n return true;\r\n }\r\n\r\n /** Within each section, sweep accumulate curveLength field, recording entry and exit sum in each map.\r\n * * In expected use, (a0,a1) are (0,a) where a is the (previously computed) max length among corresponding maps up and down the section arrays.\r\n */\r\n public static remapa0a1WithinEachChain(sections: StrokeCountSection[]) {\r\n for (const section of sections) {\r\n for (const chain of section.chains) {\r\n chain.applySummed01Limits(0.0);\r\n }\r\n }\r\n }\r\n\r\n private static applyMultipassVisitorCallbackNoComponents(sections: StrokeCountSection[], chainIndex: number, primitiveIndex: number,\r\n componentIndex: number | undefined, callback: StrokeCountMapMultipassVisitor) {\r\n const numSection = sections.length;\r\n if (!callback.startSweeps(chainIndex, primitiveIndex, componentIndex)) return false;\r\n if (componentIndex === undefined) {\r\n // there are corresponding primitives directly at the section, chain, primitive index:\r\n for (let pass = 0; ; pass++) {\r\n if (!callback.startPass(pass))\r\n break;\r\n for (let sectionIndex = 0; sectionIndex < numSection; sectionIndex++)\r\n if (!callback.visit(pass, sections[sectionIndex].chains[chainIndex].maps[primitiveIndex]))\r\n return false;\r\n if (!callback.endPass(pass))\r\n return false;\r\n }\r\n } else {\r\n // there are corresponding primitives at the section, chain, primitive,componentIndex\r\n // there are corresponding primitives directly at the section, chain, primitive index:\r\n for (let pass = 0; ; pass++) {\r\n if (!callback.startPass(pass))\r\n break;\r\n for (let sectionIndex = 0; sectionIndex < numSection; sectionIndex++)\r\n if (!callback.visit(pass, sections[sectionIndex].chains[chainIndex].maps[primitiveIndex].componentData![componentIndex]))\r\n return false;\r\n if (!callback.endPass(pass))\r\n return false;\r\n }\r\n\r\n }\r\n if (!callback.endSweeps(chainIndex, primitiveIndex, componentIndex)) return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Walk through the sections, emitting callbacks delimiting groups of corresponding primitives.\r\n * @param sections array of sections (possibly a single path or loop at each section, or possibly a set of parity loops.)\r\n * @param callback object to be notified during the traversal\r\n */\r\n public static runMultiPassVisitorAtCorrespondingPrimitives(sections: StrokeCountSection[], callback: StrokeCountMapMultipassVisitor): boolean {\r\n const numChainPerSection = sections[0].chains.length;\r\n for (let chainIndex = 0; chainIndex < numChainPerSection; chainIndex++) {\r\n const numPrimitive = sections[0].chains[chainIndex].maps.length;\r\n for (let primitiveIndex = 0; primitiveIndex < numPrimitive; primitiveIndex++) {\r\n if (sections[0].chains[chainIndex].maps[primitiveIndex].componentData) {\r\n const numComponent = sections[0].chains[chainIndex].maps[primitiveIndex].componentData!.length;\r\n for (let i = 0; i < numComponent; i++)\r\n if (!this.applyMultipassVisitorCallbackNoComponents(sections, chainIndex, primitiveIndex, i, callback))\r\n return false;\r\n\r\n } else {\r\n if (!this.applyMultipassVisitorCallbackNoComponents(sections, chainIndex, primitiveIndex, undefined, callback))\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * * Confirm that all sections in the array have the same structure.\r\n * * Within each corresponding set of entries, apply the max count to all.\r\n * @param sections array of per-section stroke count entries\r\n */\r\n public static enforceStrokeCountCompatibility(sections: StrokeCountSection[]): boolean {\r\n\r\n if (sections.length < 2)\r\n return true;\r\n if (!StrokeCountSection.areSectionsCompatible(sections, false))\r\n return false;\r\n const visitor = new StrokeCountMapVisitorApplyMaxCount();\r\n this.runMultiPassVisitorAtCorrespondingPrimitives(sections, visitor);\r\n return true;\r\n\r\n }\r\n /**\r\n * * Confirm that all sections in the array have the same structure.\r\n * * Within each corresponding set of entries up and down the sections, set curveLength as the maximum of the respective curve lengths.\r\n * * Along each section, sum curveLengths (which were just reset) to get consistent along-chain parameters\r\n * @param sections array of per-section stroke count entries\r\n */\r\n public static enforceCompatibleDistanceSums(sections: StrokeCountSection[]): boolean {\r\n\r\n if (sections.length < 2)\r\n return true;\r\n if (!StrokeCountSection.areSectionsCompatible(sections, false))\r\n return false;\r\n const visitor = new StrokeCountMapVisitorApplyMaxCurveLength();\r\n this.runMultiPassVisitorAtCorrespondingPrimitives(sections, visitor);\r\n this.remapa0a1WithinEachChain(sections);\r\n return true;\r\n\r\n }\r\n\r\n /**\r\n * Return stroked form of the section.\r\n */\r\n public getStrokes(): AnyCurve {\r\n if (this.chains.length === 1) {\r\n return this.chains[0].getStrokes();\r\n } else {\r\n const region = ParityRegion.create();\r\n for (const c of this.chains) {\r\n const strokes = c.getStrokes();\r\n if (strokes instanceof LineString3d)\r\n region.tryAddChild(Loop.create(strokes));\r\n }\r\n return region;\r\n }\r\n }\r\n /**\r\n * Given two compatible stroke sets (as returned by getStrokes) extend a range\r\n * with the distances between corresponding points.\r\n * * Each set of strokes may be:\r\n * * linestring\r\n * * ParityRegion\r\n * * CurveChain (Loop or Path)\r\n * @param strokeA first set of strokes\r\n * @param strokeB second set of strokes\r\n * @param rangeToExtend caller-allocated range to be extended.\r\n * @returns true if structures are compatible.\r\n */\r\n public static extendDistanceRangeBetweenStrokes(strokeA: AnyCurve, strokeB: AnyCurve, rangeToExtend: Range1d): boolean {\r\n if (strokeA instanceof LineString3d) {\r\n if (strokeB instanceof LineString3d) {\r\n if (strokeA.numPoints() === strokeB.numPoints()) {\r\n const n = strokeA.numPoints();\r\n const pointA = Point3d.create();\r\n const pointB = Point3d.create();\r\n const allPointA = strokeA.packedPoints;\r\n const allPointB = strokeB.packedPoints;\r\n\r\n for (let i = 0; i < n; i++) {\r\n allPointA.getPoint3dAtCheckedPointIndex(i, pointA);\r\n allPointB.getPoint3dAtCheckedPointIndex(i, pointB);\r\n rangeToExtend.extendX(pointA.distance(pointB));\r\n }\r\n return true;\r\n }\r\n }\r\n } else if (strokeA instanceof ParityRegion) {\r\n if (strokeB instanceof ParityRegion) {\r\n const childrenA = strokeA.children;\r\n const childrenB = strokeB.children;\r\n const n = childrenA.length;\r\n if (n === childrenB.length) {\r\n for (let i = 0; i < n; i++) {\r\n if (!this.extendDistanceRangeBetweenStrokes(childrenA[i], childrenB[i], rangeToExtend))\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n } else if (strokeA instanceof CurveChain) {\r\n if (strokeB instanceof CurveChain) {\r\n const childrenA = strokeA.children;\r\n const childrenB = strokeB.children;\r\n const n = childrenA.length;\r\n if (n === childrenB.length) {\r\n for (let i = 0; i < n; i++) {\r\n if (!this.extendDistanceRangeBetweenStrokes(childrenA[i], childrenB[i], rangeToExtend))\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"StrokeCountChain.js","sourceRoot":"","sources":["../../../../src/curve/Query/StrokeCountChain.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/** @packageDocumentation\n * @module Curve\n */\n\nimport { Geometry } from \"../../Geometry\";\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Range1d } from \"../../geometry3d/Range\";\nimport { AnyCurve } from \"../CurveTypes\";\nimport { CurveChain, CurveCollection } from \"../CurveCollection\";\nimport { LineString3d } from \"../LineString3d\";\nimport { Loop } from \"../Loop\";\nimport { ParityRegion } from \"../ParityRegion\";\nimport { StrokeOptions } from \"../StrokeOptions\";\nimport { StrokeCountMap } from \"./StrokeCountMap\";\n\n// cspell:word remapa\n/**\n * abstract methods for callbacks during sweeps of collections of StrokeCount Structures.\n * * A set of StrokeCountMaps are to be visited multiple times.\n * * The logic that controls the sweep is as below.\n * * The callback object controls the number of sweeps and can adapt its action to the respective sweeps.\n * * Note that a \"false\" from cb.startPass() terminates passes for this chainIndex and primitiveIndex, but all others exit the whole sequence.\n * * This logic occurs 2 or three levels deep\n * * outer level is \"chains\". Simple swept path or loops have only one outer; parity regions have one outer per loop of the parity region\n * * second level is primitive within chain.\n * * If the primitives in a set are \"single component\", second level is lowest.\n * * startSweep() and endSweep() calls are two parameters, with undefined componentIndex\n * * If the primitives in a set are multi-component, there is a third level looping through corresponding components.\n * `\n * if (!cb.startSweeps (chainIndex, primitiveIndex, componentIndex))\n * return false;\n * for (let pass = 0;cb.startPass (pass); pass++){\n * for (each map in working set)\n * if (!cb.visit (pass, map)) return false;\n * if (!cb.endPass ()) return false;\n * }\n * }\n * if (!cb.endSweeps (chainIndex, primitiveIndex, componentIndex)) return false;\n * return true;\n * `\n * @internal\n */\nexport abstract class StrokeCountMapMultipassVisitor {\n /**\n * called to announce the beginning of one or more sweeps through related StrokeCountMap's\n * @param chainIndex index of loop or path within the various contours.\n * @param primitiveIndex index of primitive within the loop or path.\n * @param componentIndex optional component index.\n * @returns the number of sweeps to perform.\n */\n public startSweeps(_chainIndex: number, _primitiveIndex: number, _componentIndex?: number): boolean { return true; }\n /**\n * announce the beginning of a sweep pass.\n * @param pass the index (0,1...) for this sweep pass.\n * @return true to execute this pass. false to break from the pass loop (next method called is endSweeps)\n */\n public abstract startPass(pass: number): boolean;\n public abstract visit(pass: number, map: StrokeCountMap): boolean;\n /**\n * announce the end of a pass\n * @param pass the index (0,1...) for this sweep pass.\n * @return true to continue the sweeps.\n */\n\n public abstract endPass(pass: number): boolean;\n /**\n * announce the end of handling for particular chainIndex and primitiveIndex;\n * @return true to continue outer loops.\n */\n public endSweeps(_chainIndex: number, _primitiveIndex: number, _componentIndex?: number): boolean { return true; }\n\n}\n/**\n * * pass 1: determine max numStroke\n * * pass 2: impose max numStroke\n * @internal\n */\nexport class StrokeCountMapVisitorApplyMaxCount extends StrokeCountMapMultipassVisitor {\n public myMap: StrokeCountMap;\n public constructor() {\n super();\n this.myMap = StrokeCountMap.createWithComponentIndex();\n }\n /** set up for a pass through corresponding maps. */\n public startPass(pass: number): boolean {\n if (pass === 0) {\n this.myMap.numStroke = 0;\n return true;\n } else if (pass === 1) {\n // nothing to change == numStroke will be applied to each primitive.\n return true;\n }\n // all other pass numbers are rejected ...\n return false;\n }\n /** visit one of the set of corresponding maps. */\n public visit(pass: number, map: StrokeCountMap): boolean {\n if (pass === 0) {\n if (map.numStroke > this.myMap.numStroke)\n this.myMap.numStroke = map.numStroke;\n return true;\n } else if (pass === 1) {\n // apply the max from prior pass\n map.numStroke = this.myMap.numStroke;\n return true;\n }\n // no other pass values should happen -- canceled by startPass.\n return false;\n }\n\n public endPass(_pass: number): boolean { return true; }\n}\n/**\n * * pass 1: determine max curveLength among maps presented.\n * * pass 2: set the a0 and a1 values to 0 and that max distance\n * @internal\n */\nexport class StrokeCountMapVisitorApplyMaxCurveLength extends StrokeCountMapMultipassVisitor {\n public maxCurveLength: number;\n public constructor() {\n super();\n this.maxCurveLength = 0.0;\n }\n /** set up for a pass through corresponding maps. */\n public startPass(pass: number): boolean {\n if (pass === 0) {\n this.maxCurveLength = 0;\n return true;\n } else if (pass === 1) {\n // nothing to change == numStroke will be applied to each primitive.\n return true;\n }\n // all other pass numbers are rejected ...\n return false;\n }\n /** visit one of the set of corresponding maps. */\n public visit(pass: number, map: StrokeCountMap): boolean {\n if (pass === 0) {\n this.maxCurveLength = Geometry.maxXY(map.curveLength, this.maxCurveLength);\n return true;\n } else if (pass === 1) {\n // apply the max from prior pass\n map.a0 = 0.0;\n map.a1 = this.maxCurveLength;\n return true;\n }\n // no other pass values should happen -- canceled by startPass.\n return false;\n }\n\n public endPass(_pass: number): boolean { return true; }\n}\n/**\n * class `StrokeCountChain` contains:\n * * `maps` = an array of `StrokeCountMap`\n * * `parent` = parent CurveCollection.\n *\n * An instance is normally created with either a `Path` or `Loop` as the parent.\n */\nexport class StrokeCountChain {\n public maps: StrokeCountMap[];\n public parent?: CurveCollection;\n /**\n * options are used (with different purposes) at two times:\n * * When the StrokeCountChain is created, the options affect the stroke counts. This is just creating markup, not actual strokes.\n * * When actual stroking happens, the options control creation of parameters and tangents.\n */\n public options?: StrokeOptions;\n\n private constructor(parent?: CurveCollection, options?: StrokeOptions) {\n this.parent = parent;\n this.maps = [];\n this.options = options;\n }\n public static createForCurveChain(chain: CurveChain, options?: StrokeOptions): StrokeCountChain {\n const result = new StrokeCountChain(chain, options);\n result.parent = chain;\n // A chain can only contain primitives !!!!\n for (const p of chain.children) {\n p.computeAndAttachRecursiveStrokeCounts(options);\n if (p.strokeData)\n result.maps.push(p.strokeData);\n }\n return result;\n }\n public getStrokes(): LineString3d {\n const ls = LineString3d.create();\n if (this.options) {\n if (this.options.needNormals || this.options.needParams) {\n ls.ensureEmptyFractions();\n ls.ensureEmptyDerivatives();\n ls.ensureEmptyUVParams();\n }\n }\n for (const m of this.maps) {\n if (m.primitive)\n m.primitive.addMappedStrokesToLineString3D(m, ls);\n }\n return ls;\n\n }\n /** internal form of */\n private static applySummed01LimitsWithinArray(maps: StrokeCountMap[], incomingSum: number): number {\n let movingSum = incomingSum;\n for (const m of maps) {\n m.a0 += movingSum;\n if (m.componentData) {\n m.a1 = this.applySummed01LimitsWithinArray(m.componentData, m.a0);\n } else {\n m.a1 += movingSum;\n }\n movingSum = m.a1;\n }\n return movingSum;\n }\n /**\n * walk the maps in the array.\n * * in maps with no component data\n * * increment map.a0 and map.a1 by the incoming distance a0\n * * in maps with component data:\n * * recurse through the component array.\n * * increment map.a0 by the incoming a0.\n * * returned a1 from the componentData array becomes a1\n * @returns upper value of a1 in final map.\n * @param maps\n * @param incomingSum lower value to add to a0 for first map.\n */\n public applySummed01Limits(incomingSum: number): number {\n return StrokeCountChain.applySummed01LimitsWithinArray(this.maps, incomingSum);\n }\n}\n\n/**\n * class `StrokeCountSection`\\\n * * contains an array of `StrokeCountChain`.\n * * Hence it is the internal node level of a (1-level-deep) tree of `StrokeCountChain`\n * @internal\n */\nexport class StrokeCountSection {\n public chains: StrokeCountChain[];\n public parent?: CurveCollection;\n private constructor(parent?: CurveCollection) { this.parent = parent; this.chains = []; }\n /**\n * construct array of arrays of `StrokeCountMap`s\n * @param parent\n */\n public static createForParityRegionOrChain(parent: CurveCollection, options?: StrokeOptions): StrokeCountSection {\n const result = new StrokeCountSection(parent);\n if (parent instanceof ParityRegion) {\n for (const child of parent.children) {\n const p = StrokeCountChain.createForCurveChain(child, options);\n result.chains.push(p);\n }\n } else if (parent instanceof CurveChain) {\n result.chains.push(StrokeCountChain.createForCurveChain(parent, options));\n }\n return result;\n }\n /** test if all sections have the same structure. */\n public static areSectionsCompatible(sections: StrokeCountSection[], enforceCounts: boolean): boolean {\n if (sections.length < 2)\n return true; // hm.. don't know if that is useful, but nothing to check here.\n const numChains = sections[0].chains.length;\n for (let i = 1; i < sections.length; i++) {\n // first level: must match number of paths or loops\n if (sections[i].chains.length !== numChains)\n return false;\n // second level: must have same number of primitives in each path or loop\n for (let j = 0; j < sections[0].chains.length; j++) {\n const numPrimitive = sections[0].chains[j].maps.length;\n if (sections[i].chains[j].maps.length !== numPrimitive)\n return false;\n for (let k = 0; k < numPrimitive; k++) {\n if (!sections[0].chains[j].maps[k].isCompatibleComponentStructure(sections[i].chains[j].maps[k], enforceCounts))\n return false;\n }\n }\n\n }\n return true;\n }\n\n /** Within each section, sweep accumulate curveLength field, recording entry and exit sum in each map.\n * * In expected use, (a0,a1) are (0,a) where a is the (previously computed) max length among corresponding maps up and down the section arrays.\n */\n public static remapa0a1WithinEachChain(sections: StrokeCountSection[]) {\n for (const section of sections) {\n for (const chain of section.chains) {\n chain.applySummed01Limits(0.0);\n }\n }\n }\n\n private static applyMultipassVisitorCallbackNoComponents(sections: StrokeCountSection[], chainIndex: number, primitiveIndex: number,\n componentIndex: number | undefined, callback: StrokeCountMapMultipassVisitor) {\n const numSection = sections.length;\n if (!callback.startSweeps(chainIndex, primitiveIndex, componentIndex)) return false;\n if (componentIndex === undefined) {\n // there are corresponding primitives directly at the section, chain, primitive index:\n for (let pass = 0; ; pass++) {\n if (!callback.startPass(pass))\n break;\n for (let sectionIndex = 0; sectionIndex < numSection; sectionIndex++)\n if (!callback.visit(pass, sections[sectionIndex].chains[chainIndex].maps[primitiveIndex]))\n return false;\n if (!callback.endPass(pass))\n return false;\n }\n } else {\n // there are corresponding primitives at the section, chain, primitive,componentIndex\n // there are corresponding primitives directly at the section, chain, primitive index:\n for (let pass = 0; ; pass++) {\n if (!callback.startPass(pass))\n break;\n for (let sectionIndex = 0; sectionIndex < numSection; sectionIndex++)\n if (!callback.visit(pass, sections[sectionIndex].chains[chainIndex].maps[primitiveIndex].componentData![componentIndex]))\n return false;\n if (!callback.endPass(pass))\n return false;\n }\n\n }\n if (!callback.endSweeps(chainIndex, primitiveIndex, componentIndex)) return false;\n return true;\n }\n\n /**\n * Walk through the sections, emitting callbacks delimiting groups of corresponding primitives.\n * @param sections array of sections (possibly a single path or loop at each section, or possibly a set of parity loops.)\n * @param callback object to be notified during the traversal\n */\n public static runMultiPassVisitorAtCorrespondingPrimitives(sections: StrokeCountSection[], callback: StrokeCountMapMultipassVisitor): boolean {\n const numChainPerSection = sections[0].chains.length;\n for (let chainIndex = 0; chainIndex < numChainPerSection; chainIndex++) {\n const numPrimitive = sections[0].chains[chainIndex].maps.length;\n for (let primitiveIndex = 0; primitiveIndex < numPrimitive; primitiveIndex++) {\n if (sections[0].chains[chainIndex].maps[primitiveIndex].componentData) {\n const numComponent = sections[0].chains[chainIndex].maps[primitiveIndex].componentData!.length;\n for (let i = 0; i < numComponent; i++)\n if (!this.applyMultipassVisitorCallbackNoComponents(sections, chainIndex, primitiveIndex, i, callback))\n return false;\n\n } else {\n if (!this.applyMultipassVisitorCallbackNoComponents(sections, chainIndex, primitiveIndex, undefined, callback))\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * * Confirm that all sections in the array have the same structure.\n * * Within each corresponding set of entries, apply the max count to all.\n * @param sections array of per-section stroke count entries\n */\n public static enforceStrokeCountCompatibility(sections: StrokeCountSection[]): boolean {\n\n if (sections.length < 2)\n return true;\n if (!StrokeCountSection.areSectionsCompatible(sections, false))\n return false;\n const visitor = new StrokeCountMapVisitorApplyMaxCount();\n this.runMultiPassVisitorAtCorrespondingPrimitives(sections, visitor);\n return true;\n\n }\n /**\n * * Confirm that all sections in the array have the same structure.\n * * Within each corresponding set of entries up and down the sections, set curveLength as the maximum of the respective curve lengths.\n * * Along each section, sum curveLengths (which were just reset) to get consistent along-chain parameters\n * @param sections array of per-section stroke count entries\n */\n public static enforceCompatibleDistanceSums(sections: StrokeCountSection[]): boolean {\n\n if (sections.length < 2)\n return true;\n if (!StrokeCountSection.areSectionsCompatible(sections, false))\n return false;\n const visitor = new StrokeCountMapVisitorApplyMaxCurveLength();\n this.runMultiPassVisitorAtCorrespondingPrimitives(sections, visitor);\n this.remapa0a1WithinEachChain(sections);\n return true;\n\n }\n\n /**\n * Return stroked form of the section.\n */\n public getStrokes(): AnyCurve {\n if (this.chains.length === 1) {\n return this.chains[0].getStrokes();\n } else {\n const region = ParityRegion.create();\n for (const c of this.chains) {\n const strokes = c.getStrokes();\n if (strokes instanceof LineString3d)\n region.tryAddChild(Loop.create(strokes));\n }\n return region;\n }\n }\n /**\n * Given two compatible stroke sets (as returned by getStrokes) extend a range\n * with the distances between corresponding points.\n * * Each set of strokes may be:\n * * linestring\n * * ParityRegion\n * * CurveChain (Loop or Path)\n * @param strokeA first set of strokes\n * @param strokeB second set of strokes\n * @param rangeToExtend caller-allocated range to be extended.\n * @returns true if structures are compatible.\n */\n public static extendDistanceRangeBetweenStrokes(strokeA: AnyCurve, strokeB: AnyCurve, rangeToExtend: Range1d): boolean {\n if (strokeA instanceof LineString3d) {\n if (strokeB instanceof LineString3d) {\n if (strokeA.numPoints() === strokeB.numPoints()) {\n const n = strokeA.numPoints();\n const pointA = Point3d.create();\n const pointB = Point3d.create();\n const allPointA = strokeA.packedPoints;\n const allPointB = strokeB.packedPoints;\n\n for (let i = 0; i < n; i++) {\n allPointA.getPoint3dAtCheckedPointIndex(i, pointA);\n allPointB.getPoint3dAtCheckedPointIndex(i, pointB);\n rangeToExtend.extendX(pointA.distance(pointB));\n }\n return true;\n }\n }\n } else if (strokeA instanceof ParityRegion) {\n if (strokeB instanceof ParityRegion) {\n const childrenA = strokeA.children;\n const childrenB = strokeB.children;\n const n = childrenA.length;\n if (n === childrenB.length) {\n for (let i = 0; i < n; i++) {\n if (!this.extendDistanceRangeBetweenStrokes(childrenA[i], childrenB[i], rangeToExtend))\n return false;\n }\n return true;\n }\n }\n } else if (strokeA instanceof CurveChain) {\n if (strokeB instanceof CurveChain) {\n const childrenA = strokeA.children;\n const childrenB = strokeB.children;\n const n = childrenA.length;\n if (n === childrenB.length) {\n for (let i = 0; i < n; i++) {\n if (!this.extendDistanceRangeBetweenStrokes(childrenA[i], childrenB[i], rangeToExtend))\n return false;\n }\n return true;\n }\n }\n }\n return false;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"StrokeCountMap.js","sourceRoot":"","sources":["../../../../src/curve/Query/StrokeCountMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\n\r\n/**\r\n * Data carrier interface for per-primitive stroke counts and distances used by PolyfaceBuilder.\r\n * * For a simple primitive (line segment or arc) that is stroked with uniform fraction, the members are:\r\n * * `numStroke` = total number of strokes\r\n * * `curveLength` = length of this curve\r\n * * `a0` = external mapped coordinate for fraction 0 on this primitive or component\r\n * * `a1` = external mapped coordinate for fraction 1 on this primitive or component\r\n *\r\n * * For linestring and bspline curve, those numbers are totals for the overall curve, and breakdown within\r\n * the components (line segments or bezier spans) is recorded on the optional array `componentData[]`\r\n * * Members of the array are annotated with componentIndex within the linestring or bspline curve\r\n * @public\r\n */\r\nexport class StrokeCountMap {\r\n /** Number of strokes expected in this interval. */\r\n public numStroke: number;\r\n /** Length of the curve interval. */\r\n public curveLength: number;\r\n /** Start coordinate (in user-defined space) for fraction 0 on this primitive or component */\r\n public a0: number;\r\n /** End coordinate (in user-defined space) for fraction 0 on this primitive or component */\r\n public a1: number;\r\n /** Further StrokeCountMap's within this interval (e.g. for individual segments of a linestring.) */\r\n public componentData?: StrokeCountMap[];\r\n /** The curve that this map represents */\r\n public primitive?: CurvePrimitive;\r\n /** This curve's index within its parent. */\r\n public componentIndex?: number;\r\n /**\r\n * Constructor. Initialize all fields from arguments.\r\n * * Callers that expect to announce numStroke and curveLength for multiple components send an empty componentData array.\r\n * * Callers that do not have multiple components send undefined component data.\r\n * @param numStroke\r\n * @param curveLength\r\n * @param a0\r\n * @param a1\r\n * @param componentData\r\n */\r\n private constructor(numStroke: number, curveLength: number, a0: number, a1: number, componentData?: StrokeCountMap[]) {\r\n this.numStroke = numStroke;\r\n this.curveLength = curveLength;\r\n this.a0 = a0;\r\n this.a1 = a1;\r\n this.componentData = componentData;\r\n }\r\n /**\r\n * Create a `StrokeCountMap` with curve primitive and optional componentData array.\r\n * @param primitive\r\n * @param numStroke\r\n * @param curveLength\r\n * @param a0\r\n * @param a1\r\n * @param componentData\r\n */\r\n public static createWithCurvePrimitive(\r\n primitive: CurvePrimitive, numStroke: number, curveLength: number, a0: number, a1: number, componentData?: StrokeCountMap[],\r\n ): StrokeCountMap {\r\n const result = new StrokeCountMap(numStroke, curveLength, a0, a1, componentData);\r\n result.primitive = primitive;\r\n return result;\r\n }\r\n /**\r\n * Create a `StrokeCountMap` with `componentIndex` (but no primitive or componentData array)\r\n * @param index\r\n * @param numStroke\r\n * @param curveLength\r\n * @param a0\r\n * @param a1\r\n */\r\n public static createWithComponentIndex(\r\n componentIndex: number = 0, numStroke: number = 0, curveLength: number = 0, a0: number = 0, a1: number = 0,\r\n ): StrokeCountMap {\r\n const result = new StrokeCountMap(numStroke, curveLength, a0, a1);\r\n result.componentIndex = componentIndex;\r\n return result;\r\n }\r\n /**\r\n * Create a StrokeCountMap, optionally\r\n * * (a) use parent a1 as new a0\r\n * * (b) attach a (usually empty) array for component counts.\r\n * @param parentMap optional map whose a1 becomes a0 in the new map.\r\n * @param componentData optional array of component StrokeCountMaps.\r\n */\r\n public static createWithCurvePrimitiveAndOptionalParent(\r\n curvePrimitive: CurvePrimitive, parentMap?: StrokeCountMap, componentData?: StrokeCountMap[],\r\n ): StrokeCountMap {\r\n const a0 = parentMap ? parentMap.a1 : 0.0;\r\n const result = new StrokeCountMap(0, 0, a0, a0, componentData);\r\n result.primitive = curvePrimitive;\r\n return result;\r\n }\r\n /**\r\n * Apply stroke count and curve length from a component to a parent map.\r\n * If componentData is present, install the new count and length with distance limits\r\n * @param parentMap map to be updated.\r\n * @param numStroke number of strokes on new child curve\r\n * @param curveLength curve length for new child curve.\r\n */\r\n public addToCountAndLength(numStroke: number, curveLength: number): void {\r\n const a2 = this.a1 + curveLength;\r\n if (this.componentData) {\r\n this.componentData.push(\r\n new StrokeCountMap(numStroke, curveLength, this.a1, a2));\r\n }\r\n this.numStroke += numStroke;\r\n this.curveLength += curveLength;\r\n this.a1 = a2;\r\n }\r\n /**\r\n * Return true if `other` has the same component structure as `this`\r\n * * Testing recurses through corresponding members of componentData arrays.\r\n */\r\n public isCompatibleComponentStructure(other: StrokeCountMap, enforceCounts: boolean): boolean {\r\n if (enforceCounts && this.numStroke !== other.numStroke)\r\n return false;\r\n if (this.componentData === undefined && other.componentData === undefined)\r\n return true;\r\n if (this.componentData && other.componentData) {\r\n // both have components. Recurse . . ..\r\n if (this.componentData.length !== other.componentData.length)\r\n return false;\r\n const n = this.componentData.length;\r\n for (let i = 0; i < n; i++)\r\n if (!this.componentData[i].isCompatibleComponentStructure(other.componentData[i], enforceCounts))\r\n return false;\r\n return true;\r\n }\r\n // one has componentData, the other not.\r\n return false;\r\n }\r\n /**\r\n * Clone all data from root.\r\n * * clone componentData arrays recursively.\r\n */\r\n public clone(): StrokeCountMap {\r\n const a = new StrokeCountMap(this.numStroke, this.curveLength, this.a0, this.a1);\r\n if (this.componentData) {\r\n a.componentData = [];\r\n for (const child of this.componentData)\r\n a.componentData.push(child.clone());\r\n }\r\n return a;\r\n }\r\n /**\r\n * Interpolate in the a0,a1 mapping.\r\n * @param fraction fractional position between a0 and a1\r\n */\r\n public fractionToA(fraction: number) {\r\n return Geometry.interpolate(this.a0, fraction, this.a1);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"StrokeCountMap.js","sourceRoot":"","sources":["../../../../src/curve/Query/StrokeCountMap.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/** @packageDocumentation\n * @module Curve\n */\n\nimport { Geometry } from \"../../Geometry\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\n\n/**\n * Data carrier interface for per-primitive stroke counts and distances used by PolyfaceBuilder.\n * * For a simple primitive (line segment or arc) that is stroked with uniform fraction, the members are:\n * * `numStroke` = total number of strokes\n * * `curveLength` = length of this curve\n * * `a0` = external mapped coordinate for fraction 0 on this primitive or component\n * * `a1` = external mapped coordinate for fraction 1 on this primitive or component\n *\n * * For linestring and bspline curve, those numbers are totals for the overall curve, and breakdown within\n * the components (line segments or bezier spans) is recorded on the optional array `componentData[]`\n * * Members of the array are annotated with componentIndex within the linestring or bspline curve\n * @public\n */\nexport class StrokeCountMap {\n /** Number of strokes expected in this interval. */\n public numStroke: number;\n /** Length of the curve interval. */\n public curveLength: number;\n /** Start coordinate (in user-defined space) for fraction 0 on this primitive or component */\n public a0: number;\n /** End coordinate (in user-defined space) for fraction 0 on this primitive or component */\n public a1: number;\n /** Further StrokeCountMap's within this interval (e.g. for individual segments of a linestring.) */\n public componentData?: StrokeCountMap[];\n /** The curve that this map represents */\n public primitive?: CurvePrimitive;\n /** This curve's index within its parent. */\n public componentIndex?: number;\n /**\n * Constructor. Initialize all fields from arguments.\n * * Callers that expect to announce numStroke and curveLength for multiple components send an empty componentData array.\n * * Callers that do not have multiple components send undefined component data.\n * @param numStroke\n * @param curveLength\n * @param a0\n * @param a1\n * @param componentData\n */\n private constructor(numStroke: number, curveLength: number, a0: number, a1: number, componentData?: StrokeCountMap[]) {\n this.numStroke = numStroke;\n this.curveLength = curveLength;\n this.a0 = a0;\n this.a1 = a1;\n this.componentData = componentData;\n }\n /**\n * Create a `StrokeCountMap` with curve primitive and optional componentData array.\n * @param primitive\n * @param numStroke\n * @param curveLength\n * @param a0\n * @param a1\n * @param componentData\n */\n public static createWithCurvePrimitive(\n primitive: CurvePrimitive, numStroke: number, curveLength: number, a0: number, a1: number, componentData?: StrokeCountMap[],\n ): StrokeCountMap {\n const result = new StrokeCountMap(numStroke, curveLength, a0, a1, componentData);\n result.primitive = primitive;\n return result;\n }\n /**\n * Create a `StrokeCountMap` with `componentIndex` (but no primitive or componentData array)\n * @param index\n * @param numStroke\n * @param curveLength\n * @param a0\n * @param a1\n */\n public static createWithComponentIndex(\n componentIndex: number = 0, numStroke: number = 0, curveLength: number = 0, a0: number = 0, a1: number = 0,\n ): StrokeCountMap {\n const result = new StrokeCountMap(numStroke, curveLength, a0, a1);\n result.componentIndex = componentIndex;\n return result;\n }\n /**\n * Create a StrokeCountMap, optionally\n * * (a) use parent a1 as new a0\n * * (b) attach a (usually empty) array for component counts.\n * @param parentMap optional map whose a1 becomes a0 in the new map.\n * @param componentData optional array of component StrokeCountMaps.\n */\n public static createWithCurvePrimitiveAndOptionalParent(\n curvePrimitive: CurvePrimitive, parentMap?: StrokeCountMap, componentData?: StrokeCountMap[],\n ): StrokeCountMap {\n const a0 = parentMap ? parentMap.a1 : 0.0;\n const result = new StrokeCountMap(0, 0, a0, a0, componentData);\n result.primitive = curvePrimitive;\n return result;\n }\n /**\n * Apply stroke count and curve length from a component to a parent map.\n * If componentData is present, install the new count and length with distance limits\n * @param parentMap map to be updated.\n * @param numStroke number of strokes on new child curve\n * @param curveLength curve length for new child curve.\n */\n public addToCountAndLength(numStroke: number, curveLength: number): void {\n const a2 = this.a1 + curveLength;\n if (this.componentData) {\n this.componentData.push(\n new StrokeCountMap(numStroke, curveLength, this.a1, a2));\n }\n this.numStroke += numStroke;\n this.curveLength += curveLength;\n this.a1 = a2;\n }\n /**\n * Return true if `other` has the same component structure as `this`\n * * Testing recurses through corresponding members of componentData arrays.\n */\n public isCompatibleComponentStructure(other: StrokeCountMap, enforceCounts: boolean): boolean {\n if (enforceCounts && this.numStroke !== other.numStroke)\n return false;\n if (this.componentData === undefined && other.componentData === undefined)\n return true;\n if (this.componentData && other.componentData) {\n // both have components. Recurse . . ..\n if (this.componentData.length !== other.componentData.length)\n return false;\n const n = this.componentData.length;\n for (let i = 0; i < n; i++)\n if (!this.componentData[i].isCompatibleComponentStructure(other.componentData[i], enforceCounts))\n return false;\n return true;\n }\n // one has componentData, the other not.\n return false;\n }\n /**\n * Clone all data from root.\n * * clone componentData arrays recursively.\n */\n public clone(): StrokeCountMap {\n const a = new StrokeCountMap(this.numStroke, this.curveLength, this.a0, this.a1);\n if (this.componentData) {\n a.componentData = [];\n for (const child of this.componentData)\n a.componentData.push(child.clone());\n }\n return a;\n }\n /**\n * Interpolate in the a0,a1 mapping.\n * @param fraction fractional position between a0 and a1\n */\n public fractionToA(fraction: number) {\n return Geometry.interpolate(this.a0, fraction, this.a1);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RegionMomentsXY.js","sourceRoot":"","sources":["../../../src/curve/RegionMomentsXY.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\n// import { Geometry, Angle, AngleSweep } from \"../Geometry\";\r\n\r\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { NullGeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { MomentData } from \"../geometry4d/MomentData\";\r\nimport { Arc3d } from \"./Arc3d\";\r\nimport { CurvePrimitive } from \"./CurvePrimitive\";\r\nimport { LineSegment3d } from \"./LineSegment3d\";\r\nimport { LineString3d } from \"./LineString3d\";\r\nimport { Loop } from \"./Loop\";\r\nimport { ParityRegion } from \"./ParityRegion\";\r\nimport { StrokeOptions } from \"./StrokeOptions\";\r\nimport { TransitionSpiral3d } from \"./spiral/TransitionSpiral3d\";\r\nimport { UnionRegion } from \"./UnionRegion\";\r\n\r\n/**\r\n * Implementation class for computing XY area moments.\r\n * @internal\r\n */\r\nexport class RegionMomentsXY extends NullGeometryHandler {\r\n private _activeMomentData?: MomentData;\r\n private _point0 = Point3d.create();\r\n private _point1 = Point3d.create();\r\n\r\n /** Accumulate (independent) integrations over\r\n * * origin to chord of the arc.\r\n * * origin to the \"cap\" between the chord and arc.\r\n */\r\n public override handleArc3d(arc: Arc3d): void {\r\n const momentData = this._activeMomentData!;\r\n const sweepRadians = arc.sweep.sweepRadians;\r\n const alphaRadians = sweepRadians * 0.5;\r\n // from https://apps.dtic.mil/dtic/tr/fulltext/u2/274936.pdf page 71 for radius = 1\r\n let s = Math.sin(alphaRadians);\r\n let c = Math.cos(alphaRadians);\r\n let s1 = Math.sin(sweepRadians);\r\n if (Angle.isFullCircleRadians(sweepRadians)) {\r\n s = 0.0;\r\n c = -1.0;\r\n s1 = 0.0;\r\n }\r\n const q = 2 * s * s * s * c / (alphaRadians - s * c);\r\n const s3 = s * s * s;\r\n const s6 = s3 * s3;\r\n const area = 0.5 * (sweepRadians - s1);\r\n const inertiaXX = 0.25 * area * (1.0 - q / 3.0);\r\n const inertiaYY1 = 0.25 * area * (1.0 + q);\r\n const inertiaYY = inertiaYY1 - 4.0 * s6 / (9.0 * area);\r\n const productXX = inertiaYY;\r\n const productYY = inertiaXX;\r\n const centerToCentroid = 4.0 * s * s * s / (3.0 * (sweepRadians - s1));\r\n const midRadians = arc.sweep.fractionToRadians(0.5);\r\n const centralPlane = arc.radiansToRotatedBasis(midRadians);\r\n const centroid = centralPlane.origin.plusScaled(centralPlane.vectorU, centerToCentroid);\r\n momentData.accumulateXYProductsInCentroidalFrame(productXX, 0.0, productYY, area, centroid, centralPlane.vectorU, centralPlane.vectorV);\r\n const pointB = arc.fractionToPoint(0.0);\r\n const pointC = arc.fractionToPoint(1.0);\r\n momentData.accumulateTriangleMomentsXY(undefined, pointB, pointC);\r\n }\r\n\r\n /** Accumulate integrals over the (triangular) areas from the origin to each line segment */\r\n public override handleLineString3d(ls: LineString3d): void {\r\n const momentData = this._activeMomentData!;\r\n momentData.accumulateTriangleToLineStringMomentsXY(undefined, ls.packedPoints);\r\n }\r\n /** Accumulate integrals over the (triangular) area from the origin to this line segment */\r\n public override handleLineSegment3d(segment: LineSegment3d): void {\r\n const momentData = this._activeMomentData!;\r\n segment.startPoint(this._point0);\r\n segment.endPoint(this._point1);\r\n momentData.accumulateTriangleMomentsXY(undefined, this._point0, this._point1);\r\n }\r\n /** Accumulate integrals from origin to all primitives in the chain. */\r\n public override handleLoop(loop: Loop): MomentData | undefined {\r\n const momentData = this._activeMomentData = MomentData.create();\r\n momentData.needOrigin = false;\r\n for (const child of loop.children)\r\n child.dispatchToGeometryHandler(this);\r\n this._activeMomentData = undefined;\r\n return momentData;\r\n }\r\n /**\r\n * ASSUMPTIONS FOR ORIENTATION AND CONTAINMENT ISSUES\r\n * * Largest area is outer\r\n * * All others are interior (and not overlapping)\r\n * Hence\r\n * * Outer area sign must be positive -- negate all integrations as needed\r\n * * Outer area signs must be positive -- negate all integrations as needed\r\n * @param region\r\n */\r\n public override handleParityRegion(region: ParityRegion): MomentData | undefined {\r\n const allChildMoments: MomentData[] = [];\r\n let maxAbsArea = 0.0;\r\n let largestChildMoments: MomentData | undefined;\r\n for (const child of region.children) {\r\n if (child instanceof Loop) {\r\n const childMoments = this.handleLoop(child);\r\n if (childMoments) {\r\n allChildMoments.push(childMoments);\r\n const q = Math.abs(childMoments.quantitySum);\r\n if (q > maxAbsArea) {\r\n maxAbsArea = q;\r\n largestChildMoments = childMoments;\r\n }\r\n\r\n }\r\n }\r\n }\r\n if (largestChildMoments) {\r\n const summedMoments = MomentData.create();\r\n const sign0 = largestChildMoments.signFactor(1.0);\r\n summedMoments.accumulateProducts(largestChildMoments, sign0);\r\n for (const childMoments of allChildMoments) {\r\n if (childMoments !== largestChildMoments) {\r\n const sign1 = childMoments.signFactor(-1.0);\r\n summedMoments.accumulateProducts(childMoments, sign1);\r\n }\r\n }\r\n return summedMoments;\r\n }\r\n return undefined;\r\n }\r\n /** Accumulate (as simple addition) products over each component of the union region. */\r\n public override handleUnionRegion(region: UnionRegion): MomentData | undefined {\r\n const summedMoments = MomentData.create();\r\n for (const child of region.children) {\r\n const childMoments = child.dispatchToGeometryHandler(this);\r\n if (childMoments) {\r\n const sign0 = childMoments.signFactor(1.0);\r\n summedMoments.accumulateProducts(childMoments, sign0);\r\n }\r\n }\r\n return summedMoments;\r\n }\r\n\r\n private _strokeOptions?: StrokeOptions;\r\n private getStrokeOptions(): StrokeOptions {\r\n if (this._strokeOptions)\r\n return this._strokeOptions;\r\n const options = StrokeOptions.createForCurves();\r\n // this is unusually fine for stroking, but appropriate for sum.\r\n options.angleTol = Angle.createDegrees(5.0);\r\n this._strokeOptions = options;\r\n return options;\r\n }\r\n /** Single curve primitive (not loop . . .).\r\n * * stroke the curve\r\n * * accumulate stroke array.\r\n */\r\n public handleCurvePrimitive(cp: CurvePrimitive) {\r\n const strokes = LineString3d.create();\r\n const options = this.getStrokeOptions();\r\n cp.emitStrokes(strokes, options);\r\n this.handleLineString3d(strokes);\r\n }\r\n /** handle strongly typed BSplineCurve3d as generic curve primitive */\r\n public override handleBSplineCurve3d(g: BSplineCurve3d) { return this.handleCurvePrimitive(g); }\r\n /** handle strongly typed BSplineCurve3dH as generic curve primitive */\r\n public override handleBSplineCurve3dH(g: BSplineCurve3dH) { return this.handleCurvePrimitive(g); }\r\n /** handle strongly typed TransitionSpiral as generic curve primitive */\r\n public override handleTransitionSpiral(g: TransitionSpiral3d) { return this.handleCurvePrimitive(g); }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"RegionMomentsXY.js","sourceRoot":"","sources":["../../../src/curve/RegionMomentsXY.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 Curve\n */\n\n// import { Geometry, Angle, AngleSweep } from \"../Geometry\";\n\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { NullGeometryHandler } from \"../geometry3d/GeometryHandler\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\nimport { MomentData } from \"../geometry4d/MomentData\";\nimport { Arc3d } from \"./Arc3d\";\nimport { CurvePrimitive } from \"./CurvePrimitive\";\nimport { LineSegment3d } from \"./LineSegment3d\";\nimport { LineString3d } from \"./LineString3d\";\nimport { Loop } from \"./Loop\";\nimport { ParityRegion } from \"./ParityRegion\";\nimport { StrokeOptions } from \"./StrokeOptions\";\nimport { TransitionSpiral3d } from \"./spiral/TransitionSpiral3d\";\nimport { UnionRegion } from \"./UnionRegion\";\n\n/**\n * Implementation class for computing XY area moments.\n * @internal\n */\nexport class RegionMomentsXY extends NullGeometryHandler {\n private _activeMomentData?: MomentData;\n private _point0 = Point3d.create();\n private _point1 = Point3d.create();\n\n /** Accumulate (independent) integrations over\n * * origin to chord of the arc.\n * * origin to the \"cap\" between the chord and arc.\n */\n public override handleArc3d(arc: Arc3d): void {\n const momentData = this._activeMomentData!;\n const sweepRadians = arc.sweep.sweepRadians;\n const alphaRadians = sweepRadians * 0.5;\n // from https://apps.dtic.mil/dtic/tr/fulltext/u2/274936.pdf page 71 for radius = 1\n let s = Math.sin(alphaRadians);\n let c = Math.cos(alphaRadians);\n let s1 = Math.sin(sweepRadians);\n if (Angle.isFullCircleRadians(sweepRadians)) {\n s = 0.0;\n c = -1.0;\n s1 = 0.0;\n }\n const q = 2 * s * s * s * c / (alphaRadians - s * c);\n const s3 = s * s * s;\n const s6 = s3 * s3;\n const area = 0.5 * (sweepRadians - s1);\n const inertiaXX = 0.25 * area * (1.0 - q / 3.0);\n const inertiaYY1 = 0.25 * area * (1.0 + q);\n const inertiaYY = inertiaYY1 - 4.0 * s6 / (9.0 * area);\n const productXX = inertiaYY;\n const productYY = inertiaXX;\n const centerToCentroid = 4.0 * s * s * s / (3.0 * (sweepRadians - s1));\n const midRadians = arc.sweep.fractionToRadians(0.5);\n const centralPlane = arc.radiansToRotatedBasis(midRadians);\n const centroid = centralPlane.origin.plusScaled(centralPlane.vectorU, centerToCentroid);\n momentData.accumulateXYProductsInCentroidalFrame(productXX, 0.0, productYY, area, centroid, centralPlane.vectorU, centralPlane.vectorV);\n const pointB = arc.fractionToPoint(0.0);\n const pointC = arc.fractionToPoint(1.0);\n momentData.accumulateTriangleMomentsXY(undefined, pointB, pointC);\n }\n\n /** Accumulate integrals over the (triangular) areas from the origin to each line segment */\n public override handleLineString3d(ls: LineString3d): void {\n const momentData = this._activeMomentData!;\n momentData.accumulateTriangleToLineStringMomentsXY(undefined, ls.packedPoints);\n }\n /** Accumulate integrals over the (triangular) area from the origin to this line segment */\n public override handleLineSegment3d(segment: LineSegment3d): void {\n const momentData = this._activeMomentData!;\n segment.startPoint(this._point0);\n segment.endPoint(this._point1);\n momentData.accumulateTriangleMomentsXY(undefined, this._point0, this._point1);\n }\n /** Accumulate integrals from origin to all primitives in the chain. */\n public override handleLoop(loop: Loop): MomentData | undefined {\n const momentData = this._activeMomentData = MomentData.create();\n momentData.needOrigin = false;\n for (const child of loop.children)\n child.dispatchToGeometryHandler(this);\n this._activeMomentData = undefined;\n return momentData;\n }\n /**\n * ASSUMPTIONS FOR ORIENTATION AND CONTAINMENT ISSUES\n * * Largest area is outer\n * * All others are interior (and not overlapping)\n * Hence\n * * Outer area sign must be positive -- negate all integrations as needed\n * * Outer area signs must be positive -- negate all integrations as needed\n * @param region\n */\n public override handleParityRegion(region: ParityRegion): MomentData | undefined {\n const allChildMoments: MomentData[] = [];\n let maxAbsArea = 0.0;\n let largestChildMoments: MomentData | undefined;\n for (const child of region.children) {\n if (child instanceof Loop) {\n const childMoments = this.handleLoop(child);\n if (childMoments) {\n allChildMoments.push(childMoments);\n const q = Math.abs(childMoments.quantitySum);\n if (q > maxAbsArea) {\n maxAbsArea = q;\n largestChildMoments = childMoments;\n }\n\n }\n }\n }\n if (largestChildMoments) {\n const summedMoments = MomentData.create();\n const sign0 = largestChildMoments.signFactor(1.0);\n summedMoments.accumulateProducts(largestChildMoments, sign0);\n for (const childMoments of allChildMoments) {\n if (childMoments !== largestChildMoments) {\n const sign1 = childMoments.signFactor(-1.0);\n summedMoments.accumulateProducts(childMoments, sign1);\n }\n }\n return summedMoments;\n }\n return undefined;\n }\n /** Accumulate (as simple addition) products over each component of the union region. */\n public override handleUnionRegion(region: UnionRegion): MomentData | undefined {\n const summedMoments = MomentData.create();\n for (const child of region.children) {\n const childMoments = child.dispatchToGeometryHandler(this);\n if (childMoments) {\n const sign0 = childMoments.signFactor(1.0);\n summedMoments.accumulateProducts(childMoments, sign0);\n }\n }\n return summedMoments;\n }\n\n private _strokeOptions?: StrokeOptions;\n private getStrokeOptions(): StrokeOptions {\n if (this._strokeOptions)\n return this._strokeOptions;\n const options = StrokeOptions.createForCurves();\n // this is unusually fine for stroking, but appropriate for sum.\n options.angleTol = Angle.createDegrees(5.0);\n this._strokeOptions = options;\n return options;\n }\n /** Single curve primitive (not loop . . .).\n * * stroke the curve\n * * accumulate stroke array.\n */\n public handleCurvePrimitive(cp: CurvePrimitive) {\n const strokes = LineString3d.create();\n const options = this.getStrokeOptions();\n cp.emitStrokes(strokes, options);\n this.handleLineString3d(strokes);\n }\n /** handle strongly typed BSplineCurve3d as generic curve primitive */\n public override handleBSplineCurve3d(g: BSplineCurve3d) { return this.handleCurvePrimitive(g); }\n /** handle strongly typed BSplineCurve3dH as generic curve primitive */\n public override handleBSplineCurve3dH(g: BSplineCurve3dH) { return this.handleCurvePrimitive(g); }\n /** handle strongly typed TransitionSpiral as generic curve primitive */\n public override handleTransitionSpiral(g: TransitionSpiral3d) { return this.handleCurvePrimitive(g); }\n\n}\n"]}