@itwin/core-geometry 5.0.0-dev.32 → 5.0.0-dev.35
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 +6 -1
- package/lib/cjs/Constant.js +17 -17
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.js +35 -35
- 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.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.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.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.js +2 -2
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js +2 -2
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js +1 -1
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js +1 -1
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.js +1 -1
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js +3 -3
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.js +14 -14
- 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/CurveChainWithDistanceIndex.js +4 -4
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveTypes.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.js +5 -5
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- 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.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- 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/CurveCurveCloseApproachXY.js +5 -5
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +13 -13
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +5 -5
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.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/EllipticalArcApproximationContext.js +5 -5
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- 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.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +4 -4
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -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 +2 -2
- 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.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +16 -16
- 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.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +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.js +8 -8
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js +2 -2
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js.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.js +23 -23
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.js +4 -4
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.js.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.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 +13 -13
- package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
- package/lib/cjs/numerics/Complex.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.js +1 -1
- package/lib/cjs/numerics/PolarData.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.js +26 -26
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js +20 -20
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/Range1dArray.js.map +1 -1
- package/lib/cjs/numerics/SmallSystem.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 +67 -67
- 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 +2 -2
- package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +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.js +4 -4
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.js +5 -5
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +7 -7
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +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.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- 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.js.map +1 -1
- package/lib/cjs/polyface/multiclip/RangeSearch.js +5 -5
- package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -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 +22 -22
- 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.js +107 -107
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/serialization/SerializationHelpers.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.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js.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.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js +4 -4
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.js +5 -5
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +2 -2
- 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.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.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 +11 -11
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js +17 -17
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.js +35 -35
- 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.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.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.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.js +2 -2
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.js +2 -2
- package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.js +1 -1
- package/lib/esm/clipping/ClipPlane.js.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.js +1 -1
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ClipVector.js +1 -1
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js +3 -3
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.js +14 -14
- 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/CurveChainWithDistanceIndex.js +4 -4
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveExtendMode.js.map +1 -1
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/CurveProcessor.js.map +1 -1
- package/lib/esm/curve/CurveTypes.js.map +1 -1
- package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.js +5 -5
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js.map +1 -1
- 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.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- 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/CurveCurveCloseApproachXY.js +5 -5
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +13 -13
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +5 -5
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.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/EllipticalArcApproximationContext.js +5 -5
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- 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.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +4 -4
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -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 +2 -2
- 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.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.js +16 -16
- 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.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +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.js +8 -8
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js +2 -2
- package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Plane3d.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js.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.js +23 -23
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.js +4 -4
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.js.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.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 +13 -13
- package/lib/esm/numerics/ClusterableArray.js.map +1 -1
- package/lib/esm/numerics/Complex.js.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/PascalCoefficients.js +1 -1
- package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
- package/lib/esm/numerics/PolarData.js +1 -1
- package/lib/esm/numerics/PolarData.js.map +1 -1
- package/lib/esm/numerics/Polynomials.js +26 -26
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js +20 -20
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/numerics/Range1dArray.js.map +1 -1
- package/lib/esm/numerics/SmallSystem.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 +67 -67
- 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 +2 -2
- package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +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.js +4 -4
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceData.js +5 -5
- package/lib/esm/polyface/PolyfaceData.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +7 -7
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/RangeLengthData.js.map +1 -1
- package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +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.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- 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.js.map +1 -1
- package/lib/esm/polyface/multiclip/RangeSearch.js +5 -5
- package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -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 +22 -22
- 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.js +107 -107
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/serialization/SerializationHelpers.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.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.js.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.js.map +1 -1
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js +4 -4
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.js +5 -5
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js +2 -2
- 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.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.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 +11 -11
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SweepLineStringToFacetContext.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/SweepLineStringToFacetContext.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 { Transform } from \"../../geometry3d/Transform\";\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Segment1d } from \"../../geometry3d/Segment1d\";\nimport { AnnounceDrapePanel } from \"../PolyfaceQuery\";\nimport { Range3d } from \"../../geometry3d/Range\";\nimport { Geometry } from \"../../Geometry\";\nimport { Polyface } from \"../Polyface\";\nimport { ClipPlane } from \"../../clipping/ClipPlane\";\nimport { ConvexClipPlaneSet } from \"../../clipping/ConvexClipPlaneSet\";\nimport { IndexedXYZCollectionPolygonOps, Point3dArrayPolygonOps } from \"../../geometry3d/PolygonOps\";\nimport { Matrix3d } from \"../../geometry3d/Matrix3d\";\n\nexport class SweepLineStringToFacetContext {\n private _spacePoints: GrowableXYZArray;\n private _spacePointsRange: Range3d;\n private _numSpacePoints: number;\n private constructor(spacePoints: GrowableXYZArray) {\n this._spacePoints = spacePoints;\n this._spacePointsRange = new Range3d();\n spacePoints.setRange(this._spacePointsRange);\n this._numSpacePoints = this._spacePoints.length;\n }\n public static create(xyz: GrowableXYZArray): SweepLineStringToFacetContext | undefined {\n if (xyz.length > 1) {\n return new SweepLineStringToFacetContext(xyz.clone());\n }\n return undefined;\n }\n\n // temporaries reused over multiple calls to process a single facet . ..\n private _segmentPoint0 = Point3d.create();\n private _segmentPoint1 = Point3d.create();\n private _localSegmentPoint0 = Point3d.create();\n private _localSegmentPoint1 = Point3d.create();\n private _clipFractions = Segment1d.create(0, 1);\n private _localFrame = Transform.createIdentity();\n private _polygonRange = Range3d.create();\n\n /** process a single polygon.\n * @returns number crudely indicating how much work was done.\n */\n public projectToPolygon(polygon: GrowableXYZArray, announce: AnnounceDrapePanel, polyface: Polyface, readIndex: number): number {\n polygon.setRange(this._polygonRange);\n let workCounter = 0;\n if (!this._polygonRange.intersectsRangeXY(this._spacePointsRange))\n return workCounter;\n // numTest++;\n // For each triangle within the facet ...\n // remark: this loop only runs once in triangle mesh, twice in quads ...\n for (let k1 = 1; k1 + 1 < polygon.length; k1++) {\n workCounter++;\n const frame = polygon.fillLocalXYTriangleFrame(0, k1, k1 + 1, this._localFrame);\n if (frame) {\n // For each stroke of the linestring ...\n for (let i1 = 1; i1 < this._numSpacePoints; i1++) {\n workCounter++;\n this._spacePoints.getPoint3dAtCheckedPointIndex(i1 - 1, this._segmentPoint0);\n this._spacePoints.getPoint3dAtCheckedPointIndex(i1, this._segmentPoint1);\n frame.multiplyInversePoint3d(this._segmentPoint0, this._localSegmentPoint0);\n frame.multiplyInversePoint3d(this._segmentPoint1, this._localSegmentPoint1);\n this._clipFractions.set(0, 1);\n /** (x,y,1-x-y) are barycentric coordinates in the triangle !!! */\n if (this._clipFractions.clipBy01FunctionValuesPositive(this._localSegmentPoint0.x, this._localSegmentPoint1.x)\n && this._clipFractions.clipBy01FunctionValuesPositive(this._localSegmentPoint0.y, this._localSegmentPoint1.y)\n && this._clipFractions.clipBy01FunctionValuesPositive(\n 1 - this._localSegmentPoint0.x - this._localSegmentPoint0.y,\n 1 - this._localSegmentPoint1.x - this._localSegmentPoint1.y)) {\n /* project the local segment point to the plane. */\n workCounter++;\n const localClippedPointA = this._localSegmentPoint0.interpolate(this._clipFractions.x0, this._localSegmentPoint1);\n const localClippedPointB = this._localSegmentPoint0.interpolate(this._clipFractions.x1, this._localSegmentPoint1);\n const worldClippedPointA = this._localFrame.multiplyPoint3d(localClippedPointA);\n const worldClippedPointB = this._localFrame.multiplyPoint3d(localClippedPointB);\n const planePointA = this._localFrame.multiplyXYZ(localClippedPointA.x, localClippedPointA.y, 0.0);\n const planePointB = this._localFrame.multiplyXYZ(localClippedPointB.x, localClippedPointB.y, 0.0);\n const splitParameter = Geometry.inverseInterpolate01(this._localSegmentPoint0.z, this._localSegmentPoint1.z);\n // emit 1 or 2 panels, oriented so panel normal is always to the left of the line.\n if (splitParameter !== undefined && splitParameter > this._clipFractions.x0 && splitParameter < this._clipFractions.x1) {\n workCounter++;\n const piercePointX = this._segmentPoint0.interpolate(splitParameter, this._segmentPoint1);\n const piercePointY = piercePointX.clone(); // so points are distinct for the two triangle announcements.\n announce(this._spacePoints, i1 - 1, polyface, readIndex, [worldClippedPointA, piercePointX, planePointA], 2, 1);\n announce(this._spacePoints, i1 - 1, polyface, readIndex, [worldClippedPointB, piercePointY, planePointB], 1, 2);\n } else if (this._localSegmentPoint0.z > 0) { // segment is entirely above\n announce(this._spacePoints, i1 - 1, polyface, readIndex, [worldClippedPointA, worldClippedPointB, planePointB, planePointA], 3, 2);\n } else // segment is entirely under\n announce(this._spacePoints, i1 - 1, polyface, readIndex, [worldClippedPointB, worldClippedPointA, planePointA, planePointB], 2, 3);\n }\n }\n }\n }\n return workCounter;\n }\n}\n\n/**\n * Context for sweeping a line segment onto a convex polygon.\n * @internal\n */\nexport class EdgeClipData {\n /** Plane containing the edge and sweep vector */\n public edgePlane: ClipPlane;\n /** Two clip planes facing each other at each end of the edge */\n public clip: ConvexClipPlaneSet;\n /** work array for clipper method */\n private _crossingPoints: Point3d[];\n\n /** CAPTURE the planes */\n public constructor(edgePlane: ClipPlane, clip: ConvexClipPlaneSet) {\n this.edgePlane = edgePlane;\n this.clip = clip;\n this._crossingPoints = [];\n }\n /** create object from segment and sweep. Inputs are not captured. */\n public static createPointPointSweep(pointA: Point3d, pointB: Point3d, sweep: Vector3d): EdgeClipData | undefined {\n const edgeVector = Vector3d.createStartEnd(pointA, pointB);\n const fraction = edgeVector.fractionOfProjectionToVector(sweep);\n // The unbounded plane of the swept edge will intersect facets in lines that may extend beyond the swept bounded line.\n // That linework will be clipped between two facing planes with normal along the perpendicular dropped from the edge vector to the sweep vector.\n const clipNormal = edgeVector.plusScaled(sweep, -fraction);\n const planeA = ClipPlane.createNormalAndPoint(clipNormal, pointA);\n const planeB = ClipPlane.createNormalAndPoint(clipNormal, pointB);\n const edgePlane = ClipPlane.createOriginAndVectors(pointA, edgeVector, sweep);\n if (planeA !== undefined && planeB !== undefined && edgePlane !== undefined) {\n planeB.negateInPlace();\n const clipper = ConvexClipPlaneSet.createPlanes([planeA, planeB]);\n return new EdgeClipData(edgePlane, clipper);\n }\n return undefined;\n }\n\n /** Intersect this edge plane with the given convex polygon and announce the intersection segment to the callback. */\n public processPolygon(polygon: Point3d[] | GrowableXYZArray, announceEdge: (pointA: Point3d, pointB: Point3d) => void) {\n this._crossingPoints.length = 0;\n if (Array.isArray(polygon))\n Point3dArrayPolygonOps.polygonPlaneCrossings(this.edgePlane, polygon, this._crossingPoints);\n else\n IndexedXYZCollectionPolygonOps.polygonPlaneCrossings(this.edgePlane, polygon, this._crossingPoints);\n if (this._crossingPoints.length === 2) {\n // use the end planes to clip the [0,1] swept edge to [f0,f1]\n this.clip.announceClippedSegmentIntervals(0, 1, this._crossingPoints[0], this._crossingPoints[1],\n (f0: number, f1: number) => {\n announceEdge(this._crossingPoints[0].interpolate(f0, this._crossingPoints[1]),\n this._crossingPoints[0].interpolate(f1, this._crossingPoints[1]));\n },\n );\n }\n }\n}\n/**\n * Context for sweeping a line string onto a convex polygon.\n * @internal\n */\nexport class ClipSweptLineStringContext {\n private _edgeClippers: EdgeClipData[];\n private _localToWorld?: Transform;\n private _worldToLocal?: Transform;\n private _localRange?: Range3d;\n private constructor(edgeData: EdgeClipData[], localData: undefined | { localToWorld: Transform, worldToLocal: Transform, localRange: Range3d }) {\n this._edgeClippers = edgeData;\n if (localData !== undefined) {\n this._localToWorld = localData.localToWorld;\n this._worldToLocal = localData.worldToLocal;\n this._localRange = localData.localRange;\n }\n }\n public static create(xyz: GrowableXYZArray, sweepVector: Vector3d | undefined): ClipSweptLineStringContext | undefined {\n if (sweepVector === undefined)\n sweepVector = Vector3d.create(0, 0, 1);\n if (xyz.length > 1) {\n const point = Point3d.createZero();\n const newPoint = Point3d.createZero();\n const edgeData: EdgeClipData[] = [];\n xyz.getPoint3dAtUncheckedPointIndex(0, point);\n\n let localToWorldMatrix = Matrix3d.createRigidHeadsUp(sweepVector);\n if (localToWorldMatrix === undefined)\n localToWorldMatrix = Matrix3d.createIdentity();\n const localToWorld = Transform.createOriginAndMatrix(point, localToWorldMatrix);\n const worldToLocal = localToWorld.inverse()!;\n const localRange = xyz.getRange(worldToLocal);\n for (let i = 1; i < xyz.length; i++) {\n xyz.getPoint3dAtUncheckedPointIndex(i, newPoint);\n const clipper = EdgeClipData.createPointPointSweep(point, newPoint, sweepVector);\n if (clipper !== undefined) {\n point.setFrom(newPoint);\n edgeData.push(clipper);\n }\n }\n return new ClipSweptLineStringContext(edgeData, { localToWorld, worldToLocal, localRange });\n }\n return undefined;\n }\n /**\n * Intersect a polygon with each of the edgeClippers.\n * * If transforms and local range are defined, test the polygon's local range to see if it offers a quick exit.\n */\n public processPolygon(polygon: Point3d[], announceEdge: (pointA: Point3d, pointB: Point3d) => void) {\n if (this._worldToLocal !== undefined && this._localRange !== undefined) {\n const polygonRange = Range3d.createTransformedArray(this._worldToLocal, polygon);\n if (!polygonRange.intersectsRangeXY(this._localRange))\n return;\n }\n for (const clipper of this._edgeClippers) {\n clipper.processPolygon(polygon, announceEdge);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SweepLineStringToFacetContext.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/SweepLineStringToFacetContext.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0DAAuD;AAEvD,sEAAqE;AACrE,0DAAuD;AAEvD,kDAAiD;AACjD,6CAA0C;AAE1C,wDAAqD;AACrD,0EAAuE;AACvE,4DAAqG;AACrG,wDAAqD;AAErD,MAAa,6BAA6B;IAIxC,YAAoB,WAA6B;QAajD,wEAAwE;QAChE,mBAAc,GAAG,yBAAO,CAAC,MAAM,EAAE,CAAC;QAClC,mBAAc,GAAG,yBAAO,CAAC,MAAM,EAAE,CAAC;QAClC,wBAAmB,GAAG,yBAAO,CAAC,MAAM,EAAE,CAAC;QACvC,wBAAmB,GAAG,yBAAO,CAAC,MAAM,EAAE,CAAC;QACvC,mBAAc,GAAG,qBAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,gBAAW,GAAG,qBAAS,CAAC,cAAc,EAAE,CAAC;QACzC,kBAAa,GAAG,eAAO,CAAC,MAAM,EAAE,CAAC;QAnBvC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,IAAI,eAAO,EAAE,CAAC;QACvC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClD,CAAC;IACM,MAAM,CAAC,MAAM,CAAC,GAAqB;QACxC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,6BAA6B,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAWD;;OAEG;IACI,gBAAgB,CAAC,OAAyB,EAAE,QAA4B,EAAE,QAAkB,EAAE,SAAiB;QACpH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAC/D,OAAO,WAAW,CAAC;QACrB,aAAa;QACb,yCAAyC;QACzC,wEAAwE;QACxE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC/C,WAAW,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAChF,IAAI,KAAK,EAAE,CAAC;gBACV,wCAAwC;gBACxC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC;oBACjD,WAAW,EAAE,CAAC;oBACd,IAAI,CAAC,YAAY,CAAC,6BAA6B,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC7E,IAAI,CAAC,YAAY,CAAC,6BAA6B,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBACzE,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;oBAC5E,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;oBAC5E,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC9B,kEAAkE;oBAClE,IAAI,IAAI,CAAC,cAAc,CAAC,8BAA8B,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;2BACzG,IAAI,CAAC,cAAc,CAAC,8BAA8B,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;2BAC1G,IAAI,CAAC,cAAc,CAAC,8BAA8B,CACnD,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAC3D,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjE,mDAAmD;wBACnD,WAAW,EAAE,CAAC;wBACd,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;wBAClH,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;wBAClH,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;wBAChF,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;wBAChF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBAClG,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBAClG,MAAM,cAAc,GAAG,mBAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;wBAC7G,kFAAkF;wBAClF,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;4BACvH,WAAW,EAAE,CAAC;4BACd,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;4BAC1F,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,CAAG,6DAA6D;4BAC1G,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,kBAAkB,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BAChH,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,kBAAkB,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAClH,CAAC;6BAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAE,4BAA4B;4BACxE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACrI,CAAC;6BAAM,4BAA4B;4BACjC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACvI,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAjFD,sEAiFC;AAED;;;GAGG;AACH,MAAa,YAAY;IAQvB,yBAAyB;IACzB,YAAmB,SAAoB,EAAE,IAAwB;QAC/D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC5B,CAAC;IACD,qEAAqE;IAC9D,MAAM,CAAC,qBAAqB,CAAC,MAAe,EAAE,MAAe,EAAE,KAAe;QACnF,MAAM,UAAU,GAAG,0BAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,UAAU,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;QAChE,sHAAsH;QACtH,gJAAgJ;QAChJ,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,qBAAS,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,qBAAS,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,qBAAS,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC9E,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5E,MAAM,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,uCAAkB,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAClE,OAAO,IAAI,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,qHAAqH;IAC9G,cAAc,CAAC,OAAqC,EAAE,YAAwD;QACnH,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACxB,mCAAsB,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;;YAE5F,2CAA8B,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACtG,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,6DAA6D;YAC7D,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAC9F,CAAC,EAAU,EAAE,EAAU,EAAE,EAAE;gBACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAC3E,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,CAAC,CACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAjDD,oCAiDC;AACD;;;GAGG;AACH,MAAa,0BAA0B;IAKrC,YAAoB,QAAwB,EAAE,SAAgG;QAC5I,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC;YAC5C,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC;YAC5C,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC;QAC1C,CAAC;IACH,CAAC;IACM,MAAM,CAAC,MAAM,CAAC,GAAqB,EAAE,WAAiC;QAC3E,IAAI,WAAW,KAAK,SAAS;YAC3B,WAAW,GAAG,0BAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,yBAAO,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,yBAAO,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAmB,EAAE,CAAC;YACpC,GAAG,CAAC,+BAA+B,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAE9C,IAAI,kBAAkB,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAClE,IAAI,kBAAkB,KAAK,SAAS;gBAClC,kBAAkB,GAAG,mBAAQ,CAAC,cAAc,EAAE,CAAC;YACjD,MAAM,YAAY,GAAG,qBAAS,CAAC,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;YAChF,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,EAAG,CAAC;YAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,GAAG,CAAC,+BAA+B,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG,YAAY,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;gBACjF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACxB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,0BAA0B,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,cAAc,CAAC,OAAkB,EAAE,YAAwD;QAChG,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACvE,MAAM,YAAY,GAAG,eAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACjF,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;gBACnD,OAAO;QACX,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAtDD,gEAsDC","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 { Transform } from \"../../geometry3d/Transform\";\r\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Segment1d } from \"../../geometry3d/Segment1d\";\r\nimport { AnnounceDrapePanel } from \"../PolyfaceQuery\";\r\nimport { Range3d } from \"../../geometry3d/Range\";\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Polyface } from \"../Polyface\";\r\nimport { ClipPlane } from \"../../clipping/ClipPlane\";\r\nimport { ConvexClipPlaneSet } from \"../../clipping/ConvexClipPlaneSet\";\r\nimport { IndexedXYZCollectionPolygonOps, Point3dArrayPolygonOps } from \"../../geometry3d/PolygonOps\";\r\nimport { Matrix3d } from \"../../geometry3d/Matrix3d\";\r\n\r\nexport class SweepLineStringToFacetContext {\r\n private _spacePoints: GrowableXYZArray;\r\n private _spacePointsRange: Range3d;\r\n private _numSpacePoints: number;\r\n private constructor(spacePoints: GrowableXYZArray) {\r\n this._spacePoints = spacePoints;\r\n this._spacePointsRange = new Range3d();\r\n spacePoints.setRange(this._spacePointsRange);\r\n this._numSpacePoints = this._spacePoints.length;\r\n }\r\n public static create(xyz: GrowableXYZArray): SweepLineStringToFacetContext | undefined {\r\n if (xyz.length > 1) {\r\n return new SweepLineStringToFacetContext(xyz.clone());\r\n }\r\n return undefined;\r\n }\r\n\r\n // temporaries reused over multiple calls to process a single facet . ..\r\n private _segmentPoint0 = Point3d.create();\r\n private _segmentPoint1 = Point3d.create();\r\n private _localSegmentPoint0 = Point3d.create();\r\n private _localSegmentPoint1 = Point3d.create();\r\n private _clipFractions = Segment1d.create(0, 1);\r\n private _localFrame = Transform.createIdentity();\r\n private _polygonRange = Range3d.create();\r\n\r\n /** process a single polygon.\r\n * @returns number crudely indicating how much work was done.\r\n */\r\n public projectToPolygon(polygon: GrowableXYZArray, announce: AnnounceDrapePanel, polyface: Polyface, readIndex: number): number {\r\n polygon.setRange(this._polygonRange);\r\n let workCounter = 0;\r\n if (!this._polygonRange.intersectsRangeXY(this._spacePointsRange))\r\n return workCounter;\r\n // numTest++;\r\n // For each triangle within the facet ...\r\n // remark: this loop only runs once in triangle mesh, twice in quads ...\r\n for (let k1 = 1; k1 + 1 < polygon.length; k1++) {\r\n workCounter++;\r\n const frame = polygon.fillLocalXYTriangleFrame(0, k1, k1 + 1, this._localFrame);\r\n if (frame) {\r\n // For each stroke of the linestring ...\r\n for (let i1 = 1; i1 < this._numSpacePoints; i1++) {\r\n workCounter++;\r\n this._spacePoints.getPoint3dAtCheckedPointIndex(i1 - 1, this._segmentPoint0);\r\n this._spacePoints.getPoint3dAtCheckedPointIndex(i1, this._segmentPoint1);\r\n frame.multiplyInversePoint3d(this._segmentPoint0, this._localSegmentPoint0);\r\n frame.multiplyInversePoint3d(this._segmentPoint1, this._localSegmentPoint1);\r\n this._clipFractions.set(0, 1);\r\n /** (x,y,1-x-y) are barycentric coordinates in the triangle !!! */\r\n if (this._clipFractions.clipBy01FunctionValuesPositive(this._localSegmentPoint0.x, this._localSegmentPoint1.x)\r\n && this._clipFractions.clipBy01FunctionValuesPositive(this._localSegmentPoint0.y, this._localSegmentPoint1.y)\r\n && this._clipFractions.clipBy01FunctionValuesPositive(\r\n 1 - this._localSegmentPoint0.x - this._localSegmentPoint0.y,\r\n 1 - this._localSegmentPoint1.x - this._localSegmentPoint1.y)) {\r\n /* project the local segment point to the plane. */\r\n workCounter++;\r\n const localClippedPointA = this._localSegmentPoint0.interpolate(this._clipFractions.x0, this._localSegmentPoint1);\r\n const localClippedPointB = this._localSegmentPoint0.interpolate(this._clipFractions.x1, this._localSegmentPoint1);\r\n const worldClippedPointA = this._localFrame.multiplyPoint3d(localClippedPointA);\r\n const worldClippedPointB = this._localFrame.multiplyPoint3d(localClippedPointB);\r\n const planePointA = this._localFrame.multiplyXYZ(localClippedPointA.x, localClippedPointA.y, 0.0);\r\n const planePointB = this._localFrame.multiplyXYZ(localClippedPointB.x, localClippedPointB.y, 0.0);\r\n const splitParameter = Geometry.inverseInterpolate01(this._localSegmentPoint0.z, this._localSegmentPoint1.z);\r\n // emit 1 or 2 panels, oriented so panel normal is always to the left of the line.\r\n if (splitParameter !== undefined && splitParameter > this._clipFractions.x0 && splitParameter < this._clipFractions.x1) {\r\n workCounter++;\r\n const piercePointX = this._segmentPoint0.interpolate(splitParameter, this._segmentPoint1);\r\n const piercePointY = piercePointX.clone(); // so points are distinct for the two triangle announcements.\r\n announce(this._spacePoints, i1 - 1, polyface, readIndex, [worldClippedPointA, piercePointX, planePointA], 2, 1);\r\n announce(this._spacePoints, i1 - 1, polyface, readIndex, [worldClippedPointB, piercePointY, planePointB], 1, 2);\r\n } else if (this._localSegmentPoint0.z > 0) { // segment is entirely above\r\n announce(this._spacePoints, i1 - 1, polyface, readIndex, [worldClippedPointA, worldClippedPointB, planePointB, planePointA], 3, 2);\r\n } else // segment is entirely under\r\n announce(this._spacePoints, i1 - 1, polyface, readIndex, [worldClippedPointB, worldClippedPointA, planePointA, planePointB], 2, 3);\r\n }\r\n }\r\n }\r\n }\r\n return workCounter;\r\n }\r\n}\r\n\r\n/**\r\n * Context for sweeping a line segment onto a convex polygon.\r\n * @internal\r\n */\r\nexport class EdgeClipData {\r\n /** Plane containing the edge and sweep vector */\r\n public edgePlane: ClipPlane;\r\n /** Two clip planes facing each other at each end of the edge */\r\n public clip: ConvexClipPlaneSet;\r\n /** work array for clipper method */\r\n private _crossingPoints: Point3d[];\r\n\r\n /** CAPTURE the planes */\r\n public constructor(edgePlane: ClipPlane, clip: ConvexClipPlaneSet) {\r\n this.edgePlane = edgePlane;\r\n this.clip = clip;\r\n this._crossingPoints = [];\r\n }\r\n /** create object from segment and sweep. Inputs are not captured. */\r\n public static createPointPointSweep(pointA: Point3d, pointB: Point3d, sweep: Vector3d): EdgeClipData | undefined {\r\n const edgeVector = Vector3d.createStartEnd(pointA, pointB);\r\n const fraction = edgeVector.fractionOfProjectionToVector(sweep);\r\n // The unbounded plane of the swept edge will intersect facets in lines that may extend beyond the swept bounded line.\r\n // That linework will be clipped between two facing planes with normal along the perpendicular dropped from the edge vector to the sweep vector.\r\n const clipNormal = edgeVector.plusScaled(sweep, -fraction);\r\n const planeA = ClipPlane.createNormalAndPoint(clipNormal, pointA);\r\n const planeB = ClipPlane.createNormalAndPoint(clipNormal, pointB);\r\n const edgePlane = ClipPlane.createOriginAndVectors(pointA, edgeVector, sweep);\r\n if (planeA !== undefined && planeB !== undefined && edgePlane !== undefined) {\r\n planeB.negateInPlace();\r\n const clipper = ConvexClipPlaneSet.createPlanes([planeA, planeB]);\r\n return new EdgeClipData(edgePlane, clipper);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Intersect this edge plane with the given convex polygon and announce the intersection segment to the callback. */\r\n public processPolygon(polygon: Point3d[] | GrowableXYZArray, announceEdge: (pointA: Point3d, pointB: Point3d) => void) {\r\n this._crossingPoints.length = 0;\r\n if (Array.isArray(polygon))\r\n Point3dArrayPolygonOps.polygonPlaneCrossings(this.edgePlane, polygon, this._crossingPoints);\r\n else\r\n IndexedXYZCollectionPolygonOps.polygonPlaneCrossings(this.edgePlane, polygon, this._crossingPoints);\r\n if (this._crossingPoints.length === 2) {\r\n // use the end planes to clip the [0,1] swept edge to [f0,f1]\r\n this.clip.announceClippedSegmentIntervals(0, 1, this._crossingPoints[0], this._crossingPoints[1],\r\n (f0: number, f1: number) => {\r\n announceEdge(this._crossingPoints[0].interpolate(f0, this._crossingPoints[1]),\r\n this._crossingPoints[0].interpolate(f1, this._crossingPoints[1]));\r\n },\r\n );\r\n }\r\n }\r\n}\r\n/**\r\n * Context for sweeping a line string onto a convex polygon.\r\n * @internal\r\n */\r\nexport class ClipSweptLineStringContext {\r\n private _edgeClippers: EdgeClipData[];\r\n private _localToWorld?: Transform;\r\n private _worldToLocal?: Transform;\r\n private _localRange?: Range3d;\r\n private constructor(edgeData: EdgeClipData[], localData: undefined | { localToWorld: Transform, worldToLocal: Transform, localRange: Range3d }) {\r\n this._edgeClippers = edgeData;\r\n if (localData !== undefined) {\r\n this._localToWorld = localData.localToWorld;\r\n this._worldToLocal = localData.worldToLocal;\r\n this._localRange = localData.localRange;\r\n }\r\n }\r\n public static create(xyz: GrowableXYZArray, sweepVector: Vector3d | undefined): ClipSweptLineStringContext | undefined {\r\n if (sweepVector === undefined)\r\n sweepVector = Vector3d.create(0, 0, 1);\r\n if (xyz.length > 1) {\r\n const point = Point3d.createZero();\r\n const newPoint = Point3d.createZero();\r\n const edgeData: EdgeClipData[] = [];\r\n xyz.getPoint3dAtUncheckedPointIndex(0, point);\r\n\r\n let localToWorldMatrix = Matrix3d.createRigidHeadsUp(sweepVector);\r\n if (localToWorldMatrix === undefined)\r\n localToWorldMatrix = Matrix3d.createIdentity();\r\n const localToWorld = Transform.createOriginAndMatrix(point, localToWorldMatrix);\r\n const worldToLocal = localToWorld.inverse()!;\r\n const localRange = xyz.getRange(worldToLocal);\r\n for (let i = 1; i < xyz.length; i++) {\r\n xyz.getPoint3dAtUncheckedPointIndex(i, newPoint);\r\n const clipper = EdgeClipData.createPointPointSweep(point, newPoint, sweepVector);\r\n if (clipper !== undefined) {\r\n point.setFrom(newPoint);\r\n edgeData.push(clipper);\r\n }\r\n }\r\n return new ClipSweptLineStringContext(edgeData, { localToWorld, worldToLocal, localRange });\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Intersect a polygon with each of the edgeClippers.\r\n * * If transforms and local range are defined, test the polygon's local range to see if it offers a quick exit.\r\n */\r\n public processPolygon(polygon: Point3d[], announceEdge: (pointA: Point3d, pointB: Point3d) => void) {\r\n if (this._worldToLocal !== undefined && this._localRange !== undefined) {\r\n const polygonRange = Range3d.createTransformedArray(this._worldToLocal, polygon);\r\n if (!polygonRange.intersectsRangeXY(this._localRange))\r\n return;\r\n }\r\n for (const clipper of this._edgeClippers) {\r\n clipper.processPolygon(polygon, announceEdge);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XYPointBuckets.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/XYPointBuckets.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 { Geometry } from \"../../Geometry\";\nimport { IndexedXYZCollection } from \"../../geometry3d/IndexedXYZCollection\";\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Range2d, Range3d } from \"../../geometry3d/Range\";\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\n\n/** Type for a value which may be either (a) undefined or (b) an array of type []. */\nexport type OptionalArray<T> = T[] | undefined;\n/**\n * Arrays of type T values distributed by xy position when entered.\n * @internal\n */\nexport class XYIndexGrid<T> {\n private _range: Range2d;\n private _numXEdge: number;\n private _numYEdge: number;\n\n private _data: Array<Array<OptionalArray<T>>>; // _indices[j][i][k] = index k value in row j block i\n\n protected constructor(range: Range2d, numX: number, numY: number) {\n this._range = range;\n this._numXEdge = Math.max(numX, 1);\n this._numYEdge = Math.max(numY, 1);\n this._data = [];\n for (let j = 0; j < numY; j++) {\n const thisRow: Array<OptionalArray<T>> = [];\n for (let i = 0; i < numX; i++) {\n thisRow.push(undefined);\n }\n this._data.push(thisRow);\n }\n }\n /** Return the number of x edges in the grid */\n public get numXEdge(): number { return this._numXEdge; }\n /** Return the number of y edges in the grid */\n public get numYEdge(): number { return this._numYEdge; }\n\n /** Return the `i` index of cells containing x coordinate */\n public xIndex(x: number): number {\n const fraction = (x - this._range.low.x) / (this._range.high.x - this._range.low.x);\n const q = Math.floor(fraction * this._numXEdge);\n if (q < 0)\n return 0;\n if (q > this._numXEdge - 1)\n return this._numXEdge - 1;\n return q;\n }\n /** Return the `j` index of cells containing x coordinate */\n public yIndex(y: number): number {\n const fraction = (y - this._range.low.y) / (this._range.high.y - this._range.low.y);\n const q = Math.floor(fraction * this._numYEdge);\n if (q < 0)\n return 0;\n if (q > this._numYEdge - 1)\n return this._numYEdge - 1;\n return q;\n }\n /**\n * Construct an array with cells mapped to a range, with counts determined by estimated total count and target number of entries per cell.\n * @param range\n * @param totalEntries\n * @param targetEntriesPerCell\n */\n public static createWithEstimatedCounts<T>(range: LowAndHighXY, totalEntries: number, targetEntriesPerCell: number): XYIndexGrid<T> | undefined {\n if (range.low.x >= range.high.x || range.low.y >= range.high.y)\n return undefined;\n const range2d = Range2d.createXYXY(range.low.x, range.low.y, range.high.x, range.high.y);\n\n const dx = range2d.xLength();\n const dy = range2d.yLength();\n // numX / numY = dX / dY (numX,numY will be integers . . .)\n // numX = dX * numY / dY\n let numX: number;\n let numY: number;\n if (dy > dx) {\n numY = Math.ceil(Math.sqrt(dy * totalEntries / (targetEntriesPerCell * dx)));\n numX = Math.ceil(totalEntries / numY);\n } else {\n numX = Math.ceil(Math.sqrt(dx * totalEntries / (targetEntriesPerCell * dy)));\n numY = Math.ceil(totalEntries / (numX * targetEntriesPerCell));\n }\n return new XYIndexGrid(range2d, numX, numY);\n }\n /**\n * Add (save) a new data value to the grid cell containing x,y\n * @param x\n * @param y\n * @param value\n */\n public addDataAtXY(x: number, y: number, value: T) {\n const i = this.xIndex(x);\n const j = this.yIndex(y);\n let dataJI = this._data[j][i];\n if (!dataJI) {\n dataJI = [];\n this._data[j][i] = dataJI;\n }\n dataJI.push(value);\n return;\n }\n /**\n * Get the (reference to the possibly null array of) data values for the cell indicated by xy.\n * @param x\n * @param y\n */\n public getDataAtXY(x: number, y: number): OptionalArray<T> {\n const i = this.xIndex(x);\n const j = this.yIndex(y);\n return this._data[j][i];\n }\n\n /**\n * Get the (reference to the possibly null array of) data values for the cell indicated by indices in the x and y direction\n * @param xIndex\n * @param yIndex\n */\n public getDataAtIndex(xIndex: number, yIndex: number): OptionalArray<T> {\n if (xIndex < 0)\n return undefined;\n if (xIndex >= this._numXEdge)\n return undefined;\n if (yIndex < 0)\n return undefined;\n if (yIndex >= this._numYEdge)\n return undefined;\n\n return this._data[yIndex][xIndex];\n }\n /** Return true if (xIndex, yIndex) is a valid cell index. */\n public isValidIndex(xIndex: number, yIndex: number): boolean {\n if (xIndex < 0)\n return false;\n if (xIndex >= this._numXEdge)\n return false;\n if (yIndex < 0)\n return false;\n if (yIndex >= this._numYEdge)\n return false;\n return true;\n }\n}\n/** Manage buckets of points for fast search.\n * @internal\n */\nexport class XYPointBuckets {\n private _points: IndexedXYZCollection;\n private _buckets: XYIndexGrid<number>;\n /** Return the underlying grid with indices recorded by block */\n public get indexGrid(): XYIndexGrid<number> { return this._buckets; }\n private constructor(points: IndexedXYZCollection, buckets: XYIndexGrid<number>) {\n this._points = points;\n this._buckets = buckets;\n }\n /** Create an XYIndex grid with all indices of all `points` entered */\n public static create(points: IndexedXYZCollection, targetPointsPerCell: number): XYPointBuckets | undefined {\n const n = points.length;\n if (points.length < 1)\n return undefined;\n const range = points.getRange();\n range.expandInPlace(Geometry.smallMetricDistance * 1000.0);\n const buckets = XYIndexGrid.createWithEstimatedCounts<number>(range, points.length, targetPointsPerCell);\n if (buckets === undefined)\n return undefined;\n const result = new XYPointBuckets(points, buckets);\n const point = Point3d.create();\n for (let i = 0; i < n; i++) {\n points.getPoint3dAtUncheckedPointIndex(i, point);\n buckets.addDataAtXY(point.x, point.y, i);\n }\n return result;\n }\n /** call the `announce` function with the index and coordinates of all points in given range.\n * * continue the search if `announce` returns true.\n * * terminate the search if `announce` returns false;\n */\n public announcePointsInRange(range: Range2d | Range3d, announce: (index: number, x: number, y: number, z: number) => boolean) {\n const i0 = this._buckets.xIndex(range.low.x);\n const i1 = this._buckets.xIndex(range.high.x);\n const j0 = this._buckets.yIndex(range.low.y);\n const j1 = this._buckets.yIndex(range.high.y);\n const n = this._points.length;\n for (let i = i0; i <= i1; i++) {\n for (let j = j0; j <= j1; j++) {\n const candidates = this._buckets.getDataAtIndex(i, j);\n if (candidates !== undefined) {\n for (const k of candidates) {\n if (k < n) {\n const x = this._points.getXAtUncheckedPointIndex(k);\n const y = this._points.getYAtUncheckedPointIndex(k);\n const z = this._points.getZAtUncheckedPointIndex(k);\n if (range.containsXY(x, y))\n if (!announce(k, x, y, z))\n return;\n }\n }\n }\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"XYPointBuckets.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/XYPointBuckets.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 { Geometry } from \"../../Geometry\";\r\nimport { IndexedXYZCollection } from \"../../geometry3d/IndexedXYZCollection\";\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range2d, Range3d } from \"../../geometry3d/Range\";\r\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\r\n\r\n/** Type for a value which may be either (a) undefined or (b) an array of type []. */\r\nexport type OptionalArray<T> = T[] | undefined;\r\n/**\r\n * Arrays of type T values distributed by xy position when entered.\r\n * @internal\r\n */\r\nexport class XYIndexGrid<T> {\r\n private _range: Range2d;\r\n private _numXEdge: number;\r\n private _numYEdge: number;\r\n\r\n private _data: Array<Array<OptionalArray<T>>>; // _indices[j][i][k] = index k value in row j block i\r\n\r\n protected constructor(range: Range2d, numX: number, numY: number) {\r\n this._range = range;\r\n this._numXEdge = Math.max(numX, 1);\r\n this._numYEdge = Math.max(numY, 1);\r\n this._data = [];\r\n for (let j = 0; j < numY; j++) {\r\n const thisRow: Array<OptionalArray<T>> = [];\r\n for (let i = 0; i < numX; i++) {\r\n thisRow.push(undefined);\r\n }\r\n this._data.push(thisRow);\r\n }\r\n }\r\n /** Return the number of x edges in the grid */\r\n public get numXEdge(): number { return this._numXEdge; }\r\n /** Return the number of y edges in the grid */\r\n public get numYEdge(): number { return this._numYEdge; }\r\n\r\n /** Return the `i` index of cells containing x coordinate */\r\n public xIndex(x: number): number {\r\n const fraction = (x - this._range.low.x) / (this._range.high.x - this._range.low.x);\r\n const q = Math.floor(fraction * this._numXEdge);\r\n if (q < 0)\r\n return 0;\r\n if (q > this._numXEdge - 1)\r\n return this._numXEdge - 1;\r\n return q;\r\n }\r\n /** Return the `j` index of cells containing x coordinate */\r\n public yIndex(y: number): number {\r\n const fraction = (y - this._range.low.y) / (this._range.high.y - this._range.low.y);\r\n const q = Math.floor(fraction * this._numYEdge);\r\n if (q < 0)\r\n return 0;\r\n if (q > this._numYEdge - 1)\r\n return this._numYEdge - 1;\r\n return q;\r\n }\r\n /**\r\n * Construct an array with cells mapped to a range, with counts determined by estimated total count and target number of entries per cell.\r\n * @param range\r\n * @param totalEntries\r\n * @param targetEntriesPerCell\r\n */\r\n public static createWithEstimatedCounts<T>(range: LowAndHighXY, totalEntries: number, targetEntriesPerCell: number): XYIndexGrid<T> | undefined {\r\n if (range.low.x >= range.high.x || range.low.y >= range.high.y)\r\n return undefined;\r\n const range2d = Range2d.createXYXY(range.low.x, range.low.y, range.high.x, range.high.y);\r\n\r\n const dx = range2d.xLength();\r\n const dy = range2d.yLength();\r\n // numX / numY = dX / dY (numX,numY will be integers . . .)\r\n // numX = dX * numY / dY\r\n let numX: number;\r\n let numY: number;\r\n if (dy > dx) {\r\n numY = Math.ceil(Math.sqrt(dy * totalEntries / (targetEntriesPerCell * dx)));\r\n numX = Math.ceil(totalEntries / numY);\r\n } else {\r\n numX = Math.ceil(Math.sqrt(dx * totalEntries / (targetEntriesPerCell * dy)));\r\n numY = Math.ceil(totalEntries / (numX * targetEntriesPerCell));\r\n }\r\n return new XYIndexGrid(range2d, numX, numY);\r\n }\r\n /**\r\n * Add (save) a new data value to the grid cell containing x,y\r\n * @param x\r\n * @param y\r\n * @param value\r\n */\r\n public addDataAtXY(x: number, y: number, value: T) {\r\n const i = this.xIndex(x);\r\n const j = this.yIndex(y);\r\n let dataJI = this._data[j][i];\r\n if (!dataJI) {\r\n dataJI = [];\r\n this._data[j][i] = dataJI;\r\n }\r\n dataJI.push(value);\r\n return;\r\n }\r\n /**\r\n * Get the (reference to the possibly null array of) data values for the cell indicated by xy.\r\n * @param x\r\n * @param y\r\n */\r\n public getDataAtXY(x: number, y: number): OptionalArray<T> {\r\n const i = this.xIndex(x);\r\n const j = this.yIndex(y);\r\n return this._data[j][i];\r\n }\r\n\r\n /**\r\n * Get the (reference to the possibly null array of) data values for the cell indicated by indices in the x and y direction\r\n * @param xIndex\r\n * @param yIndex\r\n */\r\n public getDataAtIndex(xIndex: number, yIndex: number): OptionalArray<T> {\r\n if (xIndex < 0)\r\n return undefined;\r\n if (xIndex >= this._numXEdge)\r\n return undefined;\r\n if (yIndex < 0)\r\n return undefined;\r\n if (yIndex >= this._numYEdge)\r\n return undefined;\r\n\r\n return this._data[yIndex][xIndex];\r\n }\r\n /** Return true if (xIndex, yIndex) is a valid cell index. */\r\n public isValidIndex(xIndex: number, yIndex: number): boolean {\r\n if (xIndex < 0)\r\n return false;\r\n if (xIndex >= this._numXEdge)\r\n return false;\r\n if (yIndex < 0)\r\n return false;\r\n if (yIndex >= this._numYEdge)\r\n return false;\r\n return true;\r\n }\r\n}\r\n/** Manage buckets of points for fast search.\r\n * @internal\r\n */\r\nexport class XYPointBuckets {\r\n private _points: IndexedXYZCollection;\r\n private _buckets: XYIndexGrid<number>;\r\n /** Return the underlying grid with indices recorded by block */\r\n public get indexGrid(): XYIndexGrid<number> { return this._buckets; }\r\n private constructor(points: IndexedXYZCollection, buckets: XYIndexGrid<number>) {\r\n this._points = points;\r\n this._buckets = buckets;\r\n }\r\n /** Create an XYIndex grid with all indices of all `points` entered */\r\n public static create(points: IndexedXYZCollection, targetPointsPerCell: number): XYPointBuckets | undefined {\r\n const n = points.length;\r\n if (points.length < 1)\r\n return undefined;\r\n const range = points.getRange();\r\n range.expandInPlace(Geometry.smallMetricDistance * 1000.0);\r\n const buckets = XYIndexGrid.createWithEstimatedCounts<number>(range, points.length, targetPointsPerCell);\r\n if (buckets === undefined)\r\n return undefined;\r\n const result = new XYPointBuckets(points, buckets);\r\n const point = Point3d.create();\r\n for (let i = 0; i < n; i++) {\r\n points.getPoint3dAtUncheckedPointIndex(i, point);\r\n buckets.addDataAtXY(point.x, point.y, i);\r\n }\r\n return result;\r\n }\r\n /** call the `announce` function with the index and coordinates of all points in given range.\r\n * * continue the search if `announce` returns true.\r\n * * terminate the search if `announce` returns false;\r\n */\r\n public announcePointsInRange(range: Range2d | Range3d, announce: (index: number, x: number, y: number, z: number) => boolean) {\r\n const i0 = this._buckets.xIndex(range.low.x);\r\n const i1 = this._buckets.xIndex(range.high.x);\r\n const j0 = this._buckets.yIndex(range.low.y);\r\n const j1 = this._buckets.yIndex(range.high.y);\r\n const n = this._points.length;\r\n for (let i = i0; i <= i1; i++) {\r\n for (let j = j0; j <= j1; j++) {\r\n const candidates = this._buckets.getDataAtIndex(i, j);\r\n if (candidates !== undefined) {\r\n for (const k of candidates) {\r\n if (k < n) {\r\n const x = this._points.getXAtUncheckedPointIndex(k);\r\n const y = this._points.getYAtUncheckedPointIndex(k);\r\n const z = this._points.getZAtUncheckedPointIndex(k);\r\n if (range.containsXY(x, y))\r\n if (!announce(k, x, y, z))\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|