@itwin/core-geometry 4.9.0-dev.2 → 4.9.0-dev.20
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.
- package/CHANGELOG.md +37 -1
- package/lib/cjs/Geometry.d.ts +57 -46
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +73 -53
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +128 -34
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +174 -20
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +11 -6
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +12 -10
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +2 -1
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +2 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.d.ts +11 -9
- package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurve.js +11 -9
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.d.ts +4 -3
- package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
- package/lib/cjs/curve/CurveFactory.js +4 -3
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts +19 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +39 -0
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.d.ts +4 -4
- package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
- package/lib/cjs/curve/CurveOps.js +6 -6
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +7 -5
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +8 -6
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.d.ts.map +1 -1
- package/lib/cjs/curve/Loop.js +6 -6
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.d.ts +1 -1
- package/lib/cjs/curve/OffsetOptions.js +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/Path.d.ts.map +1 -1
- package/lib/cjs/curve/Path.js +5 -6
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +4 -3
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +4 -3
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +22 -8
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +127 -52
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +1000 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +11 -8
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js +7 -4
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.d.ts +18 -5
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +23 -7
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts +14 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js +47 -12
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.d.ts +2 -1
- package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js +12 -10
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js +1 -7
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.d.ts +6 -4
- package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +6 -4
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +2 -3
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +2 -3
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.d.ts +6 -5
- package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js +11 -10
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +4 -4
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +7 -11
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +6 -1
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +9 -3
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.d.ts +1 -1
- package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +1 -1
- package/lib/cjs/geometry3d/Transform.js +1 -1
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/numerics/Newton.d.ts +3 -3
- package/lib/cjs/numerics/Newton.d.ts.map +1 -1
- package/lib/cjs/numerics/Newton.js +14 -16
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.d.ts +2 -2
- package/lib/cjs/numerics/Polynomials.js +2 -2
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts +7 -4
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +11 -6
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.d.ts +13 -10
- package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js +17 -14
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +11 -14
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +59 -52
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +13 -6
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js +2 -2
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
- package/lib/cjs/solid/SweepContour.js +0 -4
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +1 -1
- package/lib/cjs/topology/Graph.js +2 -2
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +168 -127
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.d.ts +35 -35
- package/lib/cjs/topology/HalfEdgePositionDetail.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js +63 -41
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts +64 -12
- package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js +174 -75
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/Merging.d.ts +2 -2
- package/lib/cjs/topology/Merging.js +2 -2
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/Triangulation.d.ts +16 -10
- package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
- package/lib/cjs/topology/Triangulation.js +23 -30
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/esm/Geometry.d.ts +57 -46
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +73 -53
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +128 -34
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +172 -19
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +11 -6
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +12 -10
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +2 -1
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +2 -1
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.d.ts +11 -9
- package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurve.js +11 -9
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveFactory.d.ts +4 -3
- package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
- package/lib/esm/curve/CurveFactory.js +4 -3
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts +19 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +39 -0
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.d.ts +4 -4
- package/lib/esm/curve/CurveOps.d.ts.map +1 -1
- package/lib/esm/curve/CurveOps.js +6 -6
- package/lib/esm/curve/CurveOps.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +7 -5
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +8 -6
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.d.ts.map +1 -1
- package/lib/esm/curve/Loop.js +6 -6
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.d.ts +1 -1
- package/lib/esm/curve/OffsetOptions.js +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/Path.d.ts.map +1 -1
- package/lib/esm/curve/Path.js +5 -6
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +4 -3
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +4 -3
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +22 -8
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +127 -52
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +995 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +11 -8
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js +7 -4
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/geometry3d/Angle.d.ts +18 -5
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +23 -7
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts +14 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js +47 -12
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.d.ts +2 -1
- package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js +12 -10
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js +1 -7
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.d.ts +6 -4
- package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +6 -4
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +2 -3
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +2 -3
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.d.ts +6 -5
- package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js +11 -10
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +4 -4
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +7 -11
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +6 -1
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +9 -3
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray3d.d.ts +1 -1
- package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +1 -1
- package/lib/esm/geometry3d/Transform.js +1 -1
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/numerics/Newton.d.ts +3 -3
- package/lib/esm/numerics/Newton.d.ts.map +1 -1
- package/lib/esm/numerics/Newton.js +14 -16
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/Polynomials.d.ts +2 -2
- package/lib/esm/numerics/Polynomials.js +2 -2
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts +7 -4
- package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +11 -6
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.d.ts +13 -10
- package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js +17 -14
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +11 -14
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +59 -52
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +13 -6
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js +2 -2
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/solid/SweepContour.d.ts.map +1 -1
- package/lib/esm/solid/SweepContour.js +0 -4
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +1 -1
- package/lib/esm/topology/Graph.js +2 -2
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
- package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js +168 -127
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.d.ts +35 -35
- package/lib/esm/topology/HalfEdgePositionDetail.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js +63 -41
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.d.ts +64 -12
- package/lib/esm/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js +173 -74
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/Merging.d.ts +2 -2
- package/lib/esm/topology/Merging.js +2 -2
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/Triangulation.d.ts +16 -10
- package/lib/esm/topology/Triangulation.d.ts.map +1 -1
- package/lib/esm/topology/Triangulation.js +24 -31
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/package.json +3 -3
|
@@ -9,15 +9,7 @@ import { Vector3d } from "../geometry3d/Point3dVector3d";
|
|
|
9
9
|
import { IndexedPolyface, Polyface, PolyfaceVisitor } from "./Polyface";
|
|
10
10
|
import { PolyfaceBuilder } from "./PolyfaceBuilder";
|
|
11
11
|
/**
|
|
12
|
-
* A pair of PolyfaceBuilder objects, for use by clippers that emit inside and outside parts.
|
|
13
|
-
* * There are nominally 4 builders:
|
|
14
|
-
* * builderA collects simple "inside" clip.
|
|
15
|
-
* * builderB collects simple "outside" clip.
|
|
16
|
-
* * builderA1 collects "side" clip for inside.
|
|
17
|
-
* * builderB1 collets "side" clip for outside.
|
|
18
|
-
* * `static ClippedPolyfaceBuilders.create(keepInside, keepOutside)` initializes `builderA` and `builderB` (each optionally to undefined), with undefined `builderA1` and `builderB1`
|
|
19
|
-
* * `builders.enableSideBuilders()` makes `builderA1` and `builderB1` match `builderA` and `builderB`.
|
|
20
|
-
* * construction methods aim their facets at appropriate builders if defined.
|
|
12
|
+
* A pair of [[PolyfaceBuilder]] objects, for use by clippers that emit inside and outside parts.
|
|
21
13
|
* * @public
|
|
22
14
|
*/
|
|
23
15
|
export declare class ClippedPolyfaceBuilders {
|
|
@@ -28,8 +20,19 @@ export declare class ClippedPolyfaceBuilders {
|
|
|
28
20
|
/** request to construct cut faces */
|
|
29
21
|
buildClosureFaces?: boolean;
|
|
30
22
|
private constructor();
|
|
31
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Static constructor with default options for the builders.
|
|
25
|
+
* @param keepInside whether to collect clipped facets inside the clipper to `this.builderA` (default true)
|
|
26
|
+
* @param keepOutside whether to collect clipped facets outside the clipper to `this.builderB` (default false)
|
|
27
|
+
* @param buildSideFaces whether to add side facets to active builders (default false)
|
|
28
|
+
*/
|
|
32
29
|
static create(keepInside?: boolean, keepOutside?: boolean, buildSideFaces?: boolean): ClippedPolyfaceBuilders;
|
|
30
|
+
/**
|
|
31
|
+
* Return the computed facets from the selected builder.
|
|
32
|
+
* @param selector the polyface to return: 0 - builderA (typically inside facets), 1 - builderB (typically outside facets)
|
|
33
|
+
* @param fixup whether to clean up the polyface
|
|
34
|
+
* @param tolerance compression tolerance (default [[Geometry.smallMetricDistance]]).
|
|
35
|
+
*/
|
|
33
36
|
claimPolyface(selector: 0 | 1, fixup: boolean, tolerance?: number): IndexedPolyface | undefined;
|
|
34
37
|
}
|
|
35
38
|
/** PolyfaceClip is a static class gathering operations using Polyfaces and clippers.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolyfaceClip.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceClip.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAY,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAG/D,OAAO,EAAW,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAQlE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAgBpD
|
|
1
|
+
{"version":3,"file":"PolyfaceClip.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceClip.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,15 +39,7 @@ class ClipCandidate {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
|
-
* A pair of PolyfaceBuilder objects, for use by clippers that emit inside and outside parts.
|
|
43
|
-
* * There are nominally 4 builders:
|
|
44
|
-
* * builderA collects simple "inside" clip.
|
|
45
|
-
* * builderB collects simple "outside" clip.
|
|
46
|
-
* * builderA1 collects "side" clip for inside.
|
|
47
|
-
* * builderB1 collets "side" clip for outside.
|
|
48
|
-
* * `static ClippedPolyfaceBuilders.create(keepInside, keepOutside)` initializes `builderA` and `builderB` (each optionally to undefined), with undefined `builderA1` and `builderB1`
|
|
49
|
-
* * `builders.enableSideBuilders()` makes `builderA1` and `builderB1` match `builderA` and `builderB`.
|
|
50
|
-
* * construction methods aim their facets at appropriate builders if defined.
|
|
42
|
+
* A pair of [[PolyfaceBuilder]] objects, for use by clippers that emit inside and outside parts.
|
|
51
43
|
* * @public
|
|
52
44
|
*/
|
|
53
45
|
export class ClippedPolyfaceBuilders {
|
|
@@ -56,10 +48,21 @@ export class ClippedPolyfaceBuilders {
|
|
|
56
48
|
this.builderB = builderB;
|
|
57
49
|
this.buildClosureFaces = buildClosureFaces;
|
|
58
50
|
}
|
|
59
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Static constructor with default options for the builders.
|
|
53
|
+
* @param keepInside whether to collect clipped facets inside the clipper to `this.builderA` (default true)
|
|
54
|
+
* @param keepOutside whether to collect clipped facets outside the clipper to `this.builderB` (default false)
|
|
55
|
+
* @param buildSideFaces whether to add side facets to active builders (default false)
|
|
56
|
+
*/
|
|
60
57
|
static create(keepInside = true, keepOutside = false, buildSideFaces = false) {
|
|
61
58
|
return new ClippedPolyfaceBuilders(keepInside ? PolyfaceBuilder.create() : undefined, keepOutside ? PolyfaceBuilder.create() : undefined, buildSideFaces);
|
|
62
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Return the computed facets from the selected builder.
|
|
62
|
+
* @param selector the polyface to return: 0 - builderA (typically inside facets), 1 - builderB (typically outside facets)
|
|
63
|
+
* @param fixup whether to clean up the polyface
|
|
64
|
+
* @param tolerance compression tolerance (default [[Geometry.smallMetricDistance]]).
|
|
65
|
+
*/
|
|
63
66
|
claimPolyface(selector, fixup, tolerance = Geometry.smallMetricDistance) {
|
|
64
67
|
const builder = selector === 0 ? this.builderA : this.builderB;
|
|
65
68
|
if (builder) {
|
|
@@ -383,9 +386,9 @@ export class PolyfaceClip {
|
|
|
383
386
|
}
|
|
384
387
|
else {
|
|
385
388
|
if (destination.builderA)
|
|
386
|
-
contour.emitFacets(destination.builderA,
|
|
389
|
+
contour.emitFacets(destination.builderA, false);
|
|
387
390
|
if (destination.builderB)
|
|
388
|
-
contour.emitFacets(destination.builderB,
|
|
391
|
+
contour.emitFacets(destination.builderB, true);
|
|
389
392
|
}
|
|
390
393
|
}
|
|
391
394
|
}
|
|
@@ -399,9 +402,9 @@ export class PolyfaceClip {
|
|
|
399
402
|
}
|
|
400
403
|
else {
|
|
401
404
|
if (destination.builderA)
|
|
402
|
-
contour.emitFacets(destination.builderA,
|
|
405
|
+
contour.emitFacets(destination.builderA, false);
|
|
403
406
|
if (destination.builderB)
|
|
404
|
-
contour.emitFacets(destination.builderB,
|
|
407
|
+
contour.emitFacets(destination.builderB, true);
|
|
405
408
|
}
|
|
406
409
|
}
|
|
407
410
|
}
|
|
@@ -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 RegionOps.consolidateAdjacentPrimitives(outsidePieces); // source of the T-vertices removed in claimPolyface\r\n const options = new StrokeOptions();\r\n options.maximizeConvexFacets = true;\r\n const localFacets = RegionOps.facetRegionXY(outsidePieces, options);\r\n if (localFacets) {\r\n // prefer to add non-convex facets\r\n builder.addIndexedPolyface(localFacets, false, localToWorld);\r\n } else { // failsafe; we don't expect to get here\r\n if (localToWorld)\r\n outsidePieces.tryTransformInPlace(localToWorld);\r\n this.addRegion(builder, outsidePieces); // possibly non-convex!\r\n }\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;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,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;;;GAGG;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;;;;;OAKG;IACI,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;IAED;;;;;OAKG;IACI,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,CAAC;YACZ,IAAI,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;gBACzD,QAAQ,GAAG,aAAa,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;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,CAAC;YACjD,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;QACtD,CAAC;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,CAAC;YACjC,IAAI,CAAC,gDAAgD,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YAC3H,OAAO;QACT,CAAC;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,CAAC;YACjD,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,CAAC;gBAC1D,MAAM,cAAc,GAAG,SAAS,CAAC,kBAAkB,CAAC;gBACpD,IAAI,cAAc,IAAI,YAAY,EAAE,CAAC;oBACnC,iCAAiC;oBACjC,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;wBAC7B,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,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,CAAC;wBACf,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;4BACvB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAChC,2DAA2D;wBAC3D,KAAK,MAAM,cAAc,IAAI,YAAY,EAAE,CAAC;4BAC1C,gBAAgB,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,cAAc,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC/E,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,mHAAmH;wBACnH,SAAS,CAAC,kBAAkB,EAAE,CAAC;wBAC/B,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACnC,CAAC;oBACD,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,QAAQ,EAAE,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,mDAAmD;gBACnD,QAAQ,EAAE,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,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,CAAC;oBAC3D,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;gBAChF,CAAC;qBAAM,CAAC;oBACN,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;gBACnE,CAAC;YACH,CAAC;YACD,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACzB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;YAClC,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC7C,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IACO,MAAM,CAAC,SAAS,CAAC,OAAoC,EAAE,MAA6B;QAC1F,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,IAAI,MAAM,YAAY,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,YAAY,EAAE,CAAC;gBACzG,OAAO,CAAC,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACtE,CAAC;iBAAM,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC;gBACzC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ;oBACjC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;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,CAAC;YAC/C,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,CAAC;gBACvD,SAAS,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC,CAAC,oDAAoD;gBAC5G,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;gBACpC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACpC,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACpE,IAAI,WAAW,EAAE,CAAC;oBAChB,kCAAkC;oBAClC,OAAO,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;gBAC/D,CAAC;qBAAM,CAAC,CAAE,wCAAwC;oBAChD,IAAI,YAAY;wBACd,aAAa,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;oBAClD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,uBAAuB;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACO,MAAM,CAAC,iCAAiC,CAAC,OAAqC,EAAE,OAAoC,EAAE,KAA4B;QACxJ,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO;gBACT,OAAO,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;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,CAAC;YACpD,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACO,MAAM,CAAC,wCAAwC,CAAC,OAA2B;QACjF,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpB,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;YACxB,CAAC;QACH,CAAC;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,CAAC;YACjD,wEAAwE;YACxE,MAAM,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YACrF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,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;YACrC,CAAC;YACD,IAAI,CAAC,iCAAiC,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACpE,IAAI,CAAC,sCAAsC,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7E,CAAC;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,CAAC;YAClC,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,CAAC;gBACjD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;oBACzC,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;gBACrD,CAAC;YACH,CAAC;YACD,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAC/B,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC9B,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;gBACzC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,yBAAyB,CAAC,OAAwB,EAAE,KAA6B,EAAE,WAAoC,EACpI,KAA4B;QAC5B,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;YAClC,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,CAAC;gBACjD,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;YACrD,CAAC;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;QAC1D,CAAC;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,CAAC;gBACjD,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,CAAC;oBACxB,WAAW,CAAC,QAAQ,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;oBAC3D,WAAW,CAAC,QAAQ,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;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,CAAC;YACrB,MAAM,QAAQ,GAAG,UAAU,CAAC,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACxE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,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,CAAC;oBAC1B,IAAI,OAAO,EAAE,CAAC;wBACZ,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;oBAC/D,CAAC;yBAAM,CAAC;wBACN,IAAI,WAAW,CAAC,QAAQ;4BACtB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;wBAClD,IAAI,WAAW,CAAC,QAAQ;4BACtB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,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,CAAC;gBAC1B,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBAC/D,CAAC;qBAAM,CAAC;oBACN,IAAI,WAAW,CAAC,QAAQ;wBACtB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAClD,IAAI,WAAW,CAAC,QAAQ;wBACtB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;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,CAAC;YACjD,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;QACjD,CAAC;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,CAAC;YACjC,IAAI,CAAC,+BAA+B,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,OAAO,YAAY,kBAAkB,EAAE,CAAC;YACjD,IAAI,CAAC,wCAAwC,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,OAAO,YAAY,0BAA0B,EAAE,CAAC;YACzD,IAAI,CAAC,gDAAgD,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACtG,CAAC;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,CAAC;YACV,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,CAAC;gBAC3B,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;YAChC,CAAC;QACH,CAAC;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,CAAC;YACjD,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;QACjF,CAAC;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,CAAC;YACnD,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACvD,CAAC;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,CAAC;YACnD,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,CAAC;oBACtB,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;gBACpD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;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":["/*---------------------------------------------------------------------------------------------\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 * * @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 /**\r\n * Static constructor with default options for the builders.\r\n * @param keepInside whether to collect clipped facets inside the clipper to `this.builderA` (default true)\r\n * @param keepOutside whether to collect clipped facets outside the clipper to `this.builderB` (default false)\r\n * @param buildSideFaces whether to add side facets to active builders (default false)\r\n */\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 /**\r\n * Return the computed facets from the selected builder.\r\n * @param selector the polyface to return: 0 - builderA (typically inside facets), 1 - builderB (typically outside facets)\r\n * @param fixup whether to clean up the polyface\r\n * @param tolerance compression tolerance (default [[Geometry.smallMetricDistance]]).\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 RegionOps.consolidateAdjacentPrimitives(outsidePieces); // source of the T-vertices removed in claimPolyface\r\n const options = new StrokeOptions();\r\n options.maximizeConvexFacets = true;\r\n const localFacets = RegionOps.facetRegionXY(outsidePieces, options);\r\n if (localFacets) {\r\n // prefer to add non-convex facets\r\n builder.addIndexedPolyface(localFacets, false, localToWorld);\r\n } else { // failsafe; we don't expect to get here\r\n if (localToWorld)\r\n outsidePieces.tryTransformInPlace(localToWorld);\r\n this.addRegion(builder, outsidePieces); // possibly non-convex!\r\n }\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, false);\r\n if (destination.builderB)\r\n contour.emitFacets(destination.builderB, true);\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, false);\r\n if (destination.builderB)\r\n contour.emitFacets(destination.builderB, true);\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,6 +1,3 @@
|
|
|
1
|
-
/** @packageDocumentation
|
|
2
|
-
* @module Polyface
|
|
3
|
-
*/
|
|
4
1
|
import { BagOfCurves, CurveCollection } from "../curve/CurveCollection";
|
|
5
2
|
import { LinearCurvePrimitive } from "../curve/CurvePrimitive";
|
|
6
3
|
import { AnyChain } from "../curve/CurveTypes";
|
|
@@ -267,9 +264,9 @@ export declare class PolyfaceQuery {
|
|
|
267
264
|
static isConvexByDihedralAngleCount(source: Polyface, ignoreBoundaries?: boolean): boolean;
|
|
268
265
|
/**
|
|
269
266
|
* Test edges pairing in `source` mesh.
|
|
270
|
-
* * For `allowSimpleBoundaries === false
|
|
271
|
-
* * For `allowSimpleBoundaries === true`
|
|
272
|
-
* still properly matched internally.
|
|
267
|
+
* * For `allowSimpleBoundaries === false`, a return value of `true` means this is a closed 2-manifold surface.
|
|
268
|
+
* * For `allowSimpleBoundaries === true`, a return value of `true` means this is a 2-manifold surface which may have
|
|
269
|
+
* a boundary, but is still properly matched internally.
|
|
273
270
|
* * Any edge with 3 or more adjacent facets triggers `false` return.
|
|
274
271
|
* * Any edge with 2 adjacent facets in the same direction triggers a `false` return.
|
|
275
272
|
*/
|
|
@@ -300,7 +297,7 @@ export declare class PolyfaceQuery {
|
|
|
300
297
|
* Collect boundary edges.
|
|
301
298
|
* * Return the edges as the simplest collection of chains of line segments.
|
|
302
299
|
* @param source polyface or visitor.
|
|
303
|
-
* @param includeTypical true to
|
|
300
|
+
* @param includeTypical true to include typical boundary edges with a single adjacent facet.
|
|
304
301
|
* @param includeMismatch true to include edges with more than 2 adjacent facets.
|
|
305
302
|
* @param includeNull true to include edges with identical start and end vertex indices.
|
|
306
303
|
*/
|
|
@@ -390,19 +387,19 @@ export declare class PolyfaceQuery {
|
|
|
390
387
|
static boundaryOfVisibleSubset(polyface: IndexedPolyface, visibilitySelect: 0 | 1 | 2, vectorToEye: Vector3d, sideAngleTolerance?: Angle): CurveCollection | undefined;
|
|
391
388
|
/**
|
|
392
389
|
* Search for edges with only 1 adjacent facet.
|
|
393
|
-
* *
|
|
394
|
-
* * Emit the
|
|
390
|
+
* * Accumulate them into chains.
|
|
391
|
+
* * Emit the chains to the `announceChain` callback.
|
|
395
392
|
*/
|
|
396
|
-
static announceBoundaryChainsAsLineString3d(mesh: Polyface | PolyfaceVisitor,
|
|
393
|
+
static announceBoundaryChainsAsLineString3d(mesh: Polyface | PolyfaceVisitor, announceChain: (points: LineString3d) => void): void;
|
|
397
394
|
/**
|
|
398
395
|
* Return a mesh with
|
|
399
|
-
* * clusters of adjacent, coplanar facets merged into larger facets.
|
|
400
|
-
* * other facets
|
|
396
|
+
* * clusters of adjacent, coplanar facets merged into larger (possibly non-convex) facets.
|
|
397
|
+
* * other facets are unchanged.
|
|
401
398
|
* @param mesh existing mesh or visitor.
|
|
402
399
|
* @param maxSmoothEdgeAngle maximum dihedral angle across an edge between facets deemed coplanar. If undefined,
|
|
403
400
|
* uses `Geometry.smallAngleRadians`.
|
|
404
401
|
*/
|
|
405
|
-
static cloneWithMaximalPlanarFacets(mesh: Polyface | PolyfaceVisitor, maxSmoothEdgeAngle?: Angle): IndexedPolyface
|
|
402
|
+
static cloneWithMaximalPlanarFacets(mesh: Polyface | PolyfaceVisitor, maxSmoothEdgeAngle?: Angle): IndexedPolyface;
|
|
406
403
|
/**
|
|
407
404
|
* Return a mesh with "some" holes filled in with new facets.
|
|
408
405
|
* * Candidate chains are computed by [[announceBoundaryChainsAsLineString3d]].
|
|
@@ -420,7 +417,7 @@ export declare class PolyfaceQuery {
|
|
|
420
417
|
*/
|
|
421
418
|
static fillSimpleHoles(mesh: Polyface | PolyfaceVisitor, options: HoleFillOptions, unfilledChains?: LineString3d[]): IndexedPolyface | undefined;
|
|
422
419
|
/** Clone the facets in each partition to a separate polyface. */
|
|
423
|
-
static clonePartitions(polyface: Polyface | PolyfaceVisitor, partitions: number[][]):
|
|
420
|
+
static clonePartitions(polyface: Polyface | PolyfaceVisitor, partitions: number[][]): IndexedPolyface[];
|
|
424
421
|
/** Clone facets that pass a filter function. */
|
|
425
422
|
static cloneFiltered(source: Polyface | PolyfaceVisitor, filter: (visitor: PolyfaceVisitor) => boolean): IndexedPolyface;
|
|
426
423
|
/** Clone the facets with in-facet dangling edges removed. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolyfaceQuery.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PolyfaceQuery.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.ts"],"names":[],"mappings":"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"}
|