@itwin/core-geometry 5.12.0-dev.9 → 5.13.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.d.ts +5 -0
- package/lib/cjs/bspline/AkimaCurve3d.d.ts.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.js +8 -0
- 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.d.ts +5 -0
- package/lib/cjs/bspline/InterpolationCurve3d.d.ts.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js +8 -0
- 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.js.map +1 -1
- package/lib/cjs/curve/ConstrainedCurve2d.js.map +1 -1
- package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +2 -0
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +5 -0
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +2 -0
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js +5 -0
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveTypes.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +3 -3
- package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js +6 -6
- 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 +69 -8
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +257 -86
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +2 -3
- package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js +5 -6
- 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/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +82 -58
- 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.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +3 -7
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js +48 -53
- 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/PointToCurveTangentHandler.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/TransferWithSplitArcs.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -1
- package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -1
- package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -1
- package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -1
- package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -1
- package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -1
- package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -1
- package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -1
- package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.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.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js.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.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +1 -4
- package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Transform.js +1 -4
- 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.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 +3 -3
- package/lib/cjs/numerics/Polynomials.js +5 -5
- 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/SmallSystem.js.map +1 -1
- package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/cjs/numerics/UnionFind.js.map +1 -1
- package/lib/cjs/numerics/UsageSums.js.map +1 -1
- package/lib/cjs/polyface/AuxData.js.map +1 -1
- package/lib/cjs/polyface/BoxTopology.js.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/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.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.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/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +5 -2
- package/lib/cjs/topology/Graph.d.ts.map +1 -1
- package/lib/cjs/topology/Graph.js +5 -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.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
- package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/Voronoi.js.map +1 -1
- package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.d.ts +5 -0
- package/lib/esm/bspline/AkimaCurve3d.d.ts.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.js +8 -0
- 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.d.ts +5 -0
- package/lib/esm/bspline/InterpolationCurve3d.d.ts.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js +8 -0
- 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.js.map +1 -1
- package/lib/esm/curve/ConstrainedCurve2d.js.map +1 -1
- package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +2 -0
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +5 -0
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveExtendMode.js.map +1 -1
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +2 -0
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js +5 -0
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/CurveProcessor.js.map +1 -1
- package/lib/esm/curve/CurveTypes.js.map +1 -1
- package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/Query/InOutTests.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.d.ts +3 -3
- package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js +6 -6
- 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 +69 -8
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +257 -86
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +2 -3
- package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js +5 -6
- 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/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +82 -58
- 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.js.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +3 -7
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js +48 -53
- 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/PointToCurveTangentHandler.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/TransferWithSplitArcs.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -1
- package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -1
- package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -1
- package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -1
- package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -1
- package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -1
- package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -1
- package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -1
- package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.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.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js.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.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.js.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/esm/geometry3d/Segment1d.js.map +1 -1
- package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +1 -4
- package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
- package/lib/esm/geometry3d/Transform.js +1 -4
- 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.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 +3 -3
- package/lib/esm/numerics/Polynomials.js +5 -5
- 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/SmallSystem.js.map +1 -1
- package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/esm/numerics/UnionFind.js.map +1 -1
- package/lib/esm/numerics/UsageSums.js.map +1 -1
- package/lib/esm/polyface/AuxData.js.map +1 -1
- package/lib/esm/polyface/BoxTopology.js.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/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceData.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.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.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/IModelJsonSchema.js.map +1 -1
- package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
- package/lib/esm/solid/Box.js.map +1 -1
- package/lib/esm/solid/Cone.js.map +1 -1
- package/lib/esm/solid/LinearSweep.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.js.map +1 -1
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/SolidPrimitive.js.map +1 -1
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +5 -2
- package/lib/esm/topology/Graph.d.ts.map +1 -1
- package/lib/esm/topology/Graph.js +5 -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.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/MaskManager.js.map +1 -1
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/SignedDataSummary.js.map +1 -1
- package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/lib/esm/topology/Voronoi.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +5 -5
|
@@ -113,9 +113,10 @@ export class RegionOps {
|
|
|
113
113
|
return undefined;
|
|
114
114
|
}
|
|
115
115
|
/**
|
|
116
|
-
* Return an area tolerance for a given xy-range and
|
|
116
|
+
* Return an area tolerance for a given xy-range and distance tolerance.
|
|
117
117
|
* @param range range of planar region to tolerance.
|
|
118
|
-
* @param distanceTolerance optional absolute distance tolerance.
|
|
118
|
+
* @param distanceTolerance optional absolute distance tolerance. Default is [[Geometry.smallMetricDistance]].
|
|
119
|
+
* @see [[computeMinimumArea]] for an area tolerance unscaled by geometry size, which is more widely applicable for degeneracy testing.
|
|
119
120
|
*/
|
|
120
121
|
static computeXYAreaTolerance(range, distanceTolerance = Geometry.smallMetricDistance) {
|
|
121
122
|
// ensure the result is nonzero: we never want to report a zero-area loop as a signed-area loop
|
|
@@ -126,6 +127,16 @@ export class RegionOps {
|
|
|
126
127
|
const halfDistTol = 0.5 * Math.abs(distanceTolerance);
|
|
127
128
|
return halfDistTol * (range.xLength() + range.yLength() + halfDistTol);
|
|
128
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Return an area tolerance for a given distance tolerance.
|
|
132
|
+
* * The result can be used to determine whether a region's area is small enough to be considered degenerate.
|
|
133
|
+
* @param distanceTolerance optional minimum absolute distance between unique points. Default is [[Geometry.smallMetricDistance]].
|
|
134
|
+
*/
|
|
135
|
+
static computeMinimumArea(distanceTolerance = Geometry.smallMetricDistance) {
|
|
136
|
+
const areaTol = Math.PI * distanceTolerance * distanceTolerance;
|
|
137
|
+
const minAreaTol = Geometry.smallFloatingPoint * 10; // observed area 2e-15 computed for a degenerate loop
|
|
138
|
+
return areaTol < minAreaTol ? minAreaTol : areaTol;
|
|
139
|
+
}
|
|
129
140
|
/**
|
|
130
141
|
* Return a (signed) xy area for a region.
|
|
131
142
|
* * The input region should lie in a plane parallel to the xy-plane, as z-coords will be ignored.
|
|
@@ -374,13 +385,23 @@ export class RegionOps {
|
|
|
374
385
|
const localToWorld = FrameBuilder.createRightHandedFrame(undefined, xyRegion);
|
|
375
386
|
return localToWorld ? localToWorld.origin.z : 0;
|
|
376
387
|
}
|
|
388
|
+
/** Convert overlapping enums, from public to internal. */
|
|
389
|
+
static convertToRegionGroupOpType(op) {
|
|
390
|
+
if (RegionBinaryOpType.Parity === op)
|
|
391
|
+
return RegionGroupOpType.Parity;
|
|
392
|
+
if (RegionBinaryOpType.Intersection === op)
|
|
393
|
+
return RegionGroupOpType.Intersection;
|
|
394
|
+
return RegionGroupOpType.Union;
|
|
395
|
+
}
|
|
377
396
|
/**
|
|
378
397
|
* Return areas defined by a boolean operation.
|
|
379
398
|
* @note For best results, input regions should have correctly oriented loops. See [[sortOuterAndHoleLoopsXY]].
|
|
380
399
|
* @note A common use case of this method is to split (a region with) overlapping loops into a `UnionRegion` with
|
|
381
400
|
* adjacent `Loop`s: `regionOut = RegionOps.regionBooleanXY(regionIn, undefined, RegionBinaryOpType.Union)`.
|
|
382
|
-
*
|
|
383
|
-
*
|
|
401
|
+
* Such a union can be further simplified by passing the option `RegionBooleanXYOptions.simplifyUnion = true`.
|
|
402
|
+
* @note By default, this method does not discover holes implicitly formed by input loops. For example, the union of
|
|
403
|
+
* the four trapezoids that comprise a picture frame is not returned as a [[ParityRegion]] unless the option
|
|
404
|
+
* `simplifyUnion = true`.
|
|
384
405
|
* @param loopsA first set of loops (treated as a union)
|
|
385
406
|
* @param loopsB second set of loops (treated as a union)
|
|
386
407
|
* @param operation indicates Union, Intersection, Parity, AMinusB, or BMinusA
|
|
@@ -388,48 +409,69 @@ export class RegionOps {
|
|
|
388
409
|
* @returns a region resulting from merging input loops and the boolean operation.
|
|
389
410
|
*/
|
|
390
411
|
static regionBooleanXY(loopsA, loopsB, operation, mergeToleranceOrOptions = Geometry.smallMetricDistance) {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
mergeTolerance = mergeToleranceOrOptions.mergeTolerance ?? Geometry.smallMetricDistance;
|
|
399
|
-
simplifyUnion = mergeToleranceOrOptions.simplifyUnion ?? false;
|
|
400
|
-
}
|
|
401
|
-
let result = UnionRegion.create();
|
|
402
|
-
const context = RegionBooleanContext.create(RegionGroupOpType.Union, RegionGroupOpType.Union);
|
|
412
|
+
const optionIsNumber = typeof mergeToleranceOrOptions === "number";
|
|
413
|
+
const mergeTolerance = optionIsNumber ? mergeToleranceOrOptions : mergeToleranceOrOptions.mergeTolerance ?? Geometry.smallMetricDistance;
|
|
414
|
+
const simplifyUnion = optionIsNumber ? false : mergeToleranceOrOptions.simplifyUnion ?? false;
|
|
415
|
+
const operationGroupA = optionIsNumber ? RegionGroupOpType.Union : RegionOps.convertToRegionGroupOpType(mergeToleranceOrOptions.operationGroupA);
|
|
416
|
+
const operationGroupB = optionIsNumber ? RegionGroupOpType.Union : RegionOps.convertToRegionGroupOpType(mergeToleranceOrOptions.operationGroupB);
|
|
417
|
+
let result;
|
|
418
|
+
const context = RegionBooleanContext.create(operationGroupA, operationGroupB);
|
|
403
419
|
context.addMembers(loopsA, loopsB);
|
|
404
420
|
context.annotateAndMergeCurvesInGraph(mergeTolerance);
|
|
405
421
|
const bridgeMask = HalfEdgeMask.BRIDGE_EDGE;
|
|
406
422
|
const visitMask = context.graph.grabMask(false);
|
|
407
|
-
|
|
408
|
-
const
|
|
423
|
+
// use our own outMask: we cannot use EXTERIOR as sweep clears it before processing each component
|
|
424
|
+
const outMask = simplifyUnion ? context.graph.grabMask(false) : HalfEdgeMask.NULL_MASK;
|
|
425
|
+
const outSeeds = simplifyUnion ? [] : undefined;
|
|
426
|
+
context.graph.clearMask(visitMask | outMask);
|
|
427
|
+
const areaTol = this.computeMinimumArea(mergeTolerance);
|
|
409
428
|
const z = RegionOps.getZCoordinate(operation === RegionBinaryOpType.BMinusA ? loopsB : loopsA);
|
|
410
429
|
const options = { compress: true, closureTol: mergeTolerance, bridgeMask, visitMask, z };
|
|
430
|
+
let numFacesIn = 0;
|
|
411
431
|
context.runClassificationSweep(operation, (_graph, face, faceType, area) => {
|
|
412
432
|
// ignore danglers and null faces, but not 2-edge "banana" faces with nonzero area
|
|
413
433
|
if (face.countEdgesAroundFace() < 2)
|
|
414
434
|
return;
|
|
415
435
|
if (Math.abs(area) < areaTol)
|
|
416
436
|
return;
|
|
417
|
-
if (
|
|
437
|
+
if (simplifyUnion) { // process the outer/negative faces later
|
|
438
|
+
if (faceType === 1) {
|
|
439
|
+
numFacesIn++;
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
face.setMaskAroundFace(outMask);
|
|
443
|
+
outSeeds?.push(face);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
else if (faceType === 1) { // collect the inner faces now
|
|
418
447
|
const loopOrParityRegion = PlanarSubdivision.createLoopOrParityRegionInFace(face, options);
|
|
419
|
-
if (loopOrParityRegion)
|
|
420
|
-
result
|
|
448
|
+
if (loopOrParityRegion) {
|
|
449
|
+
if (!result)
|
|
450
|
+
result = UnionRegion.create();
|
|
451
|
+
if (result.tryAddChild(loopOrParityRegion))
|
|
452
|
+
numFacesIn++;
|
|
453
|
+
}
|
|
421
454
|
}
|
|
422
455
|
});
|
|
423
|
-
|
|
424
|
-
if (simplifyUnion &&
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
456
|
+
// the outer faces are marked; now we collect their boundary super face loops and sort them
|
|
457
|
+
if (simplifyUnion && numFacesIn > 0 && outSeeds && outSeeds.length > 0) {
|
|
458
|
+
context.graph.clearMask(visitMask);
|
|
459
|
+
const outLoops = [];
|
|
460
|
+
for (const outSeed of outSeeds) {
|
|
461
|
+
const superFace = [];
|
|
462
|
+
const skipEdge = (he) => he.isMaskSet(visitMask) || !he.isMaskSet(outMask) || he.edgeMate.isMaskSet(outMask);
|
|
463
|
+
const announceEdge = (he) => superFace.push(he);
|
|
464
|
+
if (outSeed.announceEdgesInSuperFace(skipEdge, announceEdge)) {
|
|
465
|
+
superFace.forEach((he) => he.setMask(visitMask));
|
|
466
|
+
const outLoop = PlanarSubdivision.createLoopInFace(superFace, options);
|
|
467
|
+
if (outLoop)
|
|
468
|
+
outLoops.push(outLoop);
|
|
469
|
+
}
|
|
430
470
|
}
|
|
471
|
+
result = this.sortOuterAndHoleLoopsXY(outLoops);
|
|
431
472
|
}
|
|
432
|
-
|
|
473
|
+
context.graph.dropMask(visitMask | outMask);
|
|
474
|
+
return result ? this.simplifyRegion(result) : undefined;
|
|
433
475
|
}
|
|
434
476
|
/**
|
|
435
477
|
* Return a polyface whose facets are a boolean operation between the input regions.
|
|
@@ -746,86 +788,216 @@ export class RegionOps {
|
|
|
746
788
|
return SortablePolygon.sortAsAnyRegion(loopAndArea);
|
|
747
789
|
}
|
|
748
790
|
/**
|
|
749
|
-
*
|
|
750
|
-
*
|
|
791
|
+
* Compare two edges' geometry from CurveLocationDetail edge tags.
|
|
792
|
+
* @returns an object with following properties:
|
|
793
|
+
* * sameCurves: whether the edges' curve definitions are equivalent.
|
|
794
|
+
* * reversedCurves: whether the edges' curve definitions are equivalent after reversing one of them.
|
|
795
|
+
* * senseEdge0/1: whether the topological edge is oriented in the same direction as the curve geometry, or the opposite direction.
|
|
796
|
+
*/
|
|
797
|
+
static getEdgeGeometry(edge0, edge1) {
|
|
798
|
+
let sameCurves = false;
|
|
799
|
+
let reversedCurves = false;
|
|
800
|
+
let senseEdge0 = false;
|
|
801
|
+
let senseEdge1 = false;
|
|
802
|
+
if (edge0.edgeTag instanceof CurveLocationDetail && edge0.edgeTag.curve !== undefined && edge0.edgeTag.isInterval() && edge0.sortData &&
|
|
803
|
+
edge1.edgeTag instanceof CurveLocationDetail && edge1.edgeTag.curve !== undefined && edge1.edgeTag.isInterval() && edge1.sortData) {
|
|
804
|
+
sameCurves = edge0.edgeTag.curve === edge1.edgeTag.curve || edge0.edgeTag.curve.isAlmostEqual(edge1.edgeTag.curve);
|
|
805
|
+
reversedCurves = !sameCurves && edge0.edgeTag.curve.isAlmostEqual(edge1.edgeTag.curve.clone().reverse());
|
|
806
|
+
senseEdge0 = edge0.sortData > 0;
|
|
807
|
+
senseEdge1 = edge1.sortData > 0;
|
|
808
|
+
}
|
|
809
|
+
return { sameCurves, reversedCurves, senseEdge0, senseEdge1 };
|
|
810
|
+
}
|
|
811
|
+
/**
|
|
812
|
+
* Compare two edges' orientations. They do not have to be adjacent.
|
|
813
|
+
* * Requires CurveLocationDetail edge tags.
|
|
814
|
+
* @returns an object with following properties:
|
|
815
|
+
* * diametric: whether edges have same/reversed curves and are oriented diametrically opposite each other.
|
|
816
|
+
* * reversedCurves: whether the underlying curve definitions are reversed.
|
|
817
|
+
* * senseEdge0/1: whether the topological edge is oriented in the same direction as the curve geometry, or the opposite direction.
|
|
818
|
+
*/
|
|
819
|
+
static areEdgesDiametric(edge0, edge1) {
|
|
820
|
+
let diametric = false;
|
|
821
|
+
let reversedCurves = false;
|
|
822
|
+
let senseEdge0 = false;
|
|
823
|
+
let senseEdge1 = false;
|
|
824
|
+
if (edge0 !== edge1) {
|
|
825
|
+
const data = RegionOps.getEdgeGeometry(edge0, edge1);
|
|
826
|
+
reversedCurves = data.reversedCurves;
|
|
827
|
+
senseEdge0 = data.senseEdge0;
|
|
828
|
+
senseEdge1 = data.senseEdge1;
|
|
829
|
+
diametric = (data.sameCurves && (senseEdge0 !== senseEdge1)) || (reversedCurves && (senseEdge0 === senseEdge1));
|
|
830
|
+
}
|
|
831
|
+
return { diametric, reversedCurves, senseEdge0, senseEdge1 };
|
|
832
|
+
}
|
|
833
|
+
/**
|
|
834
|
+
* Determine if the edges at a vertex were created by splitting an edge or null face.
|
|
835
|
+
* * Requires CurveLocationDetail edge tags.
|
|
836
|
+
* @param he an edge created by the split operation.
|
|
837
|
+
* @param vs another edge at the same vertex. If undefined, use `vs = he.vertexSuccessor` and check for a
|
|
838
|
+
* degree-2 vertex (e.g., split edge); otherwise, ignore the degree check (e.g., inputs are a null face pair).
|
|
839
|
+
*/
|
|
840
|
+
static isHealableEdgeOrNullFace(he, vs) {
|
|
841
|
+
if (vs) {
|
|
842
|
+
if (!he.findAroundVertex(vs))
|
|
843
|
+
return false;
|
|
844
|
+
}
|
|
845
|
+
else {
|
|
846
|
+
vs = he.vertexSuccessor;
|
|
847
|
+
if (vs.vertexSuccessor !== he)
|
|
848
|
+
return false; // not a split edge
|
|
849
|
+
}
|
|
850
|
+
const directionData = RegionOps.areEdgesDiametric(he, vs);
|
|
851
|
+
if (!directionData.diametric)
|
|
852
|
+
return false;
|
|
853
|
+
const heVertexFraction = directionData.senseEdge0 ? he.edgeTag.fraction : he.edgeTag.fraction1;
|
|
854
|
+
let vsVertexFraction = directionData.senseEdge1 ? vs.edgeTag.fraction : vs.edgeTag.fraction1;
|
|
855
|
+
if (directionData.reversedCurves)
|
|
856
|
+
vsVertexFraction = 1.0 - vsVertexFraction;
|
|
857
|
+
return Geometry.isSmallRelative(heVertexFraction - vsVertexFraction); // unrelated vertex fractions are not healable
|
|
858
|
+
}
|
|
859
|
+
/**
|
|
860
|
+
* Determine if the vertex loop resulted from splitting a null face into two null faces (and thus can be healed).
|
|
861
|
+
* * Requires CurveLocationDetail edge tags.
|
|
862
|
+
* * If there are multiple null faces at the vertex (a null face bundle), they must be adjacent and positioned in
|
|
863
|
+
* diametrically opposite pairs, each of which resulted from splitting a null face. This implies there are exactly
|
|
864
|
+
* two non-null faces opposite each other in the vertex loop.
|
|
865
|
+
* @returns an object with properties:
|
|
866
|
+
* * isHealable: whether the input is a healable vertex loop in a null face bundle
|
|
867
|
+
* * nullFacePairs: if `isHealable` is true, an array of the matching null face pairs around the vertex.
|
|
868
|
+
*/
|
|
869
|
+
static isHealableNullFaceBundle(vertex) {
|
|
870
|
+
const nonNullFaceIndex = [];
|
|
871
|
+
const vertexLoop = [];
|
|
872
|
+
// lambda: null face detector, with curve check to rule out banana faces
|
|
873
|
+
const isNullFace = (face) => {
|
|
874
|
+
const fSucc = face.faceSuccessor;
|
|
875
|
+
return (fSucc.faceSuccessor === face) && RegionOps.areEdgesDiametric(face, fSucc).diametric;
|
|
876
|
+
};
|
|
877
|
+
vertex.announceEdgesAroundVertex((e) => {
|
|
878
|
+
if (!isNullFace(e))
|
|
879
|
+
nonNullFaceIndex.push(vertexLoop.length);
|
|
880
|
+
vertexLoop.push(e);
|
|
881
|
+
});
|
|
882
|
+
const degree = vertexLoop.length;
|
|
883
|
+
if (degree < 4 || nonNullFaceIndex.length !== 2 || Geometry.modulo(degree, 2) > 0)
|
|
884
|
+
return { isHealable: false };
|
|
885
|
+
const iNonNull0 = nonNullFaceIndex[0];
|
|
886
|
+
if (nonNullFaceIndex[1] - iNonNull0 !== degree / 2)
|
|
887
|
+
return { isHealable: false };
|
|
888
|
+
const nullFacePairs = [];
|
|
889
|
+
for (let i = 1; i < degree / 2; i++) {
|
|
890
|
+
const iNullFace = Geometry.modulo(iNonNull0 + i, degree);
|
|
891
|
+
const iMatchingNullFace = Geometry.modulo(2 * iNonNull0 - iNullFace, degree);
|
|
892
|
+
if (!RegionOps.isHealableEdgeOrNullFace(vertexLoop[iNullFace], vertexLoop[iMatchingNullFace]))
|
|
893
|
+
return { isHealable: false };
|
|
894
|
+
nullFacePairs.push([vertexLoop[iNullFace], vertexLoop[iMatchingNullFace]]);
|
|
895
|
+
}
|
|
896
|
+
return { isHealable: true, nullFacePairs };
|
|
897
|
+
}
|
|
898
|
+
/** Heal a split edge by removing the redundant vertex loop and extending the surviving curve details. */
|
|
899
|
+
static healSplitEdgeAndCurve(v) {
|
|
900
|
+
const vs = v.vertexSuccessor;
|
|
901
|
+
const fPred = HalfEdge.healEdge(v, false);
|
|
902
|
+
if (!fPred)
|
|
903
|
+
return;
|
|
904
|
+
// lambda to extend the surviving node's curve interval. Inputs are on the same side of the healed edge.
|
|
905
|
+
const extendDetailInterval = (doomed, survivor) => {
|
|
906
|
+
const doomedData = RegionOps.getEdgeGeometry(doomed, survivor);
|
|
907
|
+
assert(doomedData.sameCurves || doomedData.reversedCurves, "expect related curves");
|
|
908
|
+
let newEndFraction = doomedData.senseEdge0 ? doomed.edgeTag.fraction1 : doomed.edgeTag.fraction;
|
|
909
|
+
if (doomedData.reversedCurves)
|
|
910
|
+
newEndFraction = 1.0 - newEndFraction;
|
|
911
|
+
const newEndPoint = doomedData.senseEdge0 ? doomed.edgeTag.point1 : doomed.edgeTag.point;
|
|
912
|
+
if (doomedData.senseEdge1)
|
|
913
|
+
survivor.edgeTag.captureFraction1Point1(newEndFraction, newEndPoint);
|
|
914
|
+
else
|
|
915
|
+
survivor.edgeTag.captureFractionPoint(newEndFraction, newEndPoint);
|
|
916
|
+
};
|
|
917
|
+
extendDetailInterval(v, fPred);
|
|
918
|
+
extendDetailInterval(vs, fPred.edgeMate);
|
|
919
|
+
}
|
|
920
|
+
/**
|
|
921
|
+
* Disconnect extraneous bridge edges, which remain in the graph as isolated edges.
|
|
751
922
|
* @param graph half edges to process.
|
|
752
|
-
* @param isBridgeEdge optional
|
|
753
|
-
* @param faceToArea optional
|
|
754
|
-
* @returns
|
|
755
|
-
* @internal
|
|
923
|
+
* @param isBridgeEdge optional callback to identify a bridge edge.
|
|
924
|
+
* @param faceToArea optional callback to compute face area.
|
|
925
|
+
* @returns array of surviving vertices formerly adjacent to the isolated bridge edges (e.g., for the caller to heal).
|
|
756
926
|
*/
|
|
757
|
-
static
|
|
927
|
+
static isolateExtraneousBridgeEdges(graph, isBridgeEdge, faceToArea) {
|
|
758
928
|
const toHeal = [];
|
|
759
929
|
const interiorBridges = [];
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
930
|
+
const isolateBridgeEdge = (edge) => {
|
|
931
|
+
if (!edge.isDangling)
|
|
932
|
+
toHeal.push(edge.vertexSuccessor);
|
|
933
|
+
if (!edge.edgeMate.isDangling)
|
|
934
|
+
toHeal.push(edge.edgeMate.vertexSuccessor);
|
|
935
|
+
edge.isolateEdge();
|
|
936
|
+
};
|
|
764
937
|
// isolate dangling bridges, bridges separating different faces, and "exterior" bridges in the negative area face
|
|
765
938
|
graph.announceEdges((_g, node) => {
|
|
766
939
|
if (isBridgeEdge(node)) {
|
|
767
|
-
if (node.isDangling || node.edgeMate.isDangling || !node.findAroundFace(node.edgeMate) || faceToArea(node) < 0.0)
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
node.isolateEdge();
|
|
771
|
-
}
|
|
772
|
-
else {
|
|
940
|
+
if (node.isDangling || node.edgeMate.isDangling || !node.findAroundFace(node.edgeMate) || faceToArea(node) < 0.0)
|
|
941
|
+
isolateBridgeEdge(node);
|
|
942
|
+
else
|
|
773
943
|
interiorBridges.push(node);
|
|
774
|
-
}
|
|
775
944
|
}
|
|
776
945
|
return true;
|
|
777
946
|
});
|
|
778
|
-
//
|
|
779
|
-
const
|
|
947
|
+
// lambda: check if a non-isolated interior bridge edge is extraneous, relying solely on face loop orientation (not HalfEdgeMasks!)
|
|
948
|
+
const isBridgeEdgeExtraneous = (node) => {
|
|
949
|
+
if (node.isIsolatedEdge)
|
|
950
|
+
return false; // already extraneous
|
|
780
951
|
if (faceToArea(node) < 0.0)
|
|
781
952
|
return true; // exterior face
|
|
782
953
|
if (node.findAroundFace(node.edgeMate))
|
|
783
954
|
return false; // interior washer face
|
|
784
955
|
return faceToArea(node.edgeMate) < 0.0; // adjacent to exterior face
|
|
785
956
|
};
|
|
786
|
-
// All bridges in the negative area face were isolated, but this may have
|
|
787
|
-
// negative area face. Keep isolating these bridge edges until none remain.
|
|
957
|
+
// All bridges in the negative area face were isolated, but this may have caused surviving bridges to become extraneous
|
|
958
|
+
// (e.g., by swelling the negative area face around them). Keep isolating these bridge edges until none remain.
|
|
788
959
|
let numIsolatedThisPass;
|
|
789
960
|
do {
|
|
790
961
|
numIsolatedThisPass = 0;
|
|
791
962
|
for (const node of interiorBridges) {
|
|
792
|
-
if (
|
|
793
|
-
|
|
794
|
-
toHeal.push(node.edgeMate.vertexSuccessor);
|
|
795
|
-
node.isolateEdge();
|
|
963
|
+
if (isBridgeEdgeExtraneous(node)) {
|
|
964
|
+
isolateBridgeEdge(node);
|
|
796
965
|
numIsolatedThisPass++;
|
|
797
966
|
}
|
|
798
967
|
}
|
|
799
968
|
} while (numIsolatedThisPass > 0);
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
969
|
+
return toHeal.filter((edge) => !edge.isIsolatedEdge);
|
|
970
|
+
}
|
|
971
|
+
/**
|
|
972
|
+
* Simplify the graph by removing bridge edges that do not serve to connect inner and outer loops.
|
|
973
|
+
* * If edgeTags are `CurveLocationDetail`s, e.g., as set by `PlanarSubdivision.assembleHalfEdgeGraph`, attempt to heal edges split by removed bridge edges.
|
|
974
|
+
* @param graph half edges to process.
|
|
975
|
+
* @param isBridgeEdge optional callback to identify a bridge edge. Default looks for `HalfEdgeMask.BRIDGE_EDGE`.
|
|
976
|
+
* @param faceToArea optional callback to compute face area. Default is `HalfEdgeGraphSearch.signedFaceArea`.
|
|
977
|
+
* @returns the number of extraneous bridge edges removed from the graph.
|
|
978
|
+
* @internal
|
|
979
|
+
*/
|
|
980
|
+
static removeExtraneousBridgeEdges(graph, isBridgeEdge, faceToArea) {
|
|
981
|
+
if (!faceToArea)
|
|
982
|
+
faceToArea = (node) => HalfEdgeGraphSearch.signedFaceArea(node);
|
|
983
|
+
if (!isBridgeEdge)
|
|
984
|
+
isBridgeEdge = (node) => node.isMaskSet(HalfEdgeMask.BRIDGE_EDGE);
|
|
985
|
+
const toHeal = RegionOps.isolateExtraneousBridgeEdges(graph, isBridgeEdge, faceToArea);
|
|
986
|
+
// clean up the isolated bridge edges' original vertex loops, if possible
|
|
987
|
+
for (const vertex of toHeal) {
|
|
988
|
+
if (vertex.isDangling || vertex.isIsolatedEdge)
|
|
989
|
+
continue;
|
|
990
|
+
if (RegionOps.isHealableEdgeOrNullFace(vertex)) {
|
|
991
|
+
RegionOps.healSplitEdgeAndCurve(vertex);
|
|
992
|
+
continue;
|
|
807
993
|
}
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
doomedB.edgeTag instanceof CurveLocationDetail && doomedB.sortData !== undefined &&
|
|
816
|
-
doomedA.edgeTag.curve === doomedB.edgeTag.curve &&
|
|
817
|
-
doomedA.edgeTag.isInterval() && doomedB.edgeTag.isInterval() &&
|
|
818
|
-
doomedA.sortData * doomedB.sortData < 0 &&
|
|
819
|
-
((doomedA.sortData > 0 && Geometry.isSmallRelative(doomedA.edgeTag.fraction - doomedB.edgeTag.fraction1)) ||
|
|
820
|
-
(doomedA.sortData < 0 && Geometry.isSmallRelative(doomedA.edgeTag.fraction1 - doomedB.edgeTag.fraction)))) {
|
|
821
|
-
const survivorA = HalfEdge.healEdge(doomedA, false);
|
|
822
|
-
if (survivorA) {
|
|
823
|
-
const endFractionA = (doomedA.sortData > 0) ? doomedA.edgeTag.fraction1 : doomedA.edgeTag.fraction;
|
|
824
|
-
const endPointA = (doomedA.sortData > 0) ? doomedA.edgeTag.point1 : doomedA.edgeTag.point;
|
|
825
|
-
mergeDetails(survivorA, endFractionA, endPointA);
|
|
826
|
-
const endFractionB = (doomedB.sortData > 0) ? doomedB.edgeTag.fraction1 : doomedB.edgeTag.fraction;
|
|
827
|
-
const endPointB = (doomedB.sortData > 0) ? doomedB.edgeTag.point1 : doomedB.edgeTag.point;
|
|
828
|
-
mergeDetails(survivorA.edgeMate, endFractionB, endPointB);
|
|
994
|
+
const bundleData = RegionOps.isHealableNullFaceBundle(vertex);
|
|
995
|
+
if (bundleData.isHealable && bundleData.nullFacePairs) {
|
|
996
|
+
for (const [f0, f1] of bundleData.nullFacePairs)
|
|
997
|
+
HalfEdge.pinch(f0, f1); // merge the null face pair into a single null face (with 2 split edges)
|
|
998
|
+
for (const [e0, e1] of bundleData.nullFacePairs) {
|
|
999
|
+
RegionOps.healSplitEdgeAndCurve(e0);
|
|
1000
|
+
RegionOps.healSplitEdgeAndCurve(e1);
|
|
829
1001
|
}
|
|
830
1002
|
}
|
|
831
1003
|
}
|
|
@@ -880,8 +1052,6 @@ export class RegionOps {
|
|
|
880
1052
|
static constructAllXYRegionLoops(curvesAndRegions, tolerance = Geometry.smallMetricDistance, addBridges = true) {
|
|
881
1053
|
let primitives = RegionOps.collectCurvePrimitives(curvesAndRegions, undefined, true, true);
|
|
882
1054
|
primitives = TransferWithSplitArcs.clone(BagOfCurves.create(...primitives)).children;
|
|
883
|
-
const range = this.curveArrayRange(primitives);
|
|
884
|
-
const areaTol = this.computeXYAreaTolerance(range, tolerance);
|
|
885
1055
|
let hasOpenCurve = false;
|
|
886
1056
|
if (addBridges) { // generate a temp graph from ONLY the closed inputs to extract its bridge edges
|
|
887
1057
|
const context = RegionBooleanContext.create(RegionGroupOpType.Union, RegionGroupOpType.Union);
|
|
@@ -906,7 +1076,8 @@ export class RegionOps {
|
|
|
906
1076
|
const graph = PlanarSubdivision.assembleHalfEdgeGraph(primitives, intersections, tolerance);
|
|
907
1077
|
if (addBridges && hasOpenCurve)
|
|
908
1078
|
RegionOps.removeExtraneousBridgeEdges(graph);
|
|
909
|
-
|
|
1079
|
+
const areaTol = this.computeMinimumArea(tolerance);
|
|
1080
|
+
return PlanarSubdivision.collectSignedLoopSetsInHalfEdgeGraph(graph, tolerance, areaTol);
|
|
910
1081
|
}
|
|
911
1082
|
/**
|
|
912
1083
|
* Collect all `CurvePrimitives` in loosely typed input.
|