@itwin/core-geometry 4.9.0-dev.9 → 4.10.0-dev.0

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 (680) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.d.ts +57 -46
  4. package/lib/cjs/Geometry.d.ts.map +1 -1
  5. package/lib/cjs/Geometry.js +73 -53
  6. package/lib/cjs/Geometry.js.map +1 -1
  7. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  13. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  14. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  15. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  16. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  17. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  18. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  19. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  20. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  21. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  22. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  23. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  24. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  25. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  26. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  27. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  28. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  29. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  30. package/lib/cjs/core-geometry.js.map +1 -1
  31. package/lib/cjs/curve/Arc3d.d.ts +141 -38
  32. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  33. package/lib/cjs/curve/Arc3d.js +219 -31
  34. package/lib/cjs/curve/Arc3d.js.map +1 -1
  35. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  36. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  37. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +11 -6
  38. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  39. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +12 -10
  40. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  41. package/lib/cjs/curve/CurveCollection.d.ts +2 -1
  42. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  43. package/lib/cjs/curve/CurveCollection.js +2 -1
  44. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  45. package/lib/cjs/curve/CurveCurve.d.ts +11 -9
  46. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  47. package/lib/cjs/curve/CurveCurve.js +11 -9
  48. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  49. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  50. package/lib/cjs/curve/CurveFactory.d.ts +4 -3
  51. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  52. package/lib/cjs/curve/CurveFactory.js +4 -3
  53. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  54. package/lib/cjs/curve/CurveLocationDetail.d.ts +19 -1
  55. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  56. package/lib/cjs/curve/CurveLocationDetail.js +39 -0
  57. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  58. package/lib/cjs/curve/CurveOps.d.ts +4 -4
  59. package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
  60. package/lib/cjs/curve/CurveOps.js +6 -6
  61. package/lib/cjs/curve/CurveOps.js.map +1 -1
  62. package/lib/cjs/curve/CurvePrimitive.d.ts +1 -1
  63. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  64. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  65. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  66. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  67. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  68. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  69. package/lib/cjs/curve/LineString3d.d.ts +7 -5
  70. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  71. package/lib/cjs/curve/LineString3d.js +8 -6
  72. package/lib/cjs/curve/LineString3d.js.map +1 -1
  73. package/lib/cjs/curve/Loop.d.ts.map +1 -1
  74. package/lib/cjs/curve/Loop.js +6 -6
  75. package/lib/cjs/curve/Loop.js.map +1 -1
  76. package/lib/cjs/curve/OffsetOptions.d.ts +1 -1
  77. package/lib/cjs/curve/OffsetOptions.js +1 -1
  78. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  79. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  80. package/lib/cjs/curve/Path.d.ts.map +1 -1
  81. package/lib/cjs/curve/Path.js +5 -6
  82. package/lib/cjs/curve/Path.js.map +1 -1
  83. package/lib/cjs/curve/PointString3d.js.map +1 -1
  84. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  85. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  86. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
  87. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  88. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  89. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  90. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  91. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  92. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  93. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  94. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  95. package/lib/cjs/curve/RegionOps.d.ts +4 -3
  96. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  97. package/lib/cjs/curve/RegionOps.js +4 -3
  98. package/lib/cjs/curve/RegionOps.js.map +1 -1
  99. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  100. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  101. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  103. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  104. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  105. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  106. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  107. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  108. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
  109. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  110. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
  111. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  112. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +22 -8
  113. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  114. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +127 -52
  115. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  116. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  118. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  119. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
  120. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
  121. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +1000 -0
  122. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
  123. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  124. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +11 -8
  125. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  126. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +7 -4
  127. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  128. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  129. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  130. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  131. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  132. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  133. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  134. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  135. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  136. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  137. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  138. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  139. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  140. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  141. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  142. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  143. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  144. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  145. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  146. package/lib/cjs/geometry3d/Angle.d.ts +18 -5
  147. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  148. package/lib/cjs/geometry3d/Angle.js +23 -7
  149. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  150. package/lib/cjs/geometry3d/AngleSweep.d.ts +14 -1
  151. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  152. package/lib/cjs/geometry3d/AngleSweep.js +47 -12
  153. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  154. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  155. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  156. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  157. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  158. package/lib/cjs/geometry3d/FrameBuilder.d.ts +2 -1
  159. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  160. package/lib/cjs/geometry3d/FrameBuilder.js +12 -10
  161. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  162. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  163. package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
  164. package/lib/cjs/geometry3d/GeometryHandler.js +1 -7
  165. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  166. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  167. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  168. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  169. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  170. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  171. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  172. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  173. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  174. package/lib/cjs/geometry3d/Matrix3d.d.ts +6 -4
  175. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  176. package/lib/cjs/geometry3d/Matrix3d.js +6 -4
  177. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  178. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  179. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  180. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  181. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  182. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  183. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  184. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  185. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +5 -5
  186. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  187. package/lib/cjs/geometry3d/Point3dVector3d.js +5 -5
  188. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  189. package/lib/cjs/geometry3d/PointHelpers.d.ts +6 -5
  190. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  191. package/lib/cjs/geometry3d/PointHelpers.js +11 -10
  192. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  193. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  194. package/lib/cjs/geometry3d/PolygonOps.d.ts +4 -4
  195. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  196. package/lib/cjs/geometry3d/PolygonOps.js +7 -11
  197. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  198. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +1 -1
  199. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  200. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
  201. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  202. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  203. package/lib/cjs/geometry3d/Range.d.ts +6 -1
  204. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  205. package/lib/cjs/geometry3d/Range.js +9 -3
  206. package/lib/cjs/geometry3d/Range.js.map +1 -1
  207. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  208. package/lib/cjs/geometry3d/Ray3d.d.ts +1 -1
  209. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  210. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  211. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  212. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  213. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  214. package/lib/cjs/geometry3d/Transform.d.ts +1 -1
  215. package/lib/cjs/geometry3d/Transform.js +1 -1
  216. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  217. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  218. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  219. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  220. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  221. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  222. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  223. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  224. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  225. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  226. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  227. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  228. package/lib/cjs/numerics/Complex.js.map +1 -1
  229. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  230. package/lib/cjs/numerics/Newton.d.ts +3 -3
  231. package/lib/cjs/numerics/Newton.d.ts.map +1 -1
  232. package/lib/cjs/numerics/Newton.js +14 -16
  233. package/lib/cjs/numerics/Newton.js.map +1 -1
  234. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  235. package/lib/cjs/numerics/PolarData.js.map +1 -1
  236. package/lib/cjs/numerics/Polynomials.d.ts +2 -2
  237. package/lib/cjs/numerics/Polynomials.js +2 -2
  238. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  239. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  240. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  241. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  242. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  243. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  244. package/lib/cjs/polyface/AuxData.js.map +1 -1
  245. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  246. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  247. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  248. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  249. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  250. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  251. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  252. package/lib/cjs/polyface/Polyface.js.map +1 -1
  253. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +7 -4
  254. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  255. package/lib/cjs/polyface/PolyfaceBuilder.js +11 -6
  256. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  257. package/lib/cjs/polyface/PolyfaceClip.d.ts +13 -10
  258. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  259. package/lib/cjs/polyface/PolyfaceClip.js +17 -14
  260. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  261. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  262. package/lib/cjs/polyface/PolyfaceQuery.d.ts +11 -14
  263. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  264. package/lib/cjs/polyface/PolyfaceQuery.js +59 -52
  265. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  266. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  267. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  268. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  269. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  270. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  271. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  272. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  273. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  274. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  275. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  276. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  277. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  278. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  279. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  280. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  281. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  282. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  283. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  284. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  285. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  286. package/lib/cjs/serialization/BGFBWriter.js +2 -2
  287. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  288. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  289. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  290. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  291. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  292. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  293. package/lib/cjs/solid/Box.js.map +1 -1
  294. package/lib/cjs/solid/Cone.js.map +1 -1
  295. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  296. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  297. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  298. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  299. package/lib/cjs/solid/Sphere.js.map +1 -1
  300. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  301. package/lib/cjs/solid/SweepContour.js +0 -4
  302. package/lib/cjs/solid/SweepContour.js.map +1 -1
  303. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  304. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  305. package/lib/cjs/topology/Graph.d.ts +1 -1
  306. package/lib/cjs/topology/Graph.js +2 -2
  307. package/lib/cjs/topology/Graph.js.map +1 -1
  308. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  309. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  310. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  311. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  312. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  313. package/lib/cjs/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
  314. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +1 -1
  315. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  316. package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
  317. package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
  318. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +168 -127
  319. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  320. package/lib/cjs/topology/HalfEdgePositionDetail.d.ts +35 -35
  321. package/lib/cjs/topology/HalfEdgePositionDetail.d.ts.map +1 -1
  322. package/lib/cjs/topology/HalfEdgePositionDetail.js +63 -41
  323. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  324. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  325. package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts +64 -12
  326. package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
  327. package/lib/cjs/topology/InsertAndRetriangulateContext.js +174 -75
  328. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  329. package/lib/cjs/topology/MaskManager.js.map +1 -1
  330. package/lib/cjs/topology/Merging.d.ts +2 -2
  331. package/lib/cjs/topology/Merging.js +2 -2
  332. package/lib/cjs/topology/Merging.js.map +1 -1
  333. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  334. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  335. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  336. package/lib/cjs/topology/Triangulation.d.ts +16 -10
  337. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  338. package/lib/cjs/topology/Triangulation.js +23 -30
  339. package/lib/cjs/topology/Triangulation.js.map +1 -1
  340. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  341. package/lib/esm/Constant.js.map +1 -1
  342. package/lib/esm/Geometry.d.ts +57 -46
  343. package/lib/esm/Geometry.d.ts.map +1 -1
  344. package/lib/esm/Geometry.js +73 -53
  345. package/lib/esm/Geometry.js.map +1 -1
  346. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  347. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  348. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  349. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  350. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  351. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  352. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  353. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  354. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  355. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  356. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  357. package/lib/esm/bspline/KnotVector.js.map +1 -1
  358. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  359. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  360. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  361. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  362. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  363. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  364. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  365. package/lib/esm/clipping/ClipVector.js.map +1 -1
  366. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  367. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  368. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  369. package/lib/esm/core-geometry.js.map +1 -1
  370. package/lib/esm/curve/Arc3d.d.ts +141 -38
  371. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  372. package/lib/esm/curve/Arc3d.js +217 -30
  373. package/lib/esm/curve/Arc3d.js.map +1 -1
  374. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  375. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  376. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +11 -6
  377. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  378. package/lib/esm/curve/CurveChainWithDistanceIndex.js +12 -10
  379. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  380. package/lib/esm/curve/CurveCollection.d.ts +2 -1
  381. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  382. package/lib/esm/curve/CurveCollection.js +2 -1
  383. package/lib/esm/curve/CurveCollection.js.map +1 -1
  384. package/lib/esm/curve/CurveCurve.d.ts +11 -9
  385. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  386. package/lib/esm/curve/CurveCurve.js +11 -9
  387. package/lib/esm/curve/CurveCurve.js.map +1 -1
  388. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  389. package/lib/esm/curve/CurveFactory.d.ts +4 -3
  390. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  391. package/lib/esm/curve/CurveFactory.js +4 -3
  392. package/lib/esm/curve/CurveFactory.js.map +1 -1
  393. package/lib/esm/curve/CurveLocationDetail.d.ts +19 -1
  394. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  395. package/lib/esm/curve/CurveLocationDetail.js +39 -0
  396. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  397. package/lib/esm/curve/CurveOps.d.ts +4 -4
  398. package/lib/esm/curve/CurveOps.d.ts.map +1 -1
  399. package/lib/esm/curve/CurveOps.js +6 -6
  400. package/lib/esm/curve/CurveOps.js.map +1 -1
  401. package/lib/esm/curve/CurvePrimitive.d.ts +1 -1
  402. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  403. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  404. package/lib/esm/curve/CurveTypes.js.map +1 -1
  405. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  406. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  407. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  408. package/lib/esm/curve/LineString3d.d.ts +7 -5
  409. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  410. package/lib/esm/curve/LineString3d.js +8 -6
  411. package/lib/esm/curve/LineString3d.js.map +1 -1
  412. package/lib/esm/curve/Loop.d.ts.map +1 -1
  413. package/lib/esm/curve/Loop.js +6 -6
  414. package/lib/esm/curve/Loop.js.map +1 -1
  415. package/lib/esm/curve/OffsetOptions.d.ts +1 -1
  416. package/lib/esm/curve/OffsetOptions.js +1 -1
  417. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  418. package/lib/esm/curve/ParityRegion.js.map +1 -1
  419. package/lib/esm/curve/Path.d.ts.map +1 -1
  420. package/lib/esm/curve/Path.js +5 -6
  421. package/lib/esm/curve/Path.js.map +1 -1
  422. package/lib/esm/curve/PointString3d.js.map +1 -1
  423. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  424. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  425. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
  426. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  427. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  428. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  429. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  430. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  431. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  432. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  433. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  434. package/lib/esm/curve/RegionOps.d.ts +4 -3
  435. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  436. package/lib/esm/curve/RegionOps.js +4 -3
  437. package/lib/esm/curve/RegionOps.js.map +1 -1
  438. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  439. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  440. package/lib/esm/curve/UnionRegion.js.map +1 -1
  441. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  442. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  443. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  444. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  445. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  446. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  447. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
  448. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  449. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
  450. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  451. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +22 -8
  452. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  453. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +127 -52
  454. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  455. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  456. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  457. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  458. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
  459. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
  460. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +995 -0
  461. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
  462. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  463. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +11 -8
  464. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  465. package/lib/esm/curve/internalContexts/MultiChainCollector.js +7 -4
  466. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  467. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  468. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  469. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  470. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  471. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  472. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  473. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  474. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  475. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  476. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  477. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  478. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  479. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  480. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  481. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  482. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  483. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  484. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  485. package/lib/esm/geometry3d/Angle.d.ts +18 -5
  486. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  487. package/lib/esm/geometry3d/Angle.js +23 -7
  488. package/lib/esm/geometry3d/Angle.js.map +1 -1
  489. package/lib/esm/geometry3d/AngleSweep.d.ts +14 -1
  490. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  491. package/lib/esm/geometry3d/AngleSweep.js +47 -12
  492. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  493. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  494. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  495. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  496. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  497. package/lib/esm/geometry3d/FrameBuilder.d.ts +2 -1
  498. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  499. package/lib/esm/geometry3d/FrameBuilder.js +12 -10
  500. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  501. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  502. package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
  503. package/lib/esm/geometry3d/GeometryHandler.js +1 -7
  504. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  505. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  506. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  507. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  508. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  509. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  510. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  511. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  512. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  513. package/lib/esm/geometry3d/Matrix3d.d.ts +6 -4
  514. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  515. package/lib/esm/geometry3d/Matrix3d.js +6 -4
  516. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  517. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  518. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  519. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  520. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  521. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  522. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  523. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  524. package/lib/esm/geometry3d/Point3dVector3d.d.ts +5 -5
  525. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  526. package/lib/esm/geometry3d/Point3dVector3d.js +5 -5
  527. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  528. package/lib/esm/geometry3d/PointHelpers.d.ts +6 -5
  529. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  530. package/lib/esm/geometry3d/PointHelpers.js +11 -10
  531. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  532. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  533. package/lib/esm/geometry3d/PolygonOps.d.ts +4 -4
  534. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  535. package/lib/esm/geometry3d/PolygonOps.js +7 -11
  536. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  537. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +1 -1
  538. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  539. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
  540. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  541. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  542. package/lib/esm/geometry3d/Range.d.ts +6 -1
  543. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  544. package/lib/esm/geometry3d/Range.js +9 -3
  545. package/lib/esm/geometry3d/Range.js.map +1 -1
  546. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  547. package/lib/esm/geometry3d/Ray3d.d.ts +1 -1
  548. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  549. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  550. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  551. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  552. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  553. package/lib/esm/geometry3d/Transform.d.ts +1 -1
  554. package/lib/esm/geometry3d/Transform.js +1 -1
  555. package/lib/esm/geometry3d/Transform.js.map +1 -1
  556. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  557. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  558. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  559. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  560. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  561. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  562. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  563. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  564. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  565. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  566. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  567. package/lib/esm/numerics/Complex.js.map +1 -1
  568. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  569. package/lib/esm/numerics/Newton.d.ts +3 -3
  570. package/lib/esm/numerics/Newton.d.ts.map +1 -1
  571. package/lib/esm/numerics/Newton.js +14 -16
  572. package/lib/esm/numerics/Newton.js.map +1 -1
  573. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  574. package/lib/esm/numerics/PolarData.js.map +1 -1
  575. package/lib/esm/numerics/Polynomials.d.ts +2 -2
  576. package/lib/esm/numerics/Polynomials.js +2 -2
  577. package/lib/esm/numerics/Polynomials.js.map +1 -1
  578. package/lib/esm/numerics/Quadrature.js.map +1 -1
  579. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  580. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  581. package/lib/esm/numerics/UnionFind.js.map +1 -1
  582. package/lib/esm/numerics/UsageSums.js.map +1 -1
  583. package/lib/esm/polyface/AuxData.js.map +1 -1
  584. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  585. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  586. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  587. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  588. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  589. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  590. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  591. package/lib/esm/polyface/Polyface.js.map +1 -1
  592. package/lib/esm/polyface/PolyfaceBuilder.d.ts +7 -4
  593. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  594. package/lib/esm/polyface/PolyfaceBuilder.js +11 -6
  595. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  596. package/lib/esm/polyface/PolyfaceClip.d.ts +13 -10
  597. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  598. package/lib/esm/polyface/PolyfaceClip.js +17 -14
  599. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  600. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  601. package/lib/esm/polyface/PolyfaceQuery.d.ts +11 -14
  602. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  603. package/lib/esm/polyface/PolyfaceQuery.js +59 -52
  604. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  605. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  606. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  607. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  608. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  609. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  610. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  611. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  612. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  613. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  614. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  615. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  616. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  617. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  618. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  619. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  620. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  621. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  622. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  623. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  624. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  625. package/lib/esm/serialization/BGFBWriter.js +2 -2
  626. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  627. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  628. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  629. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  630. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  631. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  632. package/lib/esm/solid/Box.js.map +1 -1
  633. package/lib/esm/solid/Cone.js.map +1 -1
  634. package/lib/esm/solid/LinearSweep.js.map +1 -1
  635. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  636. package/lib/esm/solid/RuledSweep.js.map +1 -1
  637. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  638. package/lib/esm/solid/Sphere.js.map +1 -1
  639. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  640. package/lib/esm/solid/SweepContour.js +0 -4
  641. package/lib/esm/solid/SweepContour.js.map +1 -1
  642. package/lib/esm/solid/TorusPipe.js.map +1 -1
  643. package/lib/esm/topology/ChainMerge.js.map +1 -1
  644. package/lib/esm/topology/Graph.d.ts +1 -1
  645. package/lib/esm/topology/Graph.js +2 -2
  646. package/lib/esm/topology/Graph.js.map +1 -1
  647. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  648. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  649. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  650. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  651. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  652. package/lib/esm/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
  653. package/lib/esm/topology/HalfEdgeNodeXYZUV.js +1 -1
  654. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  655. package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
  656. package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
  657. package/lib/esm/topology/HalfEdgePointInGraphSearch.js +168 -127
  658. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  659. package/lib/esm/topology/HalfEdgePositionDetail.d.ts +35 -35
  660. package/lib/esm/topology/HalfEdgePositionDetail.d.ts.map +1 -1
  661. package/lib/esm/topology/HalfEdgePositionDetail.js +63 -41
  662. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  663. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  664. package/lib/esm/topology/InsertAndRetriangulateContext.d.ts +64 -12
  665. package/lib/esm/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
  666. package/lib/esm/topology/InsertAndRetriangulateContext.js +173 -74
  667. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  668. package/lib/esm/topology/MaskManager.js.map +1 -1
  669. package/lib/esm/topology/Merging.d.ts +2 -2
  670. package/lib/esm/topology/Merging.js +2 -2
  671. package/lib/esm/topology/Merging.js.map +1 -1
  672. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  673. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  674. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  675. package/lib/esm/topology/Triangulation.d.ts +16 -10
  676. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  677. package/lib/esm/topology/Triangulation.js +24 -31
  678. package/lib/esm/topology/Triangulation.js.map +1 -1
  679. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  680. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"PolyfaceData.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceData.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 Polyface\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { ClusterableArray } from \"../numerics/ClusterableArray\";\r\nimport { PolyfaceAuxData } from \"./AuxData\";\r\nimport { FacetFaceData } from \"./FacetFaceData\";\r\nimport { TaggedNumericData } from \"./TaggedNumericData\";\r\n\r\n// cspell:word internaldocs\r\n\r\n/**\r\n * `PolyfaceData` carries data arrays for point, normal, uv-parameters, and color, and index arrays for each.\r\n * * Normal, uv-parameter, and color data are optional.\r\n * * A given data array is defined if and only if its corresponding index array is defined.\r\n * * All defined index arrays have parallel face loop order and structure, and thus the same length.\r\n * * `IndexedPolyface` carries a PolyfaceData as a member (NOT as a base class; it already has `GeometryQuery` as base).\r\n * * `IndexedPolyfaceVisitor` uses PolyfaceData as a base class. In this use, there is only a single facet in `PolyfaceData`.\r\n * * `PolyfaceData` does not know what index range constitutes a given facet. This is managed by a derived/carrier class.\r\n * @public\r\n */\r\nexport class PolyfaceData {\r\n /**\r\n * Relative tolerance used in tests for planar facets.\r\n * @internal\r\n */\r\n public static readonly planarityLocalRelTol = 1.0e-13;\r\n /** Coordinate data for points in the facets (packed as numbers in a contiguous array). */\r\n public point: GrowableXYZArray;\r\n /** Indices of points at facet vertices. */\r\n public pointIndex: number[];\r\n /** Coordinates of normal vectors (packed as numbers in a contiguous array). */\r\n public normal?: GrowableXYZArray;\r\n /** Indices of normals at facet vertices. */\r\n public normalIndex?: number[];\r\n /** Coordinates of uv parameters (packed as numbers in a contiguous array). */\r\n public param?: GrowableXYArray;\r\n /** Indices of params at facet vertices. */\r\n public paramIndex?: number[];\r\n /**\r\n * Color values. These are carried around as simple numbers, but are probably required (by display systems) to map\r\n * exactly to 32-bit integers.\r\n */\r\n public color?: number[];\r\n /** Indices of colors at facet vertices. */\r\n public colorIndex?: number[];\r\n /**\r\n * Map from facet index to face data.\r\n * * A \"face\" is a logical grouping of connected facets in the mesh, e.g., the facets that resulted from faceting\r\n * a given face of a solid.\r\n * * Face data remains empty until a face is specified.\r\n */\r\n public face: FacetFaceData[];\r\n /** Auxiliary data. */\r\n public auxData?: PolyfaceAuxData;\r\n /** Tagged geometry data. */\r\n public taggedNumericData?: TaggedNumericData;\r\n /**\r\n * Booleans indicating visibility of corresponding edges.\r\n * * The `edgeVisible` array is parallel to the `pointIndex` array.\r\n * * The visibility flag applies to the edge whose start vertex index appears in the same place in the `pointIndex` array.\r\n * * For example, consider the mesh with 2 triangular facets given by `pointIndex = [1,0,2, 1,2,3]`. If the triangles'\r\n * shared edge is hidden, then the mesh has `edgeVisible = [true,true,false, false,true,true]`.\r\n */\r\n public edgeVisible: boolean[];\r\n /** Boolean tag indicating if the facets are viewable from the back. */\r\n private _twoSided: boolean;\r\n /**\r\n * Flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2).\r\n * * A boundary edge of a mesh is defined as an edge with only one connected facet.\r\n * * Closed solid is a mesh with no boundary edge. Open sheet is a mesh that has boundary edge(s).\r\n */\r\n private _expectedClosure: number;\r\n /**\r\n * Constructor for facets.\r\n * @param needNormals `true` to allocate empty normal data and index arrays; `false` (default) to leave undefined.\r\n * @param needParams `true` to allocate empty uv parameter data and index arrays; `false` (default) to leave undefined.\r\n * @param needColors `true` to allocate empty color data and index arrays; `false` (default) to leave undefined.\r\n * @param twoSided `true` if the facets are to be considered viewable from the back; `false` (default) if not.\r\n */\r\n public constructor(\r\n needNormals: boolean = false, needParams: boolean = false, needColors: boolean = false, twoSided: boolean = false,\r\n ) {\r\n this.point = new GrowableXYZArray();\r\n this.pointIndex = [];\r\n if (needNormals) {\r\n this.normal = new GrowableXYZArray();\r\n this.normalIndex = [];\r\n }\r\n if (needParams) {\r\n this.param = new GrowableXYArray();\r\n this.paramIndex = [];\r\n }\r\n if (needColors) {\r\n this.color = [];\r\n this.colorIndex = [];\r\n }\r\n this.face = [];\r\n this.edgeVisible = [];\r\n this._twoSided = twoSided;\r\n this._expectedClosure = 0;\r\n }\r\n /** Return a deep clone. */\r\n public clone(): PolyfaceData {\r\n const result = new PolyfaceData();\r\n result.point = this.point.clone();\r\n result.pointIndex = this.pointIndex.slice();\r\n if (this.normal)\r\n result.normal = this.normal.clone();\r\n if (this.normalIndex)\r\n result.normalIndex = this.normalIndex.slice();\r\n if (this.param)\r\n result.param = this.param.clone();\r\n if (this.paramIndex)\r\n result.paramIndex = this.paramIndex.slice();\r\n if (this.color)\r\n result.color = this.color.slice();\r\n if (this.colorIndex)\r\n result.colorIndex = this.colorIndex.slice();\r\n result.face = this.face.slice();\r\n if (this.auxData)\r\n result.auxData = this.auxData.clone();\r\n if (this.taggedNumericData)\r\n result.taggedNumericData = this.taggedNumericData.clone();\r\n result.edgeVisible = this.edgeVisible.slice();\r\n result.twoSided = this.twoSided;\r\n result.expectedClosure = this.expectedClosure;\r\n return result;\r\n }\r\n /** Test for equal indices and nearly equal coordinates. */\r\n public isAlmostEqual(other: PolyfaceData): boolean {\r\n if (!GrowableXYZArray.isAlmostEqual(this.point, other.point))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.pointIndex, other.pointIndex))\r\n return false;\r\n if (!GrowableXYZArray.isAlmostEqual(this.normal, other.normal))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.normalIndex, other.normalIndex))\r\n return false;\r\n if (!GrowableXYArray.isAlmostEqual(this.param, other.param))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.paramIndex, other.paramIndex))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.color, other.color))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.colorIndex, other.colorIndex))\r\n return false;\r\n if (!PolyfaceAuxData.isAlmostEqual(this.auxData, other.auxData))\r\n return false;\r\n if (!TaggedNumericData.areAlmostEqual(this.taggedNumericData, other.taggedNumericData))\r\n return false;\r\n if (!NumberArray.isExactEqual(this.edgeVisible, other.edgeVisible))\r\n return false;\r\n if (this.twoSided !== other.twoSided)\r\n return false;\r\n if (this.expectedClosure !== other.expectedClosure)\r\n return false;\r\n return true;\r\n }\r\n /** Ask if normals are required in this mesh. */\r\n public get requireNormals(): boolean {\r\n return undefined !== this.normal;\r\n }\r\n /** Ask if params are required in this mesh. */\r\n public get requireParams(): boolean {\r\n return undefined !== this.param;\r\n }\r\n /** Ask if colors are required in this mesh. */\r\n public get requireColors(): boolean {\r\n return undefined !== this.color;\r\n }\r\n /** Get the point count */\r\n public get pointCount() {\r\n return this.point.length;\r\n }\r\n /** Get the normal count */\r\n public get normalCount() {\r\n return this.normal ? this.normal.length : 0;\r\n }\r\n /** Get the param count */\r\n public get paramCount() {\r\n return this.param ? this.param.length : 0;\r\n }\r\n /** Get the color count */\r\n public get colorCount() {\r\n return this.color ? this.color.length : 0;\r\n }\r\n /** Get the index count. Note that the point array is always indexed, and index arrays all have the same length. */\r\n public get indexCount() {\r\n return this.pointIndex.length;\r\n }\r\n /**\r\n * Get the number of faces.\r\n * * Note that a \"face\" is not a facet.\r\n * * A face is a subset of the Polyface's facets grouped for application purposes.\r\n */\r\n public get faceCount() {\r\n return this.face.length;\r\n }\r\n /** Return indexed point at index `i`. This is a COPY of the coordinates, not a reference. */\r\n public getPoint(i: number, result?: Point3d): Point3d | undefined {\r\n return this.point.getPoint3dAtCheckedPointIndex(i, result);\r\n }\r\n /** Return indexed normal at index `i`. This is a COPY of the normal, not a reference. */\r\n public getNormal(i: number, result?: Vector3d): Vector3d | undefined {\r\n return this.normal ? this.normal.getVector3dAtCheckedVectorIndex(i, result) : undefined;\r\n }\r\n /** Return indexed param at index `i`. This is a COPY of the coordinates, not a reference. */\r\n public getParam(i: number, result?: Point2d): Point2d | undefined {\r\n return this.param ? this.param.getPoint2dAtCheckedPointIndex(i, result) : undefined;\r\n }\r\n /** Return indexed color at index `i`. Index `i` is not checked for validity. */\r\n public getColor(i: number): number {\r\n return this.color ? this.color[i] : 0;\r\n }\r\n /** Return indexed visibility. at index `i`. Index `i` is not checked for validity. */\r\n public getEdgeVisible(i: number): boolean {\r\n return this.edgeVisible[i];\r\n }\r\n /** Get boolean tag indicating if the facets are to be considered viewable from the back. */\r\n public get twoSided(): boolean {\r\n return this._twoSided;\r\n }\r\n public set twoSided(value: boolean) {\r\n this._twoSided = value;\r\n }\r\n /** Get flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2). */\r\n public get expectedClosure(): number {\r\n return this._expectedClosure;\r\n }\r\n public set expectedClosure(value: number) {\r\n this._expectedClosure = value;\r\n }\r\n /** Set the tagged geometry data. */\r\n public setTaggedNumericData(data: TaggedNumericData | undefined) {\r\n this.taggedNumericData = data;\r\n }\r\n /** Copy the contents (not pointer) of `point[i]` into `dest`. Index `i` is not checked for validity. */\r\n public copyPointTo(i: number, dest: Point3d): void {\r\n this.point.getPoint3dAtUncheckedPointIndex(i, dest);\r\n }\r\n /** Copy the contents (not pointer) of `normal[i]` into `dest`. Index `i` is not checked for validity. */\r\n public copyNormalTo(i: number, dest: Vector3d): void {\r\n if (this.normal)\r\n this.normal.getVector3dAtUncheckedVectorIndex(i, dest);\r\n }\r\n /** Copy the contents (not pointer) of `param[i]` into `dest`. Index `i` is not checked for validity. */\r\n public copyParamTo(i: number, dest: Point2d): void {\r\n if (this.param)\r\n this.param.getPoint2dAtUncheckedPointIndex(i, dest);\r\n }\r\n /** Test if param at a index `i` matches the given uv */\r\n public isAlmostEqualParamIndexUV(i: number, u: number, v: number): boolean {\r\n if (this.param !== undefined && i >= 0 && i < this.param.length)\r\n return Geometry.isSameCoordinate(u, this.param.getXAtUncheckedPointIndex(i))\r\n && Geometry.isSameCoordinate(v, this.param.getYAtUncheckedPointIndex(i));\r\n return false;\r\n }\r\n /**\r\n * Copy data from `other` to `this`.\r\n * * This is the essence of transferring coordinates spread throughout a large polyface into a visitor's single facet.\r\n * * Common usage: \"other\" is a Polyface, \"this\" is a PolyfaceVisitor to receive data from a single facet of the Polyface.\r\n * * Does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface.\r\n * @param other polyface data being mined.\r\n * @param index0 start index in other's index arrays.\r\n * @param index1 end index (one beyond last data accessed) in other's index arrays.\r\n * @param numWrap number of points to replicate as wraparound.\r\n */\r\n public gatherIndexedData(other: PolyfaceData, index0: number, index1: number, numWrap: number): void {\r\n const numEdge = index1 - index0;\r\n if (numWrap > numEdge)\r\n numWrap = numEdge;\r\n const numTotal = numEdge + numWrap;\r\n this.resizeAllArrays(numTotal);\r\n // copy wrapped points\r\n for (let i = 0; i < numEdge; i++)\r\n this.point.transferFromGrowableXYZArray(i, other.point, other.pointIndex[index0 + i]);\r\n for (let i = 0; i < numWrap; i++)\r\n this.point.transferFromGrowableXYZArray(numEdge + i, this.point, i);\r\n // copy wrapped pointIndex\r\n for (let i = 0; i < numEdge; i++)\r\n this.pointIndex[i] = other.pointIndex[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.pointIndex[numEdge + i] = this.pointIndex[i];\r\n // copy wrapped normals\r\n if (this.normal && this.normalIndex && other.normal && other.normalIndex) {\r\n for (let i = 0; i < numEdge; i++)\r\n this.normal.transferFromGrowableXYZArray(i, other.normal, other.normalIndex[index0 + i]);\r\n for (let i = 0; i < numWrap; i++)\r\n this.normal.transferFromGrowableXYZArray(numEdge + i, this.normal, i);\r\n // copy wrapped normalIndex\r\n for (let i = 0; i < numEdge; i++)\r\n this.normalIndex[i] = other.normalIndex[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.normalIndex[numEdge + i] = this.normalIndex[i];\r\n }\r\n // copy wrapped params\r\n if (this.param && this.paramIndex && other.param && other.paramIndex) {\r\n for (let i = 0; i < numEdge; i++)\r\n this.param.transferFromGrowableXYArray(i, other.param, other.paramIndex[index0 + i]);\r\n for (let i = 0; i < numWrap; i++)\r\n this.param.transferFromGrowableXYArray(numEdge + i, this.param, i);\r\n // copy wrapped paramIndex\r\n for (let i = 0; i < numEdge; i++)\r\n this.paramIndex[i] = other.paramIndex[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.paramIndex[numEdge + i] = this.paramIndex[i];\r\n }\r\n // copy wrapped colors\r\n if (this.color && this.colorIndex && other.color && other.colorIndex) {\r\n for (let i = 0; i < numEdge; i++)\r\n this.color[i] = other.color[other.colorIndex[index0 + i]];\r\n for (let i = 0; i < numWrap; i++)\r\n this.color[numEdge + i] = this.color[i];\r\n // copy wrapped colorIndex\r\n for (let i = 0; i < numEdge; i++)\r\n this.colorIndex[i] = other.colorIndex[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.colorIndex[numEdge + i] = this.colorIndex[i];\r\n }\r\n // copy wrapped edge visibility\r\n for (let i = 0; i < numEdge; i++)\r\n this.edgeVisible[i] = other.edgeVisible[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.edgeVisible[numEdge + i] = this.edgeVisible[i];\r\n // copy wrapped auxData\r\n if (this.auxData && other.auxData && this.auxData.channels.length === other.auxData.channels.length) {\r\n for (let iChannel = 0; iChannel < this.auxData.channels.length; iChannel++) {\r\n const thisChannel = this.auxData.channels[iChannel];\r\n const otherChannel = other.auxData.channels[iChannel];\r\n const blockSize = thisChannel.entriesPerValue;\r\n if (thisChannel.data.length === otherChannel.data.length) {\r\n for (let iData = 0; iData < thisChannel.data.length; iData++) {\r\n const thisData = thisChannel.data[iData];\r\n const otherData = otherChannel.data[iData];\r\n for (let i = 0; i < numEdge; i++)\r\n thisData.copyValues(otherData, i, other.auxData.indices[index0 + i], blockSize);\r\n for (let i = 0; i < numWrap; i++)\r\n thisData.copyValues(thisData, other.auxData.indices[numEdge + i], i, blockSize);\r\n }\r\n }\r\n }\r\n // copy wrapped auxData index\r\n for (let i = 0; i < numEdge; i++)\r\n this.auxData.indices[i] = other.auxData.indices[index0 + i];\r\n for (let i = 0; i < numWrap; i++)\r\n this.auxData.indices[numEdge + i] = this.auxData.indices[i];\r\n }\r\n }\r\n /** Trim the `data` arrays to the stated `length`. */\r\n private static trimArray(data: any[] | undefined, length: number) {\r\n if (data && length < data.length)\r\n data.length = length;\r\n }\r\n /**\r\n * Trim all index arrays to the stated `length`.\r\n * * This is called by PolyfaceBuilder to clean up after an aborted construction sequence.\r\n */\r\n public trimAllIndexArrays(length: number): void {\r\n PolyfaceData.trimArray(this.pointIndex, length);\r\n PolyfaceData.trimArray(this.paramIndex, length);\r\n PolyfaceData.trimArray(this.normalIndex, length);\r\n PolyfaceData.trimArray(this.colorIndex, length);\r\n PolyfaceData.trimArray(this.edgeVisible, length);\r\n if (this.auxData) {\r\n PolyfaceData.trimArray(this.auxData.indices, length);\r\n for (const channel of this.auxData.channels) {\r\n for (const data of channel.data)\r\n PolyfaceData.trimArray(data.values, channel.entriesPerValue * length);\r\n }\r\n }\r\n }\r\n /**\r\n * Resize all data and index arrays to the specified `length`.\r\n * * This is used by visitors, whose data and index arrays are all parallel.\r\n */\r\n public resizeAllArrays(length: number): void {\r\n if (length > this.point.length) {\r\n while (this.point.length < length)\r\n this.point.push(Point3d.create());\r\n while (this.pointIndex.length < length)\r\n this.pointIndex.push(-1);\r\n if (this.normal)\r\n while (this.normal.length < length)\r\n this.normal.push(Vector3d.create());\r\n if (this.normalIndex)\r\n while (this.normalIndex.length < length)\r\n this.normalIndex.push(-1);\r\n if (this.param)\r\n while (this.param.length < length)\r\n this.param.push(Point2d.create());\r\n if (this.paramIndex)\r\n while (this.paramIndex.length < length)\r\n this.paramIndex.push(-1);\r\n if (this.color)\r\n while (this.color.length < length)\r\n this.color.push(0);\r\n if (this.colorIndex)\r\n while (this.colorIndex.length < length)\r\n this.colorIndex.push(-1);\r\n while (this.edgeVisible.length < length)\r\n this.edgeVisible.push(false);\r\n if (this.auxData) {\r\n for (const channel of this.auxData.channels) {\r\n for (const channelData of channel.data) {\r\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\r\n }\r\n }\r\n if (this.auxData.indices)\r\n this.auxData.indices.push(-1);\r\n }\r\n } else if (length < this.point.length) {\r\n this.point.resize(length);\r\n this.pointIndex.length = length;\r\n if (this.normal)\r\n this.normal.resize(length);\r\n if (this.normalIndex)\r\n this.normalIndex.length = length;\r\n if (this.param)\r\n this.param.resize(length);\r\n if (this.paramIndex)\r\n this.paramIndex.length = length;\r\n if (this.color)\r\n this.color.length = length;\r\n if (this.colorIndex)\r\n this.colorIndex.length = length;\r\n this.edgeVisible.length = length;\r\n if (this.auxData) {\r\n for (const channel of this.auxData.channels) {\r\n for (const channelData of channel.data) {\r\n channelData.values.length = length * channel.entriesPerValue;\r\n }\r\n }\r\n if (this.auxData.indices)\r\n this.auxData.indices.length = length;\r\n }\r\n }\r\n }\r\n /**\r\n * Resize all data arrays to the specified `length`.\r\n * @deprecated in 4.x because name is misleading. Call [[PolyfaceData.resizeAllArrays]] instead.\r\n */\r\n public resizeAllDataArrays(length: number): void {\r\n if (length > this.point.length) {\r\n while (this.point.length < length) this.point.push(Point3d.create());\r\n while (this.pointIndex.length < length) this.pointIndex.push(-1);\r\n while (this.edgeVisible.length < length) this.edgeVisible.push(false);\r\n if (this.normal)\r\n while (this.normal.length < length) this.normal.push(Vector3d.create());\r\n if (this.param)\r\n while (this.param.length < length) this.param.push(Point2d.create());\r\n if (this.color)\r\n while (this.color.length < length) this.color.push(0);\r\n if (this.auxData) {\r\n for (const channel of this.auxData.channels) {\r\n for (const channelData of channel.data) {\r\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\r\n }\r\n }\r\n }\r\n } else if (length < this.point.length) {\r\n this.point.resize(length);\r\n this.edgeVisible.length = length;\r\n this.pointIndex.length = length;\r\n if (this.normal) this.normal.resize(length);\r\n if (this.param) this.param.resize(length);\r\n if (this.color) this.color.length = length;\r\n if (this.auxData) {\r\n for (const channel of this.auxData.channels) {\r\n for (const channelData of channel.data) {\r\n channelData.values.length = length * channel.entriesPerValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Return the range of the point array (optionally transformed). */\r\n public range(result?: Range3d, transform?: Transform): Range3d {\r\n result = result ? result : Range3d.createNull();\r\n result.extendArray(this.point, transform);\r\n return result;\r\n }\r\n /**\r\n * Apply `transform` to point and normal arrays and to auxData.\r\n * * IMPORTANT This base class is just a data carrier. It does not know if the index order and normal directions\r\n * have special meaning, i.e., caller must separately reverse index order and normal direction if needed.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n this.point.multiplyTransformInPlace(transform);\r\n if (this.normal && !transform.matrix.isIdentity)\r\n this.normal.multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(transform.matrix);\r\n return undefined === this.auxData || this.auxData.tryTransformInPlace(transform);\r\n }\r\n /**\r\n * Compress the instance by equating duplicate data.\r\n * * Search for duplicates within vertices, normals, params, and colors.\r\n * * Compress each data array.\r\n * * Revise all indexing for the relocated data.\r\n * * [[PolyfaceAuxData]] is compressed if and only if exactly one [[AuxChannelData]] is present.\r\n * @param tolerance (optional) tolerance for clustering mesh vertices only. Default value, and the tolerance used to cluster all other data, is [[Geometry.smallMetricDistance]].\r\n */\r\n public compress(tolerance: number = Geometry.smallMetricDistance): void {\r\n // more info can be found at geometry/internaldocs/Polyface.md\r\n const packedPoints = ClusterableArray.clusterGrowablePoint3dArray(this.point, tolerance);\r\n this.point = packedPoints.growablePackedPoints!;\r\n packedPoints.updateIndices(this.pointIndex);\r\n // for now, normals, params, and colors use the default tolerance for clustering\r\n if (this.normalIndex && this.normal) {\r\n const packedNormals = ClusterableArray.clusterGrowablePoint3dArray(this.normal);\r\n this.normal = packedNormals.growablePackedPoints!;\r\n packedNormals.updateIndices(this.normalIndex);\r\n }\r\n if (this.paramIndex && this.param) {\r\n const packedParams = ClusterableArray.clusterGrowablePoint2dArray(this.param);\r\n this.param = packedParams.growablePackedPoints;\r\n packedParams.updateIndices(this.paramIndex);\r\n }\r\n if (this.colorIndex && this.color) {\r\n const packedColors = ClusterableArray.clusterNumberArray(this.color);\r\n this.color = packedColors.packedNumbers;\r\n packedColors.updateIndices(this.colorIndex);\r\n }\r\n if (this.auxData && this.auxData.channels.length === 1 && this.auxData.channels[0].data.length === 1) {\r\n const dataSize = this.auxData.channels[0].entriesPerValue;\r\n if (1 === dataSize) {\r\n const packedData = ClusterableArray.clusterNumberArray(this.auxData.channels[0].data[0].values);\r\n this.auxData.channels[0].data[0].values = packedData.packedNumbers;\r\n packedData.updateIndices(this.auxData.indices);\r\n } else if (3 === dataSize) {\r\n const blockedData = GrowableXYZArray.create(this.auxData.channels[0].data[0].values);\r\n const packedData = ClusterableArray.clusterGrowablePoint3dArray(blockedData);\r\n this.auxData.channels[0].data[0].values = NumberArray.create(packedData.growablePackedPoints!.float64Data());\r\n packedData.updateIndices(this.auxData.indices);\r\n }\r\n }\r\n }\r\n /**\r\n * Test if `facetStartIndex` is (minimally) valid.\r\n * * Length must be nonzero (recall that for \"no facets\", the `facetStartIndex` array still must contain a 0).\r\n * * Each entry must be strictly smaller than the one that follows.\r\n * @param facetStartIndex start indices of all facets. Facet k starts at facetStartIndex[k] up to (but not including)\r\n * `facetStartIndex[k + 1]`\r\n */\r\n public static isValidFacetStartIndexArray(facetStartIndex: number[]): boolean {\r\n // facetStartIndex for empty facets has a single entry \"0\" -- empty array is not allowed\r\n if (facetStartIndex.length === 0)\r\n return false;\r\n for (let i = 0; i + 1 < facetStartIndex.length; i++)\r\n if (facetStartIndex[i] >= facetStartIndex[i + 1])\r\n return false;\r\n return true;\r\n }\r\n /**\r\n * Reverse the indices for the specified facets in the given index array.\r\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\r\n * @param facetStartIndex start indices of *consecutive* facets to be reversed, e.g., an IndexedPolyface's _facetStart\r\n * array. See the non-static [[reverseIndices]].\r\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\r\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\r\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\r\n */\r\n public static reverseIndices<T>(facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean): boolean {\r\n if (!indices || indices.length === 0)\r\n return true; // empty case\r\n if (indices.length > 0) {\r\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length) {\r\n for (let i = 0; i + 1 < facetStartIndex.length; i++) {\r\n let index0 = facetStartIndex[i];\r\n let index1 = facetStartIndex[i + 1];\r\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\r\n while (index1 > index0 + 2) {\r\n index1--;\r\n index0++;\r\n const a = indices[index0];\r\n indices[index0] = indices[index1];\r\n indices[index1] = a;\r\n }\r\n } else { // reverse all\r\n while (index1 > index0 + 1) {\r\n index1--;\r\n const a = indices[index0];\r\n indices[index0] = indices[index1];\r\n indices[index1] = a;\r\n index0++;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Reverse the indices for the specified facet in the specified index array.\r\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\r\n * @param facetIndex index of the facet to reverse. The entries of `indices` to be reversed are found at\r\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\r\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\r\n * See [[reverseIndices]].\r\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\r\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\r\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\r\n */\r\n public static reverseIndicesSingleFacet<T>(\r\n facetIndex: number, facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean,\r\n ): boolean {\r\n if (!indices || indices.length === 0)\r\n return true; // empty case\r\n if (indices.length > 0) {\r\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length\r\n && facetIndex >= 0 && facetIndex + 1 < facetStartIndex.length) {\r\n let index0 = facetStartIndex[facetIndex];\r\n let index1 = facetStartIndex[facetIndex + 1];\r\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\r\n while (index1 > index0 + 2) {\r\n index1--;\r\n index0++;\r\n const a = indices[index0];\r\n indices[index0] = indices[index1];\r\n indices[index1] = a;\r\n }\r\n } else { // reverse all\r\n while (index1 > index0 + 1) {\r\n index1--;\r\n const a = indices[index0];\r\n indices[index0] = indices[index1];\r\n indices[index1] = a;\r\n index0++;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * Reverse the indices for the specified facets in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\r\n * and edgeVisible).\r\n * @param facetStartIndex start indices of *consecutive* facets to be reversed.\r\n * * Consecutive indices in this array define where a given facet is represented in each of the parallel index arrays.\r\n * * The indices for facet k are `facetStartIndex[k]` up to (but not including) `facetStartIndex[k + 1]`.\r\n * * This implies `facetStartIndex[k + 1]` is both the upper limit of facet k's indices, and the start index of facet k+1.\r\n * * For example, passing an IndexedPolyface's _facetStart array into this method reverses every facet.\r\n */\r\n public reverseIndices(facetStartIndex?: number[]): void {\r\n if (facetStartIndex && PolyfaceData.isValidFacetStartIndexArray(facetStartIndex)) {\r\n PolyfaceData.reverseIndices(facetStartIndex, this.pointIndex, true);\r\n if (this.normalIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndices(facetStartIndex, this.normalIndex, true);\r\n if (this.paramIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndices(facetStartIndex, this.paramIndex, true);\r\n if (this.colorIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndices(facetStartIndex, this.colorIndex, true);\r\n PolyfaceData.reverseIndices(facetStartIndex, this.edgeVisible, false);\r\n }\r\n }\r\n /**\r\n * Reverse the indices for the specified facet in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\r\n * and edgeVisible).\r\n * @param facetIndex index of the facet to reverse. The entries of each index array to be reversed are found at\r\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\r\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\r\n * See [[reverseIndices]].\r\n */\r\n public reverseIndicesSingleFacet(facetIndex: number, facetStartIndex: number[]): void {\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.pointIndex, true);\r\n if (this.normalIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.normalIndex, true);\r\n if (this.paramIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.paramIndex, true);\r\n if (this.colorIndex !== this.pointIndex)\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.colorIndex, true);\r\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.edgeVisible, false);\r\n }\r\n /** Scale all the normals by -1. */\r\n public reverseNormals() {\r\n if (this.normal)\r\n this.normal.scaleInPlace(-1.0);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PolyfaceData.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceData.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 Polyface\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\nimport { Range3d } from \"../geometry3d/Range\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { ClusterableArray } from \"../numerics/ClusterableArray\";\nimport { PolyfaceAuxData } from \"./AuxData\";\nimport { FacetFaceData } from \"./FacetFaceData\";\nimport { TaggedNumericData } from \"./TaggedNumericData\";\n\n// cspell:word internaldocs\n\n/**\n * `PolyfaceData` carries data arrays for point, normal, uv-parameters, and color, and index arrays for each.\n * * Normal, uv-parameter, and color data are optional.\n * * A given data array is defined if and only if its corresponding index array is defined.\n * * All defined index arrays have parallel face loop order and structure, and thus the same length.\n * * `IndexedPolyface` carries a PolyfaceData as a member (NOT as a base class; it already has `GeometryQuery` as base).\n * * `IndexedPolyfaceVisitor` uses PolyfaceData as a base class. In this use, there is only a single facet in `PolyfaceData`.\n * * `PolyfaceData` does not know what index range constitutes a given facet. This is managed by a derived/carrier class.\n * @public\n */\nexport class PolyfaceData {\n /**\n * Relative tolerance used in tests for planar facets.\n * @internal\n */\n public static readonly planarityLocalRelTol = 1.0e-13;\n /** Coordinate data for points in the facets (packed as numbers in a contiguous array). */\n public point: GrowableXYZArray;\n /** Indices of points at facet vertices. */\n public pointIndex: number[];\n /** Coordinates of normal vectors (packed as numbers in a contiguous array). */\n public normal?: GrowableXYZArray;\n /** Indices of normals at facet vertices. */\n public normalIndex?: number[];\n /** Coordinates of uv parameters (packed as numbers in a contiguous array). */\n public param?: GrowableXYArray;\n /** Indices of params at facet vertices. */\n public paramIndex?: number[];\n /**\n * Color values. These are carried around as simple numbers, but are probably required (by display systems) to map\n * exactly to 32-bit integers.\n */\n public color?: number[];\n /** Indices of colors at facet vertices. */\n public colorIndex?: number[];\n /**\n * Map from facet index to face data.\n * * A \"face\" is a logical grouping of connected facets in the mesh, e.g., the facets that resulted from faceting\n * a given face of a solid.\n * * Face data remains empty until a face is specified.\n */\n public face: FacetFaceData[];\n /** Auxiliary data. */\n public auxData?: PolyfaceAuxData;\n /** Tagged geometry data. */\n public taggedNumericData?: TaggedNumericData;\n /**\n * Booleans indicating visibility of corresponding edges.\n * * The `edgeVisible` array is parallel to the `pointIndex` array.\n * * The visibility flag applies to the edge whose start vertex index appears in the same place in the `pointIndex` array.\n * * For example, consider the mesh with 2 triangular facets given by `pointIndex = [1,0,2, 1,2,3]`. If the triangles'\n * shared edge is hidden, then the mesh has `edgeVisible = [true,true,false, false,true,true]`.\n */\n public edgeVisible: boolean[];\n /** Boolean tag indicating if the facets are viewable from the back. */\n private _twoSided: boolean;\n /**\n * Flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2).\n * * A boundary edge of a mesh is defined as an edge with only one connected facet.\n * * Closed solid is a mesh with no boundary edge. Open sheet is a mesh that has boundary edge(s).\n */\n private _expectedClosure: number;\n /**\n * Constructor for facets.\n * @param needNormals `true` to allocate empty normal data and index arrays; `false` (default) to leave undefined.\n * @param needParams `true` to allocate empty uv parameter data and index arrays; `false` (default) to leave undefined.\n * @param needColors `true` to allocate empty color data and index arrays; `false` (default) to leave undefined.\n * @param twoSided `true` if the facets are to be considered viewable from the back; `false` (default) if not.\n */\n public constructor(\n needNormals: boolean = false, needParams: boolean = false, needColors: boolean = false, twoSided: boolean = false,\n ) {\n this.point = new GrowableXYZArray();\n this.pointIndex = [];\n if (needNormals) {\n this.normal = new GrowableXYZArray();\n this.normalIndex = [];\n }\n if (needParams) {\n this.param = new GrowableXYArray();\n this.paramIndex = [];\n }\n if (needColors) {\n this.color = [];\n this.colorIndex = [];\n }\n this.face = [];\n this.edgeVisible = [];\n this._twoSided = twoSided;\n this._expectedClosure = 0;\n }\n /** Return a deep clone. */\n public clone(): PolyfaceData {\n const result = new PolyfaceData();\n result.point = this.point.clone();\n result.pointIndex = this.pointIndex.slice();\n if (this.normal)\n result.normal = this.normal.clone();\n if (this.normalIndex)\n result.normalIndex = this.normalIndex.slice();\n if (this.param)\n result.param = this.param.clone();\n if (this.paramIndex)\n result.paramIndex = this.paramIndex.slice();\n if (this.color)\n result.color = this.color.slice();\n if (this.colorIndex)\n result.colorIndex = this.colorIndex.slice();\n result.face = this.face.slice();\n if (this.auxData)\n result.auxData = this.auxData.clone();\n if (this.taggedNumericData)\n result.taggedNumericData = this.taggedNumericData.clone();\n result.edgeVisible = this.edgeVisible.slice();\n result.twoSided = this.twoSided;\n result.expectedClosure = this.expectedClosure;\n return result;\n }\n /** Test for equal indices and nearly equal coordinates. */\n public isAlmostEqual(other: PolyfaceData): boolean {\n if (!GrowableXYZArray.isAlmostEqual(this.point, other.point))\n return false;\n if (!NumberArray.isExactEqual(this.pointIndex, other.pointIndex))\n return false;\n if (!GrowableXYZArray.isAlmostEqual(this.normal, other.normal))\n return false;\n if (!NumberArray.isExactEqual(this.normalIndex, other.normalIndex))\n return false;\n if (!GrowableXYArray.isAlmostEqual(this.param, other.param))\n return false;\n if (!NumberArray.isExactEqual(this.paramIndex, other.paramIndex))\n return false;\n if (!NumberArray.isExactEqual(this.color, other.color))\n return false;\n if (!NumberArray.isExactEqual(this.colorIndex, other.colorIndex))\n return false;\n if (!PolyfaceAuxData.isAlmostEqual(this.auxData, other.auxData))\n return false;\n if (!TaggedNumericData.areAlmostEqual(this.taggedNumericData, other.taggedNumericData))\n return false;\n if (!NumberArray.isExactEqual(this.edgeVisible, other.edgeVisible))\n return false;\n if (this.twoSided !== other.twoSided)\n return false;\n if (this.expectedClosure !== other.expectedClosure)\n return false;\n return true;\n }\n /** Ask if normals are required in this mesh. */\n public get requireNormals(): boolean {\n return undefined !== this.normal;\n }\n /** Ask if params are required in this mesh. */\n public get requireParams(): boolean {\n return undefined !== this.param;\n }\n /** Ask if colors are required in this mesh. */\n public get requireColors(): boolean {\n return undefined !== this.color;\n }\n /** Get the point count */\n public get pointCount() {\n return this.point.length;\n }\n /** Get the normal count */\n public get normalCount() {\n return this.normal ? this.normal.length : 0;\n }\n /** Get the param count */\n public get paramCount() {\n return this.param ? this.param.length : 0;\n }\n /** Get the color count */\n public get colorCount() {\n return this.color ? this.color.length : 0;\n }\n /** Get the index count. Note that the point array is always indexed, and index arrays all have the same length. */\n public get indexCount() {\n return this.pointIndex.length;\n }\n /**\n * Get the number of faces.\n * * Note that a \"face\" is not a facet.\n * * A face is a subset of the Polyface's facets grouped for application purposes.\n */\n public get faceCount() {\n return this.face.length;\n }\n /** Return indexed point at index `i`. This is a COPY of the coordinates, not a reference. */\n public getPoint(i: number, result?: Point3d): Point3d | undefined {\n return this.point.getPoint3dAtCheckedPointIndex(i, result);\n }\n /** Return indexed normal at index `i`. This is a COPY of the normal, not a reference. */\n public getNormal(i: number, result?: Vector3d): Vector3d | undefined {\n return this.normal ? this.normal.getVector3dAtCheckedVectorIndex(i, result) : undefined;\n }\n /** Return indexed param at index `i`. This is a COPY of the coordinates, not a reference. */\n public getParam(i: number, result?: Point2d): Point2d | undefined {\n return this.param ? this.param.getPoint2dAtCheckedPointIndex(i, result) : undefined;\n }\n /** Return indexed color at index `i`. Index `i` is not checked for validity. */\n public getColor(i: number): number {\n return this.color ? this.color[i] : 0;\n }\n /** Return indexed visibility. at index `i`. Index `i` is not checked for validity. */\n public getEdgeVisible(i: number): boolean {\n return this.edgeVisible[i];\n }\n /** Get boolean tag indicating if the facets are to be considered viewable from the back. */\n public get twoSided(): boolean {\n return this._twoSided;\n }\n public set twoSided(value: boolean) {\n this._twoSided = value;\n }\n /** Get flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2). */\n public get expectedClosure(): number {\n return this._expectedClosure;\n }\n public set expectedClosure(value: number) {\n this._expectedClosure = value;\n }\n /** Set the tagged geometry data. */\n public setTaggedNumericData(data: TaggedNumericData | undefined) {\n this.taggedNumericData = data;\n }\n /** Copy the contents (not pointer) of `point[i]` into `dest`. Index `i` is not checked for validity. */\n public copyPointTo(i: number, dest: Point3d): void {\n this.point.getPoint3dAtUncheckedPointIndex(i, dest);\n }\n /** Copy the contents (not pointer) of `normal[i]` into `dest`. Index `i` is not checked for validity. */\n public copyNormalTo(i: number, dest: Vector3d): void {\n if (this.normal)\n this.normal.getVector3dAtUncheckedVectorIndex(i, dest);\n }\n /** Copy the contents (not pointer) of `param[i]` into `dest`. Index `i` is not checked for validity. */\n public copyParamTo(i: number, dest: Point2d): void {\n if (this.param)\n this.param.getPoint2dAtUncheckedPointIndex(i, dest);\n }\n /** Test if param at a index `i` matches the given uv */\n public isAlmostEqualParamIndexUV(i: number, u: number, v: number): boolean {\n if (this.param !== undefined && i >= 0 && i < this.param.length)\n return Geometry.isSameCoordinate(u, this.param.getXAtUncheckedPointIndex(i))\n && Geometry.isSameCoordinate(v, this.param.getYAtUncheckedPointIndex(i));\n return false;\n }\n /**\n * Copy data from `other` to `this`.\n * * This is the essence of transferring coordinates spread throughout a large polyface into a visitor's single facet.\n * * Common usage: \"other\" is a Polyface, \"this\" is a PolyfaceVisitor to receive data from a single facet of the Polyface.\n * * Does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface.\n * @param other polyface data being mined.\n * @param index0 start index in other's index arrays.\n * @param index1 end index (one beyond last data accessed) in other's index arrays.\n * @param numWrap number of points to replicate as wraparound.\n */\n public gatherIndexedData(other: PolyfaceData, index0: number, index1: number, numWrap: number): void {\n const numEdge = index1 - index0;\n if (numWrap > numEdge)\n numWrap = numEdge;\n const numTotal = numEdge + numWrap;\n this.resizeAllArrays(numTotal);\n // copy wrapped points\n for (let i = 0; i < numEdge; i++)\n this.point.transferFromGrowableXYZArray(i, other.point, other.pointIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.point.transferFromGrowableXYZArray(numEdge + i, this.point, i);\n // copy wrapped pointIndex\n for (let i = 0; i < numEdge; i++)\n this.pointIndex[i] = other.pointIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.pointIndex[numEdge + i] = this.pointIndex[i];\n // copy wrapped normals\n if (this.normal && this.normalIndex && other.normal && other.normalIndex) {\n for (let i = 0; i < numEdge; i++)\n this.normal.transferFromGrowableXYZArray(i, other.normal, other.normalIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.normal.transferFromGrowableXYZArray(numEdge + i, this.normal, i);\n // copy wrapped normalIndex\n for (let i = 0; i < numEdge; i++)\n this.normalIndex[i] = other.normalIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.normalIndex[numEdge + i] = this.normalIndex[i];\n }\n // copy wrapped params\n if (this.param && this.paramIndex && other.param && other.paramIndex) {\n for (let i = 0; i < numEdge; i++)\n this.param.transferFromGrowableXYArray(i, other.param, other.paramIndex[index0 + i]);\n for (let i = 0; i < numWrap; i++)\n this.param.transferFromGrowableXYArray(numEdge + i, this.param, i);\n // copy wrapped paramIndex\n for (let i = 0; i < numEdge; i++)\n this.paramIndex[i] = other.paramIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.paramIndex[numEdge + i] = this.paramIndex[i];\n }\n // copy wrapped colors\n if (this.color && this.colorIndex && other.color && other.colorIndex) {\n for (let i = 0; i < numEdge; i++)\n this.color[i] = other.color[other.colorIndex[index0 + i]];\n for (let i = 0; i < numWrap; i++)\n this.color[numEdge + i] = this.color[i];\n // copy wrapped colorIndex\n for (let i = 0; i < numEdge; i++)\n this.colorIndex[i] = other.colorIndex[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.colorIndex[numEdge + i] = this.colorIndex[i];\n }\n // copy wrapped edge visibility\n for (let i = 0; i < numEdge; i++)\n this.edgeVisible[i] = other.edgeVisible[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.edgeVisible[numEdge + i] = this.edgeVisible[i];\n // copy wrapped auxData\n if (this.auxData && other.auxData && this.auxData.channels.length === other.auxData.channels.length) {\n for (let iChannel = 0; iChannel < this.auxData.channels.length; iChannel++) {\n const thisChannel = this.auxData.channels[iChannel];\n const otherChannel = other.auxData.channels[iChannel];\n const blockSize = thisChannel.entriesPerValue;\n if (thisChannel.data.length === otherChannel.data.length) {\n for (let iData = 0; iData < thisChannel.data.length; iData++) {\n const thisData = thisChannel.data[iData];\n const otherData = otherChannel.data[iData];\n for (let i = 0; i < numEdge; i++)\n thisData.copyValues(otherData, i, other.auxData.indices[index0 + i], blockSize);\n for (let i = 0; i < numWrap; i++)\n thisData.copyValues(thisData, other.auxData.indices[numEdge + i], i, blockSize);\n }\n }\n }\n // copy wrapped auxData index\n for (let i = 0; i < numEdge; i++)\n this.auxData.indices[i] = other.auxData.indices[index0 + i];\n for (let i = 0; i < numWrap; i++)\n this.auxData.indices[numEdge + i] = this.auxData.indices[i];\n }\n }\n /** Trim the `data` arrays to the stated `length`. */\n private static trimArray(data: any[] | undefined, length: number) {\n if (data && length < data.length)\n data.length = length;\n }\n /**\n * Trim all index arrays to the stated `length`.\n * * This is called by PolyfaceBuilder to clean up after an aborted construction sequence.\n */\n public trimAllIndexArrays(length: number): void {\n PolyfaceData.trimArray(this.pointIndex, length);\n PolyfaceData.trimArray(this.paramIndex, length);\n PolyfaceData.trimArray(this.normalIndex, length);\n PolyfaceData.trimArray(this.colorIndex, length);\n PolyfaceData.trimArray(this.edgeVisible, length);\n if (this.auxData) {\n PolyfaceData.trimArray(this.auxData.indices, length);\n for (const channel of this.auxData.channels) {\n for (const data of channel.data)\n PolyfaceData.trimArray(data.values, channel.entriesPerValue * length);\n }\n }\n }\n /**\n * Resize all data and index arrays to the specified `length`.\n * * This is used by visitors, whose data and index arrays are all parallel.\n */\n public resizeAllArrays(length: number): void {\n if (length > this.point.length) {\n while (this.point.length < length)\n this.point.push(Point3d.create());\n while (this.pointIndex.length < length)\n this.pointIndex.push(-1);\n if (this.normal)\n while (this.normal.length < length)\n this.normal.push(Vector3d.create());\n if (this.normalIndex)\n while (this.normalIndex.length < length)\n this.normalIndex.push(-1);\n if (this.param)\n while (this.param.length < length)\n this.param.push(Point2d.create());\n if (this.paramIndex)\n while (this.paramIndex.length < length)\n this.paramIndex.push(-1);\n if (this.color)\n while (this.color.length < length)\n this.color.push(0);\n if (this.colorIndex)\n while (this.colorIndex.length < length)\n this.colorIndex.push(-1);\n while (this.edgeVisible.length < length)\n this.edgeVisible.push(false);\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\n }\n }\n if (this.auxData.indices)\n this.auxData.indices.push(-1);\n }\n } else if (length < this.point.length) {\n this.point.resize(length);\n this.pointIndex.length = length;\n if (this.normal)\n this.normal.resize(length);\n if (this.normalIndex)\n this.normalIndex.length = length;\n if (this.param)\n this.param.resize(length);\n if (this.paramIndex)\n this.paramIndex.length = length;\n if (this.color)\n this.color.length = length;\n if (this.colorIndex)\n this.colorIndex.length = length;\n this.edgeVisible.length = length;\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n channelData.values.length = length * channel.entriesPerValue;\n }\n }\n if (this.auxData.indices)\n this.auxData.indices.length = length;\n }\n }\n }\n /**\n * Resize all data arrays to the specified `length`.\n * @deprecated in 4.x because name is misleading. Call [[PolyfaceData.resizeAllArrays]] instead.\n */\n public resizeAllDataArrays(length: number): void {\n if (length > this.point.length) {\n while (this.point.length < length) this.point.push(Point3d.create());\n while (this.pointIndex.length < length) this.pointIndex.push(-1);\n while (this.edgeVisible.length < length) this.edgeVisible.push(false);\n if (this.normal)\n while (this.normal.length < length) this.normal.push(Vector3d.create());\n if (this.param)\n while (this.param.length < length) this.param.push(Point2d.create());\n if (this.color)\n while (this.color.length < length) this.color.push(0);\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n while (channelData.values.length < length * channel.entriesPerValue) channelData.values.push(0);\n }\n }\n }\n } else if (length < this.point.length) {\n this.point.resize(length);\n this.edgeVisible.length = length;\n this.pointIndex.length = length;\n if (this.normal) this.normal.resize(length);\n if (this.param) this.param.resize(length);\n if (this.color) this.color.length = length;\n if (this.auxData) {\n for (const channel of this.auxData.channels) {\n for (const channelData of channel.data) {\n channelData.values.length = length * channel.entriesPerValue;\n }\n }\n }\n }\n }\n /** Return the range of the point array (optionally transformed). */\n public range(result?: Range3d, transform?: Transform): Range3d {\n result = result ? result : Range3d.createNull();\n result.extendArray(this.point, transform);\n return result;\n }\n /**\n * Apply `transform` to point and normal arrays and to auxData.\n * * IMPORTANT This base class is just a data carrier. It does not know if the index order and normal directions\n * have special meaning, i.e., caller must separately reverse index order and normal direction if needed.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n this.point.multiplyTransformInPlace(transform);\n if (this.normal && !transform.matrix.isIdentity)\n this.normal.multiplyAndRenormalizeMatrix3dInverseTransposeInPlace(transform.matrix);\n return undefined === this.auxData || this.auxData.tryTransformInPlace(transform);\n }\n /**\n * Compress the instance by equating duplicate data.\n * * Search for duplicates within vertices, normals, params, and colors.\n * * Compress each data array.\n * * Revise all indexing for the relocated data.\n * * [[PolyfaceAuxData]] is compressed if and only if exactly one [[AuxChannelData]] is present.\n * @param tolerance (optional) tolerance for clustering mesh vertices only. Default value, and the tolerance used to cluster all other data, is [[Geometry.smallMetricDistance]].\n */\n public compress(tolerance: number = Geometry.smallMetricDistance): void {\n // more info can be found at geometry/internaldocs/Polyface.md\n const packedPoints = ClusterableArray.clusterGrowablePoint3dArray(this.point, tolerance);\n this.point = packedPoints.growablePackedPoints!;\n packedPoints.updateIndices(this.pointIndex);\n // for now, normals, params, and colors use the default tolerance for clustering\n if (this.normalIndex && this.normal) {\n const packedNormals = ClusterableArray.clusterGrowablePoint3dArray(this.normal);\n this.normal = packedNormals.growablePackedPoints!;\n packedNormals.updateIndices(this.normalIndex);\n }\n if (this.paramIndex && this.param) {\n const packedParams = ClusterableArray.clusterGrowablePoint2dArray(this.param);\n this.param = packedParams.growablePackedPoints;\n packedParams.updateIndices(this.paramIndex);\n }\n if (this.colorIndex && this.color) {\n const packedColors = ClusterableArray.clusterNumberArray(this.color);\n this.color = packedColors.packedNumbers;\n packedColors.updateIndices(this.colorIndex);\n }\n if (this.auxData && this.auxData.channels.length === 1 && this.auxData.channels[0].data.length === 1) {\n const dataSize = this.auxData.channels[0].entriesPerValue;\n if (1 === dataSize) {\n const packedData = ClusterableArray.clusterNumberArray(this.auxData.channels[0].data[0].values);\n this.auxData.channels[0].data[0].values = packedData.packedNumbers;\n packedData.updateIndices(this.auxData.indices);\n } else if (3 === dataSize) {\n const blockedData = GrowableXYZArray.create(this.auxData.channels[0].data[0].values);\n const packedData = ClusterableArray.clusterGrowablePoint3dArray(blockedData);\n this.auxData.channels[0].data[0].values = NumberArray.create(packedData.growablePackedPoints!.float64Data());\n packedData.updateIndices(this.auxData.indices);\n }\n }\n }\n /**\n * Test if `facetStartIndex` is (minimally) valid.\n * * Length must be nonzero (recall that for \"no facets\", the `facetStartIndex` array still must contain a 0).\n * * Each entry must be strictly smaller than the one that follows.\n * @param facetStartIndex start indices of all facets. Facet k starts at facetStartIndex[k] up to (but not including)\n * `facetStartIndex[k + 1]`\n */\n public static isValidFacetStartIndexArray(facetStartIndex: number[]): boolean {\n // facetStartIndex for empty facets has a single entry \"0\" -- empty array is not allowed\n if (facetStartIndex.length === 0)\n return false;\n for (let i = 0; i + 1 < facetStartIndex.length; i++)\n if (facetStartIndex[i] >= facetStartIndex[i + 1])\n return false;\n return true;\n }\n /**\n * Reverse the indices for the specified facets in the given index array.\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\n * @param facetStartIndex start indices of *consecutive* facets to be reversed, e.g., an IndexedPolyface's _facetStart\n * array. See the non-static [[reverseIndices]].\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\n */\n public static reverseIndices<T>(facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean): boolean {\n if (!indices || indices.length === 0)\n return true; // empty case\n if (indices.length > 0) {\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length) {\n for (let i = 0; i + 1 < facetStartIndex.length; i++) {\n let index0 = facetStartIndex[i];\n let index1 = facetStartIndex[i + 1];\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\n while (index1 > index0 + 2) {\n index1--;\n index0++;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n }\n } else { // reverse all\n while (index1 > index0 + 1) {\n index1--;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n index0++;\n }\n }\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Reverse the indices for the specified facet in the specified index array.\n * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.\n * @param facetIndex index of the facet to reverse. The entries of `indices` to be reversed are found at\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\n * See [[reverseIndices]].\n * @param indices the index array, e.g., pointIndex, normalIndex, etc.\n * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);\n * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).\n */\n public static reverseIndicesSingleFacet<T>(\n facetIndex: number, facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean,\n ): boolean {\n if (!indices || indices.length === 0)\n return true; // empty case\n if (indices.length > 0) {\n if (facetStartIndex[facetStartIndex.length - 1] === indices.length\n && facetIndex >= 0 && facetIndex + 1 < facetStartIndex.length) {\n let index0 = facetStartIndex[facetIndex];\n let index1 = facetStartIndex[facetIndex + 1];\n if (preserveStart) { // leave \"index0\" as is so reversed facet starts at same vertex\n while (index1 > index0 + 2) {\n index1--;\n index0++;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n }\n } else { // reverse all\n while (index1 > index0 + 1) {\n index1--;\n const a = indices[index0];\n indices[index0] = indices[index1];\n indices[index1] = a;\n index0++;\n }\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Reverse the indices for the specified facets in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\n * and edgeVisible).\n * @param facetStartIndex start indices of *consecutive* facets to be reversed.\n * * Consecutive indices in this array define where a given facet is represented in each of the parallel index arrays.\n * * The indices for facet k are `facetStartIndex[k]` up to (but not including) `facetStartIndex[k + 1]`.\n * * This implies `facetStartIndex[k + 1]` is both the upper limit of facet k's indices, and the start index of facet k+1.\n * * For example, passing an IndexedPolyface's _facetStart array into this method reverses every facet.\n */\n public reverseIndices(facetStartIndex?: number[]): void {\n if (facetStartIndex && PolyfaceData.isValidFacetStartIndexArray(facetStartIndex)) {\n PolyfaceData.reverseIndices(facetStartIndex, this.pointIndex, true);\n if (this.normalIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.normalIndex, true);\n if (this.paramIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.paramIndex, true);\n if (this.colorIndex !== this.pointIndex)\n PolyfaceData.reverseIndices(facetStartIndex, this.colorIndex, true);\n PolyfaceData.reverseIndices(facetStartIndex, this.edgeVisible, false);\n }\n }\n /**\n * Reverse the indices for the specified facet in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,\n * and edgeVisible).\n * @param facetIndex index of the facet to reverse. The entries of each index array to be reversed are found at\n * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.\n * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.\n * See [[reverseIndices]].\n */\n public reverseIndicesSingleFacet(facetIndex: number, facetStartIndex: number[]): void {\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.pointIndex, true);\n if (this.normalIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.normalIndex, true);\n if (this.paramIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.paramIndex, true);\n if (this.colorIndex !== this.pointIndex)\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.colorIndex, true);\n PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.edgeVisible, false);\n }\n /** Scale all the normals by -1. */\n public reverseNormals() {\n if (this.normal)\n this.normal.scaleInPlace(-1.0);\n }\n}\n"]}
@@ -1,6 +1,3 @@
1
- /** @packageDocumentation
2
- * @module Polyface
3
- */
4
1
  import { BagOfCurves, CurveCollection } from "../curve/CurveCollection";
5
2
  import { LinearCurvePrimitive } from "../curve/CurvePrimitive";
6
3
  import { AnyChain } from "../curve/CurveTypes";
@@ -267,9 +264,9 @@ export declare class PolyfaceQuery {
267
264
  static isConvexByDihedralAngleCount(source: Polyface, ignoreBoundaries?: boolean): boolean;
268
265
  /**
269
266
  * Test edges pairing in `source` mesh.
270
- * * For `allowSimpleBoundaries === false` true return means this is a closed 2-manifold surface.
271
- * * For `allowSimpleBoundaries === true` true means this is a 2-manifold surface which may have boundary, but is
272
- * still properly matched internally.
267
+ * * For `allowSimpleBoundaries === false`, a return value of `true` means this is a closed 2-manifold surface.
268
+ * * For `allowSimpleBoundaries === true`, a return value of `true` means this is a 2-manifold surface which may have
269
+ * a boundary, but is still properly matched internally.
273
270
  * * Any edge with 3 or more adjacent facets triggers `false` return.
274
271
  * * Any edge with 2 adjacent facets in the same direction triggers a `false` return.
275
272
  */
@@ -300,7 +297,7 @@ export declare class PolyfaceQuery {
300
297
  * Collect boundary edges.
301
298
  * * Return the edges as the simplest collection of chains of line segments.
302
299
  * @param source polyface or visitor.
303
- * @param includeTypical true to in include typical boundary edges with a single adjacent facet.
300
+ * @param includeTypical true to include typical boundary edges with a single adjacent facet.
304
301
  * @param includeMismatch true to include edges with more than 2 adjacent facets.
305
302
  * @param includeNull true to include edges with identical start and end vertex indices.
306
303
  */
@@ -390,19 +387,19 @@ export declare class PolyfaceQuery {
390
387
  static boundaryOfVisibleSubset(polyface: IndexedPolyface, visibilitySelect: 0 | 1 | 2, vectorToEye: Vector3d, sideAngleTolerance?: Angle): CurveCollection | undefined;
391
388
  /**
392
389
  * Search for edges with only 1 adjacent facet.
393
- * * Chain them into loops.
394
- * * Emit the loops to the announceLoop function.
390
+ * * Accumulate them into chains.
391
+ * * Emit the chains to the `announceChain` callback.
395
392
  */
396
- static announceBoundaryChainsAsLineString3d(mesh: Polyface | PolyfaceVisitor, announceLoop: (points: LineString3d) => void): void;
393
+ static announceBoundaryChainsAsLineString3d(mesh: Polyface | PolyfaceVisitor, announceChain: (points: LineString3d) => void): void;
397
394
  /**
398
395
  * Return a mesh with
399
- * * clusters of adjacent, coplanar facets merged into larger facets.
400
- * * other facets included unchanged.
396
+ * * clusters of adjacent, coplanar facets merged into larger (possibly non-convex) facets.
397
+ * * other facets are unchanged.
401
398
  * @param mesh existing mesh or visitor.
402
399
  * @param maxSmoothEdgeAngle maximum dihedral angle across an edge between facets deemed coplanar. If undefined,
403
400
  * uses `Geometry.smallAngleRadians`.
404
401
  */
405
- static cloneWithMaximalPlanarFacets(mesh: Polyface | PolyfaceVisitor, maxSmoothEdgeAngle?: Angle): IndexedPolyface | undefined;
402
+ static cloneWithMaximalPlanarFacets(mesh: Polyface | PolyfaceVisitor, maxSmoothEdgeAngle?: Angle): IndexedPolyface;
406
403
  /**
407
404
  * Return a mesh with "some" holes filled in with new facets.
408
405
  * * Candidate chains are computed by [[announceBoundaryChainsAsLineString3d]].
@@ -420,7 +417,7 @@ export declare class PolyfaceQuery {
420
417
  */
421
418
  static fillSimpleHoles(mesh: Polyface | PolyfaceVisitor, options: HoleFillOptions, unfilledChains?: LineString3d[]): IndexedPolyface | undefined;
422
419
  /** Clone the facets in each partition to a separate polyface. */
423
- static clonePartitions(polyface: Polyface | PolyfaceVisitor, partitions: number[][]): Polyface[];
420
+ static clonePartitions(polyface: Polyface | PolyfaceVisitor, partitions: number[][]): IndexedPolyface[];
424
421
  /** Clone facets that pass a filter function. */
425
422
  static cloneFiltered(source: Polyface | PolyfaceVisitor, filter: (visitor: PolyfaceVisitor) => boolean): IndexedPolyface;
426
423
  /** Clone the facets with in-facet dangling edges removed. */
@@ -1 +1 @@
1
- {"version":3,"file":"PolyfaceQuery.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PolyfaceQuery.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  /* eslint-disable @typescript-eslint/naming-convention, no-empty */
9
9
  // cspell:word internaldocs
10
+ import { assert } from "@itwin/core-bentley";
10
11
  import { BagOfCurves } from "../curve/CurveCollection";
11
12
  import { CurveOps } from "../curve/CurveOps";
12
13
  import { MultiChainCollector } from "../curve/internalContexts/MultiChainCollector";
@@ -17,12 +18,13 @@ import { StrokeOptions } from "../curve/StrokeOptions";
17
18
  import { Geometry } from "../Geometry";
18
19
  import { Angle } from "../geometry3d/Angle";
19
20
  import { BarycentricTriangle } from "../geometry3d/BarycentricTriangle";
20
- import { FrameBuilder } from "../geometry3d/FrameBuilder";
21
21
  import { Point3dArrayCarrier } from "../geometry3d/Point3dArrayCarrier";
22
22
  import { Point3d, Vector3d } from "../geometry3d/Point3dVector3d";
23
23
  import { Point3dArray } from "../geometry3d/PointHelpers";
24
24
  import { PolygonOps } from "../geometry3d/PolygonOps";
25
25
  import { Range3d } from "../geometry3d/Range";
26
+ import { Ray3d } from "../geometry3d/Ray3d";
27
+ import { Transform } from "../geometry3d/Transform";
26
28
  import { Matrix4d } from "../geometry4d/Matrix4d";
27
29
  import { MomentData } from "../geometry4d/MomentData";
28
30
  import { UnionFindContext } from "../numerics/UnionFind";
@@ -440,9 +442,9 @@ export class PolyfaceQuery {
440
442
  }
441
443
  /**
442
444
  * Test edges pairing in `source` mesh.
443
- * * For `allowSimpleBoundaries === false` true return means this is a closed 2-manifold surface.
444
- * * For `allowSimpleBoundaries === true` true means this is a 2-manifold surface which may have boundary, but is
445
- * still properly matched internally.
445
+ * * For `allowSimpleBoundaries === false`, a return value of `true` means this is a closed 2-manifold surface.
446
+ * * For `allowSimpleBoundaries === true`, a return value of `true` means this is a 2-manifold surface which may have
447
+ * a boundary, but is still properly matched internally.
446
448
  * * Any edge with 3 or more adjacent facets triggers `false` return.
447
449
  * * Any edge with 2 adjacent facets in the same direction triggers a `false` return.
448
450
  */
@@ -475,8 +477,8 @@ export class PolyfaceQuery {
475
477
  * @param includeNull true to announce edges with identical start and end vertex indices.
476
478
  */
477
479
  static announceBoundaryEdges(source, announceEdge, includeTypical = true, includeMismatch = true, includeNull = true) {
478
- if (source === undefined)
479
- return undefined;
480
+ if (source === undefined || (!includeTypical && !includeMismatch && !includeNull))
481
+ return;
480
482
  const edges = new IndexedEdgeMatcher();
481
483
  const visitor = source instanceof Polyface ? source.createVisitor(1) : source;
482
484
  visitor.setNumWrap(1);
@@ -488,29 +490,18 @@ export class PolyfaceQuery {
488
490
  }
489
491
  }
490
492
  const boundaryEdges = [];
491
- const nullEdges = [];
492
- const allOtherEdges = [];
493
- edges.sortAndCollectClusters(undefined, boundaryEdges, nullEdges, allOtherEdges);
494
- const badList = [];
495
- if (includeTypical && boundaryEdges.length > 0)
496
- badList.push(boundaryEdges);
497
- if (includeNull && nullEdges.length > 0)
498
- badList.push(nullEdges);
499
- if (includeMismatch && allOtherEdges.length > 0)
500
- badList.push(allOtherEdges);
501
- if (badList.length === 0)
502
- return undefined;
493
+ edges.sortAndCollectClusters(undefined, includeTypical ? boundaryEdges : undefined, includeNull ? boundaryEdges : undefined, includeMismatch ? boundaryEdges : undefined);
494
+ if (boundaryEdges.length === 0)
495
+ return;
503
496
  const sourcePolyface = visitor.clientPolyface();
504
497
  const pointA = Point3d.create();
505
498
  const pointB = Point3d.create();
506
- for (const list of badList) {
507
- for (const e of list) {
508
- const e1 = e instanceof SortableEdge ? e : e[0];
509
- const indexA = e1.vertexIndexA;
510
- const indexB = e1.vertexIndexB;
511
- if (sourcePolyface.data.getPoint(indexA, pointA) && sourcePolyface.data.getPoint(indexB, pointB))
512
- announceEdge(pointA, pointB, indexA, indexB, e1.facetIndex);
513
- }
499
+ for (const e of boundaryEdges) {
500
+ const e1 = e instanceof SortableEdge ? e : e[0];
501
+ const indexA = e1.vertexIndexA;
502
+ const indexB = e1.vertexIndexB;
503
+ if (sourcePolyface.data.getPoint(indexA, pointA) && sourcePolyface.data.getPoint(indexB, pointB))
504
+ announceEdge(pointA, pointB, indexA, indexB, e1.facetIndex);
514
505
  }
515
506
  }
516
507
  /**
@@ -535,7 +526,7 @@ export class PolyfaceQuery {
535
526
  * Collect boundary edges.
536
527
  * * Return the edges as the simplest collection of chains of line segments.
537
528
  * @param source polyface or visitor.
538
- * @param includeTypical true to in include typical boundary edges with a single adjacent facet.
529
+ * @param includeTypical true to include typical boundary edges with a single adjacent facet.
539
530
  * @param includeMismatch true to include edges with more than 2 adjacent facets.
540
531
  * @param includeNull true to include edges with identical start and end vertex indices.
541
532
  */
@@ -780,18 +771,18 @@ export class PolyfaceQuery {
780
771
  }
781
772
  /**
782
773
  * Search for edges with only 1 adjacent facet.
783
- * * Chain them into loops.
784
- * * Emit the loops to the announceLoop function.
774
+ * * Accumulate them into chains.
775
+ * * Emit the chains to the `announceChain` callback.
785
776
  */
786
- static announceBoundaryChainsAsLineString3d(mesh, announceLoop) {
787
- const collector = new MultiChainCollector(Geometry.smallMetricDistance, 1000);
777
+ static announceBoundaryChainsAsLineString3d(mesh, announceChain) {
778
+ const collector = new MultiChainCollector(Geometry.smallMetricDistance); // no planarity tolerance needed
788
779
  PolyfaceQuery.announceBoundaryEdges(mesh, (pointA, pointB, _indexA, _indexB) => collector.captureCurve(LineSegment3d.create(pointA, pointB)), true, false, false);
789
- collector.announceChainsAsLineString3d(announceLoop);
780
+ collector.announceChainsAsLineString3d(announceChain);
790
781
  }
791
782
  /**
792
783
  * Return a mesh with
793
- * * clusters of adjacent, coplanar facets merged into larger facets.
794
- * * other facets included unchanged.
784
+ * * clusters of adjacent, coplanar facets merged into larger (possibly non-convex) facets.
785
+ * * other facets are unchanged.
795
786
  * @param mesh existing mesh or visitor.
796
787
  * @param maxSmoothEdgeAngle maximum dihedral angle across an edge between facets deemed coplanar. If undefined,
797
788
  * uses `Geometry.smallAngleRadians`.
@@ -805,42 +796,58 @@ export class PolyfaceQuery {
805
796
  const builder = PolyfaceBuilder.create();
806
797
  const visitor = mesh;
807
798
  const planarPartitions = [];
799
+ const partitionNormals = []; // average normal in each nontrivial partition
800
+ const normal = Vector3d.createZero();
808
801
  for (const partition of partitions) {
809
802
  if (partition.length === 1) {
810
803
  if (visitor.moveToReadIndex(partition[0]))
811
804
  builder.addFacetFromVisitor(visitor);
812
805
  }
813
- else {
814
- // This is a non-trivial set of contiguous coplanar facets
806
+ else if (partition.length > 1) { // nontrivial set of contiguous coplanar facets
807
+ const averageNormal = Vector3d.createZero();
808
+ const point0 = Point3d.createZero();
809
+ if (visitor.moveToReadIndex(partition[0]))
810
+ visitor.point.getPoint3dAtCheckedPointIndex(0, point0);
811
+ for (const facetIndex of partition) {
812
+ if (visitor.moveToReadIndex(facetIndex))
813
+ if (PolygonOps.areaNormalGo(visitor.point, normal))
814
+ averageNormal.addInPlace(normal);
815
+ }
816
+ partitionNormals.push(Ray3d.createCapture(point0, averageNormal));
815
817
  planarPartitions.push(partition);
816
818
  }
817
819
  }
818
820
  const fragmentPolyfaces = PolyfaceQuery.clonePartitions(mesh, planarPartitions);
821
+ assert(planarPartitions.length === partitionNormals.length);
822
+ assert(planarPartitions.length === fragmentPolyfaces.length);
819
823
  const gapTolerance = 1.0e-4;
820
824
  const planarityTolerance = 1.0e-4;
821
- for (const fragment of fragmentPolyfaces) {
825
+ const localToWorld = Transform.createIdentity();
826
+ const worldToLocal = Transform.createIdentity();
827
+ for (let i = 0; i < fragmentPolyfaces.length; ++i) {
828
+ const fragment = fragmentPolyfaces[i];
822
829
  const edges = [];
823
830
  const edgeStrings = [];
824
831
  PolyfaceQuery.announceBoundaryEdges(fragment, (pointA, pointB, _indexA, _indexB) => {
825
832
  edges.push(LineSegment3d.create(pointA, pointB));
826
833
  edgeStrings.push([pointA.clone(), pointB.clone()]);
827
- });
834
+ }, true, false, false);
828
835
  const chains = CurveOps.collectChains(edges, gapTolerance, planarityTolerance);
829
836
  if (chains) {
830
- const frameBuilder = new FrameBuilder();
831
- frameBuilder.announce(chains);
832
- const frame = frameBuilder.getValidatedFrame(false);
833
- if (frame !== undefined) {
834
- const inverseFrame = frame.inverse();
835
- if (inverseFrame !== undefined) {
836
- inverseFrame.multiplyPoint3dArrayArrayInPlace(edgeStrings);
837
- const graph = HalfEdgeGraphMerge.formGraphFromChains(edgeStrings, true, HalfEdgeMask.BOUNDARY_EDGE);
838
- if (graph) {
839
- HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, new HalfEdgeMaskTester(HalfEdgeMask.BOUNDARY_EDGE), HalfEdgeMask.EXTERIOR);
840
- // this.purgeNullFaces(HalfEdgeMask.EXTERIOR);
841
- const polyface1 = PolyfaceBuilder.graphToPolyface(graph);
842
- builder.addIndexedPolyface(polyface1, false, frame);
843
- }
837
+ // avoid FrameBuilder: it can flip the normal of a nonconvex facet!
838
+ partitionNormals[i].toRigidZFrame(localToWorld);
839
+ if (localToWorld.inverse(worldToLocal)) {
840
+ worldToLocal.multiplyPoint3dArrayArrayInPlace(edgeStrings);
841
+ // Regularize adds bridge edges to holes, and adds other edges to aid triangulation.
842
+ // But we aren't triangulating here. So if we don't have holes, we can skip regularization
843
+ // to avoid splitting the loop.
844
+ const regularize = !(chains instanceof Loop);
845
+ const graph = HalfEdgeGraphMerge.formGraphFromChains(edgeStrings, regularize, HalfEdgeMask.BOUNDARY_EDGE);
846
+ if (graph) {
847
+ HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, new HalfEdgeMaskTester(HalfEdgeMask.BOUNDARY_EDGE), HalfEdgeMask.EXTERIOR);
848
+ // this.purgeNullFaces(HalfEdgeMask.EXTERIOR);
849
+ const polyface1 = PolyfaceBuilder.graphToPolyface(graph);
850
+ builder.addIndexedPolyface(polyface1, false, localToWorld);
844
851
  }
845
852
  }
846
853
  }