@itwin/core-geometry 4.1.0-dev.8 → 4.1.0-dev.80
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 +87 -1
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.d.ts +1 -1
- package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js +2 -2
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js +1 -1
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.d.ts +1 -1
- package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js +2 -2
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts +15 -17
- package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js +24 -20
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.d.ts +28 -28
- package/lib/cjs/clipping/BooleanClipFactory.d.ts.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.js +28 -28
- package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.d.ts +11 -11
- package/lib/cjs/clipping/BooleanClipNode.d.ts.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js +11 -11
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.d.ts +73 -76
- package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js +105 -86
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.d.ts +78 -47
- package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js +112 -54
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.d.ts +54 -44
- package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js +33 -29
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.d.ts +39 -25
- package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipVector.js +35 -23
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +61 -38
- package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js +64 -41
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +50 -30
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/core-geometry.d.ts +5 -1
- package/lib/cjs/core-geometry.d.ts.map +1 -1
- package/lib/cjs/core-geometry.js +5 -1
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +4 -3
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +7 -5
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveChain.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +62 -42
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +71 -48
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +36 -26
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +46 -39
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.d.ts +6 -2
- package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurve.js +13 -9
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts +74 -68
- package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurveCloseApproachXY.js +100 -108
- package/lib/cjs/curve/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.d.ts +46 -48
- package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.js +72 -61
- package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts +32 -38
- package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXYZ.js +86 -97
- package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.d.ts +67 -3
- package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
- package/lib/cjs/curve/CurveFactory.js +75 -7
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts +6 -6
- package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +9 -7
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.d.ts +77 -0
- package/lib/cjs/curve/CurveOps.d.ts.map +1 -0
- package/lib/cjs/curve/CurveOps.js +160 -0
- package/lib/cjs/curve/CurveOps.js.map +1 -0
- package/lib/cjs/curve/CurvePrimitive.d.ts +26 -18
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js +4 -3
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.d.ts +2 -2
- package/lib/cjs/curve/GeometryQuery.d.ts.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js +2 -2
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts +7 -5
- package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js +6 -6
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +2 -2
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +3 -3
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.d.ts +7 -5
- package/lib/cjs/curve/Loop.d.ts.map +1 -1
- package/lib/cjs/curve/Loop.js +18 -6
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.d.ts +97 -0
- package/lib/cjs/curve/OffsetOptions.d.ts.map +1 -0
- package/lib/cjs/curve/OffsetOptions.js +166 -0
- package/lib/cjs/curve/OffsetOptions.js.map +1 -0
- package/lib/cjs/curve/ParityRegion.d.ts +7 -7
- package/lib/cjs/curve/ParityRegion.d.ts.map +1 -1
- package/lib/cjs/curve/ParityRegion.js +19 -11
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.d.ts +6 -6
- package/lib/cjs/curve/Path.d.ts.map +1 -1
- package/lib/cjs/curve/Path.js +15 -9
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.d.ts +5 -7
- package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js +7 -7
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +76 -56
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +83 -60
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js +2 -2
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js +6 -2
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.d.ts +6 -5
- package/lib/cjs/curve/UnionRegion.d.ts.map +1 -1
- package/lib/cjs/curve/UnionRegion.js +17 -8
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
- package/lib/cjs/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -0
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts +2 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js +6 -2
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +59 -70
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js +130 -220
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +89 -178
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js +4 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js +2 -2
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.d.ts +9 -0
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +13 -0
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.d.ts +43 -48
- package/lib/cjs/geometry3d/BilinearPatch.d.ts.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js +51 -55
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.d.ts +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js +13 -11
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.d.ts +103 -97
- package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js +247 -124
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.d.ts +18 -0
- package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +32 -5
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.d.ts +41 -32
- package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.js +11 -8
- package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +37 -32
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts +8 -9
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js +9 -10
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +12 -4
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +18 -5
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js +5 -5
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +6 -2
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +31 -22
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.d.ts +16 -1
- package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js +55 -0
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +134 -94
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +297 -145
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.d.ts +69 -0
- package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -0
- package/lib/cjs/geometry3d/Ray2d.js +146 -0
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -0
- package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +10 -3
- package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Transform.js +18 -6
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/cjs/geometry4d/Map4d.js.map +1 -1
- package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
- package/lib/cjs/geometry4d/MomentData.js.map +1 -1
- package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/cjs/geometry4d/Point4d.js.map +1 -1
- package/lib/cjs/numerics/BandedSystem.js.map +1 -1
- package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
- package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
- package/lib/cjs/numerics/Complex.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.d.ts +7 -49
- package/lib/cjs/numerics/ConvexPolygon2d.d.ts.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js +16 -107
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
- package/lib/cjs/numerics/Polynomials.js +0 -2
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js +5 -5
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/Range1dArray.js.map +1 -1
- package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/cjs/numerics/UnionFind.js.map +1 -1
- package/lib/cjs/numerics/UsageSums.js.map +1 -1
- package/lib/cjs/polyface/AuxData.js.map +1 -1
- package/lib/cjs/polyface/BoxTopology.js.map +1 -1
- package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
- package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
- package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +93 -14
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +173 -34
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
- package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +38 -0
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +104 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/cjs/serialization/DeepCompare.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.d.ts +11 -0
- package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js +30 -0
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.d.ts +2 -7
- package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js +2 -7
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.d.ts +2 -1
- package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.d.ts +2 -1
- package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.d.ts +2 -1
- package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.d.ts +2 -2
- package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
- package/lib/cjs/solid/SweepContour.js +9 -0
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js +3 -3
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
- package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.d.ts +1 -1
- package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js +1 -1
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js +1 -1
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.d.ts +1 -1
- package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js +1 -1
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.d.ts +15 -17
- package/lib/esm/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.js +24 -20
- package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.d.ts +28 -28
- package/lib/esm/clipping/BooleanClipFactory.d.ts.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.js +28 -28
- package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.d.ts +11 -11
- package/lib/esm/clipping/BooleanClipNode.d.ts.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.js +11 -11
- package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.d.ts +73 -76
- package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
- package/lib/esm/clipping/ClipPlane.js +105 -86
- package/lib/esm/clipping/ClipPlane.js.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.d.ts +78 -47
- package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.js +112 -54
- package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.d.ts +54 -44
- package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
- package/lib/esm/clipping/ClipUtils.js +33 -29
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ClipVector.d.ts +39 -25
- package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
- package/lib/esm/clipping/ClipVector.js +35 -23
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +61 -38
- package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js +64 -41
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +50 -30
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/esm/core-geometry.d.ts +5 -1
- package/lib/esm/core-geometry.d.ts.map +1 -1
- package/lib/esm/core-geometry.js +5 -1
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +4 -3
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +6 -4
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
- package/lib/esm/curve/CurveChain.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +62 -42
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +70 -47
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +36 -26
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +46 -39
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.d.ts +6 -2
- package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurve.js +13 -9
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts +74 -68
- package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurveCloseApproachXY.js +100 -108
- package/lib/esm/curve/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXY.d.ts +46 -48
- package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXY.js +72 -61
- package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts +32 -38
- package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXYZ.js +86 -97
- package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/esm/curve/CurveExtendMode.js.map +1 -1
- package/lib/esm/curve/CurveFactory.d.ts +67 -3
- package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
- package/lib/esm/curve/CurveFactory.js +74 -6
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts +6 -6
- package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +9 -7
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.d.ts +77 -0
- package/lib/esm/curve/CurveOps.d.ts.map +1 -0
- package/lib/esm/curve/CurveOps.js +156 -0
- package/lib/esm/curve/CurveOps.js.map +1 -0
- package/lib/esm/curve/CurvePrimitive.d.ts +26 -18
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js +4 -3
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/CurveProcessor.js.map +1 -1
- package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.d.ts +2 -2
- package/lib/esm/curve/GeometryQuery.d.ts.map +1 -1
- package/lib/esm/curve/GeometryQuery.js +2 -2
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts +7 -5
- package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/esm/curve/LineSegment3d.js +5 -5
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +2 -2
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +2 -2
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.d.ts +7 -5
- package/lib/esm/curve/Loop.d.ts.map +1 -1
- package/lib/esm/curve/Loop.js +18 -6
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.d.ts +97 -0
- package/lib/esm/curve/OffsetOptions.d.ts.map +1 -0
- package/lib/esm/curve/OffsetOptions.js +161 -0
- package/lib/esm/curve/OffsetOptions.js.map +1 -0
- package/lib/esm/curve/ParityRegion.d.ts +7 -7
- package/lib/esm/curve/ParityRegion.d.ts.map +1 -1
- package/lib/esm/curve/ParityRegion.js +19 -11
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.d.ts +6 -6
- package/lib/esm/curve/Path.d.ts.map +1 -1
- package/lib/esm/curve/Path.js +15 -9
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.d.ts +5 -7
- package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/esm/curve/ProxyCurve.js +7 -7
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/Query/InOutTests.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +76 -56
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +84 -61
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js +2 -2
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
- package/lib/esm/curve/StrokeOptions.js +6 -2
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/UnionRegion.d.ts +6 -5
- package/lib/esm/curve/UnionRegion.d.ts.map +1 -1
- package/lib/esm/curve/UnionRegion.js +17 -8
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
- package/lib/esm/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
- package/lib/esm/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -0
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.d.ts +2 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js +6 -2
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +59 -70
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js +129 -218
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +86 -173
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js +4 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.d.ts +9 -0
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +13 -0
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.d.ts +43 -48
- package/lib/esm/geometry3d/BilinearPatch.d.ts.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.js +51 -55
- package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/esm/geometry3d/Ellipsoid.d.ts +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js +13 -11
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.d.ts +103 -97
- package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js +247 -124
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.d.ts +18 -0
- package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +32 -5
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Plane3d.d.ts +41 -32
- package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3d.js +11 -8
- package/lib/esm/geometry3d/Plane3d.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +37 -32
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.d.ts +8 -9
- package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js +9 -10
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +12 -4
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +18 -5
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js +5 -5
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +6 -2
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +31 -22
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.d.ts +16 -1
- package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js +56 -1
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +134 -94
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +297 -145
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.d.ts +69 -0
- package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -0
- package/lib/esm/geometry3d/Ray2d.js +142 -0
- package/lib/esm/geometry3d/Ray2d.js.map +1 -0
- package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/esm/geometry3d/Segment1d.js.map +1 -1
- package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +10 -3
- package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
- package/lib/esm/geometry3d/Transform.js +18 -6
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/esm/geometry3d/XYZProps.js.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/esm/geometry4d/Map4d.js.map +1 -1
- package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
- package/lib/esm/geometry4d/MomentData.js.map +1 -1
- package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/esm/geometry4d/Point4d.js.map +1 -1
- package/lib/esm/numerics/BandedSystem.js.map +1 -1
- package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
- package/lib/esm/numerics/ClusterableArray.js.map +1 -1
- package/lib/esm/numerics/Complex.js.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.d.ts +7 -49
- package/lib/esm/numerics/ConvexPolygon2d.d.ts.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.js +14 -104
- package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
- package/lib/esm/numerics/PolarData.js.map +1 -1
- package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
- package/lib/esm/numerics/Polynomials.js +0 -2
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js +5 -5
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/numerics/Range1dArray.js.map +1 -1
- package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/esm/numerics/UnionFind.js.map +1 -1
- package/lib/esm/numerics/UsageSums.js.map +1 -1
- package/lib/esm/polyface/AuxData.js.map +1 -1
- package/lib/esm/polyface/BoxTopology.js.map +1 -1
- package/lib/esm/polyface/FacetFaceData.js.map +1 -1
- package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/esm/polyface/FacetOrientation.js.map +1 -1
- package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceData.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +93 -14
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +173 -35
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/RangeLengthData.js.map +1 -1
- package/lib/esm/polyface/TaggedNumericData.js +1 -1
- package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
- package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +38 -0
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +102 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/esm/serialization/DeepCompare.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.d.ts +11 -0
- package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js +30 -0
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.d.ts +2 -7
- package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js +2 -7
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/solid/Box.js.map +1 -1
- package/lib/esm/solid/Cone.js.map +1 -1
- package/lib/esm/solid/LinearSweep.d.ts +2 -1
- package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
- package/lib/esm/solid/LinearSweep.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.d.ts +2 -1
- package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
- package/lib/esm/solid/RotationalSweep.js.map +1 -1
- package/lib/esm/solid/RuledSweep.d.ts +2 -1
- package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/SolidPrimitive.js.map +1 -1
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/SweepContour.d.ts +2 -2
- package/lib/esm/solid/SweepContour.d.ts.map +1 -1
- package/lib/esm/solid/SweepContour.js +9 -0
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/MaskManager.js.map +1 -1
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.js +3 -3
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/SignedDataSummary.js.map +1 -1
- package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
- package/lib/esm/topology/Triangulation.js +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +6 -17
- package/lib/cjs/curve/ChainCollectorContext.d.ts.map +0 -1
- package/lib/cjs/curve/ChainCollectorContext.js.map +0 -1
- package/lib/esm/curve/ChainCollectorContext.d.ts.map +0 -1
- package/lib/esm/curve/ChainCollectorContext.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClusterableArray.js","sourceRoot":"","sources":["../../../src/numerics/ClusterableArray.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 Numerics\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableBlockedArray } from \"../geometry3d/GrowableBlockedArray\";\r\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\n\r\n/**\r\n * Blocked array with operations to sort and cluster with a tolerance.\r\n * * Primary sorting is along an \"arbitrary\" sort vector.\r\n * @internal\r\n */\r\nexport class ClusterableArray extends GrowableBlockedArray {\r\n // (This is pretty strange)\r\n // The sort vector is (1,c, c*c, ...)\r\n // Setting c = 1 makes it 1,1,1 which may be useful for visual scans during debug.\r\n // c with some non-obvious digits makes it unlikely that there will be multiple points on a perpendicular to the sort vector.\r\n private static readonly _vectorFactor = 0.8732; // use 1.0 to rig easy tests.\r\n /** Return a component of the sort vector. */\r\n public static sortVectorComponent(index: number): number {\r\n let c = 1.0;\r\n for (let i = 1; i < index; i++) c *= ClusterableArray._vectorFactor;\r\n return c;\r\n }\r\n private _numCoordinatePerPoint: number;\r\n private _numExtraDataPerPoint: number;\r\n /**\r\n * @param numCoordinatePerPoint number of coordinates per point\r\n * @param numExtraDataPerPoint of extra data values per point.\r\n * @param initialBlockCapacity predicted number of points. (This does not have to be accurate)\r\n */\r\n public constructor(numCoordinatePerPoint: number, numExtraDataPerPoint: number, initialBlockCapacity: number) {\r\n super(1 + numCoordinatePerPoint + numExtraDataPerPoint, initialBlockCapacity);\r\n this._numExtraDataPerPoint = numExtraDataPerPoint;\r\n this._numCoordinatePerPoint = numCoordinatePerPoint;\r\n }\r\n /** load a block, placing data[i] at block[i+1] to allow sort coordinate first.\r\n * @param data array of numDataPerBlock values.\r\n */\r\n public override addBlock(data: number[]) {\r\n const i0 = this.newBlockIndex() + 1;\r\n const n = Math.min(this.numPerBlock - 1, data.length);\r\n for (let i = 0; i < n; i++)\r\n this._data[i0 + i] = data[i];\r\n }\r\n /** add a block directly with 1 to 5 listed content parameters.\r\n * This assumes numDataPerPoint is sufficient for the parameters provided.\r\n */\r\n public addDirect(x0: number, x1?: number, x2?: number, x3?: number, x4?: number) {\r\n const i0 = this.newBlockIndex();\r\n this._data[i0 + 1] = x0;\r\n if (x1 !== undefined) this._data[i0 + 2] = x1;\r\n if (x2 !== undefined) this._data[i0 + 3] = x2;\r\n if (x3 !== undefined) this._data[i0 + 4] = x3;\r\n if (x4 !== undefined) this._data[i0 + 5] = x4;\r\n }\r\n\r\n /** add a block directly from a Point2d with 0 to 3 extras\r\n * This assumes numDataPerPoint is sufficient for the parameters provided.\r\n */\r\n public addPoint2d(xy: Point2d, a?: number, b?: number, c?: number) {\r\n const i0 = this.newBlockIndex();\r\n this._data[i0 + 1] = xy.x;\r\n this._data[i0 + 2] = xy.y;\r\n if (a !== undefined)\r\n this._data[i0 + 3] = a;\r\n if (b !== undefined)\r\n this._data[i0 + 4] = b;\r\n if (c !== undefined)\r\n this._data[i0 + 5] = c;\r\n }\r\n\r\n /** add a block with directly from a Point2d with 0 to 3 extras\r\n * This assumes numDataPerPoint is sufficient for the parameters provided.\r\n */\r\n public addPoint3d(xyz: Point3d, a?: number, b?: number, c?: number) {\r\n const i0 = this.newBlockIndex();\r\n this._data[i0 + 1] = xyz.x;\r\n this._data[i0 + 2] = xyz.y;\r\n this._data[i0 + 3] = xyz.z;\r\n if (a !== undefined)\r\n this._data[i0 + 4] = a;\r\n if (b !== undefined)\r\n this._data[i0 + 5] = b;\r\n if (c !== undefined)\r\n this._data[i0 + 6] = c;\r\n }\r\n /** Get the xy coordinates by point index. */\r\n public getPoint2d(blockIndex: number, result?: Point2d): Point2d {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n return Point2d.create(this._data[i0 + 1], this._data[i0 + 2], result);\r\n }\r\n /** Get the xyZ coordinates by point index. */\r\n public getPoint3d(blockIndex: number, result?: Point3d): Point3d {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n return Point3d.create(this._data[i0 + 1], this._data[i0 + 2], this._data[i0 + 3], result);\r\n }\r\n /** Return a single extra data value */\r\n public getExtraData(blockIndex: number, i: number): number {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n return this._data[i0 + 1 + this._numCoordinatePerPoint + i];\r\n }\r\n /** Return a single data value */\r\n public getData(blockIndex: number, i: number): number {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n return this._data[i0 + i];\r\n }\r\n\r\n /** Set a single extra data value */\r\n public setExtraData(blockIndex: number, i: number, value: number): void {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n this._data[i0 + 1 + this._numCoordinatePerPoint + i] = value;\r\n }\r\n\r\n /** this value is used as cluster terminator in the Uint232Array of indices. */\r\n public static readonly clusterTerminator = 0xFFffFFff;\r\n /** Test if `x` is the cluster terminator value. */\r\n public static isClusterTerminator(x: number): boolean { return x === ClusterableArray.clusterTerminator; }\r\n /** Return an array giving clusters of blocks with similar coordinates.\r\n *\r\n * * The contents of each block is assumed to be set up so the primary sort coordinate is first.\r\n *\r\n * ** simple coordinate blocks (x,y) or (x,y,z) would work fine but have occasional performance problems because points with same x would generate big blocks of\r\n * candidates for clusters.\r\n * ** The usual solution is to sort by u value, which is a dot product along some skew direction, and have the blocks contain (u,x,y) or (u,x,y,z) for 2d versus 3d.\r\n * ** apply setupPrimaryClusterSort to prepare that!!!\r\n * * After a simple lexical sort, consecutive blocks that are within tolerance in the 0 component\r\n * are inspected. Within that candidate set, all blocks that are within tolerance for ALL components are clustered.\r\n * * In the output cluster array, clusters are terminated a invalid index. Test for the invalid index with GrowableBlockArray.isClusterTerminator (x)\r\n */\r\n public clusterIndicesLexical(clusterTolerance: number = Geometry.smallMetricDistance): Uint32Array {\r\n // install primary sort key\r\n this.setupPrimaryClusterSort();\r\n // presort by all coordinates ....\r\n const firstSort = this.sortIndicesLexical();\r\n const clusterIndices = new Uint32Array(2 * firstSort.length); // worst case: no duplicates, each index goes in followed by terminator.\r\n let m = 0; // number of cluster indices\r\n const n = this.numBlocks; // and this must match firstSort.length !!\r\n let clusterStartBlockIndex = 0;\r\n let candidateBlockIndex = 0;\r\n let barrierU = 0.0;\r\n let i = 0;\r\n let j = 0;\r\n\r\n const k0 = 1; // beginning of active column for distance\r\n const k1 = 1 + this._numCoordinatePerPoint;\r\n for (i = 0; i < n; i++) {\r\n clusterStartBlockIndex = firstSort[i];\r\n if (!ClusterableArray.isClusterTerminator(clusterStartBlockIndex)) {\r\n // unused block, so it becomes a cluster...\r\n clusterIndices[m++] = clusterStartBlockIndex;\r\n barrierU = this.component(clusterStartBlockIndex, 0) + clusterTolerance;\r\n firstSort[i] = ClusterableArray.clusterTerminator;\r\n for (j = i + 1; j < n; j++) {\r\n candidateBlockIndex = firstSort[j];\r\n if (candidateBlockIndex === ClusterableArray.clusterTerminator) continue; // nearby in sort direction but already in a cluster.\r\n if (this.component(candidateBlockIndex, 0) >= barrierU) break;\r\n if (this.distanceBetweenSubBlocks(clusterStartBlockIndex, candidateBlockIndex, k0, k1) < clusterTolerance) {\r\n clusterIndices[m++] = candidateBlockIndex; // The candidate is in the block\r\n firstSort[j] = ClusterableArray.clusterTerminator; // and it will not be reused as future block base\r\n }\r\n }\r\n clusterIndices[m++] = ClusterableArray.clusterTerminator;\r\n }\r\n }\r\n // Alas, the clusterIndices array has fluff at the end. So it has to be copied.\r\n return clusterIndices.slice(0, m);\r\n }\r\n /** setup (overwrite!!) the \"0\" component with the dot product of numClusterCoordinate later components with a non-axis aligned vector.\r\n * This is normally called before clusterIndicesLexical.\r\n */\r\n public setupPrimaryClusterSort() {\r\n const nb = this.numBlocks;\r\n const nc = this._numCoordinatePerPoint;\r\n const vector = new Float64Array(nc);\r\n vector[0] = 1.0;\r\n for (let c = 1; c < nc; c++) vector[c] = vector[c - 1] * ClusterableArray._vectorFactor;\r\n let k = 0;\r\n let dot = 0.0;\r\n const data = this._data;\r\n for (let b = 0; b < nb; b++) {\r\n k = this.blockIndexToDoubleIndex(b);\r\n dot = 0.0;\r\n for (let c = 0; c < nc; c++) { dot += vector[c] * data[k + 1 + c]; }\r\n data[k] = dot;\r\n }\r\n }\r\n /** Convert the cluster data to an array of tuples with point i in the form\r\n * `[i, primarySortCoordinate, [x,y,..], [extraData0, extraData1, ...]]`\r\n */\r\n public toJSON(): any[] {\r\n const result: any[] = [];\r\n for (let b = 0; b < this.numBlocks; b++) {\r\n let i = this.blockIndexToDoubleIndex(b);\r\n const chunk: any[] = [b, this._data[i++]];\r\n const coordinates = [];\r\n for (let c = 0; c < this._numCoordinatePerPoint; c++)coordinates.push(this._data[i++]);\r\n chunk.push(coordinates);\r\n for (let c = 0; c < this._numExtraDataPerPoint; c++)\r\n chunk.push(this._data[i++]);\r\n result.push(chunk);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Return an array of indices from block index to cluster index.\r\n * @param clusteredBlocks clusters of block indices followed by separators.\r\n */\r\n public createIndexBlockToClusterIndex(clusteredBlocks: Uint32Array): Uint32Array {\r\n const numBlocks = this.numBlocks;\r\n const blockToCluster = new Uint32Array(numBlocks);\r\n blockToCluster.fill(ClusterableArray.clusterTerminator);\r\n let numCluster = 0;\r\n for (const b of clusteredBlocks) {\r\n if (b >= numBlocks) {\r\n numCluster++;\r\n } else {\r\n blockToCluster[b] = numCluster;\r\n }\r\n }\r\n return blockToCluster;\r\n }\r\n /**\r\n * Return an array of indices from block index to index of its cluster's start in the cluster index array.\r\n * @param clusteredBlocks clusters of block indices followed by separators.\r\n */\r\n public createIndexBlockToClusterStart(clusteredBlocks: Uint32Array): Uint32Array {\r\n const n = clusteredBlocks.length;\r\n const numBlocks = this.numBlocks;\r\n const blockToClusterStart = new Uint32Array(numBlocks);\r\n const terminator = ClusterableArray.clusterTerminator;\r\n blockToClusterStart.fill(terminator);\r\n let clusterStart = 0;\r\n for (let i = 0; i < n; i++) {\r\n const k = clusteredBlocks[i];\r\n if (k > numBlocks) {\r\n clusterStart = i + 1;\r\n } else {\r\n blockToClusterStart[k] = clusterStart;\r\n }\r\n }\r\n return blockToClusterStart;\r\n }\r\n /** count the clusters in the clusteredBlocks array. */\r\n public countClusters(clusteredBlocks: Uint32Array): number {\r\n let numClusters = 0;\r\n const terminator = ClusterableArray.clusterTerminator;\r\n for (const b of clusteredBlocks) {\r\n if (b === terminator)\r\n numClusters++;\r\n }\r\n return numClusters;\r\n }\r\n /** create a reverse index: given a cluster index k, clusterToClusterStart[k] is the place\r\n * the cluster's block indices appear in clusterBlocks\r\n */\r\n public createIndexClusterToClusterStart(clusteredBlocks: Uint32Array): Uint32Array {\r\n let numCluster = this.countClusters(clusteredBlocks);\r\n const clusterToClusterStart = new Uint32Array(numCluster);\r\n const terminator = ClusterableArray.clusterTerminator;\r\n clusterToClusterStart.fill(terminator);\r\n const n = clusteredBlocks.length;\r\n let clusterStart = 0;\r\n for (let i = 0; i < n; i++) {\r\n const k = clusteredBlocks[i];\r\n if (k === terminator) {\r\n clusterStart = i + 1;\r\n } else if (i === clusterStart) {\r\n clusterToClusterStart[numCluster++] = clusterStart;\r\n }\r\n }\r\n return clusterToClusterStart;\r\n }\r\n\r\n /**\r\n * Sort terminator-delimited subsets of an array of indices into the table, using a single data value as sort key.\r\n * @param blockedIndices indices, organized as blocks of good indices terminated by the clusterTerminator. Each block is individually sorted on return.\r\n * @param dataIndex index of the data key, e.g., if the sort key is the first extraData (angle) after x and y coordinate data, pass dataIndex = 2.\r\n */\r\n public sortSubsetsBySingleKey(blockedIndices: Uint32Array, dataIndex: number) {\r\n const dataOffset = 1 + dataIndex;\r\n let kBegin = 0;\r\n let swap;\r\n let key0, key1;\r\n const numK = blockedIndices.length;\r\n for (let kEnd = 0; kEnd < numK; kEnd++) {\r\n if (blockedIndices[kEnd] === ClusterableArray.clusterTerminator) {\r\n // bubble sort blockedIndices[kBegin <= k < kEnd].\r\n // (search for minimum remaining, swap . . )\r\n for (let k0 = kBegin; k0 + 1 < kEnd; k0++) {\r\n key0 = this.getWithinBlock(blockedIndices[k0], dataOffset);\r\n for (let k1 = k0 + 1; k1 < kEnd; k1++) {\r\n key1 = this.getWithinBlock(blockedIndices[k1], dataOffset);\r\n if (key1 < key0) {\r\n swap = blockedIndices[k0];\r\n blockedIndices[k0] = blockedIndices[k1];\r\n blockedIndices[k1] = swap;\r\n key0 = key1;\r\n }\r\n }\r\n }\r\n kBegin = kEnd + 1;\r\n }\r\n }\r\n }\r\n /**\r\n * Returns packed points with indices mapping old to new.\r\n * @param data points to cluster.\r\n */\r\n public static clusterPoint3dArray(data: Point3d[], tolerance: number = Geometry.smallMetricDistance):\r\n PackedPointsWithIndex {\r\n const clusterArray = new ClusterableArray(3, 0, data.length);\r\n data.forEach((p: Point3d) => {\r\n clusterArray.addDirect(p.x, p.y, p.z);\r\n });\r\n const order = clusterArray.clusterIndicesLexical(tolerance);\r\n const result = new PackedPointsWithIndex(data.length);\r\n let currentClusterIndex = 0;\r\n let numThisCluster = 0;\r\n order.forEach((k: number) => {\r\n if (ClusterableArray.isClusterTerminator(k)) {\r\n currentClusterIndex++;\r\n numThisCluster = 0;\r\n } else {\r\n if (numThisCluster === 0)\r\n result.packedPoints.push(data[k].clone());\r\n result.oldToNew[k] = currentClusterIndex;\r\n numThisCluster++;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns number array with indices mapping old to new.\r\n * @param data numbers to cluster.\r\n */\r\n public static clusterNumberArray(data: number[], tolerance: number = Geometry.smallMetricDistance): PackedNumbersWithIndex {\r\n const clusterArray = new ClusterableArray(1, 0, data.length);\r\n data.forEach((x: number) => {clusterArray.addDirect(x);});\r\n const order = clusterArray.clusterIndicesLexical(tolerance);\r\n const result = new PackedNumbersWithIndex(data.length);\r\n let currentClusterIndex = 0;\r\n let numThisCluster = 0;\r\n order.forEach((k: number) => {\r\n if (ClusterableArray.isClusterTerminator(k)) {\r\n currentClusterIndex++;\r\n numThisCluster = 0;\r\n } else {\r\n if (numThisCluster === 0)\r\n result.packedNumbers.push(data[k]);\r\n result.oldToNew[k] = currentClusterIndex;\r\n numThisCluster++;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns packed points with indices mapping old to new.\r\n * @param data points to cluster.\r\n */\r\n public static clusterGrowablePoint2dArray(source: GrowableXYArray, tolerance: number = Geometry.smallMetricDistance): PackedPoint2dsWithIndex {\r\n const clusterArray = new ClusterableArray(2, 0, source.length);\r\n const p = Point2d.create();\r\n const numSourcePoint = source.length;\r\n for (let i = 0; i < numSourcePoint; i++) {\r\n source.getPoint2dAtUncheckedPointIndex(i, p);\r\n clusterArray.addDirect(p.x, p.y);\r\n }\r\n const order = clusterArray.clusterIndicesLexical(tolerance);\r\n const numPackedPoints = clusterArray.countClusters(order);\r\n const result = new PackedPoint2dsWithIndex(source.length, numPackedPoints);\r\n let currentClusterIndex = 0;\r\n let numThisCluster = 0;\r\n order.forEach((k: number) => {\r\n if (ClusterableArray.isClusterTerminator(k)) {\r\n currentClusterIndex++;\r\n numThisCluster = 0;\r\n } else {\r\n if (numThisCluster === 0) // This is the first encounter with a new cluster\r\n result.growablePackedPoints.pushFromGrowableXYArray(source, k);\r\n result.oldToNew[k] = currentClusterIndex;\r\n numThisCluster++;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns packed points with indices mapping old to new.\r\n * @param data points to cluster.\r\n */\r\n public static clusterGrowablePoint3dArray(source: GrowableXYZArray, tolerance: number = Geometry.smallMetricDistance):\r\n PackedPointsWithIndex {\r\n const clusterArray = new ClusterableArray(3, 0, source.length);\r\n const p = Point3d.create();\r\n const numSourcePoint = source.length;\r\n for (let i = 0; i < numSourcePoint; i++) {\r\n source.getPoint3dAtUncheckedPointIndex(i, p);\r\n clusterArray.addDirect(p.x, p.y, p.z);\r\n }\r\n const order = clusterArray.clusterIndicesLexical(tolerance);\r\n const result = new PackedPointsWithIndex(source.length);\r\n const numPackedPoints = clusterArray.countClusters(order);\r\n result.growablePackedPoints = new GrowableXYZArray(numPackedPoints);\r\n let currentClusterIndex = 0;\r\n let numThisCluster = 0;\r\n order.forEach((k: number) => {\r\n if (ClusterableArray.isClusterTerminator(k)) {\r\n currentClusterIndex++;\r\n numThisCluster = 0;\r\n } else {\r\n if (numThisCluster === 0) // This is the first encounter with a new cluster\r\n result.growablePackedPoints!.pushFromGrowableXYZArray(source, k);\r\n result.oldToNew[k] = currentClusterIndex;\r\n numThisCluster++;\r\n }\r\n });\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction updateIndices(indices: number[], oldToNew: Uint32Array): boolean {\r\n let numErrors = 0;\r\n indices.forEach((value: number, i: number, data: number[]) => {\r\n if (value < oldToNew.length) {\r\n data[i] = oldToNew[value];\r\n } else numErrors++;\r\n });\r\n return numErrors === 0;\r\n}\r\n\r\n/**\r\n * Data carrier class for\r\n * * packedPoints = an array of Point3d\r\n * * oldToNew = array of indices from some prior Point3d[] to the packed points.\r\n * @internal\r\n */\r\nclass PackedPointsWithIndex {\r\n /** Array of Point3d */\r\n public packedPoints: Point3d[];\r\n /** array of coordinates packed in GrowableXYZArray */\r\n public growablePackedPoints: GrowableXYZArray | undefined;\r\n /** mapping from old point index to new point index. */\r\n public oldToNew: Uint32Array;\r\n /** integer value for unknown index. */\r\n public static readonly invalidIndex = 0xFFFFffff;\r\n\r\n /** construct a PackedPoints object with\r\n * * empty packedPoints array\r\n * * oldToNew indices all initialized to PackedPoints.invalidIndex\r\n */\r\n constructor(numOldIndexEntry: number) {\r\n this.packedPoints = [];\r\n this.oldToNew = new Uint32Array(numOldIndexEntry);\r\n for (let i = 0; i < numOldIndexEntry; i++) {\r\n this.oldToNew[i] = PackedPointsWithIndex.invalidIndex;\r\n }\r\n }\r\n /**\r\n * Use the oldToNew array to update an array of \"old\" indices.\r\n * @param indices array of indices into prepacked array.\r\n * @returns true if all input indices were valid for the oldToNew array.\r\n */\r\n public updateIndices(indices: number[]): boolean {\r\n return updateIndices(indices, this.oldToNew);\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nclass PackedPoint2dsWithIndex {\r\n /** array of coordinates packed in GrowableXYArray */\r\n public growablePackedPoints: GrowableXYArray;\r\n /** mapping from old point index to new point index. */\r\n public oldToNew: Uint32Array;\r\n /** integer value for unknown index. */\r\n public static readonly invalidIndex = 0xFFFFffff;\r\n\r\n /** construct a PackedPoints object with\r\n * * empty packedPoints array\r\n * * oldToNew indices all initialized to PackedPoints.invalidIndex\r\n */\r\n constructor(numOldIndexEntry: number, numPackedPoints: number) {\r\n this.growablePackedPoints = new GrowableXYArray(numPackedPoints);\r\n this.oldToNew = new Uint32Array(numOldIndexEntry);\r\n for (let i = 0; i < numOldIndexEntry; i++) {\r\n this.oldToNew[i] = PackedPoint2dsWithIndex.invalidIndex;\r\n }\r\n }\r\n /**\r\n * Use the oldToNew array to update an array of \"old\" indices.\r\n * @param indices array of indices into prepacked array.\r\n * @returns true if all input indices were valid for the oldToNew array.\r\n */\r\n public updateIndices(indices: number[]): boolean {\r\n return updateIndices(indices, this.oldToNew);\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\n class PackedNumbersWithIndex {\r\n /** Array of numbers */\r\n public packedNumbers: number[];\r\n /** mapping from old point index to new point index. */\r\n public oldToNew: Uint32Array;\r\n /** integer value for unknown index. */\r\n public static readonly invalidIndex = 0xFFFFffff;\r\n\r\n /** construct a PackedNumbers object with\r\n * * empty packedNumbers array\r\n * * oldToNew indices all initialized to PackedNumbers.invalidIndex\r\n */\r\n constructor(numOldIndexEntry: number) {\r\n this.packedNumbers = [];\r\n this.oldToNew = new Uint32Array(numOldIndexEntry);\r\n for (let i = 0; i < numOldIndexEntry; i++) {\r\n this.oldToNew[i] = PackedPointsWithIndex.invalidIndex;\r\n }\r\n }\r\n /**\r\n * Use the oldToNew array to update an array of \"old\" indices.\r\n * @param indices array of indices into prepacked array.\r\n * @returns true if all input indices were valid for the oldToNew array.\r\n */\r\n public updateIndices(indices: number[]): boolean {\r\n return updateIndices(indices, this.oldToNew);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ClusterableArray.js","sourceRoot":"","sources":["../../../src/numerics/ClusterableArray.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD;;;;GAIG;AACH,MAAa,gBAAiB,SAAQ,oBAAoB;IAMxD,6CAA6C;IACtC,MAAM,CAAC,mBAAmB,CAAC,KAAa;QAC7C,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;YAAE,CAAC,IAAI,gBAAgB,CAAC,aAAa,CAAC;QACpE,OAAO,CAAC,CAAC;IACX,CAAC;IAGD;;;;OAIG;IACH,YAAmB,qBAA6B,EAAE,oBAA4B,EAAE,oBAA4B;QAC1G,KAAK,CAAC,CAAC,GAAG,qBAAqB,GAAG,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;QAC9E,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;IACtD,CAAC;IACD;;OAEG;IACa,QAAQ,CAAC,IAAc;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IACD;;OAEG;IACI,SAAS,CAAC,EAAU,EAAE,EAAW,EAAE,EAAW,EAAE,EAAW,EAAE,EAAW;QAC7E,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACxB,IAAI,EAAE,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,IAAI,EAAE,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,IAAI,EAAE,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,IAAI,EAAE,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,EAAW,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU;QAC/D,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,SAAS;YACjB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,SAAS;YACjB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,SAAS;YACjB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,GAAY,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,SAAS;YACjB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,SAAS;YACjB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,SAAS;YACjB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,6CAA6C;IACtC,UAAU,CAAC,UAAkB,EAAE,MAAgB;QACpD,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IACD,8CAA8C;IACvC,UAAU,CAAC,UAAkB,EAAE,MAAgB;QACpD,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5F,CAAC;IACD,uCAAuC;IAChC,YAAY,CAAC,UAAkB,EAAE,CAAS;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,iCAAiC;IAC1B,OAAO,CAAC,UAAkB,EAAE,CAAS;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,oCAAoC;IAC7B,YAAY,CAAC,UAAkB,EAAE,CAAS,EAAE,KAAa;QAC9D,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAC/D,CAAC;IAID,mDAAmD;IAC5C,MAAM,CAAC,mBAAmB,CAAC,CAAS,IAAa,OAAO,CAAC,KAAK,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1G;;;;;;;;;;;OAWG;IACI,qBAAqB,CAAC,mBAA2B,QAAQ,CAAC,mBAAmB;QAClF,2BAA2B;QAC3B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,kCAAkC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAE,wEAAwE;QACvI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,4BAA4B;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,0CAA0C;QACpE,IAAI,sBAAsB,GAAG,CAAC,CAAC;QAC/B,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,MAAM,EAAE,GAAG,CAAC,CAAC,CAAG,0CAA0C;QAC1D,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC3C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACtB,sBAAsB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,EAAE;gBACjE,2CAA2C;gBAC3C,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC;gBAC7C,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC;gBACxE,SAAS,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;gBAClD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBACnC,IAAI,mBAAmB,KAAK,gBAAgB,CAAC,iBAAiB;wBAAE,SAAS,CAAC,qDAAqD;oBAC/H,IAAI,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,QAAQ;wBAAE,MAAM;oBAC9D,IAAI,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,gBAAgB,EAAE;wBACzG,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAY,gCAAgC;wBACtF,SAAS,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAE,iDAAiD;qBACtG;iBACF;gBACD,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;aAC1D;SACF;QACD,gFAAgF;QAChF,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IACD;;OAEG;IACI,uBAAuB;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC;QACxF,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;YACpC,GAAG,GAAG,GAAG,CAAC;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gBAAE,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aAAE;YACpE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;SACf;IACH,CAAC;IACD;;OAEG;IACI,MAAM;QACX,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,KAAK,GAAU,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC,EAAE;gBAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvF,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,EAAE;gBACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;OAGG;IACI,8BAA8B,CAAC,eAA4B;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;QAClD,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QACxD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;YAC/B,IAAI,CAAC,IAAI,SAAS,EAAE;gBAClB,UAAU,EAAE,CAAC;aACd;iBAAM;gBACL,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;aAChC;SACF;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD;;;OAGG;IACI,8BAA8B,CAAC,eAA4B;QAChE,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,mBAAmB,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;QACtD,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,SAAS,EAAE;gBACjB,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;aACtB;iBAAM;gBACL,mBAAmB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;aACvC;SACF;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,uDAAuD;IAChD,aAAa,CAAC,eAA4B;QAC/C,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,UAAU,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;YAC/B,IAAI,CAAC,KAAK,UAAU;gBAClB,WAAW,EAAE,CAAC;SACjB;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD;;OAEG;IACI,gCAAgC,CAAC,eAA4B;QAClE,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QACrD,MAAM,qBAAqB,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;QACtD,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;QACjC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,UAAU,EAAE;gBACpB,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;aACtB;iBAAM,IAAI,CAAC,KAAK,YAAY,EAAE;gBAC7B,qBAAqB,CAAC,UAAU,EAAE,CAAC,GAAG,YAAY,CAAC;aACpD;SACF;QACD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,sBAAsB,CAAC,cAA2B,EAAE,SAAiB;QAC1E,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC;QACjC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,CAAC;QACT,IAAI,IAAI,EAAE,IAAI,CAAC;QACf,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC;QACnC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;YACtC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC,iBAAiB,EAAE;gBAC/D,kDAAkD;gBAClD,8CAA8C;gBAC9C,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE;oBACzC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;oBAC3D,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE;wBACrC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;wBAC3D,IAAI,IAAI,GAAG,IAAI,EAAE;4BACf,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;4BAC1B,cAAc,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;4BACxC,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;4BAC1B,IAAI,GAAG,IAAI,CAAC;yBACb;qBACF;iBACF;gBACD,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC;aACnB;SACF;IACH,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,mBAAmB,CAAC,IAAe,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QAEjG,MAAM,YAAY,GAAG,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAU,EAAE,EAAE;YAC1B,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;YAC1B,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;gBAC3C,mBAAmB,EAAE,CAAC;gBACtB,cAAc,GAAG,CAAC,CAAC;aACpB;iBAAM;gBACL,IAAI,cAAc,KAAK,CAAC;oBACtB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC;gBACzC,cAAc,EAAE,CAAC;aAClB;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,kBAAkB,CAAC,IAAc,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QAC/F,MAAM,YAAY,GAAG,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE,GAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;YAC1B,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;gBAC3C,mBAAmB,EAAE,CAAC;gBACtB,cAAc,GAAG,CAAC,CAAC;aACpB;iBAAM;gBACL,IAAI,cAAc,KAAK,CAAC;oBACtB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC;gBACzC,cAAc,EAAE,CAAC;aAClB;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,2BAA2B,CAAC,MAAuB,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QACjH,MAAM,YAAY,GAAG,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAClC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC3E,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;YAC1B,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;gBAC3C,mBAAmB,EAAE,CAAC;gBACtB,cAAc,GAAG,CAAC,CAAC;aACpB;iBAAM;gBACL,IAAI,cAAc,KAAK,CAAC,EAAE,iDAAiD;oBACzE,MAAM,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC;gBACzC,cAAc,EAAE,CAAC;aAClB;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,2BAA2B,CAAC,MAAwB,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QAElH,MAAM,YAAY,GAAG,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,eAAe,GAAG,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,oBAAoB,GAAG,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACpE,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;YAC1B,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;gBAC3C,mBAAmB,EAAE,CAAC;gBACtB,cAAc,GAAG,CAAC,CAAC;aACpB;iBAAM;gBACL,IAAI,cAAc,KAAK,CAAC,EAAE,iDAAiD;oBACzE,MAAM,CAAC,oBAAqB,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC;gBACzC,cAAc,EAAE,CAAC;aAClB;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;;AAvZD,4BAA4B;AAC5B,qCAAqC;AACrC,kFAAkF;AAClF,6HAA6H;AACrG,8BAAa,GAAG,MAAM,CAAC,CAAE,6BAA6B;AAiG9E,+EAA+E;AACxD,kCAAiB,GAAG,UAAU,CAAC;SAvG3C,gBAAgB;AA2Z7B;;GAEG;AACH,SAAS,aAAa,CAAC,OAAiB,EAAE,QAAqB;IAC7D,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,CAAS,EAAE,IAAc,EAAE,EAAE;QAC3D,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE;YAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC3B;;YAAM,SAAS,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,qBAAqB;IAUzB;;;OAGG;IACH,YAAY,gBAAwB;QAClC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,YAAY,CAAC;SACvD;IACH,CAAC;IACD;;;;OAIG;IACI,aAAa,CAAC,OAAiB;QACpC,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;;AArBD,uCAAuC;AAChB,kCAAY,GAAG,UAAU,CAAC;AAuBnD;;GAEG;AACH,MAAM,uBAAuB;IAQ3B;;;OAGG;IACH,YAAY,gBAAwB,EAAE,eAAuB;QAC3D,IAAI,CAAC,oBAAoB,GAAG,IAAI,eAAe,CAAC,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,YAAY,CAAC;SACzD;IACH,CAAC;IACD;;;;OAIG;IACI,aAAa,CAAC,OAAiB;QACpC,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;;AArBD,uCAAuC;AAChB,oCAAY,GAAG,UAAU,CAAC;AAuBnD;;GAEG;AACF,MAAM,sBAAsB;IAQ3B;;;OAGG;IACH,YAAY,gBAAwB;QAClC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,YAAY,CAAC;SACvD;IACH,CAAC;IACD;;;;OAIG;IACI,aAAa,CAAC,OAAiB;QACpC,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;;AArBD,uCAAuC;AAChB,mCAAY,GAAG,UAAU,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Numerics\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableBlockedArray } from \"../geometry3d/GrowableBlockedArray\";\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\n\n/**\n * Blocked array with operations to sort and cluster with a tolerance.\n * * Primary sorting is along an \"arbitrary\" sort vector.\n * @internal\n */\nexport class ClusterableArray extends GrowableBlockedArray {\n // (This is pretty strange)\n // The sort vector is (1,c, c*c, ...)\n // Setting c = 1 makes it 1,1,1 which may be useful for visual scans during debug.\n // c with some non-obvious digits makes it unlikely that there will be multiple points on a perpendicular to the sort vector.\n private static readonly _vectorFactor = 0.8732; // use 1.0 to rig easy tests.\n /** Return a component of the sort vector. */\n public static sortVectorComponent(index: number): number {\n let c = 1.0;\n for (let i = 1; i < index; i++) c *= ClusterableArray._vectorFactor;\n return c;\n }\n private _numCoordinatePerPoint: number;\n private _numExtraDataPerPoint: number;\n /**\n * @param numCoordinatePerPoint number of coordinates per point\n * @param numExtraDataPerPoint of extra data values per point.\n * @param initialBlockCapacity predicted number of points. (This does not have to be accurate)\n */\n public constructor(numCoordinatePerPoint: number, numExtraDataPerPoint: number, initialBlockCapacity: number) {\n super(1 + numCoordinatePerPoint + numExtraDataPerPoint, initialBlockCapacity);\n this._numExtraDataPerPoint = numExtraDataPerPoint;\n this._numCoordinatePerPoint = numCoordinatePerPoint;\n }\n /** load a block, placing data[i] at block[i+1] to allow sort coordinate first.\n * @param data array of numDataPerBlock values.\n */\n public override addBlock(data: number[]) {\n const i0 = this.newBlockIndex() + 1;\n const n = Math.min(this.numPerBlock - 1, data.length);\n for (let i = 0; i < n; i++)\n this._data[i0 + i] = data[i];\n }\n /** add a block directly with 1 to 5 listed content parameters.\n * This assumes numDataPerPoint is sufficient for the parameters provided.\n */\n public addDirect(x0: number, x1?: number, x2?: number, x3?: number, x4?: number) {\n const i0 = this.newBlockIndex();\n this._data[i0 + 1] = x0;\n if (x1 !== undefined) this._data[i0 + 2] = x1;\n if (x2 !== undefined) this._data[i0 + 3] = x2;\n if (x3 !== undefined) this._data[i0 + 4] = x3;\n if (x4 !== undefined) this._data[i0 + 5] = x4;\n }\n\n /** add a block directly from a Point2d with 0 to 3 extras\n * This assumes numDataPerPoint is sufficient for the parameters provided.\n */\n public addPoint2d(xy: Point2d, a?: number, b?: number, c?: number) {\n const i0 = this.newBlockIndex();\n this._data[i0 + 1] = xy.x;\n this._data[i0 + 2] = xy.y;\n if (a !== undefined)\n this._data[i0 + 3] = a;\n if (b !== undefined)\n this._data[i0 + 4] = b;\n if (c !== undefined)\n this._data[i0 + 5] = c;\n }\n\n /** add a block with directly from a Point2d with 0 to 3 extras\n * This assumes numDataPerPoint is sufficient for the parameters provided.\n */\n public addPoint3d(xyz: Point3d, a?: number, b?: number, c?: number) {\n const i0 = this.newBlockIndex();\n this._data[i0 + 1] = xyz.x;\n this._data[i0 + 2] = xyz.y;\n this._data[i0 + 3] = xyz.z;\n if (a !== undefined)\n this._data[i0 + 4] = a;\n if (b !== undefined)\n this._data[i0 + 5] = b;\n if (c !== undefined)\n this._data[i0 + 6] = c;\n }\n /** Get the xy coordinates by point index. */\n public getPoint2d(blockIndex: number, result?: Point2d): Point2d {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n return Point2d.create(this._data[i0 + 1], this._data[i0 + 2], result);\n }\n /** Get the xyZ coordinates by point index. */\n public getPoint3d(blockIndex: number, result?: Point3d): Point3d {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n return Point3d.create(this._data[i0 + 1], this._data[i0 + 2], this._data[i0 + 3], result);\n }\n /** Return a single extra data value */\n public getExtraData(blockIndex: number, i: number): number {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n return this._data[i0 + 1 + this._numCoordinatePerPoint + i];\n }\n /** Return a single data value */\n public getData(blockIndex: number, i: number): number {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n return this._data[i0 + i];\n }\n\n /** Set a single extra data value */\n public setExtraData(blockIndex: number, i: number, value: number): void {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n this._data[i0 + 1 + this._numCoordinatePerPoint + i] = value;\n }\n\n /** this value is used as cluster terminator in the Uint232Array of indices. */\n public static readonly clusterTerminator = 0xFFffFFff;\n /** Test if `x` is the cluster terminator value. */\n public static isClusterTerminator(x: number): boolean { return x === ClusterableArray.clusterTerminator; }\n /** Return an array giving clusters of blocks with similar coordinates.\n *\n * * The contents of each block is assumed to be set up so the primary sort coordinate is first.\n *\n * ** simple coordinate blocks (x,y) or (x,y,z) would work fine but have occasional performance problems because points with same x would generate big blocks of\n * candidates for clusters.\n * ** The usual solution is to sort by u value, which is a dot product along some skew direction, and have the blocks contain (u,x,y) or (u,x,y,z) for 2d versus 3d.\n * ** apply setupPrimaryClusterSort to prepare that!!!\n * * After a simple lexical sort, consecutive blocks that are within tolerance in the 0 component\n * are inspected. Within that candidate set, all blocks that are within tolerance for ALL components are clustered.\n * * In the output cluster array, clusters are terminated a invalid index. Test for the invalid index with GrowableBlockArray.isClusterTerminator (x)\n */\n public clusterIndicesLexical(clusterTolerance: number = Geometry.smallMetricDistance): Uint32Array {\n // install primary sort key\n this.setupPrimaryClusterSort();\n // presort by all coordinates ....\n const firstSort = this.sortIndicesLexical();\n const clusterIndices = new Uint32Array(2 * firstSort.length); // worst case: no duplicates, each index goes in followed by terminator.\n let m = 0; // number of cluster indices\n const n = this.numBlocks; // and this must match firstSort.length !!\n let clusterStartBlockIndex = 0;\n let candidateBlockIndex = 0;\n let barrierU = 0.0;\n let i = 0;\n let j = 0;\n\n const k0 = 1; // beginning of active column for distance\n const k1 = 1 + this._numCoordinatePerPoint;\n for (i = 0; i < n; i++) {\n clusterStartBlockIndex = firstSort[i];\n if (!ClusterableArray.isClusterTerminator(clusterStartBlockIndex)) {\n // unused block, so it becomes a cluster...\n clusterIndices[m++] = clusterStartBlockIndex;\n barrierU = this.component(clusterStartBlockIndex, 0) + clusterTolerance;\n firstSort[i] = ClusterableArray.clusterTerminator;\n for (j = i + 1; j < n; j++) {\n candidateBlockIndex = firstSort[j];\n if (candidateBlockIndex === ClusterableArray.clusterTerminator) continue; // nearby in sort direction but already in a cluster.\n if (this.component(candidateBlockIndex, 0) >= barrierU) break;\n if (this.distanceBetweenSubBlocks(clusterStartBlockIndex, candidateBlockIndex, k0, k1) < clusterTolerance) {\n clusterIndices[m++] = candidateBlockIndex; // The candidate is in the block\n firstSort[j] = ClusterableArray.clusterTerminator; // and it will not be reused as future block base\n }\n }\n clusterIndices[m++] = ClusterableArray.clusterTerminator;\n }\n }\n // Alas, the clusterIndices array has fluff at the end. So it has to be copied.\n return clusterIndices.slice(0, m);\n }\n /** setup (overwrite!!) the \"0\" component with the dot product of numClusterCoordinate later components with a non-axis aligned vector.\n * This is normally called before clusterIndicesLexical.\n */\n public setupPrimaryClusterSort() {\n const nb = this.numBlocks;\n const nc = this._numCoordinatePerPoint;\n const vector = new Float64Array(nc);\n vector[0] = 1.0;\n for (let c = 1; c < nc; c++) vector[c] = vector[c - 1] * ClusterableArray._vectorFactor;\n let k = 0;\n let dot = 0.0;\n const data = this._data;\n for (let b = 0; b < nb; b++) {\n k = this.blockIndexToDoubleIndex(b);\n dot = 0.0;\n for (let c = 0; c < nc; c++) { dot += vector[c] * data[k + 1 + c]; }\n data[k] = dot;\n }\n }\n /** Convert the cluster data to an array of tuples with point i in the form\n * `[i, primarySortCoordinate, [x,y,..], [extraData0, extraData1, ...]]`\n */\n public toJSON(): any[] {\n const result: any[] = [];\n for (let b = 0; b < this.numBlocks; b++) {\n let i = this.blockIndexToDoubleIndex(b);\n const chunk: any[] = [b, this._data[i++]];\n const coordinates = [];\n for (let c = 0; c < this._numCoordinatePerPoint; c++)coordinates.push(this._data[i++]);\n chunk.push(coordinates);\n for (let c = 0; c < this._numExtraDataPerPoint; c++)\n chunk.push(this._data[i++]);\n result.push(chunk);\n }\n return result;\n }\n /**\n * Return an array of indices from block index to cluster index.\n * @param clusteredBlocks clusters of block indices followed by separators.\n */\n public createIndexBlockToClusterIndex(clusteredBlocks: Uint32Array): Uint32Array {\n const numBlocks = this.numBlocks;\n const blockToCluster = new Uint32Array(numBlocks);\n blockToCluster.fill(ClusterableArray.clusterTerminator);\n let numCluster = 0;\n for (const b of clusteredBlocks) {\n if (b >= numBlocks) {\n numCluster++;\n } else {\n blockToCluster[b] = numCluster;\n }\n }\n return blockToCluster;\n }\n /**\n * Return an array of indices from block index to index of its cluster's start in the cluster index array.\n * @param clusteredBlocks clusters of block indices followed by separators.\n */\n public createIndexBlockToClusterStart(clusteredBlocks: Uint32Array): Uint32Array {\n const n = clusteredBlocks.length;\n const numBlocks = this.numBlocks;\n const blockToClusterStart = new Uint32Array(numBlocks);\n const terminator = ClusterableArray.clusterTerminator;\n blockToClusterStart.fill(terminator);\n let clusterStart = 0;\n for (let i = 0; i < n; i++) {\n const k = clusteredBlocks[i];\n if (k > numBlocks) {\n clusterStart = i + 1;\n } else {\n blockToClusterStart[k] = clusterStart;\n }\n }\n return blockToClusterStart;\n }\n /** count the clusters in the clusteredBlocks array. */\n public countClusters(clusteredBlocks: Uint32Array): number {\n let numClusters = 0;\n const terminator = ClusterableArray.clusterTerminator;\n for (const b of clusteredBlocks) {\n if (b === terminator)\n numClusters++;\n }\n return numClusters;\n }\n /** create a reverse index: given a cluster index k, clusterToClusterStart[k] is the place\n * the cluster's block indices appear in clusterBlocks\n */\n public createIndexClusterToClusterStart(clusteredBlocks: Uint32Array): Uint32Array {\n let numCluster = this.countClusters(clusteredBlocks);\n const clusterToClusterStart = new Uint32Array(numCluster);\n const terminator = ClusterableArray.clusterTerminator;\n clusterToClusterStart.fill(terminator);\n const n = clusteredBlocks.length;\n let clusterStart = 0;\n for (let i = 0; i < n; i++) {\n const k = clusteredBlocks[i];\n if (k === terminator) {\n clusterStart = i + 1;\n } else if (i === clusterStart) {\n clusterToClusterStart[numCluster++] = clusterStart;\n }\n }\n return clusterToClusterStart;\n }\n\n /**\n * Sort terminator-delimited subsets of an array of indices into the table, using a single data value as sort key.\n * @param blockedIndices indices, organized as blocks of good indices terminated by the clusterTerminator. Each block is individually sorted on return.\n * @param dataIndex index of the data key, e.g., if the sort key is the first extraData (angle) after x and y coordinate data, pass dataIndex = 2.\n */\n public sortSubsetsBySingleKey(blockedIndices: Uint32Array, dataIndex: number) {\n const dataOffset = 1 + dataIndex;\n let kBegin = 0;\n let swap;\n let key0, key1;\n const numK = blockedIndices.length;\n for (let kEnd = 0; kEnd < numK; kEnd++) {\n if (blockedIndices[kEnd] === ClusterableArray.clusterTerminator) {\n // bubble sort blockedIndices[kBegin <= k < kEnd].\n // (search for minimum remaining, swap . . )\n for (let k0 = kBegin; k0 + 1 < kEnd; k0++) {\n key0 = this.getWithinBlock(blockedIndices[k0], dataOffset);\n for (let k1 = k0 + 1; k1 < kEnd; k1++) {\n key1 = this.getWithinBlock(blockedIndices[k1], dataOffset);\n if (key1 < key0) {\n swap = blockedIndices[k0];\n blockedIndices[k0] = blockedIndices[k1];\n blockedIndices[k1] = swap;\n key0 = key1;\n }\n }\n }\n kBegin = kEnd + 1;\n }\n }\n }\n /**\n * Returns packed points with indices mapping old to new.\n * @param data points to cluster.\n */\n public static clusterPoint3dArray(data: Point3d[], tolerance: number = Geometry.smallMetricDistance):\n PackedPointsWithIndex {\n const clusterArray = new ClusterableArray(3, 0, data.length);\n data.forEach((p: Point3d) => {\n clusterArray.addDirect(p.x, p.y, p.z);\n });\n const order = clusterArray.clusterIndicesLexical(tolerance);\n const result = new PackedPointsWithIndex(data.length);\n let currentClusterIndex = 0;\n let numThisCluster = 0;\n order.forEach((k: number) => {\n if (ClusterableArray.isClusterTerminator(k)) {\n currentClusterIndex++;\n numThisCluster = 0;\n } else {\n if (numThisCluster === 0)\n result.packedPoints.push(data[k].clone());\n result.oldToNew[k] = currentClusterIndex;\n numThisCluster++;\n }\n });\n return result;\n }\n\n /**\n * Returns number array with indices mapping old to new.\n * @param data numbers to cluster.\n */\n public static clusterNumberArray(data: number[], tolerance: number = Geometry.smallMetricDistance): PackedNumbersWithIndex {\n const clusterArray = new ClusterableArray(1, 0, data.length);\n data.forEach((x: number) => {clusterArray.addDirect(x);});\n const order = clusterArray.clusterIndicesLexical(tolerance);\n const result = new PackedNumbersWithIndex(data.length);\n let currentClusterIndex = 0;\n let numThisCluster = 0;\n order.forEach((k: number) => {\n if (ClusterableArray.isClusterTerminator(k)) {\n currentClusterIndex++;\n numThisCluster = 0;\n } else {\n if (numThisCluster === 0)\n result.packedNumbers.push(data[k]);\n result.oldToNew[k] = currentClusterIndex;\n numThisCluster++;\n }\n });\n return result;\n }\n\n /**\n * Returns packed points with indices mapping old to new.\n * @param data points to cluster.\n */\n public static clusterGrowablePoint2dArray(source: GrowableXYArray, tolerance: number = Geometry.smallMetricDistance): PackedPoint2dsWithIndex {\n const clusterArray = new ClusterableArray(2, 0, source.length);\n const p = Point2d.create();\n const numSourcePoint = source.length;\n for (let i = 0; i < numSourcePoint; i++) {\n source.getPoint2dAtUncheckedPointIndex(i, p);\n clusterArray.addDirect(p.x, p.y);\n }\n const order = clusterArray.clusterIndicesLexical(tolerance);\n const numPackedPoints = clusterArray.countClusters(order);\n const result = new PackedPoint2dsWithIndex(source.length, numPackedPoints);\n let currentClusterIndex = 0;\n let numThisCluster = 0;\n order.forEach((k: number) => {\n if (ClusterableArray.isClusterTerminator(k)) {\n currentClusterIndex++;\n numThisCluster = 0;\n } else {\n if (numThisCluster === 0) // This is the first encounter with a new cluster\n result.growablePackedPoints.pushFromGrowableXYArray(source, k);\n result.oldToNew[k] = currentClusterIndex;\n numThisCluster++;\n }\n });\n return result;\n }\n\n /**\n * Returns packed points with indices mapping old to new.\n * @param data points to cluster.\n */\n public static clusterGrowablePoint3dArray(source: GrowableXYZArray, tolerance: number = Geometry.smallMetricDistance):\n PackedPointsWithIndex {\n const clusterArray = new ClusterableArray(3, 0, source.length);\n const p = Point3d.create();\n const numSourcePoint = source.length;\n for (let i = 0; i < numSourcePoint; i++) {\n source.getPoint3dAtUncheckedPointIndex(i, p);\n clusterArray.addDirect(p.x, p.y, p.z);\n }\n const order = clusterArray.clusterIndicesLexical(tolerance);\n const result = new PackedPointsWithIndex(source.length);\n const numPackedPoints = clusterArray.countClusters(order);\n result.growablePackedPoints = new GrowableXYZArray(numPackedPoints);\n let currentClusterIndex = 0;\n let numThisCluster = 0;\n order.forEach((k: number) => {\n if (ClusterableArray.isClusterTerminator(k)) {\n currentClusterIndex++;\n numThisCluster = 0;\n } else {\n if (numThisCluster === 0) // This is the first encounter with a new cluster\n result.growablePackedPoints!.pushFromGrowableXYZArray(source, k);\n result.oldToNew[k] = currentClusterIndex;\n numThisCluster++;\n }\n });\n return result;\n }\n}\n\n/**\n * @internal\n */\nfunction updateIndices(indices: number[], oldToNew: Uint32Array): boolean {\n let numErrors = 0;\n indices.forEach((value: number, i: number, data: number[]) => {\n if (value < oldToNew.length) {\n data[i] = oldToNew[value];\n } else numErrors++;\n });\n return numErrors === 0;\n}\n\n/**\n * Data carrier class for\n * * packedPoints = an array of Point3d\n * * oldToNew = array of indices from some prior Point3d[] to the packed points.\n * @internal\n */\nclass PackedPointsWithIndex {\n /** Array of Point3d */\n public packedPoints: Point3d[];\n /** array of coordinates packed in GrowableXYZArray */\n public growablePackedPoints: GrowableXYZArray | undefined;\n /** mapping from old point index to new point index. */\n public oldToNew: Uint32Array;\n /** integer value for unknown index. */\n public static readonly invalidIndex = 0xFFFFffff;\n\n /** construct a PackedPoints object with\n * * empty packedPoints array\n * * oldToNew indices all initialized to PackedPoints.invalidIndex\n */\n constructor(numOldIndexEntry: number) {\n this.packedPoints = [];\n this.oldToNew = new Uint32Array(numOldIndexEntry);\n for (let i = 0; i < numOldIndexEntry; i++) {\n this.oldToNew[i] = PackedPointsWithIndex.invalidIndex;\n }\n }\n /**\n * Use the oldToNew array to update an array of \"old\" indices.\n * @param indices array of indices into prepacked array.\n * @returns true if all input indices were valid for the oldToNew array.\n */\n public updateIndices(indices: number[]): boolean {\n return updateIndices(indices, this.oldToNew);\n }\n}\n\n/**\n * @internal\n */\nclass PackedPoint2dsWithIndex {\n /** array of coordinates packed in GrowableXYArray */\n public growablePackedPoints: GrowableXYArray;\n /** mapping from old point index to new point index. */\n public oldToNew: Uint32Array;\n /** integer value for unknown index. */\n public static readonly invalidIndex = 0xFFFFffff;\n\n /** construct a PackedPoints object with\n * * empty packedPoints array\n * * oldToNew indices all initialized to PackedPoints.invalidIndex\n */\n constructor(numOldIndexEntry: number, numPackedPoints: number) {\n this.growablePackedPoints = new GrowableXYArray(numPackedPoints);\n this.oldToNew = new Uint32Array(numOldIndexEntry);\n for (let i = 0; i < numOldIndexEntry; i++) {\n this.oldToNew[i] = PackedPoint2dsWithIndex.invalidIndex;\n }\n }\n /**\n * Use the oldToNew array to update an array of \"old\" indices.\n * @param indices array of indices into prepacked array.\n * @returns true if all input indices were valid for the oldToNew array.\n */\n public updateIndices(indices: number[]): boolean {\n return updateIndices(indices, this.oldToNew);\n }\n}\n\n/**\n * @internal\n */\n class PackedNumbersWithIndex {\n /** Array of numbers */\n public packedNumbers: number[];\n /** mapping from old point index to new point index. */\n public oldToNew: Uint32Array;\n /** integer value for unknown index. */\n public static readonly invalidIndex = 0xFFFFffff;\n\n /** construct a PackedNumbers object with\n * * empty packedNumbers array\n * * oldToNew indices all initialized to PackedNumbers.invalidIndex\n */\n constructor(numOldIndexEntry: number) {\n this.packedNumbers = [];\n this.oldToNew = new Uint32Array(numOldIndexEntry);\n for (let i = 0; i < numOldIndexEntry; i++) {\n this.oldToNew[i] = PackedPointsWithIndex.invalidIndex;\n }\n }\n /**\n * Use the oldToNew array to update an array of \"old\" indices.\n * @param indices array of indices into prepacked array.\n * @returns true if all input indices were valid for the oldToNew array.\n */\n public updateIndices(indices: number[]): boolean {\n return updateIndices(indices, this.oldToNew);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Complex.js","sourceRoot":"","sources":["../../../src/numerics/Complex.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\nimport { BeJSONFunctions, Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\n\r\n/**\r\n * OPerations on a \"complex number\" class with real part `x` and complex part `y`\r\n * @internal\r\n */\r\nexport class Complex implements BeJSONFunctions {\r\n private _x: number;\r\n /** Real part */\r\n public get x(): number { return this._x; }\r\n public set x(value: number) { this._x = value; }\r\n\r\n private _y: number;\r\n /** Imaginary part */\r\n public get y(): number { return this._y; }\r\n public set y(value: number) { this._y = value; }\r\n\r\n public constructor(x: number = 0, y: number = 0) { this._x = x; this._y = y; }\r\n /** set x and y parts from args. */\r\n public set(x: number = 0, y: number = 0): void { this.x = x; this.y = y; }\r\n /** set `this.x` and `this.y` from `other.x` and `other.y` */\r\n public setFrom(other: Complex) { this.x = other.x; this.y = other.y; }\r\n /** clone the complex x,y */\r\n public clone(): Complex { return new Complex(this.x, this.y); }\r\n /** test for near equality using coordinate tolerances */\r\n public isAlmostEqual(other: Complex): boolean { return Geometry.isAlmostEqualNumber(this.x, other.x) && Geometry.isAlmostEqualNumber(this.x, other.x); }\r\n /** Create a new Complex instance from given x and y. */\r\n public static create(x: number = 0, y: number = 0, result?: Complex): Complex {\r\n if (result) {\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n }\r\n return new Complex(x, y);\r\n }\r\n /** Return the complex sum `this+other` */\r\n public plus(other: Complex, result?: Complex): Complex { return Complex.create(this.x + other.x, this.y + other.y, result); }\r\n /** Return the complex difference `this-other` */\r\n public minus(other: Complex, result?: Complex): Complex { return Complex.create(this.x - other.x, this.y - other.y, result); }\r\n /** Return the complex product `this * other` */\r\n public times(other: Complex, result?: Complex): Complex {\r\n return Complex.create(\r\n this.x * other.x - this.y * other.y,\r\n this.x * other.y + this.y * other.x,\r\n result);\r\n }\r\n /** Return the complex product `this * x+i*y`. That is, the second Complex value exists via the args without being formally created as an instance. */\r\n public timesXY(x: number, y: number, result?: Complex): Complex {\r\n return Complex.create(\r\n this.x * x - this.y * y,\r\n this.x * y + this.y * x,\r\n result);\r\n }\r\n /** Return the mangitude of the complex number */\r\n public magnitude(): number { return Geometry.hypotenuseXY(this.x, this.y); }\r\n /** Return the angle from x axis to the vector (x,y) */\r\n public angle(): Angle { return Angle.createAtan2(this.y, this.x); }\r\n /** Return the xy plane distance between this and other */\r\n public distance(other: Complex) {\r\n return Geometry.hypotenuseXY(this.x - other.x, this.y - other.y);\r\n }\r\n /** Return the squared xy plane distance between this and other. */\r\n public magnitudeSquared(): number { return this.x * this.x + this.y * this.y; }\r\n /** Return the complex division `this / other` */\r\n public divide(other: Complex, result?: Complex): Complex | undefined {\r\n const bb = other.magnitudeSquared();\r\n if (bb === 0.0)\r\n return undefined;\r\n const divbb = 1.0 / bb;\r\n return Complex.create(\r\n (this.x * other.x + this.y * other.y) * divbb,\r\n (this.y * other.x - this.x * other.y) * divbb,\r\n result);\r\n }\r\n /** Return the complex square root of this. */\r\n public sqrt(result?: Complex): Complex {\r\n if ((this.x === 0.0) && (this.y === 0.0))\r\n return Complex.create(0, 0, result);\r\n\r\n const x = Math.abs(this.x);\r\n const y = Math.abs(this.y);\r\n let r = 0;\r\n let w = 0;\r\n if (x >= y) {\r\n r = y / x;\r\n w = Math.sqrt(x) * Math.sqrt(0.5 * (1.0 + Math.sqrt(1.0 + r * r)));\r\n } else {\r\n r = x / y;\r\n w = Math.sqrt(y) * Math.sqrt(0.5 * (r + Math.sqrt(1.0 + r * r)));\r\n }\r\n\r\n if (this.x >= 0.0) {\r\n return Complex.create(w, this.y / (2.0 * w), result);\r\n } else {\r\n const y1 = (this.y >= 0) ? w : -w;\r\n return Complex.create(this.y / (2.0 * y1), y1, result);\r\n }\r\n }\r\n /** set the complex x,y from a json object of the form like\r\n * * x,y key value pairs: `{x:1,y:2}`\r\n * * array of numbers: `[1,2]`\r\n */\r\n public setFromJSON(json?: any): void {\r\n if (Array.isArray(json) && json.length > 1) {\r\n this.set(json[0], json[1]);\r\n } else if (json && json.x && json.y) {\r\n this.set(json.x, json.y);\r\n } else {\r\n this.set(0, 0);\r\n }\r\n }\r\n /** Create a `Complex` instance from a json object. */\r\n public static fromJSON(json?: any): Complex { const result = new Complex(); result.setFromJSON(json); return result; }\r\n\r\n /**\r\n * Convert an Complex to a JSON object.\r\n * @return {*} [x,y]\r\n */\r\n public toJSON(): any { return [this.x, this.y]; }\r\n\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Complex.js","sourceRoot":"","sources":["../../../src/numerics/Complex.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Numerics\n */\nimport { BeJSONFunctions, Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\n\n/**\n * OPerations on a \"complex number\" class with real part `x` and complex part `y`\n * @internal\n */\nexport class Complex implements BeJSONFunctions {\n private _x: number;\n /** Real part */\n public get x(): number { return this._x; }\n public set x(value: number) { this._x = value; }\n\n private _y: number;\n /** Imaginary part */\n public get y(): number { return this._y; }\n public set y(value: number) { this._y = value; }\n\n public constructor(x: number = 0, y: number = 0) { this._x = x; this._y = y; }\n /** set x and y parts from args. */\n public set(x: number = 0, y: number = 0): void { this.x = x; this.y = y; }\n /** set `this.x` and `this.y` from `other.x` and `other.y` */\n public setFrom(other: Complex) { this.x = other.x; this.y = other.y; }\n /** clone the complex x,y */\n public clone(): Complex { return new Complex(this.x, this.y); }\n /** test for near equality using coordinate tolerances */\n public isAlmostEqual(other: Complex): boolean { return Geometry.isAlmostEqualNumber(this.x, other.x) && Geometry.isAlmostEqualNumber(this.x, other.x); }\n /** Create a new Complex instance from given x and y. */\n public static create(x: number = 0, y: number = 0, result?: Complex): Complex {\n if (result) {\n result.x = x;\n result.y = y;\n return result;\n }\n return new Complex(x, y);\n }\n /** Return the complex sum `this+other` */\n public plus(other: Complex, result?: Complex): Complex { return Complex.create(this.x + other.x, this.y + other.y, result); }\n /** Return the complex difference `this-other` */\n public minus(other: Complex, result?: Complex): Complex { return Complex.create(this.x - other.x, this.y - other.y, result); }\n /** Return the complex product `this * other` */\n public times(other: Complex, result?: Complex): Complex {\n return Complex.create(\n this.x * other.x - this.y * other.y,\n this.x * other.y + this.y * other.x,\n result);\n }\n /** Return the complex product `this * x+i*y`. That is, the second Complex value exists via the args without being formally created as an instance. */\n public timesXY(x: number, y: number, result?: Complex): Complex {\n return Complex.create(\n this.x * x - this.y * y,\n this.x * y + this.y * x,\n result);\n }\n /** Return the mangitude of the complex number */\n public magnitude(): number { return Geometry.hypotenuseXY(this.x, this.y); }\n /** Return the angle from x axis to the vector (x,y) */\n public angle(): Angle { return Angle.createAtan2(this.y, this.x); }\n /** Return the xy plane distance between this and other */\n public distance(other: Complex) {\n return Geometry.hypotenuseXY(this.x - other.x, this.y - other.y);\n }\n /** Return the squared xy plane distance between this and other. */\n public magnitudeSquared(): number { return this.x * this.x + this.y * this.y; }\n /** Return the complex division `this / other` */\n public divide(other: Complex, result?: Complex): Complex | undefined {\n const bb = other.magnitudeSquared();\n if (bb === 0.0)\n return undefined;\n const divbb = 1.0 / bb;\n return Complex.create(\n (this.x * other.x + this.y * other.y) * divbb,\n (this.y * other.x - this.x * other.y) * divbb,\n result);\n }\n /** Return the complex square root of this. */\n public sqrt(result?: Complex): Complex {\n if ((this.x === 0.0) && (this.y === 0.0))\n return Complex.create(0, 0, result);\n\n const x = Math.abs(this.x);\n const y = Math.abs(this.y);\n let r = 0;\n let w = 0;\n if (x >= y) {\n r = y / x;\n w = Math.sqrt(x) * Math.sqrt(0.5 * (1.0 + Math.sqrt(1.0 + r * r)));\n } else {\n r = x / y;\n w = Math.sqrt(y) * Math.sqrt(0.5 * (r + Math.sqrt(1.0 + r * r)));\n }\n\n if (this.x >= 0.0) {\n return Complex.create(w, this.y / (2.0 * w), result);\n } else {\n const y1 = (this.y >= 0) ? w : -w;\n return Complex.create(this.y / (2.0 * y1), y1, result);\n }\n }\n /** set the complex x,y from a json object of the form like\n * * x,y key value pairs: `{x:1,y:2}`\n * * array of numbers: `[1,2]`\n */\n public setFromJSON(json?: any): void {\n if (Array.isArray(json) && json.length > 1) {\n this.set(json[0], json[1]);\n } else if (json && json.x && json.y) {\n this.set(json.x, json.y);\n } else {\n this.set(0, 0);\n }\n }\n /** Create a `Complex` instance from a json object. */\n public static fromJSON(json?: any): Complex { const result = new Complex(); result.setFromJSON(json); return result; }\n\n /**\n * Convert an Complex to a JSON object.\n * @return {*} [x,y]\n */\n public toJSON(): any { return [this.x, this.y]; }\n\n}\n"]}
|
|
@@ -1,49 +1,6 @@
|
|
|
1
|
-
import { Point2d
|
|
1
|
+
import { Point2d } from "../geometry3d/Point2dVector2d";
|
|
2
2
|
import { Range1d } from "../geometry3d/Range";
|
|
3
|
-
|
|
4
|
-
* Ray with xy origin and direction
|
|
5
|
-
* @internal
|
|
6
|
-
*/
|
|
7
|
-
export declare class Ray2d {
|
|
8
|
-
private _origin;
|
|
9
|
-
private _direction;
|
|
10
|
-
private constructor();
|
|
11
|
-
/** Create from 2d `origin` and `target`.
|
|
12
|
-
* * `target - origin` is the direction vector.
|
|
13
|
-
*/
|
|
14
|
-
static createOriginAndTarget(origin: Point2d, target: Point2d): Ray2d;
|
|
15
|
-
/** Create from (clones of) `origin` point and `direction` vector */
|
|
16
|
-
static createOriginAndDirection(origin: Point2d, direction: Vector2d): Ray2d;
|
|
17
|
-
/** Capture `origin` and `direction` as ray member variables. */
|
|
18
|
-
static createOriginAndDirectionCapture(origin: Point2d, direction: Vector2d): Ray2d;
|
|
19
|
-
/** Get the (REFERENCE TO) the ray origin. */
|
|
20
|
-
get origin(): Point2d;
|
|
21
|
-
/** Get the (REFERENCE TO) the ray direction. */
|
|
22
|
-
get direction(): Vector2d;
|
|
23
|
-
/**
|
|
24
|
-
* Return a ray that is parallel at distance to the left, specified as fraction of the ray's direction vector.
|
|
25
|
-
*/
|
|
26
|
-
parallelRay(leftFraction: number): Ray2d;
|
|
27
|
-
/** Return a ray with same origin, direction rotated 90 degrees counterclockwise */
|
|
28
|
-
ccwPerpendicularRay(): Ray2d;
|
|
29
|
-
/** Return a ray with same origin, direction rotated 90 degrees clockwise */
|
|
30
|
-
cwPerpendicularRay(): Ray2d;
|
|
31
|
-
/** Normalize the direction vector in place. */
|
|
32
|
-
normalizeDirectionInPlace(defaultX?: number, defaultY?: number): boolean;
|
|
33
|
-
/**
|
|
34
|
-
* Intersect this ray (ASSUMED NORMALIZED) with unbounded line defined by points.
|
|
35
|
-
* (The normalization assumption affects test for parallel vectors.)
|
|
36
|
-
* Fraction and dHds passed as number[] to use by reference... Sticking to return of true and false in the case fraction is zero after
|
|
37
|
-
* a true safe divide
|
|
38
|
-
*/
|
|
39
|
-
intersectUnboundedLine(linePointA: Point2d, linePointB: Point2d, fraction: number[], dHds: number[]): boolean;
|
|
40
|
-
/** return the ray fraction where point projects to the ray */
|
|
41
|
-
projectionFraction(point: Point2d): number;
|
|
42
|
-
/** return the fraction of projection to the perpendicular ray */
|
|
43
|
-
perpendicularProjectionFraction(point: Point2d): number;
|
|
44
|
-
/** Return point from origin plus a scaled vector */
|
|
45
|
-
fractionToPoint(f: number): Point2d;
|
|
46
|
-
}
|
|
3
|
+
import { Ray2d } from "../geometry3d/Ray2d";
|
|
47
4
|
/**
|
|
48
5
|
* Convex hull of points in 2d.
|
|
49
6
|
* @internal
|
|
@@ -68,10 +25,11 @@ export declare class ConvexPolygon2d {
|
|
|
68
25
|
*/
|
|
69
26
|
offsetInPlace(distance: number): boolean;
|
|
70
27
|
/**
|
|
71
|
-
* Return 2 distances bounding the intersection of the ray with
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
28
|
+
* Return 2 distances bounding the intersection of the ray with this convex hull.
|
|
29
|
+
* @param ray ray to clip to this convex polygon. ASSUME normalized direction vector, so that ray fractions are distances.
|
|
30
|
+
* @returns intersection bounds as min and max distances along the ray (from its origin).
|
|
31
|
+
* * Both negative and positive distances along the ray are possible.
|
|
32
|
+
* * Range has extreme values if less than 3 points, distanceA > distanceB, or if cross product < 0.
|
|
75
33
|
*/
|
|
76
34
|
clipRay(ray: Ray2d): Range1d;
|
|
77
35
|
/** Return the range of (fractional) ray positions for projections of all points from the arrays. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConvexPolygon2d.d.ts","sourceRoot":"","sources":["../../../src/numerics/ConvexPolygon2d.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"ConvexPolygon2d.d.ts","sourceRoot":"","sources":["../../../src/numerics/ConvexPolygon2d.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAY,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C;;;GAGG;AACH,qBAAa,eAAe;IAG1B,OAAO,CAAC,WAAW,CAAY;gBAEnB,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS;IAUzC,sBAAsB;WACR,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe;IAI5D,6DAA6D;WAC/C,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE;IAOtD,6CAA6C;IAC7C,IAAW,MAAM,IAAI,OAAO,EAAE,CAE7B;IAED,oDAAoD;WACtC,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE;IAajD,wFAAwF;IACjF,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAa7C,yDAAyD;IAClD,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IA2B3C;;OAEG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IA6B/C;;;;;;OAMG;IACI,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO;IAsCnC,oGAAoG;IAC7F,aAAa,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO;IAOzC,oGAAoG;IAC7F,uBAAuB,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO;IAOnD;;OAEG;WACW,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,SAAS;CAuC1E"}
|
|
@@ -8,97 +8,7 @@
|
|
|
8
8
|
import { Geometry } from "../Geometry";
|
|
9
9
|
import { Vector2d } from "../geometry3d/Point2dVector2d";
|
|
10
10
|
import { Range1d } from "../geometry3d/Range";
|
|
11
|
-
|
|
12
|
-
* Ray with xy origin and direction
|
|
13
|
-
* @internal
|
|
14
|
-
*/
|
|
15
|
-
export class Ray2d {
|
|
16
|
-
constructor(origin, direction) {
|
|
17
|
-
this._origin = origin;
|
|
18
|
-
this._direction = direction;
|
|
19
|
-
}
|
|
20
|
-
/** Create from 2d `origin` and `target`.
|
|
21
|
-
* * `target - origin` is the direction vector.
|
|
22
|
-
*/
|
|
23
|
-
static createOriginAndTarget(origin, target) {
|
|
24
|
-
return new Ray2d(origin.clone(), origin.vectorTo(target));
|
|
25
|
-
}
|
|
26
|
-
/** Create from (clones of) `origin` point and `direction` vector */
|
|
27
|
-
static createOriginAndDirection(origin, direction) {
|
|
28
|
-
return new Ray2d(origin.clone(), direction.clone());
|
|
29
|
-
}
|
|
30
|
-
/** Capture `origin` and `direction` as ray member variables. */
|
|
31
|
-
static createOriginAndDirectionCapture(origin, direction) {
|
|
32
|
-
return new Ray2d(origin, direction);
|
|
33
|
-
}
|
|
34
|
-
/** Get the (REFERENCE TO) the ray origin. */
|
|
35
|
-
get origin() { return this._origin; }
|
|
36
|
-
/** Get the (REFERENCE TO) the ray direction. */
|
|
37
|
-
get direction() { return this._direction; }
|
|
38
|
-
/**
|
|
39
|
-
* Return a ray that is parallel at distance to the left, specified as fraction of the ray's direction vector.
|
|
40
|
-
*/
|
|
41
|
-
parallelRay(leftFraction) {
|
|
42
|
-
return new Ray2d(this._origin.addForwardLeft(0.0, leftFraction, this._direction), this._direction);
|
|
43
|
-
}
|
|
44
|
-
/** Return a ray with same origin, direction rotated 90 degrees counterclockwise */
|
|
45
|
-
ccwPerpendicularRay() {
|
|
46
|
-
return new Ray2d(this._origin, this._direction.rotate90CCWXY());
|
|
47
|
-
}
|
|
48
|
-
/** Return a ray with same origin, direction rotated 90 degrees clockwise */
|
|
49
|
-
cwPerpendicularRay() {
|
|
50
|
-
return new Ray2d(this._origin, this._direction.rotate90CWXY());
|
|
51
|
-
}
|
|
52
|
-
/** Normalize the direction vector in place. */
|
|
53
|
-
normalizeDirectionInPlace(defaultX = 1, defaultY = 0) {
|
|
54
|
-
if (this._direction.normalize(this._direction)) {
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this._direction.x = defaultX;
|
|
59
|
-
this._direction.y = defaultY;
|
|
60
|
-
// magnitude = 0.0;
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Intersect this ray (ASSUMED NORMALIZED) with unbounded line defined by points.
|
|
66
|
-
* (The normalization assumption affects test for parallel vectors.)
|
|
67
|
-
* Fraction and dHds passed as number[] to use by reference... Sticking to return of true and false in the case fraction is zero after
|
|
68
|
-
* a true safe divide
|
|
69
|
-
*/
|
|
70
|
-
intersectUnboundedLine(linePointA, linePointB, fraction, dHds) {
|
|
71
|
-
const lineDirection = linePointA.vectorTo(linePointB);
|
|
72
|
-
const vector0 = linePointA.vectorTo(this._origin);
|
|
73
|
-
const h0 = vector0.crossProduct(lineDirection);
|
|
74
|
-
dHds[0] = this._direction.crossProduct(lineDirection);
|
|
75
|
-
// h = h0 + s * dh
|
|
76
|
-
const ff = Geometry.conditionalDivideFraction(-h0, dHds[0]);
|
|
77
|
-
if (ff !== undefined) {
|
|
78
|
-
fraction[0] = ff;
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
fraction[0] = 0.0;
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/** return the ray fraction where point projects to the ray */
|
|
87
|
-
projectionFraction(point) {
|
|
88
|
-
return this._origin.vectorTo(point).fractionOfProjectionToVector(this._direction);
|
|
89
|
-
}
|
|
90
|
-
/** return the fraction of projection to the perpendicular ray */
|
|
91
|
-
perpendicularProjectionFraction(point) {
|
|
92
|
-
const uv = this._direction.crossProduct(this._origin.vectorTo(point));
|
|
93
|
-
const uu = this._direction.magnitudeSquared();
|
|
94
|
-
// Want zero returned if failure case, not undefined
|
|
95
|
-
return Geometry.safeDivideFraction(uv, uu, 0.0);
|
|
96
|
-
}
|
|
97
|
-
/** Return point from origin plus a scaled vector */
|
|
98
|
-
fractionToPoint(f) {
|
|
99
|
-
return this._origin.plusScaled(this._direction, f);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
11
|
+
import { Ray2d } from "../geometry3d/Ray2d";
|
|
102
12
|
/**
|
|
103
13
|
* Convex hull of points in 2d.
|
|
104
14
|
* @internal
|
|
@@ -215,10 +125,11 @@ export class ConvexPolygon2d {
|
|
|
215
125
|
return true;
|
|
216
126
|
}
|
|
217
127
|
/**
|
|
218
|
-
* Return 2 distances bounding the intersection of the ray with
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
128
|
+
* Return 2 distances bounding the intersection of the ray with this convex hull.
|
|
129
|
+
* @param ray ray to clip to this convex polygon. ASSUME normalized direction vector, so that ray fractions are distances.
|
|
130
|
+
* @returns intersection bounds as min and max distances along the ray (from its origin).
|
|
131
|
+
* * Both negative and positive distances along the ray are possible.
|
|
132
|
+
* * Range has extreme values if less than 3 points, distanceA > distanceB, or if cross product < 0.
|
|
222
133
|
*/
|
|
223
134
|
clipRay(ray) {
|
|
224
135
|
let distanceA = -Number.MAX_VALUE;
|
|
@@ -228,16 +139,15 @@ export class ConvexPolygon2d {
|
|
|
228
139
|
return Range1d.createNull();
|
|
229
140
|
let xy0 = this._hullPoints[n - 1];
|
|
230
141
|
for (const xy1 of this._hullPoints) {
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
distanceB = distance[0];
|
|
142
|
+
const { hasIntersection, fraction, cross } = ray.intersectUnboundedLine(xy0, xy1);
|
|
143
|
+
if (hasIntersection) {
|
|
144
|
+
if (cross > 0.0) {
|
|
145
|
+
if (fraction < distanceB)
|
|
146
|
+
distanceB = fraction;
|
|
237
147
|
}
|
|
238
148
|
else {
|
|
239
|
-
if (
|
|
240
|
-
distanceA =
|
|
149
|
+
if (fraction > distanceA)
|
|
150
|
+
distanceA = fraction;
|
|
241
151
|
}
|
|
242
152
|
if (distanceA > distanceB)
|
|
243
153
|
return Range1d.createNull();
|
|
@@ -280,7 +190,7 @@ export class ConvexPolygon2d {
|
|
|
280
190
|
return undefined;
|
|
281
191
|
// Get deep copy
|
|
282
192
|
const xy1 = points.slice(0, n);
|
|
283
|
-
xy1.sort(Geometry.lexicalXYLessThan);
|
|
193
|
+
xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));
|
|
284
194
|
hull.push(xy1[0]); // This is sure to stay
|
|
285
195
|
hull.push(xy1[1]); // This one can be removed in loop.
|
|
286
196
|
// First sweep creates upper hull
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConvexPolygon2d.js","sourceRoot":"","sources":["../../../src/numerics/ConvexPolygon2d.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAW,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C;;;GAGG;AACH,MAAM,OAAO,KAAK;IAIhB,YAAoB,MAAe,EAAE,SAAmB;QACtD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IACD;;OAEG;IACI,MAAM,CAAC,qBAAqB,CAAC,MAAe,EAAE,MAAe;QAClE,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,oEAAoE;IAC7D,MAAM,CAAC,wBAAwB,CAAC,MAAe,EAAE,SAAmB;QACzE,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,gEAAgE;IACzD,MAAM,CAAC,+BAA+B,CAAC,MAAe,EAAE,SAAmB;QAChF,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC;IACD,6CAA6C;IAC7C,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,gDAAgD;IAChD,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAElD;;OAEG;IACI,WAAW,CAAC,YAAoB;QACrC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACrG,CAAC;IACD,mFAAmF;IAC5E,mBAAmB;QACxB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,4EAA4E;IACrE,kBAAkB;QACvB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,+CAA+C;IACxC,yBAAyB,CAAC,WAAmB,CAAC,EAAE,WAAmB,CAAC;QACzE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAC9C,OAAO,IAAI,CAAC;SACb;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC7B,mBAAmB;YACnB,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED;;;;;OAKG;IACI,sBAAsB,CAAC,UAAmB,EAAE,UAAmB,EAAE,QAAkB,EAAE,IAAc;QACxG,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACtD,kBAAkB;QAClB,MAAM,EAAE,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,EAAE,KAAK,SAAS,EAAE;YACpB,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;SACb;aAAM;YACL,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAClB,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED,8DAA8D;IACvD,kBAAkB,CAAC,KAAc;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpF,CAAC;IAED,iEAAiE;IAC1D,+BAA+B,CAAC,KAAc;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;QAC9C,oDAAoD;QACpD,OAAO,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,oDAAoD;IAC7C,eAAe,CAAC,CAAS;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;CACF;AACD;;;GAGG;AACH,MAAM,OAAO,eAAe;IAK1B,YAAY,MAA6B;QACvC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,kCAAkC;QAClC,IAAI,MAAM,EAAE;YACV,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9B;SACF;IACH,CAAC;IAED,sBAAsB;IACf,MAAM,CAAC,UAAU,CAAC,MAAiB;QACxC,OAAO,IAAI,eAAe,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,6DAA6D;IACtD,MAAM,CAAC,sBAAsB,CAAC,MAAiB;QACpD,IAAI,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC3C,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;;YAEnC,OAAO,IAAI,eAAe,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,6CAA6C;IAC7C,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,oDAAoD;IAC7C,MAAM,CAAC,iBAAiB,CAAC,MAAiB;QAC/C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YACnB,OAAO,KAAK,CAAC;QACf,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;gBAC9D,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wFAAwF;IACjF,aAAa,CAAC,KAAc;QACjC,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxD,yCAAyC;QACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;YAChC,MAAM,GAAG,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,GAAG,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,GAAG;gBACT,OAAO,KAAK,CAAC;YACf,GAAG,GAAG,CAAC,CAAC;SACT;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yDAAyD;IAClD,eAAe,CAAC,EAAW;QAChC,IAAI,WAAW,GAAG,GAAG,CAAC;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAClC,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,4CAA4C;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,GAAG,GAAG,CAAC,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,GAAG,EAAE;gBACX,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAClD,MAAM,CAAC,GAAG,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBACrC,IAAI,CAAC,GAAG,GAAG,CAAC;gBACZ,IAAI,CAAC,GAAG,GAAG;oBACT,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;qBAClB,IAAI,CAAC,GAAG,GAAG;oBACd,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;;oBAErB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE1C,IAAI,CAAC,GAAG,WAAW;oBACjB,WAAW,GAAG,CAAC,CAAC;aACnB;YACD,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAC3B;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,QAAgB;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE;YACV,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,KAAK,GAAyB,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC/E,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YAC1B,IAAI,KAAK,KAAK,SAAS,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;YAE1C,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;YACjC,IAAI,KAA2B,CAAC;YAChC,IAAI,KAAe,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChB,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC/E,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC1B,IAAI,KAAK,KAAK,SAAS,EAAE;oBAAE,OAAO,KAAK,CAAC;iBAAE;gBAE1C,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC7B,MAAM,cAAc,GAAG,QAAQ,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC7E,IAAI,cAAc,KAAK,SAAS,EAAE;oBAAE,OAAO,KAAK,CAAC;iBAAE;gBAEnD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC/D,wEAAwE;gBACxE,KAAK,GAAG,KAAK,CAAC;aACf;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACI,OAAO,CAAC,GAAU;QACvB,IAAI,SAAS,GAAG,CAAE,MAAM,CAAC,SAAS,CAAC;QACnC,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAEjC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAElC,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;QAE9B,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;YAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;gBACxD,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;oBACjB,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS;wBACzB,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;iBAC3B;qBAAM;oBACL,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS;wBACzB,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;iBAC3B;gBACD,IAAI,SAAS,GAAG,SAAS;oBACvB,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;aAC/B;iBAAM;gBACL,+BAA+B;gBAC/B,8CAA8C;gBAC9C,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG;oBACjD,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;aAC/B;YAED,uCAAuC;YACvC,GAAG,GAAG,GAAG,CAAC;SACX;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACnC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oGAAoG;IAC7F,aAAa,CAAC,GAAU;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW;YAChC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oGAAoG;IAC7F,uBAAuB,CAAC,GAAU;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW;YAChC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,iBAAiB,CAAC,MAAiB;QAC/C,MAAM,IAAI,GAAc,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,gBAAgB;QAChB,MAAM,GAAG,GAAc,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC;QAEtD,iCAAiC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1B,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE;gBACjF,GAAG,EAAE,CAAC;gBACN,IAAI,CAAC,GAAG,EAAE,CAAC;aACZ;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACtB;QAED,gDAAgD;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,mCAAmC;QACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG;YAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1B,OAAO,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE;gBAClF,GAAG,EAAE,CAAC;gBACN,IAAI,CAAC,GAAG,EAAE,CAAC;aACZ;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,iCAAiC;gBAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxB;QAED,OAAO,IAAI,CAAC;IACd,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 Numerics\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Range1d } from \"../geometry3d/Range\";\r\n\r\n/**\r\n * Ray with xy origin and direction\r\n * @internal\r\n */\r\nexport class Ray2d {\r\n private _origin: Point2d;\r\n private _direction: Vector2d;\r\n\r\n private constructor(origin: Point2d, direction: Vector2d) {\r\n this._origin = origin;\r\n this._direction = direction;\r\n }\r\n /** Create from 2d `origin` and `target`.\r\n * * `target - origin` is the direction vector.\r\n */\r\n public static createOriginAndTarget(origin: Point2d, target: Point2d): Ray2d {\r\n return new Ray2d(origin.clone(), origin.vectorTo(target));\r\n }\r\n /** Create from (clones of) `origin` point and `direction` vector */\r\n public static createOriginAndDirection(origin: Point2d, direction: Vector2d): Ray2d {\r\n return new Ray2d(origin.clone(), direction.clone());\r\n }\r\n /** Capture `origin` and `direction` as ray member variables. */\r\n public static createOriginAndDirectionCapture(origin: Point2d, direction: Vector2d): Ray2d {\r\n return new Ray2d(origin, direction);\r\n }\r\n /** Get the (REFERENCE TO) the ray origin. */\r\n public get origin() { return this._origin; }\r\n /** Get the (REFERENCE TO) the ray direction. */\r\n public get direction() { return this._direction; }\r\n\r\n /**\r\n * Return a ray that is parallel at distance to the left, specified as fraction of the ray's direction vector.\r\n */\r\n public parallelRay(leftFraction: number): Ray2d {\r\n return new Ray2d(this._origin.addForwardLeft(0.0, leftFraction, this._direction), this._direction);\r\n }\r\n /** Return a ray with same origin, direction rotated 90 degrees counterclockwise */\r\n public ccwPerpendicularRay(): Ray2d {\r\n return new Ray2d(this._origin, this._direction.rotate90CCWXY());\r\n }\r\n\r\n /** Return a ray with same origin, direction rotated 90 degrees clockwise */\r\n public cwPerpendicularRay(): Ray2d {\r\n return new Ray2d(this._origin, this._direction.rotate90CWXY());\r\n }\r\n /** Normalize the direction vector in place. */\r\n public normalizeDirectionInPlace(defaultX: number = 1, defaultY: number = 0): boolean {\r\n if (this._direction.normalize(this._direction)) {\r\n return true;\r\n } else {\r\n this._direction.x = defaultX;\r\n this._direction.y = defaultY;\r\n // magnitude = 0.0;\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Intersect this ray (ASSUMED NORMALIZED) with unbounded line defined by points.\r\n * (The normalization assumption affects test for parallel vectors.)\r\n * Fraction and dHds passed as number[] to use by reference... Sticking to return of true and false in the case fraction is zero after\r\n * a true safe divide\r\n */\r\n public intersectUnboundedLine(linePointA: Point2d, linePointB: Point2d, fraction: number[], dHds: number[]): boolean {\r\n const lineDirection = linePointA.vectorTo(linePointB);\r\n const vector0 = linePointA.vectorTo(this._origin);\r\n const h0 = vector0.crossProduct(lineDirection);\r\n dHds[0] = this._direction.crossProduct(lineDirection);\r\n // h = h0 + s * dh\r\n const ff = Geometry.conditionalDivideFraction(-h0, dHds[0]);\r\n if (ff !== undefined) {\r\n fraction[0] = ff;\r\n return true;\r\n } else {\r\n fraction[0] = 0.0;\r\n return false;\r\n }\r\n }\r\n\r\n /** return the ray fraction where point projects to the ray */\r\n public projectionFraction(point: Point2d): number {\r\n return this._origin.vectorTo(point).fractionOfProjectionToVector(this._direction);\r\n }\r\n\r\n /** return the fraction of projection to the perpendicular ray */\r\n public perpendicularProjectionFraction(point: Point2d): number {\r\n const uv = this._direction.crossProduct(this._origin.vectorTo(point));\r\n const uu = this._direction.magnitudeSquared();\r\n // Want zero returned if failure case, not undefined\r\n return Geometry.safeDivideFraction(uv, uu, 0.0);\r\n }\r\n\r\n /** Return point from origin plus a scaled vector */\r\n public fractionToPoint(f: number): Point2d {\r\n return this._origin.plusScaled(this._direction, f);\r\n }\r\n}\r\n/**\r\n * Convex hull of points in 2d.\r\n * @internal\r\n */\r\nexport class ConvexPolygon2d {\r\n // hull points in CCW order, WITHOUT final duplicate...\r\n // REMARK: In degenerate case with 0,1,or 2 points the array is still there.\r\n private _hullPoints: Point2d[];\r\n\r\n constructor(points: Point2d[] | undefined) {\r\n this._hullPoints = [];\r\n // Deep copy of points array given\r\n if (points) {\r\n for (const point of points) {\r\n this._hullPoints.push(point);\r\n }\r\n }\r\n }\r\n\r\n /** Create the hull */\r\n public static createHull(points: Point2d[]): ConvexPolygon2d {\r\n return new ConvexPolygon2d(ConvexPolygon2d.computeConvexHull(points));\r\n }\r\n\r\n /** Create the hull. First try to use the points as given. */\r\n public static createHullIsValidCheck(points: Point2d[]) {\r\n if (ConvexPolygon2d.isValidConvexHull(points))\r\n return new ConvexPolygon2d(points);\r\n else\r\n return new ConvexPolygon2d(ConvexPolygon2d.computeConvexHull(points));\r\n }\r\n\r\n /** Return a reference of the hull points. */\r\n public get points(): Point2d[] {\r\n return this._hullPoints;\r\n }\r\n\r\n /** Test if hull points are a convex, CCW polygon */\r\n public static isValidConvexHull(points: Point2d[]) {\r\n if (points.length < 3)\r\n return false;\r\n const n = points.length;\r\n for (let i = 0; i < n; i++) {\r\n const i1 = (i + 1) % n;\r\n const i2 = (i + 2) % n;\r\n if (points[i].crossProductToPoints(points[i1], points[i2]) < 0.0)\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Return true if the convex hull (to the left of the edges) contains the test point */\r\n public containsPoint(point: Point2d): boolean {\r\n let xy0 = this._hullPoints[this._hullPoints.length - 1];\r\n // double tol = -1.0e-20; negative tol!!\r\n for (const i of this._hullPoints) {\r\n const xy1 = i;\r\n const c = xy0.crossProductToPoints(xy1, point);\r\n if (c < 0.0)\r\n return false;\r\n xy0 = i;\r\n }\r\n return true;\r\n }\r\n\r\n /** Return the largest outside. (return 0 if in or on) */\r\n public distanceOutside(xy: Point2d): number {\r\n let maxDistance = 0.0;\r\n const n = this._hullPoints.length;\r\n let xy0 = this._hullPoints[n - 1];\r\n // double tol = -1.0e-20; // negative tol!!\r\n for (let i = 0; i < n; i++) {\r\n const xy1 = this._hullPoints[i];\r\n const c = xy0.crossProductToPoints(xy1, xy);\r\n if (c < 0.0) {\r\n const ray = Ray2d.createOriginAndTarget(xy0, xy1);\r\n const s = ray.projectionFraction(xy);\r\n let d = 0.0;\r\n if (s < 0.0)\r\n d = xy0.distance(xy);\r\n else if (s > 1.0)\r\n d = xy1.distance(xy);\r\n else\r\n d = xy.distance(ray.fractionToPoint(s));\r\n\r\n if (d > maxDistance)\r\n maxDistance = d;\r\n }\r\n xy0 = this._hullPoints[i];\r\n }\r\n return maxDistance;\r\n }\r\n\r\n /** Offset the entire hull (in place) by distance.\r\n * Returns false if an undefined occurred from normalizing (could occur after changing some hull points already)\r\n */\r\n public offsetInPlace(distance: number): boolean {\r\n const n = this._hullPoints.length;\r\n if (n >= 3) {\r\n const hullPoint0 = this._hullPoints[0];\r\n let edgeA: Vector2d | undefined = this._hullPoints[n - 1].vectorTo(hullPoint0);\r\n edgeA = edgeA.normalize();\r\n if (edgeA === undefined) { return false; }\r\n\r\n let perpA = edgeA.rotate90CWXY();\r\n let edgeB: Vector2d | undefined;\r\n let perpB: Vector2d;\r\n for (let i = 0; i < n; i++) {\r\n const j = i + 1;\r\n edgeB = this._hullPoints[i].vectorTo(j < n ? this._hullPoints[j] : hullPoint0);\r\n edgeB = edgeB.normalize();\r\n if (edgeB === undefined) { return false; }\r\n\r\n perpB = edgeB.rotate90CWXY();\r\n const offsetBisector = Vector2d.createOffsetBisector(perpA, perpB, distance);\r\n if (offsetBisector === undefined) { return false; }\r\n\r\n this._hullPoints[i] = this._hullPoints[i].plus(offsetBisector);\r\n // PerpA takes up reference to perpB, as perpB will die in new iteration\r\n perpA = perpB;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Return 2 distances bounding the intersection of the ray with a convex hull.\r\n * ASSUME (for tolerance) the ray has normalized direction vector.\r\n * Both negative and positive distances along the ray are possible.\r\n * Returns range with extremities if less than 3 points, distanceA > distanceB, or if cross product < 0\r\n */\r\n public clipRay(ray: Ray2d): Range1d {\r\n let distanceA = - Number.MAX_VALUE;\r\n let distanceB = Number.MAX_VALUE;\r\n\r\n const n = this._hullPoints.length;\r\n\r\n if (n < 3)\r\n return Range1d.createNull();\r\n\r\n let xy0 = this._hullPoints[n - 1];\r\n for (const xy1 of this._hullPoints) {\r\n const distance: number[] = [];\r\n const dHds: number[] = [];\r\n if (ray.intersectUnboundedLine(xy0, xy1, distance, dHds)) {\r\n if (dHds[0] > 0.0) {\r\n if (distance[0] < distanceB)\r\n distanceB = distance[0];\r\n } else {\r\n if (distance[0] > distanceA)\r\n distanceA = distance[0];\r\n }\r\n if (distanceA > distanceB)\r\n return Range1d.createNull();\r\n } else {\r\n // ray is parallel to the edge.\r\n // Any single point out classifies it all . ..\r\n if (xy0.crossProductToPoints(xy1, ray.origin) < 0.0)\r\n return Range1d.createNull();\r\n }\r\n\r\n // xy1 is reassigned with each new loop\r\n xy0 = xy1;\r\n }\r\n const range = Range1d.createNull();\r\n range.extendX(distanceA);\r\n range.extendX(distanceB);\r\n return range;\r\n }\r\n\r\n /** Return the range of (fractional) ray positions for projections of all points from the arrays. */\r\n public rangeAlongRay(ray: Ray2d): Range1d {\r\n const range = Range1d.createNull();\r\n for (const xy1 of this._hullPoints)\r\n range.extendX(ray.projectionFraction(xy1));\r\n return range;\r\n }\r\n\r\n /** Return the range of (fractional) ray positions for projections of all points from the arrays. */\r\n public rangePerpendicularToRay(ray: Ray2d): Range1d {\r\n const range = Range1d.createNull();\r\n for (const xy1 of this._hullPoints)\r\n range.extendX(ray.perpendicularProjectionFraction(xy1));\r\n return range;\r\n }\r\n\r\n /** Computes the hull of a convex polygon from points given. Returns the hull as a new Point2d array.\r\n * Returns an empty hull if less than 3 points are given.\r\n */\r\n public static computeConvexHull(points: Point2d[]): Point2d[] | undefined {\r\n const hull: Point2d[] = [];\r\n const n = points.length;\r\n if (n < 3)\r\n return undefined;\r\n // Get deep copy\r\n const xy1: Point2d[] = points.slice(0, n);\r\n xy1.sort(Geometry.lexicalXYLessThan);\r\n hull.push(xy1[0]); // This is sure to stay\r\n hull.push(xy1[1]); // This one can be removed in loop.\r\n\r\n // First sweep creates upper hull\r\n for (let i = 2; i < n; i++) {\r\n const candidate = xy1[i];\r\n let top = hull.length - 1;\r\n while (top > 0 && hull[top - 1].crossProductToPoints(hull[top], candidate) <= 0.0) {\r\n top--;\r\n hull.pop();\r\n }\r\n hull.push(candidate);\r\n }\r\n\r\n // Second sweep creates lower hull right to left\r\n const i0 = hull.length - 1;\r\n // xy1.back () is already on stack.\r\n hull.push(xy1[n - 2]);\r\n for (let i = n - 2; i-- > 0;) {\r\n const candidate = xy1[i];\r\n let top = hull.length - 1;\r\n while (top > i0 && hull[top - 1].crossProductToPoints(hull[top], candidate) <= 0.0) {\r\n top--;\r\n hull.pop();\r\n }\r\n if (i > 0) // don't replicate start point!!!\r\n hull.push(candidate);\r\n }\r\n\r\n return hull;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ConvexPolygon2d.js","sourceRoot":"","sources":["../../../src/numerics/ConvexPolygon2d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Numerics\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\nimport { Range1d } from \"../geometry3d/Range\";\nimport { Ray2d } from \"../geometry3d/Ray2d\";\n\n/**\n * Convex hull of points in 2d.\n * @internal\n */\nexport class ConvexPolygon2d {\n // hull points in CCW order, WITHOUT final duplicate...\n // REMARK: In degenerate case with 0,1,or 2 points the array is still there.\n private _hullPoints: Point2d[];\n\n constructor(points: Point2d[] | undefined) {\n this._hullPoints = [];\n // Deep copy of points array given\n if (points) {\n for (const point of points) {\n this._hullPoints.push(point);\n }\n }\n }\n\n /** Create the hull */\n public static createHull(points: Point2d[]): ConvexPolygon2d {\n return new ConvexPolygon2d(ConvexPolygon2d.computeConvexHull(points));\n }\n\n /** Create the hull. First try to use the points as given. */\n public static createHullIsValidCheck(points: Point2d[]) {\n if (ConvexPolygon2d.isValidConvexHull(points))\n return new ConvexPolygon2d(points);\n else\n return new ConvexPolygon2d(ConvexPolygon2d.computeConvexHull(points));\n }\n\n /** Return a reference of the hull points. */\n public get points(): Point2d[] {\n return this._hullPoints;\n }\n\n /** Test if hull points are a convex, CCW polygon */\n public static isValidConvexHull(points: Point2d[]) {\n if (points.length < 3)\n return false;\n const n = points.length;\n for (let i = 0; i < n; i++) {\n const i1 = (i + 1) % n;\n const i2 = (i + 2) % n;\n if (points[i].crossProductToPoints(points[i1], points[i2]) < 0.0)\n return false;\n }\n return true;\n }\n\n /** Return true if the convex hull (to the left of the edges) contains the test point */\n public containsPoint(point: Point2d): boolean {\n let xy0 = this._hullPoints[this._hullPoints.length - 1];\n // double tol = -1.0e-20; negative tol!!\n for (const i of this._hullPoints) {\n const xy1 = i;\n const c = xy0.crossProductToPoints(xy1, point);\n if (c < 0.0)\n return false;\n xy0 = i;\n }\n return true;\n }\n\n /** Return the largest outside. (return 0 if in or on) */\n public distanceOutside(xy: Point2d): number {\n let maxDistance = 0.0;\n const n = this._hullPoints.length;\n let xy0 = this._hullPoints[n - 1];\n // double tol = -1.0e-20; // negative tol!!\n for (let i = 0; i < n; i++) {\n const xy1 = this._hullPoints[i];\n const c = xy0.crossProductToPoints(xy1, xy);\n if (c < 0.0) {\n const ray = Ray2d.createOriginAndTarget(xy0, xy1);\n const s = ray.projectionFraction(xy);\n let d = 0.0;\n if (s < 0.0)\n d = xy0.distance(xy);\n else if (s > 1.0)\n d = xy1.distance(xy);\n else\n d = xy.distance(ray.fractionToPoint(s));\n\n if (d > maxDistance)\n maxDistance = d;\n }\n xy0 = this._hullPoints[i];\n }\n return maxDistance;\n }\n\n /** Offset the entire hull (in place) by distance.\n * Returns false if an undefined occurred from normalizing (could occur after changing some hull points already)\n */\n public offsetInPlace(distance: number): boolean {\n const n = this._hullPoints.length;\n if (n >= 3) {\n const hullPoint0 = this._hullPoints[0];\n let edgeA: Vector2d | undefined = this._hullPoints[n - 1].vectorTo(hullPoint0);\n edgeA = edgeA.normalize();\n if (edgeA === undefined) { return false; }\n\n let perpA = edgeA.rotate90CWXY();\n let edgeB: Vector2d | undefined;\n let perpB: Vector2d;\n for (let i = 0; i < n; i++) {\n const j = i + 1;\n edgeB = this._hullPoints[i].vectorTo(j < n ? this._hullPoints[j] : hullPoint0);\n edgeB = edgeB.normalize();\n if (edgeB === undefined) { return false; }\n\n perpB = edgeB.rotate90CWXY();\n const offsetBisector = Vector2d.createOffsetBisector(perpA, perpB, distance);\n if (offsetBisector === undefined) { return false; }\n\n this._hullPoints[i] = this._hullPoints[i].plus(offsetBisector);\n // PerpA takes up reference to perpB, as perpB will die in new iteration\n perpA = perpB;\n }\n }\n return true;\n }\n\n /**\n * Return 2 distances bounding the intersection of the ray with this convex hull.\n * @param ray ray to clip to this convex polygon. ASSUME normalized direction vector, so that ray fractions are distances.\n * @returns intersection bounds as min and max distances along the ray (from its origin).\n * * Both negative and positive distances along the ray are possible.\n * * Range has extreme values if less than 3 points, distanceA > distanceB, or if cross product < 0.\n */\n public clipRay(ray: Ray2d): Range1d {\n let distanceA = - Number.MAX_VALUE;\n let distanceB = Number.MAX_VALUE;\n\n const n = this._hullPoints.length;\n\n if (n < 3)\n return Range1d.createNull();\n\n let xy0 = this._hullPoints[n - 1];\n for (const xy1 of this._hullPoints) {\n const { hasIntersection, fraction, cross } = ray.intersectUnboundedLine(xy0, xy1);\n if (hasIntersection) {\n if (cross > 0.0) {\n if (fraction < distanceB)\n distanceB = fraction;\n } else {\n if (fraction > distanceA)\n distanceA = fraction;\n }\n if (distanceA > distanceB)\n return Range1d.createNull();\n } else {\n // ray is parallel to the edge.\n // Any single point out classifies it all . ..\n if (xy0.crossProductToPoints(xy1, ray.origin) < 0.0)\n return Range1d.createNull();\n }\n\n // xy1 is reassigned with each new loop\n xy0 = xy1;\n }\n const range = Range1d.createNull();\n range.extendX(distanceA);\n range.extendX(distanceB);\n return range;\n }\n\n /** Return the range of (fractional) ray positions for projections of all points from the arrays. */\n public rangeAlongRay(ray: Ray2d): Range1d {\n const range = Range1d.createNull();\n for (const xy1 of this._hullPoints)\n range.extendX(ray.projectionFraction(xy1));\n return range;\n }\n\n /** Return the range of (fractional) ray positions for projections of all points from the arrays. */\n public rangePerpendicularToRay(ray: Ray2d): Range1d {\n const range = Range1d.createNull();\n for (const xy1 of this._hullPoints)\n range.extendX(ray.perpendicularProjectionFraction(xy1));\n return range;\n }\n\n /** Computes the hull of a convex polygon from points given. Returns the hull as a new Point2d array.\n * Returns an empty hull if less than 3 points are given.\n */\n public static computeConvexHull(points: Point2d[]): Point2d[] | undefined {\n const hull: Point2d[] = [];\n const n = points.length;\n if (n < 3)\n return undefined;\n // Get deep copy\n const xy1: Point2d[] = points.slice(0, n);\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\n hull.push(xy1[0]); // This is sure to stay\n hull.push(xy1[1]); // This one can be removed in loop.\n\n // First sweep creates upper hull\n for (let i = 2; i < n; i++) {\n const candidate = xy1[i];\n let top = hull.length - 1;\n while (top > 0 && hull[top - 1].crossProductToPoints(hull[top], candidate) <= 0.0) {\n top--;\n hull.pop();\n }\n hull.push(candidate);\n }\n\n // Second sweep creates lower hull right to left\n const i0 = hull.length - 1;\n // xy1.back () is already on stack.\n hull.push(xy1[n - 2]);\n for (let i = n - 2; i-- > 0;) {\n const candidate = xy1[i];\n let top = hull.length - 1;\n while (top > i0 && hull[top - 1].crossProductToPoints(hull[top], candidate) <= 0.0) {\n top--;\n hull.pop();\n }\n if (i > 0) // don't replicate start point!!!\n hull.push(candidate);\n }\n\n return hull;\n }\n}\n"]}
|