@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":"RangeLengthData.js","sourceRoot":"","sources":["../../../src/polyface/RangeLengthData.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,eAAe;IAO1B;QACE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC;IAED,2EAA2E;IACpE,+BAA+B,CAAC,MAAwB;QAC7D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"RangeLengthData.js","sourceRoot":"","sources":["../../../src/polyface/RangeLengthData.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,eAAe;IAO1B;QACE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC;IAED,2EAA2E;IACpE,+BAA+B,CAAC,MAAwB;QAC7D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RangeSearch\n */\n\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Range3d } from \"../geometry3d/Range\";\nimport { UsageSums } from \"../numerics/UsageSums\";\n\n/**\n * Accumulated data for x,y,z length statistics in ranges.\n * * Usage pattern:\n * * create a enw RangeLengthData:\n * * `myData = new RangeLengthData ();`\n * * announce ranges to be accumulated:\n * * (many times) `myData.accumulateRowableXYZArrayRange (points);\n * * access data in public members:\n * * `myData.range` -- the composite range.\n * * `myData.xLength`, `myData.yLength`, `myData.zLength` -- mean, minMax, count, and standardDeviation of range lengths in x,y,z directions.\n * @public\n */\nexport class RangeLengthData {\n /** Overall range of all data observed by `accumulate` methods. */\n public range: Range3d;\n /** */\n public xSums: UsageSums;\n public ySums: UsageSums;\n public zSums: UsageSums;\n public constructor() {\n this.range = Range3d.createNull();\n this.xSums = new UsageSums();\n this.ySums = new UsageSums();\n this.zSums = new UsageSums();\n this._workRange = Range3d.createNull();\n }\n private _workRange: Range3d;\n /** Extend the range and length sums by the range of points in an array. */\n public accumulateGrowableXYZArrayRange(points: GrowableXYZArray) {\n points.setRange(this._workRange);\n this.range.extendRange(this._workRange);\n this.xSums.accumulate(this._workRange.xLength());\n this.ySums.accumulate(this._workRange.yLength());\n this.zSums.accumulate(this._workRange.zLength());\n }\n}\n"]}
|
|
@@ -137,7 +137,7 @@ export class TaggedNumericData {
|
|
|
137
137
|
if (this.tagB !== other.tagB)
|
|
138
138
|
return false;
|
|
139
139
|
return Geometry.exactEqualNumberArrays(this.intData, other.intData)
|
|
140
|
-
&& Geometry.almostEqualArrays(this.doubleData, other.doubleData, Geometry.isAlmostEqualNumber);
|
|
140
|
+
&& Geometry.almostEqualArrays(this.doubleData, other.doubleData, (a, b) => Geometry.isAlmostEqualNumber(a, b));
|
|
141
141
|
}
|
|
142
142
|
static areAlmostEqual(dataA, dataB) {
|
|
143
143
|
if (dataA === undefined && dataB === undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaggedNumericData.js","sourceRoot":"","sources":["../../../src/polyface/TaggedNumericData.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;GAGG;AACH,MAAM,KAAW,sBAAsB,CA+BtC;AA/BD,WAAiB,sBAAsB;IACrC;;;MAGE;IACJ,IAAa,oBAGV;IAHH,WAAa,oBAAoB;QAC7B,oDAAoD;QACpD,+FAA0B,CAAA;IAC5B,CAAC,EAHU,oBAAoB,GAApB,2CAAoB,KAApB,2CAAoB,QAG9B;IACD;;;OAGG;IACL,IAAY,iBAKT;IALH,WAAY,iBAAiB;QACzB,uFAAuB,CAAA;QACvB,yEAAgB,CAAA;QAChB,yDAAQ,CAAA;QACR,iEAAY,CAAA;IACd,CAAC,EALS,iBAAiB,GAAjB,wCAAiB,KAAjB,wCAAiB,QAK1B;IACD;;;OAGG;IACL,IAAa,sBAOV;IAPH,WAAa,sBAAsB;QAC/B,4DAA4D;QAC5D,kFAAiB,CAAA;QACjB,4FAA4F;QAC5F,gGAAwB,CAAA;QACxB,kHAAkH;QAClH,oHAAkC,CAAA;IACpC,CAAC,EAPU,sBAAsB,GAAtB,6CAAsB,KAAtB,6CAAsB,QAOhC;AACH,CAAC,EA/BgB,sBAAsB,KAAtB,sBAAsB,QA+BtC;AACD;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAM5B,YAAmB,OAAe,CAAC,EAAE,OAAe,CAAC,EACnD,OAAkB,EAAE,UAAqB;QAEzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,IAAI,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/C,CAAC;IAMH;;;;SAIK;IACI,WAAW,CAAC,IAAY,EAAE,IAAY;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD;;;;OAIG;IACK,iBAAiB,CAAC,IAAY,EAAE,MAAc;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IACD;;;;;;OAMG;IACI,QAAQ,CAAC,SAAiB,EAAE,QAAgB,EAAE,QAAgB,EAAE,YAAoB;QAC3F,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAC;gBAClD,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS;oBAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;aACpE;SACF;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACI,kBAAkB,CAAC,SAAiB,EAAE,QAAgB,EAAE,QAAgB,EAAE,YAAoB;QACrG,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAC;gBAClD,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;oBACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;iBACjG;aACF;SACF;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IACD;;;;OAIG;IACI,aAAa,CAAC,KAAa,EAAE,YAAoB;QACtD,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;YACjE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,0CAA0C;IACnC,aAAa,CAAC,KAAwB;QAC3C,IAAI,KAAK,KAAK,SAAS;YACrB,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YAC1B,OAAO,KAAK,CAAC;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YAC5B,OAAO,KAAK,CAAC;QACb,OAAO,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;eAC9D,QAAQ,CAAC,iBAAiB,CAAS,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC3G,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,KAAoC,EAAE,KAAoC;QACrG,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAC5C,OAAO,IAAI,CAAC;QACd,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAC5C,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IACH,4BAA4B;IACnB,KAAK,CAAC,MAA0B;QACrC,IAAI,CAAC,MAAM;YACT,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,OAAO;YACd,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,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/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\n\r\n/**\r\n * `TaggedNumericConstants` defines enums with constant values for use in tags of [[TaggedNumericData]]\r\n * @public\r\n */\r\nexport namespace TaggedNumericConstants {\r\n /** Reserved values for the \"tagA\" member of [[TaggedNumericData]]\r\n * @public\r\n *\r\n */\r\nexport enum TaggedNumericTagType {\r\n /** `tagA` value identifying a subdivision surface*/\r\n SubdivisionSurface = -1000\r\n }\r\n /**\r\n * `tagB` values for supported types of subdivision surfaces\r\n * @public\r\n */\r\nexport enum SubdivisionMethod {\r\n ChooseBasedOnFacets = 0,\r\n CatmullClark = 1,\r\n Loop = 2,\r\n DooSabin = 3\r\n }\r\n /**\r\n * numeric values for subdivision control. These are entered in the intData array as first of a pair.\r\n * @public\r\n */\r\nexport enum SubdivisionControlCode {\r\n /** pair (FixedDepth, d) indicates subdivision to depth d */\r\n FixedDepth = -100,\r\n /** pair (FixedDepth, index) indicates absolute tolerance with value in doubleData[index] */\r\n AbsoluteTolerance = -101,\r\n /** pair (FixedDepth, index) indicates tolerance as a fraction of base mesh range is found in doubleData[index] */\r\n FractionOfRangeBoxTolerance = -102\r\n }\r\n}\r\n/**\r\n * Structure with 2 integer tags and optional arrays of integers, doubles, points, vectors, and geometry.\r\n * * In typescript/javascript, all integer numbers that can be non-integer. Please do not insert non-integers in the integer array.\r\n * @public\r\n */\r\nexport class TaggedNumericData {\r\n /** Application specific primary tag. See reserved values in [[TaggedNumericConstants]] */\r\n public tagA: number;\r\n /** Application specific secondary tag. See reserved values in [[TaggedNumericConstants]] */\r\n public tagB: number;\r\n\r\n public constructor(tagA: number = 0, tagB: number = 0,\r\n intData?: number[], doubleData?: number[]\r\n ) {\r\n this.tagA = tagA;\r\n this.tagB = tagB;\r\n if (intData) this.intData = intData;\r\n if (doubleData) this.doubleData = doubleData;\r\n }\r\n/** Integer data with application-specific meaning */\r\n public intData?: number[];\r\n/** Double data with application-specific meaning */\r\npublic doubleData?: number[];\r\n\r\n/**\r\n * push a pair of int values on the intData array.\r\n * @param intA\r\n * @param intB\r\n */\r\n public pushIntPair(intA: number, intB: number) {\r\n if (!this.intData) this.intData = [];\r\n this.intData.push(intA);\r\n this.intData.push(intB);\r\n }\r\n /**\r\n * push a pair of int values on the intData array.\r\n * @param intA int to push on the intData array, followed by index of valueB in the doubleData array.\r\n * @param valueB value to push on the doubleData array.\r\n */\r\n public pushIndexedDouble(intA: number, valueB: number) {\r\n if (!this.intData) this.intData = [];\r\n if (!this.doubleData) this.doubleData = [];\r\n this.intData.push(intA);\r\n this.intData.push(this.doubleData.length);\r\n this.doubleData.push(valueB);\r\n }\r\n /**\r\n * Search pairs in the intData array for a pair (targetTag, value). Return the value, possibly restricted to (minValue,maxValue)\r\n * @param targetTag\r\n * @param minValue\r\n * @param maxValue\r\n * @param defaultValue\r\n */\r\n public tagToInt(targetTag: number, minValue: number, maxValue: number, defaultValue: number): number {\r\n if (this.intData) {\r\n for (let i = 0; i + 1 < this.intData.length; i += 2){\r\n if (this.intData[i] === targetTag)\r\n return Math.min(Math.max(this.intData[i + 1], minValue), maxValue);\r\n }\r\n }\r\n return defaultValue;\r\n }\r\n\r\n /**\r\n * Search pairs in the intData array for a pair (targetTag, index). Return getDoubleData[index] value, possibly restricted to (minValue,maxValue)\r\n * @param targetTag\r\n * @param minValue\r\n * @param maxValue\r\n * @param defaultValue\r\n */\r\n public tagToIndexedDouble(targetTag: number, minValue: number, maxValue: number, defaultValue: number): number {\r\n if (this.intData) {\r\n for (let i = 0; i + 1 < this.intData.length; i += 2){\r\n if (this.intData[i] === targetTag) {\r\n return Geometry.clamp(this.getDoubleData (this.intData[i + 1], defaultValue), minValue, maxValue);\r\n }\r\n }\r\n }\r\n return defaultValue;\r\n }\r\n /**\r\n * get doubleData[index], or indicated default if the index is out of range\r\n * @param index\r\n * @param defaultValue\r\n */\r\n public getDoubleData(index: number, defaultValue: number): number{\r\n if (this.doubleData && 0 <= index && index < this.doubleData.length)\r\n return this.doubleData[index];\r\n return defaultValue;\r\n }\r\n /** Apply isAlmostEqual to all members. */\r\n public isAlmostEqual(other: TaggedNumericData): boolean{\r\n if (other === undefined)\r\n return false;\r\n if (this.tagA !== other.tagA)\r\n return false;\r\n if (this.tagB !== other.tagB)\r\n return false;\r\n return Geometry.exactEqualNumberArrays(this.intData, other.intData)\r\n && Geometry.almostEqualArrays<number>(this.doubleData, other.doubleData, Geometry.isAlmostEqualNumber);\r\n }\r\n\r\n public static areAlmostEqual(dataA: TaggedNumericData | undefined, dataB: TaggedNumericData | undefined): boolean{\r\n if (dataA === undefined && dataB === undefined)\r\n return true;\r\n if (dataA !== undefined && dataB !== undefined)\r\n return dataA.isAlmostEqual(dataB);\r\n return false;\r\n }\r\n/** Return a deep clone. */\r\n public clone(result?: TaggedNumericData): TaggedNumericData {\r\n if (!result)\r\n result = new TaggedNumericData(this.tagA, this.tagB);\r\n if (this.intData)\r\n result.intData = this.intData.slice();\r\n if (this.doubleData)\r\n result.doubleData = this.doubleData.slice();\r\n return result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"TaggedNumericData.js","sourceRoot":"","sources":["../../../src/polyface/TaggedNumericData.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 Polyface\n */\n\nimport { Geometry } from \"../Geometry\";\n\n/**\n * `TaggedNumericConstants` defines enums with constant values for use in tags of [[TaggedNumericData]]\n * @public\n */\nexport namespace TaggedNumericConstants {\n /** Reserved values for the \"tagA\" member of [[TaggedNumericData]]\n * @public\n *\n */\nexport enum TaggedNumericTagType {\n /** `tagA` value identifying a subdivision surface*/\n SubdivisionSurface = -1000\n }\n /**\n * `tagB` values for supported types of subdivision surfaces\n * @public\n */\nexport enum SubdivisionMethod {\n ChooseBasedOnFacets = 0,\n CatmullClark = 1,\n Loop = 2,\n DooSabin = 3\n }\n /**\n * numeric values for subdivision control. These are entered in the intData array as first of a pair.\n * @public\n */\nexport enum SubdivisionControlCode {\n /** pair (FixedDepth, d) indicates subdivision to depth d */\n FixedDepth = -100,\n /** pair (FixedDepth, index) indicates absolute tolerance with value in doubleData[index] */\n AbsoluteTolerance = -101,\n /** pair (FixedDepth, index) indicates tolerance as a fraction of base mesh range is found in doubleData[index] */\n FractionOfRangeBoxTolerance = -102\n }\n}\n/**\n * Structure with 2 integer tags and optional arrays of integers, doubles, points, vectors, and geometry.\n * * In typescript/javascript, all integer numbers that can be non-integer. Please do not insert non-integers in the integer array.\n * @public\n */\nexport class TaggedNumericData {\n /** Application specific primary tag. See reserved values in [[TaggedNumericConstants]] */\n public tagA: number;\n /** Application specific secondary tag. See reserved values in [[TaggedNumericConstants]] */\n public tagB: number;\n\n public constructor(tagA: number = 0, tagB: number = 0,\n intData?: number[], doubleData?: number[],\n ) {\n this.tagA = tagA;\n this.tagB = tagB;\n if (intData) this.intData = intData;\n if (doubleData) this.doubleData = doubleData;\n }\n/** Integer data with application-specific meaning */\n public intData?: number[];\n/** Double data with application-specific meaning */\npublic doubleData?: number[];\n\n/**\n * push a pair of int values on the intData array.\n * @param intA\n * @param intB\n */\n public pushIntPair(intA: number, intB: number) {\n if (!this.intData) this.intData = [];\n this.intData.push(intA);\n this.intData.push(intB);\n }\n /**\n * push a pair of int values on the intData array.\n * @param intA int to push on the intData array, followed by index of valueB in the doubleData array.\n * @param valueB value to push on the doubleData array.\n */\n public pushIndexedDouble(intA: number, valueB: number) {\n if (!this.intData) this.intData = [];\n if (!this.doubleData) this.doubleData = [];\n this.intData.push(intA);\n this.intData.push(this.doubleData.length);\n this.doubleData.push(valueB);\n }\n /**\n * Search pairs in the intData array for a pair (targetTag, value). Return the value, possibly restricted to (minValue,maxValue)\n * @param targetTag\n * @param minValue\n * @param maxValue\n * @param defaultValue\n */\n public tagToInt(targetTag: number, minValue: number, maxValue: number, defaultValue: number): number {\n if (this.intData) {\n for (let i = 0; i + 1 < this.intData.length; i += 2){\n if (this.intData[i] === targetTag)\n return Math.min(Math.max(this.intData[i + 1], minValue), maxValue);\n }\n }\n return defaultValue;\n }\n\n /**\n * Search pairs in the intData array for a pair (targetTag, index). Return getDoubleData[index] value, possibly restricted to (minValue,maxValue)\n * @param targetTag\n * @param minValue\n * @param maxValue\n * @param defaultValue\n */\n public tagToIndexedDouble(targetTag: number, minValue: number, maxValue: number, defaultValue: number): number {\n if (this.intData) {\n for (let i = 0; i + 1 < this.intData.length; i += 2){\n if (this.intData[i] === targetTag) {\n return Geometry.clamp(this.getDoubleData (this.intData[i + 1], defaultValue), minValue, maxValue);\n }\n }\n }\n return defaultValue;\n }\n /**\n * get doubleData[index], or indicated default if the index is out of range\n * @param index\n * @param defaultValue\n */\n public getDoubleData(index: number, defaultValue: number): number{\n if (this.doubleData && 0 <= index && index < this.doubleData.length)\n return this.doubleData[index];\n return defaultValue;\n }\n /** Apply isAlmostEqual to all members. */\n public isAlmostEqual(other: TaggedNumericData): boolean{\n if (other === undefined)\n return false;\n if (this.tagA !== other.tagA)\n return false;\n if (this.tagB !== other.tagB)\n return false;\n return Geometry.exactEqualNumberArrays(this.intData, other.intData)\n && Geometry.almostEqualArrays<number>(this.doubleData, other.doubleData, (a, b) => Geometry.isAlmostEqualNumber(a, b));\n }\n\n public static areAlmostEqual(dataA: TaggedNumericData | undefined, dataB: TaggedNumericData | undefined): boolean{\n if (dataA === undefined && dataB === undefined)\n return true;\n if (dataA !== undefined && dataB !== undefined)\n return dataA.isAlmostEqual(dataB);\n return false;\n }\n/** Return a deep clone. */\n public clone(result?: TaggedNumericData): TaggedNumericData {\n if (!result)\n result = new TaggedNumericData(this.tagA, this.tagB);\n if (this.intData)\n result.intData = this.intData.slice();\n if (this.doubleData)\n result.doubleData = this.doubleData.slice();\n return result;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriangleCandidate.js","sourceRoot":"","sources":["../../../src/polyface/TriangleCandidate.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IAIxD,YAAoB,MAAe,EAAE,MAAe,EAAE,MAAe,EAAE,EAAU,EAAE,OAAe,EAAE,OAAgB;QAClH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IACD;;;OAGG;IACa,OAAO,CAAC,KAAwB;QAC9C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,oBAAoB,CAAC,OAA6B,EAAE,MAAc,EAAE,OAA6B,EAAE,MAAc,EAAE,OAA6B,EAAE,MAAc,EAAE,EAAU,EAAE,MAA0B;QACpN,IAAI,CAAC,MAAM;YACT,MAAM,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACvG,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACf,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,SAAS,KAAK,OAAO,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/E,QAAQ,EAAE,CAAC;QACb,IAAI,SAAS,KAAK,OAAO,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/E,QAAQ,EAAE,CAAC;QACb,IAAI,SAAS,KAAK,OAAO,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/E,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,KAAK,CAAC;YAChB,MAAM,CAAC,iBAAiB,EAAE,CAAC;;YAE3B,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2CAA2C;IAC3C,IAAW,OAAO,KAAc,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD;;;;;OAKG;IACI,WAAW,CAAC,OAAgB;QACjC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,OAAO,KAAK,SAAS;YACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IACD;;;OAGG;IACI,iBAAiB;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;IACtC,CAAC;IACD;;;OAGG;IACa,KAAK,CAAC,MAA0B;QAC9C,IAAI,MAAM;YACR,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9I,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,oBAAoB,CAAC,UAA6B,EAAE,UAA6B,EAAE,MAA0B;QACzH,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,UAAU,CAAC,OAAO,EAAE;YACtB,MAAM,GAAG,GAAG,UAAU,CAAC,mCAAmC,CAAC,UAAU,CAAC,CAAC;YACvE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;YACjF,IAAI,GAAG,GAAG,GAAG;gBACX,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC;SAC1B;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,6BAA6B,CAAC,QAA2B,EAAE,KAAwB;QAC/F,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;YACrD,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"TriangleCandidate.js","sourceRoot":"","sources":["../../../src/polyface/TriangleCandidate.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 Polyface\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\n\n/**\n * `TriangleCandidate` is a `BarycentricTriangle` with additional application-specific label data:\n * * `quality` = numeric indicator of quality (e.g. aspect ratio of this triangle or a combination with other triangles)\n * * `isValid` = boolean flag.\n * * `id` = application specific identifier\n * @internal\n */\nexport class TriangleCandidate extends BarycentricTriangle {\n private _quality: number;\n private _isValid: boolean;\n public id: number;\n private constructor(point0: Point3d, point1: Point3d, point2: Point3d, id: number, quality: number, isValid: boolean) {\n super(point0, point1, point2);\n this._isValid = isValid;\n this._quality = quality;\n this.id = id;\n }\n /**\n * Copy all coordinate and label data from `other` to this.\n * @param other source triangle\n */\n public override setFrom(other: TriangleCandidate): TriangleCandidate {\n super.setFrom(other);\n this._isValid = other._isValid;\n this._quality = other._quality;\n this.id = other.id;\n return this;\n }\n\n /** Create (always) a TriangleCandidate.\n * * Access points from multiple `IndexedXYZCollection`\n * * mark invalid if any indices are invalid.\n */\n public static createFromIndexedXYZ(source0: IndexedXYZCollection, index0: number, source1: IndexedXYZCollection, index1: number, source2: IndexedXYZCollection, index2: number, id: number, result?: TriangleCandidate): TriangleCandidate {\n if (!result)\n result = new TriangleCandidate(Point3d.create(), Point3d.create(), Point3d.create(), id, 0.0, false);\n result.id = id;\n let numValid = 0;\n if (undefined !== source0.getPoint3dAtCheckedPointIndex(index0, result.points[0]))\n numValid++;\n if (undefined !== source1.getPoint3dAtCheckedPointIndex(index1, result.points[1]))\n numValid++;\n if (undefined !== source2.getPoint3dAtCheckedPointIndex(index2, result.points[2]))\n numValid++;\n if (numValid === 3)\n result.updateAspectRatio();\n else\n result.markInvalid();\n return result;\n }\n /** (property) return the validity flag. */\n public get isValid(): boolean { return this._isValid; }\n /**\n * * Mark this triangle invalid.\n * * optionally set aspect ratio.\n * * points are not changed\n * @param aspectRatio\n */\n public markInvalid(quality?: number) {\n this._isValid = false;\n if (quality !== undefined)\n this._quality = quality;\n }\n /**\n * * Recompute the aspect ratio.\n * * Mark invalid if aspect ratio is 0 or negative.\n */\n public updateAspectRatio() {\n this._quality = super.aspectRatio;\n this._isValid = this._quality > 0.0;\n }\n /**\n * Clone all coordinate and label data.\n * @param result optional preallocated `TriangleCandidate`\n */\n public override clone(result?: TriangleCandidate): TriangleCandidate {\n if (result)\n return result.setFrom(this);\n return new TriangleCandidate(this.points[0].clone(), this.points[1].clone(), this.points[2].clone(), this.id, this._quality, this._isValid);\n }\n /**\n * Return a `TriangleCandidate` with\n * * coordinate data and labels from `candidateA`\n * * LOWER quality of the two candidates.\n * * quality reduced by 1 if triangles have opposing normals (negative dot product of the two normals)\n * @param candidateA candidate known to be valid\n * @param candidateB candidate that may by valid\n * @param result copy of candidate A, but if candidateB is valid the result aspect ratio is reduced (a) to the minimum of the two ratios and then (b) reduced by 1 if orientations clash.\n */\n public static copyWithLowerQuality(candidateA: TriangleCandidate, candidateB: TriangleCandidate, result?: TriangleCandidate): TriangleCandidate {\n result = candidateA.clone(result);\n if (candidateB.isValid) {\n const dot = candidateA.dotProductOfCrossProductsFromOrigin(candidateB);\n result._quality = Geometry.minXY(candidateA.aspectRatio, candidateB.aspectRatio);\n if (dot < 0.0)\n result._quality -= 1.0;\n }\n return result;\n }\n /**\n * choose better aspect ratio of triangle, other.\n * @param triangle known valid triangle, to be updated\n * @param other candidate replacement\n */\n public static updateIfOtherHasHigherQuality(triangle: TriangleCandidate, other: TriangleCandidate) {\n if (other.isValid && other._quality > triangle._quality)\n triangle.setFrom(other);\n }\n}\n"]}
|
|
@@ -86,7 +86,7 @@ export class BuildAverageNormalsContext {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
// Sort by the vertex index so all the sectors around each vertex are clustered . .
|
|
89
|
-
sectors.sort(SectorData.cbVertexSort);
|
|
89
|
+
sectors.sort((left, right) => SectorData.cbVertexSort(left, right));
|
|
90
90
|
// Walk the sectors around each vertex . ..
|
|
91
91
|
// For each unassigned sector
|
|
92
92
|
// walk to further sectors of the same vertex with near-parallel normals, accumulating average normal.
|
|
@@ -119,7 +119,7 @@ export class BuildAverageNormalsContext {
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
// Resort by original sector index.
|
|
122
|
-
sectors.sort(SectorData.cbSectorSort);
|
|
122
|
+
sectors.sort((left, right) => SectorData.cbSectorSort(left, right));
|
|
123
123
|
// normalize the sums and emplace in the facets . . .
|
|
124
124
|
polyface.data.normalIndex = [];
|
|
125
125
|
polyface.data.normal = new GrowableXYZArray(sectors.length);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildAverageNormalsContext.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/BuildAverageNormalsContext.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 Polyface\r\n */\r\n\r\nimport { Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../../geometry3d/PolygonOps\";\r\nimport { IndexedPolyface } from \"../Polyface\";\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\n\r\n/**\r\n * Normal vector with area (or other numeric) and source index\r\n * @internal\r\n */\r\nclass IndexedAreaAndNormal {\r\n public constructor(index: number, area: number, normal: Vector3d) {\r\n this.index = index;\r\n this.area = area;\r\n this.normal = normal;\r\n }\r\n public index: number;\r\n public area: number;\r\n public normal: Vector3d;\r\n\r\n public addWeightedNormal(weight: number, normal: Vector3d) {\r\n this.area += weight;\r\n this.normal.addScaledInPlace(normal, weight);\r\n }\r\n public divideNormalByArea() {\r\n this.normal.scaleInPlace(1.0 / this.area);\r\n }\r\n}\r\n\r\n/**\r\n * index data for a single sector of some facet.\r\n * @internal\r\n */\r\nclass SectorData {\r\n private constructor(facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\r\n this.facetData = facetData;\r\n this.sectorClusterData = undefined;\r\n this.sectorIndex = sectorIndex;\r\n this.vertexIndex = vertexIndex;\r\n }\r\n public facetData: IndexedAreaAndNormal;\r\n public sectorIndex: number;\r\n public vertexIndex: number;\r\n public sectorClusterData: IndexedAreaAndNormal | undefined;\r\n public static cbSectorSort(left: SectorData, right: SectorData): number { return left.sectorIndex - right.sectorIndex; }\r\n public static cbVertexSort(left: SectorData, right: SectorData): number { return left.vertexIndex - right.vertexIndex; }\r\n public static pushToArray(data: SectorData[], facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\r\n data.push(new SectorData(facetData, sectorIndex, vertexIndex));\r\n }\r\n}\r\n/**\r\n * Helper context for normal averaging.\r\n * All methods are static.\r\n * @internal\r\n */\r\n\r\nexport class BuildAverageNormalsContext {\r\n /**\r\n * * At each vertex of the mesh\r\n * * Find clusters of almost parallel normals\r\n * * Compute simple average of those normals\r\n * * Index to the averages\r\n * * For typical meshes, this correctly clusters adjacent normals.\r\n * * One cam imagine a vertex with multiple \"smooth cone-like\" sets of incident facets such that averaging occurs among two nonadjacent cones. But this does not seem to be a problem in practice.\r\n * @param polyface polyface to update.\r\n * @param toleranceAngle averaging is done between normals up to this angle.\r\n */\r\n public static buildFastAverageNormals(polyface: IndexedPolyface, toleranceAngle: Angle) {\r\n // We ASSUME that the visitor order matches index order in polyface.data .....\r\n const visitor = polyface.createVisitor(0);\r\n const defaultNormal = Vector3d.create(0, 0, 1);\r\n const smallArea = Geometry.smallMetricDistanceSquared; // I DO NOT LIKE THIS TOLERANCE\r\n const sectors: SectorData[] = [];\r\n let facetIndex = 0;\r\n let sectorIndex = 0;\r\n // create one IndexedAreaNormal structure for each facet.\r\n // At each sector of each face, notate (a) IndexedAreaNormal of the facet, (b) the sector index, (c) the point index.\r\n\r\n while (visitor.moveToNextFacet()) {\r\n const facetNormal = PolygonOps.areaNormalGo(visitor.point)!;\r\n let area = facetNormal.magnitude();\r\n if (area < smallArea) {\r\n facetNormal.setFromVector3d(defaultNormal);\r\n area = 0.0;\r\n } else {\r\n facetNormal.scaleInPlace(1.0 / area);\r\n }\r\n const facetData = new IndexedAreaAndNormal(facetIndex++, area, facetNormal);\r\n for (let i = 0; i < visitor.pointCount; i++) {\r\n SectorData.pushToArray(sectors, facetData, sectorIndex++, visitor.clientPointIndex(i));\r\n }\r\n }\r\n // Sort by the vertex index so all the sectors around each vertex are clustered . .\r\n sectors.sort(SectorData.cbVertexSort);\r\n\r\n // Walk the sectors around each vertex . ..\r\n // For each unassigned sector\r\n // walk to further sectors of the same vertex with near-parallel normals, accumulating average normal.\r\n // notate all sectors in the cluster with the averaged-normal structure.\r\n const clusters: IndexedAreaAndNormal[] = [];\r\n let toleranceRadians = toleranceAngle.radians;\r\n if (toleranceRadians < 0.0001)\r\n toleranceRadians = 0.0001;\r\n\r\n let clusterIndex = 0;\r\n for (let baseSectorIndex = 0; baseSectorIndex < sectors.length; baseSectorIndex++) {\r\n const baseData = sectors[baseSectorIndex];\r\n const vertexIndex = baseData.vertexIndex;\r\n const baseFacetData = baseData.facetData;\r\n if (baseData.sectorClusterData === undefined) {\r\n const clusterNormal = new IndexedAreaAndNormal(clusterIndex++, 0.0, Vector3d.createZero());\r\n clusters.push(clusterNormal);\r\n // Accumulate with equal weights . . .\r\n clusterNormal.addWeightedNormal(1.0, baseData.facetData.normal.clone());\r\n for (let candidateSectorIndex = baseSectorIndex;\r\n candidateSectorIndex < sectors.length;\r\n candidateSectorIndex++) {\r\n const candidateSector = sectors[candidateSectorIndex];\r\n if (candidateSector.vertexIndex !== vertexIndex)\r\n break;\r\n if (candidateSector.facetData.normal.angleTo(baseFacetData.normal).radians > toleranceRadians)\r\n continue;\r\n if (candidateSector.sectorClusterData === undefined) {\r\n clusterNormal.addWeightedNormal(1.0, candidateSector.facetData.normal);\r\n candidateSector.sectorClusterData = clusterNormal;\r\n }\r\n }\r\n }\r\n }\r\n // Resort by original sector index.\r\n sectors.sort(SectorData.cbSectorSort);\r\n // normalize the sums and emplace in the facets . . .\r\n polyface.data.normalIndex = [];\r\n polyface.data.normal = new GrowableXYZArray(sectors.length);\r\n for (const cluster of clusters) {\r\n cluster.divideNormalByArea();\r\n cluster.index = polyface.data.normal.length;\r\n polyface.data.normal.push(cluster.normal);\r\n }\r\n // emplace the indices\r\n for (const sector of sectors) {\r\n polyface.data.normalIndex.push(sector.sectorClusterData!.index);\r\n }\r\n }\r\n /**\r\n * Set up indexed normals with one normal in the plane of each facet of the mesh.\r\n * @param polyface mesh to modify\r\n */\r\n public static buildPerFaceNormals(polyface: IndexedPolyface) {\r\n const visitor = polyface.createVisitor(0);\r\n const facetNormal = Vector3d.create(0, 0, 1);\r\n const defaultNormal = Vector3d.create(0, 0, 1);\r\n // polyface.data.clearNormals();\r\n const newNormals = new GrowableXYZArray(polyface.faceCount);\r\n const newIndices: number[] = [];\r\n while (visitor.moveToNextFacet()) {\r\n const thisNormalIndex = newNormals.length;\r\n if (PolygonOps.unitNormal(visitor.point, facetNormal))\r\n newNormals.push(facetNormal);\r\n else\r\n newNormals.push(defaultNormal);\r\n for (let i = 0; i < visitor.pointCount; i++)\r\n newIndices.push(thisNormalIndex);\r\n }\r\n polyface.data.normalIndex = newIndices;\r\n polyface.data.normal = newNormals;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BuildAverageNormalsContext.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/BuildAverageNormalsContext.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 Polyface\n */\n\nimport { Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { PolygonOps } from \"../../geometry3d/PolygonOps\";\nimport { IndexedPolyface } from \"../Polyface\";\nimport { Geometry } from \"../../Geometry\";\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\nimport { Angle } from \"../../geometry3d/Angle\";\n\n/**\n * Normal vector with area (or other numeric) and source index\n * @internal\n */\nclass IndexedAreaAndNormal {\n public constructor(index: number, area: number, normal: Vector3d) {\n this.index = index;\n this.area = area;\n this.normal = normal;\n }\n public index: number;\n public area: number;\n public normal: Vector3d;\n\n public addWeightedNormal(weight: number, normal: Vector3d) {\n this.area += weight;\n this.normal.addScaledInPlace(normal, weight);\n }\n public divideNormalByArea() {\n this.normal.scaleInPlace(1.0 / this.area);\n }\n}\n\n/**\n * index data for a single sector of some facet.\n * @internal\n */\nclass SectorData {\n private constructor(facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\n this.facetData = facetData;\n this.sectorClusterData = undefined;\n this.sectorIndex = sectorIndex;\n this.vertexIndex = vertexIndex;\n }\n public facetData: IndexedAreaAndNormal;\n public sectorIndex: number;\n public vertexIndex: number;\n public sectorClusterData: IndexedAreaAndNormal | undefined;\n public static cbSectorSort(left: SectorData, right: SectorData): number { return left.sectorIndex - right.sectorIndex; }\n public static cbVertexSort(left: SectorData, right: SectorData): number { return left.vertexIndex - right.vertexIndex; }\n public static pushToArray(data: SectorData[], facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\n data.push(new SectorData(facetData, sectorIndex, vertexIndex));\n }\n}\n/**\n * Helper context for normal averaging.\n * All methods are static.\n * @internal\n */\n\nexport class BuildAverageNormalsContext {\n /**\n * * At each vertex of the mesh\n * * Find clusters of almost parallel normals\n * * Compute simple average of those normals\n * * Index to the averages\n * * For typical meshes, this correctly clusters adjacent normals.\n * * One cam imagine a vertex with multiple \"smooth cone-like\" sets of incident facets such that averaging occurs among two nonadjacent cones. But this does not seem to be a problem in practice.\n * @param polyface polyface to update.\n * @param toleranceAngle averaging is done between normals up to this angle.\n */\n public static buildFastAverageNormals(polyface: IndexedPolyface, toleranceAngle: Angle) {\n // We ASSUME that the visitor order matches index order in polyface.data .....\n const visitor = polyface.createVisitor(0);\n const defaultNormal = Vector3d.create(0, 0, 1);\n const smallArea = Geometry.smallMetricDistanceSquared; // I DO NOT LIKE THIS TOLERANCE\n const sectors: SectorData[] = [];\n let facetIndex = 0;\n let sectorIndex = 0;\n // create one IndexedAreaNormal structure for each facet.\n // At each sector of each face, notate (a) IndexedAreaNormal of the facet, (b) the sector index, (c) the point index.\n\n while (visitor.moveToNextFacet()) {\n const facetNormal = PolygonOps.areaNormalGo(visitor.point)!;\n let area = facetNormal.magnitude();\n if (area < smallArea) {\n facetNormal.setFromVector3d(defaultNormal);\n area = 0.0;\n } else {\n facetNormal.scaleInPlace(1.0 / area);\n }\n const facetData = new IndexedAreaAndNormal(facetIndex++, area, facetNormal);\n for (let i = 0; i < visitor.pointCount; i++) {\n SectorData.pushToArray(sectors, facetData, sectorIndex++, visitor.clientPointIndex(i));\n }\n }\n // Sort by the vertex index so all the sectors around each vertex are clustered . .\n sectors.sort((left, right) => SectorData.cbVertexSort(left, right));\n\n // Walk the sectors around each vertex . ..\n // For each unassigned sector\n // walk to further sectors of the same vertex with near-parallel normals, accumulating average normal.\n // notate all sectors in the cluster with the averaged-normal structure.\n const clusters: IndexedAreaAndNormal[] = [];\n let toleranceRadians = toleranceAngle.radians;\n if (toleranceRadians < 0.0001)\n toleranceRadians = 0.0001;\n\n let clusterIndex = 0;\n for (let baseSectorIndex = 0; baseSectorIndex < sectors.length; baseSectorIndex++) {\n const baseData = sectors[baseSectorIndex];\n const vertexIndex = baseData.vertexIndex;\n const baseFacetData = baseData.facetData;\n if (baseData.sectorClusterData === undefined) {\n const clusterNormal = new IndexedAreaAndNormal(clusterIndex++, 0.0, Vector3d.createZero());\n clusters.push(clusterNormal);\n // Accumulate with equal weights . . .\n clusterNormal.addWeightedNormal(1.0, baseData.facetData.normal.clone());\n for (let candidateSectorIndex = baseSectorIndex;\n candidateSectorIndex < sectors.length;\n candidateSectorIndex++) {\n const candidateSector = sectors[candidateSectorIndex];\n if (candidateSector.vertexIndex !== vertexIndex)\n break;\n if (candidateSector.facetData.normal.angleTo(baseFacetData.normal).radians > toleranceRadians)\n continue;\n if (candidateSector.sectorClusterData === undefined) {\n clusterNormal.addWeightedNormal(1.0, candidateSector.facetData.normal);\n candidateSector.sectorClusterData = clusterNormal;\n }\n }\n }\n }\n // Resort by original sector index.\n sectors.sort((left, right) => SectorData.cbSectorSort(left, right));\n // normalize the sums and emplace in the facets . . .\n polyface.data.normalIndex = [];\n polyface.data.normal = new GrowableXYZArray(sectors.length);\n for (const cluster of clusters) {\n cluster.divideNormalByArea();\n cluster.index = polyface.data.normal.length;\n polyface.data.normal.push(cluster.normal);\n }\n // emplace the indices\n for (const sector of sectors) {\n polyface.data.normalIndex.push(sector.sectorClusterData!.index);\n }\n }\n /**\n * Set up indexed normals with one normal in the plane of each facet of the mesh.\n * @param polyface mesh to modify\n */\n public static buildPerFaceNormals(polyface: IndexedPolyface) {\n const visitor = polyface.createVisitor(0);\n const facetNormal = Vector3d.create(0, 0, 1);\n const defaultNormal = Vector3d.create(0, 0, 1);\n // polyface.data.clearNormals();\n const newNormals = new GrowableXYZArray(polyface.faceCount);\n const newIndices: number[] = [];\n while (visitor.moveToNextFacet()) {\n const thisNormalIndex = newNormals.length;\n if (PolygonOps.unitNormal(visitor.point, facetNormal))\n newNormals.push(facetNormal);\n else\n newNormals.push(defaultNormal);\n for (let i = 0; i < visitor.pointCount; i++)\n newIndices.push(thisNormalIndex);\n }\n polyface.data.normalIndex = newIndices;\n polyface.data.normal = newNormals;\n }\n}\n"]}
|
|
@@ -3,43 +3,48 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Range2d, Range3d } from "../../geometry3d/Range";
|
|
5
5
|
import { LowAndHighXY } from "../../geometry3d/XYZProps";
|
|
6
|
-
import {
|
|
7
|
-
export type OptionalLinearSearchRange2dArray<T> = LinearSearchRange2dArray<T> | undefined;
|
|
6
|
+
import { Range2dSearchInterface } from "./Range2dSearchInterface";
|
|
8
7
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
|
|
8
|
+
* Type abbreviation to allow undefined as a Range2dSearchInterface parameter.
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export type OptionalRange2dSearchInterface<T> = Range2dSearchInterface<T> | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* A GriddedRaggedRange2dSet is:
|
|
14
|
+
* * A doubly dimensioned array of Range2dSearchInterface.
|
|
15
|
+
* * Each entry represents a block in a uniform grid within the master range.
|
|
12
16
|
* * Member ranges are noted in the grid block containing the range's lower left corner.
|
|
13
17
|
* * Member ranges larger than twice the grid size are rejected by the insert method.
|
|
14
18
|
* * Hence a search involving a point in grid block (i,j) must examine ranges in grid blocks left and below, i.e. (i-1,j-1), (i-1,j), (i,j-1)
|
|
15
|
-
* @
|
|
19
|
+
* @public
|
|
16
20
|
*/
|
|
17
|
-
export declare class GriddedRaggedRange2dSet<T> {
|
|
21
|
+
export declare class GriddedRaggedRange2dSet<T> implements Range2dSearchInterface<T> {
|
|
18
22
|
private _range;
|
|
19
23
|
private _numXEdge;
|
|
20
24
|
private _numYEdge;
|
|
21
|
-
/** Each grid block is a simple linear search set
|
|
22
|
-
*
|
|
23
|
-
*/
|
|
25
|
+
/** Each grid block is a simple linear search set */
|
|
24
26
|
private _rangesInBlock;
|
|
27
|
+
private static _workRange?;
|
|
25
28
|
private constructor();
|
|
26
29
|
/**
|
|
27
30
|
* Create an (empty) set of ranges.
|
|
28
|
-
* @param range
|
|
29
|
-
* @param numXEdge
|
|
30
|
-
* @param numYEdge
|
|
31
|
+
* @param range master range
|
|
32
|
+
* @param numXEdge size of grid in x direction
|
|
33
|
+
* @param numYEdge size of grid in y direction
|
|
31
34
|
*/
|
|
32
35
|
static create<T>(range: Range2d, numXEdge: number, numYEdge: number): GriddedRaggedRange2dSet<T> | undefined;
|
|
33
36
|
private xIndex;
|
|
34
37
|
private yIndex;
|
|
35
38
|
private getBlock;
|
|
36
39
|
/** If possible, insert a range into the set.
|
|
37
|
-
* * Decline to insert (and return false) if
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
40
|
+
* * Decline to insert (and return false) if:
|
|
41
|
+
* * range is null
|
|
42
|
+
* * range is not completely contained in the overall range of this set
|
|
43
|
+
* * range x or y extent is larger than 2 grid blocks
|
|
41
44
|
*/
|
|
42
|
-
conditionalInsert(range: Range2d | Range3d, tag: T): boolean;
|
|
45
|
+
conditionalInsert(range: Range2d | Range3d | LowAndHighXY, tag: T): boolean;
|
|
46
|
+
/** Add a range to the search set. */
|
|
47
|
+
addRange(range: LowAndHighXY, tag: T): void;
|
|
43
48
|
/**
|
|
44
49
|
* * Search a single block
|
|
45
50
|
* * Pass each range and tag to handler
|
|
@@ -76,6 +81,9 @@ export declare class GriddedRaggedRange2dSet<T> {
|
|
|
76
81
|
* @return false if search terminated by handler. Return true if no handler returned false.
|
|
77
82
|
*/
|
|
78
83
|
searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean;
|
|
79
|
-
|
|
84
|
+
/** Return the overall range of all members. */
|
|
85
|
+
totalRange(result?: Range2d): Range2d;
|
|
86
|
+
/** Call the handler on each defined block in the grid. */
|
|
87
|
+
visitChildren(initialDepth: number, handler: (depth: number, child: Range2dSearchInterface<T>) => void): void;
|
|
80
88
|
}
|
|
81
89
|
//# sourceMappingURL=GriddedRaggedRange2dSet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GriddedRaggedRange2dSet.d.ts","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"GriddedRaggedRange2dSet.d.ts","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,8BAA8B,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAEtF;;;;;;;;GAQG;AACH,qBAAa,uBAAuB,CAAC,CAAC,CAAE,YAAW,sBAAsB,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,oDAAoD;IACpD,OAAO,CAAC,cAAc,CAAkD;IACxE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAU;IACpC,OAAO;IAaP;;;;;OAKG;WACW,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC,GAAG,SAAS;IAKnH,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,QAAQ;IAQhB;;;;;OAKG;IACI,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO;IAoBlF,qCAAqC;IAC9B,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAGlD;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAM9B;;;;;;;OAOG;IACH,OAAO,CAAC,2BAA2B;IAMnC;;;;;;;OAOG;IACI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO;IAQ5F;;;;;;;OAOG;IACI,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO;IAapG,+CAA+C;IACxC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAW5C,0DAA0D;IACnD,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI;CAQ9G"}
|
|
@@ -5,15 +5,16 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module RangeSearch
|
|
7
7
|
*/
|
|
8
|
+
import { Range2d } from "../../geometry3d/Range";
|
|
8
9
|
import { LinearSearchRange2dArray } from "./LinearSearchRange2dArray";
|
|
9
10
|
/**
|
|
10
|
-
* A GriddedRaggedRange2dSet is
|
|
11
|
-
* * A doubly dimensioned array of
|
|
12
|
-
* * Each entry represents a block in a uniform grid within the master range
|
|
11
|
+
* A GriddedRaggedRange2dSet is:
|
|
12
|
+
* * A doubly dimensioned array of Range2dSearchInterface.
|
|
13
|
+
* * Each entry represents a block in a uniform grid within the master range.
|
|
13
14
|
* * Member ranges are noted in the grid block containing the range's lower left corner.
|
|
14
15
|
* * Member ranges larger than twice the grid size are rejected by the insert method.
|
|
15
16
|
* * Hence a search involving a point in grid block (i,j) must examine ranges in grid blocks left and below, i.e. (i-1,j-1), (i-1,j), (i,j-1)
|
|
16
|
-
* @
|
|
17
|
+
* @public
|
|
17
18
|
*/
|
|
18
19
|
export class GriddedRaggedRange2dSet {
|
|
19
20
|
constructor(range, numXEdge, numYEdge) {
|
|
@@ -31,9 +32,9 @@ export class GriddedRaggedRange2dSet {
|
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
33
34
|
* Create an (empty) set of ranges.
|
|
34
|
-
* @param range
|
|
35
|
-
* @param numXEdge
|
|
36
|
-
* @param numYEdge
|
|
35
|
+
* @param range master range
|
|
36
|
+
* @param numXEdge size of grid in x direction
|
|
37
|
+
* @param numYEdge size of grid in y direction
|
|
37
38
|
*/
|
|
38
39
|
static create(range, numXEdge, numYEdge) {
|
|
39
40
|
if (numXEdge < 1 || numYEdge < 1 || range.isNull || range.isSinglePoint)
|
|
@@ -57,13 +58,13 @@ export class GriddedRaggedRange2dSet {
|
|
|
57
58
|
return undefined;
|
|
58
59
|
}
|
|
59
60
|
/** If possible, insert a range into the set.
|
|
60
|
-
* * Decline to insert (and return false) if
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
61
|
+
* * Decline to insert (and return false) if:
|
|
62
|
+
* * range is null
|
|
63
|
+
* * range is not completely contained in the overall range of this set
|
|
64
|
+
* * range x or y extent is larger than 2 grid blocks
|
|
64
65
|
*/
|
|
65
66
|
conditionalInsert(range, tag) {
|
|
66
|
-
if (
|
|
67
|
+
if (Range2d.isNull(range))
|
|
67
68
|
return false;
|
|
68
69
|
if (!this._range.containsRange(range))
|
|
69
70
|
return false;
|
|
@@ -82,6 +83,10 @@ export class GriddedRaggedRange2dSet {
|
|
|
82
83
|
}
|
|
83
84
|
return false;
|
|
84
85
|
}
|
|
86
|
+
/** Add a range to the search set. */
|
|
87
|
+
addRange(range, tag) {
|
|
88
|
+
this.conditionalInsert(range, tag);
|
|
89
|
+
}
|
|
85
90
|
/**
|
|
86
91
|
* * Search a single block
|
|
87
92
|
* * Pass each range and tag to handler
|
|
@@ -147,6 +152,19 @@ export class GriddedRaggedRange2dSet {
|
|
|
147
152
|
}
|
|
148
153
|
return true;
|
|
149
154
|
}
|
|
155
|
+
/** Return the overall range of all members. */
|
|
156
|
+
totalRange(result) {
|
|
157
|
+
if (result)
|
|
158
|
+
result.setNull();
|
|
159
|
+
else
|
|
160
|
+
result = Range2d.createNull();
|
|
161
|
+
this.visitChildren(0, (_depth, child) => {
|
|
162
|
+
const childRange = GriddedRaggedRange2dSet._workRange = child.totalRange(GriddedRaggedRange2dSet._workRange);
|
|
163
|
+
result.extendRange(childRange);
|
|
164
|
+
});
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
/** Call the handler on each defined block in the grid. */
|
|
150
168
|
visitChildren(initialDepth, handler) {
|
|
151
169
|
for (const row of this._rangesInBlock) {
|
|
152
170
|
for (const block of row) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GriddedRaggedRange2dSet.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSet.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 RangeSearch\r\n */\r\n\r\nimport { Range2d, Range3d } from \"../../geometry3d/Range\";\r\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\r\nimport { LinearSearchRange2dArray } from \"./LinearSearchRange2dArray\";\r\n\r\nexport type OptionalLinearSearchRange2dArray<T> = LinearSearchRange2dArray<T> | undefined;\r\n/**\r\n * A GriddedRaggedRange2dSet is\r\n * * A doubly dimensioned array of LinearSearchRange2dArray\r\n * * Each entry represents a block in a uniform grid within the master range of the GriddedRaggedRange2dSet.\r\n * * Member ranges are noted in the grid block containing the range's lower left corner.\r\n * * Member ranges larger than twice the grid size are rejected by the insert method.\r\n * * Hence a search involving a point in grid block (i,j) must examine ranges in grid blocks left and below, i.e. (i-1,j-1), (i-1,j), (i,j-1)\r\n * @internal\r\n */\r\nexport class GriddedRaggedRange2dSet<T> {\r\n private _range: Range2d;\r\n private _numXEdge: number;\r\n private _numYEdge: number;\r\n /** Each grid block is a simple linear search set\r\n *\r\n */\r\n private _rangesInBlock: Array<Array<OptionalLinearSearchRange2dArray<T>>>;\r\n private constructor(range: Range2d, numXEdge: number, numYEdge: number) {\r\n this._range = range;\r\n this._numXEdge = numXEdge;\r\n this._numYEdge = numYEdge;\r\n this._rangesInBlock = [];\r\n for (let j = 0; j < this._numYEdge; j++) {\r\n const thisRow: Array<OptionalLinearSearchRange2dArray<T>> = [];\r\n for (let i = 0; i < this._numXEdge; i++) {\r\n thisRow.push(undefined);\r\n }\r\n this._rangesInBlock.push(thisRow);\r\n }\r\n }\r\n /**\r\n * Create an (empty) set of ranges.\r\n * @param range\r\n * @param numXEdge\r\n * @param numYEdge\r\n */\r\n public static create<T>(range: Range2d, numXEdge: number, numYEdge: number): GriddedRaggedRange2dSet<T> | undefined {\r\n if (numXEdge < 1 || numYEdge < 1 || range.isNull || range.isSinglePoint)\r\n return undefined;\r\n return new GriddedRaggedRange2dSet(range.clone(), numXEdge, numYEdge);\r\n }\r\n private xIndex(x: number): number {\r\n const fraction = (x - this._range.low.x) / (this._range.high.x - this._range.low.x);\r\n return Math.floor(fraction * this._numXEdge);\r\n }\r\n private yIndex(y: number): number {\r\n const fraction = (y - this._range.low.y) / (this._range.high.y - this._range.low.y);\r\n return Math.floor(fraction * this._numXEdge);\r\n }\r\n private getBlock(i: number, j: number): LinearSearchRange2dArray<T> | undefined {\r\n if (i >= 0 && i < this._numXEdge && j >= 0 && j < this._numYEdge) {\r\n if (!this._rangesInBlock[j][i])\r\n this._rangesInBlock[j][i] = new LinearSearchRange2dArray();\r\n return this._rangesInBlock[j][i];\r\n }\r\n return undefined;\r\n }\r\n /** If possible, insert a range into the set.\r\n * * Decline to insert (and return false) if\r\n * * range is null\r\n * * range is not completely contained in the overall range of this set.\r\n * * range x or y extent is larger than 2 grid blocks.\r\n */\r\n public conditionalInsert(range: Range2d | Range3d, tag: T): boolean {\r\n if (range.isNull)\r\n return false;\r\n if (!this._range.containsRange(range))\r\n return false;\r\n const xIndex0 = this.xIndex(range.low.x);\r\n const xIndex1 = this.xIndex(range.high.x);\r\n const yIndex0 = this.yIndex(range.low.y);\r\n const yIndex1 = this.yIndex(range.high.y);\r\n if (!(xIndex0 === xIndex1 || xIndex0 + 1 === xIndex1))\r\n return false;\r\n if (!(yIndex0 === yIndex1 || yIndex0 + 1 === yIndex1))\r\n return false;\r\n const rangesInBlock = this.getBlock(xIndex0, yIndex0);\r\n if (rangesInBlock) {\r\n rangesInBlock.addRange(range, tag);\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * * Search a single block\r\n * * Pass each range and tag to handler\r\n * * and return false if bad cell or if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n private searchXYInIndexedBlock(i: number, j: number, x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n const rangesInBlock = this.getBlock(i, j);\r\n if (!rangesInBlock)\r\n return true;\r\n return rangesInBlock.searchXY(x, y, handler);\r\n }\r\n /**\r\n * * Search a single block\r\n * * Pass each range and tag to handler\r\n * * and return false if bad cell or if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n private searchRange2dInIndexedBlock(i: number, j: number, testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n const rangesInBlock = this.getBlock(i, j);\r\n if (!rangesInBlock)\r\n return true;\r\n return rangesInBlock.searchRange2d(testRange, handler);\r\n }\r\n /**\r\n * * Search for ranges containing testRange\r\n * * Pass each range and tag to handler\r\n * * terminate search if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n public searchXY(x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n const i = this.xIndex(x);\r\n const j = this.yIndex(y);\r\n return this.searchXYInIndexedBlock(i, j, x, y, handler)\r\n && this.searchXYInIndexedBlock(i - 1, j, x, y, handler)\r\n && this.searchXYInIndexedBlock(i, j - 1, x, y, handler)\r\n && this.searchXYInIndexedBlock(i - 1, j - 1, x, y, handler);\r\n }\r\n /**\r\n * * Search for ranges overlapping testRange\r\n * * Pass each range and tag to handler\r\n * * terminate search if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n public searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n const xIndex0 = this.xIndex(testRange.low.x) - 1;\r\n const xIndex1 = this.xIndex(testRange.high.x);\r\n const yIndex0 = this.yIndex(testRange.low.y) - 1;\r\n const yIndex1 = this.yIndex(testRange.high.y);\r\n for (let i = xIndex0; i <= xIndex1; i++) {\r\n for (let j = yIndex0; j <= yIndex1; j++) {\r\n if (!this.searchRange2dInIndexedBlock(i, j, testRange, handler))\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n public visitChildren(initialDepth: number, handler: (depth: number, child: LinearSearchRange2dArray<T>) => void) {\r\n for (const row of this._rangesInBlock) {\r\n for (const block of row) {\r\n if (block)\r\n handler(initialDepth, block);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"GriddedRaggedRange2dSet.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSet.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 RangeSearch\n */\n\nimport { Range2d, Range3d } from \"../../geometry3d/Range\";\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\nimport { LinearSearchRange2dArray } from \"./LinearSearchRange2dArray\";\nimport { Range2dSearchInterface } from \"./Range2dSearchInterface\";\n\n/**\n * Type abbreviation to allow undefined as a Range2dSearchInterface parameter.\n * @internal\n */\nexport type OptionalRange2dSearchInterface<T> = Range2dSearchInterface<T> | undefined;\n\n/**\n * A GriddedRaggedRange2dSet is:\n * * A doubly dimensioned array of Range2dSearchInterface.\n * * Each entry represents a block in a uniform grid within the master range.\n * * Member ranges are noted in the grid block containing the range's lower left corner.\n * * Member ranges larger than twice the grid size are rejected by the insert method.\n * * Hence a search involving a point in grid block (i,j) must examine ranges in grid blocks left and below, i.e. (i-1,j-1), (i-1,j), (i,j-1)\n * @public\n */\nexport class GriddedRaggedRange2dSet<T> implements Range2dSearchInterface<T> {\n private _range: Range2d;\n private _numXEdge: number;\n private _numYEdge: number;\n /** Each grid block is a simple linear search set */\n private _rangesInBlock: Array<Array<OptionalRange2dSearchInterface<T>>>;\n private static _workRange?: Range2d;\n private constructor(range: Range2d, numXEdge: number, numYEdge: number) {\n this._range = range;\n this._numXEdge = numXEdge;\n this._numYEdge = numYEdge;\n this._rangesInBlock = [];\n for (let j = 0; j < this._numYEdge; j++) {\n const thisRow: Array<OptionalRange2dSearchInterface<T>> = [];\n for (let i = 0; i < this._numXEdge; i++) {\n thisRow.push(undefined);\n }\n this._rangesInBlock.push(thisRow);\n }\n }\n /**\n * Create an (empty) set of ranges.\n * @param range master range\n * @param numXEdge size of grid in x direction\n * @param numYEdge size of grid in y direction\n */\n public static create<T>(range: Range2d, numXEdge: number, numYEdge: number): GriddedRaggedRange2dSet<T> | undefined {\n if (numXEdge < 1 || numYEdge < 1 || range.isNull || range.isSinglePoint)\n return undefined;\n return new GriddedRaggedRange2dSet(range.clone(), numXEdge, numYEdge);\n }\n private xIndex(x: number): number {\n const fraction = (x - this._range.low.x) / (this._range.high.x - this._range.low.x);\n return Math.floor(fraction * this._numXEdge);\n }\n private yIndex(y: number): number {\n const fraction = (y - this._range.low.y) / (this._range.high.y - this._range.low.y);\n return Math.floor(fraction * this._numXEdge);\n }\n private getBlock(i: number, j: number): OptionalRange2dSearchInterface<T> {\n if (i >= 0 && i < this._numXEdge && j >= 0 && j < this._numYEdge) {\n if (!this._rangesInBlock[j][i])\n this._rangesInBlock[j][i] = new LinearSearchRange2dArray();\n return this._rangesInBlock[j][i];\n }\n return undefined;\n }\n /** If possible, insert a range into the set.\n * * Decline to insert (and return false) if:\n * * range is null\n * * range is not completely contained in the overall range of this set\n * * range x or y extent is larger than 2 grid blocks\n */\n public conditionalInsert(range: Range2d | Range3d | LowAndHighXY, tag: T): boolean {\n if (Range2d.isNull(range))\n return false;\n if (!this._range.containsRange(range))\n return false;\n const xIndex0 = this.xIndex(range.low.x);\n const xIndex1 = this.xIndex(range.high.x);\n const yIndex0 = this.yIndex(range.low.y);\n const yIndex1 = this.yIndex(range.high.y);\n if (!(xIndex0 === xIndex1 || xIndex0 + 1 === xIndex1))\n return false;\n if (!(yIndex0 === yIndex1 || yIndex0 + 1 === yIndex1))\n return false;\n const rangesInBlock = this.getBlock(xIndex0, yIndex0);\n if (rangesInBlock) {\n rangesInBlock.addRange(range, tag);\n return true;\n }\n return false;\n }\n /** Add a range to the search set. */\n public addRange(range: LowAndHighXY, tag: T): void {\n this.conditionalInsert(range, tag);\n }\n /**\n * * Search a single block\n * * Pass each range and tag to handler\n * * and return false if bad cell or if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n private searchXYInIndexedBlock(i: number, j: number, x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\n const rangesInBlock = this.getBlock(i, j);\n if (!rangesInBlock)\n return true;\n return rangesInBlock.searchXY(x, y, handler);\n }\n /**\n * * Search a single block\n * * Pass each range and tag to handler\n * * and return false if bad cell or if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n private searchRange2dInIndexedBlock(i: number, j: number, testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\n const rangesInBlock = this.getBlock(i, j);\n if (!rangesInBlock)\n return true;\n return rangesInBlock.searchRange2d(testRange, handler);\n }\n /**\n * * Search for ranges containing testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchXY(x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\n const i = this.xIndex(x);\n const j = this.yIndex(y);\n return this.searchXYInIndexedBlock(i, j, x, y, handler)\n && this.searchXYInIndexedBlock(i - 1, j, x, y, handler)\n && this.searchXYInIndexedBlock(i, j - 1, x, y, handler)\n && this.searchXYInIndexedBlock(i - 1, j - 1, x, y, handler);\n }\n /**\n * * Search for ranges overlapping testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\n const xIndex0 = this.xIndex(testRange.low.x) - 1;\n const xIndex1 = this.xIndex(testRange.high.x);\n const yIndex0 = this.yIndex(testRange.low.y) - 1;\n const yIndex1 = this.yIndex(testRange.high.y);\n for (let i = xIndex0; i <= xIndex1; i++) {\n for (let j = yIndex0; j <= yIndex1; j++) {\n if (!this.searchRange2dInIndexedBlock(i, j, testRange, handler))\n return false;\n }\n }\n return true;\n }\n /** Return the overall range of all members. */\n public totalRange(result?: Range2d): Range2d {\n if (result)\n result.setNull();\n else\n result = Range2d.createNull();\n this.visitChildren(0, (_depth, child) => {\n const childRange = GriddedRaggedRange2dSet._workRange = child.totalRange(GriddedRaggedRange2dSet._workRange);\n result!.extendRange(childRange);\n });\n return result;\n }\n /** Call the handler on each defined block in the grid. */\n public visitChildren(initialDepth: number, handler: (depth: number, child: Range2dSearchInterface<T>) => void) {\n for (const row of this._rangesInBlock) {\n for (const block of row) {\n if (block)\n handler(initialDepth, block);\n }\n }\n }\n}\n"]}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module RangeSearch
|
|
3
3
|
*/
|
|
4
|
-
import { Range2d
|
|
4
|
+
import { Range2d } from "../../geometry3d/Range";
|
|
5
5
|
import { LowAndHighXY } from "../../geometry3d/XYZProps";
|
|
6
|
-
import {
|
|
6
|
+
import { Range2dSearchInterface } from "./Range2dSearchInterface";
|
|
7
7
|
/**
|
|
8
|
-
* Use GriddedRaggedRange2dSetWithOverflow for searching among many ranges for which
|
|
8
|
+
* Use GriddedRaggedRange2dSetWithOverflow for searching among many ranges for which:
|
|
9
9
|
* * Most ranges are of somewhat consistent size.
|
|
10
10
|
* * A modest number of oversizes.
|
|
11
11
|
* * Maintain the smallish ones in a GriddedRaggedRange2dSet.
|
|
12
|
-
* * Maintain the overflows in a
|
|
13
|
-
* @
|
|
12
|
+
* * Maintain the overflows in a Range2dSearchInterface.
|
|
13
|
+
* @public
|
|
14
14
|
*/
|
|
15
|
-
export declare class GriddedRaggedRange2dSetWithOverflow<T> {
|
|
15
|
+
export declare class GriddedRaggedRange2dSetWithOverflow<T> implements Range2dSearchInterface<T> {
|
|
16
16
|
private _gridSet;
|
|
17
17
|
private _overflowSet;
|
|
18
|
+
private static _workRange?;
|
|
18
19
|
private constructor();
|
|
19
20
|
/**
|
|
20
21
|
* Create an (empty) set of ranges.
|
|
@@ -47,7 +48,10 @@ export declare class GriddedRaggedRange2dSetWithOverflow<T> {
|
|
|
47
48
|
* * range is not completely contained in the overall range of this set.
|
|
48
49
|
* * range x or y extent is larger than 2 grid blocks.
|
|
49
50
|
*/
|
|
50
|
-
addRange(range:
|
|
51
|
-
|
|
51
|
+
addRange(range: LowAndHighXY, tag: T): void;
|
|
52
|
+
/** Return the overall range of all members. */
|
|
53
|
+
totalRange(result?: Range2d): Range2d;
|
|
54
|
+
/** Call the handler on the overflow set, and on each defined block in the grid. */
|
|
55
|
+
visitChildren(initialDepth: number, handler: (depth: number, child: Range2dSearchInterface<T>) => void): void;
|
|
52
56
|
}
|
|
53
57
|
//# sourceMappingURL=GriddedRaggedRange2dSetWithOverflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GriddedRaggedRange2dSetWithOverflow.d.ts","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"GriddedRaggedRange2dSetWithOverflow.d.ts","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;;;;GAOG;AACH,qBAAa,mCAAmC,CAAC,CAAC,CAAE,YAAW,sBAAsB,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAU;IACpC,OAAO;IAIP;;;;;OAKG;WACW,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mCAAmC,CAAC,CAAC,CAAC,GAAG,SAAS;IAM/H;;;;;;;OAOG;IACI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO;IAG5F;;;;;;;OAOG;IACI,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO;IAGpG;;;;;OAKG;IACI,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAMlD,+CAA+C;IACxC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAW5C,mFAAmF;IAC5E,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI;CAI9G"}
|
|
@@ -5,15 +5,16 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module RangeSearch
|
|
7
7
|
*/
|
|
8
|
+
import { Range2d } from "../../geometry3d/Range";
|
|
8
9
|
import { GriddedRaggedRange2dSet } from "./GriddedRaggedRange2dSet";
|
|
9
10
|
import { LinearSearchRange2dArray } from "./LinearSearchRange2dArray";
|
|
10
11
|
/**
|
|
11
|
-
* Use GriddedRaggedRange2dSetWithOverflow for searching among many ranges for which
|
|
12
|
+
* Use GriddedRaggedRange2dSetWithOverflow for searching among many ranges for which:
|
|
12
13
|
* * Most ranges are of somewhat consistent size.
|
|
13
14
|
* * A modest number of oversizes.
|
|
14
15
|
* * Maintain the smallish ones in a GriddedRaggedRange2dSet.
|
|
15
|
-
* * Maintain the overflows in a
|
|
16
|
-
* @
|
|
16
|
+
* * Maintain the overflows in a Range2dSearchInterface.
|
|
17
|
+
* @public
|
|
17
18
|
*/
|
|
18
19
|
export class GriddedRaggedRange2dSetWithOverflow {
|
|
19
20
|
constructor(gridSet, overflowSet) {
|
|
@@ -61,11 +62,24 @@ export class GriddedRaggedRange2dSetWithOverflow {
|
|
|
61
62
|
* * range x or y extent is larger than 2 grid blocks.
|
|
62
63
|
*/
|
|
63
64
|
addRange(range, tag) {
|
|
64
|
-
if (!
|
|
65
|
+
if (!Range2d.isNull(range)) {
|
|
65
66
|
if (!this._gridSet.conditionalInsert(range, tag))
|
|
66
67
|
this._overflowSet.addRange(range, tag);
|
|
67
68
|
}
|
|
68
69
|
}
|
|
70
|
+
/** Return the overall range of all members. */
|
|
71
|
+
totalRange(result) {
|
|
72
|
+
if (result)
|
|
73
|
+
result.setNull();
|
|
74
|
+
else
|
|
75
|
+
result = Range2d.createNull();
|
|
76
|
+
this.visitChildren(0, (_depth, child) => {
|
|
77
|
+
const childRange = GriddedRaggedRange2dSetWithOverflow._workRange = child.totalRange(GriddedRaggedRange2dSetWithOverflow._workRange);
|
|
78
|
+
result.extendRange(childRange);
|
|
79
|
+
});
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/** Call the handler on the overflow set, and on each defined block in the grid. */
|
|
69
83
|
visitChildren(initialDepth, handler) {
|
|
70
84
|
handler(initialDepth, this._overflowSet);
|
|
71
85
|
this._gridSet.visitChildren(initialDepth + 1, handler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GriddedRaggedRange2dSetWithOverflow.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;
|
|
1
|
+
{"version":3,"file":"GriddedRaggedRange2dSetWithOverflow.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE;;;;;;;GAOG;AACH,MAAM,OAAO,mCAAmC;IAI9C,YAAoB,OAAmC,EAAE,WAAsC;QAC7F,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,MAAM,CAAI,KAAc,EAAE,QAAgB,EAAE,QAAgB;QACxE,MAAM,KAAK,GAAG,uBAAuB,CAAC,MAAM,CAAI,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnF,IAAI,KAAK;YACP,OAAO,IAAI,mCAAmC,CAAI,KAAK,EAAE,IAAI,wBAAwB,EAAK,CAAC,CAAC;QAC9F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;OAOG;IACI,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,OAA4C;QAChF,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5F,CAAC;IACD;;;;;;;OAOG;IACI,aAAa,CAAC,SAAuB,EAAE,OAA4C;QACxF,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChH,CAAC;IACD;;;;;OAKG;IACI,QAAQ,CAAC,KAAmB,EAAE,GAAM;QACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC9C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SAC1C;IACH,CAAC;IACD,+CAA+C;IACxC,UAAU,CAAC,MAAgB;QAChC,IAAI,MAAM;YACR,MAAM,CAAC,OAAO,EAAE,CAAC;;YAEjB,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACtC,MAAM,UAAU,GAAG,mCAAmC,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,mCAAmC,CAAC,UAAU,CAAC,CAAC;YACrI,MAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,mFAAmF;IAC5E,aAAa,CAAC,YAAoB,EAAE,OAAkE;QAC3G,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RangeSearch\n */\n\nimport { Range2d } from \"../../geometry3d/Range\";\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\nimport { GriddedRaggedRange2dSet } from \"./GriddedRaggedRange2dSet\";\nimport { LinearSearchRange2dArray } from \"./LinearSearchRange2dArray\";\nimport { Range2dSearchInterface } from \"./Range2dSearchInterface\";\n\n/**\n * Use GriddedRaggedRange2dSetWithOverflow for searching among many ranges for which:\n * * Most ranges are of somewhat consistent size.\n * * A modest number of oversizes.\n * * Maintain the smallish ones in a GriddedRaggedRange2dSet.\n * * Maintain the overflows in a Range2dSearchInterface.\n * @public\n */\nexport class GriddedRaggedRange2dSetWithOverflow<T> implements Range2dSearchInterface<T> {\n private _gridSet: GriddedRaggedRange2dSet<T>;\n private _overflowSet: Range2dSearchInterface<T>;\n private static _workRange?: Range2d;\n private constructor(gridSet: GriddedRaggedRange2dSet<T>, overflowSet: Range2dSearchInterface<T>) {\n this._gridSet = gridSet;\n this._overflowSet = overflowSet;\n }\n /**\n * Create an (empty) set of ranges.\n * @param range\n * @param numXEdge\n * @param numYEdge\n */\n public static create<T>(range: Range2d, numXEdge: number, numYEdge: number): GriddedRaggedRange2dSetWithOverflow<T> | undefined {\n const grids = GriddedRaggedRange2dSet.create<T>(range.clone(), numXEdge, numYEdge);\n if (grids)\n return new GriddedRaggedRange2dSetWithOverflow<T>(grids, new LinearSearchRange2dArray<T>());\n return undefined;\n }\n /**\n * * Search for ranges containing testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchXY(x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\n return this._gridSet.searchXY(x, y, handler) && this._overflowSet.searchXY(x, y, handler);\n }\n /**\n * * Search for ranges overlapping testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\n return this._gridSet.searchRange2d(testRange, handler) && this._overflowSet.searchRange2d(testRange, handler);\n }\n /** If possible, insert a range into the set.\n * * Decline to insert (and return false) if\n * * range is null\n * * range is not completely contained in the overall range of this set.\n * * range x or y extent is larger than 2 grid blocks.\n */\n public addRange(range: LowAndHighXY, tag: T): void {\n if (!Range2d.isNull(range)) {\n if (!this._gridSet.conditionalInsert(range, tag))\n this._overflowSet.addRange(range, tag);\n }\n }\n /** Return the overall range of all members. */\n public totalRange(result?: Range2d): Range2d {\n if (result)\n result.setNull();\n else\n result = Range2d.createNull();\n this.visitChildren(0, (_depth, child) => {\n const childRange = GriddedRaggedRange2dSetWithOverflow._workRange = child.totalRange(GriddedRaggedRange2dSetWithOverflow._workRange);\n result!.extendRange(childRange);\n });\n return result;\n }\n /** Call the handler on the overflow set, and on each defined block in the grid. */\n public visitChildren(initialDepth: number, handler: (depth: number, child: Range2dSearchInterface<T>) => void) {\n handler(initialDepth, this._overflowSet);\n this._gridSet.visitChildren(initialDepth + 1, handler);\n }\n}\n"]}
|
|
@@ -5,11 +5,10 @@ import { Range2d } from "../../geometry3d/Range";
|
|
|
5
5
|
import { LowAndHighXY } from "../../geometry3d/XYZProps";
|
|
6
6
|
import { Range2dSearchInterface } from "./Range2dSearchInterface";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
* *
|
|
8
|
+
* An array of decorated Range2d.
|
|
9
|
+
* * User data is attached to each range via `(myRange as any).tag = myTag`.
|
|
10
10
|
* * Search operations are simple linear.
|
|
11
11
|
* * This class can be used directly for "smallish" range sets, or as the leaf level of hierarchical structures for larger range sets.
|
|
12
|
-
* *
|
|
13
12
|
* @internal
|
|
14
13
|
*/
|
|
15
14
|
export declare class LinearSearchRange2dArray<T> implements Range2dSearchInterface<T> {
|
|
@@ -18,7 +17,7 @@ export declare class LinearSearchRange2dArray<T> implements Range2dSearchInterfa
|
|
|
18
17
|
private _compositeRange;
|
|
19
18
|
constructor();
|
|
20
19
|
private updateForSearch;
|
|
21
|
-
/** Return the overall range of all
|
|
20
|
+
/** Return the overall range of all members. */
|
|
22
21
|
totalRange(result?: Range2d): Range2d;
|
|
23
22
|
/** Add a range to the search set. */
|
|
24
23
|
addRange(range: LowAndHighXY, tag: T): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinearSearchRange2dArray.d.ts","sourceRoot":"","sources":["../../../../src/polyface/multiclip/LinearSearchRange2dArray.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"LinearSearchRange2dArray.d.ts","sourceRoot":"","sources":["../../../../src/polyface/multiclip/LinearSearchRange2dArray.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;;;GAMG;AACH,qBAAa,wBAAwB,CAAC,CAAC,CAAE,YAAW,sBAAsB,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,eAAe,CAAU;;IAOjC,OAAO,CAAC,eAAe;IAGvB,+CAA+C;IACxC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAG5C,qCAAqC;IAC9B,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IASlD;;;;;;;OAOG;IACI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO;IAW5F;;;;;;;OAOG;IACI,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO;CAUrG"}
|