@itwin/core-geometry 4.9.0-dev.9 → 4.9.1
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 +41 -1
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.d.ts +57 -46
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +73 -53
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/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.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- 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.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +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.d.ts +141 -38
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +219 -31
- 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.d.ts +11 -6
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +12 -10
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +2 -1
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +2 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.d.ts +11 -9
- package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurve.js +11 -9
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.d.ts +4 -3
- package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
- package/lib/cjs/curve/CurveFactory.js +4 -3
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts +19 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +39 -0
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.d.ts +4 -4
- package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
- package/lib/cjs/curve/CurveOps.js +6 -6
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/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.d.ts +7 -5
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +8 -6
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.d.ts.map +1 -1
- package/lib/cjs/curve/Loop.js +6 -6
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.d.ts +1 -1
- package/lib/cjs/curve/OffsetOptions.js +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.d.ts.map +1 -1
- package/lib/cjs/curve/Path.js +5 -6
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/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 +4 -3
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +4 -3
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/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.d.ts +23 -7
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +22 -8
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +127 -52
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/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.d.ts +211 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +1000 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +11 -8
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js +7 -4
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- 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.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.d.ts +18 -5
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +23 -7
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts +14 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js +47 -12
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/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.d.ts +2 -1
- package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js +12 -10
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js +1 -7
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/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.d.ts +6 -4
- package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +6 -4
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/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.d.ts +5 -5
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +5 -5
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.d.ts +6 -5
- package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js +11 -10
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +4 -4
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +7 -11
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +6 -1
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +9 -3
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.d.ts +1 -1
- package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/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 +1 -1
- package/lib/cjs/geometry3d/Transform.js +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.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.d.ts +3 -3
- package/lib/cjs/numerics/Newton.d.ts.map +1 -1
- package/lib/cjs/numerics/Newton.js +14 -16
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.d.ts +2 -2
- package/lib/cjs/numerics/Polynomials.js +2 -2
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/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.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 +7 -4
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +11 -6
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.d.ts +13 -10
- package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js +17 -14
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +11 -14
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +59 -52
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/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.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.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js +2 -2
- 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.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.d.ts.map +1 -1
- package/lib/cjs/solid/SweepContour.js +0 -4
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +1 -1
- package/lib/cjs/topology/Graph.js +2 -2
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +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.d.ts +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +168 -127
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.d.ts +35 -35
- package/lib/cjs/topology/HalfEdgePositionDetail.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js +63 -41
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts +64 -12
- package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js +174 -75
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.d.ts +2 -2
- package/lib/cjs/topology/Merging.js +2 -2
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/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.d.ts +16 -10
- package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
- package/lib/cjs/topology/Triangulation.js +23 -30
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.d.ts +57 -46
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +73 -53
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/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.map +1 -1
- package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
- 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.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +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.d.ts +141 -38
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +217 -30
- 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.d.ts +11 -6
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +12 -10
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +2 -1
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +2 -1
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.d.ts +11 -9
- package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurve.js +11 -9
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveExtendMode.js.map +1 -1
- package/lib/esm/curve/CurveFactory.d.ts +4 -3
- package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
- package/lib/esm/curve/CurveFactory.js +4 -3
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts +19 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +39 -0
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.d.ts +4 -4
- package/lib/esm/curve/CurveOps.d.ts.map +1 -1
- package/lib/esm/curve/CurveOps.js +6 -6
- package/lib/esm/curve/CurveOps.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/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.d.ts +7 -5
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +8 -6
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.d.ts.map +1 -1
- package/lib/esm/curve/Loop.js +6 -6
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.d.ts +1 -1
- package/lib/esm/curve/OffsetOptions.js +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.d.ts.map +1 -1
- package/lib/esm/curve/Path.js +5 -6
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -4
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/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 +4 -3
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +4 -3
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/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.d.ts +23 -7
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +22 -8
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +127 -52
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/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.d.ts +211 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +995 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +11 -8
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js +7 -4
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- 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.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.d.ts +18 -5
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +23 -7
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts +14 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js +47 -12
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/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.d.ts +2 -1
- package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js +12 -10
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js +1 -7
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/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.d.ts +6 -4
- package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +6 -4
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/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.d.ts +5 -5
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +5 -5
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.d.ts +6 -5
- package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js +11 -10
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +4 -4
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +7 -11
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +6 -1
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +9 -3
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.js.map +1 -1
- package/lib/esm/geometry3d/Ray3d.d.ts +1 -1
- package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/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 +1 -1
- package/lib/esm/geometry3d/Transform.js +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.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.d.ts +3 -3
- package/lib/esm/numerics/Newton.d.ts.map +1 -1
- package/lib/esm/numerics/Newton.js +14 -16
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
- package/lib/esm/numerics/PolarData.js.map +1 -1
- package/lib/esm/numerics/Polynomials.d.ts +2 -2
- package/lib/esm/numerics/Polynomials.js +2 -2
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/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.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 +7 -4
- package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +11 -6
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.d.ts +13 -10
- package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js +17 -14
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceData.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +11 -14
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +59 -52
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/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.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.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js +2 -2
- 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.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.d.ts.map +1 -1
- package/lib/esm/solid/SweepContour.js +0 -4
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +1 -1
- package/lib/esm/topology/Graph.js +2 -2
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +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.d.ts +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
- package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js +168 -127
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.d.ts +35 -35
- package/lib/esm/topology/HalfEdgePositionDetail.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js +63 -41
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.d.ts +64 -12
- package/lib/esm/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js +173 -74
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/MaskManager.js.map +1 -1
- package/lib/esm/topology/Merging.d.ts +2 -2
- package/lib/esm/topology/Merging.js +2 -2
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/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.d.ts +16 -10
- package/lib/esm/topology/Triangulation.d.ts.map +1 -1
- package/lib/esm/topology/Triangulation.js +24 -31
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurveCurveIntersectXYZ.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveCurveIntersectXYZ.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { BSplineCurve3d, BSplineCurve3dBase } from \"../../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Vector2d } from \"../../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { SmallSystem, TrigPolynomial } from \"../../numerics/Polynomials\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { CurveChainWithDistanceIndex } from \"../CurveChainWithDistanceIndex\";\r\nimport { CurveCollection } from \"../CurveCollection\";\r\nimport { CurveIntervalRole, CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { AnyCurve } from \"../CurveTypes\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\n\r\n// cspell:word XYRR\r\n\r\n/**\r\n * Handler class for XYZ intersections between _geometryB and another geometry.\r\n * * Instances are initialized and called from CurveCurve.\r\n * * geometryB is saved for later reference.\r\n * @internal\r\n */\r\nexport class CurveCurveIntersectXYZ extends RecurseToCurvesGeometryHandler {\r\n private _extendA: boolean;\r\n private _geometryB: AnyCurve;\r\n private _extendB: boolean;\r\n private _results: CurveLocationDetailPair[];\r\n private static _workVector2dA = Vector2d.create();\r\n private static _workPointAA0 = Point3d.create();\r\n private static _workPointAA1 = Point3d.create();\r\n private static _workPointBB0 = Point3d.create();\r\n private static _workPointBB1 = Point3d.create();\r\n /**\r\n * @param extendA flag to enable using extension of the other geometry.\r\n * @param geometryB second curve for intersection. Saved for reference by specific handler methods.\r\n * @param extendB flag for extension of geometryB.\r\n */\r\n public constructor(extendA: boolean, geometryB: AnyCurve, extendB: boolean) {\r\n super();\r\n this._extendA = extendA;\r\n this._geometryB = geometryB;\r\n this._extendB = extendB;\r\n this._results = [];\r\n }\r\n /** Reset the geometry, leaving all other parts unchanged (and preserving accumulated intersections). */\r\n public resetGeometry(geometryB: AnyCurve): void {\r\n this._geometryB = geometryB;\r\n }\r\n /**\r\n * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair.\r\n * @param reinitialize if true, a new results structure is created for use by later calls.\r\n */\r\n public grabPairedResults(reinitialize: boolean = false): CurveLocationDetailPair[] {\r\n const result = this._results;\r\n if (reinitialize)\r\n this._results = [];\r\n return result;\r\n }\r\n private acceptFraction(extend0: boolean, fraction: number, extend1: boolean) {\r\n if (!extend0 && fraction < 0.0)\r\n return false;\r\n if (!extend1 && fraction > 1.0)\r\n return false;\r\n return true;\r\n }\r\n /**\r\n * Compute intersection of two line segments.\r\n * Filter by extension rules.\r\n * Reject if evaluated points do not match coordinates (e.g. close approach point).\r\n * Record with fraction mapping.\r\n */\r\n private recordPointWithLocalFractions(\r\n localFractionA: number,\r\n cpA: CurvePrimitive,\r\n fractionA0: number,\r\n fractionA1: number,\r\n localFractionB: number,\r\n cpB: CurvePrimitive,\r\n fractionB0: number,\r\n fractionB1: number,\r\n reversed: boolean,\r\n ): void {\r\n const globalFractionA = Geometry.interpolate(fractionA0, localFractionA, fractionA1);\r\n const globalFractionB = Geometry.interpolate(fractionB0, localFractionB, fractionB1);\r\n // ignore duplicate of most recent point\r\n const numPrevious = this._results.length;\r\n if (numPrevious > 0) {\r\n const oldDetailA = this._results[numPrevious - 1].detailA;\r\n const oldDetailB = this._results[numPrevious - 1].detailB;\r\n if (reversed) {\r\n if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\r\n oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\r\n return;\r\n } else {\r\n if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\r\n oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\r\n return;\r\n }\r\n }\r\n const pointA = cpA.fractionToPoint(globalFractionA);\r\n const pointB = cpB.fractionToPoint(globalFractionB);\r\n if (!pointA.isAlmostEqualMetric(pointB))\r\n return;\r\n const detailA = CurveLocationDetail.createCurveFractionPoint(cpA, globalFractionA, pointA);\r\n detailA.setIntervalRole(CurveIntervalRole.isolated);\r\n const detailB = CurveLocationDetail.createCurveFractionPoint(cpB, globalFractionB, pointB);\r\n detailB.setIntervalRole(CurveIntervalRole.isolated);\r\n if (reversed) {\r\n const pair = new CurveLocationDetailPair(detailB, detailA);\r\n this._results.push(pair);\r\n } else {\r\n const pair = new CurveLocationDetailPair(detailA, detailB);\r\n this._results.push(pair);\r\n }\r\n }\r\n /**\r\n * Compute intersection of two line segments.\r\n * Filter by extension rules.\r\n * Record with fraction mapping.\r\n */\r\n private computeSegmentSegment3D(\r\n cpA: CurvePrimitive,\r\n extendA0: boolean,\r\n pointA0: Point3d,\r\n fractionA0: number,\r\n pointA1: Point3d,\r\n fractionA1: number,\r\n extendA1: boolean,\r\n cpB: CurvePrimitive,\r\n extendB0: boolean,\r\n pointB0: Point3d,\r\n fractionB0: number,\r\n pointB1: Point3d,\r\n fractionB1: number,\r\n extendB1: boolean,\r\n reversed: boolean,\r\n ): void {\r\n const uv = CurveCurveIntersectXYZ._workVector2dA;\r\n if (SmallSystem.lineSegment3dClosestApproachUnbounded(pointA0, pointA1, pointB0, pointB1, uv) &&\r\n this.acceptFraction(extendA0, uv.x, extendA1) && this.acceptFraction(extendB0, uv.y, extendB1)) {\r\n this.recordPointWithLocalFractions(uv.x, cpA, fractionA0, fractionA1, uv.y, cpB, fractionB0, fractionB1, reversed);\r\n }\r\n }\r\n // Caller accesses data from a line segment and passes to here.\r\n // The line segment in question might be (a) a full line segment or (b) a fragment within a linestring.\r\n // The fraction and extend parameters allow all combinations to be passed in.\r\n // This method applies transform.\r\n private dispatchSegmentSegment(\r\n cpA: CurvePrimitive,\r\n extendA0: boolean,\r\n pointA0: Point3d,\r\n fractionA0: number,\r\n pointA1: Point3d,\r\n fractionA1: number,\r\n extendA1: boolean,\r\n cpB: CurvePrimitive,\r\n extendB0: boolean,\r\n pointB0: Point3d,\r\n fractionB0: number,\r\n pointB1: Point3d,\r\n fractionB1: number,\r\n extendB1: boolean,\r\n reversed: boolean,\r\n ): void {\r\n this.computeSegmentSegment3D(\r\n cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1,\r\n cpB, extendB0, pointB0, fractionB0, pointB1, fractionB1, extendB1,\r\n reversed,\r\n );\r\n }\r\n /**\r\n * Create a plane whose normal is the \"better\" cross product: `vectorA.crossProduct(vectorB)` or\r\n * `vectorA.crossProduct(vectorC)`\r\n * * The heuristic for \"better\" is:\r\n * * first choice is cross product with `vectorB`, if `vectorA` and `vectorB` are sufficiently far from parallel\r\n * (or anti-parallel).\r\n * * otherwise use vectorC\r\n * @param origin plane origin\r\n * @param vectorA vector which must be in the plane.\r\n * @param cosineValue largest cosine of the angle theta between vectorA and vectorB to prefer their cross product, e.g.\r\n * passing 0.94 ~ cos(20deg) will switch to using vectorC in the cross product if theta < ~20deg or theta > ~160deg.\r\n * @param vectorB first candidate for additional in-plane vector\r\n * @param vectorC second candidate for additional in-plane vector\r\n */\r\n public createPlaneWithPreferredPerpendicular(\r\n origin: Point3d, vectorA: Vector3d, cosineValue: number, vectorB: Vector3d, vectorC: Vector3d,\r\n ): Plane3dByOriginAndUnitNormal | undefined {\r\n cosineValue = Geometry.restrictToInterval(Math.abs(cosineValue), 0.0, 1.0 - Geometry.smallFraction);\r\n const dotAA = vectorA.magnitudeSquared();\r\n const dotBB = vectorB.magnitudeSquared();\r\n const dotAB = Math.abs(vectorA.dotProduct(vectorB));\r\n const cross = vectorA.unitCrossProduct(\r\n dotAB * dotAB <= cosineValue * cosineValue * dotAA * dotBB ? vectorB : vectorC,\r\n );\r\n if (cross)\r\n return Plane3dByOriginAndUnitNormal.create(origin, cross);\r\n return undefined;\r\n }\r\n // Caller accesses data from a linestring or segment and passes it here.\r\n // The line in question might be (a) a full line segment or (b) a fragment within a linestring.\r\n // The fraction and extend parameters allow all combinations to be passed in.\r\n private dispatchSegmentArc(\r\n cpA: CurvePrimitive,\r\n extendA0: boolean,\r\n pointA0: Point3d,\r\n fractionA0: number,\r\n pointA1: Point3d,\r\n fractionA1: number,\r\n extendA1: boolean,\r\n arc: Arc3d,\r\n extendB0: boolean,\r\n extendB1: boolean,\r\n reversed: boolean,\r\n ): void {\r\n const lineVector = Vector3d.createStartEnd(pointA0, pointA1);\r\n const cosValue = 0.94; // cosine of 20 degrees\r\n const plane = this.createPlaneWithPreferredPerpendicular(\r\n pointA0, lineVector, cosValue, arc.perpendicularVector, arc.vector0,\r\n );\r\n if (plane !== undefined) {\r\n const candidates: CurveLocationDetail[] = [];\r\n arc.appendPlaneIntersectionPoints(plane, candidates);\r\n let lineFraction;\r\n let linePoint: Point3d | undefined;\r\n for (const c of candidates) {\r\n if (this.acceptFraction(extendB0, c.fraction, extendB1)) {\r\n lineFraction = SmallSystem.lineSegment3dClosestPointUnbounded(pointA0, pointA1, c.point);\r\n if (lineFraction !== undefined) {\r\n linePoint = pointA0.interpolate(lineFraction, pointA1, linePoint);\r\n if (linePoint.isAlmostEqualMetric(c.point)\r\n && this.acceptFraction(extendA0, lineFraction, extendA1)) {\r\n this.recordPointWithLocalFractions(\r\n lineFraction, cpA, fractionA0, fractionA1, c.fraction, arc, 0, 1, reversed,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Caller promises arcs are coplanar.\r\n // Passes \"other\" as {center, vector0, vector90} in local xy space of cpA\r\n // Solves the arc-arc equations for that local ellipse with unit circle.\r\n // Solution fractions map directly to original arcs.\r\n private dispatchArcArcInPlane(\r\n cpA: Arc3d, extendA: boolean, cpB: Arc3d, extendB: boolean, reversed: boolean,\r\n ): void {\r\n const otherVectors = cpA.otherArcAsLocalVectors(cpB);\r\n if (otherVectors !== undefined) {\r\n const ellipseRadians: number[] = [];\r\n const circleRadians: number[] = [];\r\n TrigPolynomial.solveUnitCircleHomogeneousEllipseIntersection(\r\n otherVectors.center.x, otherVectors.center.y, 1.0,\r\n otherVectors.vector0.x, otherVectors.vector0.y, 0.0,\r\n otherVectors.vector90.x, otherVectors.vector90.y, 0.0,\r\n ellipseRadians, circleRadians,\r\n );\r\n for (let i = 0; i < ellipseRadians.length; i++) {\r\n const fractionA = cpA.sweep.radiansToSignedPeriodicFraction(circleRadians[i]);\r\n const fractionB = cpB.sweep.radiansToSignedPeriodicFraction(ellipseRadians[i]);\r\n // hm .. do we really need to check the fractions? We know they are internal to the beziers\r\n if (this.acceptFraction(extendA, fractionA, extendA) && this.acceptFraction(extendB, fractionB, extendB)) {\r\n this.recordPointWithLocalFractions(fractionA, cpA, 0, 1, fractionB, cpB, 0, 1, reversed);\r\n }\r\n }\r\n }\r\n }\r\n // Caller accesses data from two arcs.\r\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\".\r\n // Solves the arc-arc equations.\r\n private dispatchArcArc(\r\n cpA: Arc3d, extendA: boolean, cpB: Arc3d, extendB: boolean, reversed: boolean,\r\n ): void {\r\n // If arcs are in different planes:\r\n // 1) Intersect each plane with the other arc (quadratic)\r\n // 2) accept points that appear in both intersection sets.\r\n // If arcs are in parallel planes -- no intersections.\r\n // If arcs are in the same plane -- xy intersection in that plane.\r\n const planeA = Plane3dByOriginAndUnitNormal.create(cpA.center, cpA.perpendicularVector);\r\n const planeB = Plane3dByOriginAndUnitNormal.create(cpB.center, cpB.perpendicularVector);\r\n if (planeA === undefined || planeB === undefined)\r\n return;\r\n if (planeA.getNormalRef().isParallelTo(planeB.getNormalRef())) {\r\n if (planeA.isPointInPlane(planeB.getOriginRef()) && planeB.isPointInPlane(planeA.getOriginRef())) {\r\n // coplanar\r\n this.dispatchArcArcInPlane(cpA, extendA, cpB, extendB, reversed);\r\n }\r\n } else {\r\n const arcBPoints: CurveLocationDetail[] = [];\r\n cpB.appendPlaneIntersectionPoints(planeA, arcBPoints);\r\n const arcAPoints: CurveLocationDetail[] = [];\r\n cpA.appendPlaneIntersectionPoints(planeB, arcAPoints);\r\n for (const detailB of arcBPoints) {\r\n for (const detailA of arcAPoints) {\r\n if (detailA.point.isAlmostEqual(detailB.point)) {\r\n if (this.acceptFraction(extendA, detailA.fraction, extendA)\r\n && this.acceptFraction(extendB, detailB.fraction, extendB)) {\r\n this.recordPointWithLocalFractions(detailA.fraction, cpA, 0, 1, detailB.fraction, cpB, 0, 1, reversed);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Caller accesses data from two arcs.\r\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\".\r\n // Solves the arc-arc equations.\r\n private dispatchArcBsplineCurve3d(\r\n _arc: Arc3d, _extendA: boolean, _cpB: BSplineCurve3d, _extendB: boolean, _reversed: boolean,\r\n ): void {\r\n /*\r\n // Arc: X = C + cU + sV\r\n // implicitize the arc as viewed. This \"3d\" matrix is homogeneous \"XYW\" not \"xyz\"\r\n let matrixA: Matrix3d;\r\n if (this._worldToLocalPerspective) {\r\n const dataA = cpA.toTransformedPoint4d(this._worldToLocalPerspective);\r\n matrixA = Matrix3d.createColumnsXYW(\r\n dataA.vector0, dataA.vector0.w, dataA.vector90, dataA.vector90.w, dataA.center, dataA.center.w,\r\n );\r\n } else {\r\n const dataA = cpA.toTransformedVectors(this._worldToLocalAffine);\r\n matrixA = Matrix3d.createColumnsXYW(dataA.vector0, 0, dataA.vector90, 0, dataA.center, 1);\r\n }\r\n // The worldToLocal has moved the arc vectors into local space.\r\n // matrixA captures the xyw parts (ignoring z)\r\n // for any point in world space,\r\n // THIS CODE ONLY WORKS FOR\r\n const matrixAInverse = matrixA.inverse();\r\n if (matrixAInverse) {\r\n const orderF = cpB.order; // order of the beziers for simple coordinates\r\n const orderG = 2 * orderF - 1; // order of the (single) bezier for squared coordinates.\r\n const coffF = new Float64Array(orderF);\r\n const univariateBezierG = new UnivariateBezier(orderG);\r\n const axx = matrixAInverse.at(0, 0);\r\n const axy = matrixAInverse.at(0, 1);\r\n const axz = 0.0;\r\n const axw = matrixAInverse.at(0, 2);\r\n const ayx = matrixAInverse.at(1, 0);\r\n const ayy = matrixAInverse.at(1, 1);\r\n const ayz = 0.0;\r\n const ayw = matrixAInverse.at(1, 2);\r\n const awx = matrixAInverse.at(2, 0);\r\n const awy = matrixAInverse.at(2, 1);\r\n const awz = 0.0;\r\n const aww = matrixAInverse.at(2, 2);\r\n\r\n if (matrixAInverse) {\r\n let bezier: BezierCurve3dH | undefined;\r\n for (let spanIndex = 0; ; spanIndex++) {\r\n bezier = cpB.getSaturatedBezierSpan3dH(spanIndex, bezier);\r\n if (!bezier) break;\r\n if (this._worldToLocalPerspective)\r\n bezier.tryMultiplyMatrix4dInPlace(this._worldToLocalPerspective);\r\n else if (this._worldToLocalAffine)\r\n bezier.tryTransformInPlace(this._worldToLocalAffine);\r\n univariateBezierG.zero();\r\n bezier.poleProductsXYZW(coffF, axx, axy, axz, axw);\r\n univariateBezierG.addSquaredSquaredBezier(coffF, 1.0);\r\n bezier.poleProductsXYZW(coffF, ayx, ayy, ayz, ayw);\r\n univariateBezierG.addSquaredSquaredBezier(coffF, 1.0);\r\n bezier.poleProductsXYZW(coffF, awx, awy, awz, aww);\r\n univariateBezierG.addSquaredSquaredBezier(coffF, -1.0);\r\n const roots = univariateBezierG.roots(0.0, true);\r\n if (roots) {\r\n for (const root of roots) {\r\n const fractionB = bezier.fractionToParentFraction(root);\r\n // The univariate bezier (which has been transformed by the view transform) evaluates into xyw space\r\n const bcurvePoint4d = bezier.fractionToPoint4d(root);\r\n const c = bcurvePoint4d.dotProductXYZW(axx, axy, axz, axw);\r\n const s = bcurvePoint4d.dotProductXYZW(ayx, ayy, ayz, ayw);\r\n const arcFraction = cpA.sweep.radiansToSignedPeriodicFraction(Math.atan2(s, c));\r\n if (this.acceptFraction(extendA, arcFraction, extendA) &&\r\n this.acceptFraction(extendB, fractionB, extendB)) {\r\n this.recordPointWithLocalFractions(\r\n arcFraction, cpA, 0, 1, fractionB, cpB, 0, 1, reversed,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n */\r\n }\r\n /*\r\n // Apply the transformation to bezier curves. Optionally construct ranges.\r\n private transformBeziers(beziers: BezierCurve3dH[]): void {\r\n if (this._worldToLocalAffine) {\r\n for (const bezier of beziers) bezier.tryTransformInPlace(this._worldToLocalAffine);\r\n } else if (this._worldToLocalPerspective) {\r\n for (const bezier of beziers) bezier.tryMultiplyMatrix4dInPlace(this._worldToLocalPerspective);\r\n }\r\n }\r\n */\r\n /*\r\n private getRanges(beziers: BezierCurveBase[]): Range3d[] {\r\n const ranges: Range3d[] = [];\r\n ranges.length = 0;\r\n for (const b of beziers) {\r\n ranges.push(b.range());\r\n }\r\n return ranges;\r\n }\r\n private dispatchBezierBezierStrokeFirst(\r\n bezierA: BezierCurve3dH,\r\n bcurveA: BSplineCurve3dBase,\r\n strokeCountA: number,\r\n bezierB: BezierCurve3dH,\r\n bcurveB: BSplineCurve3dBase,\r\n _strokeCountB: number,\r\n univariateBezierB: UnivariateBezier, // caller-allocated for univariate coefficients.\r\n reversed: boolean,\r\n ) {\r\n if (!this._xyzwA0)\r\n this._xyzwA0 = Point4d.create();\r\n if (!this._xyzwA1)\r\n this._xyzwA1 = Point4d.create();\r\n if (!this._xyzwPlane)\r\n this._xyzwPlane = Point4d.create();\r\n if (!this._xyzwB)\r\n this._xyzwB = Point4d.create();\r\n const roots = univariateBezierG.roots(0.0, true);\r\n if (roots) {\r\n for (const root of roots) {\r\n const fractionB = bezier.fractionToParentFraction(root);\r\n // The univariate bezier (which has been transformed by the view transform) evaluates into xyw space\r\n const bcurvePoint4d = bezier.fractionToPoint4d(root);\r\n const c = bcurvePoint4d.dotProductXYZW(axx, axy, axz, axw);\r\n const s = bcurvePoint4d.dotProductXYZW(ayx, ayy, ayz, ayw);\r\n const arcFraction = cpA.sweep.radiansToSignedPeriodicFraction(Math.atan2(s, c));\r\n if (this.acceptFraction(extendA, arcFraction, extendA) && this.acceptFraction(extendB, fractionB, extendB)) {\r\n this.recordPointWithLocalFractions(\r\n arcFraction, cpA, 0, 1, fractionB, cpB, 0, 1, reversed,\r\n );\r\n }\r\n }\r\n bezierA.fractionToPoint4d(0.0, this._xyzwA0);\r\n let f0 = 0.0;\r\n let f1 = 1.0;\r\n const intervalTolerance = 1.0e-5;\r\n const df = 1.0 / strokeCountA;\r\n for (let i = 1; i <= strokeCountA; i++ , f0 = f1, this._xyzwA0.setFrom(this._xyzwA1)) {\r\n f1 = i * df;\r\n bezierA.fractionToPoint4d(f1, this._xyzwA1);\r\n Point4d.createPlanePointPointZ(this._xyzwA0, this._xyzwA1, this._xyzwPlane);\r\n bezierB.poleProductsXYZW(\r\n univariateBezierB.coffs, this._xyzwPlane.x, this._xyzwPlane.y, this._xyzwPlane.z, this._xyzwPlane.w,\r\n );\r\n let errors = 0;\r\n const roots = univariateBezierB.roots(0.0, true);\r\n if (roots)\r\n for (const r of roots) {\r\n const bezierBFraction = r;\r\n bezierB.fractionToPoint4d(bezierBFraction, this._xyzwB);\r\n const segmentAFraction = SmallSystem.lineSegment3dHXYClosestPointUnbounded(this._xyzwA0, this._xyzwA1, this._xyzwB);\r\n if (segmentAFraction && Geometry.isIn01WithTolerance(segmentAFraction, intervalTolerance)) {\r\n const bezierAFraction = Geometry.interpolate(f0, segmentAFraction, f1);\r\n // TODO implement newton search\r\n const xyMatchingFunction = new BezierBezierIntersectionXYRRToRRD(bezierA, bezierB);\r\n const newtonSearcher = new Newton2dUnboundedWithDerivative(xyMatchingFunction);\r\n newtonSearcher.setUV(bezierAFraction, bezierBFraction);\r\n if (newtonSearcher.runIterations()) {\r\n bezierAFraction = newtonSearcher.getU();\r\n bezierBFraction = newtonSearcher.getV();\r\n }\r\n // We have a near intersection at fractions on the two beziers !!!\r\n // Iterate on the curves for a true intersection ....\r\n // NEEDS WORK -- just accept . . .\r\n const bcurveAFraction = bezierA.fractionToParentFraction(bezierAFraction);\r\n const bcurveBFraction = bezierB.fractionToParentFraction(bezierBFraction);\r\n const xyzA0 = bezierA.fractionToPoint(bezierAFraction);\r\n const xyzA1 = bcurveA.fractionToPoint(bcurveAFraction);\r\n const xyzB0 = bezierB.fractionToPoint(bezierBFraction);\r\n const xyzB1 = bcurveB.fractionToPoint(bcurveBFraction);\r\n if (!xyzA0.isAlmostEqualXY(xyzA1))\r\n errors++;\r\n if (!xyzB0.isAlmostEqualXY(xyzB1))\r\n errors++;\r\n if (errors > 0 && !xyzA0.isAlmostEqual(xyzB0))\r\n errors++;\r\n if (errors > 0 && !xyzA1.isAlmostEqual(xyzB1))\r\n errors++;\r\n if (this.acceptFraction(false, bcurveAFraction, false) &&\r\n this.acceptFraction(false, bcurveBFraction, false)) {\r\n this.recordPointWithLocalFractions(\r\n bcurveAFraction, bcurveA, 0, 1, bcurveBFraction, bcurveB, 0, 1, reversed,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n */\r\n // Caller accesses data from two arcs.\r\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\".\r\n // Solves the arc-arc equations.\r\n private dispatchBSplineCurve3dBSplineCurve3d(\r\n _bcurveA: BSplineCurve3dBase, _bcurveB: BSplineCurve3dBase, _reversed: boolean,\r\n ): void {\r\n /*\r\n const bezierSpanA = bcurveA.collectBezierSpans(true) as BezierCurve3dH[];\r\n const bezierSpanB = bcurveB.collectBezierSpans(true) as BezierCurve3dH[];\r\n const numA = bezierSpanA.length;\r\n const numB = bezierSpanB.length;\r\n this.transformBeziers(bezierSpanA);\r\n this.transformBeziers(bezierSpanB);\r\n const rangeA = this.getRanges(bezierSpanA);\r\n const rangeB = this.getRanges(bezierSpanB);\r\n const orderA = bcurveA.order;\r\n const orderB = bcurveB.order;\r\n const univariateCoffsA = new UnivariateBezier(orderA);\r\n const univariateCoffsB = new UnivariateBezier(orderB);\r\n for (let a = 0; a < numA; a++) {\r\n for (let b = 0; b < numB; b++) {\r\n if (rangeA[a].intersectsRangeXY(rangeB[b])) {\r\n const strokeCountA = bezierSpanA[a].computeStrokeCountForOptions();\r\n const strokeCountB = bezierSpanB[b].computeStrokeCountForOptions();\r\n if (strokeCountA < strokeCountB)\r\n this.dispatchBezierBezierStrokeFirst(\r\n bezierSpanA[a], bcurveA, strokeCountA, bezierSpanB[b], bcurveB, strokeCountB, univariateCoffsB, _reversed,\r\n );\r\n else\r\n this.dispatchBezierBezierStrokeFirst(\r\n bezierSpanB[b], bcurveB, strokeCountB, bezierSpanA[a], bcurveA, strokeCountA, univariateCoffsA, !_reversed,\r\n );\r\n }\r\n }\r\n }\r\n */\r\n }\r\n /*\r\n /**\r\n * Apply the projection transform (if any) to (xyz, w).\r\n * @param xyz xyz parts of input point.\r\n * @param w weight to use for homogeneous effects.\r\n */\r\n /*\r\n private projectPoint(xyz: XYAndZ, w: number = 1.0): Point4d {\r\n if (this._worldToLocalPerspective)\r\n return this._worldToLocalPerspective.multiplyPoint3d(xyz, w);\r\n if (this._worldToLocalAffine)\r\n return this._worldToLocalAffine.multiplyXYZW(xyz.x, xyz.y, xyz.z, w);\r\n return Point4d.createFromPointAndWeight(xyz, w);\r\n }\r\n private mapNPCPlaneToWorld(npcPlane: Point4d, worldPlane: Point4d) {\r\n // for NPC pointY, Y^ * H = 0 is \"on\" plane H. (Hat is transpose)\r\n // NPC Y is A*X for our transform A and worldPointX.\r\n // hence (A X)^ * H = 0\r\n // hence X^ * A^ * H = 0\r\n // hence K = A^ * H\r\n if (this._worldToLocalAffine) {\r\n this._worldToLocalAffine.multiplyTransposeXYZW(npcPlane.x, npcPlane.y, npcPlane.z, npcPlane.w, worldPlane);\r\n } else if (this._worldToLocalPerspective) {\r\n this._worldToLocalPerspective.multiplyTransposePoint4d(npcPlane, worldPlane);\r\n } else {\r\n npcPlane.clone(worldPlane);\r\n }\r\n }\r\n */\r\n // Caller accesses data from segment and bsplineCurve\r\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\"\r\n // Solves the arc-arc equations\r\n private dispatchSegmentBsplineCurve(\r\n _cpA: CurvePrimitive,\r\n _extendA0: boolean,\r\n _pointA0: Point3d,\r\n _fractionA0: number,\r\n _pointA1: Point3d,\r\n _fractionA1: number,\r\n _extendA1: boolean,\r\n _bcurve: BSplineCurve3d,\r\n _extendB: boolean,\r\n _reversed: boolean,\r\n ): void {\r\n /*\r\n const pointA0H = this.projectPoint(pointA0);\r\n const pointA1H = this.projectPoint(pointA1);\r\n const planeCoffs = Point4d.createPlanePointPointZ(pointA0H, pointA1H);\r\n this.mapNPCPlaneToWorld(planeCoffs, planeCoffs);\r\n // NOW .. we have a plane in world space. Intersect it with the bspline:\r\n const intersections: CurveLocationDetail[] = [];\r\n bcurve.appendPlaneIntersectionPoints(planeCoffs, intersections);\r\n // intersections has WORLD points with bspline fractions.\r\n // (the bspline fractions are all good 0..1 fractions within the spline).\r\n // accept those that are within the segment range.\r\n for (const detail of intersections) {\r\n const fractionB = detail.fraction;\r\n const curvePoint = detail.point;\r\n const curvePointH = this.projectPoint(curvePoint);\r\n const lineFraction = SmallSystem.lineSegment3dHXYClosestPointUnbounded(pointA0H, pointA1H, curvePointH);\r\n if (lineFraction !== undefined && this.acceptFraction(extendA0, lineFraction, extendA1) &&\r\n this.acceptFraction(extendB, fractionB, extendB)) {\r\n this.recordPointWithLocalFractions(\r\n lineFraction, cpA, fractionA0, fractionA1, fractionB, bcurve, 0, 1, reversed,\r\n );\r\n }\r\n }\r\n */\r\n }\r\n /** Low level dispatch of linestring with (beziers of) a bspline curve */\r\n public dispatchLineStringBSplineCurve(\r\n _lsA: LineString3d, _extendA: boolean, _curveB: BSplineCurve3d, _extendB: boolean, _reversed: boolean,\r\n ): any {\r\n /*\r\n const numA = lsA.numPoints();\r\n if (numA > 1) {\r\n const dfA = 1.0 / (numA - 1);\r\n let fA0;\r\n let fA1;\r\n fA0 = 0.0;\r\n const pointA0 = CurveCurveIntersectXYZ._workPointA0;\r\n const pointA1 = CurveCurveIntersectXYZ._workPointA1;\r\n lsA.pointAt(0, pointA0);\r\n for (let iA = 1; iA < numA; iA++, pointA0.setFrom(pointA1), fA0 = fA1) {\r\n lsA.pointAt(iA, pointA1);\r\n fA1 = iA * dfA;\r\n this.dispatchSegmentBsplineCurve(\r\n lsA, iA === 1 && extendA, pointA0, fA0, pointA1, fA1, (iA + 1) === numA && extendA,\r\n curveB, extendB, reversed);\r\n }\r\n }\r\n return undefined;\r\n */\r\n }\r\n /** Detail computation for segment intersecting linestring. */\r\n public computeSegmentLineString(\r\n lsA: LineSegment3d, extendA: boolean, lsB: LineString3d, extendB: boolean, reversed: boolean,\r\n ): any {\r\n const pointA0 = lsA.point0Ref;\r\n const pointA1 = lsA.point1Ref;\r\n const pointB0 = CurveCurveIntersectXYZ._workPointBB0;\r\n const pointB1 = CurveCurveIntersectXYZ._workPointBB1;\r\n const numB = lsB.numPoints();\r\n if (numB > 1) {\r\n const dfB = 1.0 / (numB - 1);\r\n let fB0;\r\n let fB1;\r\n fB0 = 0.0;\r\n lsB.pointAt(0, pointB0);\r\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\r\n lsB.pointAt(ib, pointB1);\r\n fB1 = ib * dfB;\r\n this.dispatchSegmentSegment(\r\n lsA, extendA, pointA0, 0.0, pointA1, 1.0, extendA,\r\n lsB, ib === 1 && extendB, pointB0, fB0, pointB1, fB1, (ib + 1) === numB && extendB,\r\n reversed,\r\n );\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Detail computation for arc intersecting linestring. */\r\n public computeArcLineString(\r\n arcA: Arc3d, extendA: boolean, lsB: LineString3d, extendB: boolean, reversed: boolean,\r\n ): any {\r\n const pointB0 = CurveCurveIntersectXYZ._workPointBB0;\r\n const pointB1 = CurveCurveIntersectXYZ._workPointBB1;\r\n const numB = lsB.numPoints();\r\n if (numB > 1) {\r\n const dfB = 1.0 / (numB - 1);\r\n let fB0;\r\n let fB1;\r\n fB0 = 0.0;\r\n lsB.pointAt(0, pointB0);\r\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\r\n lsB.pointAt(ib, pointB1);\r\n fB1 = ib * dfB;\r\n this.dispatchSegmentArc(\r\n lsB, ib === 1 && extendB, pointB0, fB0, pointB1, fB1,\r\n (ib + 1) === numB && extendB, arcA, extendA, extendA, !reversed,\r\n );\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Detail computation for linestring intersecting linestring. */\r\n private computeLineStringLineString(lsA: LineString3d, lsB: LineString3d, reversed: boolean): void {\r\n const pointA0 = CurveCurveIntersectXYZ._workPointAA0;\r\n const pointA1 = CurveCurveIntersectXYZ._workPointAA1;\r\n const pointB0 = CurveCurveIntersectXYZ._workPointBB0;\r\n const pointB1 = CurveCurveIntersectXYZ._workPointBB1;\r\n const numA = lsA.numPoints();\r\n const numB = lsB.numPoints();\r\n if (numA > 1 && numB > 1) {\r\n lsA.pointAt(0, pointA0);\r\n const dfA = 1.0 / (numA - 1);\r\n const dfB = 1.0 / (numB - 1);\r\n let fA0 = 0.0;\r\n let fB0;\r\n let fA1;\r\n let fB1;\r\n const extendA = this._extendA;\r\n const extendB = this._extendB;\r\n lsA.pointAt(0, pointA0);\r\n for (let ia = 1; ia < numA; ia++, pointA0.setFrom(pointA1), fA0 = fA1) {\r\n fA1 = ia * dfA;\r\n fB0 = 0.0;\r\n lsA.pointAt(ia, pointA1);\r\n lsB.pointAt(0, pointB0);\r\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\r\n lsB.pointAt(ib, pointB1);\r\n fB1 = ib * dfB;\r\n this.dispatchSegmentSegment(\r\n lsA, ia === 1 && extendA, pointA0, fA0, pointA1, fA1, (ia + 1) === numA && extendA,\r\n lsB, ib === 1 && extendB, pointB0, fB0, pointB1, fB1, (ib + 1) === numB && extendB,\r\n reversed,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n /** Low level dispatch of curve collection. */\r\n private dispatchCurveCollection(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\r\n const geomB = this._geometryB; // save\r\n if (!geomB || !geomB.children || !(geomB instanceof CurveCollection))\r\n return;\r\n for (const child of geomB.children) {\r\n this.resetGeometry(child);\r\n geomAHandler(geomA);\r\n }\r\n this._geometryB = geomB; // restore\r\n }\r\n /** Low level dispatch to geomA given a CurveChainWithDistanceIndex in geometryB. */\r\n private dispatchCurveChainWithDistanceIndex(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\r\n if (!this._geometryB || !(this._geometryB instanceof CurveChainWithDistanceIndex))\r\n return;\r\n if (geomA instanceof CurveChainWithDistanceIndex) {\r\n assert(!\"call handleCurveChainWithDistanceIndex(geomA) instead\");\r\n return;\r\n }\r\n const index0 = this._results.length;\r\n const geomB = this._geometryB; // save\r\n for (const child of geomB.path.children) {\r\n this.resetGeometry(child);\r\n geomAHandler(geomA);\r\n }\r\n this.resetGeometry(geomB); // restore\r\n this._results = CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);\r\n }\r\n /** Double dispatch handler for strongly typed segment. */\r\n public override handleLineSegment3d(segmentA: LineSegment3d): any {\r\n if (this._geometryB instanceof LineSegment3d) {\r\n const segmentB = this._geometryB;\r\n this.dispatchSegmentSegment(\r\n segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA,\r\n segmentB, this._extendB, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0, this._extendB,\r\n false,\r\n );\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.computeSegmentLineString(segmentA, this._extendA, this._geometryB, this._extendB, false);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchSegmentArc(\r\n segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref,\r\n 1.0, this._extendA, this._geometryB, this._extendB, this._extendB, false,\r\n );\r\n } else if (this._geometryB instanceof BSplineCurve3d) {\r\n this.dispatchSegmentBsplineCurve(\r\n segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref,\r\n 1.0, this._extendA, this._geometryB, this._extendB, false,\r\n );\r\n } else if (this._geometryB instanceof CurveCollection) {\r\n this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));\r\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\r\n this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));\r\n }\r\n return undefined;\r\n }\r\n /** double dispatch handler for strongly typed linestring. */\r\n public override handleLineString3d(lsA: LineString3d): any {\r\n if (this._geometryB instanceof LineString3d) {\r\n const lsB = this._geometryB;\r\n this.computeLineStringLineString(lsA, lsB, false);\r\n } else if (this._geometryB instanceof LineSegment3d) {\r\n this.computeSegmentLineString(this._geometryB, this._extendB, lsA, this._extendA, true);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.computeArcLineString(this._geometryB, this._extendB, lsA, this._extendA, true);\r\n } else if (this._geometryB instanceof BSplineCurve3d) {\r\n this.dispatchLineStringBSplineCurve(lsA, this._extendA, this._geometryB, this._extendB, false);\r\n } else if (this._geometryB instanceof CurveCollection) {\r\n this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));\r\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\r\n this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));\r\n }\r\n return undefined;\r\n }\r\n /** Double dispatch handler for strongly typed arc. */\r\n public override handleArc3d(arc0: Arc3d): any {\r\n if (this._geometryB instanceof LineSegment3d) {\r\n this.dispatchSegmentArc(\r\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref,\r\n 1.0, this._extendB, arc0, this._extendA, this._extendA, true,\r\n );\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.computeArcLineString(arc0, this._extendA, this._geometryB, this._extendB, false);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchArcArc(arc0, this._extendA, this._geometryB, this._extendB, false);\r\n } else if (this._geometryB instanceof BSplineCurve3d) {\r\n this.dispatchArcBsplineCurve3d(arc0, this._extendA, this._geometryB, this._extendB, false);\r\n } else if (this._geometryB instanceof CurveCollection) {\r\n this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));\r\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\r\n this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));\r\n }\r\n return undefined;\r\n }\r\n /** Double dispatch handler for strongly typed bspline curve. */\r\n public override handleBSplineCurve3d(curve: BSplineCurve3d): any {\r\n if (this._geometryB instanceof LineSegment3d) {\r\n this.dispatchSegmentBsplineCurve(\r\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref,\r\n 1.0, this._extendB, curve, this._extendA, true,\r\n );\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);\r\n } else if (this._geometryB instanceof BSplineCurve3dBase) {\r\n this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);\r\n } else if (this._geometryB instanceof CurveCollection) {\r\n this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));\r\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\r\n this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));\r\n }\r\n return undefined;\r\n }\r\n /** Double dispatch handler for strongly typed CurveChainWithDistanceIndex. */\r\n public override handleCurveChainWithDistanceIndex(chain: CurveChainWithDistanceIndex): any {\r\n super.handleCurveChainWithDistanceIndex(chain);\r\n // if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex\r\n this._results = CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);\r\n }\r\n /** Double dispatch handler for strongly typed homogeneous bspline curve. */\r\n public override handleBSplineCurve3dH(_curve: BSplineCurve3dH): any {\r\n /*\r\n // NEEDS WORK -- make \"dispatch\" methods tolerant of both 3d and 3dH\r\n // \"easy\" if both present BezierCurve3dH span loaders\r\n if (this._geometryB instanceof LineSegment3d) {\r\n this.dispatchSegmentBsplineCurve(\r\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB,\r\n curve, this._extendA, true);\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);\r\n }\r\n */\r\n return undefined;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CurveCurveIntersectXYZ.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveCurveIntersectXYZ.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { BSplineCurve3d, BSplineCurve3dBase } from \"../../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\nimport { Geometry } from \"../../Geometry\";\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\nimport { Vector2d } from \"../../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { SmallSystem, TrigPolynomial } from \"../../numerics/Polynomials\";\nimport { Arc3d } from \"../Arc3d\";\nimport { CurveChainWithDistanceIndex } from \"../CurveChainWithDistanceIndex\";\nimport { CurveCollection } from \"../CurveCollection\";\nimport { CurveIntervalRole, CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { AnyCurve } from \"../CurveTypes\";\nimport { LineSegment3d } from \"../LineSegment3d\";\nimport { LineString3d } from \"../LineString3d\";\n\n// cspell:word XYRR\n\n/**\n * Handler class for XYZ intersections between _geometryB and another geometry.\n * * Instances are initialized and called from CurveCurve.\n * * geometryB is saved for later reference.\n * @internal\n */\nexport class CurveCurveIntersectXYZ extends RecurseToCurvesGeometryHandler {\n private _extendA: boolean;\n private _geometryB: AnyCurve;\n private _extendB: boolean;\n private _results: CurveLocationDetailPair[];\n private static _workVector2dA = Vector2d.create();\n private static _workPointAA0 = Point3d.create();\n private static _workPointAA1 = Point3d.create();\n private static _workPointBB0 = Point3d.create();\n private static _workPointBB1 = Point3d.create();\n /**\n * @param extendA flag to enable using extension of the other geometry.\n * @param geometryB second curve for intersection. Saved for reference by specific handler methods.\n * @param extendB flag for extension of geometryB.\n */\n public constructor(extendA: boolean, geometryB: AnyCurve, extendB: boolean) {\n super();\n this._extendA = extendA;\n this._geometryB = geometryB;\n this._extendB = extendB;\n this._results = [];\n }\n /** Reset the geometry, leaving all other parts unchanged (and preserving accumulated intersections). */\n public resetGeometry(geometryB: AnyCurve): void {\n this._geometryB = geometryB;\n }\n /**\n * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair.\n * @param reinitialize if true, a new results structure is created for use by later calls.\n */\n public grabPairedResults(reinitialize: boolean = false): CurveLocationDetailPair[] {\n const result = this._results;\n if (reinitialize)\n this._results = [];\n return result;\n }\n private acceptFraction(extend0: boolean, fraction: number, extend1: boolean) {\n if (!extend0 && fraction < 0.0)\n return false;\n if (!extend1 && fraction > 1.0)\n return false;\n return true;\n }\n /**\n * Compute intersection of two line segments.\n * Filter by extension rules.\n * Reject if evaluated points do not match coordinates (e.g. close approach point).\n * Record with fraction mapping.\n */\n private recordPointWithLocalFractions(\n localFractionA: number,\n cpA: CurvePrimitive,\n fractionA0: number,\n fractionA1: number,\n localFractionB: number,\n cpB: CurvePrimitive,\n fractionB0: number,\n fractionB1: number,\n reversed: boolean,\n ): void {\n const globalFractionA = Geometry.interpolate(fractionA0, localFractionA, fractionA1);\n const globalFractionB = Geometry.interpolate(fractionB0, localFractionB, fractionB1);\n // ignore duplicate of most recent point\n const numPrevious = this._results.length;\n if (numPrevious > 0) {\n const oldDetailA = this._results[numPrevious - 1].detailA;\n const oldDetailB = this._results[numPrevious - 1].detailB;\n if (reversed) {\n if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n } else {\n if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n }\n }\n const pointA = cpA.fractionToPoint(globalFractionA);\n const pointB = cpB.fractionToPoint(globalFractionB);\n if (!pointA.isAlmostEqualMetric(pointB))\n return;\n const detailA = CurveLocationDetail.createCurveFractionPoint(cpA, globalFractionA, pointA);\n detailA.setIntervalRole(CurveIntervalRole.isolated);\n const detailB = CurveLocationDetail.createCurveFractionPoint(cpB, globalFractionB, pointB);\n detailB.setIntervalRole(CurveIntervalRole.isolated);\n if (reversed) {\n const pair = new CurveLocationDetailPair(detailB, detailA);\n this._results.push(pair);\n } else {\n const pair = new CurveLocationDetailPair(detailA, detailB);\n this._results.push(pair);\n }\n }\n /**\n * Compute intersection of two line segments.\n * Filter by extension rules.\n * Record with fraction mapping.\n */\n private computeSegmentSegment3D(\n cpA: CurvePrimitive,\n extendA0: boolean,\n pointA0: Point3d,\n fractionA0: number,\n pointA1: Point3d,\n fractionA1: number,\n extendA1: boolean,\n cpB: CurvePrimitive,\n extendB0: boolean,\n pointB0: Point3d,\n fractionB0: number,\n pointB1: Point3d,\n fractionB1: number,\n extendB1: boolean,\n reversed: boolean,\n ): void {\n const uv = CurveCurveIntersectXYZ._workVector2dA;\n if (SmallSystem.lineSegment3dClosestApproachUnbounded(pointA0, pointA1, pointB0, pointB1, uv) &&\n this.acceptFraction(extendA0, uv.x, extendA1) && this.acceptFraction(extendB0, uv.y, extendB1)) {\n this.recordPointWithLocalFractions(uv.x, cpA, fractionA0, fractionA1, uv.y, cpB, fractionB0, fractionB1, reversed);\n }\n }\n // Caller accesses data from a line segment and passes to here.\n // The line segment in question might be (a) a full line segment or (b) a fragment within a linestring.\n // The fraction and extend parameters allow all combinations to be passed in.\n // This method applies transform.\n private dispatchSegmentSegment(\n cpA: CurvePrimitive,\n extendA0: boolean,\n pointA0: Point3d,\n fractionA0: number,\n pointA1: Point3d,\n fractionA1: number,\n extendA1: boolean,\n cpB: CurvePrimitive,\n extendB0: boolean,\n pointB0: Point3d,\n fractionB0: number,\n pointB1: Point3d,\n fractionB1: number,\n extendB1: boolean,\n reversed: boolean,\n ): void {\n this.computeSegmentSegment3D(\n cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1,\n cpB, extendB0, pointB0, fractionB0, pointB1, fractionB1, extendB1,\n reversed,\n );\n }\n /**\n * Create a plane whose normal is the \"better\" cross product: `vectorA.crossProduct(vectorB)` or\n * `vectorA.crossProduct(vectorC)`\n * * The heuristic for \"better\" is:\n * * first choice is cross product with `vectorB`, if `vectorA` and `vectorB` are sufficiently far from parallel\n * (or anti-parallel).\n * * otherwise use vectorC\n * @param origin plane origin\n * @param vectorA vector which must be in the plane.\n * @param cosineValue largest cosine of the angle theta between vectorA and vectorB to prefer their cross product, e.g.\n * passing 0.94 ~ cos(20deg) will switch to using vectorC in the cross product if theta < ~20deg or theta > ~160deg.\n * @param vectorB first candidate for additional in-plane vector\n * @param vectorC second candidate for additional in-plane vector\n */\n public createPlaneWithPreferredPerpendicular(\n origin: Point3d, vectorA: Vector3d, cosineValue: number, vectorB: Vector3d, vectorC: Vector3d,\n ): Plane3dByOriginAndUnitNormal | undefined {\n cosineValue = Geometry.restrictToInterval(Math.abs(cosineValue), 0.0, 1.0 - Geometry.smallFraction);\n const dotAA = vectorA.magnitudeSquared();\n const dotBB = vectorB.magnitudeSquared();\n const dotAB = Math.abs(vectorA.dotProduct(vectorB));\n const cross = vectorA.unitCrossProduct(\n dotAB * dotAB <= cosineValue * cosineValue * dotAA * dotBB ? vectorB : vectorC,\n );\n if (cross)\n return Plane3dByOriginAndUnitNormal.create(origin, cross);\n return undefined;\n }\n // Caller accesses data from a linestring or segment and passes it here.\n // The line in question might be (a) a full line segment or (b) a fragment within a linestring.\n // The fraction and extend parameters allow all combinations to be passed in.\n private dispatchSegmentArc(\n cpA: CurvePrimitive,\n extendA0: boolean,\n pointA0: Point3d,\n fractionA0: number,\n pointA1: Point3d,\n fractionA1: number,\n extendA1: boolean,\n arc: Arc3d,\n extendB0: boolean,\n extendB1: boolean,\n reversed: boolean,\n ): void {\n const lineVector = Vector3d.createStartEnd(pointA0, pointA1);\n const cosValue = 0.94; // cosine of 20 degrees\n const plane = this.createPlaneWithPreferredPerpendicular(\n pointA0, lineVector, cosValue, arc.perpendicularVector, arc.vector0,\n );\n if (plane !== undefined) {\n const candidates: CurveLocationDetail[] = [];\n arc.appendPlaneIntersectionPoints(plane, candidates);\n let lineFraction;\n let linePoint: Point3d | undefined;\n for (const c of candidates) {\n if (this.acceptFraction(extendB0, c.fraction, extendB1)) {\n lineFraction = SmallSystem.lineSegment3dClosestPointUnbounded(pointA0, pointA1, c.point);\n if (lineFraction !== undefined) {\n linePoint = pointA0.interpolate(lineFraction, pointA1, linePoint);\n if (linePoint.isAlmostEqualMetric(c.point)\n && this.acceptFraction(extendA0, lineFraction, extendA1)) {\n this.recordPointWithLocalFractions(\n lineFraction, cpA, fractionA0, fractionA1, c.fraction, arc, 0, 1, reversed,\n );\n }\n }\n }\n }\n }\n }\n // Caller promises arcs are coplanar.\n // Passes \"other\" as {center, vector0, vector90} in local xy space of cpA\n // Solves the arc-arc equations for that local ellipse with unit circle.\n // Solution fractions map directly to original arcs.\n private dispatchArcArcInPlane(\n cpA: Arc3d, extendA: boolean, cpB: Arc3d, extendB: boolean, reversed: boolean,\n ): void {\n const otherVectors = cpA.otherArcAsLocalVectors(cpB);\n if (otherVectors !== undefined) {\n const ellipseRadians: number[] = [];\n const circleRadians: number[] = [];\n TrigPolynomial.solveUnitCircleHomogeneousEllipseIntersection(\n otherVectors.center.x, otherVectors.center.y, 1.0,\n otherVectors.vector0.x, otherVectors.vector0.y, 0.0,\n otherVectors.vector90.x, otherVectors.vector90.y, 0.0,\n ellipseRadians, circleRadians,\n );\n for (let i = 0; i < ellipseRadians.length; i++) {\n const fractionA = cpA.sweep.radiansToSignedPeriodicFraction(circleRadians[i]);\n const fractionB = cpB.sweep.radiansToSignedPeriodicFraction(ellipseRadians[i]);\n // hm .. do we really need to check the fractions? We know they are internal to the beziers\n if (this.acceptFraction(extendA, fractionA, extendA) && this.acceptFraction(extendB, fractionB, extendB)) {\n this.recordPointWithLocalFractions(fractionA, cpA, 0, 1, fractionB, cpB, 0, 1, reversed);\n }\n }\n }\n }\n // Caller accesses data from two arcs.\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\".\n // Solves the arc-arc equations.\n private dispatchArcArc(\n cpA: Arc3d, extendA: boolean, cpB: Arc3d, extendB: boolean, reversed: boolean,\n ): void {\n // If arcs are in different planes:\n // 1) Intersect each plane with the other arc (quadratic)\n // 2) accept points that appear in both intersection sets.\n // If arcs are in parallel planes -- no intersections.\n // If arcs are in the same plane -- xy intersection in that plane.\n const planeA = Plane3dByOriginAndUnitNormal.create(cpA.center, cpA.perpendicularVector);\n const planeB = Plane3dByOriginAndUnitNormal.create(cpB.center, cpB.perpendicularVector);\n if (planeA === undefined || planeB === undefined)\n return;\n if (planeA.getNormalRef().isParallelTo(planeB.getNormalRef())) {\n if (planeA.isPointInPlane(planeB.getOriginRef()) && planeB.isPointInPlane(planeA.getOriginRef())) {\n // coplanar\n this.dispatchArcArcInPlane(cpA, extendA, cpB, extendB, reversed);\n }\n } else {\n const arcBPoints: CurveLocationDetail[] = [];\n cpB.appendPlaneIntersectionPoints(planeA, arcBPoints);\n const arcAPoints: CurveLocationDetail[] = [];\n cpA.appendPlaneIntersectionPoints(planeB, arcAPoints);\n for (const detailB of arcBPoints) {\n for (const detailA of arcAPoints) {\n if (detailA.point.isAlmostEqual(detailB.point)) {\n if (this.acceptFraction(extendA, detailA.fraction, extendA)\n && this.acceptFraction(extendB, detailB.fraction, extendB)) {\n this.recordPointWithLocalFractions(detailA.fraction, cpA, 0, 1, detailB.fraction, cpB, 0, 1, reversed);\n }\n }\n }\n }\n }\n }\n // Caller accesses data from two arcs.\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\".\n // Solves the arc-arc equations.\n private dispatchArcBsplineCurve3d(\n _arc: Arc3d, _extendA: boolean, _cpB: BSplineCurve3d, _extendB: boolean, _reversed: boolean,\n ): void {\n /*\n // Arc: X = C + cU + sV\n // implicitize the arc as viewed. This \"3d\" matrix is homogeneous \"XYW\" not \"xyz\"\n let matrixA: Matrix3d;\n if (this._worldToLocalPerspective) {\n const dataA = cpA.toTransformedPoint4d(this._worldToLocalPerspective);\n matrixA = Matrix3d.createColumnsXYW(\n dataA.vector0, dataA.vector0.w, dataA.vector90, dataA.vector90.w, dataA.center, dataA.center.w,\n );\n } else {\n const dataA = cpA.toTransformedVectors(this._worldToLocalAffine);\n matrixA = Matrix3d.createColumnsXYW(dataA.vector0, 0, dataA.vector90, 0, dataA.center, 1);\n }\n // The worldToLocal has moved the arc vectors into local space.\n // matrixA captures the xyw parts (ignoring z)\n // for any point in world space,\n // THIS CODE ONLY WORKS FOR\n const matrixAInverse = matrixA.inverse();\n if (matrixAInverse) {\n const orderF = cpB.order; // order of the beziers for simple coordinates\n const orderG = 2 * orderF - 1; // order of the (single) bezier for squared coordinates.\n const coffF = new Float64Array(orderF);\n const univariateBezierG = new UnivariateBezier(orderG);\n const axx = matrixAInverse.at(0, 0);\n const axy = matrixAInverse.at(0, 1);\n const axz = 0.0;\n const axw = matrixAInverse.at(0, 2);\n const ayx = matrixAInverse.at(1, 0);\n const ayy = matrixAInverse.at(1, 1);\n const ayz = 0.0;\n const ayw = matrixAInverse.at(1, 2);\n const awx = matrixAInverse.at(2, 0);\n const awy = matrixAInverse.at(2, 1);\n const awz = 0.0;\n const aww = matrixAInverse.at(2, 2);\n\n if (matrixAInverse) {\n let bezier: BezierCurve3dH | undefined;\n for (let spanIndex = 0; ; spanIndex++) {\n bezier = cpB.getSaturatedBezierSpan3dH(spanIndex, bezier);\n if (!bezier) break;\n if (this._worldToLocalPerspective)\n bezier.tryMultiplyMatrix4dInPlace(this._worldToLocalPerspective);\n else if (this._worldToLocalAffine)\n bezier.tryTransformInPlace(this._worldToLocalAffine);\n univariateBezierG.zero();\n bezier.poleProductsXYZW(coffF, axx, axy, axz, axw);\n univariateBezierG.addSquaredSquaredBezier(coffF, 1.0);\n bezier.poleProductsXYZW(coffF, ayx, ayy, ayz, ayw);\n univariateBezierG.addSquaredSquaredBezier(coffF, 1.0);\n bezier.poleProductsXYZW(coffF, awx, awy, awz, aww);\n univariateBezierG.addSquaredSquaredBezier(coffF, -1.0);\n const roots = univariateBezierG.roots(0.0, true);\n if (roots) {\n for (const root of roots) {\n const fractionB = bezier.fractionToParentFraction(root);\n // The univariate bezier (which has been transformed by the view transform) evaluates into xyw space\n const bcurvePoint4d = bezier.fractionToPoint4d(root);\n const c = bcurvePoint4d.dotProductXYZW(axx, axy, axz, axw);\n const s = bcurvePoint4d.dotProductXYZW(ayx, ayy, ayz, ayw);\n const arcFraction = cpA.sweep.radiansToSignedPeriodicFraction(Math.atan2(s, c));\n if (this.acceptFraction(extendA, arcFraction, extendA) &&\n this.acceptFraction(extendB, fractionB, extendB)) {\n this.recordPointWithLocalFractions(\n arcFraction, cpA, 0, 1, fractionB, cpB, 0, 1, reversed,\n );\n }\n }\n }\n }\n }\n }\n */\n }\n /*\n // Apply the transformation to bezier curves. Optionally construct ranges.\n private transformBeziers(beziers: BezierCurve3dH[]): void {\n if (this._worldToLocalAffine) {\n for (const bezier of beziers) bezier.tryTransformInPlace(this._worldToLocalAffine);\n } else if (this._worldToLocalPerspective) {\n for (const bezier of beziers) bezier.tryMultiplyMatrix4dInPlace(this._worldToLocalPerspective);\n }\n }\n */\n /*\n private getRanges(beziers: BezierCurveBase[]): Range3d[] {\n const ranges: Range3d[] = [];\n ranges.length = 0;\n for (const b of beziers) {\n ranges.push(b.range());\n }\n return ranges;\n }\n private dispatchBezierBezierStrokeFirst(\n bezierA: BezierCurve3dH,\n bcurveA: BSplineCurve3dBase,\n strokeCountA: number,\n bezierB: BezierCurve3dH,\n bcurveB: BSplineCurve3dBase,\n _strokeCountB: number,\n univariateBezierB: UnivariateBezier, // caller-allocated for univariate coefficients.\n reversed: boolean,\n ) {\n if (!this._xyzwA0)\n this._xyzwA0 = Point4d.create();\n if (!this._xyzwA1)\n this._xyzwA1 = Point4d.create();\n if (!this._xyzwPlane)\n this._xyzwPlane = Point4d.create();\n if (!this._xyzwB)\n this._xyzwB = Point4d.create();\n const roots = univariateBezierG.roots(0.0, true);\n if (roots) {\n for (const root of roots) {\n const fractionB = bezier.fractionToParentFraction(root);\n // The univariate bezier (which has been transformed by the view transform) evaluates into xyw space\n const bcurvePoint4d = bezier.fractionToPoint4d(root);\n const c = bcurvePoint4d.dotProductXYZW(axx, axy, axz, axw);\n const s = bcurvePoint4d.dotProductXYZW(ayx, ayy, ayz, ayw);\n const arcFraction = cpA.sweep.radiansToSignedPeriodicFraction(Math.atan2(s, c));\n if (this.acceptFraction(extendA, arcFraction, extendA) && this.acceptFraction(extendB, fractionB, extendB)) {\n this.recordPointWithLocalFractions(\n arcFraction, cpA, 0, 1, fractionB, cpB, 0, 1, reversed,\n );\n }\n }\n bezierA.fractionToPoint4d(0.0, this._xyzwA0);\n let f0 = 0.0;\n let f1 = 1.0;\n const intervalTolerance = 1.0e-5;\n const df = 1.0 / strokeCountA;\n for (let i = 1; i <= strokeCountA; i++ , f0 = f1, this._xyzwA0.setFrom(this._xyzwA1)) {\n f1 = i * df;\n bezierA.fractionToPoint4d(f1, this._xyzwA1);\n Point4d.createPlanePointPointZ(this._xyzwA0, this._xyzwA1, this._xyzwPlane);\n bezierB.poleProductsXYZW(\n univariateBezierB.coffs, this._xyzwPlane.x, this._xyzwPlane.y, this._xyzwPlane.z, this._xyzwPlane.w,\n );\n let errors = 0;\n const roots = univariateBezierB.roots(0.0, true);\n if (roots)\n for (const r of roots) {\n const bezierBFraction = r;\n bezierB.fractionToPoint4d(bezierBFraction, this._xyzwB);\n const segmentAFraction = SmallSystem.lineSegment3dHXYClosestPointUnbounded(this._xyzwA0, this._xyzwA1, this._xyzwB);\n if (segmentAFraction && Geometry.isIn01WithTolerance(segmentAFraction, intervalTolerance)) {\n const bezierAFraction = Geometry.interpolate(f0, segmentAFraction, f1);\n // TODO implement newton search\n const xyMatchingFunction = new BezierBezierIntersectionXYRRToRRD(bezierA, bezierB);\n const newtonSearcher = new Newton2dUnboundedWithDerivative(xyMatchingFunction);\n newtonSearcher.setUV(bezierAFraction, bezierBFraction);\n if (newtonSearcher.runIterations()) {\n bezierAFraction = newtonSearcher.getU();\n bezierBFraction = newtonSearcher.getV();\n }\n // We have a near intersection at fractions on the two beziers !!!\n // Iterate on the curves for a true intersection ....\n // NEEDS WORK -- just accept . . .\n const bcurveAFraction = bezierA.fractionToParentFraction(bezierAFraction);\n const bcurveBFraction = bezierB.fractionToParentFraction(bezierBFraction);\n const xyzA0 = bezierA.fractionToPoint(bezierAFraction);\n const xyzA1 = bcurveA.fractionToPoint(bcurveAFraction);\n const xyzB0 = bezierB.fractionToPoint(bezierBFraction);\n const xyzB1 = bcurveB.fractionToPoint(bcurveBFraction);\n if (!xyzA0.isAlmostEqualXY(xyzA1))\n errors++;\n if (!xyzB0.isAlmostEqualXY(xyzB1))\n errors++;\n if (errors > 0 && !xyzA0.isAlmostEqual(xyzB0))\n errors++;\n if (errors > 0 && !xyzA1.isAlmostEqual(xyzB1))\n errors++;\n if (this.acceptFraction(false, bcurveAFraction, false) &&\n this.acceptFraction(false, bcurveBFraction, false)) {\n this.recordPointWithLocalFractions(\n bcurveAFraction, bcurveA, 0, 1, bcurveBFraction, bcurveB, 0, 1, reversed,\n );\n }\n }\n }\n }\n }\n */\n // Caller accesses data from two arcs.\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\".\n // Solves the arc-arc equations.\n private dispatchBSplineCurve3dBSplineCurve3d(\n _bcurveA: BSplineCurve3dBase, _bcurveB: BSplineCurve3dBase, _reversed: boolean,\n ): void {\n /*\n const bezierSpanA = bcurveA.collectBezierSpans(true) as BezierCurve3dH[];\n const bezierSpanB = bcurveB.collectBezierSpans(true) as BezierCurve3dH[];\n const numA = bezierSpanA.length;\n const numB = bezierSpanB.length;\n this.transformBeziers(bezierSpanA);\n this.transformBeziers(bezierSpanB);\n const rangeA = this.getRanges(bezierSpanA);\n const rangeB = this.getRanges(bezierSpanB);\n const orderA = bcurveA.order;\n const orderB = bcurveB.order;\n const univariateCoffsA = new UnivariateBezier(orderA);\n const univariateCoffsB = new UnivariateBezier(orderB);\n for (let a = 0; a < numA; a++) {\n for (let b = 0; b < numB; b++) {\n if (rangeA[a].intersectsRangeXY(rangeB[b])) {\n const strokeCountA = bezierSpanA[a].computeStrokeCountForOptions();\n const strokeCountB = bezierSpanB[b].computeStrokeCountForOptions();\n if (strokeCountA < strokeCountB)\n this.dispatchBezierBezierStrokeFirst(\n bezierSpanA[a], bcurveA, strokeCountA, bezierSpanB[b], bcurveB, strokeCountB, univariateCoffsB, _reversed,\n );\n else\n this.dispatchBezierBezierStrokeFirst(\n bezierSpanB[b], bcurveB, strokeCountB, bezierSpanA[a], bcurveA, strokeCountA, univariateCoffsA, !_reversed,\n );\n }\n }\n }\n */\n }\n /*\n /**\n * Apply the projection transform (if any) to (xyz, w).\n * @param xyz xyz parts of input point.\n * @param w weight to use for homogeneous effects.\n */\n /*\n private projectPoint(xyz: XYAndZ, w: number = 1.0): Point4d {\n if (this._worldToLocalPerspective)\n return this._worldToLocalPerspective.multiplyPoint3d(xyz, w);\n if (this._worldToLocalAffine)\n return this._worldToLocalAffine.multiplyXYZW(xyz.x, xyz.y, xyz.z, w);\n return Point4d.createFromPointAndWeight(xyz, w);\n }\n private mapNPCPlaneToWorld(npcPlane: Point4d, worldPlane: Point4d) {\n // for NPC pointY, Y^ * H = 0 is \"on\" plane H. (Hat is transpose)\n // NPC Y is A*X for our transform A and worldPointX.\n // hence (A X)^ * H = 0\n // hence X^ * A^ * H = 0\n // hence K = A^ * H\n if (this._worldToLocalAffine) {\n this._worldToLocalAffine.multiplyTransposeXYZW(npcPlane.x, npcPlane.y, npcPlane.z, npcPlane.w, worldPlane);\n } else if (this._worldToLocalPerspective) {\n this._worldToLocalPerspective.multiplyTransposePoint4d(npcPlane, worldPlane);\n } else {\n npcPlane.clone(worldPlane);\n }\n }\n */\n // Caller accesses data from segment and bsplineCurve\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\"\n // Solves the arc-arc equations\n private dispatchSegmentBsplineCurve(\n _cpA: CurvePrimitive,\n _extendA0: boolean,\n _pointA0: Point3d,\n _fractionA0: number,\n _pointA1: Point3d,\n _fractionA1: number,\n _extendA1: boolean,\n _bcurve: BSplineCurve3d,\n _extendB: boolean,\n _reversed: boolean,\n ): void {\n /*\n const pointA0H = this.projectPoint(pointA0);\n const pointA1H = this.projectPoint(pointA1);\n const planeCoffs = Point4d.createPlanePointPointZ(pointA0H, pointA1H);\n this.mapNPCPlaneToWorld(planeCoffs, planeCoffs);\n // NOW .. we have a plane in world space. Intersect it with the bspline:\n const intersections: CurveLocationDetail[] = [];\n bcurve.appendPlaneIntersectionPoints(planeCoffs, intersections);\n // intersections has WORLD points with bspline fractions.\n // (the bspline fractions are all good 0..1 fractions within the spline).\n // accept those that are within the segment range.\n for (const detail of intersections) {\n const fractionB = detail.fraction;\n const curvePoint = detail.point;\n const curvePointH = this.projectPoint(curvePoint);\n const lineFraction = SmallSystem.lineSegment3dHXYClosestPointUnbounded(pointA0H, pointA1H, curvePointH);\n if (lineFraction !== undefined && this.acceptFraction(extendA0, lineFraction, extendA1) &&\n this.acceptFraction(extendB, fractionB, extendB)) {\n this.recordPointWithLocalFractions(\n lineFraction, cpA, fractionA0, fractionA1, fractionB, bcurve, 0, 1, reversed,\n );\n }\n }\n */\n }\n /** Low level dispatch of linestring with (beziers of) a bspline curve */\n public dispatchLineStringBSplineCurve(\n _lsA: LineString3d, _extendA: boolean, _curveB: BSplineCurve3d, _extendB: boolean, _reversed: boolean,\n ): any {\n /*\n const numA = lsA.numPoints();\n if (numA > 1) {\n const dfA = 1.0 / (numA - 1);\n let fA0;\n let fA1;\n fA0 = 0.0;\n const pointA0 = CurveCurveIntersectXYZ._workPointA0;\n const pointA1 = CurveCurveIntersectXYZ._workPointA1;\n lsA.pointAt(0, pointA0);\n for (let iA = 1; iA < numA; iA++, pointA0.setFrom(pointA1), fA0 = fA1) {\n lsA.pointAt(iA, pointA1);\n fA1 = iA * dfA;\n this.dispatchSegmentBsplineCurve(\n lsA, iA === 1 && extendA, pointA0, fA0, pointA1, fA1, (iA + 1) === numA && extendA,\n curveB, extendB, reversed);\n }\n }\n return undefined;\n */\n }\n /** Detail computation for segment intersecting linestring. */\n public computeSegmentLineString(\n lsA: LineSegment3d, extendA: boolean, lsB: LineString3d, extendB: boolean, reversed: boolean,\n ): any {\n const pointA0 = lsA.point0Ref;\n const pointA1 = lsA.point1Ref;\n const pointB0 = CurveCurveIntersectXYZ._workPointBB0;\n const pointB1 = CurveCurveIntersectXYZ._workPointBB1;\n const numB = lsB.numPoints();\n if (numB > 1) {\n const dfB = 1.0 / (numB - 1);\n let fB0;\n let fB1;\n fB0 = 0.0;\n lsB.pointAt(0, pointB0);\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\n lsB.pointAt(ib, pointB1);\n fB1 = ib * dfB;\n this.dispatchSegmentSegment(\n lsA, extendA, pointA0, 0.0, pointA1, 1.0, extendA,\n lsB, ib === 1 && extendB, pointB0, fB0, pointB1, fB1, (ib + 1) === numB && extendB,\n reversed,\n );\n }\n }\n return undefined;\n }\n /** Detail computation for arc intersecting linestring. */\n public computeArcLineString(\n arcA: Arc3d, extendA: boolean, lsB: LineString3d, extendB: boolean, reversed: boolean,\n ): any {\n const pointB0 = CurveCurveIntersectXYZ._workPointBB0;\n const pointB1 = CurveCurveIntersectXYZ._workPointBB1;\n const numB = lsB.numPoints();\n if (numB > 1) {\n const dfB = 1.0 / (numB - 1);\n let fB0;\n let fB1;\n fB0 = 0.0;\n lsB.pointAt(0, pointB0);\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\n lsB.pointAt(ib, pointB1);\n fB1 = ib * dfB;\n this.dispatchSegmentArc(\n lsB, ib === 1 && extendB, pointB0, fB0, pointB1, fB1,\n (ib + 1) === numB && extendB, arcA, extendA, extendA, !reversed,\n );\n }\n }\n return undefined;\n }\n /** Detail computation for linestring intersecting linestring. */\n private computeLineStringLineString(lsA: LineString3d, lsB: LineString3d, reversed: boolean): void {\n const pointA0 = CurveCurveIntersectXYZ._workPointAA0;\n const pointA1 = CurveCurveIntersectXYZ._workPointAA1;\n const pointB0 = CurveCurveIntersectXYZ._workPointBB0;\n const pointB1 = CurveCurveIntersectXYZ._workPointBB1;\n const numA = lsA.numPoints();\n const numB = lsB.numPoints();\n if (numA > 1 && numB > 1) {\n lsA.pointAt(0, pointA0);\n const dfA = 1.0 / (numA - 1);\n const dfB = 1.0 / (numB - 1);\n let fA0 = 0.0;\n let fB0;\n let fA1;\n let fB1;\n const extendA = this._extendA;\n const extendB = this._extendB;\n lsA.pointAt(0, pointA0);\n for (let ia = 1; ia < numA; ia++, pointA0.setFrom(pointA1), fA0 = fA1) {\n fA1 = ia * dfA;\n fB0 = 0.0;\n lsA.pointAt(ia, pointA1);\n lsB.pointAt(0, pointB0);\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\n lsB.pointAt(ib, pointB1);\n fB1 = ib * dfB;\n this.dispatchSegmentSegment(\n lsA, ia === 1 && extendA, pointA0, fA0, pointA1, fA1, (ia + 1) === numA && extendA,\n lsB, ib === 1 && extendB, pointB0, fB0, pointB1, fB1, (ib + 1) === numB && extendB,\n reversed,\n );\n }\n }\n }\n }\n /** Low level dispatch of curve collection. */\n private dispatchCurveCollection(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\n const geomB = this._geometryB; // save\n if (!geomB || !geomB.children || !(geomB instanceof CurveCollection))\n return;\n for (const child of geomB.children) {\n this.resetGeometry(child);\n geomAHandler(geomA);\n }\n this._geometryB = geomB; // restore\n }\n /** Low level dispatch to geomA given a CurveChainWithDistanceIndex in geometryB. */\n private dispatchCurveChainWithDistanceIndex(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\n if (!this._geometryB || !(this._geometryB instanceof CurveChainWithDistanceIndex))\n return;\n if (geomA instanceof CurveChainWithDistanceIndex) {\n assert(!\"call handleCurveChainWithDistanceIndex(geomA) instead\");\n return;\n }\n const index0 = this._results.length;\n const geomB = this._geometryB; // save\n for (const child of geomB.path.children) {\n this.resetGeometry(child);\n geomAHandler(geomA);\n }\n this.resetGeometry(geomB); // restore\n this._results = CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);\n }\n /** Double dispatch handler for strongly typed segment. */\n public override handleLineSegment3d(segmentA: LineSegment3d): any {\n if (this._geometryB instanceof LineSegment3d) {\n const segmentB = this._geometryB;\n this.dispatchSegmentSegment(\n segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA,\n segmentB, this._extendB, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0, this._extendB,\n false,\n );\n } else if (this._geometryB instanceof LineString3d) {\n this.computeSegmentLineString(segmentA, this._extendA, this._geometryB, this._extendB, false);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchSegmentArc(\n segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref,\n 1.0, this._extendA, this._geometryB, this._extendB, this._extendB, false,\n );\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchSegmentBsplineCurve(\n segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref,\n 1.0, this._extendA, this._geometryB, this._extendB, false,\n );\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));\n }\n return undefined;\n }\n /** double dispatch handler for strongly typed linestring. */\n public override handleLineString3d(lsA: LineString3d): any {\n if (this._geometryB instanceof LineString3d) {\n const lsB = this._geometryB;\n this.computeLineStringLineString(lsA, lsB, false);\n } else if (this._geometryB instanceof LineSegment3d) {\n this.computeSegmentLineString(this._geometryB, this._extendB, lsA, this._extendA, true);\n } else if (this._geometryB instanceof Arc3d) {\n this.computeArcLineString(this._geometryB, this._extendB, lsA, this._extendA, true);\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchLineStringBSplineCurve(lsA, this._extendA, this._geometryB, this._extendB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));\n }\n return undefined;\n }\n /** Double dispatch handler for strongly typed arc. */\n public override handleArc3d(arc0: Arc3d): any {\n if (this._geometryB instanceof LineSegment3d) {\n this.dispatchSegmentArc(\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref,\n 1.0, this._extendB, arc0, this._extendA, this._extendA, true,\n );\n } else if (this._geometryB instanceof LineString3d) {\n this.computeArcLineString(arc0, this._extendA, this._geometryB, this._extendB, false);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchArcArc(arc0, this._extendA, this._geometryB, this._extendB, false);\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchArcBsplineCurve3d(arc0, this._extendA, this._geometryB, this._extendB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));\n }\n return undefined;\n }\n /** Double dispatch handler for strongly typed bspline curve. */\n public override handleBSplineCurve3d(curve: BSplineCurve3d): any {\n if (this._geometryB instanceof LineSegment3d) {\n this.dispatchSegmentBsplineCurve(\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref,\n 1.0, this._extendB, curve, this._extendA, true,\n );\n } else if (this._geometryB instanceof LineString3d) {\n this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);\n } else if (this._geometryB instanceof BSplineCurve3dBase) {\n this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));\n }\n return undefined;\n }\n /** Double dispatch handler for strongly typed CurveChainWithDistanceIndex. */\n public override handleCurveChainWithDistanceIndex(chain: CurveChainWithDistanceIndex): any {\n super.handleCurveChainWithDistanceIndex(chain);\n // if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex\n this._results = CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);\n }\n /** Double dispatch handler for strongly typed homogeneous bspline curve. */\n public override handleBSplineCurve3dH(_curve: BSplineCurve3dH): any {\n /*\n // NEEDS WORK -- make \"dispatch\" methods tolerant of both 3d and 3dH\n // \"easy\" if both present BezierCurve3dH span loaders\n if (this._geometryB instanceof LineSegment3d) {\n this.dispatchSegmentBsplineCurve(\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB,\n curve, this._extendA, true);\n } else if (this._geometryB instanceof LineString3d) {\n this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);\n }\n */\n return undefined;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurveLengthContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveLengthContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"CurveLengthContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveLengthContext.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 Curve\n */\n\nimport { IStrokeHandler } from \"../../geometry3d/GeometryHandler\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Range1d } from \"../../geometry3d/Range\";\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\nimport { GaussMapper } from \"../../numerics/Quadrature\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\n\n/**\n * Context for computing the length of a CurvePrimitive.\n * @internal\n */\nexport class CurveLengthContext implements IStrokeHandler {\n private _curve: CurvePrimitive | undefined;\n private _summedLength: number;\n private _ray: Ray3d;\n private _fraction0: number;\n private _fraction1: number;\n private _gaussMapper: GaussMapper;\n\n private tangentMagnitude(fraction: number): number {\n this._ray = (this._curve as CurvePrimitive).fractionToPointAndDerivative(fraction, this._ray);\n return this._ray.direction.magnitude();\n }\n\n /** Return the fraction0 installed at construction time. */\n public get getFraction0(): number {\n return this._fraction0;\n }\n\n /** Return the fraction1 installed at construction time. */\n public get getFraction1(): number {\n return this._fraction1;\n }\n\n public getSum() {\n return this._summedLength;\n }\n\n public constructor(fraction0: number = 0.0, fraction1: number = 1.0, numGaussPoints: number = 5) {\n this.startCurvePrimitive(undefined);\n this._summedLength = 0.0;\n this._ray = Ray3d.createZero();\n if (fraction0 < fraction1) {\n this._fraction0 = fraction0;\n this._fraction1 = fraction1;\n } else {\n this._fraction0 = fraction1;\n this._fraction1 = fraction0;\n }\n this._gaussMapper = new GaussMapper(numGaussPoints);\n }\n\n public startCurvePrimitive(curve: CurvePrimitive | undefined) {\n this._curve = curve;\n }\n\n public startParentCurvePrimitive(_curve: CurvePrimitive) {\n }\n\n public endParentCurvePrimitive(_curve: CurvePrimitive) {\n }\n\n public endCurvePrimitive() {\n }\n\n public announceIntervalForUniformStepStrokes(cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number): void {\n const range = Range1d.createXX(fraction0, fraction1);\n range.intersectRangeXXInPlace(this._fraction0, this._fraction1);\n if (!range.isNull) {\n this.startCurvePrimitive(cp);\n if (numStrokes < 1)\n numStrokes = 1;\n const df = 1.0 / numStrokes;\n for (let i = 1; i <= numStrokes; i++) {\n const fractionA = range.fractionToPoint((i - 1) * df);\n const fractionB = i === numStrokes ? range.high : range.fractionToPoint(i * df);\n const numGauss = this._gaussMapper.mapXAndW(fractionA, fractionB);\n for (let k = 0; k < numGauss; k++) {\n this._summedLength += this._gaussMapper.gaussW[k] * this.tangentMagnitude(this._gaussMapper.gaussX[k]);\n }\n }\n }\n }\n\n public announceSegmentInterval(_cp: CurvePrimitive, point0: Point3d, point1: Point3d, _numStrokes: number, fraction0: number, fraction1: number): void {\n const segmentLength = point0.distance(point1);\n if (this._fraction0 <= fraction0 && fraction1 <= this._fraction1)\n this._summedLength += segmentLength;\n else {\n const range = Range1d.createXX(fraction0, fraction1);\n range.intersectRangeXXInPlace(this._fraction0, this._fraction1);\n if (!range.isNull)\n this._summedLength += segmentLength * range.length() / (fraction1 - fraction0);\n }\n }\n\n public announcePointTangent(_xyz: Point3d, _fraction: number, _tangent: Vector3d): void {\n // uh oh -- need to retain point for next interval\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurveOffsetXYHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveOffsetXYHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"CurveOffsetXYHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveOffsetXYHandler.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 Curve\n */\n\nimport { BSplineCurve3d } from \"../../bspline/BSplineCurve\";\nimport { BSplineCurveOps } from \"../../bspline/BSplineCurveOps\";\nimport { InterpolationCurve3dOptions } from \"../../bspline/InterpolationCurve3d\";\nimport { Geometry } from \"../../Geometry\";\nimport { IStrokeHandler } from \"../../geometry3d/GeometryHandler\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\n\n/**\n * Context for constructing the xy-offset of a CurvePrimitive by interpolating the xy-offsets of computed strokes.\n * @internal\n */\nexport class CurveOffsetXYHandler implements IStrokeHandler {\n private _offsetDistance: number;\n private _fitOptions: InterpolationCurve3dOptions;\n\n // temporary workspace\n private _p0 = Point3d.createZero();\n private _p1 = Point3d.createZero();\n private _v0 = Vector3d.createZero();\n private _v1 = Vector3d.createZero();\n private _r0 = Ray3d.createZero();\n\n public constructor(cp: CurvePrimitive, offsetDistance: number) {\n this._offsetDistance = offsetDistance;\n this._fitOptions = new InterpolationCurve3dOptions();\n const startTangent = cp.fractionToPointAndUnitTangent(0.0, this._r0).direction.clone();\n const endTangent = cp.fractionToPointAndUnitTangent(1.0, this._r0).direction.negate(); // points into curve\n this._fitOptions.startTangent = startTangent;\n this._fitOptions.endTangent = endTangent;\n if (this._fitOptions.closed = (\n cp.startPoint(this._p0).isAlmostEqual(cp.endPoint(this._p1)) && startTangent.isParallelTo(endTangent, true)\n ))\n this._fitOptions.isChordLenKnots = 1;\n }\n private pushOffsetPoint(xyz: Point3d, tangent: Vector3d) {\n if (!Geometry.isSmallMetricDistance(tangent.x) || !Geometry.isSmallMetricDistance(tangent.y))\n this._fitOptions.fitPoints.push(xyz.plusScaled(tangent.unitPerpendicularXY(this._v0), this._offsetDistance));\n }\n public needPrimaryGeometryForStrokes() {\n return true;\n }\n public startParentCurvePrimitive(_cp: CurvePrimitive) { }\n public startCurvePrimitive(_cp: CurvePrimitive) { }\n public endCurvePrimitive(_cp: CurvePrimitive) { }\n public endParentCurvePrimitive(_cp: CurvePrimitive) { }\n public announceIntervalForUniformStepStrokes(\n cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number,\n ): void {\n // announce both start and end; adjacent duplicates will be filtered by c2 cubic fit logic\n for (let i = 0; i <= numStrokes; ++i) {\n const fraction = Geometry.interpolate(fraction0, i / numStrokes, fraction1);\n const ray = cp.fractionToPointAndDerivative(fraction, this._r0);\n this.pushOffsetPoint(ray.origin, ray.direction);\n }\n }\n public announceSegmentInterval(\n _cp: CurvePrimitive, point0: Point3d, point1: Point3d, numStrokes: number, _fraction0: number, _fraction1: number,\n ): void {\n if (numStrokes > 0) {\n const tangent = Vector3d.createStartEnd(point0, point1, this._v1);\n // announce both start and end; adjacent duplicates will be filtered by c2 cubic fit logic\n for (let i = 0; i <= numStrokes; ++i) {\n this.pushOffsetPoint(point0.interpolate(i / numStrokes, point1, this._p0), tangent);\n }\n }\n }\n public announcePointTangent(xyz: Point3d, _fraction: number, tangent: Vector3d): void {\n this.pushOffsetPoint(xyz, tangent);\n }\n /**\n * Construct a C2 cubic interpolating B-spline curve through the collected xy-offset points.\n * @returns the xy-offset curve\n */\n public claimResult(): BSplineCurve3d | undefined {\n return BSplineCurveOps.createThroughPointsC2Cubic(this._fitOptions);\n }\n}\n"]}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { AngleSweep } from "../../geometry3d/AngleSweep";
|
|
2
|
+
import { Range1d } from "../../geometry3d/Range";
|
|
3
|
+
import { Transform } from "../../geometry3d/Transform";
|
|
4
|
+
import { Arc3d, EllipticalArcApproximationOptions } from "../Arc3d";
|
|
5
|
+
import { CurveChain } from "../CurveCollection";
|
|
6
|
+
import { CurveLocationDetailPair } from "../CurveLocationDetail";
|
|
7
|
+
/**
|
|
8
|
+
* Structured data carrier used by the elliptical arc sampler.
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export declare class QuadrantFractions {
|
|
12
|
+
private _quadrant;
|
|
13
|
+
private _fractions;
|
|
14
|
+
private _interpolateStartTangent;
|
|
15
|
+
private _interpolateEndTangent;
|
|
16
|
+
private _averageAdded;
|
|
17
|
+
private constructor();
|
|
18
|
+
/** Constructor, captures the array. */
|
|
19
|
+
static create(quadrant: 1 | 2 | 3 | 4, fractions?: number[], interpolateStartTangent?: boolean, interpolateEndTangent?: boolean): QuadrantFractions;
|
|
20
|
+
/**
|
|
21
|
+
* Quadrant of the full ellipse containing the samples.
|
|
22
|
+
* * Quadrants are labeled proceeding in counterclockwise angular sweeps of length pi/2 starting at vector0.
|
|
23
|
+
* * For example, Quadrant 1 starts at vector0 and ends at vector90, and Quadrant 4 ends at vector0.
|
|
24
|
+
* * For purposes of angle classification, quadrants are half-open intervals, closed at their start angle,
|
|
25
|
+
* as determined by the ellipse's sweep direction.
|
|
26
|
+
*/
|
|
27
|
+
get quadrant(): 1 | 2 | 3 | 4;
|
|
28
|
+
/** Sample locations in this quadrant of the elliptical arc, as fractions of its sweep. */
|
|
29
|
+
get fractions(): number[];
|
|
30
|
+
set fractions(f: number[]);
|
|
31
|
+
/**
|
|
32
|
+
* Whether to interpolate the elliptical arc tangent at the first fraction.
|
|
33
|
+
* * If true (default), the first approximating arc is computed from the first two fractions and approximates the
|
|
34
|
+
* elliptical arc between the first and second fractions, interpolating both point and tangent at the first fraction,
|
|
35
|
+
* and point at the second fraction.
|
|
36
|
+
* * If false, the first approximating arc is computed from the first three fractions and approximates the
|
|
37
|
+
* elliptical arc between the second and third fractions, where it interpolates position only.
|
|
38
|
+
*/
|
|
39
|
+
get interpolateStartTangent(): boolean;
|
|
40
|
+
set interpolateStartTangent(interpolate: boolean);
|
|
41
|
+
/**
|
|
42
|
+
* Whether to interpolate the elliptical arc tangent at the last fraction.
|
|
43
|
+
* * If true (default), the last approximating arc is computed from the last two fractions and approximates the
|
|
44
|
+
* elliptical arc between the penultimate and last fractions, interpolating point at the penultimate fraction, and
|
|
45
|
+
* both point and tangent at the last fraction.
|
|
46
|
+
* * If false, the last approximating arc is computed from the last three fractions and approximates the
|
|
47
|
+
* elliptical arc between the penultimate and last fractions, where it interpolates position only.
|
|
48
|
+
*/
|
|
49
|
+
get interpolateEndTangent(): boolean;
|
|
50
|
+
set interpolateEndTangent(interpolate: boolean);
|
|
51
|
+
/**
|
|
52
|
+
* Whether the average of the first and last fractions was added to satisfy a minimum fractions array length of three.
|
|
53
|
+
* * There are always at least two fractions per quadrant, but three are needed to interpolate both end tangents
|
|
54
|
+
* with circular arcs.
|
|
55
|
+
* * This flag is set if a given sample method/arc yielded only two fractions, so their average was inserted in the
|
|
56
|
+
* fractions array to meet this minimum three-sample requirement.
|
|
57
|
+
*/
|
|
58
|
+
get averageAdded(): boolean;
|
|
59
|
+
set averageAdded(added: boolean);
|
|
60
|
+
/**
|
|
61
|
+
* Compute quadrant data for the given angles.
|
|
62
|
+
* @param radians0 first radian angle
|
|
63
|
+
* @param radians1 second radian angle
|
|
64
|
+
* @return quadrant number and start/end radian angles for the quadrant that contains both input angles, or
|
|
65
|
+
* undefined if no such quadrant.
|
|
66
|
+
* * The returned sweep is always counterclockwise: angle0 < angle1.
|
|
67
|
+
*/
|
|
68
|
+
static getQuadrantRadians(radians0: number, radians1: number): {
|
|
69
|
+
quadrant: 1 | 2 | 3 | 4;
|
|
70
|
+
angle0: number;
|
|
71
|
+
angle1: number;
|
|
72
|
+
} | undefined;
|
|
73
|
+
/** Compute the fractional range of Quadrant 1 for the given sweep. */
|
|
74
|
+
static getQ1FractionalRange(sweep: AngleSweep): Range1d;
|
|
75
|
+
/** Reverse the fractions array and flags. */
|
|
76
|
+
reverse(): void;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Base class specifying callbacks for processing samples of an elliptical arc.
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
declare class QuadrantFractionsProcessor {
|
|
83
|
+
/**
|
|
84
|
+
* Announce the beginning of processing for quadrant `q`.
|
|
85
|
+
* @param _reversed whether `q.reverse()` was invoked before this call for symmetry reasons. If so, arcs will be
|
|
86
|
+
* announced in the opposite order and with the opposite orientation.
|
|
87
|
+
* @return whether to process `q`
|
|
88
|
+
*/
|
|
89
|
+
announceQuadrantBegin(_q: QuadrantFractions, _reversed: boolean): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Retrieve the fraction preceding the input fraction in process order.
|
|
92
|
+
* * This optional callback facilitates processors like [[AdaptiveSubdivisionQ1ErrorProcessor]] whose implementation
|
|
93
|
+
* of [[announceArc]] depends upon the result of the previous invocation of [[announceArc]].
|
|
94
|
+
* @param f0 fraction to look up
|
|
95
|
+
* @return fraction preceding f0 in process order, or undefined if no such fraction
|
|
96
|
+
*/
|
|
97
|
+
getPreviousFraction?(f0: number): number | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Announce a circular arc approximating the elliptical arc E between the given fractions.
|
|
100
|
+
* * The given fractions are different. If `announceQuadrantBegin` was invoked with `reversed === false` then
|
|
101
|
+
* `fPrev < f0 < f1`; otherwise, `fPrev > f0 > f1`.
|
|
102
|
+
* @param _arc circular arc that interpolates E at f0 and f1. Processor can capture `arc`; it is unused afterwards.
|
|
103
|
+
* @param _fPrev fractional parameter of E used to define the 3-point parent circle through the points at `fPrev`,
|
|
104
|
+
* `f0`, and `f1` from which `arc` was constructed. If undefined, `arc` was generated from the circle defined by
|
|
105
|
+
* the points at `f0` and `f1` and one of their tangents.
|
|
106
|
+
* @param _f0 fractional parameter of E at which point `arc` starts
|
|
107
|
+
* @param _f1 fractional parameter of E at which point `arc` ends
|
|
108
|
+
*/
|
|
109
|
+
announceArc(_arc: Arc3d, _fPrev: number | undefined, _f0: number, _f1: number): void;
|
|
110
|
+
/**
|
|
111
|
+
* Announce the end of processing for quadrant `q`.
|
|
112
|
+
* @param _reversed whether `q.reverse()` was invoked before processing (see [[announceQuadrantBegin]]). If so,
|
|
113
|
+
* after this call `q.reverse()` is invoked again.
|
|
114
|
+
*/
|
|
115
|
+
announceQuadrantEnd(_q: QuadrantFractions, _reversed: boolean): void;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Context for sampling a non-circular Arc3d and for constructing an approximation to it based on interpolation
|
|
119
|
+
* of the samples.
|
|
120
|
+
* * [[EllipticalArcApproximationContext.constructCircularArcChainApproximation]] constructs a `CurveChain`
|
|
121
|
+
* approximation consisting of circular arcs.
|
|
122
|
+
* * Various sample methods are supported, cf. [[EllipticalArcApproximationOptions]].
|
|
123
|
+
* @internal
|
|
124
|
+
*/
|
|
125
|
+
export declare class EllipticalArcApproximationContext {
|
|
126
|
+
private _ellipticalArc;
|
|
127
|
+
private _localToWorld;
|
|
128
|
+
private _isValidEllipticalArc;
|
|
129
|
+
private static workPt0;
|
|
130
|
+
private static workPt1;
|
|
131
|
+
private static workPt2;
|
|
132
|
+
private static workRay;
|
|
133
|
+
/** Constructor, captures input */
|
|
134
|
+
private constructor();
|
|
135
|
+
/** Constructor, clones input. */
|
|
136
|
+
static create(ellipticalArc: Arc3d): EllipticalArcApproximationContext;
|
|
137
|
+
/**
|
|
138
|
+
* The arc to be sampled.
|
|
139
|
+
* * Its axes are forced to be perpendicular.
|
|
140
|
+
* * It is stored in world coordinates.
|
|
141
|
+
*/
|
|
142
|
+
get ellipticalArc(): Arc3d;
|
|
143
|
+
/**
|
|
144
|
+
* The rigid transformation that maps `ellipticalArc` from local coordinates to world coordinates.
|
|
145
|
+
* * In local coordinates, the arc center lies at the origin and its (perpendicular) axes of symmetry lie along
|
|
146
|
+
* the positive x- and y-axes.
|
|
147
|
+
*/
|
|
148
|
+
get localToWorld(): Transform;
|
|
149
|
+
/**
|
|
150
|
+
* Whether the elliptical arc is amenable to sampling.
|
|
151
|
+
* * The arc is valid if it is non-circular, has nonzero sweep, and has positive radii (nonsingular matrix).
|
|
152
|
+
*/
|
|
153
|
+
get isValidEllipticalArc(): boolean;
|
|
154
|
+
/**
|
|
155
|
+
* Create a clone of the context's arc in local coordinates.
|
|
156
|
+
* @param fullSweep Optionally set full sweep on the returned local arc. Start angle is preserved.
|
|
157
|
+
* @returns local arc, or undefined if the arc is invalid
|
|
158
|
+
*/
|
|
159
|
+
cloneLocalArc(fullSweep?: boolean): Arc3d | undefined;
|
|
160
|
+
/**
|
|
161
|
+
* Process structured sample data for the given elliptical arc.
|
|
162
|
+
* * Circular arcs are announced to the processor for each sample interval in each quadrant.
|
|
163
|
+
* * Each quadrant is processed separately to allow the elliptical arc's axis points and tangents to be interpolated.
|
|
164
|
+
* * A 2-point plus tangent construction is used to create the first and last circular arc in each quadrant.
|
|
165
|
+
* * Symmetry of the announced circular arcs matching that of a multi-quadrant spanning elliptical arc is ensured by
|
|
166
|
+
* processing the samples consistently, starting along the elliptical arc's major axis in each quadrant.
|
|
167
|
+
* @param ellipticalArc source arc to approximate
|
|
168
|
+
* @param quadrants structured samples, may be temporarily reversed for symmetry
|
|
169
|
+
* @param processor callbacks for handling the constructed arcs
|
|
170
|
+
* @internal
|
|
171
|
+
*/
|
|
172
|
+
static processQuadrantFractions(ellipticalArc: Arc3d, quadrants: QuadrantFractions[], processor: QuadrantFractionsProcessor): void;
|
|
173
|
+
/**
|
|
174
|
+
* Compute the maximum error of the circular arc chain approximation determined by the given samples.
|
|
175
|
+
* * This is measured by the longest perpendicular between the elliptical arc and its approximation.
|
|
176
|
+
* @param samples structured sample data from the instance's elliptical arc.
|
|
177
|
+
* @return details of the perpendicular measuring the max approximation error, or undefined if no such perpendicular.
|
|
178
|
+
* For each of `detailA` and `detailB`:
|
|
179
|
+
* * `point` is the end of the perpendicular on each curve
|
|
180
|
+
* * `fraction` is the curve parameter of the point
|
|
181
|
+
* * `a` is the distance between the points.
|
|
182
|
+
* @internal
|
|
183
|
+
*/
|
|
184
|
+
computeApproximationError(samples: QuadrantFractions[]): CurveLocationDetailPair | undefined;
|
|
185
|
+
/**
|
|
186
|
+
* Compute samples for the elliptical arc as fraction parameters.
|
|
187
|
+
* * This method houses the sampling framework for all sampling methods, which are customized via implementations
|
|
188
|
+
* of the [[EllipticalArcSampler]] interface.
|
|
189
|
+
* * Note that the returned samples are fractions in the parameterization of the context's arc (whose axes have been
|
|
190
|
+
* forced to be perpendicular), not the input arc passed into the context's constructor.
|
|
191
|
+
* @param options options that determine how the elliptical arc is sampled.
|
|
192
|
+
* @param structuredOutput flag indicating output format as follows:
|
|
193
|
+
* * If false (default), return all fractions in one sorted (increasing), deduplicated array (a full ellipse includes
|
|
194
|
+
* both 0 and 1).
|
|
195
|
+
* * If true, fractions are assembled by quadrants:
|
|
196
|
+
* * Each [[QuadrantFractions]] object holds at least three sorted (increasing), deduplicated fractions in a
|
|
197
|
+
* specified quadrant of the arc.
|
|
198
|
+
* * If only two fractions would be computed for a given `QuadrantFractions`, their midpoint is inserted to enable
|
|
199
|
+
* tangent interpolation at both ends. Such a quadrant `q` is marked with `q.averageAdded = true`.
|
|
200
|
+
* * The `QuadrantFractions` objects themselves are sorted by increasing order of the fractions they contain.
|
|
201
|
+
* * If the arc sweep spans adjacent quadrants, the fraction bordering the quadrants appears in both `QuadrantFractions`.
|
|
202
|
+
* * If the arc starts and ends in the same quadrant, two `QuadrantFractions` objects can be returned.
|
|
203
|
+
* * This means there are between 1 and 5 objects in the `QuadrantFractions` array.
|
|
204
|
+
* @internal
|
|
205
|
+
*/
|
|
206
|
+
computeSampleFractions(options: EllipticalArcApproximationOptions, structuredOutput?: boolean): QuadrantFractions[] | number[];
|
|
207
|
+
/** Construct a circular arc chain approximation to the elliptical arc. */
|
|
208
|
+
constructCircularArcChainApproximation(options?: EllipticalArcApproximationOptions): CurveChain | undefined;
|
|
209
|
+
}
|
|
210
|
+
export {};
|
|
211
|
+
//# sourceMappingURL=EllipticalArcApproximationContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EllipticalArcApproximationContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/EllipticalArcApproximationContext.ts"],"names":[],"mappings":"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"}
|