@itwin/core-geometry 5.1.0-dev.9 → 5.2.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -1
- package/lib/cjs/Geometry.d.ts +18 -10
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +13 -3
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.d.ts +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js +7 -1
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.d.ts +4 -3
- package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js +4 -5
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.d.ts +7 -5
- package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js +9 -5
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js +5 -3
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +1 -2
- package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js +13 -25
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -2
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/core-geometry.d.ts +2 -0
- package/lib/cjs/core-geometry.d.ts.map +1 -1
- package/lib/cjs/core-geometry.js +2 -0
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +54 -32
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +56 -37
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +40 -1
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +90 -0
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.d.ts +3 -2
- package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
- package/lib/cjs/curve/CurveFactory.js +6 -5
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts +27 -25
- package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +30 -25
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +9 -2
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js +11 -0
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveTypes.d.ts +1 -1
- package/lib/cjs/curve/CurveTypes.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts +2 -0
- package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js +4 -0
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +7 -0
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +15 -3
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +37 -8
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +34 -8
- package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js +129 -33
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.d.ts +4 -3
- package/lib/cjs/curve/Query/StrokeCountChain.d.ts.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.js +20 -9
- package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.d.ts +2 -1
- package/lib/cjs/curve/RegionMomentsXY.d.ts.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.js +26 -41
- package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +74 -39
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +146 -46
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +36 -27
- package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js +161 -55
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.d.ts +1 -1
- package/lib/cjs/curve/StrokeOptions.js +1 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +2 -2
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +6 -6
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +0 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
- package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
- package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js +34 -0
- package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
- package/lib/cjs/geometry3d/AngleSweep.d.ts +25 -18
- package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js +32 -18
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +8 -7
- package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js +19 -25
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.d.ts +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +8 -3
- package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js +21 -3
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +11 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js +21 -3
- package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.d.ts +2 -0
- package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.js +6 -1
- package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +18 -10
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js +0 -2
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +4 -4
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +4 -5
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.d.ts +7 -7
- package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js +66 -26
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +49 -2
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +38 -2
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.d.ts +5 -4
- package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js +5 -4
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +18 -10
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +32 -10
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.js +0 -1
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.d.ts +7 -9
- package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js +23 -45
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/ReusableObjectCache.d.ts +39 -29
- package/lib/cjs/geometry3d/ReusableObjectCache.d.ts.map +1 -1
- package/lib/cjs/geometry3d/ReusableObjectCache.js +49 -35
- package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.d.ts +1 -4
- package/lib/cjs/geometry3d/SortablePolygon.d.ts.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.js +48 -43
- package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +21 -2
- package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Transform.js +32 -13
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry4d/Point4d.d.ts +8 -5
- package/lib/cjs/geometry4d/Point4d.d.ts.map +1 -1
- package/lib/cjs/geometry4d/Point4d.js +27 -16
- package/lib/cjs/geometry4d/Point4d.js.map +1 -1
- package/lib/cjs/numerics/BezierPolynomials.d.ts +2 -0
- package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
- package/lib/cjs/numerics/BezierPolynomials.js +11 -0
- package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
- package/lib/cjs/numerics/SmallSystem.d.ts +77 -36
- package/lib/cjs/numerics/SmallSystem.d.ts.map +1 -1
- package/lib/cjs/numerics/SmallSystem.js +129 -73
- package/lib/cjs/numerics/SmallSystem.js.map +1 -1
- package/lib/cjs/polyface/FacetOrientation.d.ts +1 -1
- package/lib/cjs/polyface/FacetOrientation.js +1 -1
- package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +55 -40
- package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js +83 -75
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +47 -38
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +26 -19
- package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceWalker.js +51 -32
- package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/cjs/polyface/Polyface.d.ts +19 -5
- package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
- package/lib/cjs/polyface/Polyface.js +18 -2
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +6 -6
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.d.ts +19 -18
- package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js +39 -42
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.d.ts +1 -1
- package/lib/cjs/polyface/PolyfaceData.js +1 -1
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +119 -78
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +315 -231
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +3 -3
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.d.ts.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js +2 -3
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.d.ts.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js +2 -4
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.d.ts +1 -1
- package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js +3 -3
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.d.ts +3 -3
- package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js +5 -5
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/solid/Box.d.ts.map +1 -1
- package/lib/cjs/solid/Box.js +7 -0
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.d.ts.map +1 -1
- package/lib/cjs/solid/Cone.js +6 -0
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.d.ts +2 -3
- package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
- package/lib/cjs/solid/LinearSweep.js +11 -7
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.d.ts +2 -2
- package/lib/cjs/solid/RotationalSweep.js +2 -2
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.d.ts +1 -1
- package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
- package/lib/cjs/solid/RuledSweep.js +5 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/Sphere.d.ts.map +1 -1
- package/lib/cjs/solid/Sphere.js +6 -3
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.d.ts +1 -1
- package/lib/cjs/solid/SweepContour.js +1 -1
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.d.ts.map +1 -1
- package/lib/cjs/solid/TorusPipe.js +4 -0
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.d.ts +1 -1
- package/lib/cjs/topology/ChainMerge.js +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +64 -14
- package/lib/cjs/topology/Graph.d.ts.map +1 -1
- package/lib/cjs/topology/Graph.js +149 -32
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +3 -2
- package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js +3 -2
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/Merging.d.ts +0 -1
- package/lib/cjs/topology/Merging.d.ts.map +1 -1
- package/lib/cjs/topology/Merging.js +49 -46
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.d.ts.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js +2 -1
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/Triangulation.d.ts +9 -14
- package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
- package/lib/cjs/topology/Triangulation.js +29 -22
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/esm/Geometry.d.ts +18 -10
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +13 -3
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.d.ts +1 -1
- package/lib/esm/bspline/BSpline1dNd.js +1 -1
- package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js +7 -1
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.d.ts +4 -3
- package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js +4 -5
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.d.ts +7 -5
- package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
- package/lib/esm/clipping/ClipPlane.js +9 -5
- package/lib/esm/clipping/ClipPlane.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
- package/lib/esm/clipping/ClipUtils.js +5 -3
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +1 -2
- package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js +13 -25
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -2
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/esm/core-geometry.d.ts +2 -0
- package/lib/esm/core-geometry.d.ts.map +1 -1
- package/lib/esm/core-geometry.js +2 -0
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +54 -32
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +56 -37
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +40 -1
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +90 -0
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveFactory.d.ts +3 -2
- package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
- package/lib/esm/curve/CurveFactory.js +6 -5
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts +27 -25
- package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +30 -25
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +9 -2
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js +11 -0
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/CurveTypes.d.ts +1 -1
- package/lib/esm/curve/CurveTypes.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts +2 -0
- package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/esm/curve/LineSegment3d.js +4 -0
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +7 -0
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +15 -3
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +37 -8
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.d.ts +34 -8
- package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js +131 -35
- package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountChain.d.ts +4 -3
- package/lib/esm/curve/Query/StrokeCountChain.d.ts.map +1 -1
- package/lib/esm/curve/Query/StrokeCountChain.js +20 -9
- package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.d.ts +2 -1
- package/lib/esm/curve/RegionMomentsXY.d.ts.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.js +26 -41
- package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +74 -39
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +146 -46
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +36 -27
- package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js +161 -56
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.d.ts +1 -1
- package/lib/esm/curve/StrokeOptions.js +1 -1
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +2 -2
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +6 -6
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +0 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
- package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
- package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js +30 -0
- package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
- package/lib/esm/geometry3d/AngleSweep.d.ts +25 -18
- package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js +32 -18
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +8 -7
- package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.js +19 -25
- package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.d.ts +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.d.ts +8 -3
- package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.js +21 -3
- package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +11 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.js +21 -3
- package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/esm/geometry3d/Plane3d.d.ts +2 -0
- package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3d.js +6 -1
- package/lib/esm/geometry3d/Plane3d.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +18 -10
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js +0 -2
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +4 -4
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +4 -5
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.d.ts +7 -7
- package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js +66 -26
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +49 -2
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +38 -2
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.d.ts +5 -4
- package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js +5 -4
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +18 -10
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +32 -10
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Ray2d.js +0 -1
- package/lib/esm/geometry3d/Ray2d.js.map +1 -1
- package/lib/esm/geometry3d/Ray3d.d.ts +7 -9
- package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js +23 -45
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/ReusableObjectCache.d.ts +39 -29
- package/lib/esm/geometry3d/ReusableObjectCache.d.ts.map +1 -1
- package/lib/esm/geometry3d/ReusableObjectCache.js +47 -33
- package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/esm/geometry3d/SortablePolygon.d.ts +1 -4
- package/lib/esm/geometry3d/SortablePolygon.d.ts.map +1 -1
- package/lib/esm/geometry3d/SortablePolygon.js +48 -43
- package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +21 -2
- package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
- package/lib/esm/geometry3d/Transform.js +32 -13
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/geometry4d/Point4d.d.ts +8 -5
- package/lib/esm/geometry4d/Point4d.d.ts.map +1 -1
- package/lib/esm/geometry4d/Point4d.js +27 -16
- package/lib/esm/geometry4d/Point4d.js.map +1 -1
- package/lib/esm/numerics/BezierPolynomials.d.ts +2 -0
- package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
- package/lib/esm/numerics/BezierPolynomials.js +11 -0
- package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
- package/lib/esm/numerics/SmallSystem.d.ts +77 -36
- package/lib/esm/numerics/SmallSystem.d.ts.map +1 -1
- package/lib/esm/numerics/SmallSystem.js +129 -73
- package/lib/esm/numerics/SmallSystem.js.map +1 -1
- package/lib/esm/polyface/FacetOrientation.d.ts +1 -1
- package/lib/esm/polyface/FacetOrientation.js +1 -1
- package/lib/esm/polyface/FacetOrientation.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +55 -40
- package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js +83 -75
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
- package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js +47 -38
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +26 -19
- package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceWalker.js +51 -32
- package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/esm/polyface/Polyface.d.ts +19 -5
- package/lib/esm/polyface/Polyface.d.ts.map +1 -1
- package/lib/esm/polyface/Polyface.js +18 -2
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +6 -6
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.d.ts +19 -18
- package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js +39 -42
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceData.d.ts +1 -1
- package/lib/esm/polyface/PolyfaceData.js +1 -1
- package/lib/esm/polyface/PolyfaceData.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +119 -78
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +316 -232
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
- package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeNode.js +3 -3
- package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.d.ts.map +1 -1
- package/lib/esm/serialization/BGFBReader.js +2 -3
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.d.ts.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js +2 -4
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.d.ts +1 -1
- package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js +3 -3
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.d.ts +3 -3
- package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js +5 -5
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/solid/Box.d.ts.map +1 -1
- package/lib/esm/solid/Box.js +7 -0
- package/lib/esm/solid/Box.js.map +1 -1
- package/lib/esm/solid/Cone.d.ts.map +1 -1
- package/lib/esm/solid/Cone.js +6 -0
- package/lib/esm/solid/Cone.js.map +1 -1
- package/lib/esm/solid/LinearSweep.d.ts +2 -3
- package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
- package/lib/esm/solid/LinearSweep.js +11 -7
- package/lib/esm/solid/LinearSweep.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.d.ts +2 -2
- package/lib/esm/solid/RotationalSweep.js +2 -2
- package/lib/esm/solid/RotationalSweep.js.map +1 -1
- package/lib/esm/solid/RuledSweep.d.ts +1 -1
- package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
- package/lib/esm/solid/RuledSweep.js +5 -1
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/Sphere.d.ts.map +1 -1
- package/lib/esm/solid/Sphere.js +6 -3
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/SweepContour.d.ts +1 -1
- package/lib/esm/solid/SweepContour.js +1 -1
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/solid/TorusPipe.d.ts.map +1 -1
- package/lib/esm/solid/TorusPipe.js +4 -0
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.d.ts +1 -1
- package/lib/esm/topology/ChainMerge.js +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +64 -14
- package/lib/esm/topology/Graph.d.ts.map +1 -1
- package/lib/esm/topology/Graph.js +149 -32
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +3 -2
- package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js +3 -2
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/Merging.d.ts +0 -1
- package/lib/esm/topology/Merging.d.ts.map +1 -1
- package/lib/esm/topology/Merging.js +49 -46
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.d.ts.map +1 -1
- package/lib/esm/topology/RegularizeFace.js +2 -1
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/Triangulation.d.ts +9 -14
- package/lib/esm/topology/Triangulation.d.ts.map +1 -1
- package/lib/esm/topology/Triangulation.js +29 -22
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/package.json +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointHelpers.js","sourceRoot":"","sources":["../../../src/geometry3d/PointHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module CartesianGeometry\n */\nimport { Geometry } from \"../Geometry\";\nimport { Point4d } from \"../geometry4d/Point4d\";\nimport { IndexedXYZCollection, MultiLineStringDataVariant } from \"./IndexedXYZCollection\";\nimport { Plane3dByOriginAndUnitNormal } from \"./Plane3dByOriginAndUnitNormal\";\nimport { Point2d } from \"./Point2dVector2d\";\nimport { Point3dArrayCarrier } from \"./Point3dArrayCarrier\";\nimport { Point3d, Vector3d, XYZ } from \"./Point3dVector3d\";\nimport { PointStringDeepXYZArrayCollector, VariantPointDataStream } from \"./PointStreaming\";\nimport { Transform } from \"./Transform\";\nimport { XAndY, XYAndZ, XYZProps } from \"./XYZProps\";\n\n/**\n *\n * @param numA first candidate -- presumed 0 or positive\n * @param numB second candidate -- may be undefined, invalid if outside closed interval 0..numA\n * @param multiplyBy second candidate multiplier (applied only if candidate is defined)\n */\nfunction selectOptionalClampedMin(numA: number, numB: number | undefined, multiplyBy: number): number {\n\n if (numB !== undefined) {\n const numC = numB * multiplyBy;\n if (numC >= 0 && numC <= numA)\n return numC;\n }\n return numA;\n}\n/**\n * The `NumberArray` class contains static methods that act on arrays of numbers.\n * @public\n */\nexport class NumberArray {\n /** return the sum of values in an array, The summation is done with correction terms which\n * improves last-bit numeric accuracy.\n */\n public static preciseSum(data: number[]): number {\n const n = data.length;\n if (n === 0)\n return 0.0;\n let sum = data[0];\n let c = 0.0;\n let y: number;\n let t: number;\n for (let i = 1; i < n; i++) {\n y = data[i] - c;\n t = sum + y;\n c = (t - sum) - y;\n sum = t;\n }\n return sum;\n }\n /** Return true if arrays have identical counts and equal entries (using `!==` comparison) */\n public static isExactEqual(dataA: any[] | Float64Array | Uint8Array | Uint32Array | undefined, dataB: any[] | Float64Array | Uint8Array | Uint32Array | undefined): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (dataA[i] !== dataB[i])\n return false;\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n /** Return true if arrays have identical counts and entries equal within tolerance */\n public static isAlmostEqual(\n dataA: number[] | Float64Array | undefined,\n dataB: number[] | Float64Array | undefined,\n tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (Math.abs(dataA[i] - dataB[i]) > tolerance)\n return false;\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n\n /** return the sum of numbers in an array. Note that \"PreciseSum\" may be more accurate. */\n public static sum(data: number[] | Float64Array): number {\n let sum = 0;\n for (const x of data) { sum += x; }\n return sum;\n }\n /** test if coordinate x appears (to tolerance by `Geometry.isSameCoordinate`) in this array of numbers */\n public static isCoordinateInArray(x: number, data: number[] | undefined): boolean {\n if (data) {\n for (const y of data) { if (Geometry.isSameCoordinate(x, y)) return true; }\n }\n return false;\n }\n /** Return the max absolute value in a array of numbers. */\n public static maxAbsArray(values: number[]): number {\n const arrLen = values.length;\n if (arrLen === 0) {\n return 0.0;\n }\n let a = Math.abs(values[0]);\n for (let i = 1; i < arrLen; i++) {\n const b = Math.abs(values[i]);\n if (a < b) {\n a = b;\n }\n }\n return a;\n }\n /** return the max absolute value of a pair of numbers */\n public static maxAbsTwo(a1: number, a2: number): number {\n a1 = Math.abs(a1);\n a2 = Math.abs(a2);\n return (a1 > a2) ? a1 : a2;\n }\n /** Return the max absolute difference between corresponding entries in two arrays of numbers\n * * If sizes are mismatched, only the smaller length is tested.\n */\n public static maxAbsDiff(dataA: number[] | Float64Array, dataB: number[] | Float64Array): number {\n let a = 0.0;\n const n = Math.min(dataA.length, dataB.length);\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\n return a;\n }\n\n /** Return the max absolute difference between corresponding entries in two Float64Array\n * * If sizes are mismatched, only the smaller length is tested.\n */\n public static maxAbsDiffFloat64(dataA: Float64Array, dataB: Float64Array): number {\n let a = 0.0;\n const n = Math.min(dataA.length, dataB.length);\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\n return a;\n }\n /**\n * Return an array with indicated start and end points, maximum step size internally\n * @param low low value\n * @param high high value\n * @param step max permitted step\n */\n public static createArrayWithMaxStepSize(low: number, high: number, step: number): number[] {\n if (low === high)\n return [low];\n const delta = high - low;\n const numInterval = Math.max(1, Math.floor(Math.abs(delta / step)));\n const result = [];\n result.push(low);\n for (let i = 1; i < numInterval; i++) {\n result.push(low + (i / numInterval) * delta);\n }\n result.push(high);\n return result;\n }\n\n /** Copy numbers from variant sources to number[]. */\n public static create(source: number[] | Float64Array): number[] {\n const result: number[] = [];\n for (const q of source)\n result.push(q);\n return result;\n }\n\n /** Copy number[][]. */\n public static copy2d(source: number[][]): number[][] {\n const result: number[][] = [];\n for (const row of source) {\n const newRow = [];\n for (const entry of row)\n newRow.push(entry);\n result.push(newRow);\n }\n return result;\n }\n\n /** Copy number[][][]. */\n public static copy3d(source: number[][][]): number[][][] {\n const result: number[][][] = [];\n for (const row of source) {\n const newRow = [];\n for (const block of row) {\n const newBlock = [];\n for (const entry of block)\n newBlock.push(entry);\n newRow.push(newBlock);\n }\n result.push(newRow);\n }\n return result;\n }\n\n /** Copy numbers from Float64Array to number[][].\n * @param numPerBlock block size\n */\n public static unpack2d(source: Float64Array, numPerBlock: number): number[][] | undefined {\n if (numPerBlock < 1)\n return undefined;\n return Point3dArray.unpackNumbersToNestedArrays(source, numPerBlock) as number[][];\n }\n\n /** Copy numbers from Float64Array to number[][][].\n * @param numPerRow row size\n * @param numPerBlock block size\n */\n public static unpack3d(source: Float64Array, numPerRow: number, numPerBlock: number): number[][][] | undefined {\n if (numPerBlock < 1 || numPerRow < 1)\n return undefined;\n return Point3dArray.unpackNumbersToNestedArraysIJK(source, numPerBlock, numPerRow) as number[][][];\n }\n\n /** Copy numbers from 1d/2d/3d array to Float64Array. */\n public static pack(source: number[] | number[][] | number[][][]): Float64Array {\n const numRows = source.length;\n let numPerRow = 0;\n let numPerBlock = 0;\n let numCoords = 0;\n if (numRows > 0) {\n numCoords = numRows;\n if (Array.isArray(source[0])) {\n numPerRow = source[0].length;\n if (numPerRow > 0) {\n numCoords *= numPerRow;\n if (Array.isArray(source[0][0])) {\n numPerBlock = source[0][0].length;\n if (numPerBlock > 0)\n numCoords *= numPerBlock;\n }\n }\n }\n }\n const result = new Float64Array(numCoords);\n if (numPerBlock > 0) {\n const src3d = source as number[][][];\n for (let i = 0, c = 0; i < numRows; ++i)\n for (let j = 0; j < numPerRow; ++j)\n for (let k = 0; k < numPerBlock; ++k)\n result[c++] = src3d[i][j][k];\n } else if (numPerRow > 0) {\n const src2d = source as number[][];\n for (let i = 0, c = 0; i < numRows; ++i)\n for (let j = 0; j < numPerRow; ++j)\n result[c++] = src2d[i][j];\n } else if (numRows > 0) {\n const src1d = source as number[];\n for (let i = 0, c = 0; i < numRows; ++i)\n result[c++] = src1d[i];\n }\n return result;\n }\n\n /** Return a copy of the knots array, with multiplicity of first and last knots raised or lowered to expectedMultiplicity. */\n public static cloneWithStartAndEndMultiplicity(knots: number[] | undefined, target0: number, target1: number): number[] {\n const result: number[] = [];\n if (knots === undefined || knots.length === 0)\n return result;\n let multiplicity0 = 1;\n const knot0 = knots[0];\n const knot1 = knots[knots.length - 1];\n for (; multiplicity0 < knots.length && knots[multiplicity0] === knot0;) { multiplicity0++; }\n let multiplicity1 = 1;\n const k1 = knots.length - 1;\n for (; k1 - multiplicity1 >= 0 && knots[k1 - multiplicity1] === knot1;) { multiplicity1++; }\n\n for (let k = 0; k < target0; k++)\n result.push(knot0);\n for (let k = multiplicity0; k + multiplicity1 < knots.length; k++)\n result.push(knots[k]);\n for (let k = 0; k < target1; k++)\n result.push(knot1);\n return result;\n }\n\n /** Compute the linear combination s of the numbers and scales.\n * @param data array of numbers d_i.\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `data`.\n * @return s = sum(d_i * s_i), where i ranges from 0 to min(data.length, scales.length).\n */\n public static linearCombination(data: number[], scales: number[]): number {\n const numTerms = Math.min(data.length, scales.length);\n let sum = 0;\n for (let i = 0; i < numTerms; ++i)\n sum += scales[i] * data[i];\n return sum;\n }\n\n /** Compute the linear combination s of the colors and scales.\n * * The result is another color if the scales are in [0,1] and sum to 1.\n * @param colors array of colors c_i (rgba in first four bytes).\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `colors`.\n * @return s = sum(c_i * s_i), where i ranges from 0 to min(colors.length, scales.length).\n */\n public static linearCombinationOfColors(colors: number[], scales: number[]): number {\n const numTerms = Math.min(colors.length, scales.length);\n const bytes = [0, 0, 0, 0];\n // compute a convex combination of each byte\n for (let iByte = 0, shiftBits = 0; iByte < 4; ++iByte, shiftBits += 8) {\n for (let iTerm = 0; iTerm < numTerms; ++iTerm) {\n const fraction = Geometry.clamp(scales[iTerm], 0, 1); // chop slop\n const colorComponent = (colors[iTerm] >>> shiftBits) & 0xFF;\n bytes[iByte] += fraction * colorComponent;\n }\n bytes[iByte] = (Math.floor(bytes[iByte]) & 0xFF) << shiftBits;\n }\n return bytes[0] | bytes[1] | bytes[2] | bytes[3];\n }\n\n /**\n * Given an array of strictly increasing numbers, find the index of the largest number that is less than or equal\n * to `value`.\n * * Get an initial estimate by proportions of `value` and the first and last entries.\n * * Linear search from there for final value.\n * * For regularly spaced numbers (e.g., `data` is the `_facetStart` indices for a triangulated [[IndexedPolyface]]),\n * the proportional estimate will be immediately correct.\n * @param data the array of strictly increasing numbers\n * @param value the value to search for\n */\n public static searchStrictlyIncreasingNumbers(data: ReadonlyArray<number>, value: number): number | undefined {\n const lastQ = data.length - 1;\n if (lastQ <= 0 || value < 0 || value >= data[lastQ])\n return undefined;\n let q = Math.floor((value * lastQ) / data[lastQ]);\n while (data[q] > value)\n q--;\n while (data[q + 1] <= value)\n q++;\n return q;\n }\n}\n\n/**\n * The `Point2dArray` class contains static methods that act on arrays of 2d points.\n * @public\n */\nexport class Point2dArray {\n /** Return true if arrays have same length and matching coordinates. */\n public static isAlmostEqual(dataA: undefined | Point2d[], dataB: undefined | Point2d[]): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++) {\n if (!dataA[i].isAlmostEqual(dataB[i]))\n return false;\n }\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n /**\n * Return an array containing clones of the Point3d data[]\n * @param data source data\n */\n public static clonePoint2dArray(data: Point2d[]): Point2d[] {\n return data.map((p: Point2d) => p.clone());\n }\n /**\n * Return the number of points when trailing points that match point 0 are excluded.\n * @param data array of XAndY points.\n */\n public static pointCountExcludingTrailingWraparound(data: XAndY[]): number {\n let n = data.length;\n if (n < 2)\n return n;\n const x0 = data[0].x;\n const y0 = data[0].y;\n while (n > 1) {\n if (!Geometry.isSameCoordinate(data[n - 1].x, x0) || !Geometry.isSameCoordinate(data[n - 1].y, y0))\n return n;\n n--;\n }\n return n;\n }\n\n}\n\n/**\n * The `Vector3dArray` class contains static methods that act on arrays of 3d vectors.\n * @public\n */\nexport class Vector3dArray {\n /** Return true if arrays have same length and matching coordinates. */\n public static isAlmostEqual(dataA: undefined | Vector3d[], dataB: undefined | Vector3d[]): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i]))\n return false;\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n /**\n * Return an array containing clones of the Vector3d data[]\n * @param data source data\n */\n public static cloneVector3dArray(data: XYAndZ[]): Vector3d[] {\n return data.map((p: XYAndZ) => Vector3d.create(p.x, p.y, p.z));\n }\n}\n\n/**\n * The `Point4dArray` class contains static methods that act on arrays of 4d points.\n * @public\n */\nexport class Point4dArray {\n /**\n * Copy each weighted point and its corresponding weight into a packed buffer.\n * @param data array of weighted xyz\n * @param weights scalar weight array\n * @param result optional destination array. If insufficiently sized, a new array is returned.\n * @return packed weighted point array\n */\n public static packPointsAndWeightsToFloat64Array(data: Point3d[] | Float64Array | number[], weights: number[] | Float64Array, result?: Float64Array): Float64Array | undefined {\n let points: Point3d[] | Float64Array | number[];\n if (Array.isArray(data) && data[0] instanceof Point3d) {\n points = data as Point3d[];\n if (points.length !== weights.length)\n return undefined;\n const numValues = 4 * points.length;\n if (!result || result.length < numValues)\n result = new Float64Array(numValues);\n for (let i = 0, k = 0; k < points.length; k++) {\n result[i++] = points[k].x;\n result[i++] = points[k].y;\n result[i++] = points[k].z;\n result[i++] = weights[k];\n }\n return result;\n }\n points = data as (Float64Array | number[]);\n const numPoints = weights.length;\n if (points.length !== 3 * numPoints)\n return undefined;\n const numValues1 = 4 * numPoints;\n if (!result || result.length < numValues1)\n result = new Float64Array(numValues1);\n for (let i = 0, k = 0; k < numPoints; k++) {\n const k0 = 3 * k;\n result[i++] = points[k0];\n result[i++] = points[k0 + 1];\n result[i++] = points[k0 + 2];\n result[i++] = weights[k];\n }\n return result;\n }\n\n /**\n * Copy 4d points into a packed buffer.\n * @param data array of xyzw\n * @param result optional destination array. If insufficiently sized, a new array is returned.\n * @return packed point array\n */\n public static packToFloat64Array(data: Point4d[], result?: Float64Array): Float64Array {\n const numValues = 4 * data.length;\n if (!result || result.length < numValues)\n result = new Float64Array(numValues);\n let i = 0;\n for (const p of data) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n result[i++] = p.w;\n }\n return result;\n }\n /** unpack from ... to array of Point4d */\n public static unpackToPoint4dArray(data: Float64Array): Point4d[] {\n const result = [];\n for (let i = 0; i + 3 < data.length; i += 4) {\n result.push(Point4d.create(data[i], data[i + 1], data[i + 2], data[i + 3]));\n }\n return result;\n }\n /**\n * Unpack packed 4D data to a Point3d array and an array of weights.\n * * `WeightStyle` of `data` is not assumed. If input data is of form [a,b,c,d], default output arrays will have form [a,b,c] and [d].\n * @param data input 4D points (packed)\n * @param points output 3D data\n * @param weights output weights (w portion of input)\n * @param pointFormatter optional xyz formatter. By default, returns a Point3d created from the xyz portion of the input.\n */\n public static unpackFloat64ArrayToPointsAndWeights(data: Float64Array, points: Point3d[], weights: number[],\n pointFormatter: (x: number, y: number, z: number) => any = (x, y, z) => Point3d.create(x, y, z)) {\n points.length = 0;\n weights.length = 0;\n for (let i = 0; i + 3 < data.length; i += 4) {\n points.push(pointFormatter(data[i], data[i + 1], data[i + 2]));\n weights.push(data[i + 3]);\n }\n }\n private static _workPoint4d = Point4d.create();\n /**\n * Multiply (and replace) each block of 4 values as a Point4d.\n * @param transform transform to apply\n * @param xyzw array of x,y,z,w points.\n */\n public static multiplyInPlace(transform: Transform, xyzw: Float64Array): void {\n const numXYZW = xyzw.length;\n const xyzw1 = Point4dArray._workPoint4d;\n for (let i = 0; i + 3 < numXYZW; i += 4) {\n transform.multiplyXYZW(xyzw[i], xyzw[i + 1], xyzw[i + 2], xyzw[i + 3], xyzw1);\n xyzw[i] = xyzw1.x;\n xyzw[i + 1] = xyzw1.y;\n xyzw[i + 2] = xyzw1.z;\n xyzw[i + 3] = xyzw1.w;\n }\n }\n /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */\n public static isAlmostEqual(dataA: Point4d[] | Float64Array | undefined, dataB: Point4d[] | Float64Array | undefined): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i]))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i]))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Point4d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 4)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[4 * iPoint]) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[4 * iPoint + 1]) ||\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[4 * iPoint + 2]) ||\n !Geometry.isSameCoordinate(points[iPoint].w, numbers[4 * iPoint + 3]))\n return false;\n }\n }\n return true;\n }\n // if both are null it is equal, otherwise unequal\n return (dataA === undefined && dataB === undefined);\n }\n /** return true iff all xyzw points' altitudes are within tolerance of the plane.*/\n public static isCloseToPlane(data: Point4d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (Array.isArray(data)) {\n for (const xyzw of data) {\n if (Math.abs(plane.altitudeXYZW(xyzw.x, xyzw.y, xyzw.z, xyzw.w)) > tolerance)\n return false;\n }\n } else if (data instanceof Float64Array) {\n const numXYZ = data.length;\n for (let i = 0; i + 2 < numXYZ; i += 4) {\n if (Math.abs(plane.altitudeXYZW(data[i], data[i + 1], data[i + 2], data[i + 3])) > tolerance)\n return false;\n }\n }\n return true;\n }\n\n}\n/**\n * The `Point3dArray` class contains static methods that act on arrays of 3d points.\n * @public\n */\n\nexport class Point3dArray {\n /**\n * Copy 3d points into a packed buffer.\n * @param data array of xyz\n * @param result optional destination array. If insufficiently sized, a new array is returned.\n * @return packed point array\n */\n public static packToFloat64Array(data: Point3d[], result?: Float64Array): Float64Array {\n const numValues = 3 * data.length;\n if (!result || result.length < numValues)\n result = new Float64Array(numValues);\n let i = 0;\n for (const p of data) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n }\n return result;\n }\n /**\n * Copy 3d points into a packed number array.\n * @param data array of xyz\n * @param result optional destination array.\n * @return packed number array\n */\n public static packToNumberArray(data: Point3d[], result?: number[]): number[] {\n const numValues = 3 * data.length;\n if (!result)\n result = Array<number>(numValues);\n result.length = numValues;\n let i = 0;\n for (const p of data) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n }\n return result;\n }\n /**\n * Compute the 8 weights of trilinear mapping\n * By appropriate choice of weights, this can be used for both point and derivative mappings.\n * @param weights preallocated array to receive weights.\n * @param u0 low u weight\n * @param u1 high u weight\n * @param v0 low v weight\n * @param v1 high v weight\n * @param w0 low w weight\n * @param w1 high w weight\n */\n public static evaluateTrilinearWeights(weights: Float64Array, u0: number, u1: number, v0: number, v1: number, w0: number, w1: number) {\n\n weights[0] = u0 * v0 * w0;\n weights[1] = u1 * v0 * w0;\n weights[2] = u0 * v1 * w0;\n weights[3] = u1 * v1 * w0;\n weights[4] = u0 * v0 * w1;\n weights[5] = u1 * v0 * w1;\n weights[6] = u0 * v1 * w1;\n weights[7] = u1 * v1 * w1;\n }\n /**\n * sum the weighted x components from a point array.\n * * weights.length is the number of summed terms\n * * points must have at least that length\n * @param weights\n * @param points\n */\n public static sumWeightedX(weights: Float64Array, points: Point3d[]): number {\n let sum = 0.0;\n const n = weights.length;\n for (let i = 0; i < n; i++)\n sum += weights[i] * points[i].x;\n return sum;\n }\n\n /**\n * sum the weighted x components from a point array.\n * * weights.length is the number of summed terms\n * * points must have at least that length\n * @param weights\n * @param points\n */\n public static sumWeightedY(weights: Float64Array, points: Point3d[]): number {\n let sum = 0.0;\n const n = weights.length;\n for (let i = 0; i < n; i++)\n sum += weights[i] * points[i].y;\n return sum;\n }\n\n /**\n * sum the weighted x components from a point array.\n * * weights.length is the number of summed terms\n * * points must have at least that length\n * @param weights\n * @param points\n */\n public static sumWeightedZ(weights: Float64Array, points: Point3d[]): number {\n let sum = 0.0;\n const n = weights.length;\n for (let i = 0; i < n; i++)\n sum += weights[i] * points[i].z;\n return sum;\n }\n\n private static _weightUVW = new Float64Array(8);\n private static _weightDU = new Float64Array(8);\n private static _weightDV = new Float64Array(8);\n private static _weightDW = new Float64Array(8);\n /**\n * Compute a point by trilinear mapping.\n * @param points array of 8 points at corners, with x index varying fastest.\n * @param result optional result point\n */\n public static evaluateTrilinearPoint(points: Point3d[], u: number, v: number, w: number, result?: Point3d): Point3d {\n if (!result) result = Point3d.create(0, 0, 0);\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\n let a;\n for (let i = 0; i < 8; i++) {\n a = this._weightUVW[i];\n result.x += a * points[i].x;\n result.y += a * points[i].y;\n result.z += a * points[i].z;\n }\n return result;\n }\n /**\n * Compute a point and derivatives wrt uvw by trilinear mapping.\n * * evaluated point is the point part of the transform\n * * u,v,w derivatives are the respective columns of the matrix part of the transform.\n * @param points array of 8 points at corners, with x index varying fastest.\n * @param result optional result transform\n */\n public static evaluateTrilinearDerivativeTransform(points: Point3d[], u: number, v: number, w: number, result?: Transform): Transform {\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\n this.evaluateTrilinearWeights(this._weightDU, -1, 1, 1 - v, v, 1 - w, w);\n this.evaluateTrilinearWeights(this._weightDV, 1 - u, u, -1, 1, 1 - w, w);\n this.evaluateTrilinearWeights(this._weightDW, 1 - u, u, 1 - v, v, -1, 1);\n return Transform.createRowValues(\n this.sumWeightedX(this._weightDU, points), this.sumWeightedX(this._weightDV, points), this.sumWeightedX(this._weightDW, points), this.sumWeightedX(this._weightUVW, points),\n this.sumWeightedY(this._weightDU, points), this.sumWeightedY(this._weightDV, points), this.sumWeightedY(this._weightDW, points), this.sumWeightedY(this._weightUVW, points),\n this.sumWeightedZ(this._weightDU, points), this.sumWeightedZ(this._weightDV, points), this.sumWeightedZ(this._weightDW, points), this.sumWeightedZ(this._weightUVW, points),\n result);\n }\n /** unpack from a number array or Float64Array to an array of `Point3d` */\n public static unpackNumbersToPoint3dArray(data: Float64Array | number[]): Point3d[] {\n const result = [];\n for (let i = 0; i + 2 < data.length; i += 3) {\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\n }\n return result;\n }\n\n /**\n * Return a 2-dimensional array containing all the values of `data` in arrays of numPerBlock\n * @param data simple array of numbers.\n * @param numPerBlock number of values in each block at first level down.\n */\n public static unpackNumbersToNestedArrays(data: Float64Array, numPerBlock: number): any[] {\n const result = [];\n const n = data.length;\n let i = 0;\n let i1 = 0;\n while (i < n) {\n // there is at least one more value for a block\n const row = [];\n i1 = i + numPerBlock;\n if (i1 > n)\n i1 = n;\n for (; i < i1; i++) {\n row.push(data[i]);\n }\n result.push(row);\n }\n return result;\n }\n\n /**\n * Return a 3-dimensional array containing all the values of `data` in rows of numPerRow blocks of size numPerBlock.\n * @param data simple array of numbers\n * @param numPerBlock number of values in each block\n * @param numPerRow number of blocks per row\n */\n public static unpackNumbersToNestedArraysIJK(data: Float64Array, numPerBlock: number, numPerRow: number): any[] {\n const result = [];\n const n = data.length;\n let i = 0;\n let i1 = 0;\n let i2;\n while (i < n) {\n const row = [];\n i2 = i + numPerBlock * numPerRow;\n while (i < i2) {\n const block = [];\n i1 = i + numPerBlock;\n if (i1 > n)\n i1 = n;\n for (; i < i1; i++) {\n block.push(data[i]);\n }\n row.push(block);\n }\n result.push(row);\n }\n return result;\n }\n /** multiply a transform times each x,y,z triple and replace the x,y,z in the packed array */\n public static multiplyInPlace(transform: Transform, xyz: Float64Array): void {\n const xyz1 = Point3d.create();\n const numXYZ = xyz.length;\n for (let i = 0; i + 2 < numXYZ; i += 3) {\n transform.multiplyXYZ(xyz[i], xyz[i + 1], xyz[i + 2], xyz1);\n xyz[i] = xyz1.x;\n xyz[i + 1] = xyz1.y;\n xyz[i + 2] = xyz1.z;\n }\n }\n /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */\n public static isAlmostEqual(dataA: Point3d[] | Float64Array | undefined, dataB: Point3d[] | Float64Array | undefined): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i]))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i]))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Point3d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 3)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[3 * iPoint]) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[3 * iPoint + 1]) ||\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[3 * iPoint + 2]))\n return false;\n }\n }\n return true;\n }\n // if both are null it is equal, otherwise unequal\n return (dataA === undefined && dataB === undefined);\n }\n\n /** return simple average of all coordinates. (000 if empty array) */\n public static centroid(points: IndexedXYZCollection | Point3d[], result?: Point3d): Point3d {\n if (points instanceof IndexedXYZCollection) {\n result = Point3d.create(0, 0, 0, result);\n const p = Point3d.create();\n if (points.length > 0) {\n for (let i = 0; i < points.length; i++) {\n points.getPoint3dAtCheckedPointIndex(i, p);\n result.x += p.x; result.y += p.y; result.z += p.z;\n }\n result.scaleInPlace(1.0 / points.length);\n }\n return result;\n }\n const carrier = new Point3dArrayCarrier(points);\n return this.centroid(carrier);\n }\n\n /** Return the index of the point most distant from spacePoint */\n public static indexOfMostDistantPoint(points: Point3d[], spacePoint: XYZ, farVector: Vector3d): number | undefined {\n if (points.length === 0)\n return undefined;\n let dMax = -1;\n let d;\n let result = -1;\n for (let i = 0; i < points.length; i++) {\n d = spacePoint.distance(points[i]);\n if (d > dMax) {\n spacePoint.vectorTo(points[i], farVector);\n dMax = d;\n result = i;\n }\n }\n return result;\n }\n /** return the index of the point whose vector from space point has the largest magnitude of cross product with given vector. */\n public static indexOfPointWithMaxCrossProductMagnitude(points: Point3d[], spacePoint: Point3d, vector: Vector3d, farVector: Vector3d): number | undefined {\n if (points.length === 0)\n return undefined;\n let dMax = -1;\n let d;\n let result = -1;\n let vectorAB; // to be reused in loop !!!\n for (let i = 0; i < points.length; i++) {\n vectorAB = spacePoint.vectorTo(points[i], vectorAB);\n d = vectorAB.crossProductMagnitude(vector);\n if (d > dMax) {\n farVector.setFrom(vectorAB);\n dMax = d;\n result = i;\n }\n }\n return result;\n }\n\n /** Return the index of the closest point in the array (full xyz) */\n public static closestPointIndex(data: XYAndZ[], spacePoint: XYAndZ): number {\n let index = -1;\n let dMin = Number.MAX_VALUE;\n let d;\n const x0 = spacePoint.x;\n const y0 = spacePoint.y;\n const z0 = spacePoint.z;\n for (let i = 0; i < data.length; i++) {\n d = Geometry.distanceXYZXYZ(x0, y0, z0, data[i].x, data[i].y, data[i].z);\n if (d < dMin) {\n index = i;\n dMin = d;\n }\n }\n return index;\n }\n /** return true iff all points' altitudes are within tolerance of the plane.*/\n public static isCloseToPlane(data: Point3d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (Array.isArray(data)) {\n let xyz;\n for (xyz of data) {\n if (Math.abs(plane.altitude(xyz)) > tolerance)\n return false;\n }\n } else if (data instanceof Float64Array) {\n const numXYZ = data.length;\n for (let i = 0; i + 2 < numXYZ; i += 3) {\n if (Math.abs(plane.altitudeXYZ(data[i], data[i + 1], data[i + 2])) > tolerance)\n return false;\n }\n }\n return true;\n }\n\n /**\n * Sum lengths of edges.\n * @param data points.\n */\n public static sumEdgeLengths(data: Point3d[] | Float64Array, addClosureEdge: boolean = false, maxPointsToUse?: number): number {\n let sum = 0.0;\n\n if (Array.isArray(data)) {\n const n = selectOptionalClampedMin(data.length, maxPointsToUse, 1) - 1;\n for (let i = 0; i < n; i++) sum += data[i].distance(data[i + 1]);\n if (addClosureEdge && n > 0)\n sum += data[0].distance(data[n]);\n\n } else if (data instanceof Float64Array) {\n const numXYZ = selectOptionalClampedMin(data.length, maxPointsToUse, 3);\n let i = 0;\n for (; i + 5 < numXYZ; i += 3) { // final i points at final point x\n sum += Geometry.hypotenuseXYZ(data[i + 3] - data[i],\n data[i + 4] - data[i + 1],\n data[i + 5] - data[i + 2]);\n }\n if (addClosureEdge && i >= 3) {\n sum += Geometry.hypotenuseXYZ(data[0] - data[i],\n data[1] - data[i + 1],\n data[2] - data[i + 2]);\n }\n }\n return sum;\n }\n\n /**\n * Count the number of points, but ...\n * * ignore trailing duplicates of point 0.\n * * return 0 if there are any duplicates within the remaining points.\n * @param points points to examine.\n */\n public static countNonDuplicates(points: Point3d[], tolerance: number = Geometry.smallMetricDistance): number {\n let n = points.length;\n // strip of (allow) trailing duplicates ...\n while (n > 1) {\n if (points[0].isAlmostEqual(points[n - 1], tolerance))\n n--;\n else\n break;\n }\n for (let i = 0; i + 1 < n; i++)\n if (points[i].isAlmostEqual(points[i + 1], tolerance))\n return 0;\n return n;\n }\n\n /**\n * Return an array containing clones of the Point3d data[]\n * @param data source data\n */\n public static clonePoint3dArray(data: XYZProps[] | Float64Array): Point3d[] {\n const result: Point3d[] = [];\n if (data.length === 0)\n return result;\n if (data instanceof Float64Array) {\n for (let i = 0; i + 2 < data.length; i += 3)\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\n return result;\n }\n for (const p of data) {\n if (Array.isArray(p))\n result.push(Point3d.create(p[0], p[1], p[2]));\n else\n result.push(Point3d.create(p.x, p.y, p.z));\n }\n return result;\n }\n /**\n * Return an array containing Point2d with xy parts of each Point3d\n * @param data source data\n */\n public static clonePoint2dArray(data: XYAndZ[]): Point2d[] {\n return data.map((p: XYAndZ) => Point2d.create(p.x, p.y));\n }\n /**\n * clone points in the input array, inserting points within each edge to limit edge length.\n * @param points array of points\n * @param maxEdgeLength max length of an edge\n */\n public static cloneWithMaxEdgeLength(points: Point3d[], maxEdgeLength: number): Point3d[] {\n if (points.length === 0)\n return [];\n const result = [points[0]];\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1].distance(points[i]);\n const n = Geometry.stepCount(maxEdgeLength, a, 1);\n for (let k = 1; k < n; k++)\n result.push(points[i - 1].interpolate(k / n, points[i]));\n result.push(points[i]);\n\n }\n return result;\n }\n /** Pack isolated x,y,z args as a json `[x,y,z]` */\n private static xyzToArray(x: number, y: number, z: number): number[] { return [x, y, z]; }\n\n /**\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as arrays of 3 numbers `[1,2,3]`\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\n */\n public static cloneDeepJSONNumberArrays(data: MultiLineStringDataVariant): number[][] {\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => this.xyzToArray(x, y, z));\n VariantPointDataStream.streamXYZ(data, collector);\n return collector.claimResult();\n }\n /**\n * clone an array of [[XYZProps]] data, specifically as arrays of 3 numbers\n */\n public static cloneXYZPropsAsNumberArray(data: XYZProps[]): number[][] {\n // data is an array ... each member is either Point3d or [x,y,z]\n const result = [];\n for (const p of data) {\n if (p instanceof Point3d) {\n result.push([p.x, p.y, p.z]);\n } else if (Array.isArray(p)) {\n const x = p.length > 0 ? p[0] : 0.0;\n const y = p.length > 1 ? p[1] : 0.0;\n const z = p.length > 2 ? p[2] : 0.0;\n result.push([x, y, z]);\n } else {\n const x = p.x !== undefined ? p.x : 0.0;\n const y = p.y !== undefined ? p.y : 0.0;\n const z = p.z !== undefined ? p.z : 0.0;\n result.push([x, y, z]);\n }\n }\n return result;\n }\n /**\n * clone an array of [[XYZProps]] data, specifically as flattened array of number\n */\n public static cloneXYZPropsAsFloat64Array(data: XYZProps[]): Float64Array {\n const result = new Float64Array(data.length * 3);\n let i = 0;\n for (const p of data) {\n if (p instanceof Point3d) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n } else if (Array.isArray(p)) {\n result[i++] = p.length > 0 ? p[0] : 0.0;\n result[i++] = p.length > 1 ? p[1] : 0.0;\n result[i++] = p.length > 2 ? p[2] : 0.0;\n } else {\n result[i++] = p.x !== undefined ? p.x : 0.0;\n result[i++] = p.y !== undefined ? p.y : 0.0;\n result[i++] = p.z !== undefined ? p.z : 0.0;\n }\n }\n return result;\n }\n\n /**\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as `Point3d`.\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\n */\n public static cloneDeepXYZPoint3dArrays(data: MultiLineStringDataVariant): any[] {\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => Point3d.create(x, y, z));\n VariantPointDataStream.streamXYZ(data, collector);\n return collector.claimResult();\n }\n\n /**\n * Return perpendicular distance from points[indexB] to the segment from points[indexA] to points[indexC].\n * * Extrapolation options when the projection is outside of the fraction range [0,1] are:\n * * false ==> return distance to closest endpoint\n * * true ==> return distance to extended line segment\n * * There is no index checking!\n */\n public static distanceIndexedPointBToSegmentAC(points: Point3d[], indexA: number, indexB: number, indexC: number, extrapolate: boolean): number {\n const vectorU = Vector3d.createStartEnd(points[indexA], points[indexC]);\n const vectorV = Vector3d.createStartEnd(points[indexA], points[indexB]);\n const uDotU = vectorU.dotProduct(vectorU);\n const uDotV = vectorU.dotProduct(vectorV);\n const fraction = Geometry.conditionalDivideFraction(uDotV, uDotU);\n if (fraction === undefined)\n return vectorV.magnitude(); // AC is degenerate; return ||B-A||\n if (!extrapolate) {\n if (fraction > 1.0)\n return points[indexB].distance(points[indexC]); // return ||B-C||\n if (fraction < 0.0)\n return vectorV.magnitude(); // return ||B-A||\n }\n // return distance to projection on (extended) segment\n const h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;\n // h2 should never be negative except for quirky tolerance...\n return h2 <= 0.0 ? 0.0 : Math.sqrt(h2);\n }\n\n /**\n * Computes the hull of the XY projection of points.\n * @param points input points, z-coordinates ignored.\n * @param hullPoints (output) points on the convex hull (cloned from input points).\n * @param insidePoints (output) points not on the convex hull (cloned from input points).\n * @param addClosurePoint whether to append the first hull point to `hullPoints`.\n */\n public static computeConvexHullXY(\n points: Point3d[], hullPoints: Point3d[], insidePoints: Point3d[], addClosurePoint: boolean = false,\n ): void {\n hullPoints.length = 0;\n insidePoints.length = 0;\n let n = points.length;\n // get deep copy\n const xy1: Point3d[] = points.slice(0, n);\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\n if (n < 3) {\n for (const p of xy1)\n hullPoints.push(p);\n if (addClosurePoint && xy1.length > 0)\n hullPoints.push(xy1[0]);\n return;\n }\n hullPoints.push(xy1[0]); // this is sure to stay\n hullPoints.push(xy1[1]); // this one can be removed in loop.\n let numInside = 0;\n // first sweep creates upper hull\n for (let i = 2; i < n; i++) {\n const candidate = xy1[i];\n let top = hullPoints.length - 1;\n while (top >= 1 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\n xy1[numInside++] = hullPoints[top];\n top--;\n hullPoints.pop();\n }\n hullPoints.push(candidate);\n }\n const i0 = hullPoints.length - 1;\n xy1.length = numInside;\n xy1.push(hullPoints[0]); // force first point to be reconsidered as final hull point.\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\n n = xy1.length;\n // xy1.back () is already on stack.\n hullPoints.push(xy1[n - 1]);\n for (let i = n - 1; i-- > 0;) {\n const candidate = xy1[i];\n let top = hullPoints.length - 1;\n while (top > i0 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\n insidePoints.push(hullPoints[top]);\n top--;\n hullPoints.pop();\n }\n if (i > 0) // don't replicate start\n hullPoints.push(candidate);\n }\n if (addClosurePoint)\n hullPoints.push(hullPoints[0]);\n }\n /**\n * Return (clones of) points in data[] with min and max x and y parts.\n * @param data array to examine.\n */\n public static minMaxPoints(data: Point3d[]): { minXPoint: Point3d, maxXPoint: Point3d, minYPoint: Point3d, maxYPoint: Point3d } | undefined {\n if (data.length === 0)\n return undefined;\n const result = { minXPoint: data[0].clone(), maxXPoint: data[0].clone(), minYPoint: data[0].clone(), maxYPoint: data[0].clone() };\n let q;\n for (let i = 1; i < data.length; i++) {\n q = data[i];\n if (q.x < result.minXPoint.x) result.minXPoint.setFromPoint3d(q);\n if (q.x > result.maxXPoint.x) result.maxXPoint.setFromPoint3d(q);\n if (q.y < result.minYPoint.y) result.minYPoint.setFromPoint3d(q);\n if (q.y > result.maxYPoint.y) result.maxYPoint.setFromPoint3d(q);\n }\n return result;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PointHelpers.js","sourceRoot":"","sources":["../../../src/geometry3d/PointHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module CartesianGeometry\n */\nimport { Geometry } from \"../Geometry\";\nimport { Point4d } from \"../geometry4d/Point4d\";\nimport { IndexedXYZCollection, MultiLineStringDataVariant } from \"./IndexedXYZCollection\";\nimport { Plane3dByOriginAndUnitNormal } from \"./Plane3dByOriginAndUnitNormal\";\nimport { Point2d } from \"./Point2dVector2d\";\nimport { Point3dArrayCarrier } from \"./Point3dArrayCarrier\";\nimport { Point3d, Vector3d, XYZ } from \"./Point3dVector3d\";\nimport { PointStringDeepXYZArrayCollector, VariantPointDataStream } from \"./PointStreaming\";\nimport { Transform } from \"./Transform\";\nimport { XAndY, XYAndZ, XYZProps } from \"./XYZProps\";\n\n/**\n *\n * @param numA first candidate -- presumed 0 or positive\n * @param numB second candidate -- may be undefined, invalid if outside closed interval 0..numA\n * @param multiplyBy second candidate multiplier (applied only if candidate is defined)\n */\nfunction selectOptionalClampedMin(numA: number, numB: number | undefined, multiplyBy: number): number {\n\n if (numB !== undefined) {\n const numC = numB * multiplyBy;\n if (numC >= 0 && numC <= numA)\n return numC;\n }\n return numA;\n}\n/**\n * The `NumberArray` class contains static methods that act on arrays of numbers.\n * @public\n */\nexport class NumberArray {\n /** return the sum of values in an array, The summation is done with correction terms which\n * improves last-bit numeric accuracy.\n */\n public static preciseSum(data: number[]): number {\n const n = data.length;\n if (n === 0)\n return 0.0;\n let sum = data[0];\n let c = 0.0;\n let y: number;\n let t: number;\n for (let i = 1; i < n; i++) {\n y = data[i] - c;\n t = sum + y;\n c = (t - sum) - y;\n sum = t;\n }\n return sum;\n }\n /** Return true if arrays have identical counts and equal entries (using `!==` comparison) */\n public static isExactEqual(dataA: any[] | Float64Array | Uint8Array | Uint32Array | undefined, dataB: any[] | Float64Array | Uint8Array | Uint32Array | undefined): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (dataA[i] !== dataB[i])\n return false;\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n /** Return true if arrays have identical counts and entries equal within tolerance */\n public static isAlmostEqual(\n dataA: number[] | Float64Array | undefined,\n dataB: number[] | Float64Array | undefined,\n tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (Math.abs(dataA[i] - dataB[i]) > tolerance)\n return false;\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n\n /** return the sum of numbers in an array. Note that \"PreciseSum\" may be more accurate. */\n public static sum(data: number[] | Float64Array): number {\n let sum = 0;\n for (const x of data) { sum += x; }\n return sum;\n }\n /** test if coordinate x appears (to tolerance by `Geometry.isSameCoordinate`) in this array of numbers */\n public static isCoordinateInArray(x: number, data: number[] | undefined): boolean {\n if (data) {\n for (const y of data) { if (Geometry.isSameCoordinate(x, y)) return true; }\n }\n return false;\n }\n /** Return the max absolute value in a array of numbers. */\n public static maxAbsArray(values: number[]): number {\n const arrLen = values.length;\n if (arrLen === 0) {\n return 0.0;\n }\n let a = Math.abs(values[0]);\n for (let i = 1; i < arrLen; i++) {\n const b = Math.abs(values[i]);\n if (a < b) {\n a = b;\n }\n }\n return a;\n }\n /** return the max absolute value of a pair of numbers */\n public static maxAbsTwo(a1: number, a2: number): number {\n a1 = Math.abs(a1);\n a2 = Math.abs(a2);\n return (a1 > a2) ? a1 : a2;\n }\n /** Return the max absolute difference between corresponding entries in two arrays of numbers\n * * If sizes are mismatched, only the smaller length is tested.\n */\n public static maxAbsDiff(dataA: number[] | Float64Array, dataB: number[] | Float64Array): number {\n let a = 0.0;\n const n = Math.min(dataA.length, dataB.length);\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\n return a;\n }\n\n /** Return the max absolute difference between corresponding entries in two Float64Array\n * * If sizes are mismatched, only the smaller length is tested.\n */\n public static maxAbsDiffFloat64(dataA: Float64Array, dataB: Float64Array): number {\n let a = 0.0;\n const n = Math.min(dataA.length, dataB.length);\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\n return a;\n }\n /**\n * Return an array with indicated start and end points, and maximum step size.\n * @param low first value in returned array\n * @param high last value in returned array\n * @param step max permitted step\n */\n public static createArrayWithMaxStepSize(low: number, high: number, step: number): number[] {\n if (low === high)\n return [low];\n const delta = high - low;\n const numInterval = Math.max(1, Math.floor(Math.abs(delta / step)));\n const result = [];\n result.push(low);\n for (let i = 1; i < numInterval; i++) {\n result.push(low + (i / numInterval) * delta);\n }\n result.push(high);\n return result;\n }\n\n /** Copy numbers from variant sources to number[]. */\n public static create(source: number[] | Float64Array): number[] {\n const result: number[] = [];\n for (const q of source)\n result.push(q);\n return result;\n }\n\n /** Copy number[][]. */\n public static copy2d(source: number[][]): number[][] {\n const result: number[][] = [];\n for (const row of source) {\n const newRow = [];\n for (const entry of row)\n newRow.push(entry);\n result.push(newRow);\n }\n return result;\n }\n\n /** Copy number[][][]. */\n public static copy3d(source: number[][][]): number[][][] {\n const result: number[][][] = [];\n for (const row of source) {\n const newRow = [];\n for (const block of row) {\n const newBlock = [];\n for (const entry of block)\n newBlock.push(entry);\n newRow.push(newBlock);\n }\n result.push(newRow);\n }\n return result;\n }\n\n /** Copy numbers from Float64Array to number[][].\n * @param numPerBlock block size\n */\n public static unpack2d(source: Float64Array, numPerBlock: number): number[][] | undefined {\n if (numPerBlock < 1)\n return undefined;\n return Point3dArray.unpackNumbersToNestedArrays(source, numPerBlock) as number[][];\n }\n\n /** Copy numbers from Float64Array to number[][][].\n * @param numPerRow row size\n * @param numPerBlock block size\n */\n public static unpack3d(source: Float64Array, numPerRow: number, numPerBlock: number): number[][][] | undefined {\n if (numPerBlock < 1 || numPerRow < 1)\n return undefined;\n return Point3dArray.unpackNumbersToNestedArraysIJK(source, numPerBlock, numPerRow) as number[][][];\n }\n\n /** Copy numbers from 1d/2d/3d array to Float64Array. */\n public static pack(source: number[] | number[][] | number[][][]): Float64Array {\n const numRows = source.length;\n let numPerRow = 0;\n let numPerBlock = 0;\n let numCoords = 0;\n if (numRows > 0) {\n numCoords = numRows;\n if (Array.isArray(source[0])) {\n numPerRow = source[0].length;\n if (numPerRow > 0) {\n numCoords *= numPerRow;\n if (Array.isArray(source[0][0])) {\n numPerBlock = source[0][0].length;\n if (numPerBlock > 0)\n numCoords *= numPerBlock;\n }\n }\n }\n }\n const result = new Float64Array(numCoords);\n if (numPerBlock > 0) {\n const src3d = source as number[][][];\n for (let i = 0, c = 0; i < numRows; ++i)\n for (let j = 0; j < numPerRow; ++j)\n for (let k = 0; k < numPerBlock; ++k)\n result[c++] = src3d[i][j][k];\n } else if (numPerRow > 0) {\n const src2d = source as number[][];\n for (let i = 0, c = 0; i < numRows; ++i)\n for (let j = 0; j < numPerRow; ++j)\n result[c++] = src2d[i][j];\n } else if (numRows > 0) {\n const src1d = source as number[];\n for (let i = 0, c = 0; i < numRows; ++i)\n result[c++] = src1d[i];\n }\n return result;\n }\n\n /** Return a copy of the knots array, with multiplicity of first and last knots raised or lowered to expectedMultiplicity. */\n public static cloneWithStartAndEndMultiplicity(knots: number[] | undefined, target0: number, target1: number): number[] {\n const result: number[] = [];\n if (knots === undefined || knots.length === 0)\n return result;\n let multiplicity0 = 1;\n const knot0 = knots[0];\n const knot1 = knots[knots.length - 1];\n for (; multiplicity0 < knots.length && knots[multiplicity0] === knot0;) { multiplicity0++; }\n let multiplicity1 = 1;\n const k1 = knots.length - 1;\n for (; k1 - multiplicity1 >= 0 && knots[k1 - multiplicity1] === knot1;) { multiplicity1++; }\n\n for (let k = 0; k < target0; k++)\n result.push(knot0);\n for (let k = multiplicity0; k + multiplicity1 < knots.length; k++)\n result.push(knots[k]);\n for (let k = 0; k < target1; k++)\n result.push(knot1);\n return result;\n }\n\n /** Compute the linear combination s of the numbers and scales.\n * @param data array of numbers d_i.\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `data`.\n * @return s = sum(d_i * s_i), where i ranges from 0 to min(data.length, scales.length).\n */\n public static linearCombination(data: number[], scales: number[]): number {\n const numTerms = Math.min(data.length, scales.length);\n let sum = 0;\n for (let i = 0; i < numTerms; ++i)\n sum += scales[i] * data[i];\n return sum;\n }\n\n /** Compute the linear combination s of the colors and scales.\n * * The result is another color if the scales are in [0,1] and sum to 1.\n * @param colors array of colors c_i (rgba in first four bytes).\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `colors`.\n * @return s = sum(c_i * s_i), where i ranges from 0 to min(colors.length, scales.length).\n */\n public static linearCombinationOfColors(colors: number[], scales: number[]): number {\n const numTerms = Math.min(colors.length, scales.length);\n const bytes = [0, 0, 0, 0];\n // compute a convex combination of each byte\n for (let iByte = 0, shiftBits = 0; iByte < 4; ++iByte, shiftBits += 8) {\n for (let iTerm = 0; iTerm < numTerms; ++iTerm) {\n const fraction = Geometry.clamp(scales[iTerm], 0, 1); // chop slop\n const colorComponent = (colors[iTerm] >>> shiftBits) & 0xFF;\n bytes[iByte] += fraction * colorComponent;\n }\n bytes[iByte] = (Math.floor(bytes[iByte]) & 0xFF) << shiftBits;\n }\n return bytes[0] | bytes[1] | bytes[2] | bytes[3];\n }\n\n /**\n * Given an array of strictly increasing numbers, find the index of the largest number that is less than or equal\n * to `value`.\n * * Get an initial estimate by proportions of `value` and the first and last entries.\n * * Linear search from there for final value.\n * * For regularly spaced numbers (e.g., `data` is the `_facetStart` indices for a triangulated [[IndexedPolyface]]),\n * the proportional estimate will be immediately correct.\n * @param data the array of strictly increasing numbers\n * @param value the value to search for\n */\n public static searchStrictlyIncreasingNumbers(data: ReadonlyArray<number>, value: number): number | undefined {\n const lastQ = data.length - 1;\n if (lastQ <= 0 || value < 0 || value >= data[lastQ])\n return undefined;\n let q = Math.floor((value * lastQ) / data[lastQ]);\n while (data[q] > value)\n q--;\n while (data[q + 1] <= value)\n q++;\n return q;\n }\n}\n\n/**\n * The `Point2dArray` class contains static methods that act on arrays of 2d points.\n * @public\n */\nexport class Point2dArray {\n /** Return true if arrays have same length and matching coordinates. */\n public static isAlmostEqual(dataA: Point2d[] | Float64Array | undefined, dataB: Point2d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Point2d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 2)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[2 * iPoint], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[2 * iPoint + 1], tolerance))\n return false;\n }\n }\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n /**\n * Return an array containing clones of the Point3d data[]\n * @param data source data\n */\n public static clonePoint2dArray(data: Point2d[]): Point2d[] {\n return data.map((p: Point2d) => p.clone());\n }\n /**\n * Return the number of points when trailing points that match point 0 are excluded.\n * @param data array of XAndY points.\n */\n public static pointCountExcludingTrailingWraparound(data: XAndY[]): number {\n let n = data.length;\n if (n < 2)\n return n;\n const x0 = data[0].x;\n const y0 = data[0].y;\n while (n > 1) {\n if (!Geometry.isSameCoordinate(data[n - 1].x, x0) || !Geometry.isSameCoordinate(data[n - 1].y, y0))\n return n;\n n--;\n }\n return n;\n }\n\n}\n\n/**\n * The `Vector3dArray` class contains static methods that act on arrays of 3d vectors.\n * @public\n */\nexport class Vector3dArray {\n /** Return true if arrays have same length and matching coordinates. */\n public static isAlmostEqual(dataA: Vector3d[] | Float64Array | undefined, dataB: Vector3d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Vector3d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 3)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[3 * iPoint], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[3 * iPoint + 1], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[3 * iPoint + 2], tolerance))\n return false;\n }\n }\n return true;\n }\n return (dataA === undefined && dataB === undefined);\n }\n /**\n * Return an array containing clones of the Vector3d data[]\n * @param data source data\n */\n public static cloneVector3dArray(data: XYAndZ[]): Vector3d[] {\n return data.map((p: XYAndZ) => Vector3d.create(p.x, p.y, p.z));\n }\n}\n\n/**\n * The `Point4dArray` class contains static methods that act on arrays of 4d points.\n * @public\n */\nexport class Point4dArray {\n /**\n * Copy each weighted point and its corresponding weight into a packed buffer.\n * @param data array of weighted xyz\n * @param weights scalar weight array\n * @param result optional destination array. If insufficiently sized, a new array is returned.\n * @return packed weighted point array\n */\n public static packPointsAndWeightsToFloat64Array(data: Point3d[] | Float64Array | number[], weights: number[] | Float64Array, result?: Float64Array): Float64Array | undefined {\n let points: Point3d[] | Float64Array | number[];\n if (Array.isArray(data) && data[0] instanceof Point3d) {\n points = data as Point3d[];\n if (points.length !== weights.length)\n return undefined;\n const numValues = 4 * points.length;\n if (!result || result.length < numValues)\n result = new Float64Array(numValues);\n for (let i = 0, k = 0; k < points.length; k++) {\n result[i++] = points[k].x;\n result[i++] = points[k].y;\n result[i++] = points[k].z;\n result[i++] = weights[k];\n }\n return result;\n }\n points = data as (Float64Array | number[]);\n const numPoints = weights.length;\n if (points.length !== 3 * numPoints)\n return undefined;\n const numValues1 = 4 * numPoints;\n if (!result || result.length < numValues1)\n result = new Float64Array(numValues1);\n for (let i = 0, k = 0; k < numPoints; k++) {\n const k0 = 3 * k;\n result[i++] = points[k0];\n result[i++] = points[k0 + 1];\n result[i++] = points[k0 + 2];\n result[i++] = weights[k];\n }\n return result;\n }\n\n /**\n * Copy 4d points into a packed buffer.\n * @param data array of xyzw\n * @param result optional destination array. If insufficiently sized, a new array is returned.\n * @return packed point array\n */\n public static packToFloat64Array(data: Point4d[], result?: Float64Array): Float64Array {\n const numValues = 4 * data.length;\n if (!result || result.length < numValues)\n result = new Float64Array(numValues);\n let i = 0;\n for (const p of data) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n result[i++] = p.w;\n }\n return result;\n }\n /** unpack from ... to array of Point4d */\n public static unpackToPoint4dArray(data: Float64Array): Point4d[] {\n const result = [];\n for (let i = 0; i + 3 < data.length; i += 4) {\n result.push(Point4d.create(data[i], data[i + 1], data[i + 2], data[i + 3]));\n }\n return result;\n }\n /**\n * Unpack packed 4D data to a Point3d array and an array of weights.\n * * `WeightStyle` of `data` is not assumed. If input data is of form [a,b,c,d], default output arrays will have form [a,b,c] and [d].\n * @param data input 4D points (packed)\n * @param points output 3D data\n * @param weights output weights (w portion of input)\n * @param pointFormatter optional xyz formatter. By default, returns a Point3d created from the xyz portion of the input.\n */\n public static unpackFloat64ArrayToPointsAndWeights(data: Float64Array, points: Point3d[], weights: number[],\n pointFormatter: (x: number, y: number, z: number) => any = (x, y, z) => Point3d.create(x, y, z)) {\n points.length = 0;\n weights.length = 0;\n for (let i = 0; i + 3 < data.length; i += 4) {\n points.push(pointFormatter(data[i], data[i + 1], data[i + 2]));\n weights.push(data[i + 3]);\n }\n }\n private static _workPoint4d = Point4d.create();\n /**\n * Multiply (and replace) each block of 4 values as a Point4d.\n * @param transform transform to apply\n * @param xyzw array of x,y,z,w points.\n */\n public static multiplyInPlace(transform: Transform, xyzw: Float64Array): void {\n const numXYZW = xyzw.length;\n const xyzw1 = Point4dArray._workPoint4d;\n for (let i = 0; i + 3 < numXYZW; i += 4) {\n transform.multiplyXYZW(xyzw[i], xyzw[i + 1], xyzw[i + 2], xyzw[i + 3], xyzw1);\n xyzw[i] = xyzw1.x;\n xyzw[i + 1] = xyzw1.y;\n xyzw[i + 2] = xyzw1.z;\n xyzw[i + 3] = xyzw1.w;\n }\n }\n /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */\n public static isAlmostEqual(dataA: Point4d[] | Float64Array | undefined, dataB: Point4d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Point4d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 4)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[4 * iPoint], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[4 * iPoint + 1], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[4 * iPoint + 2], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].w, numbers[4 * iPoint + 3], tolerance))\n return false;\n }\n }\n return true;\n }\n // if both are null it is equal, otherwise unequal\n return (dataA === undefined && dataB === undefined);\n }\n /** return true iff all xyzw points' altitudes are within tolerance of the plane.*/\n public static isCloseToPlane(data: Point4d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (Array.isArray(data)) {\n for (const xyzw of data) {\n if (Math.abs(plane.altitudeXYZW(xyzw.x, xyzw.y, xyzw.z, xyzw.w)) > tolerance)\n return false;\n }\n } else if (data instanceof Float64Array) {\n const numXYZ = data.length;\n for (let i = 0; i + 2 < numXYZ; i += 4) {\n if (Math.abs(plane.altitudeXYZW(data[i], data[i + 1], data[i + 2], data[i + 3])) > tolerance)\n return false;\n }\n }\n return true;\n }\n\n}\n/**\n * The `Point3dArray` class contains static methods that act on arrays of 3d points.\n * @public\n */\n\nexport class Point3dArray {\n /**\n * Copy 3d points into a packed buffer.\n * @param data array of xyz\n * @param result optional destination array. If insufficiently sized, a new array is returned.\n * @return packed point array\n */\n public static packToFloat64Array(data: Point3d[], result?: Float64Array): Float64Array {\n const numValues = 3 * data.length;\n if (!result || result.length < numValues)\n result = new Float64Array(numValues);\n let i = 0;\n for (const p of data) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n }\n return result;\n }\n /**\n * Copy 3d points into a packed number array.\n * @param data array of xyz\n * @param result optional destination array.\n * @return packed number array\n */\n public static packToNumberArray(data: Point3d[], result?: number[]): number[] {\n const numValues = 3 * data.length;\n if (!result)\n result = Array<number>(numValues);\n result.length = numValues;\n let i = 0;\n for (const p of data) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n }\n return result;\n }\n /**\n * Compute the 8 weights of trilinear mapping\n * By appropriate choice of weights, this can be used for both point and derivative mappings.\n * @param weights preallocated array to receive weights.\n * @param u0 low u weight\n * @param u1 high u weight\n * @param v0 low v weight\n * @param v1 high v weight\n * @param w0 low w weight\n * @param w1 high w weight\n */\n public static evaluateTrilinearWeights(weights: Float64Array, u0: number, u1: number, v0: number, v1: number, w0: number, w1: number) {\n\n weights[0] = u0 * v0 * w0;\n weights[1] = u1 * v0 * w0;\n weights[2] = u0 * v1 * w0;\n weights[3] = u1 * v1 * w0;\n weights[4] = u0 * v0 * w1;\n weights[5] = u1 * v0 * w1;\n weights[6] = u0 * v1 * w1;\n weights[7] = u1 * v1 * w1;\n }\n /**\n * sum the weighted x components from a point array.\n * * weights.length is the number of summed terms\n * * points must have at least that length\n * @param weights\n * @param points\n */\n public static sumWeightedX(weights: Float64Array, points: Point3d[]): number {\n let sum = 0.0;\n const n = weights.length;\n for (let i = 0; i < n; i++)\n sum += weights[i] * points[i].x;\n return sum;\n }\n\n /**\n * sum the weighted x components from a point array.\n * * weights.length is the number of summed terms\n * * points must have at least that length\n * @param weights\n * @param points\n */\n public static sumWeightedY(weights: Float64Array, points: Point3d[]): number {\n let sum = 0.0;\n const n = weights.length;\n for (let i = 0; i < n; i++)\n sum += weights[i] * points[i].y;\n return sum;\n }\n\n /**\n * sum the weighted x components from a point array.\n * * weights.length is the number of summed terms\n * * points must have at least that length\n * @param weights\n * @param points\n */\n public static sumWeightedZ(weights: Float64Array, points: Point3d[]): number {\n let sum = 0.0;\n const n = weights.length;\n for (let i = 0; i < n; i++)\n sum += weights[i] * points[i].z;\n return sum;\n }\n\n private static _weightUVW = new Float64Array(8);\n private static _weightDU = new Float64Array(8);\n private static _weightDV = new Float64Array(8);\n private static _weightDW = new Float64Array(8);\n /**\n * Compute a point by trilinear mapping.\n * @param points array of 8 points at corners, with x index varying fastest.\n * @param result optional result point\n */\n public static evaluateTrilinearPoint(points: Point3d[], u: number, v: number, w: number, result?: Point3d): Point3d {\n if (!result) result = Point3d.create(0, 0, 0);\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\n let a;\n for (let i = 0; i < 8; i++) {\n a = this._weightUVW[i];\n result.x += a * points[i].x;\n result.y += a * points[i].y;\n result.z += a * points[i].z;\n }\n return result;\n }\n /**\n * Compute a point and derivatives wrt uvw by trilinear mapping.\n * * evaluated point is the point part of the transform\n * * u,v,w derivatives are the respective columns of the matrix part of the transform.\n * @param points array of 8 points at corners, with x index varying fastest.\n * @param result optional result transform\n */\n public static evaluateTrilinearDerivativeTransform(points: Point3d[], u: number, v: number, w: number, result?: Transform): Transform {\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\n this.evaluateTrilinearWeights(this._weightDU, -1, 1, 1 - v, v, 1 - w, w);\n this.evaluateTrilinearWeights(this._weightDV, 1 - u, u, -1, 1, 1 - w, w);\n this.evaluateTrilinearWeights(this._weightDW, 1 - u, u, 1 - v, v, -1, 1);\n return Transform.createRowValues(\n this.sumWeightedX(this._weightDU, points), this.sumWeightedX(this._weightDV, points), this.sumWeightedX(this._weightDW, points), this.sumWeightedX(this._weightUVW, points),\n this.sumWeightedY(this._weightDU, points), this.sumWeightedY(this._weightDV, points), this.sumWeightedY(this._weightDW, points), this.sumWeightedY(this._weightUVW, points),\n this.sumWeightedZ(this._weightDU, points), this.sumWeightedZ(this._weightDV, points), this.sumWeightedZ(this._weightDW, points), this.sumWeightedZ(this._weightUVW, points),\n result);\n }\n /** unpack from a number array or Float64Array to an array of `Point3d` */\n public static unpackNumbersToPoint3dArray(data: Float64Array | number[]): Point3d[] {\n const result = [];\n for (let i = 0; i + 2 < data.length; i += 3) {\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\n }\n return result;\n }\n\n /**\n * Return a 2-dimensional array containing all the values of `data` in arrays of numPerBlock\n * @param data simple array of numbers.\n * @param numPerBlock number of values in each block at first level down.\n */\n public static unpackNumbersToNestedArrays(data: Float64Array, numPerBlock: number): any[] {\n const result = [];\n const n = data.length;\n let i = 0;\n let i1 = 0;\n while (i < n) {\n // there is at least one more value for a block\n const row = [];\n i1 = i + numPerBlock;\n if (i1 > n)\n i1 = n;\n for (; i < i1; i++) {\n row.push(data[i]);\n }\n result.push(row);\n }\n return result;\n }\n\n /**\n * Return a 3-dimensional array containing all the values of `data` in rows of numPerRow blocks of size numPerBlock.\n * @param data simple array of numbers\n * @param numPerBlock number of values in each block\n * @param numPerRow number of blocks per row\n */\n public static unpackNumbersToNestedArraysIJK(data: Float64Array, numPerBlock: number, numPerRow: number): any[] {\n const result = [];\n const n = data.length;\n let i = 0;\n let i1 = 0;\n let i2;\n while (i < n) {\n const row = [];\n i2 = i + numPerBlock * numPerRow;\n while (i < i2) {\n const block = [];\n i1 = i + numPerBlock;\n if (i1 > n)\n i1 = n;\n for (; i < i1; i++) {\n block.push(data[i]);\n }\n row.push(block);\n }\n result.push(row);\n }\n return result;\n }\n /** multiply a transform times each x,y,z triple and replace the x,y,z in the packed array */\n public static multiplyInPlace(transform: Transform, xyz: Float64Array): void {\n const xyz1 = Point3d.create();\n const numXYZ = xyz.length;\n for (let i = 0; i + 2 < numXYZ; i += 3) {\n transform.multiplyXYZ(xyz[i], xyz[i + 1], xyz[i + 2], xyz1);\n xyz[i] = xyz1.x;\n xyz[i + 1] = xyz1.y;\n xyz[i + 2] = xyz1.z;\n }\n }\n /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */\n public static isAlmostEqual(dataA: Point3d[] | Float64Array | undefined, dataB: Point3d[] | Float64Array | undefined, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (dataA && dataB) {\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i], tolerance))\n return false;\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\n if (dataA.length !== dataB.length)\n return false;\n for (let i = 0; i < dataA.length; i++)\n if (!dataA[i].isAlmostEqual(dataB[i], tolerance))\n return false;\n } else { // different types\n const points = dataA instanceof Float64Array ? dataB as Point3d[] : dataA;\n const numbers = dataA instanceof Float64Array ? dataA : dataB as Float64Array;\n if (numbers.length !== points.length * 3)\n return false;\n for (let iPoint = 0; iPoint < points.length; ++iPoint) {\n if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[3 * iPoint], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].y, numbers[3 * iPoint + 1], tolerance) ||\n !Geometry.isSameCoordinate(points[iPoint].z, numbers[3 * iPoint + 2], tolerance))\n return false;\n }\n }\n return true;\n }\n // if both are null it is equal, otherwise unequal\n return (dataA === undefined && dataB === undefined);\n }\n\n /** return simple average of all coordinates. (000 if empty array) */\n public static centroid(points: IndexedXYZCollection | Point3d[], result?: Point3d): Point3d {\n if (points instanceof IndexedXYZCollection) {\n result = Point3d.create(0, 0, 0, result);\n const p = Point3d.create();\n if (points.length > 0) {\n for (let i = 0; i < points.length; i++) {\n points.getPoint3dAtCheckedPointIndex(i, p);\n result.x += p.x; result.y += p.y; result.z += p.z;\n }\n result.scaleInPlace(1.0 / points.length);\n }\n return result;\n }\n const carrier = new Point3dArrayCarrier(points);\n return this.centroid(carrier);\n }\n\n /** Return the index of the point most distant from spacePoint */\n public static indexOfMostDistantPoint(points: Point3d[], spacePoint: XYZ, farVector: Vector3d): number | undefined {\n if (points.length === 0)\n return undefined;\n let dMax = -1;\n let d;\n let result = -1;\n for (let i = 0; i < points.length; i++) {\n d = spacePoint.distance(points[i]);\n if (d > dMax) {\n spacePoint.vectorTo(points[i], farVector);\n dMax = d;\n result = i;\n }\n }\n return result;\n }\n /** return the index of the point whose vector from space point has the largest magnitude of cross product with given vector. */\n public static indexOfPointWithMaxCrossProductMagnitude(points: Point3d[], spacePoint: Point3d, vector: Vector3d, farVector: Vector3d): number | undefined {\n if (points.length === 0)\n return undefined;\n let dMax = -1;\n let d;\n let result = -1;\n let vectorAB; // to be reused in loop !!!\n for (let i = 0; i < points.length; i++) {\n vectorAB = spacePoint.vectorTo(points[i], vectorAB);\n d = vectorAB.crossProductMagnitude(vector);\n if (d > dMax) {\n farVector.setFrom(vectorAB);\n dMax = d;\n result = i;\n }\n }\n return result;\n }\n\n /** Return the index of the closest point in the array (full xyz) */\n public static closestPointIndex(data: XYAndZ[], spacePoint: XYAndZ): number {\n let index = -1;\n let dMin = Number.MAX_VALUE;\n let d;\n const x0 = spacePoint.x;\n const y0 = spacePoint.y;\n const z0 = spacePoint.z;\n for (let i = 0; i < data.length; i++) {\n d = Geometry.distanceXYZXYZ(x0, y0, z0, data[i].x, data[i].y, data[i].z);\n if (d < dMin) {\n index = i;\n dMin = d;\n }\n }\n return index;\n }\n /** return true iff all points' altitudes are within tolerance of the plane.*/\n public static isCloseToPlane(data: Point3d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\n if (Array.isArray(data)) {\n let xyz;\n for (xyz of data) {\n if (Math.abs(plane.altitude(xyz)) > tolerance)\n return false;\n }\n } else if (data instanceof Float64Array) {\n const numXYZ = data.length;\n for (let i = 0; i + 2 < numXYZ; i += 3) {\n if (Math.abs(plane.altitudeXYZ(data[i], data[i + 1], data[i + 2])) > tolerance)\n return false;\n }\n }\n return true;\n }\n\n /**\n * Sum lengths of edges.\n * @param data points.\n */\n public static sumEdgeLengths(data: Point3d[] | Float64Array, addClosureEdge: boolean = false, maxPointsToUse?: number): number {\n let sum = 0.0;\n\n if (Array.isArray(data)) {\n const n = selectOptionalClampedMin(data.length, maxPointsToUse, 1) - 1;\n for (let i = 0; i < n; i++) sum += data[i].distance(data[i + 1]);\n if (addClosureEdge && n > 0)\n sum += data[0].distance(data[n]);\n\n } else if (data instanceof Float64Array) {\n const numXYZ = selectOptionalClampedMin(data.length, maxPointsToUse, 3);\n let i = 0;\n for (; i + 5 < numXYZ; i += 3) { // final i points at final point x\n sum += Geometry.hypotenuseXYZ(data[i + 3] - data[i],\n data[i + 4] - data[i + 1],\n data[i + 5] - data[i + 2]);\n }\n if (addClosureEdge && i >= 3) {\n sum += Geometry.hypotenuseXYZ(data[0] - data[i],\n data[1] - data[i + 1],\n data[2] - data[i + 2]);\n }\n }\n return sum;\n }\n\n /**\n * Count the number of points, but ...\n * * ignore trailing duplicates of point 0.\n * * return 0 if there are any duplicates within the remaining points.\n * @param points points to examine.\n */\n public static countNonDuplicates(points: Point3d[], tolerance: number = Geometry.smallMetricDistance): number {\n let n = points.length;\n // strip of (allow) trailing duplicates ...\n while (n > 1) {\n if (points[0].isAlmostEqual(points[n - 1], tolerance))\n n--;\n else\n break;\n }\n for (let i = 0; i + 1 < n; i++)\n if (points[i].isAlmostEqual(points[i + 1], tolerance))\n return 0;\n return n;\n }\n\n /**\n * Return an array containing clones of the Point3d data[]\n * @param data source data\n */\n public static clonePoint3dArray(data: XYZProps[] | Float64Array): Point3d[] {\n const result: Point3d[] = [];\n if (data.length === 0)\n return result;\n if (data instanceof Float64Array) {\n for (let i = 0; i + 2 < data.length; i += 3)\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\n return result;\n }\n for (const p of data) {\n if (Array.isArray(p))\n result.push(Point3d.create(p[0], p[1], p[2]));\n else\n result.push(Point3d.create(p.x, p.y, p.z));\n }\n return result;\n }\n /**\n * Return an array containing Point2d with xy parts of each Point3d\n * @param data source data\n */\n public static clonePoint2dArray(data: XYAndZ[]): Point2d[] {\n return data.map((p: XYAndZ) => Point2d.create(p.x, p.y));\n }\n /**\n * clone points in the input array, inserting points within each edge to limit edge length.\n * @param points array of points\n * @param maxEdgeLength max length of an edge\n */\n public static cloneWithMaxEdgeLength(points: Point3d[], maxEdgeLength: number): Point3d[] {\n if (points.length === 0)\n return [];\n const result = [points[0]];\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1].distance(points[i]);\n const n = Geometry.stepCount(maxEdgeLength, a, 1);\n for (let k = 1; k < n; k++)\n result.push(points[i - 1].interpolate(k / n, points[i]));\n result.push(points[i]);\n\n }\n return result;\n }\n /** Pack isolated x,y,z args as a json `[x,y,z]` */\n private static xyzToArray(x: number, y: number, z: number): number[] { return [x, y, z]; }\n\n /**\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as arrays of 3 numbers `[1,2,3]`\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\n */\n public static cloneDeepJSONNumberArrays(data: MultiLineStringDataVariant): number[][] {\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => this.xyzToArray(x, y, z));\n VariantPointDataStream.streamXYZ(data, collector);\n return collector.claimResult();\n }\n /**\n * clone an array of [[XYZProps]] data, specifically as arrays of 3 numbers\n */\n public static cloneXYZPropsAsNumberArray(data: XYZProps[]): number[][] {\n // data is an array ... each member is either Point3d or [x,y,z]\n const result = [];\n for (const p of data) {\n if (p instanceof Point3d) {\n result.push([p.x, p.y, p.z]);\n } else if (Array.isArray(p)) {\n const x = p.length > 0 ? p[0] : 0.0;\n const y = p.length > 1 ? p[1] : 0.0;\n const z = p.length > 2 ? p[2] : 0.0;\n result.push([x, y, z]);\n } else {\n const x = p.x !== undefined ? p.x : 0.0;\n const y = p.y !== undefined ? p.y : 0.0;\n const z = p.z !== undefined ? p.z : 0.0;\n result.push([x, y, z]);\n }\n }\n return result;\n }\n /**\n * clone an array of [[XYZProps]] data, specifically as flattened array of number\n */\n public static cloneXYZPropsAsFloat64Array(data: XYZProps[]): Float64Array {\n const result = new Float64Array(data.length * 3);\n let i = 0;\n for (const p of data) {\n if (p instanceof Point3d) {\n result[i++] = p.x;\n result[i++] = p.y;\n result[i++] = p.z;\n } else if (Array.isArray(p)) {\n result[i++] = p.length > 0 ? p[0] : 0.0;\n result[i++] = p.length > 1 ? p[1] : 0.0;\n result[i++] = p.length > 2 ? p[2] : 0.0;\n } else {\n result[i++] = p.x !== undefined ? p.x : 0.0;\n result[i++] = p.y !== undefined ? p.y : 0.0;\n result[i++] = p.z !== undefined ? p.z : 0.0;\n }\n }\n return result;\n }\n\n /**\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as `Point3d`.\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\n */\n public static cloneDeepXYZPoint3dArrays(data: MultiLineStringDataVariant): any[] {\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => Point3d.create(x, y, z));\n VariantPointDataStream.streamXYZ(data, collector);\n return collector.claimResult();\n }\n\n /**\n * Return perpendicular distance from points[indexB] to the segment from points[indexA] to points[indexC].\n * * Extrapolation options when the projection is outside of the fraction range [0,1] are:\n * * false ==> return distance to closest endpoint\n * * true ==> return distance to extended line segment\n * * There is no index checking!\n */\n public static distanceIndexedPointBToSegmentAC(points: Point3d[], indexA: number, indexB: number, indexC: number, extrapolate: boolean): number {\n const vectorU = Vector3d.createStartEnd(points[indexA], points[indexC]);\n const vectorV = Vector3d.createStartEnd(points[indexA], points[indexB]);\n const uDotU = vectorU.dotProduct(vectorU);\n const uDotV = vectorU.dotProduct(vectorV);\n const fraction = Geometry.conditionalDivideFraction(uDotV, uDotU);\n if (fraction === undefined)\n return vectorV.magnitude(); // AC is degenerate; return ||B-A||\n if (!extrapolate) {\n if (fraction > 1.0)\n return points[indexB].distance(points[indexC]); // return ||B-C||\n if (fraction < 0.0)\n return vectorV.magnitude(); // return ||B-A||\n }\n // return distance to projection on (extended) segment\n const h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;\n // h2 should never be negative except for quirky tolerance...\n return h2 <= 0.0 ? 0.0 : Math.sqrt(h2);\n }\n\n /**\n * Computes the hull of the XY projection of points.\n * @param points input points, z-coordinates ignored.\n * @param hullPoints (output) points on the convex hull (cloned from input points).\n * @param insidePoints (output) points not on the convex hull (cloned from input points).\n * @param addClosurePoint whether to append the first hull point to `hullPoints`.\n */\n public static computeConvexHullXY(\n points: Point3d[], hullPoints: Point3d[], insidePoints: Point3d[], addClosurePoint: boolean = false,\n ): void {\n hullPoints.length = 0;\n insidePoints.length = 0;\n let n = points.length;\n // get deep copy\n const xy1: Point3d[] = points.slice(0, n);\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\n if (n < 3) {\n for (const p of xy1)\n hullPoints.push(p);\n if (addClosurePoint && xy1.length > 0)\n hullPoints.push(xy1[0]);\n return;\n }\n hullPoints.push(xy1[0]); // this is sure to stay\n hullPoints.push(xy1[1]); // this one can be removed in loop.\n let numInside = 0;\n // first sweep creates upper hull\n for (let i = 2; i < n; i++) {\n const candidate = xy1[i];\n let top = hullPoints.length - 1;\n while (top >= 1 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\n xy1[numInside++] = hullPoints[top];\n top--;\n hullPoints.pop();\n }\n hullPoints.push(candidate);\n }\n const i0 = hullPoints.length - 1;\n xy1.length = numInside;\n xy1.push(hullPoints[0]); // force first point to be reconsidered as final hull point.\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\n n = xy1.length;\n // xy1.back () is already on stack.\n hullPoints.push(xy1[n - 1]);\n for (let i = n - 1; i-- > 0;) {\n const candidate = xy1[i];\n let top = hullPoints.length - 1;\n while (top > i0 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\n insidePoints.push(hullPoints[top]);\n top--;\n hullPoints.pop();\n }\n if (i > 0) // don't replicate start\n hullPoints.push(candidate);\n }\n if (addClosurePoint)\n hullPoints.push(hullPoints[0]);\n }\n /**\n * Return (clones of) points in data[] with min and max x and y parts.\n * @param data array to examine.\n */\n public static minMaxPoints(data: Point3d[]): { minXPoint: Point3d, maxXPoint: Point3d, minYPoint: Point3d, maxYPoint: Point3d } | undefined {\n if (data.length === 0)\n return undefined;\n const result = { minXPoint: data[0].clone(), maxXPoint: data[0].clone(), minYPoint: data[0].clone(), maxYPoint: data[0].clone() };\n let q;\n for (let i = 1; i < data.length; i++) {\n q = data[i];\n if (q.x < result.minXPoint.x) result.minXPoint.setFromPoint3d(q);\n if (q.x > result.maxXPoint.x) result.maxXPoint.setFromPoint3d(q);\n if (q.y < result.minYPoint.y) result.minYPoint.setFromPoint3d(q);\n if (q.y > result.maxYPoint.y) result.maxYPoint.setFromPoint3d(q);\n }\n return result;\n }\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import { PlaneAltitudeEvaluator, PolygonLocation } from "../Geometry";
|
|
|
2
2
|
import { Matrix4d } from "../geometry4d/Matrix4d";
|
|
3
3
|
import { GrowableXYZArray } from "./GrowableXYZArray";
|
|
4
4
|
import { IndexedReadWriteXYZCollection, IndexedXYZCollection } from "./IndexedXYZCollection";
|
|
5
|
+
import { Plane3d } from "./Plane3d";
|
|
5
6
|
import { Point2d } from "./Point2dVector2d";
|
|
6
7
|
import { Point3d, Vector3d } from "./Point3dVector3d";
|
|
7
8
|
import { Range1d, Range3d } from "./Range";
|
|
@@ -140,6 +141,37 @@ export declare class CutLoopMergeContext {
|
|
|
140
141
|
*/
|
|
141
142
|
sortAndMergeLoops(): void;
|
|
142
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Bundle of options for [[PolygonOps.volumeBetweenPolygonAndPlane]].
|
|
146
|
+
* @public
|
|
147
|
+
* @see [[VolumeBetweenPolygonAndPlaneOutput]]
|
|
148
|
+
*/
|
|
149
|
+
export interface VolumeBetweenPolygonAndPlaneOptions {
|
|
150
|
+
/** Whether to skip computation of the area moments. If `true` only volume and area are returned. Default is `false`. */
|
|
151
|
+
skipMoments?: boolean;
|
|
152
|
+
/** Work point. If `skipMoments` is undefined/false, this point is returned as the area moment origin. */
|
|
153
|
+
workPoint0?: Point3d;
|
|
154
|
+
/** Another work point. */
|
|
155
|
+
workPoint1?: Point3d;
|
|
156
|
+
/** Work vector. */
|
|
157
|
+
workVector?: Vector3d;
|
|
158
|
+
/** Work matrix. If `skipMoments` is undefined/false, this matrix is returned as the area moment products. */
|
|
159
|
+
workMatrix?: Matrix4d;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Bundle of output data for [[PolygonOps.volumeBetweenPolygonAndPlane]].
|
|
163
|
+
* @public
|
|
164
|
+
*/
|
|
165
|
+
export interface VolumeBetweenPolygonAndPlaneOutput {
|
|
166
|
+
/** Six times the signed volume of the truncated prism between the polygon and the plane. */
|
|
167
|
+
volume6: number;
|
|
168
|
+
/** Two times the signed area of the polygon's projection onto the plane. */
|
|
169
|
+
area2: number;
|
|
170
|
+
/** Origin of the facet used to accumulate `products`. */
|
|
171
|
+
origin?: Point3d;
|
|
172
|
+
/** Raw accumulated second moment area products of the polygon's projection onto the plane. */
|
|
173
|
+
products?: Matrix4d;
|
|
174
|
+
}
|
|
143
175
|
/**
|
|
144
176
|
* Various static methods to perform computations on an array of points interpreted as a polygon.
|
|
145
177
|
* @public
|
|
@@ -240,6 +272,20 @@ export declare class PolygonOps {
|
|
|
240
272
|
* * `frameType===3` has vectors from origin to 3 points in the triangle. (Used for volume integrals)
|
|
241
273
|
*/
|
|
242
274
|
private static addSecondMomentTransformedProducts;
|
|
275
|
+
/**
|
|
276
|
+
* Compute the signed volume of the truncated prism between a facet and a plane.
|
|
277
|
+
* * Useful for parallel algorithms.
|
|
278
|
+
* @param facetPoints input 3D polygon; on return the points are projected onto the plane. Wraparound point is optional.
|
|
279
|
+
* @param plane infinite plane bounding volume between the facet and (virtual) side facets perpendicular to the plane (unmodified).
|
|
280
|
+
* @param options optional flags and pre-allocated temporary storage.
|
|
281
|
+
* @returns computed data for this facet:
|
|
282
|
+
* * `volume6`: six times the signed volume of the truncated prism between the facet and the plane.
|
|
283
|
+
* * `area2`: two times the signed area of the facet's projection onto the plane.
|
|
284
|
+
* * `origin`: origin of the facet used to accumulate area moments.
|
|
285
|
+
* * `products`: raw accumulated second moment area products of the facet's projection onto the plane.
|
|
286
|
+
* @see [[PolyfaceQuery.sumVolumeBetweenFacetsAndPlane]]
|
|
287
|
+
*/
|
|
288
|
+
static volumeBetweenPolygonAndPlane(facetPoints: GrowableXYZArray, plane: Plane3d, options?: VolumeBetweenPolygonAndPlaneOptions): VolumeBetweenPolygonAndPlaneOutput;
|
|
243
289
|
/** Test the direction of turn at the vertices of the polygon, ignoring z-coordinates.
|
|
244
290
|
* * For a polygon without self-intersections and successive colinear edges, this is a convexity and orientation test: all positive is convex and counterclockwise, all negative is convex and clockwise.
|
|
245
291
|
* * Beware that a polygon which turns through more than a full turn can cross itself and close, but is not convex.
|
|
@@ -276,8 +322,9 @@ export declare class PolygonOps {
|
|
|
276
322
|
*/
|
|
277
323
|
static orientLoopsCCWForOutwardNormalInPlace(loops: IndexedReadWriteXYZCollection | IndexedReadWriteXYZCollection[], outwardNormal: Vector3d): number;
|
|
278
324
|
/**
|
|
279
|
-
* Reverse and reorder loops in the xy-plane for
|
|
280
|
-
* @param loops multiple polygons in any order and orientation, z-coordinates ignored
|
|
325
|
+
* Reverse and reorder loops in the xy-plane for consistent orientation and containment.
|
|
326
|
+
* @param loops multiple polygons in any order and orientation, z-coordinates ignored.
|
|
327
|
+
* * For best results, all overlaps should be containments, i.e., loop boundaries can touch, but should not cross.
|
|
281
328
|
* @returns array of arrays of polygons that capture the input pointers. In each first level array:
|
|
282
329
|
* * The first polygon is an outer loop, oriented counterclockwise.
|
|
283
330
|
* * Any subsequent polygons are holes of the outer loop, oriented clockwise.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolygonOps.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/PolygonOps.ts"],"names":[],"mappings":"AAUA,OAAO,EAAuB,sBAAsB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"PolygonOps.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/PolygonOps.ts"],"names":[],"mappings":"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"}
|
|
@@ -684,6 +684,41 @@ export class PolygonOps {
|
|
|
684
684
|
}
|
|
685
685
|
}
|
|
686
686
|
}
|
|
687
|
+
/**
|
|
688
|
+
* Compute the signed volume of the truncated prism between a facet and a plane.
|
|
689
|
+
* * Useful for parallel algorithms.
|
|
690
|
+
* @param facetPoints input 3D polygon; on return the points are projected onto the plane. Wraparound point is optional.
|
|
691
|
+
* @param plane infinite plane bounding volume between the facet and (virtual) side facets perpendicular to the plane (unmodified).
|
|
692
|
+
* @param options optional flags and pre-allocated temporary storage.
|
|
693
|
+
* @returns computed data for this facet:
|
|
694
|
+
* * `volume6`: six times the signed volume of the truncated prism between the facet and the plane.
|
|
695
|
+
* * `area2`: two times the signed area of the facet's projection onto the plane.
|
|
696
|
+
* * `origin`: origin of the facet used to accumulate area moments.
|
|
697
|
+
* * `products`: raw accumulated second moment area products of the facet's projection onto the plane.
|
|
698
|
+
* @see [[PolyfaceQuery.sumVolumeBetweenFacetsAndPlane]]
|
|
699
|
+
*/
|
|
700
|
+
static volumeBetweenPolygonAndPlane(facetPoints, plane, options) {
|
|
701
|
+
let origin;
|
|
702
|
+
let products;
|
|
703
|
+
let singleProjectedFacetAreaTimes2 = 0.0;
|
|
704
|
+
let signedTruncatedPrismVolumeTimes6 = 0.0;
|
|
705
|
+
const h0 = facetPoints.evaluateUncheckedIndexPlaneAltitude(0, plane);
|
|
706
|
+
for (let i = 1; i + 1 < facetPoints.length; i++) {
|
|
707
|
+
const triangleNormal = facetPoints.crossProductIndexIndexIndex(0, i, i + 1, options?.workVector);
|
|
708
|
+
const hA = facetPoints.evaluateUncheckedIndexPlaneAltitude(i, plane);
|
|
709
|
+
const hB = facetPoints.evaluateUncheckedIndexPlaneAltitude(i + 1, plane);
|
|
710
|
+
const signedProjectedTriangleAreaTimes2 = triangleNormal.dotProductXYZ(plane.normalX(), plane.normalY(), plane.normalZ());
|
|
711
|
+
singleProjectedFacetAreaTimes2 += signedProjectedTriangleAreaTimes2;
|
|
712
|
+
signedTruncatedPrismVolumeTimes6 += signedProjectedTriangleAreaTimes2 * (h0 + hA + hB);
|
|
713
|
+
}
|
|
714
|
+
if (!options?.skipMoments) {
|
|
715
|
+
origin = facetPoints.getPoint3dAtUncheckedPointIndex(0, options?.workPoint0);
|
|
716
|
+
products = Matrix4d.createZero(options?.workMatrix);
|
|
717
|
+
facetPoints.mapPoint((x, y, z) => plane.projectXYZToPlane(x, y, z, options?.workPoint1));
|
|
718
|
+
PolygonOps.addSecondMomentAreaProducts(facetPoints, origin, products);
|
|
719
|
+
}
|
|
720
|
+
return { volume6: signedTruncatedPrismVolumeTimes6, area2: singleProjectedFacetAreaTimes2, origin, products };
|
|
721
|
+
}
|
|
687
722
|
/** Test the direction of turn at the vertices of the polygon, ignoring z-coordinates.
|
|
688
723
|
* * For a polygon without self-intersections and successive colinear edges, this is a convexity and orientation test: all positive is convex and counterclockwise, all negative is convex and clockwise.
|
|
689
724
|
* * Beware that a polygon which turns through more than a full turn can cross itself and close, but is not convex.
|
|
@@ -837,8 +872,9 @@ export class PolygonOps {
|
|
|
837
872
|
return numReverse;
|
|
838
873
|
}
|
|
839
874
|
/**
|
|
840
|
-
* Reverse and reorder loops in the xy-plane for
|
|
841
|
-
* @param loops multiple polygons in any order and orientation, z-coordinates ignored
|
|
875
|
+
* Reverse and reorder loops in the xy-plane for consistent orientation and containment.
|
|
876
|
+
* @param loops multiple polygons in any order and orientation, z-coordinates ignored.
|
|
877
|
+
* * For best results, all overlaps should be containments, i.e., loop boundaries can touch, but should not cross.
|
|
842
878
|
* @returns array of arrays of polygons that capture the input pointers. In each first level array:
|
|
843
879
|
* * The first polygon is an outer loop, oriented counterclockwise.
|
|
844
880
|
* * Any subsequent polygons are holes of the outer loop, oriented clockwise.
|