@itwin/core-geometry 4.5.0-dev.9 → 4.6.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 (501) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.d.ts +15 -0
  5. package/lib/cjs/Geometry.d.ts.map +1 -1
  6. package/lib/cjs/Geometry.js +27 -0
  7. package/lib/cjs/Geometry.js.map +1 -1
  8. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  9. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  13. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  14. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  15. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  16. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  17. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  18. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  19. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  20. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  21. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  22. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  23. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  24. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  25. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  26. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  27. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  28. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  29. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  30. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  31. package/lib/cjs/core-geometry.js.map +1 -1
  32. package/lib/cjs/curve/Arc3d.js.map +1 -1
  33. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  34. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  35. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  36. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  37. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  38. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  39. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  40. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  41. package/lib/cjs/curve/CurveOps.js.map +1 -1
  42. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  43. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  44. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  45. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  46. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  47. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  48. package/lib/cjs/curve/LineString3d.js.map +1 -1
  49. package/lib/cjs/curve/Loop.js.map +1 -1
  50. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  51. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  52. package/lib/cjs/curve/Path.js.map +1 -1
  53. package/lib/cjs/curve/PointString3d.js.map +1 -1
  54. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  55. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  56. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  57. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  58. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  59. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  60. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  61. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  62. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  63. package/lib/cjs/curve/RegionOps.js.map +1 -1
  64. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  65. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  66. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  67. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  68. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  69. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  70. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  71. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  72. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  73. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  74. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  75. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  76. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  77. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  78. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  79. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  80. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  81. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  82. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  83. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  84. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  85. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  86. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  87. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  88. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  89. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  90. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  91. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  92. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +1 -1
  93. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  94. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  95. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +1 -1
  96. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  97. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  98. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  99. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  100. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  101. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  102. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  103. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  104. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  105. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  106. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  107. package/lib/cjs/geometry3d/FrameBuilder.js +3 -0
  108. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  109. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  110. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  111. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  112. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  113. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  114. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +8 -2
  115. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  116. package/lib/cjs/geometry3d/GrowableXYZArray.js +11 -2
  117. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  118. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  119. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  120. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  121. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  122. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  123. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  124. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  125. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  126. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  127. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  128. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  129. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  130. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  131. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  132. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  133. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  134. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  135. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  136. package/lib/cjs/geometry3d/Range.js.map +1 -1
  137. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  138. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  139. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  140. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  141. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  142. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  143. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  144. package/lib/cjs/geometry3d/XYZProps.d.ts +16 -8
  145. package/lib/cjs/geometry3d/XYZProps.d.ts.map +1 -1
  146. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  147. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  148. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  149. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  150. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  151. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  152. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  153. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  154. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  155. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  156. package/lib/cjs/numerics/Complex.js.map +1 -1
  157. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  158. package/lib/cjs/numerics/Newton.js.map +1 -1
  159. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  160. package/lib/cjs/numerics/PolarData.js.map +1 -1
  161. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  162. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  163. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  164. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  165. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  166. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  167. package/lib/cjs/polyface/AuxData.js.map +1 -1
  168. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  169. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  170. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  171. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  172. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  173. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  174. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +42 -50
  175. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  176. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +81 -105
  177. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  178. package/lib/cjs/polyface/Polyface.d.ts +19 -10
  179. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  180. package/lib/cjs/polyface/Polyface.js +17 -10
  181. package/lib/cjs/polyface/Polyface.js.map +1 -1
  182. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +18 -10
  183. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  184. package/lib/cjs/polyface/PolyfaceBuilder.js +27 -21
  185. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  186. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  187. package/lib/cjs/polyface/PolyfaceData.d.ts +137 -86
  188. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  189. package/lib/cjs/polyface/PolyfaceData.js +300 -166
  190. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  191. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  192. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  193. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  194. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  195. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  196. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  197. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  198. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  199. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  200. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  201. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  202. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  203. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  204. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  205. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  206. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  207. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  208. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  209. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  210. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  211. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  212. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  213. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  214. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  215. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  216. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  217. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  218. package/lib/cjs/solid/Box.js.map +1 -1
  219. package/lib/cjs/solid/Cone.js.map +1 -1
  220. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  221. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  222. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  223. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  224. package/lib/cjs/solid/Sphere.js.map +1 -1
  225. package/lib/cjs/solid/SweepContour.js.map +1 -1
  226. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  227. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  228. package/lib/cjs/topology/Graph.d.ts +2 -8
  229. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  230. package/lib/cjs/topology/Graph.js +0 -3
  231. package/lib/cjs/topology/Graph.js.map +1 -1
  232. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  233. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  234. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  235. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  236. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  237. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  238. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  239. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  240. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  241. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  242. package/lib/cjs/topology/MaskManager.js.map +1 -1
  243. package/lib/cjs/topology/Merging.js.map +1 -1
  244. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  245. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  246. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  247. package/lib/cjs/topology/Triangulation.d.ts +18 -7
  248. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  249. package/lib/cjs/topology/Triangulation.js +50 -9
  250. package/lib/cjs/topology/Triangulation.js.map +1 -1
  251. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  252. package/lib/esm/Constant.js.map +1 -1
  253. package/lib/esm/Geometry.d.ts +15 -0
  254. package/lib/esm/Geometry.d.ts.map +1 -1
  255. package/lib/esm/Geometry.js +27 -0
  256. package/lib/esm/Geometry.js.map +1 -1
  257. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  258. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  259. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  260. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  261. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  262. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  263. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  264. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  265. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  266. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  267. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  268. package/lib/esm/bspline/KnotVector.js.map +1 -1
  269. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  270. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  271. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  272. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  273. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  274. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  275. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  276. package/lib/esm/clipping/ClipVector.js.map +1 -1
  277. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  278. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  279. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  280. package/lib/esm/core-geometry.js.map +1 -1
  281. package/lib/esm/curve/Arc3d.js.map +1 -1
  282. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  283. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  284. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  285. package/lib/esm/curve/CurveCollection.js.map +1 -1
  286. package/lib/esm/curve/CurveCurve.js.map +1 -1
  287. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  288. package/lib/esm/curve/CurveFactory.js.map +1 -1
  289. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  290. package/lib/esm/curve/CurveOps.js.map +1 -1
  291. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  292. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  293. package/lib/esm/curve/CurveTypes.js.map +1 -1
  294. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  295. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  296. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  297. package/lib/esm/curve/LineString3d.js.map +1 -1
  298. package/lib/esm/curve/Loop.js.map +1 -1
  299. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  300. package/lib/esm/curve/ParityRegion.js.map +1 -1
  301. package/lib/esm/curve/Path.js.map +1 -1
  302. package/lib/esm/curve/PointString3d.js.map +1 -1
  303. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  304. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  305. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  306. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  307. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  308. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  309. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  310. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  311. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  312. package/lib/esm/curve/RegionOps.js.map +1 -1
  313. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  314. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  315. package/lib/esm/curve/UnionRegion.js.map +1 -1
  316. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  317. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  318. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  319. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  320. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  321. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  322. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  323. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  324. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  325. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  326. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  327. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  328. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  329. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  330. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  331. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  332. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  333. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  334. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  335. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  336. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  337. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  338. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  339. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  340. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  341. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +1 -1
  342. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  343. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  344. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +1 -1
  345. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  346. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  347. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  348. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  349. package/lib/esm/geometry3d/Angle.js.map +1 -1
  350. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  351. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  352. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  353. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  354. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  355. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  356. package/lib/esm/geometry3d/FrameBuilder.js +3 -0
  357. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  358. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  359. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  360. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  361. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  362. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  363. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +8 -2
  364. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  365. package/lib/esm/geometry3d/GrowableXYZArray.js +11 -2
  366. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  367. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  368. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  369. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  370. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  371. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  372. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  373. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  374. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  375. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  376. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  377. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  378. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  379. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  380. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  381. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  382. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  383. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  384. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  385. package/lib/esm/geometry3d/Range.js.map +1 -1
  386. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  387. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  388. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  389. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  390. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  391. package/lib/esm/geometry3d/Transform.js.map +1 -1
  392. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  393. package/lib/esm/geometry3d/XYZProps.d.ts +16 -8
  394. package/lib/esm/geometry3d/XYZProps.d.ts.map +1 -1
  395. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  396. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  397. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  398. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  399. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  400. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  401. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  402. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  403. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  404. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  405. package/lib/esm/numerics/Complex.js.map +1 -1
  406. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  407. package/lib/esm/numerics/Newton.js.map +1 -1
  408. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  409. package/lib/esm/numerics/PolarData.js.map +1 -1
  410. package/lib/esm/numerics/Polynomials.js.map +1 -1
  411. package/lib/esm/numerics/Quadrature.js.map +1 -1
  412. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  413. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  414. package/lib/esm/numerics/UnionFind.js.map +1 -1
  415. package/lib/esm/numerics/UsageSums.js.map +1 -1
  416. package/lib/esm/polyface/AuxData.js.map +1 -1
  417. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  418. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  419. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  420. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  421. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  422. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  423. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +42 -50
  424. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  425. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +80 -103
  426. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  427. package/lib/esm/polyface/Polyface.d.ts +19 -10
  428. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  429. package/lib/esm/polyface/Polyface.js +17 -10
  430. package/lib/esm/polyface/Polyface.js.map +1 -1
  431. package/lib/esm/polyface/PolyfaceBuilder.d.ts +18 -10
  432. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  433. package/lib/esm/polyface/PolyfaceBuilder.js +27 -21
  434. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  435. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  436. package/lib/esm/polyface/PolyfaceData.d.ts +137 -86
  437. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  438. package/lib/esm/polyface/PolyfaceData.js +300 -166
  439. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  440. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  441. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  442. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  443. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  444. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  445. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  446. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  447. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  448. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  449. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  450. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  451. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  452. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  453. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  454. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  455. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  456. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  457. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  458. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  459. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  460. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  461. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  462. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  463. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  464. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  465. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  466. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  467. package/lib/esm/solid/Box.js.map +1 -1
  468. package/lib/esm/solid/Cone.js.map +1 -1
  469. package/lib/esm/solid/LinearSweep.js.map +1 -1
  470. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  471. package/lib/esm/solid/RuledSweep.js.map +1 -1
  472. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  473. package/lib/esm/solid/Sphere.js.map +1 -1
  474. package/lib/esm/solid/SweepContour.js.map +1 -1
  475. package/lib/esm/solid/TorusPipe.js.map +1 -1
  476. package/lib/esm/topology/ChainMerge.js.map +1 -1
  477. package/lib/esm/topology/Graph.d.ts +2 -8
  478. package/lib/esm/topology/Graph.d.ts.map +1 -1
  479. package/lib/esm/topology/Graph.js +0 -3
  480. package/lib/esm/topology/Graph.js.map +1 -1
  481. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  482. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  483. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  484. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  485. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  486. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  487. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  488. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  489. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  490. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  491. package/lib/esm/topology/MaskManager.js.map +1 -1
  492. package/lib/esm/topology/Merging.js.map +1 -1
  493. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  494. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  495. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  496. package/lib/esm/topology/Triangulation.d.ts +18 -7
  497. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  498. package/lib/esm/topology/Triangulation.js +50 -9
  499. package/lib/esm/topology/Triangulation.js.map +1 -1
  500. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  501. package/package.json +6 -4
@@ -1 +1 @@
1
- {"version":3,"file":"PolyfaceClip.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceClip.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\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ClipPlane } from \"../clipping/ClipPlane\";\r\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\r\nimport { UnionOfConvexClipPlaneSets } from \"../clipping/UnionOfConvexClipPlaneSets\";\r\nimport { AnyRegion } from \"../curve/CurveTypes\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { RegionBinaryOpType, RegionOps } from \"../curve/RegionOps\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { UnionRegion } from \"../curve/UnionRegion\";\r\nimport { Geometry, PlaneAltitudeEvaluator } from \"../Geometry\";\r\nimport { FrameBuilder } from \"../geometry3d/FrameBuilder\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { IndexedXYZCollectionPolygonOps, PolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { Range1d, Range2d, Range3d } from \"../geometry3d/Range\";\r\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { SweepContour } from \"../solid/SweepContour\";\r\nimport { ChainMergeContext } from \"../topology/ChainMerge\";\r\nimport { RangeSearch } from \"./multiclip/RangeSearch\";\r\nimport { IndexedPolyface, Polyface, PolyfaceVisitor } from \"./Polyface\";\r\nimport { PolyfaceBuilder } from \"./PolyfaceBuilder\";\r\nimport { PolyfaceQuery } from \"./PolyfaceQuery\";\r\n\r\n/**\r\n * carrier for a point array with an index into UnionOfConvexClipPlaneSets\r\n * @private\r\n */\r\nclass ClipCandidate {\r\n public nextConvexSetIndex: number;\r\n public points: GrowableXYZArray;\r\n public constructor(points: GrowableXYZArray, nextConvexSetIndex: number) {\r\n this.nextConvexSetIndex = nextConvexSetIndex;\r\n this.points = points;\r\n }\r\n}\r\n\r\n/**\r\n * A pair of PolyfaceBuilder objects, for use by clippers that emit inside and outside parts.\r\n * * There are nominally 4 builders:\r\n * * builderA collects simple \"inside\" clip.\r\n * * builderB collects simple \"outside\" clip.\r\n * * builderA1 collects \"side\" clip for inside.\r\n * * builderB1 collets \"side\" clip for outside.\r\n * * `static ClippedPolyfaceBuilders.create(keepInside, keepOutside)` initializes `builderA` and `builderB` (each optionally to undefined), with undefined `builderA1` and `builderB1`\r\n * * `builders.enableSideBuilders()` makes `builderA1` and `builderB1` match `builderA` and `builderB`.\r\n * * construction methods aim their facets at appropriate builders if defined.\r\n * * @public\r\n */\r\nexport class ClippedPolyfaceBuilders {\r\n /** An available builder. Typically the \"inside\" parts */\r\n public builderA?: PolyfaceBuilder;\r\n /** An available builder. Typically the \"outside\" parts */\r\n public builderB?: PolyfaceBuilder;\r\n /** request to construct cut faces */\r\n public buildClosureFaces?: boolean;\r\n private constructor(builderA: PolyfaceBuilder | undefined, builderB: PolyfaceBuilder | undefined, buildClosureFaces: boolean = false) {\r\n this.builderA = builderA;\r\n this.builderB = builderB;\r\n this.buildClosureFaces = buildClosureFaces;\r\n }\r\n /** Simple create with default options on builder. */\r\n public static create(keepInside: boolean = true, keepOutside: boolean = false, buildSideFaces: boolean = false) {\r\n return new ClippedPolyfaceBuilders(keepInside ? PolyfaceBuilder.create() : undefined, keepOutside ? PolyfaceBuilder.create() : undefined, buildSideFaces);\r\n }\r\n\r\n public claimPolyface(selector: 0 | 1, fixup: boolean, tolerance: number = Geometry.smallMetricDistance): IndexedPolyface | undefined {\r\n const builder = selector === 0 ? this.builderA : this.builderB;\r\n if (builder) {\r\n let polyface = builder.claimPolyface(true, tolerance);\r\n if (fixup) {\r\n polyface = PolyfaceQuery.cloneWithTVertexFixup(polyface);\r\n polyface = PolyfaceQuery.cloneWithDanglingEdgesRemoved(polyface);\r\n }\r\n return polyface;\r\n }\r\n return undefined;\r\n }\r\n}\r\n/** PolyfaceClip is a static class gathering operations using Polyfaces and clippers.\r\n * @public\r\n */\r\nexport class PolyfaceClip {\r\n /** Clip each facet of polyface to the ClipPlane.\r\n * * Return all surviving clip as a new mesh.\r\n * * WARNING: The new mesh is \"points only\" -- parameters, normals, etc are not interpolated\r\n */\r\n public static clipPolyfaceClipPlaneWithClosureFace(polyface: Polyface, clipper: ClipPlane, insideClip: boolean = true, buildClosureFaces: boolean = true) {\r\n return this.clipPolyfaceClipPlane(polyface, clipper, insideClip, buildClosureFaces);\r\n }\r\n /** Clip each facet of polyface to the ClipPlane.\r\n * * Return all surviving clip as a new mesh.\r\n * * WARNING: The new mesh is \"points only\" -- parameters, normals, etc are not interpolated\r\n */\r\n public static clipPolyfaceClipPlane(polyface: Polyface, clipper: ClipPlane, insideClip: boolean = true, buildClosureFaces: boolean = false): Polyface {\r\n const builders = ClippedPolyfaceBuilders.create(insideClip, !insideClip, buildClosureFaces);\r\n this.clipPolyfaceInsideOutside(polyface, clipper, builders);\r\n return builders.claimPolyface(insideClip ? 0 : 1, true)!;\r\n }\r\n\r\n /** Clip each facet of polyface to the ClipPlane.\r\n * * Return surviving clip as a new mesh.\r\n * * WARNING: The new mesh is \"points only\".\r\n */\r\n public static clipPolyfaceConvexClipPlaneSet(polyface: Polyface, clipper: ConvexClipPlaneSet): Polyface {\r\n const visitor = polyface.createVisitor(0);\r\n const builder = PolyfaceBuilder.create();\r\n const work = new GrowableXYZArray(10);\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n clipper.clipConvexPolygonInPlace(visitor.point, work);\r\n if (visitor.point.length > 2)\r\n builder.addPolygonGrowableXYZArray(visitor.point);\r\n }\r\n return builder.claimPolyface(true);\r\n }\r\n\r\n /** Clip each facet of polyface to the the clippers.\r\n * * Add inside, outside fragments to builderA, builderB\r\n * * This does not consider params, normals, colors. Just points.\r\n * * outputSelect determines how the clip output is structured\r\n * * 0 outputs all shards -- this may have many interior edges.\r\n * * 1 stitches shards together to get cleaner facets.\r\n */\r\n public static clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders(polyface: Polyface | PolyfaceVisitor, allClippers: UnionOfConvexClipPlaneSets, destination: ClippedPolyfaceBuilders, outputSelector: number = 1) {\r\n if (polyface instanceof Polyface) {\r\n this.clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders(polyface.createVisitor(0), allClippers, destination, outputSelector);\r\n return;\r\n }\r\n const builderA = destination.builderA;\r\n const builderB = destination.builderB;\r\n const visitor = polyface; // alias; we have a visitor now\r\n const cache = new GrowableXYZArrayCache();\r\n const insideShards: GrowableXYZArray[] = [];\r\n const outsideShards: GrowableXYZArray[] = [];\r\n const residualPolygons: ClipCandidate[] = [];\r\n let candidate: ClipCandidate | undefined;\r\n const outsideParts: GrowableXYZArray[] = [];\r\n\r\n const numConvexSet = allClippers.convexSets.length;\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n residualPolygons.push(new ClipCandidate(cache.grabAndFill(visitor.point), 0));\r\n while ((candidate = residualPolygons.pop()) !== undefined) {\r\n const convexSetIndex = candidate.nextConvexSetIndex;\r\n if (convexSetIndex >= numConvexSet) {\r\n // ths remnant polygon is OUT ...\r\n if (candidate.points.length > 2)\r\n outsideShards.push(candidate.points);\r\n } else {\r\n const clipper = allClippers.convexSets[convexSetIndex];\r\n outsideParts.length = 0; // NO NO -- why isn't it empty from prior step cleanup?\r\n const insidePart = clipper.clipInsidePushOutside(candidate.points, outsideParts, cache);\r\n if (insidePart) {\r\n if (insidePart.length > 2)\r\n insideShards.push(insidePart);\r\n // Keep outside parts active for clip by later facets . . .\r\n for (const outsidePolygon of outsideParts) {\r\n residualPolygons.push(new ClipCandidate(outsidePolygon, convexSetIndex + 1));\r\n }\r\n } else {\r\n // Nothing was insidePart. The outside parts might be split by intermediate steps -- but all the pieces are there.\r\n candidate.nextConvexSetIndex++;\r\n residualPolygons.push(candidate);\r\n }\r\n outsideParts.length = 0;\r\n }\r\n }\r\n if (outsideShards.length === 0) {\r\n builderA?.addPolygonGrowableXYZArray(visitor.point);\r\n } else if (insideShards.length === 0) {\r\n // the facet spanned clippers but is intact outside\r\n builderB?.addPolygonGrowableXYZArray(visitor.point);\r\n } else {\r\n const localToWorld = FrameBuilder.createRightHandedFrame(undefined, visitor.point);\r\n let worldToLocal: Transform | undefined;\r\n if (outputSelector === 1 && localToWorld !== undefined\r\n && undefined !== (worldToLocal = localToWorld.inverse())) {\r\n this.cleanupAndAddRegion(builderA, insideShards, worldToLocal, localToWorld);\r\n this.cleanupAndAddRegion(builderB, outsideShards, worldToLocal, localToWorld);\r\n } else {\r\n for (const shard of insideShards)\r\n this.addPolygonToBuilderAndDropToCache(shard, builderA, cache);\r\n for (const shard of outsideShards)\r\n this.addPolygonToBuilderAndDropToCache(shard, builderB, cache);\r\n }\r\n }\r\n outsideShards.length = 0;\r\n insideShards.length = 0;\r\n }\r\n cache.dropAllToCache(outsideParts);\r\n if (destination.buildClosureFaces) {\r\n for (const clipper of allClippers.convexSets) {\r\n this.buildClosureFacesForConvexSet(visitor, clipper, destination, cache);\r\n }\r\n }\r\n }\r\n private static addRegion(builder: PolyfaceBuilder | undefined, region: AnyRegion | undefined) {\r\n if (builder !== undefined && region !== undefined) {\r\n if (region instanceof Loop && region.children.length === 1 && region.children[0] instanceof LineString3d) {\r\n builder.addPolygonGrowableXYZArray(region.children[0].packedPoints);\r\n } else if (region instanceof UnionRegion) {\r\n for (const child of region.children)\r\n this.addRegion(builder, child);\r\n } else {\r\n assert(!\"unexpected region encountered\");\r\n }\r\n }\r\n }\r\n // WARNING: shards are transformed into local system, not reverted!!!\r\n private static cleanupAndAddRegion(builder: PolyfaceBuilder | undefined, shards: GrowableXYZArray[],\r\n worldToLocal: Transform | undefined, localToWorld: Transform | undefined) {\r\n if (builder !== undefined && shards.length > 0) {\r\n if (worldToLocal)\r\n GrowableXYZArray.multiplyTransformInPlace(worldToLocal, shards);\r\n const outsidePieces = RegionOps.polygonBooleanXYToLoops(shards, RegionBinaryOpType.Union, []);\r\n if (outsidePieces && outsidePieces.children.length > 0) {\r\n if (localToWorld)\r\n outsidePieces.tryTransformInPlace(localToWorld);\r\n RegionOps.consolidateAdjacentPrimitives(outsidePieces); // source of the T-vertices removed in claimPolyface\r\n this.addRegion(builder, outsidePieces);\r\n }\r\n }\r\n }\r\n private static addPolygonToBuilderAndDropToCache(polygon: GrowableXYZArray | undefined, builder: PolyfaceBuilder | undefined, cache: GrowableXYZArrayCache) {\r\n if (polygon) {\r\n if (builder)\r\n builder.addPolygonGrowableXYZArray(polygon);\r\n cache.dropToCache(polygon);\r\n }\r\n }\r\n private static addPolygonArrayToBuilderAndDropToCache(polygonArray: GrowableXYZArray[], builder: PolyfaceBuilder | undefined, cache: GrowableXYZArrayCache) {\r\n let polygon;\r\n while ((polygon = polygonArray.pop()) !== undefined) {\r\n this.addPolygonToBuilderAndDropToCache(polygon, builder, cache);\r\n }\r\n }\r\n private static createChainContextsForConvexClipPlaneSet(clipper: ConvexClipPlaneSet): ChainMergeContext[] {\r\n const chainContexts = [];\r\n for (const plane of clipper.planes) {\r\n if (!plane.interior) {\r\n const c = ChainMergeContext.create();\r\n c.plane = plane;\r\n c.convexClipper = clipper;\r\n chainContexts.push(c);\r\n }\r\n }\r\n return chainContexts;\r\n }\r\n\r\n /** Clip each facet of polyface to the the clippers.\r\n * * Add inside, outside fragments to builderA, builderB\r\n * * This does not consider params, normals, colors. Just points.\r\n * @internal\r\n */\r\n public static clipPolyfaceConvexClipPlaneSetToBuilders(polyface: Polyface, clipper: ConvexClipPlaneSet, destination: ClippedPolyfaceBuilders) {\r\n const builderA = destination.builderA;\r\n const builderB = destination.builderB;\r\n const visitor = polyface.createVisitor(0);\r\n const cache = new GrowableXYZArrayCache();\r\n const outsideParts: GrowableXYZArray[] = [];\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n // !!! currentCandidates and next candidates are empty at this point !!!\r\n const insidePart = clipper.clipInsidePushOutside(visitor.point, outsideParts, cache);\r\n if (insidePart === undefined) {\r\n // everything is out ... outsideParts might be fragmented. Save only the original polygon\r\n builderB?.addPolygonGrowableXYZArray(visitor.point);\r\n cache.dropToCache(insidePart);\r\n cache.dropAllToCache(outsideParts);\r\n }\r\n this.addPolygonToBuilderAndDropToCache(insidePart, builderA, cache);\r\n this.addPolygonArrayToBuilderAndDropToCache(outsideParts, builderB, cache);\r\n }\r\n this.buildClosureFacesForConvexSet(visitor, clipper, destination, cache);\r\n }\r\n /**\r\n *\r\n * @param visitor visitor for all facets of interest (entire polyface)\r\n * @param clipper ConvexClipPlaneSet to apply\r\n * @param destination builders to receive inside, outside parts\r\n * @param cache GrowableArray cache.\r\n */\r\n private static buildClosureFacesForConvexSet(visitor: PolyfaceVisitor, clipper: ConvexClipPlaneSet, destination: ClippedPolyfaceBuilders,\r\n cache: GrowableXYZArrayCache) {\r\n if (destination.buildClosureFaces) {\r\n const chainContexts = this.createChainContextsForConvexClipPlaneSet(clipper);\r\n const workPoints = cache.grabFromCache();\r\n const facetPoints = cache.grabFromCache();\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n for (const chainContext of chainContexts) {\r\n const plane = chainContext.plane;\r\n facetPoints.clear();\r\n facetPoints.pushFrom(visitor.point);\r\n IndexedXYZCollectionPolygonOps.clipConvexPolygonInPlace(plane!, facetPoints, workPoints);\r\n chainContext.addSegmentsOnPlane(facetPoints, true);\r\n }\r\n }\r\n cache.dropToCache(facetPoints);\r\n cache.dropToCache(workPoints);\r\n for (const chainContext of chainContexts) {\r\n this.addClosureFacets(chainContext, destination, cache);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param visitor visitor for all facets of interest (entire polyface)\r\n * @param clipper ConvexClipPlaneSet to apply\r\n * @param destination builders to receive inside, outside parts\r\n * @param cache GrowableArray cache.\r\n */\r\n private static buildClosureFacesForPlane(visitor: PolyfaceVisitor, plane: PlaneAltitudeEvaluator, destination: ClippedPolyfaceBuilders,\r\n cache: GrowableXYZArrayCache) {\r\n if (destination.buildClosureFaces) {\r\n const chainContext = ChainMergeContext.create();\r\n chainContext.plane = plane;\r\n const workPoints = cache.grabFromCache();\r\n const facetPoints = cache.grabFromCache();\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n facetPoints.clear();\r\n facetPoints.pushFrom(visitor.point);\r\n IndexedXYZCollectionPolygonOps.clipConvexPolygonInPlace(plane, facetPoints, workPoints);\r\n chainContext.addSegmentsOnPlane(facetPoints, true);\r\n }\r\n cache.dropToCache(facetPoints);\r\n cache.dropToCache(workPoints);\r\n this.addClosureFacets(chainContext, destination, cache);\r\n }\r\n }\r\n private static evaluateInwardPlaneNormal(plane: PlaneAltitudeEvaluator, scale: number): Vector3d {\r\n return Vector3d.create(plane.velocityXYZ(scale, 0, 0), plane.velocityXYZ(0, scale, 0), plane.velocityXYZ(0, 0, scale));\r\n }\r\n /**\r\n * * Triangulate the contour.\r\n * * Add all the triangles to both builders\r\n * * reversed in builderB.\r\n */\r\n private static addClippedContour(contour: SweepContour, clipper: ConvexClipPlaneSet | undefined, destination: ClippedPolyfaceBuilders, cache: GrowableXYZArrayCache) {\r\n const polygonA = cache.grabFromCache();\r\n const polygonB = cache.grabFromCache();\r\n if (destination.builderB)\r\n destination.builderB.toggleReversedFacetFlag();\r\n contour.announceFacets((facets: IndexedPolyface) => {\r\n const visitor = facets.createVisitor();\r\n // The contour facets are convex .. easy clip ..\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n polygonA.clear();\r\n polygonA.pushFromGrowableXYZArray(visitor.point);\r\n clipper?.clipConvexPolygonInPlace(polygonA, polygonB);\r\n if (polygonA.length > 2) {\r\n destination.builderA?.addPolygonGrowableXYZArray(polygonA);\r\n destination.builderB?.addPolygonGrowableXYZArray(polygonA);\r\n }\r\n }\r\n }, undefined);\r\n if (destination.builderB)\r\n destination.builderB.toggleReversedFacetFlag();\r\n cache.dropToCache(polygonA);\r\n cache.dropToCache(polygonB);\r\n }\r\n\r\n /**\r\n * Gather loops out of the ChainMergeContext. Add to destination arrays.\r\n * @param chainContext ASSUMED TO HAVE A PLANE\r\n * @param destination\r\n */\r\n private static addClosureFacets(chainContext: ChainMergeContext, destination: ClippedPolyfaceBuilders, cache: GrowableXYZArrayCache) {\r\n const clipper = chainContext.convexClipper;\r\n const plane = chainContext.plane!;\r\n const outwardNormal = this.evaluateInwardPlaneNormal(plane, -1.0);\r\n chainContext.clusterAndMergeVerticesXYZ();\r\n const loops = chainContext.collectMaximalGrowableXYZArrays();\r\n if (loops.length > 1) {\r\n const loopSets = PolygonOps.sortOuterAndHoleLoops(loops, outwardNormal);\r\n for (const loopSet of loopSets) {\r\n PolygonOps.orientLoopsCCWForOutwardNormalInPlace(loopSet, outwardNormal);\r\n const contour = SweepContour.createForPolygon(loopSet, outwardNormal);\r\n if (contour !== undefined) {\r\n if (clipper) {\r\n this.addClippedContour(contour, clipper, destination, cache);\r\n } else {\r\n if (destination.builderA)\r\n contour.emitFacets(destination.builderA, true, clipper);\r\n if (destination.builderB)\r\n contour.emitFacets(destination.builderB, false, clipper);\r\n }\r\n }\r\n }\r\n } else {\r\n PolygonOps.orientLoopsCCWForOutwardNormalInPlace(loops, outwardNormal);\r\n const contour = SweepContour.createForPolygon(loops, outwardNormal);\r\n if (contour !== undefined) {\r\n if (clipper) {\r\n this.addClippedContour(contour, clipper, destination, cache);\r\n } else {\r\n if (destination.builderA)\r\n contour.emitFacets(destination.builderA, true, clipper);\r\n if (destination.builderB)\r\n contour.emitFacets(destination.builderB, false, clipper);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Clip each facet of polyface to the the clippers.\r\n * * Add inside, outside fragments to builderA, builderB\r\n * * This does not consider params, normals, colors. Just points.\r\n * @internal\r\n */\r\n public static clipPolyfaceClipPlaneToBuilders(polyface: Polyface, clipper: PlaneAltitudeEvaluator, destination: ClippedPolyfaceBuilders) {\r\n const builderA = destination.builderA;\r\n const builderB = destination.builderB;\r\n const visitor = polyface.createVisitor(0);\r\n const cache = new GrowableXYZArrayCache();\r\n const inside = cache.grabFromCache();\r\n const outside = cache.grabFromCache();\r\n const range = Range1d.createNull();\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n // !!! currentCandidates and next candidates are empty at this point !!!\r\n IndexedXYZCollectionPolygonOps.splitConvexPolygonInsideOutsidePlane(clipper, visitor.point, inside, outside, range);\r\n if (builderA)\r\n builderA.addPolygonGrowableXYZArray(inside);\r\n if (builderB)\r\n builderB.addPolygonGrowableXYZArray(outside);\r\n }\r\n this.buildClosureFacesForPlane(visitor, clipper, destination, cache);\r\n cache.dropToCache(inside);\r\n cache.dropToCache(outside);\r\n }\r\n\r\n /** Clip each facet of polyface to the ClipPlane or ConvexClipPlaneSet\r\n * * accumulate inside and outside facets -- to destination.builderA and destination.builderB\r\n * * if `destination.buildClosureFaces` is set, and also build closure facets\r\n * * This method parses the variant input types and calls a more specific method.\r\n * * WARNING: The new mesh is \"points only\".\r\n * * outputSelect applies only for UnionOfConvexClipPlaneSets -- see [[PolyfaceClip.clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders]]\r\n */\r\n public static clipPolyfaceInsideOutside(polyface: Polyface, clipper: ClipPlane | ConvexClipPlaneSet | UnionOfConvexClipPlaneSets, destination: ClippedPolyfaceBuilders,\r\n outputSelect: number = 0) {\r\n if (clipper instanceof ClipPlane) {\r\n this.clipPolyfaceClipPlaneToBuilders(polyface, clipper, destination);\r\n } else if (clipper instanceof ConvexClipPlaneSet) {\r\n this.clipPolyfaceConvexClipPlaneSetToBuilders(polyface, clipper, destination);\r\n } else if (clipper instanceof UnionOfConvexClipPlaneSets) {\r\n this.clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders(polyface, clipper, destination, outputSelect);\r\n }\r\n }\r\n /** Clip each facet of polyface to the ClipPlane or ConvexClipPlaneSet\r\n * * This method parses the variant input types and calls a more specific method.\r\n * * To get both inside and outside parts, use clipPolyfaceInsideOutside\r\n * * WARNING: The new mesh is \"points only\".\r\n */\r\n public static clipPolyface(polyface: Polyface, clipper: ClipPlane | ConvexClipPlaneSet): Polyface | undefined {\r\n if (clipper instanceof ClipPlane)\r\n return this.clipPolyfaceClipPlane(polyface, clipper);\r\n if (clipper instanceof ConvexClipPlaneSet)\r\n return this.clipPolyfaceConvexClipPlaneSet(polyface, clipper);\r\n // (The if tests exhaust the type space -- this line is unreachable.)\r\n return undefined;\r\n }\r\n /**\r\n * Drape the region onto the mesh.\r\n * * This method computes the portion of the input mesh that lies inside the clipper generated from sweeping the input region in the given direction.\r\n * @param mesh input mesh, untouched\r\n * @param region planar region to drape onto mesh\r\n * @param sweepVector optional sweep direction for region, magnitude unused. If undefined, sweep is along the region normal.\r\n * @param options how to stroke the region boundary\r\n * @returns clipped facets. No other mesh data but vertices appear in output.\r\n */\r\n public static drapeRegion(mesh: Polyface | PolyfaceVisitor, region: AnyRegion, sweepVector?: Vector3d, options?: StrokeOptions): IndexedPolyface | undefined {\r\n if (mesh instanceof Polyface)\r\n return this.drapeRegion(mesh.createVisitor(0), region, sweepVector, options);\r\n const contour = SweepContour.createForLinearSweep(region);\r\n if (!contour)\r\n return undefined;\r\n let sweep = sweepVector;\r\n if (sweepVector && contour.localToWorld.matrix.dotColumnZ(sweepVector) < 0.0)\r\n sweep = sweepVector.scale(-1); // avoid inverted clipper\r\n const clipper = contour.sweepToUnionOfConvexClipPlaneSets(sweep, false, false, options);\r\n if (!clipper)\r\n return undefined;\r\n const builders = ClippedPolyfaceBuilders.create(true); // we want only the facets inside the clipper\r\n this.clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders(mesh, clipper, builders, 1);\r\n return builders.claimPolyface(0, true);\r\n }\r\n /** Find consecutive points around a polygon (with implied closure edge) that are ON a plane\r\n * @param points array of points around polygon. Closure edge is implied.\r\n * @param chainContext context receiving edges\r\n * @param point0 work point\r\n * @param point1 work point\r\n */\r\n private static collectEdgesOnPlane(points: GrowableXYZArray, clipper: ClipPlane, chainContext: ChainMergeContext, point0: Point3d, point1: Point3d) {\r\n const n = points.length;\r\n if (n > 1) {\r\n points.getPoint3dAtUncheckedPointIndex(n - 1, point0);\r\n for (let i = 0; i < n; i++) {\r\n points.getPoint3dAtUncheckedPointIndex(i, point1);\r\n if (clipper.isPointOn(point0) && clipper.isPointOn(point1))\r\n chainContext.addSegment(point0, point1);\r\n point0.setFromPoint3d(point1);\r\n }\r\n }\r\n }\r\n /** Intersect each facet with the clip plane. (Producing intersection edges.)\r\n * * Return all edges chained as array of LineString3d.\r\n */\r\n public static sectionPolyfaceClipPlane(polyface: Polyface, clipper: ClipPlane): LineString3d[] {\r\n const chainContext = ChainMergeContext.create();\r\n\r\n const visitor = polyface.createVisitor(0);\r\n const work = new GrowableXYZArray(10);\r\n const point0 = Point3d.create();\r\n const point1 = Point3d.create();\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n clipper.clipConvexPolygonInPlace(visitor.point, work, true);\r\n this.collectEdgesOnPlane(visitor.point, clipper, chainContext, point0, point1);\r\n }\r\n chainContext.clusterAndMergeVerticesXYZ();\r\n return chainContext.collectMaximalChains();\r\n }\r\n\r\n /**\r\n * * Split facets of mesh \"A\" into parts that are\r\n * * under mesh \"B\"\r\n * * over mesh \"B\"\r\n * * both meshes are represented by visitors rather than the meshes themselves\r\n * * If the data in-hand is a mesh, call with `mesh.createVisitor`\r\n * * The respective clip parts are fed to caller-supplied builders.\r\n * * Caller may set either or both builders to toggle facet order (e.g. toggle the lower facets to make them \"point down\" in cut-fill application)\r\n * * This step is commonly one-half of \"cut fill\".\r\n * * A \"cut fill\" wrapper will call this twice with the visitor and builder roles reversed.\r\n * * Both polyfaces are assumed convex with CCW orientation viewed from above.\r\n * @param visitorA iterator over polyface to be split.\r\n * @param visitorB iterator over polyface that acts as a splitter\r\n * @param orientUnderMeshDownward if true, the \"meshAUnderB\" output is oriented with its normals reversed so it can act as the bottom side of a cut-fill pair.\r\n */\r\n public static clipPolyfaceUnderOverConvexPolyfaceIntoBuilders(visitorA: PolyfaceVisitor, visitorB: PolyfaceVisitor,\r\n builderAUnderB: PolyfaceBuilder | undefined,\r\n builderAOverB: PolyfaceBuilder | undefined) {\r\n const rangeDataA = PolyfaceQuery.collectRangeLengthData(visitorA);\r\n const searchA = RangeSearch.create2dSearcherForRangeLengthData<number>(rangeDataA);\r\n if (!searchA)\r\n return;\r\n const range = Range3d.create();\r\n for (visitorA.reset(); visitorA.moveToNextFacet();) {\r\n visitorA.point.setRange(range);\r\n searchA.addRange(range, visitorA.currentReadIndex());\r\n }\r\n const xyClip = new GrowableXYZArray(10);\r\n const workArray = new GrowableXYZArray(10);\r\n const xyFrustum = ConvexClipPlaneSet.createEmpty();\r\n const below = new GrowableXYZArray(10);\r\n const above = new GrowableXYZArray(10);\r\n const planeOfFacet = ClipPlane.createNormalAndPointXYZXYZ(0, 0, 1, 0, 0, 0)!;\r\n const altitudeRange = Range1d.createNull();\r\n\r\n for (visitorB.reset(); visitorB.moveToNextFacet();) {\r\n visitorB.point.setRange(range);\r\n ConvexClipPlaneSet.setPlaneAndXYLoopCCW(visitorB.point, planeOfFacet, xyFrustum);\r\n searchA.searchRange2d(range, (_rangeA: Range2d, readIndexA: number) => {\r\n visitorA.moveToReadIndex(readIndexA);\r\n xyFrustum.polygonClip(visitorA.point, xyClip, workArray);\r\n // builderAOverB.addPolygonGrowableXYZArray(xyClip);\r\n if (xyClip.length > 0) {\r\n // planeOfFacet.convexPolygonSplitInsideOutsideGrowableArrays(xyClip, below, above, altitudeRange);\r\n IndexedXYZCollectionPolygonOps.splitConvexPolygonInsideOutsidePlane(planeOfFacet, xyClip, below, above, altitudeRange);\r\n if (below.length > 0 && builderAUnderB)\r\n builderAUnderB.addPolygonGrowableXYZArray(below);\r\n if (above.length > 0 && builderAOverB)\r\n builderAOverB.addPolygonGrowableXYZArray(above);\r\n }\r\n return true;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * * Split facets into vertically overlapping sections\r\n * * both meshes are represented by visitors rather than the meshes themselves\r\n * * If the data in-hand is a mesh, call with `mesh.createVisitor`\r\n * * The respective clip parts are returned as separate meshes.\r\n * * Caller may set either or both builders to toggle facet order (e.g. toggle the lower facets to make them \"point down\" in cut-fill application)\r\n * * Both polyfaces are assumed convex with CCW orientation viewed from above.\r\n * * Each output contains some facets from meshA and some from meshB:\r\n * * meshAUnderB -- areas where meshA is underneath mesh B.\r\n * * If A is \"design surface\" and B is existing DTM, this is \"cut\" volume\r\n * * meshAOverB -- areas where meshB is over meshB.\r\n * * If A is \"design surface\" and B is existing DTM, this is \"fill\" volume\r\n *\r\n * @param visitorA iterator over polyface to be split.\r\n * @param visitorB iterator over polyface that acts as a splitter\r\n * @param orientUnderMeshDownward if true, the \"meshAUnderB\" output is oriented with its normals reversed so it can act as the bottom side of a cut-fill pair.\r\n */\r\n public static computeCutFill(meshA: IndexedPolyface, meshB: IndexedPolyface): { meshAUnderB: IndexedPolyface, meshAOverB: IndexedPolyface } {\r\n const visitorA = meshA.createVisitor();\r\n const visitorB = meshB.createVisitor();\r\n const builderAUnderB = PolyfaceBuilder.create();\r\n const builderAOverB = PolyfaceBuilder.create();\r\n builderAUnderB.toggleReversedFacetFlag();\r\n this.clipPolyfaceUnderOverConvexPolyfaceIntoBuilders(visitorA, visitorB, builderAUnderB, builderAOverB);\r\n builderAUnderB.toggleReversedFacetFlag();\r\n builderAOverB.toggleReversedFacetFlag();\r\n this.clipPolyfaceUnderOverConvexPolyfaceIntoBuilders(visitorB, visitorA, builderAOverB, builderAUnderB);\r\n return {\r\n meshAUnderB: builderAUnderB.claimPolyface(),\r\n meshAOverB: builderAOverB.claimPolyface(),\r\n };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PolyfaceClip.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceClip.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,mEAAmE;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAEpF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAA0B,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,8BAA8B,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,OAAO,EAAW,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAmB,QAAQ,EAAmB,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,MAAM,aAAa;IAGjB,YAAmB,MAAwB,EAAE,kBAA0B;QACrE,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,uBAAuB;IAOlC,YAAoB,QAAqC,EAAE,QAAqC,EAAE,oBAA6B,KAAK;QAClI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;IACD,qDAAqD;IAC9C,MAAM,CAAC,MAAM,CAAC,aAAsB,IAAI,EAAE,cAAuB,KAAK,EAAE,iBAA0B,KAAK;QAC5G,OAAO,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC5J,CAAC;IAEM,aAAa,CAAC,QAAe,EAAE,KAAc,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QACpG,MAAM,OAAO,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/D,IAAI,OAAO,EAAE;YACX,IAAI,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE;gBACT,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;gBACzD,QAAQ,GAAG,aAAa,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;aAClE;YACD,OAAO,QAAQ,CAAC;SACjB;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AACD;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB;;;OAGG;IACI,MAAM,CAAC,oCAAoC,CAAC,QAAkB,EAAE,OAAkB,EAAE,aAAsB,IAAI,EAAE,oBAA6B,IAAI;QACtJ,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACtF,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,qBAAqB,CAAC,QAAkB,EAAE,OAAkB,EAAE,aAAsB,IAAI,EAAE,oBAA6B,KAAK;QACxI,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAC5F,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAE,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,8BAA8B,CAAC,QAAkB,EAAE,OAA2B;QAC1F,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACtC,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG;YAChD,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACtD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAC1B,OAAO,CAAC,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACrD;QACD,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,gDAAgD,CAAC,QAAoC,EAAE,WAAuC,EAAE,WAAoC,EAAE,iBAAyB,CAAC;QAC5M,IAAI,QAAQ,YAAY,QAAQ,EAAE;YAChC,IAAI,CAAC,gDAAgD,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YAC3H,OAAO;SACR;QACD,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,+BAA+B;QACzD,MAAM,KAAK,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAuB,EAAE,CAAC;QAC5C,MAAM,aAAa,GAAuB,EAAE,CAAC;QAC7C,MAAM,gBAAgB,GAAoB,EAAE,CAAC;QAC7C,IAAI,SAAoC,CAAC;QACzC,MAAM,YAAY,GAAuB,EAAE,CAAC;QAE5C,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;QACnD,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG;YAChD,gBAAgB,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,EAAE;gBACzD,MAAM,cAAc,GAAG,SAAS,CAAC,kBAAkB,CAAC;gBACpD,IAAI,cAAc,IAAI,YAAY,EAAE;oBAClC,iCAAiC;oBACjC,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;wBAC7B,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;iBACxC;qBAAM;oBACL,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;oBACvD,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAI,wDAAwD;oBACpF,MAAM,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;oBACxF,IAAI,UAAU,EAAE;wBACd,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;4BACvB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAChC,2DAA2D;wBAC3D,KAAK,MAAM,cAAc,IAAI,YAAY,EAAE;4BACzC,gBAAgB,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,cAAc,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;yBAC9E;qBACF;yBAAM;wBACL,mHAAmH;wBACnH,SAAS,CAAC,kBAAkB,EAAE,CAAC;wBAC/B,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;qBAClC;oBACD,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;iBACzB;aACF;YACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9B,QAAQ,EAAE,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aACrD;iBAAM,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpC,mDAAmD;gBACnD,QAAQ,EAAE,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aACrD;iBAAM;gBACL,MAAM,YAAY,GAAG,YAAY,CAAC,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnF,IAAI,YAAmC,CAAC;gBACxC,IAAI,cAAc,KAAK,CAAC,IAAI,YAAY,KAAK,SAAS;uBACjD,SAAS,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE;oBAC1D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;oBAC7E,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;iBAC/E;qBAAM;oBACL,KAAK,MAAM,KAAK,IAAI,YAAY;wBAC9B,IAAI,CAAC,iCAAiC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACjE,KAAK,MAAM,KAAK,IAAI,aAAa;wBAC/B,IAAI,CAAC,iCAAiC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;iBAClE;aACF;YACD,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACzB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;SACzB;QACD,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,UAAU,EAAE;gBAC5C,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;aAC1E;SACF;IACH,CAAC;IACO,MAAM,CAAC,SAAS,CAAC,OAAoC,EAAE,MAA6B;QAC1F,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;YACjD,IAAI,MAAM,YAAY,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,YAAY,EAAE;gBACxG,OAAO,CAAC,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;aACrE;iBAAM,IAAI,MAAM,YAAY,WAAW,EAAE;gBACxC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ;oBACjC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAClC;iBAAM;gBACL,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;aAC1C;SACF;IACH,CAAC;IACD,qEAAqE;IAC7D,MAAM,CAAC,mBAAmB,CAAC,OAAoC,EAAE,MAA0B,EACjG,YAAmC,EAAE,YAAmC;QACxE,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9C,IAAI,YAAY;gBACd,gBAAgB,CAAC,wBAAwB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,aAAa,GAAG,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9F,IAAI,aAAa,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtD,IAAI,YAAY;oBACd,aAAa,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBAClD,SAAS,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC,CAAC,oDAAoD;gBAC5G,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;aACxC;SACF;IACH,CAAC;IACO,MAAM,CAAC,iCAAiC,CAAC,OAAqC,EAAE,OAAoC,EAAE,KAA4B;QACxJ,IAAI,OAAO,EAAE;YACX,IAAI,OAAO;gBACT,OAAO,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAC5B;IACH,CAAC;IACO,MAAM,CAAC,sCAAsC,CAAC,YAAgC,EAAE,OAAoC,EAAE,KAA4B;QACxJ,IAAI,OAAO,CAAC;QACZ,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,EAAE;YACnD,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;SACjE;IACH,CAAC;IACO,MAAM,CAAC,wCAAwC,CAAC,OAA2B;QACjF,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACnB,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBACrC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;gBAChB,CAAC,CAAC,aAAa,GAAG,OAAO,CAAC;gBAC1B,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACvB;SACF;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;KAIC;IACM,MAAM,CAAC,wCAAwC,CAAC,QAAkB,EAAE,OAA2B,EAAE,WAAoC;QAC1I,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAuB,EAAE,CAAC;QAC5C,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG;YAChD,wEAAwE;YACxE,MAAM,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YACrF,IAAI,UAAU,KAAK,SAAS,EAAE;gBAC5B,0FAA0F;gBAC1F,QAAQ,EAAE,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpD,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC9B,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;aACpC;YACD,IAAI,CAAC,iCAAiC,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACpE,IAAI,CAAC,sCAAsC,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC5E;QACD,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IACD;;;;;;OAMG;IACK,MAAM,CAAC,6BAA6B,CAAC,OAAwB,EAAE,OAA2B,EAAE,WAAoC,EACtI,KAA4B;QAC5B,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,MAAM,aAAa,GAAG,IAAI,CAAC,wCAAwC,CAAC,OAAO,CAAC,CAAC;YAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;YAC1C,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG;gBAChD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;oBACxC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;oBACjC,WAAW,CAAC,KAAK,EAAE,CAAC;oBACpB,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACpC,8BAA8B,CAAC,wBAAwB,CAAC,KAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;oBACzF,YAAY,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;iBACpD;aACF;YACD,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAC/B,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC9B,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;gBACxC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;aACzD;SACF;IACH,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,yBAAyB,CAAC,OAAwB,EAAE,KAA6B,EAAE,WAAoC,EACpI,KAA4B;QAC5B,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC;YAChD,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;YAC1C,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG;gBAChD,WAAW,CAAC,KAAK,EAAE,CAAC;gBACpB,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpC,8BAA8B,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;gBACxF,YAAY,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;aACpD;YACD,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAC/B,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;SACzD;IACH,CAAC;IACO,MAAM,CAAC,yBAAyB,CAAC,KAA6B,EAAE,KAAa;QACnF,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACzH,CAAC;IACD;;;;OAIG;IACK,MAAM,CAAC,iBAAiB,CAAC,OAAqB,EAAE,OAAuC,EAAE,WAAoC,EAAE,KAA4B;QACjK,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,WAAW,CAAC,QAAQ;YACtB,WAAW,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QACjD,OAAO,CAAC,cAAc,CAAC,CAAC,MAAuB,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YACvC,gDAAgD;YAChD,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG;gBAChD,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,QAAQ,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjD,OAAO,EAAE,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACtD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvB,WAAW,CAAC,QAAQ,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;oBAC3D,WAAW,CAAC,QAAQ,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;iBAC5D;aACF;QACH,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,IAAI,WAAW,CAAC,QAAQ;YACtB,WAAW,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QACjD,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,gBAAgB,CAAC,YAA+B,EAAE,WAAoC,EAAE,KAA4B;QACjI,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC;QAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAM,CAAC;QAClC,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;QAClE,YAAY,CAAC,0BAA0B,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,+BAA+B,EAAE,CAAC;QAC7D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,MAAM,QAAQ,GAAG,UAAU,CAAC,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACxE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,UAAU,CAAC,qCAAqC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBACzE,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBACtE,IAAI,OAAO,KAAK,SAAS,EAAE;oBACzB,IAAI,OAAO,EAAE;wBACX,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;qBAC9D;yBAAM;wBACL,IAAI,WAAW,CAAC,QAAQ;4BACtB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;wBAC1D,IAAI,WAAW,CAAC,QAAQ;4BACtB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;qBAC5D;iBACF;aACF;SACF;aAAM;YACL,UAAU,CAAC,qCAAqC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACpE,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,IAAI,OAAO,EAAE;oBACX,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;iBAC9D;qBAAM;oBACL,IAAI,WAAW,CAAC,QAAQ;wBACtB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC1D,IAAI,WAAW,CAAC,QAAQ;wBACtB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;iBAC5D;aACF;SACF;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,+BAA+B,CAAC,QAAkB,EAAE,OAA+B,EAAE,WAAoC;QACrI,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACnC,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG;YAChD,wEAAwE;YACxE,8BAA8B,CAAC,oCAAoC,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACpH,IAAI,QAAQ;gBACV,QAAQ,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,QAAQ;gBACV,QAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;SAChD;QACD,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACrE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,yBAAyB,CAAC,QAAkB,EAAE,OAAoE,EAAE,WAAoC,EACpK,eAAuB,CAAC;QACxB,IAAI,OAAO,YAAY,SAAS,EAAE;YAChC,IAAI,CAAC,+BAA+B,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;SACtE;aAAM,IAAI,OAAO,YAAY,kBAAkB,EAAE;YAChD,IAAI,CAAC,wCAAwC,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;SAC/E;aAAM,IAAI,OAAO,YAAY,0BAA0B,EAAE;YACxD,IAAI,CAAC,gDAAgD,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;SACrG;IACH,CAAC;IACD;;;;QAII;IACG,MAAM,CAAC,YAAY,CAAC,QAAkB,EAAE,OAAuC;QACpF,IAAI,OAAO,YAAY,SAAS;YAC9B,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,OAAO,YAAY,kBAAkB;YACvC,OAAO,IAAI,CAAC,8BAA8B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChE,qEAAqE;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,WAAW,CAAC,IAAgC,EAAE,MAAiB,EAAE,WAAsB,EAAE,OAAuB;QAC5H,IAAI,IAAI,YAAY,QAAQ;YAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,YAAY,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,IAAI,KAAK,GAAG,WAAW,CAAC;QACxB,IAAI,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,GAAG;YAC1E,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;QAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,iCAAiC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,6CAA6C;QACrG,IAAI,CAAC,gDAAgD,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClF,OAAO,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD;;;;;MAKE;IACM,MAAM,CAAC,mBAAmB,CAAC,MAAwB,EAAE,OAAkB,EAAE,YAA+B,EAAE,MAAe,EAAE,MAAe;QAChJ,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClD,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;oBACxD,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC1C,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;aAC/B;SACF;IACH,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,wBAAwB,CAAC,QAAkB,EAAE,OAAkB;QAC3E,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAEhD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG;YAChD,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAChF;QACD,YAAY,CAAC,0BAA0B,EAAE,CAAC;QAC1C,OAAO,YAAY,CAAC,oBAAoB,EAAE,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAC,+CAA+C,CAAC,QAAyB,EAAE,QAAyB,EAChH,cAA2C,EAC3C,aAA0C;QAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,WAAW,CAAC,kCAAkC,CAAS,UAAU,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO;YACV,OAAO;QACT,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/B,KAAK,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,eAAe,EAAE,GAAG;YAClD,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;SACtD;QACD,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,SAAS,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC;QAC7E,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAE3C,KAAK,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,eAAe,EAAE,GAAG;YAClD,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,kBAAkB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YACjF,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,OAAgB,EAAE,UAAkB,EAAE,EAAE;gBACpE,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;gBACrC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBACzD,oDAAoD;gBACpD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrB,mGAAmG;oBACnG,8BAA8B,CAAC,oCAAoC,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;oBACvH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc;wBACpC,cAAc,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;oBACnD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa;wBACnC,aAAa,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;iBACnD;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,MAAM,CAAC,cAAc,CAAC,KAAsB,EAAE,KAAsB;QACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;QAC/C,cAAc,CAAC,uBAAuB,EAAE,CAAC;QACzC,IAAI,CAAC,+CAA+C,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QACxG,cAAc,CAAC,uBAAuB,EAAE,CAAC;QACzC,aAAa,CAAC,uBAAuB,EAAE,CAAC;QACxC,IAAI,CAAC,+CAA+C,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;QACxG,OAAO;YACL,WAAW,EAAE,cAAc,CAAC,aAAa,EAAE;YAC3C,UAAU,EAAE,aAAa,CAAC,aAAa,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Polyface\n */\n\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\nimport { assert } from \"@itwin/core-bentley\";\nimport { ClipPlane } from \"../clipping/ClipPlane\";\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\nimport { UnionOfConvexClipPlaneSets } from \"../clipping/UnionOfConvexClipPlaneSets\";\nimport { AnyRegion } from \"../curve/CurveTypes\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { RegionBinaryOpType, RegionOps } from \"../curve/RegionOps\";\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { Geometry, PlaneAltitudeEvaluator } from \"../Geometry\";\nimport { FrameBuilder } from \"../geometry3d/FrameBuilder\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { IndexedXYZCollectionPolygonOps, PolygonOps } from \"../geometry3d/PolygonOps\";\nimport { Range1d, Range2d, Range3d } from \"../geometry3d/Range\";\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { SweepContour } from \"../solid/SweepContour\";\nimport { ChainMergeContext } from \"../topology/ChainMerge\";\nimport { RangeSearch } from \"./multiclip/RangeSearch\";\nimport { IndexedPolyface, Polyface, PolyfaceVisitor } from \"./Polyface\";\nimport { PolyfaceBuilder } from \"./PolyfaceBuilder\";\nimport { PolyfaceQuery } from \"./PolyfaceQuery\";\n\n/**\n * carrier for a point array with an index into UnionOfConvexClipPlaneSets\n * @private\n */\nclass ClipCandidate {\n public nextConvexSetIndex: number;\n public points: GrowableXYZArray;\n public constructor(points: GrowableXYZArray, nextConvexSetIndex: number) {\n this.nextConvexSetIndex = nextConvexSetIndex;\n this.points = points;\n }\n}\n\n/**\n * A pair of PolyfaceBuilder objects, for use by clippers that emit inside and outside parts.\n * * There are nominally 4 builders:\n * * builderA collects simple \"inside\" clip.\n * * builderB collects simple \"outside\" clip.\n * * builderA1 collects \"side\" clip for inside.\n * * builderB1 collets \"side\" clip for outside.\n * * `static ClippedPolyfaceBuilders.create(keepInside, keepOutside)` initializes `builderA` and `builderB` (each optionally to undefined), with undefined `builderA1` and `builderB1`\n * * `builders.enableSideBuilders()` makes `builderA1` and `builderB1` match `builderA` and `builderB`.\n * * construction methods aim their facets at appropriate builders if defined.\n * * @public\n */\nexport class ClippedPolyfaceBuilders {\n /** An available builder. Typically the \"inside\" parts */\n public builderA?: PolyfaceBuilder;\n /** An available builder. Typically the \"outside\" parts */\n public builderB?: PolyfaceBuilder;\n /** request to construct cut faces */\n public buildClosureFaces?: boolean;\n private constructor(builderA: PolyfaceBuilder | undefined, builderB: PolyfaceBuilder | undefined, buildClosureFaces: boolean = false) {\n this.builderA = builderA;\n this.builderB = builderB;\n this.buildClosureFaces = buildClosureFaces;\n }\n /** Simple create with default options on builder. */\n public static create(keepInside: boolean = true, keepOutside: boolean = false, buildSideFaces: boolean = false) {\n return new ClippedPolyfaceBuilders(keepInside ? PolyfaceBuilder.create() : undefined, keepOutside ? PolyfaceBuilder.create() : undefined, buildSideFaces);\n }\n\n public claimPolyface(selector: 0 | 1, fixup: boolean, tolerance: number = Geometry.smallMetricDistance): IndexedPolyface | undefined {\n const builder = selector === 0 ? this.builderA : this.builderB;\n if (builder) {\n let polyface = builder.claimPolyface(true, tolerance);\n if (fixup) {\n polyface = PolyfaceQuery.cloneWithTVertexFixup(polyface);\n polyface = PolyfaceQuery.cloneWithDanglingEdgesRemoved(polyface);\n }\n return polyface;\n }\n return undefined;\n }\n}\n/** PolyfaceClip is a static class gathering operations using Polyfaces and clippers.\n * @public\n */\nexport class PolyfaceClip {\n /** Clip each facet of polyface to the ClipPlane.\n * * Return all surviving clip as a new mesh.\n * * WARNING: The new mesh is \"points only\" -- parameters, normals, etc are not interpolated\n */\n public static clipPolyfaceClipPlaneWithClosureFace(polyface: Polyface, clipper: ClipPlane, insideClip: boolean = true, buildClosureFaces: boolean = true) {\n return this.clipPolyfaceClipPlane(polyface, clipper, insideClip, buildClosureFaces);\n }\n /** Clip each facet of polyface to the ClipPlane.\n * * Return all surviving clip as a new mesh.\n * * WARNING: The new mesh is \"points only\" -- parameters, normals, etc are not interpolated\n */\n public static clipPolyfaceClipPlane(polyface: Polyface, clipper: ClipPlane, insideClip: boolean = true, buildClosureFaces: boolean = false): Polyface {\n const builders = ClippedPolyfaceBuilders.create(insideClip, !insideClip, buildClosureFaces);\n this.clipPolyfaceInsideOutside(polyface, clipper, builders);\n return builders.claimPolyface(insideClip ? 0 : 1, true)!;\n }\n\n /** Clip each facet of polyface to the ClipPlane.\n * * Return surviving clip as a new mesh.\n * * WARNING: The new mesh is \"points only\".\n */\n public static clipPolyfaceConvexClipPlaneSet(polyface: Polyface, clipper: ConvexClipPlaneSet): Polyface {\n const visitor = polyface.createVisitor(0);\n const builder = PolyfaceBuilder.create();\n const work = new GrowableXYZArray(10);\n for (visitor.reset(); visitor.moveToNextFacet();) {\n clipper.clipConvexPolygonInPlace(visitor.point, work);\n if (visitor.point.length > 2)\n builder.addPolygonGrowableXYZArray(visitor.point);\n }\n return builder.claimPolyface(true);\n }\n\n /** Clip each facet of polyface to the the clippers.\n * * Add inside, outside fragments to builderA, builderB\n * * This does not consider params, normals, colors. Just points.\n * * outputSelect determines how the clip output is structured\n * * 0 outputs all shards -- this may have many interior edges.\n * * 1 stitches shards together to get cleaner facets.\n */\n public static clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders(polyface: Polyface | PolyfaceVisitor, allClippers: UnionOfConvexClipPlaneSets, destination: ClippedPolyfaceBuilders, outputSelector: number = 1) {\n if (polyface instanceof Polyface) {\n this.clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders(polyface.createVisitor(0), allClippers, destination, outputSelector);\n return;\n }\n const builderA = destination.builderA;\n const builderB = destination.builderB;\n const visitor = polyface; // alias; we have a visitor now\n const cache = new GrowableXYZArrayCache();\n const insideShards: GrowableXYZArray[] = [];\n const outsideShards: GrowableXYZArray[] = [];\n const residualPolygons: ClipCandidate[] = [];\n let candidate: ClipCandidate | undefined;\n const outsideParts: GrowableXYZArray[] = [];\n\n const numConvexSet = allClippers.convexSets.length;\n for (visitor.reset(); visitor.moveToNextFacet();) {\n residualPolygons.push(new ClipCandidate(cache.grabAndFill(visitor.point), 0));\n while ((candidate = residualPolygons.pop()) !== undefined) {\n const convexSetIndex = candidate.nextConvexSetIndex;\n if (convexSetIndex >= numConvexSet) {\n // ths remnant polygon is OUT ...\n if (candidate.points.length > 2)\n outsideShards.push(candidate.points);\n } else {\n const clipper = allClippers.convexSets[convexSetIndex];\n outsideParts.length = 0; // NO NO -- why isn't it empty from prior step cleanup?\n const insidePart = clipper.clipInsidePushOutside(candidate.points, outsideParts, cache);\n if (insidePart) {\n if (insidePart.length > 2)\n insideShards.push(insidePart);\n // Keep outside parts active for clip by later facets . . .\n for (const outsidePolygon of outsideParts) {\n residualPolygons.push(new ClipCandidate(outsidePolygon, convexSetIndex + 1));\n }\n } else {\n // Nothing was insidePart. The outside parts might be split by intermediate steps -- but all the pieces are there.\n candidate.nextConvexSetIndex++;\n residualPolygons.push(candidate);\n }\n outsideParts.length = 0;\n }\n }\n if (outsideShards.length === 0) {\n builderA?.addPolygonGrowableXYZArray(visitor.point);\n } else if (insideShards.length === 0) {\n // the facet spanned clippers but is intact outside\n builderB?.addPolygonGrowableXYZArray(visitor.point);\n } else {\n const localToWorld = FrameBuilder.createRightHandedFrame(undefined, visitor.point);\n let worldToLocal: Transform | undefined;\n if (outputSelector === 1 && localToWorld !== undefined\n && undefined !== (worldToLocal = localToWorld.inverse())) {\n this.cleanupAndAddRegion(builderA, insideShards, worldToLocal, localToWorld);\n this.cleanupAndAddRegion(builderB, outsideShards, worldToLocal, localToWorld);\n } else {\n for (const shard of insideShards)\n this.addPolygonToBuilderAndDropToCache(shard, builderA, cache);\n for (const shard of outsideShards)\n this.addPolygonToBuilderAndDropToCache(shard, builderB, cache);\n }\n }\n outsideShards.length = 0;\n insideShards.length = 0;\n }\n cache.dropAllToCache(outsideParts);\n if (destination.buildClosureFaces) {\n for (const clipper of allClippers.convexSets) {\n this.buildClosureFacesForConvexSet(visitor, clipper, destination, cache);\n }\n }\n }\n private static addRegion(builder: PolyfaceBuilder | undefined, region: AnyRegion | undefined) {\n if (builder !== undefined && region !== undefined) {\n if (region instanceof Loop && region.children.length === 1 && region.children[0] instanceof LineString3d) {\n builder.addPolygonGrowableXYZArray(region.children[0].packedPoints);\n } else if (region instanceof UnionRegion) {\n for (const child of region.children)\n this.addRegion(builder, child);\n } else {\n assert(!\"unexpected region encountered\");\n }\n }\n }\n // WARNING: shards are transformed into local system, not reverted!!!\n private static cleanupAndAddRegion(builder: PolyfaceBuilder | undefined, shards: GrowableXYZArray[],\n worldToLocal: Transform | undefined, localToWorld: Transform | undefined) {\n if (builder !== undefined && shards.length > 0) {\n if (worldToLocal)\n GrowableXYZArray.multiplyTransformInPlace(worldToLocal, shards);\n const outsidePieces = RegionOps.polygonBooleanXYToLoops(shards, RegionBinaryOpType.Union, []);\n if (outsidePieces && outsidePieces.children.length > 0) {\n if (localToWorld)\n outsidePieces.tryTransformInPlace(localToWorld);\n RegionOps.consolidateAdjacentPrimitives(outsidePieces); // source of the T-vertices removed in claimPolyface\n this.addRegion(builder, outsidePieces);\n }\n }\n }\n private static addPolygonToBuilderAndDropToCache(polygon: GrowableXYZArray | undefined, builder: PolyfaceBuilder | undefined, cache: GrowableXYZArrayCache) {\n if (polygon) {\n if (builder)\n builder.addPolygonGrowableXYZArray(polygon);\n cache.dropToCache(polygon);\n }\n }\n private static addPolygonArrayToBuilderAndDropToCache(polygonArray: GrowableXYZArray[], builder: PolyfaceBuilder | undefined, cache: GrowableXYZArrayCache) {\n let polygon;\n while ((polygon = polygonArray.pop()) !== undefined) {\n this.addPolygonToBuilderAndDropToCache(polygon, builder, cache);\n }\n }\n private static createChainContextsForConvexClipPlaneSet(clipper: ConvexClipPlaneSet): ChainMergeContext[] {\n const chainContexts = [];\n for (const plane of clipper.planes) {\n if (!plane.interior) {\n const c = ChainMergeContext.create();\n c.plane = plane;\n c.convexClipper = clipper;\n chainContexts.push(c);\n }\n }\n return chainContexts;\n }\n\n /** Clip each facet of polyface to the the clippers.\n * * Add inside, outside fragments to builderA, builderB\n * * This does not consider params, normals, colors. Just points.\n * @internal\n */\n public static clipPolyfaceConvexClipPlaneSetToBuilders(polyface: Polyface, clipper: ConvexClipPlaneSet, destination: ClippedPolyfaceBuilders) {\n const builderA = destination.builderA;\n const builderB = destination.builderB;\n const visitor = polyface.createVisitor(0);\n const cache = new GrowableXYZArrayCache();\n const outsideParts: GrowableXYZArray[] = [];\n for (visitor.reset(); visitor.moveToNextFacet();) {\n // !!! currentCandidates and next candidates are empty at this point !!!\n const insidePart = clipper.clipInsidePushOutside(visitor.point, outsideParts, cache);\n if (insidePart === undefined) {\n // everything is out ... outsideParts might be fragmented. Save only the original polygon\n builderB?.addPolygonGrowableXYZArray(visitor.point);\n cache.dropToCache(insidePart);\n cache.dropAllToCache(outsideParts);\n }\n this.addPolygonToBuilderAndDropToCache(insidePart, builderA, cache);\n this.addPolygonArrayToBuilderAndDropToCache(outsideParts, builderB, cache);\n }\n this.buildClosureFacesForConvexSet(visitor, clipper, destination, cache);\n }\n /**\n *\n * @param visitor visitor for all facets of interest (entire polyface)\n * @param clipper ConvexClipPlaneSet to apply\n * @param destination builders to receive inside, outside parts\n * @param cache GrowableArray cache.\n */\n private static buildClosureFacesForConvexSet(visitor: PolyfaceVisitor, clipper: ConvexClipPlaneSet, destination: ClippedPolyfaceBuilders,\n cache: GrowableXYZArrayCache) {\n if (destination.buildClosureFaces) {\n const chainContexts = this.createChainContextsForConvexClipPlaneSet(clipper);\n const workPoints = cache.grabFromCache();\n const facetPoints = cache.grabFromCache();\n for (visitor.reset(); visitor.moveToNextFacet();) {\n for (const chainContext of chainContexts) {\n const plane = chainContext.plane;\n facetPoints.clear();\n facetPoints.pushFrom(visitor.point);\n IndexedXYZCollectionPolygonOps.clipConvexPolygonInPlace(plane!, facetPoints, workPoints);\n chainContext.addSegmentsOnPlane(facetPoints, true);\n }\n }\n cache.dropToCache(facetPoints);\n cache.dropToCache(workPoints);\n for (const chainContext of chainContexts) {\n this.addClosureFacets(chainContext, destination, cache);\n }\n }\n }\n\n /**\n *\n * @param visitor visitor for all facets of interest (entire polyface)\n * @param clipper ConvexClipPlaneSet to apply\n * @param destination builders to receive inside, outside parts\n * @param cache GrowableArray cache.\n */\n private static buildClosureFacesForPlane(visitor: PolyfaceVisitor, plane: PlaneAltitudeEvaluator, destination: ClippedPolyfaceBuilders,\n cache: GrowableXYZArrayCache) {\n if (destination.buildClosureFaces) {\n const chainContext = ChainMergeContext.create();\n chainContext.plane = plane;\n const workPoints = cache.grabFromCache();\n const facetPoints = cache.grabFromCache();\n for (visitor.reset(); visitor.moveToNextFacet();) {\n facetPoints.clear();\n facetPoints.pushFrom(visitor.point);\n IndexedXYZCollectionPolygonOps.clipConvexPolygonInPlace(plane, facetPoints, workPoints);\n chainContext.addSegmentsOnPlane(facetPoints, true);\n }\n cache.dropToCache(facetPoints);\n cache.dropToCache(workPoints);\n this.addClosureFacets(chainContext, destination, cache);\n }\n }\n private static evaluateInwardPlaneNormal(plane: PlaneAltitudeEvaluator, scale: number): Vector3d {\n return Vector3d.create(plane.velocityXYZ(scale, 0, 0), plane.velocityXYZ(0, scale, 0), plane.velocityXYZ(0, 0, scale));\n }\n /**\n * * Triangulate the contour.\n * * Add all the triangles to both builders\n * * reversed in builderB.\n */\n private static addClippedContour(contour: SweepContour, clipper: ConvexClipPlaneSet | undefined, destination: ClippedPolyfaceBuilders, cache: GrowableXYZArrayCache) {\n const polygonA = cache.grabFromCache();\n const polygonB = cache.grabFromCache();\n if (destination.builderB)\n destination.builderB.toggleReversedFacetFlag();\n contour.announceFacets((facets: IndexedPolyface) => {\n const visitor = facets.createVisitor();\n // The contour facets are convex .. easy clip ..\n for (visitor.reset(); visitor.moveToNextFacet();) {\n polygonA.clear();\n polygonA.pushFromGrowableXYZArray(visitor.point);\n clipper?.clipConvexPolygonInPlace(polygonA, polygonB);\n if (polygonA.length > 2) {\n destination.builderA?.addPolygonGrowableXYZArray(polygonA);\n destination.builderB?.addPolygonGrowableXYZArray(polygonA);\n }\n }\n }, undefined);\n if (destination.builderB)\n destination.builderB.toggleReversedFacetFlag();\n cache.dropToCache(polygonA);\n cache.dropToCache(polygonB);\n }\n\n /**\n * Gather loops out of the ChainMergeContext. Add to destination arrays.\n * @param chainContext ASSUMED TO HAVE A PLANE\n * @param destination\n */\n private static addClosureFacets(chainContext: ChainMergeContext, destination: ClippedPolyfaceBuilders, cache: GrowableXYZArrayCache) {\n const clipper = chainContext.convexClipper;\n const plane = chainContext.plane!;\n const outwardNormal = this.evaluateInwardPlaneNormal(plane, -1.0);\n chainContext.clusterAndMergeVerticesXYZ();\n const loops = chainContext.collectMaximalGrowableXYZArrays();\n if (loops.length > 1) {\n const loopSets = PolygonOps.sortOuterAndHoleLoops(loops, outwardNormal);\n for (const loopSet of loopSets) {\n PolygonOps.orientLoopsCCWForOutwardNormalInPlace(loopSet, outwardNormal);\n const contour = SweepContour.createForPolygon(loopSet, outwardNormal);\n if (contour !== undefined) {\n if (clipper) {\n this.addClippedContour(contour, clipper, destination, cache);\n } else {\n if (destination.builderA)\n contour.emitFacets(destination.builderA, true, clipper);\n if (destination.builderB)\n contour.emitFacets(destination.builderB, false, clipper);\n }\n }\n }\n } else {\n PolygonOps.orientLoopsCCWForOutwardNormalInPlace(loops, outwardNormal);\n const contour = SweepContour.createForPolygon(loops, outwardNormal);\n if (contour !== undefined) {\n if (clipper) {\n this.addClippedContour(contour, clipper, destination, cache);\n } else {\n if (destination.builderA)\n contour.emitFacets(destination.builderA, true, clipper);\n if (destination.builderB)\n contour.emitFacets(destination.builderB, false, clipper);\n }\n }\n }\n }\n\n /** Clip each facet of polyface to the the clippers.\n * * Add inside, outside fragments to builderA, builderB\n * * This does not consider params, normals, colors. Just points.\n * @internal\n */\n public static clipPolyfaceClipPlaneToBuilders(polyface: Polyface, clipper: PlaneAltitudeEvaluator, destination: ClippedPolyfaceBuilders) {\n const builderA = destination.builderA;\n const builderB = destination.builderB;\n const visitor = polyface.createVisitor(0);\n const cache = new GrowableXYZArrayCache();\n const inside = cache.grabFromCache();\n const outside = cache.grabFromCache();\n const range = Range1d.createNull();\n for (visitor.reset(); visitor.moveToNextFacet();) {\n // !!! currentCandidates and next candidates are empty at this point !!!\n IndexedXYZCollectionPolygonOps.splitConvexPolygonInsideOutsidePlane(clipper, visitor.point, inside, outside, range);\n if (builderA)\n builderA.addPolygonGrowableXYZArray(inside);\n if (builderB)\n builderB.addPolygonGrowableXYZArray(outside);\n }\n this.buildClosureFacesForPlane(visitor, clipper, destination, cache);\n cache.dropToCache(inside);\n cache.dropToCache(outside);\n }\n\n /** Clip each facet of polyface to the ClipPlane or ConvexClipPlaneSet\n * * accumulate inside and outside facets -- to destination.builderA and destination.builderB\n * * if `destination.buildClosureFaces` is set, and also build closure facets\n * * This method parses the variant input types and calls a more specific method.\n * * WARNING: The new mesh is \"points only\".\n * * outputSelect applies only for UnionOfConvexClipPlaneSets -- see [[PolyfaceClip.clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders]]\n */\n public static clipPolyfaceInsideOutside(polyface: Polyface, clipper: ClipPlane | ConvexClipPlaneSet | UnionOfConvexClipPlaneSets, destination: ClippedPolyfaceBuilders,\n outputSelect: number = 0) {\n if (clipper instanceof ClipPlane) {\n this.clipPolyfaceClipPlaneToBuilders(polyface, clipper, destination);\n } else if (clipper instanceof ConvexClipPlaneSet) {\n this.clipPolyfaceConvexClipPlaneSetToBuilders(polyface, clipper, destination);\n } else if (clipper instanceof UnionOfConvexClipPlaneSets) {\n this.clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders(polyface, clipper, destination, outputSelect);\n }\n }\n /** Clip each facet of polyface to the ClipPlane or ConvexClipPlaneSet\n * * This method parses the variant input types and calls a more specific method.\n * * To get both inside and outside parts, use clipPolyfaceInsideOutside\n * * WARNING: The new mesh is \"points only\".\n */\n public static clipPolyface(polyface: Polyface, clipper: ClipPlane | ConvexClipPlaneSet): Polyface | undefined {\n if (clipper instanceof ClipPlane)\n return this.clipPolyfaceClipPlane(polyface, clipper);\n if (clipper instanceof ConvexClipPlaneSet)\n return this.clipPolyfaceConvexClipPlaneSet(polyface, clipper);\n // (The if tests exhaust the type space -- this line is unreachable.)\n return undefined;\n }\n /**\n * Drape the region onto the mesh.\n * * This method computes the portion of the input mesh that lies inside the clipper generated from sweeping the input region in the given direction.\n * @param mesh input mesh, untouched\n * @param region planar region to drape onto mesh\n * @param sweepVector optional sweep direction for region, magnitude unused. If undefined, sweep is along the region normal.\n * @param options how to stroke the region boundary\n * @returns clipped facets. No other mesh data but vertices appear in output.\n */\n public static drapeRegion(mesh: Polyface | PolyfaceVisitor, region: AnyRegion, sweepVector?: Vector3d, options?: StrokeOptions): IndexedPolyface | undefined {\n if (mesh instanceof Polyface)\n return this.drapeRegion(mesh.createVisitor(0), region, sweepVector, options);\n const contour = SweepContour.createForLinearSweep(region);\n if (!contour)\n return undefined;\n let sweep = sweepVector;\n if (sweepVector && contour.localToWorld.matrix.dotColumnZ(sweepVector) < 0.0)\n sweep = sweepVector.scale(-1); // avoid inverted clipper\n const clipper = contour.sweepToUnionOfConvexClipPlaneSets(sweep, false, false, options);\n if (!clipper)\n return undefined;\n const builders = ClippedPolyfaceBuilders.create(true); // we want only the facets inside the clipper\n this.clipPolyfaceUnionOfConvexClipPlaneSetsToBuilders(mesh, clipper, builders, 1);\n return builders.claimPolyface(0, true);\n }\n /** Find consecutive points around a polygon (with implied closure edge) that are ON a plane\n * @param points array of points around polygon. Closure edge is implied.\n * @param chainContext context receiving edges\n * @param point0 work point\n * @param point1 work point\n */\n private static collectEdgesOnPlane(points: GrowableXYZArray, clipper: ClipPlane, chainContext: ChainMergeContext, point0: Point3d, point1: Point3d) {\n const n = points.length;\n if (n > 1) {\n points.getPoint3dAtUncheckedPointIndex(n - 1, point0);\n for (let i = 0; i < n; i++) {\n points.getPoint3dAtUncheckedPointIndex(i, point1);\n if (clipper.isPointOn(point0) && clipper.isPointOn(point1))\n chainContext.addSegment(point0, point1);\n point0.setFromPoint3d(point1);\n }\n }\n }\n /** Intersect each facet with the clip plane. (Producing intersection edges.)\n * * Return all edges chained as array of LineString3d.\n */\n public static sectionPolyfaceClipPlane(polyface: Polyface, clipper: ClipPlane): LineString3d[] {\n const chainContext = ChainMergeContext.create();\n\n const visitor = polyface.createVisitor(0);\n const work = new GrowableXYZArray(10);\n const point0 = Point3d.create();\n const point1 = Point3d.create();\n for (visitor.reset(); visitor.moveToNextFacet();) {\n clipper.clipConvexPolygonInPlace(visitor.point, work, true);\n this.collectEdgesOnPlane(visitor.point, clipper, chainContext, point0, point1);\n }\n chainContext.clusterAndMergeVerticesXYZ();\n return chainContext.collectMaximalChains();\n }\n\n /**\n * * Split facets of mesh \"A\" into parts that are\n * * under mesh \"B\"\n * * over mesh \"B\"\n * * both meshes are represented by visitors rather than the meshes themselves\n * * If the data in-hand is a mesh, call with `mesh.createVisitor`\n * * The respective clip parts are fed to caller-supplied builders.\n * * Caller may set either or both builders to toggle facet order (e.g. toggle the lower facets to make them \"point down\" in cut-fill application)\n * * This step is commonly one-half of \"cut fill\".\n * * A \"cut fill\" wrapper will call this twice with the visitor and builder roles reversed.\n * * Both polyfaces are assumed convex with CCW orientation viewed from above.\n * @param visitorA iterator over polyface to be split.\n * @param visitorB iterator over polyface that acts as a splitter\n * @param orientUnderMeshDownward if true, the \"meshAUnderB\" output is oriented with its normals reversed so it can act as the bottom side of a cut-fill pair.\n */\n public static clipPolyfaceUnderOverConvexPolyfaceIntoBuilders(visitorA: PolyfaceVisitor, visitorB: PolyfaceVisitor,\n builderAUnderB: PolyfaceBuilder | undefined,\n builderAOverB: PolyfaceBuilder | undefined) {\n const rangeDataA = PolyfaceQuery.collectRangeLengthData(visitorA);\n const searchA = RangeSearch.create2dSearcherForRangeLengthData<number>(rangeDataA);\n if (!searchA)\n return;\n const range = Range3d.create();\n for (visitorA.reset(); visitorA.moveToNextFacet();) {\n visitorA.point.setRange(range);\n searchA.addRange(range, visitorA.currentReadIndex());\n }\n const xyClip = new GrowableXYZArray(10);\n const workArray = new GrowableXYZArray(10);\n const xyFrustum = ConvexClipPlaneSet.createEmpty();\n const below = new GrowableXYZArray(10);\n const above = new GrowableXYZArray(10);\n const planeOfFacet = ClipPlane.createNormalAndPointXYZXYZ(0, 0, 1, 0, 0, 0)!;\n const altitudeRange = Range1d.createNull();\n\n for (visitorB.reset(); visitorB.moveToNextFacet();) {\n visitorB.point.setRange(range);\n ConvexClipPlaneSet.setPlaneAndXYLoopCCW(visitorB.point, planeOfFacet, xyFrustum);\n searchA.searchRange2d(range, (_rangeA: Range2d, readIndexA: number) => {\n visitorA.moveToReadIndex(readIndexA);\n xyFrustum.polygonClip(visitorA.point, xyClip, workArray);\n // builderAOverB.addPolygonGrowableXYZArray(xyClip);\n if (xyClip.length > 0) {\n // planeOfFacet.convexPolygonSplitInsideOutsideGrowableArrays(xyClip, below, above, altitudeRange);\n IndexedXYZCollectionPolygonOps.splitConvexPolygonInsideOutsidePlane(planeOfFacet, xyClip, below, above, altitudeRange);\n if (below.length > 0 && builderAUnderB)\n builderAUnderB.addPolygonGrowableXYZArray(below);\n if (above.length > 0 && builderAOverB)\n builderAOverB.addPolygonGrowableXYZArray(above);\n }\n return true;\n });\n }\n }\n\n /**\n * * Split facets into vertically overlapping sections\n * * both meshes are represented by visitors rather than the meshes themselves\n * * If the data in-hand is a mesh, call with `mesh.createVisitor`\n * * The respective clip parts are returned as separate meshes.\n * * Caller may set either or both builders to toggle facet order (e.g. toggle the lower facets to make them \"point down\" in cut-fill application)\n * * Both polyfaces are assumed convex with CCW orientation viewed from above.\n * * Each output contains some facets from meshA and some from meshB:\n * * meshAUnderB -- areas where meshA is underneath mesh B.\n * * If A is \"design surface\" and B is existing DTM, this is \"cut\" volume\n * * meshAOverB -- areas where meshB is over meshB.\n * * If A is \"design surface\" and B is existing DTM, this is \"fill\" volume\n *\n * @param visitorA iterator over polyface to be split.\n * @param visitorB iterator over polyface that acts as a splitter\n * @param orientUnderMeshDownward if true, the \"meshAUnderB\" output is oriented with its normals reversed so it can act as the bottom side of a cut-fill pair.\n */\n public static computeCutFill(meshA: IndexedPolyface, meshB: IndexedPolyface): { meshAUnderB: IndexedPolyface, meshAOverB: IndexedPolyface } {\n const visitorA = meshA.createVisitor();\n const visitorB = meshB.createVisitor();\n const builderAUnderB = PolyfaceBuilder.create();\n const builderAOverB = PolyfaceBuilder.create();\n builderAUnderB.toggleReversedFacetFlag();\n this.clipPolyfaceUnderOverConvexPolyfaceIntoBuilders(visitorA, visitorB, builderAUnderB, builderAOverB);\n builderAUnderB.toggleReversedFacetFlag();\n builderAOverB.toggleReversedFacetFlag();\n this.clipPolyfaceUnderOverConvexPolyfaceIntoBuilders(visitorB, visitorA, builderAOverB, builderAUnderB);\n return {\n meshAUnderB: builderAUnderB.claimPolyface(),\n meshAOverB: builderAOverB.claimPolyface(),\n };\n }\n}\n"]}
@@ -8,70 +8,85 @@ import { PolyfaceAuxData } from "./AuxData";
8
8
  import { FacetFaceData } from "./FacetFaceData";
9
9
  import { TaggedNumericData } from "./TaggedNumericData";
10
10
  /**
11
- * PolyfaceData carries data arrays for point, normal, param, color and their indices.
12
- *
13
- * * IndexedPolyface carries a PolyfaceData as a member. (NOT as a base class -- it already has GeometryQuery as base)
14
- * * IndexedPolyfaceVisitor uses PolyfaceData as a base class. In this use there is only a single facet in the polyfaceData.
15
- * * PolyfaceData does not know (!!!) what indices range constitute a facet. That is managed by derived class or carrier class.
11
+ * `PolyfaceData` carries data arrays for point, normal, uv-parameters, and color, and index arrays for each.
12
+ * * Normal, uv-parameter, and color data are optional.
13
+ * * A given data array is defined if and only if its corresponding index array is defined.
14
+ * * All defined index arrays have parallel face loop order and structure, and thus the same length.
15
+ * * `IndexedPolyface` carries a PolyfaceData as a member (NOT as a base class; it already has `GeometryQuery` as base).
16
+ * * `IndexedPolyfaceVisitor` uses PolyfaceData as a base class. In this use, there is only a single facet in `PolyfaceData`.
17
+ * * `PolyfaceData` does not know what index range constitutes a given facet. This is managed by a derived/carrier class.
16
18
  * @public
17
19
  */
18
20
  export declare class PolyfaceData {
19
- /** Relative tolerance used in tests for planar facets
21
+ /**
22
+ * Relative tolerance used in tests for planar facets.
20
23
  * @internal
21
- */
24
+ */
22
25
  static readonly planarityLocalRelTol = 1e-13;
23
- /** Coordinate data for points in the facets, packed as numbers in a contiguous array. */
26
+ /** Coordinate data for points in the facets (packed as numbers in a contiguous array). */
24
27
  point: GrowableXYZArray;
25
28
  /** Indices of points at facet vertices. */
26
29
  pointIndex: number[];
27
- /** Booleans indicating visibility of corresponding edges. */
28
- edgeVisible: boolean[];
29
- /** Coordinates of normal vectors, packed as numbers in a contiguous array. */
30
+ /** Coordinates of normal vectors (packed as numbers in a contiguous array). */
30
31
  normal: GrowableXYZArray | undefined;
31
32
  /** Indices of normals at facet vertices. */
32
33
  normalIndex: number[] | undefined;
33
- /** Coordinates of uv parameters, packed as numbers in a contiguous array. */
34
+ /** Coordinates of uv parameters (packed as numbers in a contiguous array). */
34
35
  param?: GrowableXYArray;
35
36
  /** Indices of params at facet vertices. */
36
37
  paramIndex: number[] | undefined;
37
- /** Color values. These are carried around as simple numbers, but are probably
38
- * required (by display systems) map exactly to 32 bit integers.
38
+ /**
39
+ * Color values. These are carried around as simple numbers, but are probably required (by display systems) to map
40
+ * exactly to 32-bit integers.
39
41
  */
40
42
  color: number[] | undefined;
41
43
  /** Indices of colors at facet vertices. */
42
44
  colorIndex: number[] | undefined;
43
- /** Face data will remain empty until a face is specified. */
45
+ /**
46
+ * Map from facet index to face data.
47
+ * * A "face" is a logical grouping of connected facets in the mesh, e.g., the facets that resulted from faceting
48
+ * a given face of a solid.
49
+ * * Face data remains empty until a face is specified.
50
+ */
44
51
  face: FacetFaceData[];
45
- /** Auxiliary data */
52
+ /** Auxiliary data. */
46
53
  auxData: PolyfaceAuxData | undefined;
47
- /** Tagged geometry data */
54
+ /** Tagged geometry data. */
48
55
  taggedNumericData: TaggedNumericData | undefined;
56
+ /**
57
+ * Booleans indicating visibility of corresponding edges.
58
+ * * The `edgeVisible` array is parallel to the `pointIndex` array.
59
+ * * The visibility flag applies to the edge whose start vertex index appears in the same place in the `pointIndex` array.
60
+ * * For example, consider the mesh with 2 triangular facets given by `pointIndex = [1,0,2, 1,2,3]`. If the triangles'
61
+ * shared edge is hidden, then the mesh has `edgeVisible = [true,true,false, false,true,true]`.
62
+ */
63
+ edgeVisible: boolean[];
64
+ /** Boolean tag indicating if the facets are viewable from the back. */
49
65
  private _twoSided;
50
- /** boolean tag indicating if the facets are to be considered viewable from the back */
51
- get twoSided(): boolean;
52
- set twoSided(value: boolean);
53
- /** set the `taggedNumericData` member */
54
- setTaggedNumericData(data: TaggedNumericData | undefined): void;
55
- private _expectedClosure;
56
66
  /**
57
67
  * Flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2).
58
68
  * * A boundary edge of a mesh is defined as an edge with only one connected facet.
59
69
  * * Closed solid is a mesh with no boundary edge. Open sheet is a mesh that has boundary edge(s).
60
70
  */
61
- get expectedClosure(): number;
62
- set expectedClosure(value: number);
63
- /** Constructor for facets.
64
- * * The various params control whether respective arrays are to be allocated.
65
- * * If arrayData is provided, all other params are IGNORED.
66
- * *
71
+ private _expectedClosure;
72
+ /**
73
+ * Constructor for facets.
74
+ * @param needNormals `true` to allocate empty normal data and index arrays; `false` (default) to leave undefined.
75
+ * @param needParams `true` to allocate empty uv parameter data and index arrays; `false` (default) to leave undefined.
76
+ * @param needColors `true` to allocate empty color data and index arrays; `false` (default) to leave undefined.
77
+ * @param twoSided `true` if the facets are to be considered viewable from the back; `false` (default) if not.
67
78
  */
68
79
  constructor(needNormals?: boolean, needParams?: boolean, needColors?: boolean, twoSided?: boolean);
69
80
  /** Return a deep clone. */
70
81
  clone(): PolyfaceData;
71
- /** Test for equal indices and nearly equal coordinates */
82
+ /** Test for equal indices and nearly equal coordinates. */
72
83
  isAlmostEqual(other: PolyfaceData): boolean;
73
84
  /** Ask if normals are required in this mesh. */
74
85
  get requireNormals(): boolean;
86
+ /** Ask if params are required in this mesh. */
87
+ get requireParams(): boolean;
88
+ /** Ask if colors are required in this mesh. */
89
+ get requireColors(): boolean;
75
90
  /** Get the point count */
76
91
  get pointCount(): number;
77
92
  /** Get the normal count */
@@ -80,74 +95,74 @@ export declare class PolyfaceData {
80
95
  get paramCount(): number;
81
96
  /** Get the color count */
82
97
  get colorCount(): number;
83
- /** Get the index count. Note that there is one count, and all index arrays (point, normal, param, color) must match */
98
+ /** Get the index count. Note that the point array is always indexed, and index arrays all have the same length. */
84
99
  get indexCount(): number;
85
- /** Get the number of faces.
100
+ /**
101
+ * Get the number of faces.
86
102
  * * Note that a "face" is not a facet.
87
- * * A "face" is a subset of facets grouped for application purposes.
103
+ * * A face is a subset of the Polyface's facets grouped for application purposes.
88
104
  */
89
105
  get faceCount(): number;
90
- /** return indexed point. This is a copy of the coordinates, not a reference. */
91
- getPoint(i: number, out?: Point3d): Point3d | undefined;
92
- /** return indexed normal. This is the COPY to the normal, not a reference. */
93
- getNormal(i: number): Vector3d | undefined;
94
- /** return indexed param. This is the COPY of the coordinates, not a reference. */
95
- getParam(i: number): Point2d | undefined;
96
- /** return indexed color */
106
+ /** Return indexed point at index `i`. This is a COPY of the coordinates, not a reference. */
107
+ getPoint(i: number, result?: Point3d): Point3d | undefined;
108
+ /** Return indexed normal at index `i`. This is a COPY of the normal, not a reference. */
109
+ getNormal(i: number, result?: Vector3d): Vector3d | undefined;
110
+ /** Return indexed param at index `i`. This is a COPY of the coordinates, not a reference. */
111
+ getParam(i: number, result?: Point2d): Point2d | undefined;
112
+ /** Return indexed color at index `i`. Index `i` is not checked for validity. */
97
113
  getColor(i: number): number;
98
- /** return indexed visibility */
114
+ /** Return indexed visibility. at index `i`. Index `i` is not checked for validity. */
99
115
  getEdgeVisible(i: number): boolean;
100
- /** Copy the contents (not pointer) of point[i] into dest. */
116
+ /** Get boolean tag indicating if the facets are to be considered viewable from the back. */
117
+ get twoSided(): boolean;
118
+ set twoSided(value: boolean);
119
+ /** Get flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2). */
120
+ get expectedClosure(): number;
121
+ set expectedClosure(value: number);
122
+ /** Set the tagged geometry data. */
123
+ setTaggedNumericData(data: TaggedNumericData | undefined): void;
124
+ /** Copy the contents (not pointer) of `point[i]` into `dest`. Index `i` is not checked for validity. */
101
125
  copyPointTo(i: number, dest: Point3d): void;
102
- /** Copy the contents (not pointer) of normal[i] into dest. */
126
+ /** Copy the contents (not pointer) of `normal[i]` into `dest`. Index `i` is not checked for validity. */
103
127
  copyNormalTo(i: number, dest: Vector3d): void;
104
- /** Copy the contents (not pointer) of param[i] into dest. */
128
+ /** Copy the contents (not pointer) of `param[i]` into `dest`. Index `i` is not checked for validity. */
105
129
  copyParamTo(i: number, dest: Point2d): void;
106
- /** test if normal at a specified index matches uv */
107
- isAlmostEqualParamIndexUV(index: number, u: number, v: number): boolean;
130
+ /** Test if param at a index `i` matches the given uv */
131
+ isAlmostEqualParamIndexUV(i: number, u: number, v: number): boolean;
108
132
  /**
109
- * * Copy data from other to this.
133
+ * Copy data from `other` to `this`.
110
134
  * * This is the essence of transferring coordinates spread throughout a large polyface into a visitor's single facet.
111
- * * "other" is the large polyface
112
- * * "this" is the visitor
113
- * * does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface!!
135
+ * * Common usage: "other" is a Polyface, "this" is a PolyfaceVisitor to receive data from a single facet of the Polyface.
136
+ * * Does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface.
114
137
  * @param other polyface data being mined.
115
- * @param index0 start index in other's index arrays
116
- * @param index1 end index (one beyond last data accessed0 in other's index arrays
138
+ * @param index0 start index in other's index arrays.
139
+ * @param index1 end index (one beyond last data accessed) in other's index arrays.
117
140
  * @param numWrap number of points to replicate as wraparound.
118
141
  */
119
142
  gatherIndexedData(other: PolyfaceData, index0: number, index1: number, numWrap: number): void;
143
+ /** Trim the `data` arrays to the stated `length`. */
120
144
  private static trimArray;
121
145
  /**
122
- * Trim all index arrays to the stated length.
123
- * This is called by PolyfaceBuilder to clean up after an aborted construction sequence.
146
+ * Trim all index arrays to the stated `length`.
147
+ * * This is called by PolyfaceBuilder to clean up after an aborted construction sequence.
124
148
  */
125
149
  trimAllIndexArrays(length: number): void;
126
- /** Resize all data arrays to specified length */
150
+ /**
151
+ * Resize all data and index arrays to the specified `length`.
152
+ * * This is used by visitors, whose data and index arrays are all parallel.
153
+ */
154
+ resizeAllArrays(length: number): void;
155
+ /**
156
+ * Resize all data arrays to the specified `length`.
157
+ * @deprecated in 4.x because name is misleading. Call [[PolyfaceData.resizeAllArrays]] instead.
158
+ */
127
159
  resizeAllDataArrays(length: number): void;
128
- /** Return the range of the point array (optionally transformed) */
160
+ /** Return the range of the point array (optionally transformed). */
129
161
  range(result?: Range3d, transform?: Transform): Range3d;
130
- /** reverse indices facet-by-facet, with the given facetStartIndex array delimiting faces.
131
- *
132
- * * facetStartIndex[0] == 0 always -- start of facet zero.
133
- * * facet k has indices from facetStartIndex[k] <= i < facetStartIndex[k+1]
134
- * * hence for "internal" k, facetStartIndex[k] is both the upper limit of facet k-1 and the start of facet k.
135
- * *
136
- */
137
- reverseIndices(facetStartIndex?: number[]): void;
138
- /** reverse indices facet-by-facet, with the given facetStartIndex array delimiting faces.
139
- *
140
- * * facetStartIndex[0] == 0 always -- start of facet zero.
141
- * * facet k has indices from facetStartIndex[k] <= i < facetStartIndex[k+1]
142
- * * hence for "internal" k, facetStartIndex[k] is both the upper limit of facet k-1 and the start of facet k.
143
- * *
144
- */
145
- reverseIndicesSingleFacet(facetId: number, facetStartIndex: number[]): void;
146
- /** Scale all the normals by -1 */
147
- reverseNormals(): void;
148
- /** Apply `transform` to point and normal arrays and to auxData.
149
- * * IMPORTANT This base class is just a data carrier. It does not know if the index order and normal directions have special meaning.
150
- * * i.e. caller must separately reverse index order and normal direction if needed.
162
+ /**
163
+ * Apply `transform` to point and normal arrays and to auxData.
164
+ * * IMPORTANT This base class is just a data carrier. It does not know if the index order and normal directions
165
+ * have special meaning, i.e., caller must separately reverse index order and normal direction if needed.
151
166
  */
152
167
  tryTransformInPlace(transform: Transform): boolean;
153
168
  /**
@@ -155,23 +170,59 @@ export declare class PolyfaceData {
155
170
  * * Search for duplicates within points, normals, params, and colors.
156
171
  * * Compress each data array.
157
172
  * * Revise all indexing for the relocated data.
158
- * @param tolerance optional tolerance for clustering mesh vertices. Default is [[Geometry.smallMetricDistance]].
173
+ * @param tolerance (optional) tolerance for clustering mesh vertices. Default is [[Geometry.smallMetricDistance]].
159
174
  */
160
175
  compress(tolerance?: number): void;
161
176
  /**
162
- * Test if facetStartIndex is (minimally!) valid:
163
- * * length must be nonzero (recall that for "no facets" the facetStartIndexArray still must contain a 0)
177
+ * Test if `facetStartIndex` is (minimally) valid.
178
+ * * Length must be nonzero (recall that for "no facets", the `facetStartIndex` array still must contain a 0).
164
179
  * * Each entry must be strictly smaller than the one that follows.
165
- * @param facetStartIndex array of facetStart data. facet `i` has indices at `facetsStartIndex[i]` to (one before) `facetStartIndex[i+1]`
180
+ * @param facetStartIndex start indices of all facets. Facet k starts at facetStartIndex[k] up to (but not including)
181
+ * `facetStartIndex[k + 1]`
166
182
  */
167
183
  static isValidFacetStartIndexArray(facetStartIndex: number[]): boolean;
168
- /** Reverse data in entire facet indexing arrays.
169
- * * parameterized over type T so non-number data -- e.g. boolean visibility flags -- can be reversed.
184
+ /**
185
+ * Reverse the indices for the specified facets in the given index array.
186
+ * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.
187
+ * @param facetStartIndex start indices of *consecutive* facets to be reversed, e.g., an IndexedPolyface's _facetStart
188
+ * array. See the non-static [[reverseIndices]].
189
+ * @param indices the index array, e.g., pointIndex, normalIndex, etc.
190
+ * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);
191
+ * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).
170
192
  */
171
193
  static reverseIndices<T>(facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean): boolean;
172
- /** Reverse data in entire facet indexing arrays.
173
- * * parameterized over type T so non-number data -- e.g. boolean visibility flags -- can be reversed.
194
+ /**
195
+ * Reverse the indices for the specified facet in the specified index array.
196
+ * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.
197
+ * @param facetIndex index of the facet to reverse. The entries of `indices` to be reversed are found at
198
+ * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.
199
+ * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.
200
+ * See [[reverseIndices]].
201
+ * @param indices the index array, e.g., pointIndex, normalIndex, etc.
202
+ * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);
203
+ * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).
174
204
  */
175
- static reverseIndicesSingleFacet<T>(facetId: number, facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean): boolean;
205
+ static reverseIndicesSingleFacet<T>(facetIndex: number, facetStartIndex: number[], indices: T[] | undefined, preserveStart: boolean): boolean;
206
+ /**
207
+ * Reverse the indices for the specified facets in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,
208
+ * and edgeVisible).
209
+ * @param facetStartIndex start indices of *consecutive* facets to be reversed.
210
+ * * Consecutive indices in this array define where a given facet is represented in each of the parallel index arrays.
211
+ * * The indices for facet k are `facetStartIndex[k]` up to (but not including) `facetStartIndex[k + 1]`.
212
+ * * This implies `facetStartIndex[k + 1]` is both the upper limit of facet k's indices, and the start index of facet k+1.
213
+ * * For example, passing an IndexedPolyface's _facetStart array into this method reverses every facet.
214
+ */
215
+ reverseIndices(facetStartIndex?: number[]): void;
216
+ /**
217
+ * Reverse the indices for the specified facet in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,
218
+ * and edgeVisible).
219
+ * @param facetIndex index of the facet to reverse. The entries of each index array to be reversed are found at
220
+ * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.
221
+ * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.
222
+ * See [[reverseIndices]].
223
+ */
224
+ reverseIndicesSingleFacet(facetIndex: number, facetStartIndex: number[]): void;
225
+ /** Scale all the normals by -1. */
226
+ reverseNormals(): void;
176
227
  }
177
228
  //# sourceMappingURL=PolyfaceData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PolyfaceData.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceData.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PolyfaceData.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceData.ts"],"names":[],"mappings":"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"}