@itwin/core-geometry 4.1.0-dev.67 → 4.1.0-dev.69
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/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.d.ts +1 -1
- package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js +2 -2
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js +1 -1
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.d.ts +1 -1
- package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js +2 -2
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/core-geometry.d.ts +3 -2
- package/lib/cjs/core-geometry.d.ts.map +1 -1
- package/lib/cjs/core-geometry.js +4 -5
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +1 -1
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +2 -2
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +2 -2
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +2 -2
- package/lib/cjs/curve/CurveCollection.js +2 -2
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.d.ts +77 -0
- package/lib/cjs/curve/CurveOps.d.ts.map +1 -0
- package/lib/cjs/curve/CurveOps.js +160 -0
- package/lib/cjs/curve/CurveOps.js.map +1 -0
- package/lib/cjs/curve/CurvePrimitive.d.ts +13 -13
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.d.ts +2 -2
- package/lib/cjs/curve/GeometryQuery.d.ts.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js +2 -2
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js +2 -2
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +1 -1
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +2 -2
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.d.ts +97 -0
- package/lib/cjs/curve/OffsetOptions.d.ts.map +1 -0
- package/lib/cjs/curve/OffsetOptions.js +166 -0
- package/lib/cjs/curve/OffsetOptions.js.map +1 -0
- package/lib/cjs/curve/ProxyCurve.d.ts +1 -1
- package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +11 -13
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +17 -17
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js +2 -2
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
- package/lib/cjs/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -0
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +59 -74
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js +130 -223
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +7 -101
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +13 -168
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js +2 -2
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +5 -5
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.d.ts +41 -32
- package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.js +11 -8
- package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +2 -0
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts +8 -9
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js +9 -10
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +4 -4
- package/lib/cjs/geometry3d/Point3dVector3d.js +5 -5
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js +5 -5
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +1 -2
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +2 -3
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.d.ts +69 -0
- package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -0
- package/lib/cjs/geometry3d/Ray2d.js +146 -0
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -0
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +3 -3
- package/lib/cjs/geometry3d/Transform.js +6 -6
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.d.ts +7 -49
- package/lib/cjs/numerics/ConvexPolygon2d.d.ts.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js +16 -107
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
- package/lib/cjs/numerics/Polynomials.js +0 -2
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js +5 -5
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +10 -7
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +13 -12
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.d.ts +2 -7
- package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js +2 -7
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js +3 -3
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.d.ts +1 -1
- package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js +1 -1
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js +1 -1
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.d.ts +1 -1
- package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js +1 -1
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/core-geometry.d.ts +3 -2
- package/lib/esm/core-geometry.d.ts.map +1 -1
- package/lib/esm/core-geometry.js +3 -3
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +1 -1
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +1 -1
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +2 -2
- package/lib/esm/curve/CurveCollection.js +2 -2
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.d.ts +77 -0
- package/lib/esm/curve/CurveOps.d.ts.map +1 -0
- package/lib/esm/curve/CurveOps.js +156 -0
- package/lib/esm/curve/CurveOps.js.map +1 -0
- package/lib/esm/curve/CurvePrimitive.d.ts +13 -13
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.d.ts +2 -2
- package/lib/esm/curve/GeometryQuery.d.ts.map +1 -1
- package/lib/esm/curve/GeometryQuery.js +2 -2
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/esm/curve/LineSegment3d.js +1 -1
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +1 -1
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +1 -1
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.d.ts +97 -0
- package/lib/esm/curve/OffsetOptions.d.ts.map +1 -0
- package/lib/esm/curve/OffsetOptions.js +161 -0
- package/lib/esm/curve/OffsetOptions.js.map +1 -0
- package/lib/esm/curve/ProxyCurve.d.ts +1 -1
- package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +11 -13
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +18 -18
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js +2 -2
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
- package/lib/esm/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
- package/lib/esm/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -0
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +59 -74
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js +129 -221
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +7 -101
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +10 -163
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +5 -5
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Plane3d.d.ts +41 -32
- package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3d.js +11 -8
- package/lib/esm/geometry3d/Plane3d.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +2 -0
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.d.ts +8 -9
- package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js +9 -10
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +4 -4
- package/lib/esm/geometry3d/Point3dVector3d.js +5 -5
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js +5 -5
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +1 -2
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +2 -3
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.d.ts +69 -0
- package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -0
- package/lib/esm/geometry3d/Ray2d.js +142 -0
- package/lib/esm/geometry3d/Ray2d.js.map +1 -0
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +3 -3
- package/lib/esm/geometry3d/Transform.js +6 -6
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.d.ts +7 -49
- package/lib/esm/numerics/ConvexPolygon2d.d.ts.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.js +14 -104
- package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
- package/lib/esm/numerics/Polynomials.js +0 -2
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js +5 -5
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +10 -7
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +14 -13
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/TaggedNumericData.js +1 -1
- package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.d.ts +2 -7
- package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js +2 -7
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.js +3 -3
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/Triangulation.js +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/package.json +5 -16
- package/lib/cjs/curve/ChainCollectorContext.d.ts.map +0 -1
- package/lib/cjs/curve/ChainCollectorContext.js.map +0 -1
- package/lib/esm/curve/ChainCollectorContext.d.ts.map +0 -1
- package/lib/esm/curve/ChainCollectorContext.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StrokeOptions.js","sourceRoot":"","sources":["../../../src/curve/StrokeOptions.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 { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\n\r\n/**\r\n * Tolerance blob for various stroking methods.\r\n *\r\n * * Across many applications, the critical concepts are: chordTol, angleTol, maxEdgeLength\r\n * * Chord error is an distance measured from a curve or facet to its approximating stroke or facet.\r\n * * angle is the angle between two contiguous strokes or across a facet edge.\r\n * * maxEdgeLength is the length of a stroke or a edge of a facet.\r\n *\r\n * It is rare for all three to be active at once:\r\n * * Nearly all stroke and facet use cases will apply an angle tolerance.\r\n * * * For curves, 15 degrees is typical\r\n * * * For facets, 22.5 degrees is typical.\r\n * * * Halving the angle tolerance will (roughly) make curves get twice as many strokes, and surfaces get 4 times as many facets.\r\n * * * The angle tolerance has the useful property that its effect is independent of scale of that data. If data is suddenly scaled into millimeters rather than meters, the facet counts remain the same.\r\n * * When creating output for devices such as 3D printing will want a chord tolerance.\r\n * * For graphics display, use an angle tolerance of around 15 degrees and an chord tolerance which is the size of several pixels.\r\n * * Analysis meshes (e.g. Finite Elements) commonly need to apply maxEdgeLength.\r\n * * * Using maxEdgeLength for graphics probably produces too many facets. For example, it causes long cylinders to get many nearly-square facets instead of the small number of long quads usually used for graphics.\r\n * * Facet tolerances are, as the Pirates' Code, guidelines, not absolute rules. Facet and stroke code may ignore tolerances in awkward situations.\r\n * * If multiple tolerances are in effect, the actual count will usually be based on the one that demands the most strokes or facets, unless it is so high that it violates some upper limit on the number of facets on an arc or a section of a curve.\r\n * @public\r\n */\r\nexport class StrokeOptions {\r\n /** Distance from stroke to actual geometry */\r\n public chordTol?: number;\r\n /** Turning angle between strokes. */\r\n public angleTol?: Angle;\r\n /** Maximum length of a single stroke. */\r\n public maxEdgeLength?: number;\r\n /** Caller expects convex facets. */\r\n public needConvexFacets?: boolean;\r\n /** Minimum strokes on a primitive */\r\n public minStrokesPerPrimitive?: number;\r\n /** Whether or not to triangulate each added facet */\r\n public shouldTriangulate: boolean = false;\r\n private _needNormals?: boolean;\r\n private _needTwoSided?: boolean;\r\n private _needParams?: boolean;\r\n /** Whether params are requested. */\r\n public get needParams(): boolean {\r\n return this._needParams !== undefined ? this._needParams : false;\r\n }\r\n public set needParams(value: boolean) {\r\n this._needParams = value;\r\n }\r\n /** Whether normals are requested */\r\n public get needNormals(): boolean {\r\n return this._needNormals !== undefined ? this._needNormals : false;\r\n }\r\n public set needNormals(value: boolean) {\r\n this._needNormals = value;\r\n }\r\n /** Whether twoSided is requested. */\r\n public get needTwoSided(): boolean {\r\n return this._needTwoSided !== undefined ? this._needTwoSided : false;\r\n }\r\n public set needTwoSided(value: boolean) {\r\n this._needTwoSided = value;\r\n }\r\n /** Optional color request flag */\r\n public needColors?: boolean;\r\n /** Default number of strokes for a circle. */\r\n public defaultCircleStrokes = 16;\r\n /** Ask if angleTol is specified */\r\n public get hasAngleTol(): boolean {\r\n return this.angleTol !== undefined && Math.abs(this.angleTol.radians) > 0.0;\r\n }\r\n /** Ask if chordTol is specified */\r\n public get hasChordTol(): boolean {\r\n return this.chordTol !== undefined && this.chordTol > 0.0;\r\n }\r\n /** Ask if maxEdgeLength is specified */\r\n public get hasMaxEdgeLength(): boolean {\r\n return this.maxEdgeLength !== undefined && this.maxEdgeLength > 0.0;\r\n }\r\n /** Return a deep clone */\r\n public clone(): StrokeOptions {\r\n const options = new StrokeOptions();\r\n options.chordTol = this.chordTol;\r\n options.angleTol = this.angleTol?.clone();\r\n options.maxEdgeLength = this.maxEdgeLength;\r\n options.needConvexFacets = this.needConvexFacets;\r\n options.minStrokesPerPrimitive = this.minStrokesPerPrimitive;\r\n options.shouldTriangulate = this.shouldTriangulate;\r\n options._needNormals = this._needNormals;\r\n options._needTwoSided = this._needTwoSided;\r\n options._needParams = this._needParams;\r\n options.needColors = this.needColors;\r\n options.defaultCircleStrokes = this.defaultCircleStrokes;\r\n return options;\r\n }\r\n /** Return stroke count which is the larger of the minCount or count needed for edge length condition. */\r\n public applyMaxEdgeLength(minCount: number, totalLength: number): number {\r\n totalLength = Math.abs(totalLength);\r\n if (this.maxEdgeLength && this.maxEdgeLength > 0.0 && minCount * this.maxEdgeLength < totalLength) {\r\n minCount = Geometry.stepCount(this.maxEdgeLength, totalLength, minCount);\r\n }\r\n return minCount;\r\n }\r\n /**\r\n * Return stroke count which is the larger of the existing count or count needed for angle condition for given\r\n * sweepRadians.\r\n * * defaultStepRadians is assumed to be larger than zero.\r\n */\r\n public applyAngleTol(minCount: number, sweepRadians: number, defaultStepRadians: number): number {\r\n return StrokeOptions.applyAngleTol(this, minCount, sweepRadians, defaultStepRadians);\r\n }\r\n /**\r\n * Return stroke count which is the larger of minCount and the count required to turn sweepRadians, using tolerance\r\n * from the options.\r\n */\r\n public static applyAngleTol(\r\n options: StrokeOptions | undefined, minCount: number, sweepRadians: number, defaultStepRadians?: number\r\n ): number {\r\n sweepRadians = Math.abs(sweepRadians);\r\n let stepRadians = defaultStepRadians ? defaultStepRadians : Math.PI / 8.0;\r\n if (options && options.angleTol && options.angleTol.radians > 0.0)\r\n stepRadians = options.angleTol.radians;\r\n if (minCount * stepRadians < sweepRadians)\r\n minCount = Geometry.stepCount(stepRadians, sweepRadians, minCount);\r\n return minCount;\r\n }\r\n /**\r\n * Return the number of strokes needed for given edgeLength curve.\r\n * @param options\r\n * @param minCount smallest allowed count\r\n * @param edgeLength\r\n */\r\n public static applyMaxEdgeLength(\r\n options: StrokeOptions | undefined, minCount: number, edgeLength: number\r\n ): number {\r\n if (edgeLength < 0)\r\n edgeLength = - edgeLength;\r\n if (minCount < 1)\r\n minCount = 1;\r\n if (options && options.maxEdgeLength && options.maxEdgeLength * minCount < edgeLength) {\r\n minCount = Geometry.stepCount(options.maxEdgeLength, edgeLength, minCount);\r\n }\r\n return minCount;\r\n }\r\n /**\r\n * Determine a stroke count for a (partial) circular arc of given radius. This considers angle, maxEdgeLength,\r\n * chord, and minimum stroke.\r\n */\r\n public applyTolerancesToArc(radius: number, sweepRadians: number = Math.PI * 2): number {\r\n let numStrokes = 1;\r\n numStrokes = this.applyAngleTol(numStrokes, sweepRadians, Math.PI * 0.25);\r\n numStrokes = this.applyMaxEdgeLength(numStrokes, sweepRadians * radius);\r\n numStrokes = this.applyChordTol(numStrokes, radius, sweepRadians);\r\n numStrokes = this.applyMinStrokesPerPrimitive(numStrokes);\r\n return numStrokes;\r\n }\r\n /** Return stroke count which is the larger of existing count or count needed for circular arc chord tolerance condition. */\r\n public applyChordTol(minCount: number, radius: number, sweepRadians: number): number {\r\n if (this.chordTol && this.chordTol > 0.0 && this.chordTol < radius) {\r\n const a = this.chordTol;\r\n const stepRadians = 2.0 * Math.acos((1.0 - a / radius));\r\n minCount = Geometry.stepCount(stepRadians, sweepRadians, minCount);\r\n }\r\n return minCount;\r\n }\r\n /**\r\n * Return stroke count which is the larger of existing count or count needed for circular arc chord tol with given\r\n * arc length and radians\r\n */\r\n public applyChordTolToLengthAndRadians(minCount: number, length: number, sweepRadians: number): number {\r\n if (this.chordTol && this.chordTol > 0.0) {\r\n const radius = Geometry.conditionalDivideFraction(length, sweepRadians);\r\n if (radius !== undefined)\r\n return this.applyChordTol(minCount, radius, sweepRadians);\r\n }\r\n return minCount;\r\n }\r\n /** Return stroke count which is the larger of existing count or `this.minStrokesPerPrimitive` */\r\n public applyMinStrokesPerPrimitive(minCount: number): number {\r\n if (this.minStrokesPerPrimitive !== undefined && Number.isFinite(this.minStrokesPerPrimitive)\r\n && this.minStrokesPerPrimitive > minCount)\r\n minCount = this.minStrokesPerPrimitive;\r\n return minCount;\r\n }\r\n /**\r\n * Create `StrokeOptions` with defaults appropriate for curves.\r\n * * angle tolerance of 15 degrees.\r\n * * all others inactive.\r\n */\r\n public static createForCurves(): StrokeOptions {\r\n const options = new StrokeOptions();\r\n options.angleTol = Angle.createDegrees(15.0);\r\n return options;\r\n }\r\n /**\r\n * Create `StrokeOptions` with defaults appropriate for surfaces facets\r\n * * angle tolerance of 22.5 degrees.\r\n * * all others inactive.\r\n */\r\n public static createForFacets(): StrokeOptions {\r\n const options = new StrokeOptions();\r\n options.angleTol = Angle.createDegrees(22.5);\r\n return options;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"StrokeOptions.js","sourceRoot":"","sources":["../../../src/curve/StrokeOptions.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 { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\n\r\n/**\r\n * Tolerance blob for various stroking methods.\r\n *\r\n * * Across many applications, the critical concepts are: chordTol, angleTol, maxEdgeLength\r\n * * Chord error is an distance measured from a curve or facet to its approximating stroke or facet.\r\n * * angle is the angle between two contiguous strokes or across a facet edge.\r\n * * maxEdgeLength is the length of a stroke or a edge of a facet.\r\n *\r\n * It is rare for all three to be active at once:\r\n * * Nearly all stroke and facet use cases will apply an angle tolerance.\r\n * * * For curves, 15 degrees is typical\r\n * * * For facets, 22.5 degrees is typical.\r\n * * * Halving the angle tolerance will (roughly) make curves get twice as many strokes, and surfaces get 4 times as many facets.\r\n * * * The angle tolerance has the useful property that its effect is independent of scale of that data. If data is suddenly scaled into millimeters rather than meters, the facet counts remain the same.\r\n * * When creating output for devices such as 3D printing will want a chord tolerance.\r\n * * For graphics display, use an angle tolerance of around 15 degrees and an chord tolerance which is the size of several pixels.\r\n * * Analysis meshes (e.g. Finite Elements) commonly need to apply maxEdgeLength.\r\n * * * Using maxEdgeLength for graphics probably produces too many facets. For example, it causes long cylinders to get many nearly-square facets instead of the small number of long quads usually used for graphics.\r\n * * Facet tolerances are, as the Pirates' Code, guidelines, not absolute rules. Facet and stroke code may ignore tolerances in awkward situations.\r\n * * If multiple tolerances are in effect, the actual count will usually be based on the one that demands the most strokes or facets, unless it is so high that it violates some upper limit on the number of facets on an arc or a section of a curve.\r\n * @public\r\n */\r\nexport class StrokeOptions {\r\n /** Distance from stroke to actual geometry */\r\n public chordTol?: number;\r\n /** Turning angle between strokes. */\r\n public angleTol?: Angle;\r\n /** Maximum length of a single stroke. */\r\n public maxEdgeLength?: number;\r\n /** Caller expects convex facets. */\r\n public needConvexFacets?: boolean;\r\n /** Minimum strokes on a primitive */\r\n public minStrokesPerPrimitive?: number;\r\n /** Whether or not to triangulate each added facet */\r\n public shouldTriangulate: boolean = false;\r\n private _needNormals?: boolean;\r\n private _needTwoSided?: boolean;\r\n private _needParams?: boolean;\r\n /** Whether params are requested. */\r\n public get needParams(): boolean {\r\n return this._needParams !== undefined ? this._needParams : false;\r\n }\r\n public set needParams(value: boolean) {\r\n this._needParams = value;\r\n }\r\n /** Whether normals are requested */\r\n public get needNormals(): boolean {\r\n return this._needNormals !== undefined ? this._needNormals : false;\r\n }\r\n public set needNormals(value: boolean) {\r\n this._needNormals = value;\r\n }\r\n /** Whether twoSided is requested. */\r\n public get needTwoSided(): boolean {\r\n return this._needTwoSided !== undefined ? this._needTwoSided : false;\r\n }\r\n public set needTwoSided(value: boolean) {\r\n this._needTwoSided = value;\r\n }\r\n /** Optional color request flag */\r\n public needColors?: boolean;\r\n /** Default number of strokes for a circle. */\r\n public defaultCircleStrokes = 16;\r\n /** Ask if angleTol is specified */\r\n public get hasAngleTol(): boolean {\r\n return this.angleTol !== undefined && Math.abs(this.angleTol.radians) > 0.0;\r\n }\r\n /** Ask if chordTol is specified */\r\n public get hasChordTol(): boolean {\r\n return this.chordTol !== undefined && this.chordTol > 0.0;\r\n }\r\n /** Ask if maxEdgeLength is specified */\r\n public get hasMaxEdgeLength(): boolean {\r\n return this.maxEdgeLength !== undefined && this.maxEdgeLength > 0.0;\r\n }\r\n /** Return a deep clone */\r\n public clone(): StrokeOptions {\r\n const options = new StrokeOptions();\r\n options.chordTol = this.chordTol;\r\n options.angleTol = this.angleTol?.clone();\r\n options.maxEdgeLength = this.maxEdgeLength;\r\n options.needConvexFacets = this.needConvexFacets;\r\n options.minStrokesPerPrimitive = this.minStrokesPerPrimitive;\r\n options.shouldTriangulate = this.shouldTriangulate;\r\n options._needNormals = this._needNormals;\r\n options._needTwoSided = this._needTwoSided;\r\n options._needParams = this._needParams;\r\n options.needColors = this.needColors;\r\n options.defaultCircleStrokes = this.defaultCircleStrokes;\r\n return options;\r\n }\r\n /** Return stroke count which is the larger of the minCount or count needed for edge length condition. */\r\n public applyMaxEdgeLength(minCount: number, totalLength: number): number {\r\n totalLength = Math.abs(totalLength);\r\n if (this.maxEdgeLength && this.maxEdgeLength > 0.0 && minCount * this.maxEdgeLength < totalLength) {\r\n minCount = Geometry.stepCount(this.maxEdgeLength, totalLength, minCount);\r\n }\r\n return minCount;\r\n }\r\n /**\r\n * Return stroke count which is the larger of the existing count or count needed for angle condition for given\r\n * sweepRadians.\r\n * * defaultStepRadians is assumed to be larger than zero.\r\n */\r\n public applyAngleTol(minCount: number, sweepRadians: number, defaultStepRadians: number): number {\r\n return StrokeOptions.applyAngleTol(this, minCount, sweepRadians, defaultStepRadians);\r\n }\r\n /**\r\n * Return stroke count which is the larger of minCount and the count required to turn sweepRadians, using tolerance\r\n * from the options.\r\n */\r\n public static applyAngleTol(\r\n options: StrokeOptions | undefined, minCount: number, sweepRadians: number, defaultStepRadians?: number,\r\n ): number {\r\n sweepRadians = Math.abs(sweepRadians);\r\n let stepRadians = defaultStepRadians ? defaultStepRadians : Math.PI / 8.0;\r\n if (options && options.angleTol && options.angleTol.radians > 0.0)\r\n stepRadians = options.angleTol.radians;\r\n if (minCount * stepRadians < sweepRadians)\r\n minCount = Geometry.stepCount(stepRadians, sweepRadians, minCount);\r\n return minCount;\r\n }\r\n /**\r\n * Return the number of strokes needed for given edgeLength curve.\r\n * @param options\r\n * @param minCount smallest allowed count\r\n * @param edgeLength\r\n */\r\n public static applyMaxEdgeLength(\r\n options: StrokeOptions | undefined, minCount: number, edgeLength: number,\r\n ): number {\r\n if (edgeLength < 0)\r\n edgeLength = - edgeLength;\r\n if (minCount < 1)\r\n minCount = 1;\r\n if (options && options.maxEdgeLength && options.maxEdgeLength * minCount < edgeLength) {\r\n minCount = Geometry.stepCount(options.maxEdgeLength, edgeLength, minCount);\r\n }\r\n return minCount;\r\n }\r\n /**\r\n * Determine a stroke count for a (partial) circular arc of given radius. This considers angle, maxEdgeLength,\r\n * chord, and minimum stroke.\r\n */\r\n public applyTolerancesToArc(radius: number, sweepRadians: number = Math.PI * 2): number {\r\n let numStrokes = 1;\r\n numStrokes = this.applyAngleTol(numStrokes, sweepRadians, Math.PI * 0.25);\r\n numStrokes = this.applyMaxEdgeLength(numStrokes, sweepRadians * radius);\r\n numStrokes = this.applyChordTol(numStrokes, radius, sweepRadians);\r\n numStrokes = this.applyMinStrokesPerPrimitive(numStrokes);\r\n return numStrokes;\r\n }\r\n /** Return stroke count which is the larger of existing count or count needed for circular arc chord tolerance condition. */\r\n public applyChordTol(minCount: number, radius: number, sweepRadians: number): number {\r\n if (this.chordTol && this.chordTol > 0.0 && this.chordTol < radius) {\r\n const a = this.chordTol;\r\n const stepRadians = 2.0 * Math.acos((1.0 - a / radius));\r\n minCount = Geometry.stepCount(stepRadians, sweepRadians, minCount);\r\n }\r\n return minCount;\r\n }\r\n /**\r\n * Return stroke count which is the larger of existing count or count needed for circular arc chord tol with given\r\n * arc length and radians\r\n */\r\n public applyChordTolToLengthAndRadians(minCount: number, length: number, sweepRadians: number): number {\r\n if (this.chordTol && this.chordTol > 0.0) {\r\n const radius = Geometry.conditionalDivideFraction(length, sweepRadians);\r\n if (radius !== undefined)\r\n return this.applyChordTol(minCount, radius, sweepRadians);\r\n }\r\n return minCount;\r\n }\r\n /** Return stroke count which is the larger of existing count or `this.minStrokesPerPrimitive` */\r\n public applyMinStrokesPerPrimitive(minCount: number): number {\r\n if (this.minStrokesPerPrimitive !== undefined && Number.isFinite(this.minStrokesPerPrimitive)\r\n && this.minStrokesPerPrimitive > minCount)\r\n minCount = this.minStrokesPerPrimitive;\r\n return minCount;\r\n }\r\n /**\r\n * Create `StrokeOptions` with defaults appropriate for curves.\r\n * * angle tolerance of 15 degrees.\r\n * * all others inactive.\r\n */\r\n public static createForCurves(): StrokeOptions {\r\n const options = new StrokeOptions();\r\n options.angleTol = Angle.createDegrees(15.0);\r\n return options;\r\n }\r\n /**\r\n * Create `StrokeOptions` with defaults appropriate for surfaces facets\r\n * * angle tolerance of 22.5 degrees.\r\n * * all others inactive.\r\n */\r\n public static createForFacets(): StrokeOptions {\r\n const options = new StrokeOptions();\r\n options.angleTol = Angle.createDegrees(22.5);\r\n return options;\r\n }\r\n}\r\n"]}
|
package/lib/esm/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BagOfCurves } from "
|
|
2
|
-
import { CurvePrimitive } from "
|
|
3
|
-
import { Loop } from "
|
|
4
|
-
import { Path } from "
|
|
1
|
+
import { BagOfCurves } from "../CurveCollection";
|
|
2
|
+
import { CurvePrimitive } from "../CurvePrimitive";
|
|
3
|
+
import { Loop } from "../Loop";
|
|
4
|
+
import { Path } from "../Path";
|
|
5
5
|
/**
|
|
6
6
|
* Manage a growing array of arrays of curve primitives that are to be joined "head to tail" in paths.
|
|
7
7
|
* * The caller makes a sequence of calls to announce individual primitives.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChainCollectorContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/ChainCollectorContext.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAU;IAE7B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAU;IACtC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAU;IAEtC;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,SAAS,CAAC,CAAU;IAC5B,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;gBACgB,UAAU,EAAE,OAAO;IAKtC,OAAO,CAAC,SAAS,CAAC,CAAU;IAE5B;;;;;OAKG;IACI,sBAAsB,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,GAAE,OAAe;IA0CzF,yEAAyE;IACzE,OAAO,CAAC,cAAc;IAMtB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAa5B,8EAA8E;IACvE,UAAU,CAAC,gBAAgB,GAAE,OAAe,GAAG,cAAc,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS;IAa5G;;;;OAIG;WACW,0BAA0B,CAAC,UAAU,EAAE,cAAc,GAAG,SAAS,EAAE,UAAU,EAAE,cAAc,GAAG,SAAS,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO;CAe7J"}
|
package/lib/esm/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js}
RENAMED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { BagOfCurves } from "
|
|
6
|
-
import { CurvePrimitive } from "
|
|
7
|
-
import { Loop } from "
|
|
8
|
-
import { Path } from "
|
|
5
|
+
import { BagOfCurves } from "../CurveCollection";
|
|
6
|
+
import { CurvePrimitive } from "../CurvePrimitive";
|
|
7
|
+
import { Loop } from "../Loop";
|
|
8
|
+
import { Path } from "../Path";
|
|
9
9
|
/**
|
|
10
10
|
* Manage a growing array of arrays of curve primitives that are to be joined "head to tail" in paths.
|
|
11
11
|
* * The caller makes a sequence of calls to announce individual primitives.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChainCollectorContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/ChainCollectorContext.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\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { BagOfCurves } from \"../CurveCollection\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { Loop } from \"../Loop\";\r\nimport { Path } from \"../Path\";\r\n\r\n/**\r\n * Manage a growing array of arrays of curve primitives that are to be joined \"head to tail\" in paths.\r\n * * The caller makes a sequence of calls to announce individual primitives.\r\n * * The collector has 2 use cases in mind, controlled by `searchAllPaths` flag on `chainCollectorContext.announceCurvePrimitive`\r\n * * (a) \"simple chains\" -- the caller has the curve primitives in order and just needs to have them monitored for coordinate breaks that indicate transition to a new chain.\r\n * * The collector needs to watch for connection to the most recent path but not search for prior paths to join to instead.\r\n * * (b) \"mixed\" primitives -- primitive order is NOT significant for chain assembly.\r\n * * The collector needs to search all prior paths at both start and end, and consider connection to both the start and end of each new primitive.\r\n * * The per-curve announcement is\r\n * * chainCollector.announceCurvePrimitive (curve, searchAllPaths).\r\n * * When all curves have been announced, the call to grab the paths option\r\n * * formLoopsIfClosed\r\n * * If true, convert closed paths to `Loop`, open paths to `Path`\r\n * * If false, convert all paths (open or not) to `Path`\r\n * * Usage pattern is\r\n * * initialization: `context = new ChainCollectorContext (makeClones: boolean)`\r\n * * many times: ` context.announceCurvePrimitive (primitive, searchAllPaths)`\r\n * * end: ` result = context.grabResults (formLoopsIfClosed)`\r\n * @internal\r\n */\r\nexport class ChainCollectorContext {\r\n private _chains: CurvePrimitive[][];\r\n private _makeClones: boolean;\r\n\r\n private static _staticPointA: Point3d;\r\n private static _staticPointB: Point3d;\r\n\r\n /**\r\n * Push a new chain with an optional first primitive.\r\n */\r\n private pushNewChain(primitive?: CurvePrimitive) {\r\n const chain = [];\r\n if (primitive)\r\n chain.push(primitive);\r\n this._chains.push(chain);\r\n }\r\n private findOrCreateTailChain(): CurvePrimitive[] {\r\n if (this._chains.length === 0)\r\n this.pushNewChain();\r\n return this._chains[this._chains.length - 1];\r\n }\r\n private _xyzWork0?: Point3d;\r\n private findAnyChainToConnect(xyz: Point3d): { chainIndex: number, atEnd: boolean } | undefined {\r\n\r\n for (let chainIndexA = 0; chainIndexA < this._chains.length; chainIndexA++) {\r\n const path = this._chains[chainIndexA];\r\n this._xyzWork1 = path[path.length - 1].endPoint(this._xyzWork1);\r\n if (this._xyzWork1.isAlmostEqual(xyz))\r\n return { chainIndex: chainIndexA, atEnd: true };\r\n this._xyzWork1 = path[0].startPoint(this._xyzWork1);\r\n if (this._xyzWork1.isAlmostEqual(xyz))\r\n return { chainIndex: chainIndexA, atEnd: false };\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Initialize with an empty array of chains.\r\n * @param makeClones if true, all CurvePrimitives sent to `announceCurvePrimitive` is immediately cloned. If false, the reference to the original curve is maintained.\r\n */\r\n public constructor(makeClones: boolean) {\r\n this._chains = [];\r\n this._makeClones = makeClones;\r\n }\r\n\r\n private _xyzWork1?: Point3d;\r\n\r\n /** Announce a curve primitive\r\n * * searchAllChains controls the extent of search for connecting points.\r\n * * false ==> only consider connection to most recent chain.\r\n * * true ==> search for any connection, reversing direction as needed.\r\n * * Otherwise start a new chain.\r\n */\r\n public announceCurvePrimitive(candidate: CurvePrimitive, searchAllChains: boolean = false) {\r\n if (candidate) {\r\n if (this._makeClones) {\r\n const candidate1 = candidate.clone();\r\n if (!candidate1 || !(candidate1 instanceof CurvePrimitive))\r\n return;\r\n this.transferMarkup(candidate, candidate1);\r\n candidate = candidate1;\r\n }\r\n if (!searchAllChains) {\r\n const activeChain = this.findOrCreateTailChain();\r\n if (activeChain.length === 0 || !ChainCollectorContext.needBreakBetweenPrimitives(activeChain[activeChain.length - 1], candidate))\r\n activeChain.push(candidate);\r\n else\r\n this.pushNewChain(candidate);\r\n } else {\r\n this._xyzWork0 = candidate.startPoint(this._xyzWork0);\r\n let connect = this.findAnyChainToConnect(this._xyzWork0);\r\n if (connect) {\r\n if (connect.atEnd) {\r\n this._chains[connect.chainIndex].push(candidate);\r\n } else {\r\n candidate.reverseInPlace();\r\n this._chains[connect.chainIndex].splice(0, 0, candidate);\r\n }\r\n } else {\r\n this._xyzWork0 = candidate.endPoint(this._xyzWork0);\r\n connect = this.findAnyChainToConnect(this._xyzWork0);\r\n if (connect) { // START of new primitive ..\r\n if (connect.atEnd) {\r\n candidate.reverseInPlace();\r\n this._chains[connect.chainIndex].push(candidate);\r\n } else {\r\n this._chains[connect.chainIndex].splice(0, 0, candidate);\r\n }\r\n } else {\r\n this._chains.push([candidate]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Transfer markup (e.g. startCut, endCut) from source to destination */\r\n private transferMarkup(source: CurvePrimitive, dest: CurvePrimitive) {\r\n if (source && dest) {\r\n dest.startCut = source.startCut;\r\n dest.endCut = source.endCut;\r\n }\r\n }\r\n /** turn an array of curve primitives into the simplest possible strongly typed curve structure.\r\n * * The input array is assumed to be connected appropriately to act as the curves of a Path.\r\n * * When a path is created the curves array is CAPTURED.\r\n */\r\n private promoteArrayToCurves(curves: CurvePrimitive[], makeLoopIfClosed: boolean): CurvePrimitive | Path | Loop | undefined {\r\n if (curves.length === 0)\r\n return undefined;\r\n if (makeLoopIfClosed) {\r\n ChainCollectorContext._staticPointA = curves[0].startPoint(ChainCollectorContext._staticPointA);\r\n ChainCollectorContext._staticPointB = curves[curves.length - 1].endPoint(ChainCollectorContext._staticPointB);\r\n if (ChainCollectorContext._staticPointA.isAlmostEqual(ChainCollectorContext._staticPointB))\r\n return Loop.createArray(curves);\r\n }\r\n if (curves.length === 1)\r\n return curves[0];\r\n return Path.createArray(curves);\r\n }\r\n /** Return the collected results, structured as the simplest possible type. */\r\n public grabResult(makeLoopIfClosed: boolean = false): CurvePrimitive | Path | BagOfCurves | Loop | undefined {\r\n const chains = this._chains;\r\n if (chains.length === 0)\r\n return undefined;\r\n if (chains.length === 1)\r\n return this.promoteArrayToCurves(chains[0], makeLoopIfClosed);\r\n const bag = BagOfCurves.create();\r\n for (const chain of chains) {\r\n const q = this.promoteArrayToCurves(chain, makeLoopIfClosed);\r\n bag.tryAddChild(q);\r\n }\r\n return bag;\r\n }\r\n /** test if there is a break between primitiveA and primitiveB, due to any condition such as\r\n * * primitiveA.endCut\r\n * * primitiveB.startCut\r\n * * physical gap between primitives.\r\n */\r\n public static needBreakBetweenPrimitives(primitiveA: CurvePrimitive | undefined, primitiveB: CurvePrimitive | undefined, isXYOnly: boolean = false): boolean {\r\n if (primitiveA === undefined)\r\n return true;\r\n if (primitiveB === undefined)\r\n return true;\r\n if (primitiveA.endCut !== undefined)\r\n return true;\r\n if (primitiveB.startCut !== undefined)\r\n return true;\r\n ChainCollectorContext._staticPointA = primitiveA.endPoint(ChainCollectorContext._staticPointA);\r\n ChainCollectorContext._staticPointB = primitiveB.startPoint(ChainCollectorContext._staticPointB);\r\n return isXYOnly\r\n ? !ChainCollectorContext._staticPointA.isAlmostEqualXY(ChainCollectorContext._staticPointB)\r\n : !ChainCollectorContext._staticPointA.isAlmostEqual(ChainCollectorContext._staticPointB);\r\n }\r\n}\r\n"]}
|
|
@@ -1,118 +1,103 @@
|
|
|
1
|
-
import { AnyCurve } from "
|
|
2
|
-
import { CurvePrimitive } from "
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { Range3d } from "../../geometry3d/Range";
|
|
7
|
-
import { XYAndZ } from "../../geometry3d/XYZProps";
|
|
1
|
+
import { AnyCurve } from "../CurveChain";
|
|
2
|
+
import { CurvePrimitive } from "../CurvePrimitive";
|
|
3
|
+
import { LineString3d } from "../LineString3d";
|
|
4
|
+
import { ChainTypes } from "../RegionOps";
|
|
5
|
+
import { StrokeOptions } from "../StrokeOptions";
|
|
8
6
|
/**
|
|
9
7
|
* Manage a growing array of arrays of curve primitives that are to be joined "head to tail" in paths.
|
|
10
8
|
* * The caller makes a sequence of calls to announce individual primitives.
|
|
11
|
-
* * This collector (unlike the simpler
|
|
12
|
-
*
|
|
13
|
-
* *
|
|
9
|
+
* * This collector (unlike the simpler [[ChainCollectorContext]]) expects to have inputs arriving in random order, leaving multiple open chains in play at any time.
|
|
10
|
+
* * When all curves have been announced, the call to `grabResults` restructures the various active chains into Paths (and optionally, Loops).
|
|
11
|
+
* * Chain formation is dependent upon input fragment order, as a greedy algorithm is employed.
|
|
14
12
|
* * Usage pattern is
|
|
15
|
-
* * initialization: `context = new
|
|
16
|
-
* * many times
|
|
17
|
-
* * `
|
|
18
|
-
* * `
|
|
19
|
-
* * end:
|
|
13
|
+
* * initialization: `context = new MultiChainCollector(gapTol, planeTol)`
|
|
14
|
+
* * many times:
|
|
15
|
+
* * `context.captureCurve(anyCurve)`
|
|
16
|
+
* * `context.captureCurvePrimitive(primitive)`
|
|
17
|
+
* * end: `result = context.grabResult(makeLoopIfClosed)`
|
|
20
18
|
* @internal
|
|
21
19
|
*/
|
|
22
20
|
export declare class MultiChainCollector {
|
|
21
|
+
/** accumulated chains */
|
|
23
22
|
private _chains;
|
|
23
|
+
/** largest gap distance to close */
|
|
24
|
+
private _gapTolerance;
|
|
25
|
+
/** end point snap tolerance (assumed to be as tight or tighter than gapTolerance) */
|
|
26
|
+
private _snapTolerance;
|
|
27
|
+
/** tolerance for choosing Path or Loop. If undefined, always Path. */
|
|
28
|
+
private _planeTolerance;
|
|
24
29
|
private static _staticPointA;
|
|
25
30
|
private static _staticPointB;
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
/** TIGHT tolerance for snap to end */
|
|
29
|
-
private _endPointHitTolerance;
|
|
30
|
-
/** tolerance for choosing Path or Loop. If undefined, ALWAYS PATH */
|
|
31
|
-
private _planarityTolerance;
|
|
31
|
+
private _xyzWork0?;
|
|
32
|
+
private _xyzWork1?;
|
|
32
33
|
/** Initialize with an empty array of chains.
|
|
33
|
-
* @param
|
|
34
|
-
* @param planeTolerance tolerance for considering a
|
|
34
|
+
* @param gapTolerance tolerance for calling endpoints identical
|
|
35
|
+
* @param planeTolerance tolerance for considering a closed chain to be planar. If undefined, only create Path. If defined, create Loops for closed chains within tolerance of a plane.
|
|
35
36
|
*/
|
|
36
|
-
constructor(
|
|
37
|
-
private _xyzWork0?;
|
|
37
|
+
constructor(gapTolerance?: number, planeTolerance?: number | undefined);
|
|
38
38
|
/**
|
|
39
39
|
* Find a chain (with index _other than_ exceptChainIndex) that starts or ends at xyz
|
|
40
|
-
* @param xyz
|
|
41
|
-
* @param tolerance
|
|
42
|
-
* @param exceptChainIndex index of chain to ignore.
|
|
40
|
+
* @param xyz endpoint to check
|
|
41
|
+
* @param tolerance absolute distance tolerance for equating endpoints
|
|
42
|
+
* @param exceptChainIndex index of chain to ignore. Send -1 to consider all chains.
|
|
43
43
|
*/
|
|
44
44
|
private findAnyChainToConnect;
|
|
45
|
-
private _xyzWork1?;
|
|
46
45
|
/**
|
|
47
46
|
* Insert a single curve primitive into the active chains.
|
|
48
47
|
* * The primitive is captured (not cloned)
|
|
49
48
|
* * The primitive may be reversed in place
|
|
50
|
-
* @param candidate
|
|
49
|
+
* @param candidate curve to add to the context
|
|
51
50
|
*/
|
|
52
51
|
captureCurvePrimitive(candidate: CurvePrimitive): void;
|
|
53
52
|
/**
|
|
54
53
|
* Insert any curve into the collection.
|
|
55
54
|
* * This recurses into Path, Loop, BagOfCurves etc
|
|
56
|
-
* *
|
|
57
|
-
* @param candidate
|
|
55
|
+
* * All primitives are captured, and may be reversed in place.
|
|
56
|
+
* @param candidate curve to add to the context
|
|
58
57
|
*/
|
|
59
|
-
captureCurve(candidate:
|
|
58
|
+
captureCurve(candidate: AnyCurve): void;
|
|
59
|
+
/** If allowed by the geometry type, move an endpoint. */
|
|
60
|
+
private static simpleEndPointMove;
|
|
61
|
+
/**
|
|
62
|
+
* Try to move the end of curve0 and/or the start of curve1 to a common point.
|
|
63
|
+
* * All z-coordinates are ignored.
|
|
64
|
+
* @param curve0 first curve, assumed to end close to the start of curve1
|
|
65
|
+
* @param curve1 second curve, assumed to start close to the end of curve0
|
|
66
|
+
* @param gapTolerance max distance to move a curve start/end point
|
|
67
|
+
* @returns whether curve start/end point(s) moved
|
|
68
|
+
*/
|
|
69
|
+
private static moveHeadOrTail;
|
|
60
70
|
/** Announce a curve primitive
|
|
61
71
|
* * If a "nearby" connection is possible, insert the candidate in the chain and force endpoint match.
|
|
62
72
|
* * Otherwise start a new chain.
|
|
63
73
|
*/
|
|
64
74
|
private attachPrimitiveToAnyChain;
|
|
65
75
|
/**
|
|
66
|
-
*
|
|
67
|
-
* *
|
|
68
|
-
* *
|
|
69
|
-
* *
|
|
76
|
+
* Merge two entries in the chain array.
|
|
77
|
+
* * Move each primitive from chainB to the end of chainA.
|
|
78
|
+
* * Clear chainB.
|
|
79
|
+
* * Move the final chain to chainB index.
|
|
80
|
+
* * Decrement the array length.
|
|
81
|
+
* @param chainIndexA index of chainA
|
|
82
|
+
* @param chainIndexB index of chainB
|
|
70
83
|
*/
|
|
71
84
|
private mergeChainsForwardForward;
|
|
85
|
+
/** Reverse the curve chain in place. */
|
|
72
86
|
private reverseChain;
|
|
87
|
+
/** See if the head or tail of chainIndex matches any existing chain. If so, merge the two chains. */
|
|
73
88
|
private searchAndMergeChainIndex;
|
|
74
|
-
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
89
|
+
/**
|
|
90
|
+
* Convert an array of curve primitives into the simplest possible strongly typed curve structure.
|
|
91
|
+
* @param curves input array, assembled correctly into a single contiguous path, captured by returned object
|
|
92
|
+
* @param makeLoopIfClosed whether to return a Loop from physically closed curves array, otherwise Path
|
|
93
|
+
* @return Loop or Path if multiple curves; the primitive if only one curve; undefined if no curves
|
|
77
94
|
*/
|
|
78
95
|
private promoteArrayToCurves;
|
|
96
|
+
/** Stroke the curve chain to a line string, de-duplicate the points. */
|
|
79
97
|
private chainToLineString3d;
|
|
80
98
|
/** Return the collected results, structured as the simplest possible type. */
|
|
81
99
|
grabResult(makeLoopIfClosed?: boolean): ChainTypes;
|
|
82
100
|
/** Return chains as individual calls to announceChain. */
|
|
83
|
-
announceChainsAsLineString3d(announceChain: (ls: LineString3d) => void): void;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Static methods to assist offset sequences.
|
|
87
|
-
* @internal
|
|
88
|
-
*/
|
|
89
|
-
export declare class OffsetHelpers {
|
|
90
|
-
static sumLengths(data: any): number;
|
|
91
|
-
static extendRange(range: Range3d, data: any): Range3d;
|
|
92
|
-
static appendOffsets(data: AnyCurve | AnyCurve[] | undefined, offset: number, result: AnyCurve[]): number;
|
|
93
|
-
/**
|
|
94
|
-
* * Restructure curve fragments as chains and offsets
|
|
95
|
-
* * Return object with named chains, insideOffsets, outsideOffsets
|
|
96
|
-
* * BEWARE that if the input is not a loop the classification of outputs is suspect.
|
|
97
|
-
* @param fragments fragments to be chained
|
|
98
|
-
* @param offsetDistance offset distance.
|
|
99
|
-
*/
|
|
100
|
-
static collectInsideAndOutsideOffsets(fragments: AnyCurve[], offsetDistance: number, gapTolerance: number): {
|
|
101
|
-
insideOffsets: AnyCurve[];
|
|
102
|
-
outsideOffsets: AnyCurve[];
|
|
103
|
-
chains: ChainTypes;
|
|
104
|
-
};
|
|
105
|
-
/**
|
|
106
|
-
* * Restructure curve fragments as chains and offsets
|
|
107
|
-
* * BEWARE that if the input is not a loop the classification of outputs is suspect.
|
|
108
|
-
* @param fragments fragments to be chained
|
|
109
|
-
* @param gapTolerance distance to be treated as "effectively zero" when joining head-to-tail.
|
|
110
|
-
*/
|
|
111
|
-
static collectChains(fragments: AnyCurve[], gapTolerance: number, planarTolerance?: number): ChainTypes;
|
|
112
|
-
/** If allowed by the geometry type, move an endpoint.
|
|
113
|
-
*
|
|
114
|
-
*/
|
|
115
|
-
static simpleEndPointMove(g: CurvePrimitive, atEnd: boolean, to: XYAndZ): boolean;
|
|
116
|
-
static moveHeadOrTail(g0: CurvePrimitive, g1: CurvePrimitive, maxShift: number): boolean;
|
|
101
|
+
announceChainsAsLineString3d(announceChain: (ls: LineString3d) => void, options?: StrokeOptions): void;
|
|
117
102
|
}
|
|
118
103
|
//# sourceMappingURL=MultiChainCollector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiChainCollector.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/MultiChainCollector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MultiChainCollector.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/MultiChainCollector.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAa,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,qBAAa,mBAAmB;IAC9B,yBAAyB;IACzB,OAAO,CAAC,OAAO,CAAqB;IACpC,oCAAoC;IACpC,OAAO,CAAC,aAAa,CAAS;IAC9B,qFAAqF;IACrF,OAAO,CAAC,cAAc,CAAS;IAC/B,sEAAsE;IACtE,OAAO,CAAC,eAAe,CAAqB;IAE5C,OAAO,CAAC,MAAM,CAAC,aAAa,CAAU;IACtC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAU;IACtC,OAAO,CAAC,SAAS,CAAC,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAU;IAE5B;;;OAGG;gBACgB,YAAY,SAA+B,EAAE,cAAc,GAAE,MAAM,GAAG,SAAwC;IAMjI;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;;;;OAKG;IACI,qBAAqB,CAAC,SAAS,EAAE,cAAc;IAStD;;;;;OAKG;IACI,YAAY,CAAC,SAAS,EAAE,QAAQ;IASvC,yDAAyD;IACzD,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAejC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAiC7B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA4CjC;;;;;;;;OAQG;IACH,OAAO,CAAC,yBAAyB;IAYjC,wCAAwC;IACxC,OAAO,CAAC,YAAY;IAMpB,qGAAqG;IACrG,OAAO,CAAC,wBAAwB;IAuBhC;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA+B5B,wEAAwE;IACxE,OAAO,CAAC,mBAAmB;IAS3B,8EAA8E;IACvE,UAAU,CAAC,gBAAgB,GAAE,OAAe,GAAG,UAAU;IAahE,0DAA0D;IACnD,4BAA4B,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,YAAY,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;CAc9G"}
|