@itwin/core-geometry 4.3.0-dev.36 → 4.3.0-dev.38
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/Constant.js.map +1 -1
- package/lib/cjs/Geometry.d.ts +14 -2
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +14 -2
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.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.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveTypes.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- 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/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.d.ts +0 -1
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +0 -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.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.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/Range1dArray.js.map +1 -1
- package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/cjs/numerics/UnionFind.js.map +1 -1
- package/lib/cjs/numerics/UsageSums.js.map +1 -1
- package/lib/cjs/polyface/AuxData.js.map +1 -1
- package/lib/cjs/polyface/BoxTopology.js.map +1 -1
- package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
- package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
- package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.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/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/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +399 -366
- package/lib/cjs/topology/Graph.d.ts.map +1 -1
- package/lib/cjs/topology/Graph.js +531 -464
- 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.d.ts +8 -9
- package/lib/cjs/topology/MaskManager.d.ts.map +1 -1
- package/lib/cjs/topology/MaskManager.js +11 -12
- 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/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.d.ts +14 -2
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +14 -2
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.js.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.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.js.map +1 -1
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveExtendMode.js.map +1 -1
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/CurveProcessor.js.map +1 -1
- package/lib/esm/curve/CurveTypes.js.map +1 -1
- package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/Query/InOutTests.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- 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/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.d.ts +0 -1
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +0 -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.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.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/numerics/Range1dArray.js.map +1 -1
- package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/esm/numerics/UnionFind.js.map +1 -1
- package/lib/esm/numerics/UsageSums.js.map +1 -1
- package/lib/esm/polyface/AuxData.js.map +1 -1
- package/lib/esm/polyface/BoxTopology.js.map +1 -1
- package/lib/esm/polyface/FacetFaceData.js.map +1 -1
- package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/esm/polyface/FacetOrientation.js.map +1 -1
- package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.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/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/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
- package/lib/esm/solid/Box.js.map +1 -1
- package/lib/esm/solid/Cone.js.map +1 -1
- package/lib/esm/solid/LinearSweep.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.js.map +1 -1
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/SolidPrimitive.js.map +1 -1
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +399 -366
- package/lib/esm/topology/Graph.d.ts.map +1 -1
- package/lib/esm/topology/Graph.js +531 -464
- 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.d.ts +8 -9
- package/lib/esm/topology/MaskManager.d.ts.map +1 -1
- package/lib/esm/topology/MaskManager.js +11 -12
- 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/XYParitySearchContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -11,566 +11,599 @@ import { XAndY, XYAndZ } from "../geometry3d/XYZProps";
|
|
|
11
11
|
* * The mask member is a number which is used as set of single bit boolean values.
|
|
12
12
|
* * Particular meanings of the various bits are HIGHLY application dependent.
|
|
13
13
|
* * The EXTERIOR mask bit is widely used to mark nodes that are "outside" the active areas
|
|
14
|
-
* * The PRIMARY_EDGE bit is widely used to indicate linework created directly from input data, hence protected from
|
|
14
|
+
* * The PRIMARY_EDGE bit is widely used to indicate linework created directly from input data, hence protected from
|
|
15
|
+
* triangle edge flipping.
|
|
15
16
|
* * The BOUNDARY bit is widely used to indicate that crossing this edge is a transition from outside to inside.
|
|
16
17
|
* * VISITED is used locally in many searches.
|
|
17
18
|
* * Never use VISITED unless the search logic is highly self contained.
|
|
18
19
|
* @internal
|
|
19
20
|
*/
|
|
20
21
|
export declare enum HalfEdgeMask {
|
|
21
|
-
/**
|
|
22
|
-
*
|
|
22
|
+
/**
|
|
23
|
+
* Mask commonly set consistently around exterior faces.
|
|
24
|
+
* * A boundary edge with interior to one side, exterior to the other, will have EXTERIOR only on the outside.
|
|
23
25
|
* * An an edge inserted "within a purely exterior face" can have EXTERIOR on both sides.
|
|
24
26
|
* * An interior edge (such as added during triangulation) will have no EXTERIOR bits.
|
|
25
27
|
*/
|
|
26
28
|
EXTERIOR = 1,
|
|
27
|
-
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
29
|
+
/**
|
|
30
|
+
* Mask commonly set (on both sides) of original geometry edges that are transition from outside from to inside.
|
|
31
|
+
* * At the moment of creating an edge from primary user boundary loop coordinates, the fact that an edge is BOUNDARY
|
|
32
|
+
* is often clear even though there is uncertainty about which side should be EXTERIOR.
|
|
30
33
|
*/
|
|
31
34
|
BOUNDARY_EDGE = 2,
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
35
|
+
/**
|
|
36
|
+
* Mask commonly set (on both sides) of original geometry edges, but NOT indicating that the edge is certainly a
|
|
37
|
+
* boundary between outside and inside.
|
|
38
|
+
* * For instance, if geometry is provided as stray sticks (not loops), it can be marked PRIMARY_EDGE but neither
|
|
39
|
+
* BOUNDARY_EDGE nor EXTERIOR_EDGE.
|
|
34
40
|
*/
|
|
35
41
|
PRIMARY_EDGE = 4,
|
|
36
|
-
/** Mask used for low level searches to identify previously-visited nodes */
|
|
42
|
+
/** Mask used for low level searches to identify previously-visited nodes. */
|
|
37
43
|
VISITED = 16,
|
|
38
|
-
/** Mask applied to triangles by earcut triangulator */
|
|
44
|
+
/** Mask applied to triangles by earcut triangulator. */
|
|
39
45
|
TRIANGULATED_FACE = 256,
|
|
40
|
-
/**
|
|
46
|
+
/** Mask applied in a face with 2 edges. */
|
|
41
47
|
NULL_FACE = 512,
|
|
42
|
-
/**
|
|
48
|
+
/** No mask bits. */
|
|
43
49
|
NULL_MASK = 0,
|
|
44
|
-
/** The "upper 12
|
|
50
|
+
/** The "upper 12" bits of 32 bit integer reserved for grab/drop. */
|
|
45
51
|
ALL_GRAB_DROP_MASKS = 4293918720,
|
|
46
|
-
/**
|
|
52
|
+
/** All mask bits */
|
|
47
53
|
ALL_MASK = 4294967295
|
|
48
54
|
}
|
|
49
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* Function signature for function of one node with no return type restrictions.
|
|
50
57
|
* @internal
|
|
51
58
|
*/
|
|
52
59
|
export type NodeFunction = (node: HalfEdge) => any;
|
|
53
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* Function signature for function of one node, returning a number.
|
|
54
62
|
* @internal
|
|
55
63
|
*/
|
|
56
64
|
export type NodeToNumberFunction = (node: HalfEdge) => number;
|
|
57
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Function signature for function of one node, returning a boolean.
|
|
58
67
|
* @internal
|
|
59
68
|
*/
|
|
60
69
|
export type HalfEdgeToBooleanFunction = (node: HalfEdge) => boolean;
|
|
61
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Function signature for function of a node and a mask, returning a number.
|
|
62
72
|
* @internal
|
|
63
73
|
*/
|
|
64
74
|
export type HalfEdgeAndMaskToBooleanFunction = (node: HalfEdge, mask: HalfEdgeMask) => boolean;
|
|
65
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Function signature for function of a graph and a node, returning a boolean.
|
|
66
77
|
* @internal
|
|
67
78
|
*/
|
|
68
79
|
export type GraphNodeFunction = (graph: HalfEdgeGraph, node: HalfEdge) => boolean;
|
|
69
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Non-topological data members in a half edge.
|
|
70
82
|
* These are not part of adjacency and masking logic.
|
|
71
|
-
|
|
72
|
-
/** member fields for a half edge (which is also commonly called a node)
|
|
83
|
+
* Member fields for a half edge (which is also commonly called a node).
|
|
73
84
|
* @internal
|
|
74
85
|
*/
|
|
75
86
|
export interface HalfEdgeUserData {
|
|
76
|
-
/** Vertex x coordinate */
|
|
87
|
+
/** Vertex x coordinate. */
|
|
77
88
|
x: number;
|
|
78
|
-
/** Vertex y coordinate */
|
|
89
|
+
/** Vertex y coordinate. */
|
|
79
90
|
y: number;
|
|
80
|
-
/** Vertex z coordinate */
|
|
91
|
+
/** Vertex z coordinate. */
|
|
81
92
|
z: number;
|
|
82
|
-
/**
|
|
93
|
+
/** Angle used for sort-around-vertex. */
|
|
83
94
|
sortAngle?: number;
|
|
84
|
-
/**
|
|
95
|
+
/** Numeric value for application-specific tagging (e.g. sorting). */
|
|
85
96
|
sortData?: number;
|
|
86
|
-
/**
|
|
87
|
-
*
|
|
97
|
+
/**
|
|
98
|
+
* Application-specific data for the edge identifier.
|
|
99
|
+
* * Edge split operations are expected to copy this to new sub-edges.
|
|
88
100
|
*/
|
|
89
101
|
edgeTag?: any;
|
|
90
|
-
/**
|
|
91
|
-
*
|
|
102
|
+
/**
|
|
103
|
+
* Application-specific data for the face loop.
|
|
104
|
+
* * Face split operations are expected to copy this to new nodes in the face.
|
|
92
105
|
*/
|
|
93
106
|
faceTag?: any;
|
|
94
107
|
}
|
|
95
108
|
/**
|
|
109
|
+
* A HalfEdge is "one side of an edge" in a structure of faces, edges and vertices. From a node there are
|
|
110
|
+
* navigational links to:
|
|
111
|
+
* * "faceSuccessor" -- the next half edge in a loop around a face.
|
|
112
|
+
* * "facePredecessor" -- the previous half edge in a loop around a face.
|
|
113
|
+
* * "edgeMate" -- the node's partner on the other side of the edge.
|
|
114
|
+
*
|
|
115
|
+
* The next, prev, and mate are the essential connectivity. Additional node content is for application-specific
|
|
116
|
+
* uses. The most useful ones are:
|
|
117
|
+
* * x,y -- coordinates in the xy plane
|
|
118
|
+
* * z -- z coordinate. This is normally ignored during planar setup, but used for output.
|
|
119
|
+
* * maskBits -- an integer value manipulated as individual bits.
|
|
96
120
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* ** "edgeMate" -- the node's partner on the other side of the edge.
|
|
101
|
-
* * The next, prev, and mate are the essential connectivity. Additional node content is for application-specific
|
|
102
|
-
* uses. The most useful ones are:
|
|
103
|
-
* ** x,y -- coordinates in the xy plane
|
|
104
|
-
* ** z -- z coordinate. This is normally ignored during planar setup, but used for output.
|
|
105
|
-
* ** buffer -- a integer value manipulated as individual bits.
|
|
106
|
-
* * In properly connected planar graph, interior face loops are counterclockwise. But that property (along with
|
|
107
|
-
* expected masking) is a result of extensive validation of inputs, and is not true in intermediate phases
|
|
108
|
-
* of graph manipulation.
|
|
121
|
+
* In properly connected planar graph, interior face loops are counterclockwise. But that property (along with
|
|
122
|
+
* expected masking) is a result of extensive validation of inputs, and is not true in intermediate phases of
|
|
123
|
+
* graph manipulation.
|
|
109
124
|
* @internal
|
|
110
125
|
*/
|
|
111
126
|
export declare class HalfEdge implements HalfEdgeUserData {
|
|
112
127
|
/** Vertex index in some parent object's numbering. */
|
|
113
128
|
i: number;
|
|
114
|
-
/**
|
|
129
|
+
/**
|
|
130
|
+
* Bitmask bits, used to set multiple flags on a node, indicating e.g., nodes on boundary edges, or in
|
|
131
|
+
* an exterior face, or nodes visited during graph computations.
|
|
132
|
+
* * See [[HalfEdgeMask]] for mask values.
|
|
133
|
+
*/
|
|
115
134
|
maskBits: number;
|
|
116
|
-
/** Vertex x coordinate */
|
|
135
|
+
/** Vertex x coordinate. */
|
|
117
136
|
x: number;
|
|
118
|
-
/** Vertex y coordinate */
|
|
137
|
+
/** Vertex y coordinate. */
|
|
119
138
|
y: number;
|
|
120
|
-
/** Vertex z coordinate */
|
|
139
|
+
/** Vertex z coordinate. */
|
|
121
140
|
z: number;
|
|
122
|
-
/**
|
|
141
|
+
/** Angle used for sort-around-vertex */
|
|
123
142
|
sortAngle?: number;
|
|
124
|
-
/**
|
|
143
|
+
/** Numeric value for application-specific tagging (e.g. sorting) */
|
|
125
144
|
sortData?: number;
|
|
126
|
-
/**
|
|
145
|
+
/**
|
|
146
|
+
* Application-specific data for the edge identifier.
|
|
127
147
|
* * edge split operations are expected to copy this to new sub-edges.
|
|
128
148
|
*/
|
|
129
149
|
edgeTag?: any;
|
|
130
|
-
/**
|
|
131
|
-
*
|
|
150
|
+
/**
|
|
151
|
+
* Application-specific data for the face loop.
|
|
152
|
+
* * Face split operations are expected to copy this to new nodes in the face.
|
|
132
153
|
*/
|
|
133
154
|
faceTag?: any;
|
|
134
155
|
private _id;
|
|
135
|
-
/**
|
|
136
|
-
get id():
|
|
156
|
+
/** Immutable ID assigned sequentially during construction --- useful for debugging. */
|
|
157
|
+
get id(): number;
|
|
137
158
|
private _facePredecessor;
|
|
138
159
|
private _faceSuccessor;
|
|
139
160
|
private _edgeMate;
|
|
140
|
-
/**
|
|
141
|
-
*/
|
|
161
|
+
/** Previous half edge "around the face" */
|
|
142
162
|
get facePredecessor(): HalfEdge;
|
|
143
|
-
/**
|
|
163
|
+
/** Next half edge "around the face" */
|
|
144
164
|
get faceSuccessor(): HalfEdge;
|
|
145
|
-
/** Half edge on the other side of this edge.
|
|
146
|
-
*/
|
|
165
|
+
/** Half edge on the other side of this edge. */
|
|
147
166
|
get edgeMate(): HalfEdge;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
167
|
+
private static _totalNodesCreated;
|
|
168
|
+
constructor(x?: number, y?: number, z?: number, i?: number);
|
|
169
|
+
/**
|
|
170
|
+
* Take numStep face steps and return y coordinate.
|
|
171
|
+
* * Positive steps are through faceSuccessor.
|
|
172
|
+
* * Negative steps are through facePredecessor.
|
|
151
173
|
*/
|
|
152
174
|
faceStepY(numStep: number): number;
|
|
153
175
|
/**
|
|
154
|
-
*
|
|
176
|
+
* Create 2 half edges.
|
|
155
177
|
* * The two edges are joined as edgeMate pair.
|
|
156
178
|
* * The two edges are a 2-half-edge face loop in both the faceSuccessor and facePredecessor directions.
|
|
157
|
-
* @returns
|
|
179
|
+
* @returns the reference to the first half edge created.
|
|
158
180
|
*/
|
|
159
181
|
static createHalfEdgePair(heArray: HalfEdge[] | undefined): HalfEdge;
|
|
160
182
|
/**
|
|
161
183
|
* * Create 2 half edges.
|
|
162
184
|
* * The two edges are joined as edgeMate pair.
|
|
163
185
|
* * The two edges are a 2-half-edge face loop in both the faceSuccessor and facePredecessor directions.
|
|
164
|
-
* * Properties x,y,z,i are inserted in each
|
|
165
|
-
* @returns
|
|
186
|
+
* * Properties x,y,z,i are inserted in each half edge.
|
|
187
|
+
* @returns the reference to the first half edge created.
|
|
166
188
|
*/
|
|
167
189
|
static createHalfEdgePairWithCoordinates(xA: number | undefined, yA: number | undefined, zA: number | undefined, iA: number | undefined, xB: number | undefined, yB: number | undefined, zB: number | undefined, iB: number | undefined, heArray: HalfEdge[] | undefined): HalfEdge;
|
|
168
190
|
/**
|
|
169
|
-
* *
|
|
191
|
+
* * Set heA <==> heB pointer relation through heA._faceSuccessor and heB._facePredecessor.
|
|
170
192
|
* * This changes heA._faceSuccessor and heB._facePredecessor, but not heA._facePredecessor and heB._faceSuccessor.
|
|
171
|
-
* *
|
|
193
|
+
* * This must always be done with another call to setFaceLinks(heB,heA) in order to re-establish the entire
|
|
194
|
+
* double-linked list.
|
|
172
195
|
*/
|
|
173
196
|
private static setFaceLinks;
|
|
174
|
-
/**
|
|
175
|
-
* * set heA <==> heB pointer relation edgeMate
|
|
176
|
-
*/
|
|
197
|
+
/** set heA <==> heB pointer relation edgeMate. */
|
|
177
198
|
private static setEdgeMates;
|
|
178
199
|
/**
|
|
179
|
-
*
|
|
180
|
-
* *
|
|
181
|
-
* *
|
|
182
|
-
* *
|
|
183
|
-
* *
|
|
184
|
-
*
|
|
185
|
-
* *
|
|
186
|
-
* @returns
|
|
200
|
+
* Create a new vertex within the edge beginning at `baseA`.
|
|
201
|
+
* * This creates two new nodes in their own vertex loop.
|
|
202
|
+
* * If the base is undefined, create a single-edge loop.
|
|
203
|
+
* * Existing nodes stay in their face and vertex loops and retain xyz and i values.
|
|
204
|
+
* * Unlike [[pinch]], this breaks the edgeMate pairing of the input edge:
|
|
205
|
+
* each node of the input edge gets a new node as its edge mate.
|
|
206
|
+
* * On each side of the edge, if edgeTag is present, it is copied to the new node on that side.
|
|
207
|
+
* @returns reference to the half edge created, the new face successor of `baseA`.
|
|
187
208
|
*/
|
|
188
209
|
static splitEdge(baseA: undefined | HalfEdge, xA: number | undefined, yA: number | undefined, zA: number | undefined, iA: number | undefined, heArray: HalfEdge[] | undefined): HalfEdge;
|
|
189
210
|
/**
|
|
190
|
-
*
|
|
191
|
-
* *
|
|
192
|
-
* *
|
|
193
|
-
* *
|
|
194
|
-
*
|
|
195
|
-
* *
|
|
196
|
-
* *
|
|
197
|
-
*
|
|
198
|
-
* @returns Returns the reference to the half edge created.
|
|
211
|
+
* Create a new sliver face "inside" an existing edge.
|
|
212
|
+
* * This creates two nodes that are each face predecessor and successor to the other.
|
|
213
|
+
* * Existing nodes stay in their face and vertex loops and retain xyz and i values.
|
|
214
|
+
* * Unlike [[pinch]], this breaks the edgeMate pairing of the input edge:
|
|
215
|
+
* each node of the input edge gets a new node as its edge mate.
|
|
216
|
+
* * New nodes get the xyz and i values shared by the nodes in the vertex loops into which they are placed.
|
|
217
|
+
* * New nodes' faceTag and edgeTag are `undefined`.
|
|
218
|
+
* @returns reference to the half edge created in the vertex loop of baseA.
|
|
199
219
|
*/
|
|
200
220
|
static splitEdgeCreateSliverFace(baseA: HalfEdge, heArray: HalfEdge[] | undefined): HalfEdge;
|
|
221
|
+
/** Edge property masks. */
|
|
201
222
|
private static _edgePropertyMasks;
|
|
202
223
|
/**
|
|
203
|
-
* Copy "edge based" content of fromNode to toNode
|
|
224
|
+
* Copy "edge based" content of `fromNode` to `toNode`:
|
|
204
225
|
* * edgeTag
|
|
205
|
-
* * masks
|
|
206
|
-
* @param fromNode
|
|
207
|
-
* @param toNode
|
|
226
|
+
* * masks EXTERIOR, BOUNDARY_EDGE, NULL_FACE, PRIMARY_EDGE
|
|
208
227
|
*/
|
|
209
228
|
static transferEdgeProperties(fromNode: HalfEdge, toNode: HalfEdge): void;
|
|
210
|
-
|
|
211
|
-
constructor(x?: number, y?: number, z?: number, i?: number);
|
|
212
|
-
/**
|
|
213
|
-
* Return the next outbound half edge around this vertex in the CCW direction
|
|
214
|
-
*/
|
|
229
|
+
/** Return the next half edge around this vertex in the CCW direction. */
|
|
215
230
|
get vertexSuccessor(): HalfEdge;
|
|
216
|
-
/**
|
|
217
|
-
* Return the next outbound half edge around this vertex in the CW direction
|
|
218
|
-
*/
|
|
231
|
+
/** Return the next half edge around this vertex in the CW direction. */
|
|
219
232
|
get vertexPredecessor(): HalfEdge;
|
|
220
233
|
/**
|
|
221
|
-
* Set mask bits on this HalfEdge
|
|
222
|
-
* @param mask mask to apply
|
|
234
|
+
* Set mask bits on this HalfEdge.
|
|
235
|
+
* @param mask mask bits to apply
|
|
223
236
|
*/
|
|
224
237
|
setMask(mask: HalfEdgeMask): void;
|
|
225
238
|
/**
|
|
226
|
-
* Get mask bits from this HalfEdge
|
|
227
|
-
* @param mask mask to query
|
|
239
|
+
* Get mask bits from this HalfEdge.
|
|
240
|
+
* @param mask mask bits to query
|
|
228
241
|
*/
|
|
229
242
|
getMask(mask: HalfEdgeMask): number;
|
|
230
243
|
/**
|
|
231
|
-
* Clear mask bits from this HalfEdge
|
|
232
|
-
* @param mask mask to clear
|
|
244
|
+
* Clear mask bits from this HalfEdge.
|
|
245
|
+
* @param mask mask bits to clear
|
|
233
246
|
*/
|
|
234
247
|
clearMask(mask: HalfEdgeMask): void;
|
|
235
248
|
/**
|
|
236
249
|
* Set a mask at all nodes around a vertex.
|
|
237
|
-
* @param mask mask to apply to the half edges around this HalfEdge's vertex loop
|
|
250
|
+
* @param mask mask to apply to the half edges around this HalfEdge's vertex loop.
|
|
238
251
|
*/
|
|
239
252
|
setMaskAroundVertex(mask: HalfEdgeMask): void;
|
|
240
|
-
/**
|
|
241
|
-
* Set x,y,z at all nodes around a vertex.
|
|
242
|
-
* @param mask mask to apply to the half edges around this HalfEdge's vertex loop
|
|
243
|
-
*/
|
|
253
|
+
/** Set x,y,z at all nodes around a vertex. */
|
|
244
254
|
setXYZAroundVertex(x: number, y: number, z: number): void;
|
|
245
255
|
/**
|
|
246
256
|
* Apply a mask to all edges around a face.
|
|
247
|
-
* @param mask mask to apply to the half edges around this HalfEdge's face loop
|
|
257
|
+
* @param mask mask to apply to the half edges around this HalfEdge's face loop.
|
|
248
258
|
*/
|
|
249
259
|
setMaskAroundFace(mask: HalfEdgeMask): void;
|
|
250
260
|
/**
|
|
251
261
|
* Apply a mask to both sides of an edge.
|
|
252
|
-
* @param mask mask to apply to this edge and its
|
|
262
|
+
* @param mask mask to apply to this edge and its edgeMate.
|
|
253
263
|
*/
|
|
254
264
|
setMaskAroundEdge(mask: HalfEdgeMask): void;
|
|
255
265
|
/**
|
|
256
266
|
* Clear a mask on both sides of an edge.
|
|
257
|
-
* @param mask mask to clear on this edge and its
|
|
267
|
+
* @param mask mask to clear on this edge and its edgeMate.
|
|
258
268
|
*/
|
|
259
269
|
clearMaskAroundEdge(mask: HalfEdgeMask): void;
|
|
260
270
|
/** Returns the number of edges around this face. */
|
|
261
271
|
countEdgesAroundFace(): number;
|
|
262
|
-
/** Return true if other is in the vertex loop around this. */
|
|
272
|
+
/** Return true if `other` node is in the vertex loop around `this` node. */
|
|
263
273
|
findAroundVertex(other: HalfEdge): boolean;
|
|
264
|
-
/** Return true if other is in the face loop around this. */
|
|
274
|
+
/** Return true if `other` node is in the face loop around `this` node. */
|
|
265
275
|
findAroundFace(other: HalfEdge): boolean;
|
|
266
276
|
/**
|
|
267
|
-
*
|
|
277
|
+
* Returns whether the mask is set or unset on all nodes of the face loop.
|
|
278
|
+
* @param mask the mask to check.
|
|
279
|
+
* @param value true for mask set and false for mask unset.
|
|
268
280
|
*/
|
|
269
281
|
isMaskedAroundFace(mask: HalfEdgeMask, value?: boolean): boolean;
|
|
270
282
|
/**
|
|
271
|
-
* Apply a
|
|
272
|
-
*
|
|
273
|
-
* @param edgeTag
|
|
274
|
-
* @param
|
|
283
|
+
* Apply a mask and edgeTag to all edges around a face. Optionally apply it to all edge mates.
|
|
284
|
+
* @param mask mask to apply.
|
|
285
|
+
* @param tag edgeTag to apply
|
|
286
|
+
* @param applyToMate If true, also apply the tag to the edge mates around the face.
|
|
275
287
|
*/
|
|
276
288
|
setMaskAndEdgeTagAroundFace(mask: HalfEdgeMask, tag: any, applyToMate?: boolean): void;
|
|
277
289
|
/** Returns the number of edges around vertex. */
|
|
278
290
|
countEdgesAroundVertex(): number;
|
|
279
|
-
/**
|
|
291
|
+
/**
|
|
292
|
+
* Returns the number of nodes that match (or do not match) the given mask value around this face loop.
|
|
293
|
+
* @param mask the mask to check.
|
|
294
|
+
* @param value true for mask match and false for mask not match.
|
|
295
|
+
*/
|
|
280
296
|
countMaskAroundFace(mask: HalfEdgeMask, value?: boolean): number;
|
|
281
|
-
/**
|
|
297
|
+
/**
|
|
298
|
+
* Returns the number of nodes that match (or do not match) the given mask value around this vertex loop.
|
|
299
|
+
* @param mask the mask to check.
|
|
300
|
+
* @param value true for mask match and false for mask not match.
|
|
301
|
+
*/
|
|
282
302
|
countMaskAroundVertex(mask: HalfEdgeMask, value?: boolean): number;
|
|
283
|
-
/**
|
|
303
|
+
/**
|
|
304
|
+
* Returns the first node that matches (or does not match) the given mask value around this vertex loop, starting
|
|
305
|
+
* with the instance node and proceeding via vertex successors.
|
|
306
|
+
* @param mask the mask to check.
|
|
307
|
+
* @param value true for mask match and false for mask not match.
|
|
308
|
+
*/
|
|
284
309
|
findMaskAroundVertex(mask: HalfEdgeMask, value?: boolean): HalfEdge | undefined;
|
|
285
|
-
/**
|
|
310
|
+
/**
|
|
311
|
+
* Returns the first node that matches (or does not match) the given mask value around this face loop, starting
|
|
312
|
+
* with the instance node and proceeding via face successors.
|
|
313
|
+
* @param mask the mask to check.
|
|
314
|
+
* @param value true for mask match and false for mask not match.
|
|
315
|
+
*/
|
|
286
316
|
findMaskAroundFace(mask: HalfEdgeMask, value?: boolean): HalfEdge | undefined;
|
|
287
|
-
/**
|
|
317
|
+
/**
|
|
318
|
+
* Returns the first node that matches (or does not match) the given mask value around this edge, starting
|
|
319
|
+
* with the instance node and then checking its edge mate.
|
|
320
|
+
* @param mask the mask to check.
|
|
321
|
+
* @param value true for mask match and false for mask not match.
|
|
322
|
+
*/
|
|
288
323
|
findMaskAroundEdge(mask: HalfEdgeMask, value?: boolean): HalfEdge | undefined;
|
|
289
|
-
/**
|
|
290
|
-
*
|
|
324
|
+
/**
|
|
325
|
+
* Set a mask and return prior value.
|
|
326
|
+
* @param mask mask to apply.
|
|
291
327
|
*/
|
|
292
328
|
testAndSetMask(mask: HalfEdgeMask): number;
|
|
293
329
|
/**
|
|
294
|
-
* Set
|
|
295
|
-
* @param node node containing xyz
|
|
330
|
+
* Set `this.x`, `this.y`, `this.z` from `node.x`, `node.y`, `node.z`.
|
|
331
|
+
* @param node node containing xyz.
|
|
296
332
|
*/
|
|
297
333
|
setXYZFrom(node: HalfEdge): void;
|
|
298
334
|
/**
|
|
299
|
-
* Set
|
|
335
|
+
* Set `this.x`, `this.y`, `this.z` from `xyz.x`, `xyz.y`, `xyz.z`.
|
|
300
336
|
* @param node source with x,y,z properties
|
|
301
337
|
*/
|
|
302
338
|
setXYZ(xyz: XYAndZ): void;
|
|
303
339
|
/**
|
|
304
|
-
* Test if mask bits are set in the node's bitMask.
|
|
305
|
-
* @return
|
|
340
|
+
* Test if any of the `mask` bits are set in the node's bitMask.
|
|
341
|
+
* @return true (as a simple boolean, not a mask) if any bits of the `mask` match bits of the node's bitMask.
|
|
306
342
|
*/
|
|
307
343
|
isMaskSet(mask: HalfEdgeMask): boolean;
|
|
308
|
-
/**
|
|
309
|
-
*
|
|
310
|
-
*
|
|
344
|
+
/**
|
|
345
|
+
* Static method to test if any of the `mask` bits are set in the `node`'s bitMask.
|
|
346
|
+
* * This is used as filter in searches.
|
|
347
|
+
* @returns `node.isMaskSet(mask)`
|
|
311
348
|
*/
|
|
312
349
|
static filterIsMaskOn(node: HalfEdge, mask: HalfEdgeMask): boolean;
|
|
313
|
-
/**
|
|
314
|
-
*
|
|
315
|
-
*
|
|
350
|
+
/**
|
|
351
|
+
* Static method to test if any of the `mask` bits are set in the `node`'s bitMask.
|
|
352
|
+
* * This is used as filter in searches.
|
|
353
|
+
* @returns `!node.isMaskSet(mask)`
|
|
316
354
|
*/
|
|
317
355
|
static filterIsMaskOff(node: HalfEdge, mask: HalfEdgeMask): boolean;
|
|
318
356
|
/**
|
|
319
357
|
* Create an edge with initial id,x,y at each end.
|
|
320
|
-
* @param id0 id for first node
|
|
321
|
-
* @param x0
|
|
322
|
-
* @param y0
|
|
323
|
-
* @param id1 id for second node
|
|
324
|
-
* @param x1 x coordinate for second node
|
|
325
|
-
* @param y1 y coordinate for second node
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
*
|
|
331
|
-
* *
|
|
332
|
-
*
|
|
333
|
-
* *
|
|
334
|
-
* *
|
|
358
|
+
* @param id0 id for first node.
|
|
359
|
+
* @param x0 x coordinate for first node.
|
|
360
|
+
* @param y0 y coordinate for first node.
|
|
361
|
+
* @param id1 id for second node.
|
|
362
|
+
* @param x1 x coordinate for second node.
|
|
363
|
+
* @param y1 y coordinate for second node.
|
|
364
|
+
* @returns the reference to the new node at (x0,y0).
|
|
365
|
+
*/
|
|
366
|
+
static createEdgeXYXY(id0: number, x0: number, y0: number, id1: number, x1: number, y1: number): HalfEdge;
|
|
367
|
+
/**
|
|
368
|
+
*"Pinch" is the universal operator for manipulating a node's next and previous pointers.
|
|
369
|
+
* * It is its own inverse: applying it twice on the same inputs (i.e., `pinch(a,b); pinch(a,b);`) gets back to
|
|
370
|
+
* where you started.
|
|
371
|
+
* * If the inputs are in different face loops, the loops join to one face loop after the pinch.
|
|
372
|
+
* * If the inputs are in the same face loop, the loop splits into two face loops after the pinch.
|
|
335
373
|
*/
|
|
336
374
|
static pinch(nodeA: HalfEdge, nodeB: HalfEdge): void;
|
|
337
375
|
/**
|
|
338
376
|
* Pinch this half edge out of its base vertex loop.
|
|
339
|
-
* @return the surviving HalfEdge in the vertex loop
|
|
377
|
+
* @return the surviving HalfEdge in the vertex loop or `undefined` if the instance HalfEdge is already dangling.
|
|
340
378
|
*/
|
|
341
379
|
yankFromVertexLoop(): HalfEdge | undefined;
|
|
342
|
-
/**
|
|
343
|
-
*
|
|
380
|
+
/**
|
|
381
|
+
* Turn all pointers to `undefined` so garbage collector can reuse the object.
|
|
382
|
+
* * This is to be called only by a Graph object that is being decommissioned.
|
|
344
383
|
*/
|
|
345
384
|
decommission(): void;
|
|
346
385
|
/** Return the node. This identity function is useful as the NodeFunction in collector methods. */
|
|
347
386
|
static nodeToSelf(node: HalfEdge): any;
|
|
348
|
-
/** Return the id of a node.
|
|
349
|
-
static nodeToId(node: HalfEdge):
|
|
350
|
-
/** Return the id of a node.Useful for collector methods. */
|
|
351
|
-
static nodeToIdString(node: HalfEdge):
|
|
352
|
-
/** Return the [id, [x,y]] of a node.
|
|
387
|
+
/** Return the id of a node. Useful for collector methods. */
|
|
388
|
+
static nodeToId(node: HalfEdge): number;
|
|
389
|
+
/** Return the id of a node as string. Useful for collector methods. */
|
|
390
|
+
static nodeToIdString(node: HalfEdge): string;
|
|
391
|
+
/** Return the [id, mask, [x,y]] of a node. Useful for collector methods. */
|
|
353
392
|
static nodeToIdMaskXY(node: HalfEdge): {
|
|
354
|
-
id:
|
|
355
|
-
mask:
|
|
393
|
+
id: number;
|
|
394
|
+
mask: string;
|
|
356
395
|
xy: number[];
|
|
357
396
|
};
|
|
358
|
-
/** Return the [id, [x,y]] of a node.
|
|
397
|
+
/** Return the [id, mask, [x,y]] of a node as string. Useful for collector methods. */
|
|
359
398
|
static nodeToIdXYString(node: HalfEdge): string;
|
|
360
|
-
/** Return the [id, [x,y
|
|
399
|
+
/** Return the [id, [x,y,z]] of a node as string. Useful for collector methods. */
|
|
361
400
|
static nodeToIdXYZString(node: HalfEdge): string;
|
|
362
|
-
/**
|
|
401
|
+
/**
|
|
402
|
+
* Create a string representation of the mask.
|
|
363
403
|
* * Null mask is empty string.
|
|
364
|
-
* * Appended characters B,P,X for
|
|
404
|
+
* * Appended characters B,P,X,N are for BOUNDARY_EDGE, PRIMARY_EDGE, EXTERIOR, and NULL_FACE mask bits.
|
|
365
405
|
*/
|
|
366
406
|
static nodeToMaskString(node: HalfEdge): string;
|
|
367
|
-
/** Return [x,y] with coordinates of node */
|
|
407
|
+
/** Return [x,y] with coordinates of node. */
|
|
368
408
|
static nodeToXY(node: HalfEdge): number[];
|
|
369
|
-
/** Return Vector2d to face successor
|
|
409
|
+
/** Return Vector2d from `this` to face successor (with only xy coordinates). */
|
|
370
410
|
vectorToFaceSuccessorXY(result?: Vector2d): Vector2d;
|
|
371
|
-
/** Return Vector3d to face successor */
|
|
411
|
+
/** Return Vector3d from `this` to face successor. */
|
|
372
412
|
vectorToFaceSuccessor(result?: Vector3d): Vector3d;
|
|
373
|
-
/** Return Vector3d to face successor */
|
|
413
|
+
/** Return Vector3d from `this` to face successor. */
|
|
374
414
|
vectorToFacePredecessor(result?: Vector3d): Vector3d;
|
|
375
|
-
/**
|
|
415
|
+
/** Test if `spaceNode` is in the sector at `sectorNode`. */
|
|
376
416
|
static isNodeVisibleInSector(spaceNode: HalfEdge, sectorNode: HalfEdge): boolean;
|
|
377
|
-
/** Returns
|
|
417
|
+
/** Returns 2D cross product of vectors from `base` to `targetA` and from `base` to `targetB`. */
|
|
378
418
|
static crossProductXYToTargets(base: HalfEdge, targetA: HalfEdge, targetB: HalfEdge): number;
|
|
379
|
-
/** Returns
|
|
419
|
+
/** Returns 2D dot product of vectors from `baseA` to `targetA` and from `baseB` to `targetB`. */
|
|
380
420
|
static dotProductNodeToNodeVectorsXY(baseA: HalfEdge, targetA: HalfEdge, baseB: HalfEdge, targetB: HalfEdge): number;
|
|
381
|
-
/** Return cross product
|
|
382
|
-
*/
|
|
421
|
+
/** Return 2D cross product of vectors from `nodeA` to `nodeB` and from `nodeB` to `nodeC`. */
|
|
383
422
|
static crossProductXYAlongChain(nodeA: HalfEdge, nodeB: HalfEdge, nodeC: HalfEdge): number;
|
|
384
423
|
/**
|
|
385
424
|
* Compute whether the sector defined by the chain of nodes is convex.
|
|
425
|
+
* * This function is determining if, in the traversal of the HalfEdges in a face loop, a corner makes a left turn
|
|
426
|
+
* (convex) or a right turn (not-convex). Note that if we have a convex face, then to traverse it in ccw orientation,
|
|
427
|
+
* we always do left turns. However, if the face is not convex, we make both left and right turns.
|
|
386
428
|
* * This computation ignores z-coordinates and connectivity, so the nodes are not required to be in the same face loop.
|
|
387
|
-
* @param nodeA the first node in the chain, nominally the face predecessor of nodeB
|
|
388
|
-
* @param nodeB the second node in the chain; the node at the sector vertex
|
|
389
|
-
* @param nodeC the third node in the chain, nominally the face successor of nodeB
|
|
390
|
-
* @param signedAreaTol optional signed area tolerance to use in test for parallel vectors.
|
|
391
|
-
*
|
|
392
|
-
* @returns true iff the sector is convex
|
|
429
|
+
* @param nodeA the first node in the chain, nominally the face predecessor of nodeB.
|
|
430
|
+
* @param nodeB the second node in the chain; the node at the sector vertex.
|
|
431
|
+
* @param nodeC the third node in the chain, nominally the face successor of nodeB.
|
|
432
|
+
* @param signedAreaTol optional signed area tolerance to use in test for parallel vectors. Typically this is a
|
|
433
|
+
* fraction of the sector's face's signed area. We can't compute area here, so if undefined, zero tolerance is used.
|
|
434
|
+
* @returns true iff the sector is convex. A degenerate sector, where the incident edges overlap, returns false.
|
|
393
435
|
*/
|
|
394
436
|
static isSectorConvex(nodeA: HalfEdge, nodeB: HalfEdge, nodeC: HalfEdge, signedAreaTol?: number): boolean;
|
|
395
437
|
/**
|
|
396
438
|
* Compute whether the sector at this node is convex.
|
|
439
|
+
* * This function is determining if, in the traversal of the HalfEdges in a face loop, a corner makes a left turn
|
|
440
|
+
* (convex) or a right turn (not-convex). Note that if we have a convex face, then to traverse it in ccw orientation,
|
|
441
|
+
* we always do left turns. However, if the face is not convex, we make both left and right turns.
|
|
397
442
|
* * This computation ignores z-coordinates.
|
|
398
|
-
* @param signedAreaTol optional signed area tolerance to use in test for parallel vectors.
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
* @returns true iff the sector is convex and its two edges are not antiparallel.
|
|
443
|
+
* @param signedAreaTol optional signed area tolerance to use in test for parallel vectors. If undefined, a fraction
|
|
444
|
+
* (`Geometry.smallMetricDistanceSquared`) of the computed signed area is used. Pass 0 to skip toleranced computation.
|
|
445
|
+
* @returns true iff the sector is convex. A degenerate sector, where the incident edges overlap, returns false.
|
|
402
446
|
*/
|
|
403
447
|
isSectorConvex(signedAreaTol?: number): boolean;
|
|
404
448
|
/**
|
|
405
449
|
* Compute whether this face is convex.
|
|
450
|
+
* * Note that if we have a convex face, then to traverse it in ccw orientation, we always do left turns.
|
|
451
|
+
* However, if the face is not convex, we make both left and right turns.
|
|
406
452
|
* * This computation ignores z-coordinates.
|
|
407
|
-
* @param tolerance optional relative tolerance to use in test for parallel vectors.
|
|
408
|
-
*
|
|
409
|
-
* Pass zero to skip toleranced computation.
|
|
453
|
+
* @param tolerance optional relative tolerance to use in test for parallel vectors. Default value is
|
|
454
|
+
* `Geometry.smallMetricDistanceSquared`. Pass 0 to skip toleranced computation.
|
|
410
455
|
* @returns true iff this face is convex.
|
|
411
456
|
*/
|
|
412
457
|
isFaceConvex(tolerance?: number): boolean;
|
|
413
|
-
/**
|
|
414
|
-
* Isolate the edge from the graph by yanking each end from its vertex loop.
|
|
415
|
-
*/
|
|
458
|
+
/** Isolate the edge from the graph by yanking each end from its vertex loop. */
|
|
416
459
|
isolateEdge(): void;
|
|
417
|
-
/**
|
|
418
|
-
* @return whether this edge is isolated from the rest of the graph.
|
|
419
|
-
*/
|
|
460
|
+
/** Specify whether this edge is isolated from the rest of the graph. */
|
|
420
461
|
get isIsolatedEdge(): boolean;
|
|
421
|
-
/** Return true if `this` is lexically below `other
|
|
462
|
+
/** Return true if `this` is lexically below `other`. We compare y first, then x, and ignore z. */
|
|
422
463
|
belowYX(other: HalfEdge): boolean;
|
|
423
|
-
/** Returns
|
|
464
|
+
/** Returns `true` if the node does NOT have `Mask.EXTERIOR_MASK` set. */
|
|
424
465
|
static testNodeMaskNotExterior(node: HalfEdge): boolean;
|
|
425
|
-
/** Returns
|
|
466
|
+
/** Returns `true` if the edge mate has `Mask.EXTERIOR_MASK` set. */
|
|
426
467
|
static testMateMaskExterior(node: HalfEdge): boolean;
|
|
427
|
-
/**
|
|
428
|
-
*
|
|
429
|
-
|
|
468
|
+
/**
|
|
469
|
+
* Returns radians between this edge and its face predecessor edge, using all three coordinates x,y,z and
|
|
470
|
+
* given normal to resolve sweep direction.
|
|
471
|
+
* * The returned angle is non-negative: 0 <= radians < 2*PI.
|
|
472
|
+
*/
|
|
430
473
|
static sectorSweepRadiansXYZ(node: HalfEdge, normal: Vector3d): number;
|
|
431
|
-
/** Returns
|
|
474
|
+
/** Returns true if the face has positive area in xy parts. */
|
|
432
475
|
static testFacePositiveAreaXY(node: HalfEdge): boolean;
|
|
433
|
-
/** Return true if x and y coordinates of this and other are exactly equal
|
|
476
|
+
/** Return true if x and y coordinates of `this` and `other` are exactly equal .*/
|
|
434
477
|
isEqualXY(other: XAndY | HalfEdge): boolean;
|
|
435
|
-
/** Return distance between xy coordinates of this and other node */
|
|
478
|
+
/** Return distance between xy coordinates of `this` and `other` node. */
|
|
436
479
|
distanceXY(other: HalfEdge): number;
|
|
437
|
-
/** Return distance between xyz coordinates of this and other node */
|
|
480
|
+
/** Return distance between xyz coordinates of `this` and `other` node. */
|
|
438
481
|
distanceXYZ(other: HalfEdge): number;
|
|
439
482
|
/**
|
|
440
|
-
*
|
|
441
|
-
*
|
|
442
|
-
*
|
|
443
|
-
* @returns Return the array of function values.
|
|
483
|
+
* Evaluate `f(node)` at each node around `this` node's face loop. Collect the function values.
|
|
484
|
+
* @param f optional node function. If `undefined`, collect the nodes themselves.
|
|
485
|
+
* @returns the array of function values.
|
|
444
486
|
*/
|
|
445
487
|
collectAroundFace(f?: NodeFunction): any[];
|
|
446
488
|
/**
|
|
447
|
-
*
|
|
448
|
-
*
|
|
449
|
-
* @param mask target mask
|
|
450
|
-
* @param value target value for mask on half edges.
|
|
451
|
-
* @param
|
|
489
|
+
* Search around `this` node's vertex loop for nodes with the specified mask value.
|
|
490
|
+
* * Returned nodes satisfy `node.isMaskSet(mask) === value`.
|
|
491
|
+
* @param mask target mask.
|
|
492
|
+
* @param value target boolean value for mask on half edges.
|
|
493
|
+
* @param result optional array to be cleared and receive masked nodes.
|
|
452
494
|
*/
|
|
453
495
|
collectMaskedEdgesAroundVertex(mask: HalfEdgeMask, value?: boolean, result?: HalfEdge[]): HalfEdge[];
|
|
454
496
|
/**
|
|
455
|
-
*
|
|
456
|
-
*
|
|
457
|
-
*
|
|
458
|
-
* @returns Return the array of function values.
|
|
497
|
+
* Evaluate `f(node)` at each node around `this` node's vertex loop. Collect the function values.
|
|
498
|
+
* @param f optional node function. If `undefined`, collect the nodes themselves.
|
|
499
|
+
* @returns the array of function values.
|
|
459
500
|
*/
|
|
460
501
|
collectAroundVertex(f?: NodeFunction): any[];
|
|
461
502
|
/**
|
|
462
|
-
*
|
|
463
|
-
*
|
|
464
|
-
*
|
|
465
|
-
* @returns Return the sum
|
|
503
|
+
* Evaluate `f(node)` at each node around `this` node's face loop. Sum the function values.
|
|
504
|
+
* @param f node to number function.
|
|
505
|
+
* @returns the sum of function values.
|
|
466
506
|
*/
|
|
467
507
|
sumAroundFace(f: NodeToNumberFunction): number;
|
|
468
508
|
/**
|
|
469
|
-
*
|
|
470
|
-
*
|
|
471
|
-
*
|
|
472
|
-
* @returns Return the sum
|
|
509
|
+
* Evaluate `f(node)` at each node around `this` node's vertex loop. Sum the function values.
|
|
510
|
+
* @param f node to number function.
|
|
511
|
+
* @returns the sum of function values.
|
|
473
512
|
*/
|
|
474
513
|
sumAroundVertex(f: NodeToNumberFunction): number;
|
|
475
|
-
/**
|
|
514
|
+
/** Clear the given mask bits for all nodes in `this` node's face loop. */
|
|
476
515
|
clearMaskAroundFace(mask: HalfEdgeMask): void;
|
|
477
|
-
/**
|
|
516
|
+
/** Clear out the given mask bits for all nodes in `this` node's vertex loop. */
|
|
478
517
|
clearMaskAroundVertex(mask: HalfEdgeMask): void;
|
|
479
518
|
/**
|
|
480
|
-
* Compute the signed
|
|
519
|
+
* Compute the signed xy area of `this` node's face.
|
|
481
520
|
* * A positive area is counterclockwise.
|
|
482
521
|
* * A negative area is clockwise.
|
|
483
|
-
* @returns signed area of this node's face
|
|
522
|
+
* @returns signed area of `this` node's face.
|
|
484
523
|
*/
|
|
485
524
|
signedFaceArea(): number;
|
|
486
525
|
/**
|
|
487
|
-
*
|
|
526
|
+
* Interpolate xy coordinates between `this` node and its face successor.
|
|
488
527
|
* @param fraction fractional position along this edge.
|
|
489
|
-
* @param result
|
|
528
|
+
* @param result optional point to populate and return.
|
|
490
529
|
*/
|
|
491
530
|
fractionToPoint2d(fraction: number, result?: Point2d): Point2d;
|
|
492
531
|
/**
|
|
493
|
-
*
|
|
532
|
+
* Interpolate xyz coordinates between `this` node and its face successor.
|
|
494
533
|
* @param fraction fractional position along this edge.
|
|
495
|
-
* @param result
|
|
534
|
+
* @param result optional point to populate and return.
|
|
496
535
|
*/
|
|
497
536
|
fractionToPoint3d(fraction: number, result?: Point3d): Point3d;
|
|
498
537
|
/**
|
|
499
|
-
*
|
|
500
|
-
*
|
|
501
|
-
* @param
|
|
502
|
-
* @param
|
|
538
|
+
* Interpolate xy coordinates at `fractionAlong` between this node and its face successor. Then shift perpendicular
|
|
539
|
+
* to the left of this edge by `fractionPerpendicular`.
|
|
540
|
+
* @param fractionAlong fractional position along this edge.
|
|
541
|
+
* @param fractionPerpendicular fractional position along the left perpendicular with the same length as this edge.
|
|
542
|
+
* @param result optional xy coordinates.
|
|
503
543
|
*/
|
|
504
544
|
fractionAlongAndPerpendicularToPoint2d(fractionAlong: number, fractionPerpendicular: number, result?: Point2d): Point2d;
|
|
505
|
-
/**
|
|
506
|
-
* return the 3d coordinates at this half edge base
|
|
507
|
-
*/
|
|
545
|
+
/** Return the 3d coordinates at this half edge. */
|
|
508
546
|
getPoint3d(result?: Point3d): Point3d;
|
|
509
|
-
/**
|
|
510
|
-
* return the 2d coordinates at this half edge base
|
|
511
|
-
*/
|
|
547
|
+
/** Return the 2d coordinates at this half edge. */
|
|
512
548
|
getPoint2d(result?: Point2d): Point2d;
|
|
513
|
-
/**
|
|
514
|
-
* return a 3d vector from start to end of this half edge.
|
|
515
|
-
*/
|
|
549
|
+
/** Return a 3d vector from start to end of this half edge. */
|
|
516
550
|
getVector3dAlongEdge(result?: Vector3d): Vector3d;
|
|
517
|
-
/**
|
|
518
|
-
* return a 2d vector from start to end of this half edge
|
|
519
|
-
*/
|
|
551
|
+
/** Return a 2d vector from start to end of this half edge. */
|
|
520
552
|
getVector2dAlongEdge(result?: Vector2d): Vector2d;
|
|
521
553
|
/**
|
|
522
|
-
* Return the interpolated x coordinate between this node and its face successor.
|
|
554
|
+
* Return the interpolated x coordinate between `this` node and its face successor.
|
|
523
555
|
* @param fraction fractional position along this edge.
|
|
524
556
|
*/
|
|
525
557
|
fractionToX(fraction: number): number;
|
|
526
558
|
/**
|
|
527
|
-
* Return the interpolated y coordinate between this node and its face successor.
|
|
559
|
+
* Return the interpolated y coordinate between `this` node and its face successor.
|
|
528
560
|
* @param fraction fractional position along this edge.
|
|
529
561
|
*/
|
|
530
562
|
fractionToY(fraction: number): number;
|
|
531
563
|
/**
|
|
532
|
-
* Return the interpolated z coordinate between this node and its face successor.
|
|
564
|
+
* Return the interpolated z coordinate between `this` node and its face successor.
|
|
533
565
|
* @param fraction fractional position along this edge.
|
|
534
566
|
*/
|
|
535
567
|
fractionToZ(fraction: number): number;
|
|
536
568
|
/**
|
|
537
|
-
*
|
|
569
|
+
* Compute fractional coordinates of the intersection of edges from given base nodes.
|
|
538
570
|
* * If parallel or colinear, return undefined.
|
|
539
571
|
* * If (possibly extended) lines intersect, return the fractions of intersection as x,y in the result.
|
|
540
|
-
* @param nodeA0
|
|
541
|
-
* @param nodeB0
|
|
542
|
-
* @param result optional preallocated result
|
|
572
|
+
* @param nodeA0 base node of edge A.
|
|
573
|
+
* @param nodeB0 base node of edge B.
|
|
574
|
+
* @param result optional preallocated result.
|
|
543
575
|
*/
|
|
544
576
|
static transverseIntersectionFractions(nodeA0: HalfEdge, nodeB0: HalfEdge, result?: Vector2d): Vector2d | undefined;
|
|
545
577
|
/**
|
|
546
|
-
*
|
|
578
|
+
* Compute fractional position (possibly outside 0..1) of the intersection of a horizontal line with an edge.
|
|
547
579
|
* * If the edge is horizontal with (approximate) identical y, return the node.
|
|
548
|
-
* * If the edge is horizontal with different y, return undefined
|
|
549
|
-
*
|
|
550
|
-
* @param
|
|
580
|
+
* * If the edge is horizontal with different y, return `undefined`.
|
|
581
|
+
* @param node0 base node of edge.
|
|
582
|
+
* @param y y coordinate of the horizontal line.
|
|
551
583
|
*/
|
|
552
584
|
static horizontalScanFraction(node0: HalfEdge, y: number): number | undefined | HalfEdge;
|
|
553
585
|
/**
|
|
554
|
-
*
|
|
555
|
-
* * If
|
|
556
|
-
* * If the edge is
|
|
557
|
-
* @param node0
|
|
586
|
+
* Compute fractional position (inside 0..1) of the intersection of a horizontal line with an edge.
|
|
587
|
+
* * If fractional position is outside 0..1, return `undefined`.
|
|
588
|
+
* * If the edge is horizontal return `undefined` (no test for horizontal at y).
|
|
589
|
+
* @param node0 base node of edge.
|
|
590
|
+
* @param y y coordinate of the horizontal line.
|
|
558
591
|
*/
|
|
559
592
|
static horizontalScanFraction01(node0: HalfEdge, y: number): number | undefined;
|
|
560
593
|
/**
|
|
561
|
-
* Copy various data from source to this
|
|
562
|
-
* @param source
|
|
563
|
-
* @param
|
|
564
|
-
* @param copyVertexData true to copy data belonging to the vertex
|
|
565
|
-
* @param
|
|
566
|
-
* @param copyFaceData true to copy faceTag
|
|
594
|
+
* Copy various data from source to `this`.
|
|
595
|
+
* @param source source half edge.
|
|
596
|
+
* @param copyXYZ true to copy xyz coordinates.
|
|
597
|
+
* @param copyVertexData true to copy data belonging to the vertex (i.e. the `i` member).
|
|
598
|
+
* @param copyEdgeData true to copy data belonging to the edge (i.e. edge masks, `edgeTag`).
|
|
599
|
+
* @param copyFaceData true to copy `faceTag`.
|
|
567
600
|
*/
|
|
568
601
|
copyDataFrom(source: HalfEdge, copyXYZ: boolean, copyVertexData: boolean, copyEdgeData: boolean, copyFaceData: boolean): void;
|
|
569
602
|
}
|
|
570
603
|
/**
|
|
571
604
|
* A HalfEdgeGraph has:
|
|
572
|
-
* * An array of (pointers to
|
|
573
|
-
* * A pool of masks for grab/drop
|
|
605
|
+
* * An array of (pointers to) HalfEdge objects.
|
|
606
|
+
* * A pool of masks for grab/drop used by algorithms.
|
|
574
607
|
* @internal
|
|
575
608
|
*/
|
|
576
609
|
export declare class HalfEdgeGraph {
|
|
@@ -579,159 +612,159 @@ export declare class HalfEdgeGraph {
|
|
|
579
612
|
private _maskManager;
|
|
580
613
|
private _numNodesCreated;
|
|
581
614
|
constructor();
|
|
582
|
-
/**
|
|
615
|
+
/**
|
|
616
|
+
* Ask for a mask (from the graph's free pool) for caller's use.
|
|
583
617
|
* * Optionally clear the mask throughout the graph.
|
|
584
618
|
*/
|
|
585
619
|
grabMask(clearInAllHalfEdges?: boolean): HalfEdgeMask;
|
|
586
|
-
/**
|
|
587
|
-
* Return `mask` to the free pool.
|
|
588
|
-
*/
|
|
620
|
+
/** Return `mask` to the free pool. */
|
|
589
621
|
dropMask(mask: HalfEdgeMask): void;
|
|
590
622
|
/**
|
|
591
|
-
*
|
|
592
|
-
* * The two edges are joined as edgeMate pair.
|
|
593
|
-
* * The two edges are a 2-half-edge face loop in both the faceSuccessor and facePredecessor directions.
|
|
594
|
-
* * The two edges are added to the graph's HalfEdge set
|
|
595
|
-
* @returns
|
|
623
|
+
* Create 2 half edges forming 2 vertices, 1 edge, and 1 face.
|
|
624
|
+
* * The two half edges are joined as edgeMate pair.
|
|
625
|
+
* * The two half edges are a 2-half-edge face loop in both the faceSuccessor and facePredecessor directions.
|
|
626
|
+
* * The two half edges are added to the graph's HalfEdge set.
|
|
627
|
+
* @returns pointer to the first half edge created.
|
|
596
628
|
*/
|
|
597
629
|
createEdgeXYZXYZ(xA?: number, yA?: number, zA?: number, iA?: number, xB?: number, yB?: number, zB?: number, iB?: number): HalfEdge;
|
|
598
630
|
/**
|
|
599
|
-
*
|
|
600
|
-
* * The two edges are joined as edgeMate pair.
|
|
601
|
-
* * The two edges are a 2-half-edge face loop in both the faceSuccessor and facePredecessor directions.
|
|
602
|
-
* * The two edges are added to the graph's HalfEdge set
|
|
631
|
+
* Create 2 half edges forming 2 vertices, 1 edge, and 1 face.
|
|
632
|
+
* * The two half edges are joined as edgeMate pair.
|
|
633
|
+
* * The two half edges are a 2-half-edge face loop in both the faceSuccessor and facePredecessor directions.
|
|
634
|
+
* * The two half edges are added to the graph's HalfEdge set.
|
|
603
635
|
* * Coordinates are set to zero.
|
|
604
|
-
* *
|
|
605
|
-
* @returns
|
|
636
|
+
* * IDs are installed in the two half edges.
|
|
637
|
+
* @returns pointer to the first half edge created, with ID set to iA.
|
|
606
638
|
*/
|
|
607
639
|
createEdgeIdId(iA?: number, iB?: number): HalfEdge;
|
|
608
640
|
/**
|
|
609
|
-
*
|
|
610
|
-
* @returns
|
|
641
|
+
* Create an edge from coordinates x,y,z connected to the graph at the vertex of the given `node`.
|
|
642
|
+
* @returns pointer to the dangling node at x,y,z.
|
|
611
643
|
*/
|
|
612
644
|
createEdgeXYZHalfEdge(xA: number | undefined, yA: number | undefined, zA: number | undefined, iA: number | undefined, node: HalfEdge, iB?: number): HalfEdge;
|
|
613
645
|
/**
|
|
614
|
-
*
|
|
615
|
-
* @returns
|
|
646
|
+
* Create an edge from the vertex of `nodeA` to the vertex of `nodeB`.
|
|
647
|
+
* @returns pointer to the new half edge at the vertex of `nodeA`.
|
|
616
648
|
*/
|
|
617
649
|
createEdgeHalfEdgeHalfEdge(nodeA: HalfEdge, idA: number, nodeB: HalfEdge, idB?: number): HalfEdge;
|
|
618
650
|
/**
|
|
619
|
-
*
|
|
620
|
-
* * The two edges are joined as edgeMate pair.
|
|
621
|
-
* * The two edges are a 2-half-edge face loop in both the faceSuccessor and facePredecessor directions.
|
|
622
|
-
* * The two edges are added to the graph's HalfEdge set
|
|
623
|
-
* @returns
|
|
651
|
+
* Create 2 half edges forming 2 vertices, 1 edge, and 1 face
|
|
652
|
+
* * The two half edges are joined as edgeMate pair.
|
|
653
|
+
* * The two half edges are a 2-half-edge face loop in both the faceSuccessor and facePredecessor directions.
|
|
654
|
+
* * The two half edges are added to the graph's HalfEdge set.
|
|
655
|
+
* @returns pointer to the first half edge created, with coordinates `xyz0`.
|
|
624
656
|
*/
|
|
625
657
|
createEdgeXYAndZ(xyz0: XYAndZ, id0: number, xyz1: XYAndZ, id1: number): HalfEdge;
|
|
626
658
|
/**
|
|
627
|
-
*
|
|
628
|
-
* *
|
|
629
|
-
* *
|
|
630
|
-
* *
|
|
631
|
-
* *
|
|
632
|
-
*
|
|
659
|
+
* Create a new vertex within the edge beginning at `base`.
|
|
660
|
+
* * This creates two new nodes in their own vertex loop.
|
|
661
|
+
* * If the base is undefined, create a single-edge loop.
|
|
662
|
+
* * Existing nodes stay in their face and vertex loops and retain xyz and i values.
|
|
663
|
+
* * Unlike [[pinch]], this breaks the edgeMate pairing of the input edge:
|
|
664
|
+
* each node of the input edge gets a new node as its edge mate.
|
|
665
|
+
* * On each side of the edge, if edgeTag is present, it is copied to the new node on that side.
|
|
666
|
+
* @returns reference to the half edge created, the new face successor of `base`.
|
|
633
667
|
*/
|
|
634
668
|
splitEdge(base: undefined | HalfEdge, xA?: number, yA?: number, zA?: number, iA?: number): HalfEdge;
|
|
635
669
|
/**
|
|
636
|
-
*
|
|
637
|
-
* *
|
|
638
|
-
* *
|
|
639
|
-
* *
|
|
640
|
-
*
|
|
641
|
-
* * New
|
|
642
|
-
* *
|
|
643
|
-
* @returns
|
|
670
|
+
* Create a new sliver face "inside" an existing edge.
|
|
671
|
+
* * This creates two nodes that are each face predecessor and successor to the other.
|
|
672
|
+
* * Existing nodes stay in their face and vertex loops and retain xyz and i values.
|
|
673
|
+
* * Unlike [[pinch]], this breaks the edgeMate pairing of the input edge:
|
|
674
|
+
* each node of the input edge gets a new node as its edge mate.
|
|
675
|
+
* * New nodes get the xyz and i values shared by the nodes in the vertex loops into which they are placed.
|
|
676
|
+
* * New nodes' faceTag and edgeTag are `undefined`.
|
|
677
|
+
* @returns reference to the half edge created in the vertex loop of baseA.
|
|
644
678
|
*/
|
|
645
679
|
splitEdgeCreateSliverFace(base: HalfEdge): HalfEdge;
|
|
646
680
|
/**
|
|
647
|
-
*
|
|
648
|
-
* *
|
|
649
|
-
* *
|
|
650
|
-
* *
|
|
651
|
-
*
|
|
652
|
-
*
|
|
681
|
+
* Create a new vertex within the edge beginning at `base`, with coordinates specified by a fraction along the edge.
|
|
682
|
+
* * This creates two new nodes in their own vertex loop.
|
|
683
|
+
* * Existing nodes stay in their face and vertex loops and retain xyz and i values.
|
|
684
|
+
* * Unlike [[pinch]], this breaks the edgeMate pairing of the input edge:
|
|
685
|
+
* each node of the input edge gets a new node as its edge mate.
|
|
686
|
+
* * On each side of the edge, if edgeTag is present, it is copied to the new node on that side.
|
|
687
|
+
* @returns reference to the half edge created, the new face successor of `base`.
|
|
653
688
|
*/
|
|
654
689
|
splitEdgeAtFraction(base: HalfEdge, fraction: number): HalfEdge;
|
|
655
|
-
/**
|
|
656
|
-
*
|
|
690
|
+
/**
|
|
691
|
+
* This is a destructor-like action that eliminates all inter-connections among the graph's nodes.
|
|
692
|
+
* After this is called, the graph is unusable.
|
|
657
693
|
*/
|
|
658
694
|
decommission(): void;
|
|
659
|
-
/**
|
|
660
|
-
*
|
|
695
|
+
/**
|
|
696
|
+
* Create two nodes of a new edge.
|
|
697
|
+
* @returns the reference to the new node at (x0,y0).
|
|
661
698
|
*/
|
|
662
699
|
addEdgeXY(x0: number, y0: number, x1: number, y1: number): HalfEdge;
|
|
663
|
-
/** Clear selected bits in all nodes of the graph. */
|
|
700
|
+
/** Clear selected `mask` bits in all nodes of the graph. */
|
|
664
701
|
clearMask(mask: HalfEdgeMask): void;
|
|
665
|
-
/** Set selected bits in all nodes of the graph. */
|
|
702
|
+
/** Set selected `mask` bits in all nodes of the graph. */
|
|
666
703
|
setMask(mask: HalfEdgeMask): void;
|
|
667
|
-
/**
|
|
704
|
+
/** Toggle selected `mask` bits in all nodes of the graph. */
|
|
668
705
|
reverseMask(mask: HalfEdgeMask): void;
|
|
669
706
|
/**
|
|
670
707
|
* Return the number of nodes that have a specified mask bit set.
|
|
671
708
|
* @param mask mask to count
|
|
672
709
|
*/
|
|
673
710
|
countMask(mask: HalfEdgeMask): number;
|
|
674
|
-
/**
|
|
675
|
-
*
|
|
711
|
+
/**
|
|
712
|
+
* Return an array of LineSegment3d.
|
|
713
|
+
* * The array has one segment per edge.
|
|
676
714
|
* * The coordinates are taken from a node and its face successor.
|
|
677
|
-
* * On each edge, the line segment
|
|
715
|
+
* * On each edge, the line segment starts at the HalfEdge with lower ID than its edgeMate.
|
|
678
716
|
*/
|
|
679
717
|
collectSegments(): LineSegment3d[];
|
|
680
|
-
/** Returns the number of vertex loops in a graph structure */
|
|
718
|
+
/** Returns the number of vertex loops in a graph structure. */
|
|
681
719
|
countVertexLoops(): number;
|
|
682
|
-
/** Returns the number of face loops */
|
|
720
|
+
/** Returns the number of face loops in a graph structure. */
|
|
683
721
|
countFaceLoops(): number;
|
|
684
|
-
/**
|
|
685
|
-
* Returns the number of face loops satisfying a filter function with mask argument.
|
|
686
|
-
*
|
|
687
|
-
*/
|
|
722
|
+
/** Returns the number of face loops satisfying a filter function with mask argument. */
|
|
688
723
|
countFaceLoopsWithMaskFilter(filter: HalfEdgeAndMaskToBooleanFunction, mask: HalfEdgeMask): number;
|
|
689
|
-
/** Returns an array of nodes, where each node represents a starting point of a
|
|
690
|
-
|
|
724
|
+
/** Returns an array of nodes, where each node represents a starting point of a vertex loop. */
|
|
725
|
+
collectVertexLoops(): HalfEdge[];
|
|
726
|
+
/** Returns an array of nodes, where each node represents a starting point of a face loop. */
|
|
691
727
|
collectFaceLoops(): HalfEdge[];
|
|
692
|
-
/**
|
|
728
|
+
/**
|
|
729
|
+
* Visit each vertex loop of the graph once.
|
|
730
|
+
* * Call the `announceVertex` function.
|
|
731
|
+
* * Continue search if `announceVertex(graph, node)` returns `true`.
|
|
732
|
+
* * Terminate search if `announceVertex(graph, node)` returns `false`.
|
|
733
|
+
* @param announceVertex function to apply at one node of each vertex.
|
|
693
734
|
*/
|
|
694
|
-
|
|
735
|
+
announceVertexLoops(announceVertex: GraphNodeFunction): void;
|
|
695
736
|
/**
|
|
696
|
-
*
|
|
697
|
-
* * Call the announceFace function
|
|
698
|
-
* *
|
|
699
|
-
* *
|
|
700
|
-
* @param
|
|
737
|
+
* Visit each facet of the graph once.
|
|
738
|
+
* * Call the `announceFace` function.
|
|
739
|
+
* * Continue search if `announceFace(graph, node)` returns `true`.
|
|
740
|
+
* * Terminate search if `announceFace(graph, node)` returns `false`.
|
|
741
|
+
* @param announceFace function to apply at one node of each face.
|
|
701
742
|
*/
|
|
702
743
|
announceFaceLoops(announceFace: GraphNodeFunction): void;
|
|
703
744
|
/**
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
*/
|
|
711
|
-
announceEdges(announceEdge: GraphNodeFunction): void;
|
|
712
|
-
/**
|
|
713
|
-
* * Visit each vertex loop of the graph once.
|
|
714
|
-
* * Call the announceVertex function
|
|
715
|
-
* * continue search if announceVertex(graph, node) returns true
|
|
716
|
-
* * terminate search if announce vertex (graph, node) returns false
|
|
717
|
-
* @param announceVertex function to apply at one node of each face.
|
|
745
|
+
* Visit each edge of the graph once.
|
|
746
|
+
* * Call the `announceEdge` function.
|
|
747
|
+
* * The edge mate will NOT appear in an announceEdge call.
|
|
748
|
+
* * Continue search if `announceEdge(graph, node)` returns `true`.
|
|
749
|
+
* * Terminate search if `announceEdge(graph, node)` returns `false`.
|
|
750
|
+
* @param announceEdge function to apply at one node of each edge.
|
|
718
751
|
*/
|
|
719
|
-
|
|
752
|
+
announceEdges(announceEdge: GraphNodeFunction): void;
|
|
720
753
|
/**
|
|
721
|
-
*
|
|
722
|
-
* * Call the announceNode function
|
|
723
|
-
* *
|
|
724
|
-
* *
|
|
725
|
-
* @param
|
|
754
|
+
* Visit each half edge (node) of the graph once.
|
|
755
|
+
* * Call the `announceNode` function.
|
|
756
|
+
* * Continue search if `announceNode(graph, node)` returns `true`.
|
|
757
|
+
* * Terminate search if `announceFace(graph, node)` returns `false`.
|
|
758
|
+
* @param announceNode function to apply at each node.
|
|
726
759
|
*/
|
|
727
760
|
announceNodes(announceNode: GraphNodeFunction): void;
|
|
728
|
-
/** Return the number of nodes in the graph */
|
|
761
|
+
/** Return the number of nodes in the graph. */
|
|
729
762
|
countNodes(): number;
|
|
730
763
|
/** Apply transform to the xyz coordinates in the graph. */
|
|
731
764
|
transformInPlace(transform: Transform): void;
|
|
732
765
|
/**
|
|
733
|
-
*
|
|
734
|
-
* @param deleteThisNode returns true to delete the corresponding
|
|
766
|
+
* Disconnect and delete all nodes that satisfy a filter condition.
|
|
767
|
+
* @param deleteThisNode returns true to delete the corresponding node. Should act symmetrically on the edgeMate.
|
|
735
768
|
* @returns the number of nodes deleted (twice the number of deleted edges).
|
|
736
769
|
*/
|
|
737
770
|
yankAndDeleteEdges(deleteThisNode: NodeFunction): number;
|