@itwin/core-geometry 5.1.0-dev.3 → 5.1.0-dev.32
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 +26 -1
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.d.ts +8 -0
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +10 -0
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.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/BSplineCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.d.ts +2 -1
- package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js +2 -1
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.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/ClipPrimitive.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/ClipVector.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/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/core-geometry.d.ts +1 -0
- package/lib/cjs/core-geometry.d.ts.map +1 -1
- package/lib/cjs/core-geometry.js +1 -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/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +33 -1
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +79 -0
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts +24 -24
- package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +24 -24
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +2 -2
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveTypes.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +10 -5
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +9 -5
- package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js +27 -11
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.d.ts +15 -21
- package/lib/cjs/curve/RegionMomentsXY.d.ts.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.js +39 -59
- package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +82 -39
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +154 -48
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +27 -26
- package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js +70 -54
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +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/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.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/SumLengthsContext.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/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts +24 -17
- package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js +31 -17
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.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.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +7 -2
- package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js +20 -2
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +2 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js +7 -3
- package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.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/Point2dArrayCarrier.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/Point3dArrayCarrier.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 +7 -8
- 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/PointStreaming.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +57 -9
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +57 -17
- 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.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js +11 -23
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +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/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/cjs/geometry4d/Map4d.js.map +1 -1
- package/lib/cjs/geometry4d/Matrix4d.d.ts +7 -7
- package/lib/cjs/geometry4d/Matrix4d.d.ts.map +1 -1
- package/lib/cjs/geometry4d/Matrix4d.js +9 -9
- package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
- package/lib/cjs/geometry4d/MomentData.d.ts +32 -34
- package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
- package/lib/cjs/geometry4d/MomentData.js +56 -57
- package/lib/cjs/geometry4d/MomentData.js.map +1 -1
- package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/cjs/geometry4d/Point4d.d.ts +7 -4
- package/lib/cjs/geometry4d/Point4d.d.ts.map +1 -1
- package/lib/cjs/geometry4d/Point4d.js +26 -15
- package/lib/cjs/geometry4d/Point4d.js.map +1 -1
- package/lib/cjs/numerics/BandedSystem.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/ClusterableArray.js.map +1 -1
- package/lib/cjs/numerics/Complex.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/Range1dArray.js.map +1 -1
- package/lib/cjs/numerics/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/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/cjs/numerics/UnionFind.js.map +1 -1
- package/lib/cjs/numerics/UsageSums.js.map +1 -1
- package/lib/cjs/polyface/AuxData.js.map +1 -1
- package/lib/cjs/polyface/BoxTopology.js.map +1 -1
- package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
- package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/cjs/polyface/FacetOrientation.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/GreedyTriangulationBetweenLineStrings.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 +47 -32
- package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/cjs/polyface/Polyface.d.ts +17 -3
- package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
- package/lib/cjs/polyface/Polyface.js +16 -0
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
- 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.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +116 -75
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +312 -228
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.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/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
- package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.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/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/cjs/serialization/DeepCompare.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js +2 -2
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.d.ts +2 -3
- package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
- package/lib/cjs/solid/LinearSweep.js +2 -3
- 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.js.map +1 -1
- package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.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.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +1 -0
- package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -0
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.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.js.map +1 -1
- package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
- package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.d.ts +8 -0
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +10 -0
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.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/BSplineCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.d.ts +2 -1
- package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js +2 -1
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.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/ClipPrimitive.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/ClipVector.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/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/esm/core-geometry.d.ts +1 -0
- package/lib/esm/core-geometry.d.ts.map +1 -1
- package/lib/esm/core-geometry.js +1 -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/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +33 -1
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +79 -0
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveExtendMode.js.map +1 -1
- package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts +24 -24
- package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +24 -24
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +2 -2
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/CurveProcessor.js.map +1 -1
- package/lib/esm/curve/CurveTypes.js.map +1 -1
- package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +10 -5
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/Query/InOutTests.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.d.ts +9 -5
- package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js +27 -11
- package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.d.ts +15 -21
- package/lib/esm/curve/RegionMomentsXY.d.ts.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.js +39 -59
- package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +82 -39
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +155 -49
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +27 -26
- package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js +70 -54
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +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/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.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/SumLengthsContext.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/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts +24 -17
- package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js +31 -17
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.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.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.d.ts +7 -2
- package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.js +20 -2
- package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +2 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.js +7 -3
- package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Plane3d.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/Point2dArrayCarrier.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/Point3dArrayCarrier.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 +7 -8
- 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/PointStreaming.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +57 -9
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +57 -17
- 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.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js +11 -23
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/esm/geometry3d/Segment1d.js.map +1 -1
- package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +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/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/esm/geometry3d/XYZProps.js.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/esm/geometry4d/Map4d.js.map +1 -1
- package/lib/esm/geometry4d/Matrix4d.d.ts +7 -7
- package/lib/esm/geometry4d/Matrix4d.d.ts.map +1 -1
- package/lib/esm/geometry4d/Matrix4d.js +9 -9
- package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
- package/lib/esm/geometry4d/MomentData.d.ts +32 -34
- package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
- package/lib/esm/geometry4d/MomentData.js +56 -57
- package/lib/esm/geometry4d/MomentData.js.map +1 -1
- package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/esm/geometry4d/Point4d.d.ts +7 -4
- package/lib/esm/geometry4d/Point4d.d.ts.map +1 -1
- package/lib/esm/geometry4d/Point4d.js +26 -15
- package/lib/esm/geometry4d/Point4d.js.map +1 -1
- package/lib/esm/numerics/BandedSystem.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/ClusterableArray.js.map +1 -1
- package/lib/esm/numerics/Complex.js.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
- package/lib/esm/numerics/PolarData.js.map +1 -1
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/numerics/Range1dArray.js.map +1 -1
- package/lib/esm/numerics/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/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/esm/numerics/UnionFind.js.map +1 -1
- package/lib/esm/numerics/UsageSums.js.map +1 -1
- package/lib/esm/polyface/AuxData.js.map +1 -1
- package/lib/esm/polyface/BoxTopology.js.map +1 -1
- package/lib/esm/polyface/FacetFaceData.js.map +1 -1
- package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/esm/polyface/FacetOrientation.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/GreedyTriangulationBetweenLineStrings.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 +47 -32
- package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/esm/polyface/Polyface.d.ts +17 -3
- package/lib/esm/polyface/Polyface.d.ts.map +1 -1
- package/lib/esm/polyface/Polyface.js +16 -0
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
- 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.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +116 -75
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +313 -229
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/RangeLengthData.js.map +1 -1
- package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeNode.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/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
- package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.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/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/esm/serialization/DeepCompare.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js +2 -2
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
- package/lib/esm/solid/Box.js.map +1 -1
- package/lib/esm/solid/Cone.js.map +1 -1
- package/lib/esm/solid/LinearSweep.d.ts +2 -3
- package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
- package/lib/esm/solid/LinearSweep.js +2 -3
- 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.js.map +1 -1
- package/lib/esm/solid/SolidPrimitive.js.map +1 -1
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.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.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +1 -0
- package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -0
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/MaskManager.js.map +1 -1
- package/lib/esm/topology/Merging.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.js.map +1 -1
- package/lib/esm/topology/SignedDataSummary.js.map +1 -1
- package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -16,8 +16,8 @@ import { Matrix4d } from "./Matrix4d";
|
|
|
16
16
|
* * e.g. entry 03 is summed x.
|
|
17
17
|
* * In this level:
|
|
18
18
|
* * the `absoluteQuantity` member is undefined.
|
|
19
|
-
* * the `localToWorldMap` and `radiiOfGyration` are created
|
|
20
|
-
* * Second level: after a call to inertiaProductsToPrincipalAxes
|
|
19
|
+
* * the `localToWorldMap` and `radiiOfGyration` are created but have undefined contents.
|
|
20
|
+
* * Second level: after a call to `inertiaProductsToPrincipalAxes`, the `localToWorldMap`, `absoluteQuantity` and
|
|
21
21
|
* `radiiOfGyration` are filled in.
|
|
22
22
|
* @public
|
|
23
23
|
*/
|
|
@@ -37,11 +37,20 @@ export declare class MomentData {
|
|
|
37
37
|
* * This set up with its inverse already constructed.
|
|
38
38
|
*/
|
|
39
39
|
localToWorldMap: Transform;
|
|
40
|
+
/** Radii of gyration (square roots of principal second moments). */
|
|
41
|
+
radiusOfGyration: Vector3d;
|
|
42
|
+
/**
|
|
43
|
+
* Principal quantity (e.g. length, area, or volume). This is undefined in raw moments, and becomes defined by
|
|
44
|
+
* inertiaProductsToPrincipalAxes.
|
|
45
|
+
*/
|
|
46
|
+
absoluteQuantity?: number;
|
|
40
47
|
private static _vectorA?;
|
|
41
48
|
private static _vectorB?;
|
|
42
49
|
private static _vectorC?;
|
|
43
50
|
private _point0;
|
|
44
51
|
private _point1;
|
|
52
|
+
/** Constructor. */
|
|
53
|
+
private constructor();
|
|
45
54
|
/**
|
|
46
55
|
* Return the lower-right (3,3) entry in the sums.
|
|
47
56
|
* * This is the quantity (i.e. length, area, or volume) summed.
|
|
@@ -59,15 +68,6 @@ export declare class MomentData {
|
|
|
59
68
|
setOriginFromGrowableXYZArrayIfNeeded(points: GrowableXYZArray): void;
|
|
60
69
|
/** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */
|
|
61
70
|
setOriginXYZIfNeeded(x: number, y: number, z: number): void;
|
|
62
|
-
/** Radii of gyration (square roots of principal second moments). */
|
|
63
|
-
radiusOfGyration: Vector3d;
|
|
64
|
-
/**
|
|
65
|
-
* Principal quantity (e.g. length, area, or volume). This is undefined in raw moments, and becomes defined by
|
|
66
|
-
* inertiaProductsToPrincipalAxes.
|
|
67
|
-
*/
|
|
68
|
-
absoluteQuantity?: number;
|
|
69
|
-
/** Constructor. */
|
|
70
|
-
private constructor();
|
|
71
71
|
/**
|
|
72
72
|
* Create moments with optional origin.
|
|
73
73
|
* * Origin and needOrigin are quirky.
|
|
@@ -95,7 +95,8 @@ export declare class MomentData {
|
|
|
95
95
|
* * Hence x axis is long direction.
|
|
96
96
|
* * Hence planar data generates large moment as Z.
|
|
97
97
|
* @param origin The origin used for the inertia products.
|
|
98
|
-
* @param inertiaProducts The inertia products: sums or integrals of
|
|
98
|
+
* @param inertiaProducts The inertia products: sums or integrals of
|
|
99
|
+
* [xx,xy,xz,xw; yx,yy,yz,yw; zx,zy,zz,zw; wx,wy,wz,w].
|
|
99
100
|
*/
|
|
100
101
|
static inertiaProductsToPrincipalAxes(origin: XYZ, inertiaProducts: Matrix4d): MomentData | undefined;
|
|
101
102
|
/**
|
|
@@ -122,43 +123,40 @@ export declare class MomentData {
|
|
|
122
123
|
shiftOriginAndSumsToCentroidOfSums(): boolean;
|
|
123
124
|
/**
|
|
124
125
|
* Revise the accumulated sums.
|
|
125
|
-
* *
|
|
126
|
-
* *
|
|
127
|
-
|
|
126
|
+
* * Add (ax,ay,az) to the origin coordinates.
|
|
127
|
+
* * Apply the negative translation to the sums.
|
|
128
|
+
*/
|
|
128
129
|
shiftOriginAndSumsByXYZ(ax: number, ay: number, az: number): void;
|
|
129
130
|
/** Revise the accumulated sums so they are based at a specified origin. */
|
|
130
131
|
shiftOriginAndSumsToNewOrigin(newOrigin: XYAndZ): void;
|
|
131
132
|
/**
|
|
132
|
-
* Compute moments of a triangle from the origin
|
|
133
|
-
*
|
|
134
|
-
* * If `pointA` is undefined, use `this.origin` as pointA
|
|
135
|
-
|
|
136
|
-
*/
|
|
133
|
+
* Compute moments of a triangle from the origin. Accumulate them to `this.sums`.
|
|
134
|
+
* * If `this.needOrigin` is set, `this.origin` is set to `pointB`.
|
|
135
|
+
* * If `pointA` is undefined, use `this.origin` as `pointA`.
|
|
136
|
+
*/
|
|
137
137
|
accumulateTriangleMomentsXY(pointA: XAndY | undefined, pointB: XAndY, pointC: XAndY): void;
|
|
138
|
-
/** Add scaled outer product of (4d, unit weight) point to this.sums
|
|
138
|
+
/** Add scaled outer product of (4d, unit weight) point to `this.sums`. */
|
|
139
139
|
accumulateScaledOuterProduct(point: XYAndZ, scaleFactor: number): void;
|
|
140
140
|
/** Accumulate wire moment integral from pointA to pointB */
|
|
141
141
|
accumulateLineMomentsXYZ(pointA: Point3d, pointB: Point3d): void;
|
|
142
142
|
/**
|
|
143
|
-
* Compute moments of triangles from a base point to the given linestring.
|
|
144
|
-
*
|
|
145
|
-
* * If `
|
|
146
|
-
* * If `this.needOrigin` is set, the first point of the array is captured as local origin for subsequent sums.
|
|
147
|
-
*
|
|
143
|
+
* Compute moments of triangles from a base point to the given linestring. Accumulate them to `this.sums`.
|
|
144
|
+
* * If `this.needOrigin` is set, `this.origin` is set to the first point of the array.
|
|
145
|
+
* * If `sweepBase` is undefined, use `this.origin` as `sweepBase`.
|
|
148
146
|
*/
|
|
149
147
|
accumulateTriangleToLineStringMomentsXY(sweepBase: XAndY | undefined, points: GrowableXYZArray): void;
|
|
150
148
|
/**
|
|
151
|
-
*
|
|
152
|
-
* * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin].
|
|
153
|
-
* parts of vectors).
|
|
154
|
-
* *
|
|
149
|
+
* Assemble XX, YY, XY products into a full matrix form [xx,xy,0,0; xy,yy,0,0; 0,0,0,0; 0,0,0,1].
|
|
150
|
+
* * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin].
|
|
151
|
+
* (column weights 0001; only xy parts of vectors).
|
|
152
|
+
* * Scale by detJ for the xy-only determinant of the vectors.
|
|
155
153
|
* @param productXX
|
|
156
154
|
* @param productXY
|
|
157
155
|
* @param productYY
|
|
158
|
-
* @param area
|
|
159
|
-
* @param origin
|
|
160
|
-
* @param vectorU
|
|
161
|
-
* @param vectorV
|
|
156
|
+
* @param area area in caller's system.
|
|
157
|
+
* @param origin caller's origin.
|
|
158
|
+
* @param vectorU caller's U axis (not necessarily unit).
|
|
159
|
+
* @param vectorV caller's V axis (not necessarily unit).
|
|
162
160
|
*/
|
|
163
161
|
accumulateXYProductsInCentroidalFrame(productXX: number, productXY: number, productYY: number, area: number, origin: XAndY, vectorU: XAndY, vectorV: XAndY): void;
|
|
164
162
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MomentData.d.ts","sourceRoot":"","sources":["../../../src/geometry4d/MomentData.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,UAAU;IACrB,4BAA4B;IACrB,MAAM,EAAE,OAAO,CAAC;IACvB,6CAA6C;IACtC,UAAU,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACI,IAAI,EAAE,QAAQ,CAAC;IACtB;;;OAGG;IACI,eAAe,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MomentData.d.ts","sourceRoot":"","sources":["../../../src/geometry4d/MomentData.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,8 +28,8 @@ const Point4d_1 = require("./Point4d");
|
|
|
28
28
|
* * e.g. entry 03 is summed x.
|
|
29
29
|
* * In this level:
|
|
30
30
|
* * the `absoluteQuantity` member is undefined.
|
|
31
|
-
* * the `localToWorldMap` and `radiiOfGyration` are created
|
|
32
|
-
* * Second level: after a call to inertiaProductsToPrincipalAxes
|
|
31
|
+
* * the `localToWorldMap` and `radiiOfGyration` are created but have undefined contents.
|
|
32
|
+
* * Second level: after a call to `inertiaProductsToPrincipalAxes`, the `localToWorldMap`, `absoluteQuantity` and
|
|
33
33
|
* `radiiOfGyration` are filled in.
|
|
34
34
|
* @public
|
|
35
35
|
*/
|
|
@@ -49,18 +49,35 @@ class MomentData {
|
|
|
49
49
|
* * This set up with its inverse already constructed.
|
|
50
50
|
*/
|
|
51
51
|
localToWorldMap;
|
|
52
|
+
/** Radii of gyration (square roots of principal second moments). */
|
|
53
|
+
radiusOfGyration;
|
|
54
|
+
/**
|
|
55
|
+
* Principal quantity (e.g. length, area, or volume). This is undefined in raw moments, and becomes defined by
|
|
56
|
+
* inertiaProductsToPrincipalAxes.
|
|
57
|
+
*/
|
|
58
|
+
absoluteQuantity;
|
|
52
59
|
// private variables
|
|
53
60
|
static _vectorA;
|
|
54
61
|
static _vectorB;
|
|
55
62
|
static _vectorC;
|
|
56
63
|
_point0 = Point3dVector3d_1.Point3d.create();
|
|
57
64
|
_point1 = Point3dVector3d_1.Point3d.create();
|
|
65
|
+
/** Constructor. */
|
|
66
|
+
constructor() {
|
|
67
|
+
this.origin = Point3dVector3d_1.Point3d.createZero();
|
|
68
|
+
this.needOrigin = false;
|
|
69
|
+
this.sums = Matrix4d_1.Matrix4d.createZero();
|
|
70
|
+
this.localToWorldMap = Transform_1.Transform.createIdentity();
|
|
71
|
+
this.radiusOfGyration = Point3dVector3d_1.Vector3d.create();
|
|
72
|
+
this.absoluteQuantity = 0.1; // so optimizer sees its type
|
|
73
|
+
this.absoluteQuantity = undefined;
|
|
74
|
+
}
|
|
58
75
|
/**
|
|
59
76
|
* Return the lower-right (3,3) entry in the sums.
|
|
60
77
|
* * This is the quantity (i.e. length, area, or volume) summed.
|
|
61
78
|
*/
|
|
62
79
|
get quantitySum() {
|
|
63
|
-
return this.sums.
|
|
80
|
+
return this.sums.weight();
|
|
64
81
|
}
|
|
65
82
|
/**
|
|
66
83
|
* Return a scale factor to make these sums match the target orientation sign.
|
|
@@ -91,23 +108,6 @@ class MomentData {
|
|
|
91
108
|
this.needOrigin = false;
|
|
92
109
|
}
|
|
93
110
|
}
|
|
94
|
-
/** Radii of gyration (square roots of principal second moments). */
|
|
95
|
-
radiusOfGyration;
|
|
96
|
-
/**
|
|
97
|
-
* Principal quantity (e.g. length, area, or volume). This is undefined in raw moments, and becomes defined by
|
|
98
|
-
* inertiaProductsToPrincipalAxes.
|
|
99
|
-
*/
|
|
100
|
-
absoluteQuantity;
|
|
101
|
-
/** Constructor. */
|
|
102
|
-
constructor() {
|
|
103
|
-
this.origin = Point3dVector3d_1.Point3d.createZero();
|
|
104
|
-
this.sums = Matrix4d_1.Matrix4d.createZero();
|
|
105
|
-
this.localToWorldMap = Transform_1.Transform.createIdentity();
|
|
106
|
-
this.radiusOfGyration = Point3dVector3d_1.Vector3d.create();
|
|
107
|
-
this.needOrigin = false;
|
|
108
|
-
this.absoluteQuantity = 0.1; // so optimizer sees its type
|
|
109
|
-
this.absoluteQuantity = undefined;
|
|
110
|
-
}
|
|
111
111
|
/**
|
|
112
112
|
* Create moments with optional origin.
|
|
113
113
|
* * Origin and needOrigin are quirky.
|
|
@@ -151,7 +151,7 @@ class MomentData {
|
|
|
151
151
|
axes.setColumnsPoint4dXYZ(points[0], points[1], points[2]);
|
|
152
152
|
if (axes.determinant() < 0)
|
|
153
153
|
axes.scaleColumnsInPlace(-1.0, -1.0, -1.0);
|
|
154
|
-
// prefer x and z positive
|
|
154
|
+
// prefer x and z positive; y falls wherever
|
|
155
155
|
if (axes.at(0, 0) < 0.0)
|
|
156
156
|
axes.scaleColumnsInPlace(-1.0, -1.0, 1.0);
|
|
157
157
|
if (axes.at(2, 2) < 0.0)
|
|
@@ -176,7 +176,8 @@ class MomentData {
|
|
|
176
176
|
* * Hence x axis is long direction.
|
|
177
177
|
* * Hence planar data generates large moment as Z.
|
|
178
178
|
* @param origin The origin used for the inertia products.
|
|
179
|
-
* @param inertiaProducts The inertia products: sums or integrals of
|
|
179
|
+
* @param inertiaProducts The inertia products: sums or integrals of
|
|
180
|
+
* [xx,xy,xz,xw; yx,yy,yz,yw; zx,zy,zz,zw; wx,wy,wz,w].
|
|
180
181
|
*/
|
|
181
182
|
static inertiaProductsToPrincipalAxes(origin, inertiaProducts) {
|
|
182
183
|
const moments = new MomentData();
|
|
@@ -220,23 +221,21 @@ class MomentData {
|
|
|
220
221
|
*/
|
|
221
222
|
static areEquivalentPrincipalAxes(dataA, dataB) {
|
|
222
223
|
if (dataA && dataB
|
|
223
|
-
&& Geometry_1.Geometry.isSameCoordinate(dataA.quantitySum, dataB.quantitySum)) { //
|
|
224
|
+
&& Geometry_1.Geometry.isSameCoordinate(dataA.quantitySum, dataB.quantitySum)) { // TODO: need different tolerance for area, volume?
|
|
224
225
|
if (dataA.localToWorldMap.getOrigin().isAlmostEqual(dataB.localToWorldMap.getOrigin())
|
|
225
226
|
&& dataA.radiusOfGyration.isAlmostEqual(dataB.radiusOfGyration)) {
|
|
226
227
|
if (Geometry_1.Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.y)) {
|
|
227
|
-
//
|
|
228
|
+
// we have at least xy symmetry
|
|
228
229
|
if (Geometry_1.Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.z))
|
|
229
230
|
return true;
|
|
230
|
-
// just xy
|
|
231
|
-
// allow opposite z directions.
|
|
232
|
-
// If the z's are aligned, x an dy can spin freely.
|
|
231
|
+
// just xy; allow opposite z directions; if the z's are aligned, x and y can spin freely
|
|
233
232
|
const zA = dataA.localToWorldMap.matrix.columnZ();
|
|
234
233
|
const zB = dataB.localToWorldMap.matrix.columnZ();
|
|
235
234
|
if (zA.isParallelTo(zB, true))
|
|
236
235
|
return true;
|
|
237
236
|
return false;
|
|
238
237
|
}
|
|
239
|
-
// no symmetry
|
|
238
|
+
// no symmetry; test all three axes
|
|
240
239
|
const vectorA = Point3dVector3d_1.Vector3d.create();
|
|
241
240
|
const vectorB = Point3dVector3d_1.Vector3d.create();
|
|
242
241
|
for (let i = 0; i < 3; i++) {
|
|
@@ -266,7 +265,7 @@ class MomentData {
|
|
|
266
265
|
}
|
|
267
266
|
/** Revise the accumulated sums to be "around the centroid". */
|
|
268
267
|
shiftOriginAndSumsToCentroidOfSums() {
|
|
269
|
-
const xyz = this.sums.columnW().realPoint();
|
|
268
|
+
const xyz = this.sums.columnW().realPoint(); // centroid of the geometry
|
|
270
269
|
if (xyz) {
|
|
271
270
|
this.shiftOriginAndSumsByXYZ(xyz.x, xyz.y, xyz.z);
|
|
272
271
|
return true;
|
|
@@ -275,9 +274,9 @@ class MomentData {
|
|
|
275
274
|
}
|
|
276
275
|
/**
|
|
277
276
|
* Revise the accumulated sums.
|
|
278
|
-
* *
|
|
279
|
-
* *
|
|
280
|
-
|
|
277
|
+
* * Add (ax,ay,az) to the origin coordinates.
|
|
278
|
+
* * Apply the negative translation to the sums.
|
|
279
|
+
*/
|
|
281
280
|
shiftOriginAndSumsByXYZ(ax, ay, az) {
|
|
282
281
|
this.origin.addXYZInPlace(ax, ay, az);
|
|
283
282
|
this.sums.multiplyTranslationSandwichInPlace(-ax, -ay, -az);
|
|
@@ -287,23 +286,24 @@ class MomentData {
|
|
|
287
286
|
this.shiftOriginAndSumsByXYZ(newOrigin.x - this.origin.x, newOrigin.y - this.origin.y, newOrigin.z - this.origin.z);
|
|
288
287
|
}
|
|
289
288
|
/**
|
|
290
|
-
* Compute moments of a triangle from the origin
|
|
291
|
-
*
|
|
292
|
-
* * If `pointA` is undefined, use `this.origin` as pointA
|
|
293
|
-
|
|
294
|
-
*/
|
|
289
|
+
* Compute moments of a triangle from the origin. Accumulate them to `this.sums`.
|
|
290
|
+
* * If `this.needOrigin` is set, `this.origin` is set to `pointB`.
|
|
291
|
+
* * If `pointA` is undefined, use `this.origin` as `pointA`.
|
|
292
|
+
*/
|
|
295
293
|
accumulateTriangleMomentsXY(pointA, pointB, pointC) {
|
|
296
294
|
this.setOriginXYZIfNeeded(pointB.x, pointB.y, 0.0);
|
|
297
295
|
const x0 = this.origin.x;
|
|
298
296
|
const y0 = this.origin.y;
|
|
299
|
-
const vectorA = MomentData._vectorA =
|
|
300
|
-
|
|
301
|
-
|
|
297
|
+
const vectorA = MomentData._vectorA = (pointA !== undefined) ?
|
|
298
|
+
Point4d_1.Point4d.create(pointA.x - x0, pointA.y - y0, 0.0, 1.0, MomentData._vectorA) :
|
|
299
|
+
Point4d_1.Point4d.create(0.0, 0.0, 0.0, 1.0, MomentData._vectorA);
|
|
302
300
|
const vectorB = MomentData._vectorB = Point4d_1.Point4d.create(pointB.x - x0, pointB.y - y0, 0.0, 1.0, MomentData._vectorB);
|
|
303
301
|
const vectorC = MomentData._vectorC = Point4d_1.Point4d.create(pointC.x - x0, pointC.y - y0, 0.0, 1.0, MomentData._vectorC);
|
|
304
|
-
//
|
|
305
|
-
//
|
|
306
|
-
//
|
|
302
|
+
// Below we calculate 16 double integrals: \iint_T [x y 0 1]^ [x y 0 1] dT over triangle T=(A,B,C).
|
|
303
|
+
// Each accumulates contributions from 9 scaled outer products. Integration computations use the barycentric
|
|
304
|
+
// change of variables [B-A C-A][u,v]^ = [x,y]^ with Jacobian detJ = B-A x C-A = twice the area of T.
|
|
305
|
+
// This converts the integration domain from T to the triangle bounded by u=0, v=0 and v=1-u, yielding e.g.,
|
|
306
|
+
// \iint_T x^2 dT = detJ \int_0^1 \int_0^{1-u} u^2 dv du = detJ / 12, and similarly \iint_T xy dT = detJ / 24.
|
|
307
307
|
const detJ = Geometry_1.Geometry.crossProductXYXY(vectorB.x - vectorA.x, vectorB.y - vectorA.y, vectorC.x - vectorA.x, vectorC.y - vectorA.y);
|
|
308
308
|
if (detJ !== 0.0) {
|
|
309
309
|
const r1_12 = detJ / 12.0;
|
|
@@ -319,7 +319,7 @@ class MomentData {
|
|
|
319
319
|
this.sums.addScaledOuterProductInPlace(vectorC, vectorC, r1_12);
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
|
-
/** Add scaled outer product of (4d, unit weight) point to this.sums
|
|
322
|
+
/** Add scaled outer product of (4d, unit weight) point to `this.sums`. */
|
|
323
323
|
accumulateScaledOuterProduct(point, scaleFactor) {
|
|
324
324
|
this.setOriginXYZIfNeeded(point.x, point.y, 0.0);
|
|
325
325
|
const vectorA = MomentData._vectorA = Point4d_1.Point4d.create(point.x - this.origin.x, point.y - this.origin.y, point.z - this.origin.z, 1.0, MomentData._vectorA);
|
|
@@ -342,16 +342,15 @@ class MomentData {
|
|
|
342
342
|
this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_3);
|
|
343
343
|
}
|
|
344
344
|
/**
|
|
345
|
-
* Compute moments of triangles from a base point to the given linestring.
|
|
346
|
-
*
|
|
347
|
-
* * If `
|
|
348
|
-
* * If `this.needOrigin` is set, the first point of the array is captured as local origin for subsequent sums.
|
|
349
|
-
*
|
|
345
|
+
* Compute moments of triangles from a base point to the given linestring. Accumulate them to `this.sums`.
|
|
346
|
+
* * If `this.needOrigin` is set, `this.origin` is set to the first point of the array.
|
|
347
|
+
* * If `sweepBase` is undefined, use `this.origin` as `sweepBase`.
|
|
350
348
|
*/
|
|
351
349
|
accumulateTriangleToLineStringMomentsXY(sweepBase, points) {
|
|
352
350
|
const n = points.length;
|
|
353
351
|
if (n > 1) {
|
|
354
352
|
points.getPoint3dAtUncheckedPointIndex(0, this._point0);
|
|
353
|
+
// The linestring forms a polygon with sweepBase. Integrate over this polygon using Shoelace algorithm.
|
|
355
354
|
for (let i = 1; i < n; i++) {
|
|
356
355
|
points.getPoint3dAtUncheckedPointIndex(i, this._point1);
|
|
357
356
|
this.accumulateTriangleMomentsXY(sweepBase, this._point0, this._point1);
|
|
@@ -360,17 +359,17 @@ class MomentData {
|
|
|
360
359
|
}
|
|
361
360
|
}
|
|
362
361
|
/**
|
|
363
|
-
*
|
|
364
|
-
* * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin].
|
|
365
|
-
* parts of vectors).
|
|
366
|
-
* *
|
|
362
|
+
* Assemble XX, YY, XY products into a full matrix form [xx,xy,0,0; xy,yy,0,0; 0,0,0,0; 0,0,0,1].
|
|
363
|
+
* * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin].
|
|
364
|
+
* (column weights 0001; only xy parts of vectors).
|
|
365
|
+
* * Scale by detJ for the xy-only determinant of the vectors.
|
|
367
366
|
* @param productXX
|
|
368
367
|
* @param productXY
|
|
369
368
|
* @param productYY
|
|
370
|
-
* @param area
|
|
371
|
-
* @param origin
|
|
372
|
-
* @param vectorU
|
|
373
|
-
* @param vectorV
|
|
369
|
+
* @param area area in caller's system.
|
|
370
|
+
* @param origin caller's origin.
|
|
371
|
+
* @param vectorU caller's U axis (not necessarily unit).
|
|
372
|
+
* @param vectorV caller's V axis (not necessarily unit).
|
|
374
373
|
*/
|
|
375
374
|
accumulateXYProductsInCentroidalFrame(productXX, productXY, productYY, area, origin, vectorU, vectorV) {
|
|
376
375
|
const centroidalProducts = Matrix4d_1.Matrix4d.createRowValues(productXX, productXY, 0, 0, productXY, productYY, 0, 0, 0, 0, 0, 0, 0, 0, 0, area);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MomentData.js","sourceRoot":"","sources":["../../../src/geometry4d/MomentData.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 Numerics\n */\n\n/* eslint-disable @typescript-eslint/naming-convention */\n// cspell:word ABAT\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\nimport { Point3d, Vector3d, XYZ } from \"../geometry3d/Point3dVector3d\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XAndY, XYAndZ } from \"../geometry3d/XYZProps\";\nimport { Matrix4d } from \"./Matrix4d\";\nimport { Point4d } from \"./Point4d\";\n\n/**\n * A MomentData structure exists in several levels:\n * * First level: as a carrier of sums of inertial products that determine moments.\n * * origin = local origin used as moments are summed.\n * * sums = array of summed moments.\n * * The [i,j] entry of the sums is a summed or integrated moment for product of axis i and j.\n * * axes 0,1,2 are x,y,z.\n * * e.g. entry [0,1] is summed product xy\n * * axis 3 is \"w\", which is 1 in sums.\n * * e.g. entry 03 is summed x.\n * * In this level:\n * * the `absoluteQuantity` member is undefined.\n * * the `localToWorldMap` and `radiiOfGyration` are created by have undefined contents.\n * * Second level: after a call to inertiaProductsToPrincipalAxes, the `localToWorldMap`, `absoluteQuantity` and\n * `radiiOfGyration` are filled in.\n * @public\n */\nexport class MomentData {\n /** Origin used for sums. */\n public origin: Point3d;\n /** Flag to request deferred origin setup. */\n public needOrigin: boolean;\n /**\n * Moment sums.\n * * Set to zero at initialization and if requested later.\n * * Accumulated during data entry phase.\n */\n public sums: Matrix4d;\n /**\n * The mapping between principal and world system.\n * * This set up with its inverse already constructed.\n */\n public localToWorldMap: Transform;\n // private variables\n private static _vectorA?: Point4d;\n private static _vectorB?: Point4d;\n private static _vectorC?: Point4d;\n private _point0 = Point3d.create();\n private _point1 = Point3d.create();\n /**\n * Return the lower-right (3,3) entry in the sums.\n * * This is the quantity (i.e. length, area, or volume) summed.\n */\n public get quantitySum(): number {\n return this.sums.atIJ(3, 3);\n }\n /**\n * Return a scale factor to make these sums match the target orientation sign.\n * * 1.0 if `this.quantitySum` has the same sign as `targetSign`.\n * * -1.0 if `this.quantitySum` has the opposite sign from `targetSign`\n */\n public signFactor(targetSign: number): number {\n return targetSign * this.quantitySum > 0 ? 1.0 : -1.0;\n }\n /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */\n public setOriginIfNeeded(origin: Point3d) {\n if (this.needOrigin) {\n this.origin.setFromPoint3d(origin);\n this.needOrigin = false;\n }\n }\n /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */\n public setOriginFromGrowableXYZArrayIfNeeded(points: GrowableXYZArray) {\n if (this.needOrigin && points.length > 0) {\n points.getPoint3dAtCheckedPointIndex(0, this.origin);\n this.needOrigin = false;\n }\n }\n /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */\n public setOriginXYZIfNeeded(x: number, y: number, z: number) {\n if (this.needOrigin) {\n this.origin.set(x, y, z);\n this.needOrigin = false;\n }\n }\n /** Radii of gyration (square roots of principal second moments). */\n public radiusOfGyration: Vector3d;\n /**\n * Principal quantity (e.g. length, area, or volume). This is undefined in raw moments, and becomes defined by\n * inertiaProductsToPrincipalAxes.\n */\n public absoluteQuantity?: number;\n /** Constructor. */\n private constructor() {\n this.origin = Point3d.createZero();\n this.sums = Matrix4d.createZero();\n this.localToWorldMap = Transform.createIdentity();\n this.radiusOfGyration = Vector3d.create();\n this.needOrigin = false;\n this.absoluteQuantity = 0.1; // so optimizer sees its type\n this.absoluteQuantity = undefined;\n }\n /**\n * Create moments with optional origin.\n * * Origin and needOrigin are quirky.\n * * (undefined, true) sets up to use first incoming point as origin.\n * * (origin) sets up to use that durable origin, set needsOrigin flag false.\n * * (origin, true) the \"true\" is meaningless.\n * * (undefined, false) makes 000 the durable origin.\n */\n public static create(origin?: Point3d | undefined, needOrigin: boolean = false): MomentData {\n const data = new MomentData();\n data.needOrigin = needOrigin;\n if (origin) {\n data.origin.setFromPoint3d(origin);\n data.needOrigin = false;\n }\n return data;\n }\n /**\n * Return the formal tensor of integrated values `[yy+zz,xy,xz][yx,xx+zz,yz][zx,xy,xx+yy]`.\n * @param products matrix of (integrated) `[xx,xy,xz][yx,yy,yz][zx,xy,zz]`.\n */\n public static momentTensorFromInertiaProducts(products: Matrix3d): Matrix3d {\n const rr = products.sumDiagonal();\n const result = Matrix3d.createScale(rr, rr, rr);\n result.addScaledInPlace(products, -1.0);\n return result;\n }\n /** Sort the columns of the matrix for increasing moments. */\n public static sortColumnsForIncreasingMoments(axes: Matrix3d, moments: Vector3d) {\n const points = [\n axes.indexedColumnWithWeight(0, moments.x),\n axes.indexedColumnWithWeight(1, moments.y),\n axes.indexedColumnWithWeight(2, moments.z),\n ].sort((dataA: Point4d, dataB: Point4d): number => {\n if (dataA.w < dataB.w) return -1;\n if (dataA.w > dataB.w) return 1;\n return 0;\n });\n axes.setColumnsPoint4dXYZ(points[0], points[1], points[2]);\n if (axes.determinant() < 0)\n axes.scaleColumnsInPlace(-1.0, -1.0, -1.0);\n // prefer x and z positive -- y falls wherever . ..\n if (axes.at(0, 0) < 0.0)\n axes.scaleColumnsInPlace(-1.0, -1.0, 1.0);\n if (axes.at(2, 2) < 0.0)\n axes.scaleColumnsInPlace(1.0, -1.0, -1.0);\n moments.set(points[0].w, points[1].w, points[2].w);\n }\n /**\n * Return the principal moment data for an array of points.\n * @param points array of points.\n */\n public static pointsToPrincipalAxes(points: Point3d[]): MomentData | undefined {\n const moments = new MomentData();\n if (points.length === 0)\n return moments;\n moments.clearSums(points[0]);\n moments.accumulatePointMomentsFromOrigin(points);\n return this.inertiaProductsToPrincipalAxes(moments.origin, moments.sums);\n }\n /**\n * Compute principal axes from inertial products.\n * * The radii of gyration are sorted smallest to largest.\n * * Hence x axis is long direction.\n * * Hence planar data generates large moment as Z.\n * @param origin The origin used for the inertia products.\n * @param inertiaProducts The inertia products: sums or integrals of [xx,xy,xz,xw; yx,yy, yz,yw; zx,zy,zz,zw; wx,wy,wz,w].\n */\n public static inertiaProductsToPrincipalAxes(origin: XYZ, inertiaProducts: Matrix4d): MomentData | undefined {\n const moments = new MomentData();\n moments.sums.setFrom(inertiaProducts);\n moments.origin.setFrom(origin);\n if (!moments.shiftOriginAndSumsToCentroidOfSums())\n return undefined;\n const products = moments.sums.matrixPart();\n const w = moments.sums.weight();\n if (w < 0.0)\n products.scaleColumnsInPlace(-1, -1, -1);\n const tensor = MomentData.momentTensorFromInertiaProducts(products);\n const moment2 = Vector3d.create();\n const axisVectors = Matrix3d.createZero();\n tensor.fastSymmetricEigenvalues(axisVectors, moment2);\n if (moment2.x < 0.0)\n return undefined;\n MomentData.sortColumnsForIncreasingMoments(axisVectors, moment2);\n if (w < 0.0)\n axisVectors.scaleColumnsInPlace(1, -1, -1);\n moments.localToWorldMap = Transform.createOriginAndMatrix(moments.origin, axisVectors);\n moments.radiusOfGyration.set(\n Math.sqrt(Math.abs(moment2.x)), Math.sqrt(Math.abs(moment2.y)), Math.sqrt(Math.abs(moment2.z)));\n moments.radiusOfGyration.scaleInPlace(1.0 / Math.sqrt(Math.abs(w)));\n moments.absoluteQuantity = Math.abs(w);\n return moments;\n }\n /**\n * Test for match among selected members as they exist after `inertiaProductsToPrincipalAxes`.\n * * The members considered are:\n * * origin of local to world map (i.e. centroid),\n * * radius of gyration,\n * * axes of localToWorldMap.\n * * Axis direction tests allow these quirks:\n * * opposite orientation is considered matched.\n * * Full xyz symmetry: If x,y,z radii are matched, axes are not tested.\n * * Symmetry in xy plane: If x and y radii are matched, the x and y axes area allowed to spin freely. Only Z direction\n * is tested.\n * * If either or both are undefined, returns false.\n * @param dataA first set of moments.\n * @param dataB second set of moments.\n */\n public static areEquivalentPrincipalAxes(dataA: MomentData | undefined, dataB: MomentData | undefined): boolean {\n if (dataA && dataB\n && Geometry.isSameCoordinate(dataA.quantitySum, dataB.quantitySum)) { // um.. need different tolerance for area, volume?)\n if (dataA.localToWorldMap.getOrigin().isAlmostEqual(dataB.localToWorldMap.getOrigin())\n && dataA.radiusOfGyration.isAlmostEqual(dataB.radiusOfGyration)) {\n if (Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.y)) {\n // We have at least xy symmetry ....\n if (Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.z))\n return true;\n // just xy.\n // allow opposite z directions.\n // If the z's are aligned, x an dy can spin freely.\n const zA = dataA.localToWorldMap.matrix.columnZ();\n const zB = dataB.localToWorldMap.matrix.columnZ();\n if (zA.isParallelTo(zB, true))\n return true;\n return false;\n }\n // no symmetry. Test all three axes.\n const vectorA = Vector3d.create();\n const vectorB = Vector3d.create();\n for (let i = 0; i < 3; i++) {\n dataA.localToWorldMap.matrix.getColumn(i, vectorA);\n dataB.localToWorldMap.matrix.getColumn(i, vectorB);\n if (!vectorA.isParallelTo(vectorB, true))\n return false;\n }\n return true;\n }\n }\n return false;\n }\n /** Clear the MomentData sums to zero, and establish a new origin. */\n public clearSums(origin?: Point3d) {\n this.sums.setZero();\n if (origin)\n this.origin.setFrom(origin);\n else\n this.origin.setZero();\n }\n /** Accumulate products-of-components for given points. */\n public accumulatePointMomentsFromOrigin(points: Point3d[]) {\n for (const p of points) {\n this.sums.addMomentsInPlace(\n p.x - this.origin.x,\n p.y - this.origin.y,\n p.z - this.origin.z,\n 1.0,\n );\n }\n }\n /** Revise the accumulated sums to be \"around the centroid\". */\n public shiftOriginAndSumsToCentroidOfSums(): boolean {\n const xyz = this.sums.columnW().realPoint();\n if (xyz) {\n this.shiftOriginAndSumsByXYZ(xyz.x, xyz.y, xyz.z);\n return true;\n }\n return false;\n }\n\n /**\n * Revise the accumulated sums.\n * * add ax,ay,ax to the origin coordinates.\n * * apply the negative translation to the sums.\n */\n public shiftOriginAndSumsByXYZ(ax: number, ay: number, az: number) {\n this.origin.addXYZInPlace(ax, ay, az);\n this.sums.multiplyTranslationSandwichInPlace(-ax, -ay, -az);\n }\n /** Revise the accumulated sums so they are based at a specified origin. */\n public shiftOriginAndSumsToNewOrigin(newOrigin: XYAndZ) {\n this.shiftOriginAndSumsByXYZ(newOrigin.x - this.origin.x, newOrigin.y - this.origin.y, newOrigin.z - this.origin.z);\n }\n /**\n * Compute moments of a triangle from the origin to the given line.\n * Accumulate them to this.sums.\n * * If `pointA` is undefined, use `this.origin` as pointA.\n * * If `this.needOrigin` is set, pointB is used\n */\n public accumulateTriangleMomentsXY(pointA: XAndY | undefined, pointB: XAndY, pointC: XAndY) {\n this.setOriginXYZIfNeeded(pointB.x, pointB.y, 0.0);\n const x0 = this.origin.x;\n const y0 = this.origin.y;\n const vectorA = MomentData._vectorA =\n pointA !== undefined ? Point4d.create(pointA.x - x0, pointA.y - y0, 0.0, 1.0, MomentData._vectorA)\n : Point4d.create(this.origin.x, this.origin.y, 0.0, 1.0, MomentData._vectorA);\n const vectorB = MomentData._vectorB = Point4d.create(pointB.x - x0, pointB.y - y0, 0.0, 1.0, MomentData._vectorB);\n const vectorC = MomentData._vectorC = Point4d.create(pointC.x - x0, pointC.y - y0, 0.0, 1.0, MomentData._vectorC);\n // accumulate Return product integrals I(0<=u<=1) I (0<=v<= u) (w*W + u *U + v * V)(w*W + u *U + v * V)^ du dv\n // where w = 1-u-v\n // W = column vector (point00.x, point00.y, point00.z, 1.0) etc.\n const detJ = Geometry.crossProductXYXY(vectorB.x - vectorA.x, vectorB.y - vectorA.y, vectorC.x - vectorA.x, vectorC.y - vectorA.y);\n if (detJ !== 0.0) {\n const r1_12 = detJ / 12.0;\n const r1_24 = detJ / 24.0;\n\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, r1_12);\n this.sums.addScaledOuterProductInPlace(vectorA, vectorB, r1_24);\n this.sums.addScaledOuterProductInPlace(vectorA, vectorC, r1_24);\n\n this.sums.addScaledOuterProductInPlace(vectorB, vectorA, r1_24);\n this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_12);\n this.sums.addScaledOuterProductInPlace(vectorB, vectorC, r1_24);\n\n this.sums.addScaledOuterProductInPlace(vectorC, vectorA, r1_24);\n this.sums.addScaledOuterProductInPlace(vectorC, vectorB, r1_24);\n this.sums.addScaledOuterProductInPlace(vectorC, vectorC, r1_12);\n }\n }\n /** Add scaled outer product of (4d, unit weight) point to this.sums. */\n public accumulateScaledOuterProduct(point: XYAndZ, scaleFactor: number) {\n this.setOriginXYZIfNeeded(point.x, point.y, 0.0);\n const vectorA = MomentData._vectorA = Point4d.create(\n point.x - this.origin.x, point.y - this.origin.y, point.z - this.origin.z, 1.0, MomentData._vectorA,\n );\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, scaleFactor);\n }\n /** Accumulate wire moment integral from pointA to pointB */\n public accumulateLineMomentsXYZ(pointA: Point3d, pointB: Point3d) {\n this.setOriginXYZIfNeeded(pointA.x, pointA.y, pointA.z);\n const x0 = this.origin.x;\n const y0 = this.origin.y;\n const z0 = this.origin.z;\n const vectorA = MomentData._vectorA = Point4d.create(\n pointA.x - x0, pointA.y - y0, pointA.z - z0, 1.0, MomentData._vectorA,\n );\n const vectorB = MomentData._vectorB = Point4d.create(\n pointB.x - x0, pointB.y - y0, pointB.z - z0, 1.0, MomentData._vectorB,\n );\n const detJ = pointA.distance(pointB);\n const r1_3 = detJ / 3.0;\n const r1_6 = detJ / 6.0;\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, r1_3);\n this.sums.addScaledOuterProductInPlace(vectorA, vectorB, r1_6);\n this.sums.addScaledOuterProductInPlace(vectorB, vectorA, r1_6);\n this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_3);\n }\n /**\n * Compute moments of triangles from a base point to the given linestring.\n * Accumulate them to this.sums.\n * * If `pointA` is undefined, use `this.origin` as pointA.\n * * If `this.needOrigin` is set, the first point of the array is captured as local origin for subsequent sums.\n *\n */\n public accumulateTriangleToLineStringMomentsXY(sweepBase: XAndY | undefined, points: GrowableXYZArray) {\n const n = points.length;\n if (n > 1) {\n points.getPoint3dAtUncheckedPointIndex(0, this._point0);\n for (let i = 1; i < n; i++) {\n points.getPoint3dAtUncheckedPointIndex(i, this._point1);\n this.accumulateTriangleMomentsXY(sweepBase, this._point0, this._point1);\n this._point0.setFromPoint3d(this._point1);\n }\n }\n }\n /**\n * * Assemble XX, YY, XY products into a full matrix form [xx,xy,0,0; xy,yy,0,0;0,0,0,0;0,0,0,1].\n * * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin]. (Column weights 0001) (only xy\n * parts of vectors).\n * * scale by detJ for the xy-only determinant of the vectors.\n * @param productXX\n * @param productXY\n * @param productYY\n * @param area Area in caller's system.\n * @param origin Caller's origin.\n * @param vectorU Caller's U axis (not necessarily unit).\n * @param vectorV Caller's V axis (not necessarily unit).\n */\n public accumulateXYProductsInCentroidalFrame(\n productXX: number, productXY: number, productYY: number,\n area: number, origin: XAndY, vectorU: XAndY, vectorV: XAndY,\n ) {\n const centroidalProducts = Matrix4d.createRowValues(\n productXX, productXY, 0, 0,\n productXY, productYY, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, area,\n );\n const detJ = Geometry.crossProductXYXY(vectorU.x, vectorV.x, vectorU.y, vectorV.y);\n const placement = Matrix4d.createRowValues(\n vectorU.x, vectorV.x, 0, origin.x - this.origin.x,\n vectorU.y, vectorV.y, 0, origin.y - this.origin.y,\n 0, 0, 0, 0,\n 0, 0, 0, 1,\n );\n const AB = placement.multiplyMatrixMatrix(centroidalProducts);\n const ABAT = AB.multiplyMatrixMatrixTranspose(placement);\n this.sums.addScaledInPlace(ABAT, detJ);\n }\n /**\n * Accumulate sums from other moments.\n * * Scale by given scaleFactor (e.g. sign to correct orientation).\n * * Pull the origin from `other` if `this` needs an origin.\n */\n public accumulateProducts(other: MomentData, scale: number) {\n this.setOriginIfNeeded(other.origin);\n this.sums.addTranslationSandwichInPlace(\n other.sums, this.origin.x - other.origin.x, this.origin.y - other.origin.y, this.origin.z - other.origin.z, scale,\n );\n }\n\n /**\n * Accumulate sums from Matrix4d and origin.\n * * Scale by given scaleFactor (e.g. sign to correct orientation).\n * * Trap the origin if `this` needs an origin.\n */\n public accumulateProductsFromOrigin(origin: Point3d, products: Matrix4d, scale: number) {\n this.setOriginIfNeeded(origin);\n this.sums.addTranslationSandwichInPlace(\n products, this.origin.x - origin.x, this.origin.y - origin.y, this.origin.z - origin.z, scale,\n );\n }\n /** Convert to a json data object. */\n public toJSON(): any {\n return {\n origin: this.origin,\n sums: this.sums.toJSON(),\n radiusOfGyration: this.radiusOfGyration.toJSON(),\n localToWorld: this.localToWorldMap.toJSON(),\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MomentData.js","sourceRoot":"","sources":["../../../src/geometry4d/MomentData.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n// cspell:word ABAT\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Point3d, Vector3d, XYZ } from \"../geometry3d/Point3dVector3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { XAndY, XYAndZ } from \"../geometry3d/XYZProps\";\r\nimport { Matrix4d } from \"./Matrix4d\";\r\nimport { Point4d } from \"./Point4d\";\r\n\r\n/**\r\n * A MomentData structure exists in several levels:\r\n * * First level: as a carrier of sums of inertial products that determine moments.\r\n * * origin = local origin used as moments are summed.\r\n * * sums = array of summed moments.\r\n * * The [i,j] entry of the sums is a summed or integrated moment for product of axis i and j.\r\n * * axes 0,1,2 are x,y,z.\r\n * * e.g. entry [0,1] is summed product xy\r\n * * axis 3 is \"w\", which is 1 in sums.\r\n * * e.g. entry 03 is summed x.\r\n * * In this level:\r\n * * the `absoluteQuantity` member is undefined.\r\n * * the `localToWorldMap` and `radiiOfGyration` are created but have undefined contents.\r\n * * Second level: after a call to `inertiaProductsToPrincipalAxes`, the `localToWorldMap`, `absoluteQuantity` and\r\n * `radiiOfGyration` are filled in.\r\n * @public\r\n */\r\nexport class MomentData {\r\n /** Origin used for sums. */\r\n public origin: Point3d;\r\n /** Flag to request deferred origin setup. */\r\n public needOrigin: boolean;\r\n /**\r\n * Moment sums.\r\n * * Set to zero at initialization and if requested later.\r\n * * Accumulated during data entry phase.\r\n */\r\n public sums: Matrix4d;\r\n /**\r\n * The mapping between principal and world system.\r\n * * This set up with its inverse already constructed.\r\n */\r\n public localToWorldMap: Transform;\r\n /** Radii of gyration (square roots of principal second moments). */\r\n public radiusOfGyration: Vector3d;\r\n /**\r\n * Principal quantity (e.g. length, area, or volume). This is undefined in raw moments, and becomes defined by\r\n * inertiaProductsToPrincipalAxes.\r\n */\r\n public absoluteQuantity?: number;\r\n // private variables\r\n private static _vectorA?: Point4d;\r\n private static _vectorB?: Point4d;\r\n private static _vectorC?: Point4d;\r\n private _point0 = Point3d.create();\r\n private _point1 = Point3d.create();\r\n /** Constructor. */\r\n private constructor() {\r\n this.origin = Point3d.createZero();\r\n this.needOrigin = false;\r\n this.sums = Matrix4d.createZero();\r\n this.localToWorldMap = Transform.createIdentity();\r\n this.radiusOfGyration = Vector3d.create();\r\n this.absoluteQuantity = 0.1; // so optimizer sees its type\r\n this.absoluteQuantity = undefined;\r\n }\r\n /**\r\n * Return the lower-right (3,3) entry in the sums.\r\n * * This is the quantity (i.e. length, area, or volume) summed.\r\n */\r\n public get quantitySum(): number {\r\n return this.sums.weight();\r\n }\r\n /**\r\n * Return a scale factor to make these sums match the target orientation sign.\r\n * * 1.0 if `this.quantitySum` has the same sign as `targetSign`.\r\n * * -1.0 if `this.quantitySum` has the opposite sign from `targetSign`\r\n */\r\n public signFactor(targetSign: number): number {\r\n return targetSign * this.quantitySum > 0 ? 1.0 : -1.0;\r\n }\r\n /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */\r\n public setOriginIfNeeded(origin: Point3d) {\r\n if (this.needOrigin) {\r\n this.origin.setFromPoint3d(origin);\r\n this.needOrigin = false;\r\n }\r\n }\r\n /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */\r\n public setOriginFromGrowableXYZArrayIfNeeded(points: GrowableXYZArray) {\r\n if (this.needOrigin && points.length > 0) {\r\n points.getPoint3dAtCheckedPointIndex(0, this.origin);\r\n this.needOrigin = false;\r\n }\r\n }\r\n /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */\r\n public setOriginXYZIfNeeded(x: number, y: number, z: number) {\r\n if (this.needOrigin) {\r\n this.origin.set(x, y, z);\r\n this.needOrigin = false;\r\n }\r\n }\r\n /**\r\n * Create moments with optional origin.\r\n * * Origin and needOrigin are quirky.\r\n * * (undefined, true) sets up to use first incoming point as origin.\r\n * * (origin) sets up to use that durable origin, set needsOrigin flag false.\r\n * * (origin, true) the \"true\" is meaningless.\r\n * * (undefined, false) makes 000 the durable origin.\r\n */\r\n public static create(origin?: Point3d | undefined, needOrigin: boolean = false): MomentData {\r\n const data = new MomentData();\r\n data.needOrigin = needOrigin;\r\n if (origin) {\r\n data.origin.setFromPoint3d(origin);\r\n data.needOrigin = false;\r\n }\r\n return data;\r\n }\r\n /**\r\n * Return the formal tensor of integrated values `[yy+zz,xy,xz][yx,xx+zz,yz][zx,xy,xx+yy]`.\r\n * @param products matrix of (integrated) `[xx,xy,xz][yx,yy,yz][zx,xy,zz]`.\r\n */\r\n public static momentTensorFromInertiaProducts(products: Matrix3d): Matrix3d {\r\n const rr = products.sumDiagonal();\r\n const result = Matrix3d.createScale(rr, rr, rr);\r\n result.addScaledInPlace(products, -1.0);\r\n return result;\r\n }\r\n /** Sort the columns of the matrix for increasing moments. */\r\n public static sortColumnsForIncreasingMoments(axes: Matrix3d, moments: Vector3d) {\r\n const points = [\r\n axes.indexedColumnWithWeight(0, moments.x),\r\n axes.indexedColumnWithWeight(1, moments.y),\r\n axes.indexedColumnWithWeight(2, moments.z),\r\n ].sort((dataA: Point4d, dataB: Point4d): number => {\r\n if (dataA.w < dataB.w) return -1;\r\n if (dataA.w > dataB.w) return 1;\r\n return 0;\r\n });\r\n axes.setColumnsPoint4dXYZ(points[0], points[1], points[2]);\r\n if (axes.determinant() < 0)\r\n axes.scaleColumnsInPlace(-1.0, -1.0, -1.0);\r\n // prefer x and z positive; y falls wherever\r\n if (axes.at(0, 0) < 0.0)\r\n axes.scaleColumnsInPlace(-1.0, -1.0, 1.0);\r\n if (axes.at(2, 2) < 0.0)\r\n axes.scaleColumnsInPlace(1.0, -1.0, -1.0);\r\n moments.set(points[0].w, points[1].w, points[2].w);\r\n }\r\n /**\r\n * Return the principal moment data for an array of points.\r\n * @param points array of points.\r\n */\r\n public static pointsToPrincipalAxes(points: Point3d[]): MomentData | undefined {\r\n const moments = new MomentData();\r\n if (points.length === 0)\r\n return moments;\r\n moments.clearSums(points[0]);\r\n moments.accumulatePointMomentsFromOrigin(points);\r\n return this.inertiaProductsToPrincipalAxes(moments.origin, moments.sums);\r\n }\r\n /**\r\n * Compute principal axes from inertial products.\r\n * * The radii of gyration are sorted smallest to largest.\r\n * * Hence x axis is long direction.\r\n * * Hence planar data generates large moment as Z.\r\n * @param origin The origin used for the inertia products.\r\n * @param inertiaProducts The inertia products: sums or integrals of\r\n * [xx,xy,xz,xw; yx,yy,yz,yw; zx,zy,zz,zw; wx,wy,wz,w].\r\n */\r\n public static inertiaProductsToPrincipalAxes(origin: XYZ, inertiaProducts: Matrix4d): MomentData | undefined {\r\n const moments = new MomentData();\r\n moments.sums.setFrom(inertiaProducts);\r\n moments.origin.setFrom(origin);\r\n if (!moments.shiftOriginAndSumsToCentroidOfSums())\r\n return undefined;\r\n const products = moments.sums.matrixPart();\r\n const w = moments.sums.weight();\r\n if (w < 0.0)\r\n products.scaleColumnsInPlace(-1, -1, -1);\r\n const tensor = MomentData.momentTensorFromInertiaProducts(products);\r\n const moment2 = Vector3d.create();\r\n const axisVectors = Matrix3d.createZero();\r\n tensor.fastSymmetricEigenvalues(axisVectors, moment2);\r\n if (moment2.x < 0.0)\r\n return undefined;\r\n MomentData.sortColumnsForIncreasingMoments(axisVectors, moment2);\r\n if (w < 0.0)\r\n axisVectors.scaleColumnsInPlace(1, -1, -1);\r\n moments.localToWorldMap = Transform.createOriginAndMatrix(moments.origin, axisVectors);\r\n moments.radiusOfGyration.set(\r\n Math.sqrt(Math.abs(moment2.x)), Math.sqrt(Math.abs(moment2.y)), Math.sqrt(Math.abs(moment2.z)),\r\n );\r\n moments.radiusOfGyration.scaleInPlace(1.0 / Math.sqrt(Math.abs(w)));\r\n moments.absoluteQuantity = Math.abs(w);\r\n return moments;\r\n }\r\n /**\r\n * Test for match among selected members as they exist after `inertiaProductsToPrincipalAxes`.\r\n * * The members considered are:\r\n * * origin of local to world map (i.e. centroid),\r\n * * radius of gyration,\r\n * * axes of localToWorldMap.\r\n * * Axis direction tests allow these quirks:\r\n * * opposite orientation is considered matched.\r\n * * Full xyz symmetry: If x,y,z radii are matched, axes are not tested.\r\n * * Symmetry in xy plane: If x and y radii are matched, the x and y axes area allowed to spin freely. Only Z direction\r\n * is tested.\r\n * * If either or both are undefined, returns false.\r\n * @param dataA first set of moments.\r\n * @param dataB second set of moments.\r\n */\r\n public static areEquivalentPrincipalAxes(dataA: MomentData | undefined, dataB: MomentData | undefined): boolean {\r\n if (dataA && dataB\r\n && Geometry.isSameCoordinate(dataA.quantitySum, dataB.quantitySum)) { // TODO: need different tolerance for area, volume?\r\n if (dataA.localToWorldMap.getOrigin().isAlmostEqual(dataB.localToWorldMap.getOrigin())\r\n && dataA.radiusOfGyration.isAlmostEqual(dataB.radiusOfGyration)) {\r\n if (Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.y)) {\r\n // we have at least xy symmetry\r\n if (Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.z))\r\n return true;\r\n // just xy; allow opposite z directions; if the z's are aligned, x and y can spin freely\r\n const zA = dataA.localToWorldMap.matrix.columnZ();\r\n const zB = dataB.localToWorldMap.matrix.columnZ();\r\n if (zA.isParallelTo(zB, true))\r\n return true;\r\n return false;\r\n }\r\n // no symmetry; test all three axes\r\n const vectorA = Vector3d.create();\r\n const vectorB = Vector3d.create();\r\n for (let i = 0; i < 3; i++) {\r\n dataA.localToWorldMap.matrix.getColumn(i, vectorA);\r\n dataB.localToWorldMap.matrix.getColumn(i, vectorB);\r\n if (!vectorA.isParallelTo(vectorB, true))\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** Clear the MomentData sums to zero, and establish a new origin. */\r\n public clearSums(origin?: Point3d) {\r\n this.sums.setZero();\r\n if (origin)\r\n this.origin.setFrom(origin);\r\n else\r\n this.origin.setZero();\r\n }\r\n /** Accumulate products-of-components for given points. */\r\n public accumulatePointMomentsFromOrigin(points: Point3d[]) {\r\n for (const p of points) {\r\n this.sums.addMomentsInPlace(\r\n p.x - this.origin.x,\r\n p.y - this.origin.y,\r\n p.z - this.origin.z,\r\n 1.0,\r\n );\r\n }\r\n }\r\n /** Revise the accumulated sums to be \"around the centroid\". */\r\n public shiftOriginAndSumsToCentroidOfSums(): boolean {\r\n const xyz = this.sums.columnW().realPoint(); // centroid of the geometry\r\n if (xyz) {\r\n this.shiftOriginAndSumsByXYZ(xyz.x, xyz.y, xyz.z);\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Revise the accumulated sums.\r\n * * Add (ax,ay,az) to the origin coordinates.\r\n * * Apply the negative translation to the sums.\r\n */\r\n public shiftOriginAndSumsByXYZ(ax: number, ay: number, az: number) {\r\n this.origin.addXYZInPlace(ax, ay, az);\r\n this.sums.multiplyTranslationSandwichInPlace(-ax, -ay, -az);\r\n }\r\n /** Revise the accumulated sums so they are based at a specified origin. */\r\n public shiftOriginAndSumsToNewOrigin(newOrigin: XYAndZ) {\r\n this.shiftOriginAndSumsByXYZ(newOrigin.x - this.origin.x, newOrigin.y - this.origin.y, newOrigin.z - this.origin.z);\r\n }\r\n /**\r\n * Compute moments of a triangle from the origin. Accumulate them to `this.sums`.\r\n * * If `this.needOrigin` is set, `this.origin` is set to `pointB`.\r\n * * If `pointA` is undefined, use `this.origin` as `pointA`.\r\n */\r\n public accumulateTriangleMomentsXY(pointA: XAndY | undefined, pointB: XAndY, pointC: XAndY) {\r\n this.setOriginXYZIfNeeded(pointB.x, pointB.y, 0.0);\r\n const x0 = this.origin.x;\r\n const y0 = this.origin.y;\r\n const vectorA = MomentData._vectorA = (pointA !== undefined) ?\r\n Point4d.create(pointA.x - x0, pointA.y - y0, 0.0, 1.0, MomentData._vectorA) :\r\n Point4d.create(0.0, 0.0, 0.0, 1.0, MomentData._vectorA);\r\n const vectorB = MomentData._vectorB = Point4d.create(pointB.x - x0, pointB.y - y0, 0.0, 1.0, MomentData._vectorB);\r\n const vectorC = MomentData._vectorC = Point4d.create(pointC.x - x0, pointC.y - y0, 0.0, 1.0, MomentData._vectorC);\r\n // Below we calculate 16 double integrals: \\iint_T [x y 0 1]^ [x y 0 1] dT over triangle T=(A,B,C).\r\n // Each accumulates contributions from 9 scaled outer products. Integration computations use the barycentric\r\n // change of variables [B-A C-A][u,v]^ = [x,y]^ with Jacobian detJ = B-A x C-A = twice the area of T.\r\n // This converts the integration domain from T to the triangle bounded by u=0, v=0 and v=1-u, yielding e.g.,\r\n // \\iint_T x^2 dT = detJ \\int_0^1 \\int_0^{1-u} u^2 dv du = detJ / 12, and similarly \\iint_T xy dT = detJ / 24.\r\n const detJ = Geometry.crossProductXYXY(\r\n vectorB.x - vectorA.x, vectorB.y - vectorA.y, vectorC.x - vectorA.x, vectorC.y - vectorA.y,\r\n );\r\n if (detJ !== 0.0) {\r\n const r1_12 = detJ / 12.0;\r\n const r1_24 = detJ / 24.0;\r\n\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, r1_12);\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorB, r1_24);\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorC, r1_24);\r\n\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorA, r1_24);\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_12);\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorC, r1_24);\r\n\r\n this.sums.addScaledOuterProductInPlace(vectorC, vectorA, r1_24);\r\n this.sums.addScaledOuterProductInPlace(vectorC, vectorB, r1_24);\r\n this.sums.addScaledOuterProductInPlace(vectorC, vectorC, r1_12);\r\n }\r\n }\r\n /** Add scaled outer product of (4d, unit weight) point to `this.sums`. */\r\n public accumulateScaledOuterProduct(point: XYAndZ, scaleFactor: number) {\r\n this.setOriginXYZIfNeeded(point.x, point.y, 0.0);\r\n const vectorA = MomentData._vectorA = Point4d.create(\r\n point.x - this.origin.x, point.y - this.origin.y, point.z - this.origin.z, 1.0, MomentData._vectorA,\r\n );\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, scaleFactor);\r\n }\r\n /** Accumulate wire moment integral from pointA to pointB */\r\n public accumulateLineMomentsXYZ(pointA: Point3d, pointB: Point3d) {\r\n this.setOriginXYZIfNeeded(pointA.x, pointA.y, pointA.z);\r\n const x0 = this.origin.x;\r\n const y0 = this.origin.y;\r\n const z0 = this.origin.z;\r\n const vectorA = MomentData._vectorA = Point4d.create(\r\n pointA.x - x0, pointA.y - y0, pointA.z - z0, 1.0, MomentData._vectorA,\r\n );\r\n const vectorB = MomentData._vectorB = Point4d.create(\r\n pointB.x - x0, pointB.y - y0, pointB.z - z0, 1.0, MomentData._vectorB,\r\n );\r\n const detJ = pointA.distance(pointB);\r\n const r1_3 = detJ / 3.0;\r\n const r1_6 = detJ / 6.0;\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, r1_3);\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorB, r1_6);\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorA, r1_6);\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_3);\r\n }\r\n /**\r\n * Compute moments of triangles from a base point to the given linestring. Accumulate them to `this.sums`.\r\n * * If `this.needOrigin` is set, `this.origin` is set to the first point of the array.\r\n * * If `sweepBase` is undefined, use `this.origin` as `sweepBase`.\r\n */\r\n public accumulateTriangleToLineStringMomentsXY(sweepBase: XAndY | undefined, points: GrowableXYZArray) {\r\n const n = points.length;\r\n if (n > 1) {\r\n points.getPoint3dAtUncheckedPointIndex(0, this._point0);\r\n // The linestring forms a polygon with sweepBase. Integrate over this polygon using Shoelace algorithm.\r\n for (let i = 1; i < n; i++) {\r\n points.getPoint3dAtUncheckedPointIndex(i, this._point1);\r\n this.accumulateTriangleMomentsXY(sweepBase, this._point0, this._point1);\r\n this._point0.setFromPoint3d(this._point1);\r\n }\r\n }\r\n }\r\n /**\r\n * Assemble XX, YY, XY products into a full matrix form [xx,xy,0,0; xy,yy,0,0; 0,0,0,0; 0,0,0,1].\r\n * * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin].\r\n * (column weights 0001; only xy parts of vectors).\r\n * * Scale by detJ for the xy-only determinant of the vectors.\r\n * @param productXX\r\n * @param productXY\r\n * @param productYY\r\n * @param area area in caller's system.\r\n * @param origin caller's origin.\r\n * @param vectorU caller's U axis (not necessarily unit).\r\n * @param vectorV caller's V axis (not necessarily unit).\r\n */\r\n public accumulateXYProductsInCentroidalFrame(\r\n productXX: number, productXY: number, productYY: number,\r\n area: number, origin: XAndY, vectorU: XAndY, vectorV: XAndY,\r\n ) {\r\n const centroidalProducts = Matrix4d.createRowValues(\r\n productXX, productXY, 0, 0,\r\n productXY, productYY, 0, 0,\r\n 0, 0, 0, 0,\r\n 0, 0, 0, area,\r\n );\r\n const detJ = Geometry.crossProductXYXY(vectorU.x, vectorV.x, vectorU.y, vectorV.y);\r\n const placement = Matrix4d.createRowValues(\r\n vectorU.x, vectorV.x, 0, origin.x - this.origin.x,\r\n vectorU.y, vectorV.y, 0, origin.y - this.origin.y,\r\n 0, 0, 0, 0,\r\n 0, 0, 0, 1,\r\n );\r\n const AB = placement.multiplyMatrixMatrix(centroidalProducts);\r\n const ABAT = AB.multiplyMatrixMatrixTranspose(placement);\r\n this.sums.addScaledInPlace(ABAT, detJ);\r\n }\r\n /**\r\n * Accumulate sums from other moments.\r\n * * Scale by given scaleFactor (e.g. sign to correct orientation).\r\n * * Pull the origin from `other` if `this` needs an origin.\r\n */\r\n public accumulateProducts(other: MomentData, scale: number) {\r\n this.setOriginIfNeeded(other.origin);\r\n this.sums.addTranslationSandwichInPlace(\r\n other.sums, this.origin.x - other.origin.x, this.origin.y - other.origin.y, this.origin.z - other.origin.z, scale,\r\n );\r\n }\r\n /**\r\n * Accumulate sums from Matrix4d and origin.\r\n * * Scale by given scaleFactor (e.g. sign to correct orientation).\r\n * * Trap the origin if `this` needs an origin.\r\n */\r\n public accumulateProductsFromOrigin(origin: Point3d, products: Matrix4d, scale: number) {\r\n this.setOriginIfNeeded(origin);\r\n this.sums.addTranslationSandwichInPlace(\r\n products, this.origin.x - origin.x, this.origin.y - origin.y, this.origin.z - origin.z, scale,\r\n );\r\n }\r\n /** Convert to a json data object. */\r\n public toJSON(): any {\r\n return {\r\n origin: this.origin,\r\n sums: this.sums.toJSON(),\r\n radiusOfGyration: this.radiusOfGyration.toJSON(),\r\n localToWorld: this.localToWorldMap.toJSON(),\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaneByOriginAndVectors4d.js","sourceRoot":"","sources":["../../../src/geometry4d/PlaneByOriginAndVectors4d.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 Numerics\n */\n\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\nimport { Point4d } from \"./Point4d\";\n\n/**\n * A PlaneByOriginAndVectors4d is a 4d origin and pair of 4d \"vectors\" defining a 4d plane.\n * * The parameterization of the plane is `X = origin + vectorU * u + vectorV * v`\n * * With particular weight values `origin.w === 1, vectorU.w === 0, vectorV.w === 0` this is like `Plane3dByOriginAndVectors`\n * * With other weights, the deweighted xyz coordinates of points on the 4d plane still form a 3d plane.\n * @public\n */\nexport class PlaneByOriginAndVectors4d {\n /** homogeneous origin */\n public origin: Point4d;\n /** homogeneous u-direction vector */\n public vectorU: Point4d;\n /** homogeneous v-direction vector */\n public vectorV: Point4d;\n private constructor(origin: Point4d, vectorU: Point4d, vectorV: Point4d) {\n this.origin = origin;\n this.vectorU = vectorU;\n this.vectorV = vectorV;\n }\n /** Return a clone of this plane */\n public clone(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n if (result) {\n result.setFrom(this);\n return result;\n }\n return new PlaneByOriginAndVectors4d(this.origin.clone(), this.vectorU.clone(), this.vectorV.clone());\n }\n /** copy all content from other plane */\n public setFrom(other: PlaneByOriginAndVectors4d): void {\n this.origin.setFrom(other.origin);\n this.vectorU.setFrom(other.vectorU);\n this.vectorV.setFrom(other.vectorV);\n }\n /** Return true if origin, vectorU, and vectorV pass isAlmostEqual. */\n public isAlmostEqual(other: PlaneByOriginAndVectors4d): boolean {\n return this.origin.isAlmostEqual(other.origin)\n && this.vectorU.isAlmostEqual(other.vectorU)\n && this.vectorV.isAlmostEqual(other.vectorV);\n }\n /** Create a plane with (copies of) origin, vectorU, vectorV parameters, all given as full 4d points.\n */\n public static createOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n if (result) {\n result.setOriginAndVectors(origin, vectorU, vectorV);\n return result;\n }\n return new PlaneByOriginAndVectors4d(origin.clone(), vectorU.clone(), vectorV.clone());\n }\n /** Set all numeric data from complete list of (x,y,z,w) in origin, vectorU, and vectorV */\n public setOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number): PlaneByOriginAndVectors4d {\n this.origin.set(x0, y0, z0, w0);\n this.vectorU.set(ux, uy, uz, uw);\n this.vectorV.set(vx, vy, vz, vw);\n return this;\n }\n /** Copy the contents of origin, vectorU, vectorV parameters to respective member variables */\n public setOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d): PlaneByOriginAndVectors4d {\n this.origin.setFrom(origin);\n this.vectorU.setFrom(vectorU);\n this.vectorV.setFrom(vectorV);\n return this;\n }\n /** Create from complete list of (x,y,z,w) in origin, vectorU, and vectorV */\n public static createOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n if (result)\n return result.setOriginAndVectorsXYZW(x0, y0, z0, w0, ux, uy, uz, uw, vx, vy, vz, vw);\n return new PlaneByOriginAndVectors4d(Point4d.create(x0, y0, z0, w0), Point4d.create(ux, uy, uz, uw), Point4d.create(vx, vy, vz, uw));\n }\n /** create from origin point, (u=1,v=0) point, and (u=0,v=1) point. */\n public static createOriginAndTargets3d(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n return PlaneByOriginAndVectors4d.createOriginAndVectorsXYZW(origin.x, origin.y, origin.z, 1.0, targetU.x - origin.x, targetU.y - origin.y, targetU.z - origin.z, 0.0, targetV.x - origin.x, targetV.y - origin.y, targetV.z - origin.z, 0.0, result);\n }\n /** evaluate plane point (full 3d) at given (u,v) coordinate. */\n public fractionToPoint(u: number, v: number, result?: Point4d): Point4d {\n return this.origin.plus2Scaled(this.vectorU, u, this.vectorV, v, result);\n }\n /** create a new plane which maps to the cartesian xy plane. */\n public static createXYPlane(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n return PlaneByOriginAndVectors4d.createOriginAndVectorsXYZW(0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, result);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PlaneByOriginAndVectors4d.js","sourceRoot":"","sources":["../../../src/geometry4d/PlaneByOriginAndVectors4d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Point4d } from \"./Point4d\";\r\n\r\n/**\r\n * A PlaneByOriginAndVectors4d is a 4d origin and pair of 4d \"vectors\" defining a 4d plane.\r\n * * The parameterization of the plane is `X = origin + vectorU * u + vectorV * v`\r\n * * With particular weight values `origin.w === 1, vectorU.w === 0, vectorV.w === 0` this is like `Plane3dByOriginAndVectors`\r\n * * With other weights, the deweighted xyz coordinates of points on the 4d plane still form a 3d plane.\r\n * @public\r\n */\r\nexport class PlaneByOriginAndVectors4d {\r\n /** homogeneous origin */\r\n public origin: Point4d;\r\n /** homogeneous u-direction vector */\r\n public vectorU: Point4d;\r\n /** homogeneous v-direction vector */\r\n public vectorV: Point4d;\r\n private constructor(origin: Point4d, vectorU: Point4d, vectorV: Point4d) {\r\n this.origin = origin;\r\n this.vectorU = vectorU;\r\n this.vectorV = vectorV;\r\n }\r\n /** Return a clone of this plane */\r\n public clone(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n if (result) {\r\n result.setFrom(this);\r\n return result;\r\n }\r\n return new PlaneByOriginAndVectors4d(this.origin.clone(), this.vectorU.clone(), this.vectorV.clone());\r\n }\r\n /** copy all content from other plane */\r\n public setFrom(other: PlaneByOriginAndVectors4d): void {\r\n this.origin.setFrom(other.origin);\r\n this.vectorU.setFrom(other.vectorU);\r\n this.vectorV.setFrom(other.vectorV);\r\n }\r\n /** Return true if origin, vectorU, and vectorV pass isAlmostEqual. */\r\n public isAlmostEqual(other: PlaneByOriginAndVectors4d): boolean {\r\n return this.origin.isAlmostEqual(other.origin)\r\n && this.vectorU.isAlmostEqual(other.vectorU)\r\n && this.vectorV.isAlmostEqual(other.vectorV);\r\n }\r\n /** Create a plane with (copies of) origin, vectorU, vectorV parameters, all given as full 4d points.\r\n */\r\n public static createOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n if (result) {\r\n result.setOriginAndVectors(origin, vectorU, vectorV);\r\n return result;\r\n }\r\n return new PlaneByOriginAndVectors4d(origin.clone(), vectorU.clone(), vectorV.clone());\r\n }\r\n /** Set all numeric data from complete list of (x,y,z,w) in origin, vectorU, and vectorV */\r\n public setOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number): PlaneByOriginAndVectors4d {\r\n this.origin.set(x0, y0, z0, w0);\r\n this.vectorU.set(ux, uy, uz, uw);\r\n this.vectorV.set(vx, vy, vz, vw);\r\n return this;\r\n }\r\n /** Copy the contents of origin, vectorU, vectorV parameters to respective member variables */\r\n public setOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d): PlaneByOriginAndVectors4d {\r\n this.origin.setFrom(origin);\r\n this.vectorU.setFrom(vectorU);\r\n this.vectorV.setFrom(vectorV);\r\n return this;\r\n }\r\n /** Create from complete list of (x,y,z,w) in origin, vectorU, and vectorV */\r\n public static createOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n if (result)\r\n return result.setOriginAndVectorsXYZW(x0, y0, z0, w0, ux, uy, uz, uw, vx, vy, vz, vw);\r\n return new PlaneByOriginAndVectors4d(Point4d.create(x0, y0, z0, w0), Point4d.create(ux, uy, uz, uw), Point4d.create(vx, vy, vz, uw));\r\n }\r\n /** create from origin point, (u=1,v=0) point, and (u=0,v=1) point. */\r\n public static createOriginAndTargets3d(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n return PlaneByOriginAndVectors4d.createOriginAndVectorsXYZW(origin.x, origin.y, origin.z, 1.0, targetU.x - origin.x, targetU.y - origin.y, targetU.z - origin.z, 0.0, targetV.x - origin.x, targetV.y - origin.y, targetV.z - origin.z, 0.0, result);\r\n }\r\n /** evaluate plane point (full 3d) at given (u,v) coordinate. */\r\n public fractionToPoint(u: number, v: number, result?: Point4d): Point4d {\r\n return this.origin.plus2Scaled(this.vectorU, u, this.vectorV, v, result);\r\n }\r\n /** create a new plane which maps to the cartesian xy plane. */\r\n public static createXYPlane(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n return PlaneByOriginAndVectors4d.createOriginAndVectorsXYZW(0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, result);\r\n }\r\n}\r\n"]}
|
|
@@ -61,7 +61,7 @@ export declare class Point4d extends Plane3d implements BeJSONFunctions {
|
|
|
61
61
|
/** Create a new point with coordinates from a json array `[x,y,z,w]` */
|
|
62
62
|
static fromJSON(json?: Point4dProps): Point4d;
|
|
63
63
|
/** Near-equality test, using `Geometry.isSameCoordinate` on all 4 x,y,z,w */
|
|
64
|
-
isAlmostEqual(other: Point4d): boolean;
|
|
64
|
+
isAlmostEqual(other: Point4d, tolerance?: number): boolean;
|
|
65
65
|
/**
|
|
66
66
|
* Test for same coordinate by direct x,y,z,w args
|
|
67
67
|
* @param x x to test
|
|
@@ -69,7 +69,7 @@ export declare class Point4d extends Plane3d implements BeJSONFunctions {
|
|
|
69
69
|
* @param z z to test
|
|
70
70
|
* @param w w to test
|
|
71
71
|
*/
|
|
72
|
-
isAlmostEqualXYZW(x: number, y: number, z: number, w: number): boolean;
|
|
72
|
+
isAlmostEqualXYZW(x: number, y: number, z: number, w: number, tolerance?: number): boolean;
|
|
73
73
|
/**
|
|
74
74
|
* Convert an Angle to a JSON object.
|
|
75
75
|
* @return {*} [x,y,z,w]
|
|
@@ -83,9 +83,10 @@ export declare class Point4d extends Plane3d implements BeJSONFunctions {
|
|
|
83
83
|
* * x,y,z,w all participate without normalization.
|
|
84
84
|
*/
|
|
85
85
|
distanceSquaredXYZW(other: Point4d): number;
|
|
86
|
-
/** Return the distance between the instance and other after normalizing by weights
|
|
87
|
-
*/
|
|
86
|
+
/** Return the xy distance between the instance and `other` after normalizing by weights */
|
|
88
87
|
realDistanceXY(other: Point4d): number | undefined;
|
|
88
|
+
/** Return the xy squared distance between the instance and `other` after normalizing by weights */
|
|
89
|
+
realDistanceSquaredXY(other: Point4d): number | undefined;
|
|
89
90
|
/** Return the largest absolute distance between corresponding components
|
|
90
91
|
* * x,y,z,w all participate without normalization.
|
|
91
92
|
*/
|
|
@@ -199,6 +200,8 @@ export declare class Point4d extends Plane3d implements BeJSONFunctions {
|
|
|
199
200
|
* * If the xyz part of `this` are all zero, (a clone of) `spacePoint` is returned.
|
|
200
201
|
*/
|
|
201
202
|
projectPointToPlane(spacePoint: Point3d, result?: Point3d): Point3d;
|
|
203
|
+
/** Return the projection of (x,y,z) onto the plane. */
|
|
204
|
+
projectXYZToPlane(x: number, y: number, z: number, result?: Point3d): Point3d;
|
|
202
205
|
/** scale all components (including w!!) */
|
|
203
206
|
scale(scale: number, result?: Point4d): Point4d;
|
|
204
207
|
/** Negate components (including w!!) */
|