@itwin/core-geometry 5.0.0-dev.56 → 5.0.0-dev.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/Constant.js +8 -8
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.js +12 -12
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.js +3 -1
- package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js +18 -0
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js +6 -2
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve3dH.js +1 -0
- package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js +22 -2
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.js +6 -0
- package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.js +2 -0
- package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.js +2 -0
- package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js +21 -2
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js +12 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.js +8 -1
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js +12 -0
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js +13 -12
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js +4 -0
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js +10 -1
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js +19 -0
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js +5 -1
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.js +11 -8
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js +4 -2
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/curve/Arc3d.js +19 -11
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/ConstructCurveBetweenCurves.js +3 -0
- package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/cjs/curve/CoordinateXYZ.js +3 -2
- package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +25 -6
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +13 -9
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +44 -0
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js +20 -2
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveProcessor.js +2 -0
- package/lib/cjs/curve/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js +2 -0
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js +6 -2
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.js +27 -7
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.js +12 -4
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.js +25 -21
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js +4 -2
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.js +2 -2
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js +3 -2
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js +1 -0
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js +3 -0
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js +6 -2
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js +4 -6
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.js +12 -0
- package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js +14 -0
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.js +4 -5
- package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
- package/lib/cjs/curve/RegionOps.js +9 -10
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js +24 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js +23 -6
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.js +4 -2
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js +6 -0
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js +2 -0
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js +6 -0
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
- package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js +1 -0
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js +12 -0
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +22 -4
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js +1 -0
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js +3 -0
- package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.js +4 -0
- package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.js +2 -0
- package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +4 -0
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js +12 -2
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +23 -3
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.js +5 -0
- package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +10 -0
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js +10 -0
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js +6 -0
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +10 -8
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js +2 -0
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/BarycentricTriangle.js +25 -0
- package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js +8 -0
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js +5 -0
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js +48 -0
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js +8 -0
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js +7 -0
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js +12 -0
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js +3 -0
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js +16 -0
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js +16 -0
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedCollectionInterval.js +6 -0
- package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYCollection.js +1 -0
- package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js +2 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js +3 -0
- package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +27 -4
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js +9 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +7 -0
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js +2 -0
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js +4 -0
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js +2 -0
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +6 -0
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js +5 -5
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PointStreaming.js +12 -4
- package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +51 -14
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +6 -2
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js +3 -0
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.js +19 -2
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.js +2 -0
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js +12 -0
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/ReusableObjectCache.js +4 -0
- package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/cjs/geometry3d/Segment1d.js +4 -0
- package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.js +11 -0
- package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.js +3 -0
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js +6 -0
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/cjs/geometry4d/Map4d.js +2 -0
- package/lib/cjs/geometry4d/Map4d.js.map +1 -1
- package/lib/cjs/geometry4d/Matrix4d.js +1 -0
- package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
- package/lib/cjs/geometry4d/MomentData.js +28 -2
- package/lib/cjs/geometry4d/MomentData.js.map +1 -1
- package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
- package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/cjs/geometry4d/Point4d.js +2 -0
- package/lib/cjs/geometry4d/Point4d.js.map +1 -1
- package/lib/cjs/numerics/BezierPolynomials.js +8 -0
- package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
- package/lib/cjs/numerics/ClusterableArray.js +21 -5
- package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
- package/lib/cjs/numerics/Complex.js +2 -0
- package/lib/cjs/numerics/Complex.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js +3 -0
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.js +59 -4
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.js +13 -1
- package/lib/cjs/numerics/PolarData.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.js +52 -14
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js +16 -10
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/TriDiagonalSystem.js +11 -0
- package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/cjs/numerics/UnionFind.js +1 -0
- package/lib/cjs/numerics/UnionFind.js.map +1 -1
- package/lib/cjs/numerics/UsageSums.js +10 -0
- package/lib/cjs/numerics/UsageSums.js.map +1 -1
- package/lib/cjs/polyface/AuxData.js +16 -0
- package/lib/cjs/polyface/AuxData.js.map +1 -1
- package/lib/cjs/polyface/BoxTopology.js +13 -13
- package/lib/cjs/polyface/BoxTopology.js.map +1 -1
- package/lib/cjs/polyface/FacetFaceData.js +2 -0
- package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
- package/lib/cjs/polyface/FacetLocationDetail.js +30 -0
- package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/cjs/polyface/FacetOrientation.js +12 -1
- package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
- package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +17 -1
- package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js +1 -0
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +8 -0
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceWalker.js +4 -0
- package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/cjs/polyface/Polyface.js +18 -2
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +15 -4
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js +8 -0
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.js +64 -1
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +42 -2
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/RangeLengthData.js +7 -0
- package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
- package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/MinimumValueTester.js +5 -2
- package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
- package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
- package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +5 -0
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
- package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js +8 -0
- package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
- package/lib/cjs/polyface/TriangleCandidate.js +3 -0
- package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +32 -0
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/RangeSearch.js +3 -3
- package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/XYPointBuckets.js +6 -0
- package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/cjs/serialization/BGFBAccessors.js +82 -164
- package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js +2 -2
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js +1 -0
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/DeepCompare.js +17 -17
- package/lib/cjs/serialization/DeepCompare.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js +25 -24
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/solid/Box.js +7 -2
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.js +6 -2
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.js +4 -2
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js +5 -2
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.js +3 -2
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SolidPrimitive.js +4 -2
- package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
- package/lib/cjs/solid/Sphere.js +4 -2
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.js +9 -0
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js +7 -2
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js +13 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.js +39 -4
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +4 -0
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js +2 -0
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +9 -2
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphValidation.js +7 -9
- package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeMarkSet.js +5 -0
- package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +6 -0
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +1 -0
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js +16 -0
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js +2 -0
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js +4 -0
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js +3 -0
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.js +11 -6
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js +22 -0
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/SignedDataSummary.js +22 -0
- package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js +16 -6
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/XYParitySearchContext.js +13 -0
- package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js +8 -8
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.js +12 -12
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.js +3 -1
- package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.js +18 -0
- package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js +6 -2
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve3dH.js +1 -0
- package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js +22 -2
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/bspline/Bezier1dNd.js +6 -0
- package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3d.js +2 -0
- package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3dH.js +2 -0
- package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js +21 -2
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js +12 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.js +8 -1
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/bspline/SurfaceLocationDetail.js +12 -0
- package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.js +13 -12
- package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.js +4 -0
- package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.js +10 -1
- package/lib/esm/clipping/ClipPlane.js.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.js +19 -0
- package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.js +5 -1
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ClipVector.js +11 -8
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js +4 -2
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/esm/curve/Arc3d.js +19 -11
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/ConstructCurveBetweenCurves.js +3 -0
- package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/esm/curve/CoordinateXYZ.js +3 -2
- package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +25 -6
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.js +13 -9
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +44 -0
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js +20 -2
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/CurveProcessor.js +2 -0
- package/lib/esm/curve/CurveProcessor.js.map +1 -1
- package/lib/esm/curve/CurveWireMomentsXYZ.js +2 -0
- package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.js +6 -2
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.js +27 -7
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.js +12 -4
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.js +25 -21
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/ParityRegion.js +4 -2
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.js +2 -2
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js +3 -2
- package/lib/esm/curve/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.js +1 -0
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.js +3 -0
- package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js +6 -2
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js +4 -6
- package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountChain.js +12 -0
- package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js +14 -0
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.js +4 -5
- package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
- package/lib/esm/curve/RegionOps.js +9 -10
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js +24 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.js +23 -6
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/UnionRegion.js +4 -2
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js +6 -0
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js +2 -0
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveLengthContext.js +6 -0
- package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
- package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js +1 -0
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js +12 -0
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +22 -4
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js +1 -0
- package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransformInPlaceContext.js +3 -0
- package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/ClothoidSeries.js +4 -0
- package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/esm/curve/spiral/CubicEvaluator.js +2 -0
- package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +4 -0
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js +12 -2
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js +23 -3
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/NormalizedTransition.js +5 -0
- package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js +10 -0
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js +10 -0
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js +6 -0
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.js +10 -8
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js +2 -0
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/BarycentricTriangle.js +25 -0
- package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.js +8 -0
- package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.js +5 -0
- package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js +48 -0
- package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js +8 -0
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/FrustumAnimation.js +7 -0
- package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js +12 -0
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js +3 -0
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js +16 -0
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.js +16 -0
- package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/esm/geometry3d/IndexedCollectionInterval.js +6 -0
- package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYCollection.js +1 -0
- package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.js +2 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js +3 -0
- package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +27 -4
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js +9 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +7 -0
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/esm/geometry3d/Point2dArrayCarrier.js +2 -0
- package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js +4 -0
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.js +2 -0
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +6 -0
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js +5 -5
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PointStreaming.js +12 -4
- package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +51 -14
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +6 -2
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js +3 -0
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.js +19 -2
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.js +2 -0
- package/lib/esm/geometry3d/Ray2d.js.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js +12 -0
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/ReusableObjectCache.js +4 -0
- package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/esm/geometry3d/Segment1d.js +4 -0
- package/lib/esm/geometry3d/Segment1d.js.map +1 -1
- package/lib/esm/geometry3d/SortablePolygon.js +11 -0
- package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/esm/geometry3d/Transform.js +3 -0
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.js +6 -0
- package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/esm/geometry4d/Map4d.js +2 -0
- package/lib/esm/geometry4d/Map4d.js.map +1 -1
- package/lib/esm/geometry4d/Matrix4d.js +1 -0
- package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
- package/lib/esm/geometry4d/MomentData.js +28 -2
- package/lib/esm/geometry4d/MomentData.js.map +1 -1
- package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
- package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/esm/geometry4d/Point4d.js +2 -0
- package/lib/esm/geometry4d/Point4d.js.map +1 -1
- package/lib/esm/numerics/BezierPolynomials.js +8 -0
- package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
- package/lib/esm/numerics/ClusterableArray.js +21 -5
- package/lib/esm/numerics/ClusterableArray.js.map +1 -1
- package/lib/esm/numerics/Complex.js +2 -0
- package/lib/esm/numerics/Complex.js.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.js +3 -0
- package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/esm/numerics/Newton.js +59 -4
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/PascalCoefficients.js +1 -1
- package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
- package/lib/esm/numerics/PolarData.js +13 -1
- package/lib/esm/numerics/PolarData.js.map +1 -1
- package/lib/esm/numerics/Polynomials.js +52 -14
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js +16 -10
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/numerics/TriDiagonalSystem.js +11 -0
- package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/esm/numerics/UnionFind.js +1 -0
- package/lib/esm/numerics/UnionFind.js.map +1 -1
- package/lib/esm/numerics/UsageSums.js +10 -0
- package/lib/esm/numerics/UsageSums.js.map +1 -1
- package/lib/esm/polyface/AuxData.js +16 -0
- package/lib/esm/polyface/AuxData.js.map +1 -1
- package/lib/esm/polyface/BoxTopology.js +13 -13
- package/lib/esm/polyface/BoxTopology.js.map +1 -1
- package/lib/esm/polyface/FacetFaceData.js +2 -0
- package/lib/esm/polyface/FacetFaceData.js.map +1 -1
- package/lib/esm/polyface/FacetLocationDetail.js +30 -0
- package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/esm/polyface/FacetOrientation.js +12 -1
- package/lib/esm/polyface/FacetOrientation.js.map +1 -1
- package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +17 -1
- package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js +1 -0
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js +8 -0
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceWalker.js +4 -0
- package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/esm/polyface/Polyface.js +18 -2
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +15 -4
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js +8 -0
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceData.js +64 -1
- package/lib/esm/polyface/PolyfaceData.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +42 -2
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/RangeLengthData.js +7 -0
- package/lib/esm/polyface/RangeLengthData.js.map +1 -1
- package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
- package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/MinimumValueTester.js +5 -2
- package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
- package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
- package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeNode.js +5 -0
- package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
- package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/esm/polyface/TaggedNumericData.js +8 -0
- package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
- package/lib/esm/polyface/TriangleCandidate.js +3 -0
- package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js +32 -0
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/RangeSearch.js +3 -3
- package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/XYPointBuckets.js +6 -0
- package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/esm/serialization/BGFBAccessors.js +82 -164
- package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.js +2 -2
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js +1 -0
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/DeepCompare.js +17 -17
- package/lib/esm/serialization/DeepCompare.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js +25 -24
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/solid/Box.js +7 -2
- package/lib/esm/solid/Box.js.map +1 -1
- package/lib/esm/solid/Cone.js +6 -2
- package/lib/esm/solid/Cone.js.map +1 -1
- package/lib/esm/solid/LinearSweep.js +4 -2
- package/lib/esm/solid/LinearSweep.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.js +5 -2
- package/lib/esm/solid/RotationalSweep.js.map +1 -1
- package/lib/esm/solid/RuledSweep.js +3 -2
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/SolidPrimitive.js +4 -2
- package/lib/esm/solid/SolidPrimitive.js.map +1 -1
- package/lib/esm/solid/Sphere.js +4 -2
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/SweepContour.js +9 -0
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/solid/TorusPipe.js +7 -2
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js +13 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.js +39 -4
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +4 -0
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js +2 -0
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js +9 -2
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphValidation.js +7 -9
- package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/esm/topology/HalfEdgeMarkSet.js +5 -0
- package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js +6 -0
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js +1 -0
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js +16 -0
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js +2 -0
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js +4 -0
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/MaskManager.js +3 -0
- package/lib/esm/topology/MaskManager.js.map +1 -1
- package/lib/esm/topology/Merging.js +11 -6
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.js +22 -0
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/SignedDataSummary.js +22 -0
- package/lib/esm/topology/SignedDataSummary.js.map +1 -1
- package/lib/esm/topology/Triangulation.js +16 -6
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js +13 -0
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BGFBWriter.js","sourceRoot":"","sources":["../../../src/serialization/BGFBWriter.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/** @packageDocumentation\n * @module Serialization\n */\nimport { flatbuffers } from \"flatbuffers\";\nimport { AkimaCurve3d } from \"../bspline/AkimaCurve3d\";\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\nimport { BSplineSurface3d, BSplineSurface3dH, UVSelect } from \"../bspline/BSplineSurface\";\nimport { InterpolationCurve3d } from \"../bspline/InterpolationCurve3d\";\nimport { BSplineWrapMode } from \"../bspline/KnotVector\";\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CurveCollection } from \"../curve/CurveCollection\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { Path } from \"../curve/Path\";\nimport { PointString3d } from \"../curve/PointString3d\";\nimport { DirectSpiral3d } from \"../curve/spiral/DirectSpiral3d\";\nimport { IntegratedSpiral3d } from \"../curve/spiral/IntegratedSpiral3d\";\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point3d, XYZ } from \"../geometry3d/Point3dVector3d\";\nimport { AuxChannel, AuxChannelData, PolyfaceAuxData } from \"../polyface/AuxData\";\nimport { IndexedPolyface } from \"../polyface/Polyface\";\nimport { TaggedNumericData } from \"../polyface/TaggedNumericData\";\nimport { Box } from \"../solid/Box\";\nimport { Cone } from \"../solid/Cone\";\nimport { LinearSweep } from \"../solid/LinearSweep\";\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\nimport { RuledSweep } from \"../solid/RuledSweep\";\nimport { SolidPrimitive } from \"../solid/SolidPrimitive\";\nimport { Sphere } from \"../solid/Sphere\";\nimport { TorusPipe } from \"../solid/TorusPipe\";\nimport { BGFBAccessors } from \"./BGFBAccessors\";\nimport { DgnSpiralTypeQueries } from \"./BGFBReader\";\nimport { SerializationHelpers } from \"./SerializationHelpers\";\n\n/**\n * Context to write to a flatbuffer blob.\n * * This class is internal.\n * * Public access is through BentleyGeometryFlatBuffer.geometryToBytes()\n * @internal\n */\nexport class BGFBWriter {\n public builder: flatbuffers.Builder;\n public constructor(defaultSize: number = 1024) {\n this.builder = new flatbuffers.Builder(defaultSize);\n }\n /**\n *\n * @param data data source, as Float64Array or number[].\n * @param count optional count, used only if less than .length numbers are to be written.\n */\n public writeDoubleArray(data: Float64Array | number[] | undefined, count?: number): number {\n if (data === undefined)\n return 0;\n let numFloats = data.length;\n if (numFloats === 0)\n return 0;\n if (count !== undefined && count < numFloats)\n numFloats = count;\n this.builder.startVector(8, numFloats, 8);\n for (let i = numFloats - 1; i >= 0; i--) {\n this.builder.addFloat64(data[i]);\n }\n return this.builder.endVector();\n }\n\n /**\n *\n * @param data data source, as Float64Array or number[].\n * @param count optional count, used only if less than .length numbers are to be written.\n */\n public writeIntArray(data: Int32Array | number[] | undefined): number {\n if (data === undefined)\n return 0;\n const numInt = data.length;\n if (numInt === 0)\n return 0;\n this.builder.startVector(4, numInt, 4);\n for (let i = numInt - 1; i >= 0; i--) {\n this.builder.addInt32(data[i]);\n }\n return this.builder.endVector();\n }\n\n /**\n *\n * @param data data source, as array derived from XYZ.\n * The data is output as a flat array of 3*data.length numbers.\n */\n public writePackedYZArray(data: XYZ[] | undefined): number {\n if (data === undefined)\n return 0;\n const numFloats = data.length * 3;\n if (numFloats === 0)\n return 0;\n this.builder.startVector(8, numFloats, 8);\n // write in reverse index order, and zyx within each XYZ\n for (let i = data.length - 1; i >= 0; i--) {\n this.builder.addFloat64(data[i].z);\n this.builder.addFloat64(data[i].y);\n this.builder.addFloat64(data[i].x);\n }\n return this.builder.endVector();\n }\n\n public writeCurveCollectionAsFBCurveVector(cv: CurveCollection): number | undefined {\n const childrenOffsets: flatbuffers.Offset[] = [];\n for (const child of cv.children) {\n if (child instanceof CurvePrimitive) {\n const childOffset = this.writeCurvePrimitiveAsFBVariantGeometry(child);\n if (childOffset)\n childrenOffsets.push(childOffset);\n } else if (child instanceof CurveCollection) {\n const childOffset = this.writeCurveCollectionAsFBVariantGeometry(child);\n if (childOffset)\n childrenOffsets.push(childOffset);\n }\n }\n\n const childrenVectorOffset = BGFBAccessors.CurveVector.createCurvesVector(this.builder, childrenOffsets);\n let cvType = 0;\n if (cv instanceof Path) cvType = 1;\n else if (cv instanceof Loop) {\n cvType = cv.isInner ? 3 : 2;\n } else if (cv instanceof ParityRegion) cvType = 4;\n else if (cv instanceof UnionRegion) cvType = 5;\n const curveVectorOffset = BGFBAccessors.CurveVector.createCurveVector(this.builder, cvType, childrenVectorOffset);\n return curveVectorOffset;\n }\n\n public writeCurveCollectionAsFBVariantGeometry(cv: CurveCollection): number | undefined {\n const curveVectorOffset = this.writeCurveCollectionAsFBCurveVector(cv);\n if (curveVectorOffset === undefined)\n return undefined;\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagCurveVector, curveVectorOffset, 0);\n }\n\n public writeInterpolationCurve3dAsFBVariantGeometry(curve: InterpolationCurve3d): number | undefined {\n const props = curve.cloneProps();\n const fitPointsOffset = this.writeDoubleArray(curve.copyFitPointsFloat64Array());\n const knotOffset = props.knots ? this.writeDoubleArray(props.knots) : 0;\n\n BGFBAccessors.InterpolationCurve.startInterpolationCurve(this.builder);\n BGFBAccessors.InterpolationCurve.addFitPoints(this.builder, fitPointsOffset);\n if (props.order)\n BGFBAccessors.InterpolationCurve.addOrder(this.builder, props.order);\n if (props.closed)\n BGFBAccessors.InterpolationCurve.addClosed(this.builder, props.closed);\n if (props.isChordLenKnots)\n BGFBAccessors.InterpolationCurve.addIsChordLenKnots(this.builder, props.isChordLenKnots);\n if (props.isColinearTangents)\n BGFBAccessors.InterpolationCurve.addIsColinearTangents(this.builder, props.isColinearTangents);\n if (props.isChordLenKnots)\n BGFBAccessors.InterpolationCurve.addIsChordLenKnots(this.builder, props.isChordLenKnots);\n if (props.isNaturalTangents)\n BGFBAccessors.InterpolationCurve.addIsNaturalTangents(this.builder, props.isNaturalTangents);\n // REMARK: some native or flatbuffer quirk made startTangent a point and endTangent a vector.\n if (props.startTangent !== undefined) {\n const startTangentOffset = BGFBAccessors.DPoint3d.createDPoint3d(this.builder,\n XYZ.x(props.startTangent), XYZ.y(props.startTangent), XYZ.z(props.startTangent));\n BGFBAccessors.InterpolationCurve.addStartTangent(this.builder, startTangentOffset);\n }\n if (props.endTangent !== undefined) {\n const endTangentOffset = BGFBAccessors.DVector3d.createDVector3d(this.builder,\n XYZ.x(props.endTangent), XYZ.y(props.endTangent), XYZ.z(props.endTangent));\n BGFBAccessors.InterpolationCurve.addEndTangent(this.builder, endTangentOffset);\n }\n if (knotOffset !== 0)\n BGFBAccessors.InterpolationCurve.addKnots(this.builder, knotOffset);\n const headerOffset = BGFBAccessors.InterpolationCurve.endInterpolationCurve(this.builder);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagInterpolationCurve, headerOffset, 0);\n }\n\n public writeAkimaCurve3dAsFBVariantGeometry(curve: AkimaCurve3d): number | undefined {\n const fitPointsOffset = this.writeDoubleArray(curve.copyFitPointsFloat64Array());\n BGFBAccessors.AkimaCurve.startAkimaCurve(this.builder);\n BGFBAccessors.AkimaCurve.addPoints(this.builder, fitPointsOffset);\n const headerOffset = BGFBAccessors.AkimaCurve.endAkimaCurve(this.builder);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagAkimaCurve, headerOffset, 0);\n }\n\n public writeBsplineCurve3dAsFBVariantGeometry(bcurve: BSplineCurve3d): number | undefined {\n const data = SerializationHelpers.createBSplineCurveData(bcurve.polesRef, bcurve.poleDimension, bcurve.knotsRef, bcurve.numPoles, bcurve.order);\n const wrapMode = bcurve.getWrappable();\n if (BSplineWrapMode.None !== wrapMode)\n data.params.wrapMode = wrapMode;\n\n if (!SerializationHelpers.Export.prepareBSplineCurveData(data, {jsonPoles: false}))\n return undefined;\n\n const closed = !!data.params.closed;\n const polesOffset = this.writeDoubleArray(data.poles as Float64Array);\n const weightsOffset = 0;\n const knotsOffset = this.writeDoubleArray(data.params.knots);\n const headerOffset = BGFBAccessors.BsplineCurve.createBsplineCurve(this.builder, data.params.order, closed, polesOffset, weightsOffset, knotsOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagBsplineCurve, headerOffset, 0);\n }\n\n public writeBSplineSurfaceAsFBVariantGeometry(bsurf: BSplineSurface3d | BSplineSurface3dH): number | undefined {\n let poles: Float64Array = bsurf.coffs;\n let weights: Float64Array | undefined;\n let dim = bsurf.poleDimension;\n if (bsurf instanceof BSplineSurface3dH) {\n poles = bsurf.copyXYZToFloat64Array(false);\n weights = bsurf.copyWeightsToFloat64Array();\n dim = 3;\n }\n\n const data = SerializationHelpers.createBSplineSurfaceData(poles, dim,\n bsurf.knots[UVSelect.uDirection].knots, bsurf.numPolesUV(UVSelect.uDirection), bsurf.orderUV(UVSelect.uDirection),\n bsurf.knots[UVSelect.vDirection].knots, bsurf.numPolesUV(UVSelect.vDirection), bsurf.orderUV(UVSelect.vDirection));\n\n if (weights)\n data.weights = weights;\n const wrapModeU = bsurf.getWrappable(UVSelect.uDirection);\n const wrapModeV = bsurf.getWrappable(UVSelect.vDirection);\n if (BSplineWrapMode.None !== wrapModeU)\n data.uParams.wrapMode = wrapModeU;\n if (BSplineWrapMode.None !== wrapModeV)\n data.vParams.wrapMode = wrapModeV;\n\n if (!SerializationHelpers.Export.prepareBSplineSurfaceData(data, {jsonPoles: false}))\n return undefined;\n\n // TypeScript B-spline surfaces do not support trim curves or isoline counts\n const holeOrigin = 0;\n const boundariesOffset = 0;\n const numRulesU = 0;\n const numRulesV = 0;\n\n const closedU = !!data.uParams.closed;\n const closedV = !!data.vParams.closed;\n const polesOffset = this.writeDoubleArray(data.poles as Float64Array);\n const weightsOffset = data.weights ? this.writeDoubleArray(data.weights as Float64Array) : 0;\n const uKnotsOffset = this.writeDoubleArray(data.uParams.knots);\n const vKnotsOffset = this.writeDoubleArray(data.vParams.knots);\n const headerOffset = BGFBAccessors.BsplineSurface.createBsplineSurface(this.builder, polesOffset, weightsOffset,\n uKnotsOffset, vKnotsOffset, data.uParams.numPoles, data.vParams.numPoles, data.uParams.order, data.vParams.order,\n numRulesU, numRulesV, holeOrigin, boundariesOffset, closedU, closedV);\n\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagBsplineSurface, headerOffset, 0);\n }\n\n public writeBsplineCurve3dHAsFBVariantGeometry(bcurve: BSplineCurve3dH): number | undefined {\n const poles = bcurve.copyXYZFloat64Array(false);\n const weights = bcurve.copyWeightsFloat64Array();\n const dim = 3;\n\n const data = SerializationHelpers.createBSplineCurveData(poles, dim, bcurve.knotsRef, bcurve.numPoles, bcurve.order);\n data.weights = weights;\n const wrapMode = bcurve.getWrappable();\n if (BSplineWrapMode.None !== wrapMode)\n data.params.wrapMode = wrapMode;\n\n if (!SerializationHelpers.Export.prepareBSplineCurveData(data, {jsonPoles: false}))\n return undefined;\n\n const closed = !!data.params.closed;\n const polesOffset = this.writeDoubleArray(data.poles as Float64Array);\n const weightsOffset = this.writeDoubleArray(data.weights);\n const knotsOffset = this.writeDoubleArray(data.params.knots);\n const headerOffset = BGFBAccessors.BsplineCurve.createBsplineCurve(this.builder, data.params.order, closed, polesOffset, weightsOffset, knotsOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagBsplineCurve, headerOffset, 0);\n }\n\n public writeCurvePrimitiveAsFBVariantGeometry(curvePrimitive: CurvePrimitive): number | undefined {\n if (curvePrimitive instanceof LineSegment3d) {\n const segmentDataOffset = BGFBAccessors.DSegment3d.createDSegment3d(this.builder,\n curvePrimitive.point0Ref.x,\n curvePrimitive.point0Ref.y,\n curvePrimitive.point0Ref.z,\n curvePrimitive.point1Ref.x,\n curvePrimitive.point1Ref.y,\n curvePrimitive.point1Ref.z);\n const lineSegmentOffset = BGFBAccessors.LineSegment.createLineSegment(this.builder, segmentDataOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagLineSegment, lineSegmentOffset, 0);\n } else if (curvePrimitive instanceof Arc3d) {\n const data = curvePrimitive.toVectors();\n const arcDataOffset = BGFBAccessors.DEllipse3d.createDEllipse3d(this.builder,\n data.center.x, data.center.y, data.center.z,\n data.vector0.x, data.vector0.y, data.vector0.z,\n data.vector90.x, data.vector90.y, data.vector90.z,\n data.sweep.startRadians,\n data.sweep.sweepRadians);\n const arcOffset = BGFBAccessors.EllipticArc.createEllipticArc(this.builder, arcDataOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagEllipticArc, arcOffset, 0);\n } else if (curvePrimitive instanceof LineString3d) {\n const coordinates = extractNumberArray(curvePrimitive.packedPoints);\n const lineStringOffset = BGFBAccessors.LineString.createLineString(this.builder,\n BGFBAccessors.LineString.createPointsVector(this.builder, coordinates));\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagLineString, lineStringOffset, 0);\n } else if (curvePrimitive instanceof BSplineCurve3d) {\n return this.writeBsplineCurve3dAsFBVariantGeometry(curvePrimitive);\n } else if (curvePrimitive instanceof BSplineCurve3dH) {\n return this.writeBsplineCurve3dHAsFBVariantGeometry(curvePrimitive);\n } else if (curvePrimitive instanceof InterpolationCurve3d) {\n return this.writeInterpolationCurve3dAsFBVariantGeometry(curvePrimitive);\n } else if (curvePrimitive instanceof AkimaCurve3d) {\n return this.writeAkimaCurve3dAsFBVariantGeometry(curvePrimitive);\n } else if (curvePrimitive instanceof IntegratedSpiral3d) {\n const placement = curvePrimitive.localToWorld;\n const typeCode = DgnSpiralTypeQueries.stringToTypeCode(curvePrimitive.spiralType, true)!;\n const spiralDetailOffset = BGFBAccessors.TransitionSpiralDetail.createTransitionSpiralDetail(this.builder,\n placement.matrix.coffs[0], placement.matrix.coffs[1], placement.matrix.coffs[2], placement.origin.x,\n placement.matrix.coffs[3], placement.matrix.coffs[4], placement.matrix.coffs[5], placement.origin.y,\n placement.matrix.coffs[6], placement.matrix.coffs[5], placement.matrix.coffs[8], placement.origin.z,\n curvePrimitive.activeFractionInterval.x0, curvePrimitive.activeFractionInterval.x1,\n curvePrimitive.bearing01.startRadians, curvePrimitive.bearing01.endRadians,\n TransitionSpiral3d.radiusToCurvature(curvePrimitive.radius01.x0),\n TransitionSpiral3d.radiusToCurvature(curvePrimitive.radius01.x1),\n typeCode,\n 0);\n const transitionTableOffset = BGFBAccessors.TransitionSpiral.createTransitionSpiral(this.builder,\n spiralDetailOffset, 0, 0);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder,\n BGFBAccessors.VariantGeometryUnion.tagTransitionSpiral, transitionTableOffset, 0);\n } else if (curvePrimitive instanceof DirectSpiral3d) {\n const placement = curvePrimitive.localToWorld;\n // direct spirals always inflect at the origin of the local frame ..\n // spiral\n const curvature0 = 0.0;\n const curvature1 = curvePrimitive.nominalCurvature1;\n const radius0 = 0.0;\n const radius1 = curvePrimitive.nominalR1; // which is 1/curvature1\n const nominalLength = curvePrimitive.nominalL1;\n const bearing0Radians = 0.0;\n const bearing1Radians = TransitionSpiral3d.radiusRadiusLengthToSweepRadians(radius0, radius1, nominalLength);\n const typeCode = DgnSpiralTypeQueries.stringToTypeCode(curvePrimitive.spiralType, true)!;\n const spiralDetailOffset = BGFBAccessors.TransitionSpiralDetail.createTransitionSpiralDetail(this.builder,\n placement.matrix.coffs[0], placement.matrix.coffs[1], placement.matrix.coffs[2], placement.origin.x,\n placement.matrix.coffs[3], placement.matrix.coffs[4], placement.matrix.coffs[5], placement.origin.y,\n placement.matrix.coffs[6], placement.matrix.coffs[5], placement.matrix.coffs[8], placement.origin.z,\n curvePrimitive.activeFractionInterval.x0, curvePrimitive.activeFractionInterval.x1,\n bearing0Radians, bearing1Radians,\n curvature0, curvature1,\n typeCode,\n 0);\n const transitionTableOffset = BGFBAccessors.TransitionSpiral.createTransitionSpiral(this.builder,\n spiralDetailOffset, 0, 0);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder,\n BGFBAccessors.VariantGeometryUnion.tagTransitionSpiral, transitionTableOffset, 0);\n }\n return undefined;\n }\n public writePointString3dAsFBVariantGeometry(pointString: PointString3d): number | undefined {\n if (pointString instanceof PointString3d) {\n const coordinates = extractNumberArray(pointString.points);\n const headerOffset = BGFBAccessors.PointString.createPointString(this.builder,\n BGFBAccessors.PointString.createPointsVector(this.builder, coordinates));\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagPointString, headerOffset, 0);\n\n }\n return undefined;\n }\n\n public writeSolidPrimitiveAsFBVariantGeometry(solid: SolidPrimitive): number | undefined {\n // NOTE: Box, Sphere, Cone, and TorusPipe have \"detail\" within a \"table\"\n // BUT: linear, rotational, and ruled sweeps have their contour and numerics directly within their table.\n if (solid instanceof Box) {\n const originA = solid.getBaseOrigin();\n const originB = solid.getTopOrigin();\n const vectorX = solid.getVectorX();\n const vectorY = solid.getVectorY();\n\n const baseX = solid.getBaseX();\n const baseY = solid.getBaseY();\n const topX = solid.getTopX();\n const topY = solid.getTopY();\n const detailOffset = BGFBAccessors.DgnBoxDetail.createDgnBoxDetail(this.builder,\n originA.x, originA.y, originA.z,\n originB.x, originB.y, originB.z,\n vectorX.x, vectorX.y, vectorX.z,\n vectorY.x, vectorY.y, vectorY.z,\n baseX, baseY, topX, topY, solid.capped);\n const carrierOffset = BGFBAccessors.DgnBox.createDgnBox(this.builder, detailOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnBox, carrierOffset, 0);\n } else if (solid instanceof Sphere) {\n const localToWorld = solid.cloneLocalToWorld();\n const sweep = solid.cloneLatitudeSweep();\n const detailOffset = BGFBAccessors.DgnSphereDetail.createDgnSphereDetail(this.builder,\n localToWorld.matrix.coffs[0], localToWorld.matrix.coffs[1], localToWorld.matrix.coffs[2], localToWorld.origin.x,\n localToWorld.matrix.coffs[3], localToWorld.matrix.coffs[4], localToWorld.matrix.coffs[5], localToWorld.origin.y,\n localToWorld.matrix.coffs[6], localToWorld.matrix.coffs[7], localToWorld.matrix.coffs[8], localToWorld.origin.z,\n sweep.startRadians, sweep.sweepRadians,\n solid.capped);\n const carrierOffset = BGFBAccessors.DgnSphere.createDgnSphere(this.builder, detailOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnSphere, carrierOffset, 0);\n } else if (solid instanceof Cone) {\n const centerA = solid.getCenterA();\n const centerB = solid.getCenterB();\n const vectorX = solid.getVectorX();\n const vectorY = solid.getVectorY();\n const radiusA = solid.getRadiusA();\n const radiusB = solid.getRadiusB();\n const detailOffset = BGFBAccessors.DgnConeDetail.createDgnConeDetail(this.builder,\n centerA.x, centerA.y, centerA.z,\n centerB.x, centerB.y, centerB.z,\n vectorX.x, vectorX.y, vectorX.z,\n vectorY.x, vectorY.y, vectorY.z, radiusA, radiusB, solid.capped);\n const carrierOffset = BGFBAccessors.DgnCone.createDgnCone(this.builder, detailOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnCone, carrierOffset, 0);\n } else if (solid instanceof TorusPipe) {\n const center = solid.cloneCenter();\n const vectorX = solid.cloneVectorX();\n const vectorY = solid.cloneVectorY();\n const minorRadius = solid.getMinorRadius();\n const majorRadius = solid.getMajorRadius();\n const sweepRadians = solid.getSweepAngle().radians;\n const detailOffset = BGFBAccessors.DgnTorusPipeDetail.createDgnTorusPipeDetail(this.builder,\n center.x, center.y, center.z,\n vectorX.x, vectorX.y, vectorX.z,\n vectorY.x, vectorY.y, vectorY.z, majorRadius, minorRadius, sweepRadians, solid.capped);\n const carrierOffset = BGFBAccessors.DgnTorusPipe.createDgnTorusPipe(this.builder, detailOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnTorusPipe, carrierOffset, 0);\n } else if (solid instanceof LinearSweep) {\n const baseCurveOffset = this.writeCurveCollectionAsFBCurveVector(solid.getSweepContourRef().getCurves())!;\n const sweepVector = solid.cloneSweepVector();\n // const sweepVectorOffset = BGFBAccessors.DVector3d.createDVector3d(this.builder, sweepVector.x, sweepVector.y, sweepVector.z);\n // const carrierOffset = BGFBAccessors.DgnExtrusion.createDgnExtrusion(this.builder, contourOffset, sweepVectorOffset, solid.capped);\n\n // WOW -- the machine generated createDgnExtrusion expects an offset for the sweepVector, but then\n // chokes trying to add it.\n BGFBAccessors.DgnExtrusion.startDgnExtrusion(this.builder);\n BGFBAccessors.DgnExtrusion.addBaseCurve(this.builder, baseCurveOffset);\n const extrusionVectorOffset = BGFBAccessors.DVector3d.createDVector3d(this.builder, sweepVector.x, sweepVector.y, sweepVector.z);\n BGFBAccessors.DgnExtrusion.addExtrusionVector(this.builder, extrusionVectorOffset);\n BGFBAccessors.DgnExtrusion.addCapped(this.builder, solid.capped);\n const dgnExtrusionOffset = BGFBAccessors.DgnExtrusion.endDgnExtrusion(this.builder);\n\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnExtrusion, dgnExtrusionOffset, 0);\n } else if (solid instanceof RotationalSweep) {\n const baseCurveOffset = this.writeCurveCollectionAsFBCurveVector(solid.getSweepContourRef().getCurves())!;\n const axis = solid.cloneAxisRay();\n const sweepAngle = solid.getSweep();\n // const sweepVectorOffset = BGFBAccessors.DVector3d.createDVector3d(this.builder, sweepVector.x, sweepVector.y, sweepVector.z);\n // const carrierOffset = BGFBAccessors.DgnExtrusion.createDgnExtrusion(this.builder, contourOffset, sweepVectorOffset, solid.capped);\n\n // WOW -- the machine generated createDgnExtrusion expects an offset for the sweepVector, but then\n // chokes trying to add it.\n BGFBAccessors.DgnRotationalSweep.startDgnRotationalSweep(this.builder);\n BGFBAccessors.DgnRotationalSweep.addBaseCurve(this.builder, baseCurveOffset);\n const axisRayOffset = BGFBAccessors.DRay3d.createDRay3d(this.builder,\n axis.origin.x, axis.origin.y, axis.origin.z, axis.direction.x, axis.direction.y, axis.direction.z);\n BGFBAccessors.DgnRotationalSweep.addAxis(this.builder, axisRayOffset);\n BGFBAccessors.DgnRotationalSweep.addSweepRadians(this.builder, sweepAngle.radians);\n BGFBAccessors.DgnRotationalSweep.addCapped(this.builder, solid.capped);\n const dgnRotationalSweepOffset = BGFBAccessors.DgnRotationalSweep.endDgnRotationalSweep(this.builder);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnRotationalSweep, dgnRotationalSweepOffset, 0);\n\n } else if (solid instanceof RuledSweep) {\n const contours = solid.sweepContoursRef();\n const contourOffsets: flatbuffers.Offset[] = [];\n for (const contour of contours) {\n const contourOffset = this.writeCurveCollectionAsFBCurveVector(contour.getCurves());\n if (contourOffset !== undefined)\n contourOffsets.push(contourOffset);\n }\n const contoursVectorOffset = BGFBAccessors.DgnRuledSweep.createCurvesVector(this.builder, contourOffsets);\n const ruledSweepTable = BGFBAccessors.DgnRuledSweep.createDgnRuledSweep(this.builder, contoursVectorOffset, solid.capped);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnRuledSweep, ruledSweepTable, 0);\n }\n return undefined;\n }\n public writePolyfaceAuxChannelDataAsFBVariantGeometry(channelData: AuxChannelData): number | undefined {\n if (channelData instanceof AuxChannelData) {\n const valuesOffset = BGFBAccessors.PolyfaceAuxChannelData.createValuesVector(this.builder, channelData.values);\n return BGFBAccessors.PolyfaceAuxChannelData.createPolyfaceAuxChannelData(this.builder,\n channelData.input,\n valuesOffset,\n );\n }\n return undefined;\n }\n\n public writePolyfaceAuxChannelAsFBVariantGeometry(channel: AuxChannel): number | undefined {\n if (channel instanceof AuxChannel) {\n const channelDataOffsets: number[] = [];\n for (const channelData of channel.data) {\n channelDataOffsets.push(this.writePolyfaceAuxChannelDataAsFBVariantGeometry(channelData)!);\n }\n const valuesOffset = BGFBAccessors.PolyfaceAuxChannel.createDataVector(this.builder, channelDataOffsets);\n const nameOffset = channel.name ? this.builder.createString(channel.name) : 0;\n const inputNameOffset = channel.inputName ? this.builder.createString(channel.inputName) : 0;\n return BGFBAccessors.PolyfaceAuxChannel.createPolyfaceAuxChannel(this.builder,\n channel.dataType,\n nameOffset,\n inputNameOffset, valuesOffset,\n );\n }\n return undefined;\n }\n\n public writePolyfaceAuxDataAsFBVariantGeometry(mesh: IndexedPolyface, data: PolyfaceAuxData): number | undefined {\n if (data instanceof PolyfaceAuxData) {\n const channelOffsets: number[] = [];\n for (const channel of data.channels)\n channelOffsets.push(this.writePolyfaceAuxChannelAsFBVariantGeometry(channel)!);\n const channelOffsetsOffset = BGFBAccessors.PolyfaceAuxChannel.createDataVector(this.builder, channelOffsets);\n\n const indexArray: number[] = [];\n this.fillOneBasedIndexArray(mesh, data.indices, undefined, 0, indexArray);\n const indicesOffset = BGFBAccessors.PolyfaceAuxData.createIndicesVector(this.builder, indexArray);\n\n return BGFBAccessors.PolyfaceAuxData.createPolyfaceAuxData(this.builder, indicesOffset, channelOffsetsOffset);\n }\n return undefined;\n }\n public writeTaggedNumericDataArray(data: TaggedNumericData | undefined): number {\n if (data){\n const intDataOffset = this.writeIntArray(data.intData);\n const doubleDataOffset = this.writeDoubleArray(data.doubleData);\n return BGFBAccessors.TaggedNumericData.createTaggedNumericData(this.builder,\n data.tagA, data.tagB, intDataOffset, doubleDataOffset);\n }\n return 0;\n }\n\n public writePolyfaceAsFBVariantGeometry(mesh: IndexedPolyface): number | undefined {\n if (mesh instanceof IndexedPolyface) {\n // WE KNOW . . . . the polyface has blocks of zero-based indices.\n const indexArray: number[] = []; // and this will really be integers.\n const numberArray: number[] = []; // and this will really be doubles.\n\n copyToPackedNumberArray(numberArray, mesh.data.point.float64Data(), mesh.data.point.float64Length);\n const pointOffset = BGFBAccessors.Polyface.createPointVector(this.builder, numberArray);\n let paramIndexOffset = 0;\n let normalIndexOffset = 0;\n let colorIndexOffset = 0;\n let intColorOffset = 0;\n let normalOffset = 0;\n let paramOffset = 0;\n let auxDataOffset = 0;\n let taggedNumericDataOffset = 0;\n const meshStyle = 1; // That is . . . MESH_ELM_STYLE_INDEXED_FACE_LOOPS\n const numPerFace = 0; // specifically, variable size with 0 terminators\n this.fillOneBasedIndexArray(mesh, mesh.data.pointIndex, mesh.data.edgeVisible, 0, indexArray);\n\n const twoSided = mesh.twoSided;\n const pointIndexOffset = BGFBAccessors.Polyface.createPointIndexVector(this.builder, indexArray);\n if (mesh.data.paramIndex !== undefined && mesh.data.paramIndex.length > 0) {\n this.fillOneBasedIndexArray(mesh, mesh.data.paramIndex, undefined, 0, indexArray);\n paramIndexOffset = BGFBAccessors.Polyface.createParamIndexVector(this.builder, indexArray);\n }\n\n if (mesh.data.normalIndex !== undefined && mesh.data.normalIndex.length > 0) {\n this.fillOneBasedIndexArray(mesh, mesh.data.normalIndex, undefined, 0, indexArray);\n normalIndexOffset = BGFBAccessors.Polyface.createNormalIndexVector(this.builder, indexArray);\n }\n\n if (mesh.data.colorIndex !== undefined && mesh.data.colorIndex.length > 0) {\n this.fillOneBasedIndexArray(mesh, mesh.data.colorIndex, undefined, 0, indexArray);\n colorIndexOffset = BGFBAccessors.Polyface.createColorIndexVector(this.builder, indexArray);\n }\n\n if (mesh.data.color !== undefined && mesh.data.color.length > 0) {\n intColorOffset = BGFBAccessors.Polyface.createIntColorVector(this.builder, mesh.data.color);\n }\n\n if (mesh.data.normal) {\n copyToPackedNumberArray(numberArray, mesh.data.normal.float64Data(), mesh.data.normal.float64Length);\n normalOffset = BGFBAccessors.Polyface.createNormalVector(this.builder, numberArray);\n }\n\n if (mesh.data.param) {\n copyToPackedNumberArray(numberArray, mesh.data.param.float64Data(), mesh.data.param.float64Length);\n paramOffset = BGFBAccessors.Polyface.createPointVector(this.builder, numberArray);\n }\n\n if (mesh.data.auxData)\n auxDataOffset = this.writePolyfaceAuxDataAsFBVariantGeometry(mesh, mesh.data.auxData)!;\n\n if (mesh.data.taggedNumericData)\n taggedNumericDataOffset = this.writeTaggedNumericDataArray(mesh.data.taggedNumericData);\n\n const expectedClosure = mesh.expectedClosure;\n\n // NOTE: mesh.data.face is not persistent\n\n const polyfaceOffset = BGFBAccessors.Polyface.createPolyface(\n this.builder, pointOffset, paramOffset, normalOffset, 0, intColorOffset, pointIndexOffset, paramIndexOffset,\n normalIndexOffset, colorIndexOffset, 0, 0, 0, meshStyle, twoSided, numPerFace, 0, auxDataOffset,\n expectedClosure, taggedNumericDataOffset,\n );\n\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagPolyface, polyfaceOffset, 0);\n\n }\n return undefined;\n }\n\n public fillOneBasedIndexArray(mesh: IndexedPolyface, sourceIndex: number[], visible: boolean[] | undefined, facetTerminator: number | undefined, destIndex: number[]) {\n destIndex.length = 0;\n const numFacet = mesh.facetCount;\n for (let facetIndex = 0; facetIndex < numFacet; facetIndex++) {\n const k0 = mesh.facetIndex0(facetIndex);\n const k1 = mesh.facetIndex1(facetIndex);\n for (let k = k0; k < k1; k++) {\n let q = sourceIndex[k] + 1;\n if (visible !== undefined && !visible[k])\n q = -q;\n destIndex.push(q);\n }\n if (facetTerminator !== undefined)\n destIndex.push(facetTerminator);\n }\n }\n public writeGeometryQueryAsFBVariantGeometry(g: GeometryQuery): number | undefined {\n let offset: number | undefined;\n if (g instanceof CurvePrimitive && (offset = this.writeCurvePrimitiveAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof CurveCollection && (offset = this.writeCurveCollectionAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof IndexedPolyface && (offset = this.writePolyfaceAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof SolidPrimitive && (offset = this.writeSolidPrimitiveAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof BSplineSurface3d && (offset = this.writeBSplineSurfaceAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof BSplineSurface3dH && (offset = this.writeBSplineSurfaceAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof PointString3d && (offset = this.writePointString3dAsFBVariantGeometry(g)) !== undefined)\n return offset;\n // if (g instanceof CoordinateXYZ) // TODO\n return undefined;\n }\n\n public writeGeometryQueryArrayAsFBVariantGeometry(allGeometry: GeometryQuery | GeometryQuery[] | undefined): number | undefined{\n if (Array.isArray(allGeometry)) {\n const allOffsets: number[] = [];\n for (const g of allGeometry) {\n const offset = this.writeGeometryQueryAsFBVariantGeometry(g);\n if (offset !== undefined)\n allOffsets.push(offset);\n }\n if (allOffsets.length > 0) {\n const membersOffset = BGFBAccessors.VectorOfVariantGeometry.createMembersVector(this.builder, allOffsets);\n const vectorOffset = BGFBAccessors.VectorOfVariantGeometry.createVectorOfVariantGeometry(this.builder, membersOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagVectorOfVariantGeometry, vectorOffset, 0);\n }\n } else if (allGeometry instanceof GeometryQuery)\n return this.writeGeometryQueryAsFBVariantGeometry(allGeometry);\n return undefined;\n }\n /**\n * Serialize bytes to a flatbuffer.\n */\n public static geometryToBytes(data: GeometryQuery | GeometryQuery[], signatureBytes?: Uint8Array): Uint8Array | undefined {\n const writer = new BGFBWriter();\n const rootOffset = writer.writeGeometryQueryArrayAsFBVariantGeometry(data);\n\n if (rootOffset !== undefined) {\n const builder = writer.builder;\n builder.finish(rootOffset);\n const buffer = builder.dataBuffer();\n if (!signatureBytes) {\n return buffer.bytes().slice(buffer.position());\n } else if (buffer.position() >= signatureBytes.length) {\n // The buffer has space for the signature ahead of its position . . .\n const i0 = buffer.position() - signatureBytes.length;\n let i = i0;\n for (const k of signatureBytes)\n buffer.bytes()[i++] = k;\n return buffer.bytes().slice(i0);\n } else {\n // There is no space ahead of the position () . . .\n // coverage remark: I have never seen this happen for real.\n // It has been exercised by adding 1024 to the signatureBytes.length test to force this branch.\n const num1 = buffer.bytes().length - buffer.position();\n const num0 = signatureBytes.length;\n const newBytes = new Uint8Array(num0 + num1);\n newBytes.set(signatureBytes, 0);\n newBytes.set(buffer.bytes().slice(buffer.position()), num0);\n return newBytes;\n }\n }\n return undefined;\n }\n}\nfunction extractNumberArray(data: GrowableXYZArray | Point3d[]): number[] {\n const result = [];\n if (data instanceof GrowableXYZArray) {\n // ugh -- accessors only deal with number[] ..\n const numCoordinate = 3 * data.length;\n const source = data.float64Data();\n for (let i = 0; i < numCoordinate; i++)\n result.push(source[i]);\n return result;\n } else if (Array.isArray(data)) {\n for (const xyz of data)\n result.push(xyz.x, xyz.y, xyz.z);\n }\n return result;\n}\n/** Copy the active data to a simple number array. */\nfunction copyToPackedNumberArray(dest: number[], source: Float64Array, count: number) {\n dest.length = 0;\n for (let i = 0; i < count; i++)\n dest.push(source[i]);\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"BGFBWriter.js","sourceRoot":"","sources":["../../../src/serialization/BGFBWriter.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/** @packageDocumentation\n * @module Serialization\n */\nimport { flatbuffers } from \"flatbuffers\";\nimport { AkimaCurve3d } from \"../bspline/AkimaCurve3d\";\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\nimport { BSplineSurface3d, BSplineSurface3dH, UVSelect } from \"../bspline/BSplineSurface\";\nimport { InterpolationCurve3d } from \"../bspline/InterpolationCurve3d\";\nimport { BSplineWrapMode } from \"../bspline/KnotVector\";\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CurveCollection } from \"../curve/CurveCollection\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { Path } from \"../curve/Path\";\nimport { PointString3d } from \"../curve/PointString3d\";\nimport { DirectSpiral3d } from \"../curve/spiral/DirectSpiral3d\";\nimport { IntegratedSpiral3d } from \"../curve/spiral/IntegratedSpiral3d\";\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point3d, XYZ } from \"../geometry3d/Point3dVector3d\";\nimport { AuxChannel, AuxChannelData, PolyfaceAuxData } from \"../polyface/AuxData\";\nimport { IndexedPolyface } from \"../polyface/Polyface\";\nimport { TaggedNumericData } from \"../polyface/TaggedNumericData\";\nimport { Box } from \"../solid/Box\";\nimport { Cone } from \"../solid/Cone\";\nimport { LinearSweep } from \"../solid/LinearSweep\";\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\nimport { RuledSweep } from \"../solid/RuledSweep\";\nimport { SolidPrimitive } from \"../solid/SolidPrimitive\";\nimport { Sphere } from \"../solid/Sphere\";\nimport { TorusPipe } from \"../solid/TorusPipe\";\nimport { BGFBAccessors } from \"./BGFBAccessors\";\nimport { DgnSpiralTypeQueries } from \"./BGFBReader\";\nimport { SerializationHelpers } from \"./SerializationHelpers\";\n\n/**\n * Context to write to a flatbuffer blob.\n * * This class is internal.\n * * Public access is through BentleyGeometryFlatBuffer.geometryToBytes()\n * @internal\n */\nexport class BGFBWriter {\n public builder: flatbuffers.Builder;\n public constructor(defaultSize: number = 1024) {\n this.builder = new flatbuffers.Builder(defaultSize);\n }\n /**\n *\n * @param data data source, as Float64Array or number[].\n * @param count optional count, used only if less than .length numbers are to be written.\n */\n public writeDoubleArray(data: Float64Array | number[] | undefined, count?: number): number {\n if (data === undefined)\n return 0;\n let numFloats = data.length;\n if (numFloats === 0)\n return 0;\n if (count !== undefined && count < numFloats)\n numFloats = count;\n this.builder.startVector(8, numFloats, 8);\n for (let i = numFloats - 1; i >= 0; i--) {\n this.builder.addFloat64(data[i]);\n }\n return this.builder.endVector();\n }\n\n /**\n *\n * @param data data source, as Float64Array or number[].\n * @param count optional count, used only if less than .length numbers are to be written.\n */\n public writeIntArray(data: Int32Array | number[] | undefined): number {\n if (data === undefined)\n return 0;\n const numInt = data.length;\n if (numInt === 0)\n return 0;\n this.builder.startVector(4, numInt, 4);\n for (let i = numInt - 1; i >= 0; i--) {\n this.builder.addInt32(data[i]);\n }\n return this.builder.endVector();\n }\n\n /**\n *\n * @param data data source, as array derived from XYZ.\n * The data is output as a flat array of 3*data.length numbers.\n */\n public writePackedYZArray(data: XYZ[] | undefined): number {\n if (data === undefined)\n return 0;\n const numFloats = data.length * 3;\n if (numFloats === 0)\n return 0;\n this.builder.startVector(8, numFloats, 8);\n // write in reverse index order, and zyx within each XYZ\n for (let i = data.length - 1; i >= 0; i--) {\n this.builder.addFloat64(data[i].z);\n this.builder.addFloat64(data[i].y);\n this.builder.addFloat64(data[i].x);\n }\n return this.builder.endVector();\n }\n\n public writeCurveCollectionAsFBCurveVector(cv: CurveCollection): number | undefined {\n const childrenOffsets: flatbuffers.Offset[] = [];\n for (const child of cv.children) {\n if (child instanceof CurvePrimitive) {\n const childOffset = this.writeCurvePrimitiveAsFBVariantGeometry(child);\n if (childOffset)\n childrenOffsets.push(childOffset);\n } else if (child instanceof CurveCollection) {\n const childOffset = this.writeCurveCollectionAsFBVariantGeometry(child);\n if (childOffset)\n childrenOffsets.push(childOffset);\n }\n }\n\n const childrenVectorOffset = BGFBAccessors.CurveVector.createCurvesVector(this.builder, childrenOffsets);\n let cvType = 0;\n if (cv instanceof Path) cvType = 1;\n else if (cv instanceof Loop) {\n cvType = cv.isInner ? 3 : 2;\n } else if (cv instanceof ParityRegion) cvType = 4;\n else if (cv instanceof UnionRegion) cvType = 5;\n const curveVectorOffset = BGFBAccessors.CurveVector.createCurveVector(this.builder, cvType, childrenVectorOffset);\n return curveVectorOffset;\n }\n\n public writeCurveCollectionAsFBVariantGeometry(cv: CurveCollection): number | undefined {\n const curveVectorOffset = this.writeCurveCollectionAsFBCurveVector(cv);\n if (curveVectorOffset === undefined)\n return undefined;\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagCurveVector, curveVectorOffset, 0);\n }\n\n public writeInterpolationCurve3dAsFBVariantGeometry(curve: InterpolationCurve3d): number | undefined {\n const props = curve.cloneProps();\n const fitPointsOffset = this.writeDoubleArray(curve.copyFitPointsFloat64Array());\n const knotOffset = props.knots ? this.writeDoubleArray(props.knots) : 0;\n\n BGFBAccessors.InterpolationCurve.startInterpolationCurve(this.builder);\n BGFBAccessors.InterpolationCurve.addFitPoints(this.builder, fitPointsOffset);\n if (props.order)\n BGFBAccessors.InterpolationCurve.addOrder(this.builder, props.order);\n if (props.closed)\n BGFBAccessors.InterpolationCurve.addClosed(this.builder, props.closed);\n if (props.isChordLenKnots)\n BGFBAccessors.InterpolationCurve.addIsChordLenKnots(this.builder, props.isChordLenKnots);\n if (props.isColinearTangents)\n BGFBAccessors.InterpolationCurve.addIsColinearTangents(this.builder, props.isColinearTangents);\n if (props.isChordLenKnots)\n BGFBAccessors.InterpolationCurve.addIsChordLenKnots(this.builder, props.isChordLenKnots);\n if (props.isNaturalTangents)\n BGFBAccessors.InterpolationCurve.addIsNaturalTangents(this.builder, props.isNaturalTangents);\n // REMARK: some native or flatbuffer quirk made startTangent a point and endTangent a vector.\n if (props.startTangent !== undefined) {\n const startTangentOffset = BGFBAccessors.DPoint3d.createDPoint3d(this.builder,\n XYZ.x(props.startTangent), XYZ.y(props.startTangent), XYZ.z(props.startTangent));\n BGFBAccessors.InterpolationCurve.addStartTangent(this.builder, startTangentOffset);\n }\n if (props.endTangent !== undefined) {\n const endTangentOffset = BGFBAccessors.DVector3d.createDVector3d(this.builder,\n XYZ.x(props.endTangent), XYZ.y(props.endTangent), XYZ.z(props.endTangent));\n BGFBAccessors.InterpolationCurve.addEndTangent(this.builder, endTangentOffset);\n }\n if (knotOffset !== 0)\n BGFBAccessors.InterpolationCurve.addKnots(this.builder, knotOffset);\n const headerOffset = BGFBAccessors.InterpolationCurve.endInterpolationCurve(this.builder);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagInterpolationCurve, headerOffset, 0);\n }\n\n public writeAkimaCurve3dAsFBVariantGeometry(curve: AkimaCurve3d): number | undefined {\n const fitPointsOffset = this.writeDoubleArray(curve.copyFitPointsFloat64Array());\n BGFBAccessors.AkimaCurve.startAkimaCurve(this.builder);\n BGFBAccessors.AkimaCurve.addPoints(this.builder, fitPointsOffset);\n const headerOffset = BGFBAccessors.AkimaCurve.endAkimaCurve(this.builder);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagAkimaCurve, headerOffset, 0);\n }\n\n public writeBsplineCurve3dAsFBVariantGeometry(bcurve: BSplineCurve3d): number | undefined {\n const data = SerializationHelpers.createBSplineCurveData(bcurve.polesRef, bcurve.poleDimension, bcurve.knotsRef, bcurve.numPoles, bcurve.order);\n const wrapMode = bcurve.getWrappable();\n if (BSplineWrapMode.None !== wrapMode)\n data.params.wrapMode = wrapMode;\n\n if (!SerializationHelpers.Export.prepareBSplineCurveData(data, {jsonPoles: false}))\n return undefined;\n\n const closed = !!data.params.closed;\n const polesOffset = this.writeDoubleArray(data.poles as Float64Array);\n const weightsOffset = 0;\n const knotsOffset = this.writeDoubleArray(data.params.knots);\n const headerOffset = BGFBAccessors.BsplineCurve.createBsplineCurve(this.builder, data.params.order, closed, polesOffset, weightsOffset, knotsOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagBsplineCurve, headerOffset, 0);\n }\n\n public writeBSplineSurfaceAsFBVariantGeometry(bsurf: BSplineSurface3d | BSplineSurface3dH): number | undefined {\n let poles: Float64Array = bsurf.coffs;\n let weights: Float64Array | undefined;\n let dim = bsurf.poleDimension;\n if (bsurf instanceof BSplineSurface3dH) {\n poles = bsurf.copyXYZToFloat64Array(false);\n weights = bsurf.copyWeightsToFloat64Array();\n dim = 3;\n }\n\n const data = SerializationHelpers.createBSplineSurfaceData(poles, dim,\n bsurf.knots[UVSelect.uDirection].knots, bsurf.numPolesUV(UVSelect.uDirection), bsurf.orderUV(UVSelect.uDirection),\n bsurf.knots[UVSelect.vDirection].knots, bsurf.numPolesUV(UVSelect.vDirection), bsurf.orderUV(UVSelect.vDirection));\n\n if (weights)\n data.weights = weights;\n const wrapModeU = bsurf.getWrappable(UVSelect.uDirection);\n const wrapModeV = bsurf.getWrappable(UVSelect.vDirection);\n if (BSplineWrapMode.None !== wrapModeU)\n data.uParams.wrapMode = wrapModeU;\n if (BSplineWrapMode.None !== wrapModeV)\n data.vParams.wrapMode = wrapModeV;\n\n if (!SerializationHelpers.Export.prepareBSplineSurfaceData(data, {jsonPoles: false}))\n return undefined;\n\n // TypeScript B-spline surfaces do not support trim curves or isoline counts\n const holeOrigin = 0;\n const boundariesOffset = 0;\n const numRulesU = 0;\n const numRulesV = 0;\n\n const closedU = !!data.uParams.closed;\n const closedV = !!data.vParams.closed;\n const polesOffset = this.writeDoubleArray(data.poles as Float64Array);\n const weightsOffset = data.weights ? this.writeDoubleArray(data.weights as Float64Array) : 0;\n const uKnotsOffset = this.writeDoubleArray(data.uParams.knots);\n const vKnotsOffset = this.writeDoubleArray(data.vParams.knots);\n const headerOffset = BGFBAccessors.BsplineSurface.createBsplineSurface(this.builder, polesOffset, weightsOffset,\n uKnotsOffset, vKnotsOffset, data.uParams.numPoles, data.vParams.numPoles, data.uParams.order, data.vParams.order,\n numRulesU, numRulesV, holeOrigin, boundariesOffset, closedU, closedV);\n\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagBsplineSurface, headerOffset, 0);\n }\n\n public writeBsplineCurve3dHAsFBVariantGeometry(bcurve: BSplineCurve3dH): number | undefined {\n const poles = bcurve.copyXYZFloat64Array(false);\n const weights = bcurve.copyWeightsFloat64Array();\n const dim = 3;\n\n const data = SerializationHelpers.createBSplineCurveData(poles, dim, bcurve.knotsRef, bcurve.numPoles, bcurve.order);\n data.weights = weights;\n const wrapMode = bcurve.getWrappable();\n if (BSplineWrapMode.None !== wrapMode)\n data.params.wrapMode = wrapMode;\n\n if (!SerializationHelpers.Export.prepareBSplineCurveData(data, {jsonPoles: false}))\n return undefined;\n\n const closed = !!data.params.closed;\n const polesOffset = this.writeDoubleArray(data.poles as Float64Array);\n const weightsOffset = this.writeDoubleArray(data.weights);\n const knotsOffset = this.writeDoubleArray(data.params.knots);\n const headerOffset = BGFBAccessors.BsplineCurve.createBsplineCurve(this.builder, data.params.order, closed, polesOffset, weightsOffset, knotsOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagBsplineCurve, headerOffset, 0);\n }\n\n public writeCurvePrimitiveAsFBVariantGeometry(curvePrimitive: CurvePrimitive): number | undefined {\n if (curvePrimitive instanceof LineSegment3d) {\n const segmentDataOffset = BGFBAccessors.DSegment3d.createDSegment3d(this.builder,\n curvePrimitive.point0Ref.x,\n curvePrimitive.point0Ref.y,\n curvePrimitive.point0Ref.z,\n curvePrimitive.point1Ref.x,\n curvePrimitive.point1Ref.y,\n curvePrimitive.point1Ref.z);\n const lineSegmentOffset = BGFBAccessors.LineSegment.createLineSegment(this.builder, segmentDataOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagLineSegment, lineSegmentOffset, 0);\n } else if (curvePrimitive instanceof Arc3d) {\n const data = curvePrimitive.toVectors();\n const arcDataOffset = BGFBAccessors.DEllipse3d.createDEllipse3d(this.builder,\n data.center.x, data.center.y, data.center.z,\n data.vector0.x, data.vector0.y, data.vector0.z,\n data.vector90.x, data.vector90.y, data.vector90.z,\n data.sweep.startRadians,\n data.sweep.sweepRadians);\n const arcOffset = BGFBAccessors.EllipticArc.createEllipticArc(this.builder, arcDataOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagEllipticArc, arcOffset, 0);\n } else if (curvePrimitive instanceof LineString3d) {\n const coordinates = extractNumberArray(curvePrimitive.packedPoints);\n const lineStringOffset = BGFBAccessors.LineString.createLineString(this.builder,\n BGFBAccessors.LineString.createPointsVector(this.builder, coordinates));\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagLineString, lineStringOffset, 0);\n } else if (curvePrimitive instanceof BSplineCurve3d) {\n return this.writeBsplineCurve3dAsFBVariantGeometry(curvePrimitive);\n } else if (curvePrimitive instanceof BSplineCurve3dH) {\n return this.writeBsplineCurve3dHAsFBVariantGeometry(curvePrimitive);\n } else if (curvePrimitive instanceof InterpolationCurve3d) {\n return this.writeInterpolationCurve3dAsFBVariantGeometry(curvePrimitive);\n } else if (curvePrimitive instanceof AkimaCurve3d) {\n return this.writeAkimaCurve3dAsFBVariantGeometry(curvePrimitive);\n } else if (curvePrimitive instanceof IntegratedSpiral3d) {\n const placement = curvePrimitive.localToWorld;\n const typeCode = DgnSpiralTypeQueries.stringToTypeCode(curvePrimitive.spiralType, true)!;\n const spiralDetailOffset = BGFBAccessors.TransitionSpiralDetail.createTransitionSpiralDetail(this.builder,\n placement.matrix.coffs[0], placement.matrix.coffs[1], placement.matrix.coffs[2], placement.origin.x,\n placement.matrix.coffs[3], placement.matrix.coffs[4], placement.matrix.coffs[5], placement.origin.y,\n placement.matrix.coffs[6], placement.matrix.coffs[5], placement.matrix.coffs[8], placement.origin.z,\n curvePrimitive.activeFractionInterval.x0, curvePrimitive.activeFractionInterval.x1,\n curvePrimitive.bearing01.startRadians, curvePrimitive.bearing01.endRadians,\n TransitionSpiral3d.radiusToCurvature(curvePrimitive.radius01.x0),\n TransitionSpiral3d.radiusToCurvature(curvePrimitive.radius01.x1),\n typeCode,\n 0);\n const transitionTableOffset = BGFBAccessors.TransitionSpiral.createTransitionSpiral(this.builder,\n spiralDetailOffset, 0, 0);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder,\n BGFBAccessors.VariantGeometryUnion.tagTransitionSpiral, transitionTableOffset, 0);\n } else if (curvePrimitive instanceof DirectSpiral3d) {\n const placement = curvePrimitive.localToWorld;\n // direct spirals always inflect at the origin of the local frame ..\n // spiral\n const curvature0 = 0.0;\n const curvature1 = curvePrimitive.nominalCurvature1;\n const radius0 = 0.0;\n const radius1 = curvePrimitive.nominalR1; // which is 1/curvature1\n const nominalLength = curvePrimitive.nominalL1;\n const bearing0Radians = 0.0;\n const bearing1Radians = TransitionSpiral3d.radiusRadiusLengthToSweepRadians(radius0, radius1, nominalLength);\n const typeCode = DgnSpiralTypeQueries.stringToTypeCode(curvePrimitive.spiralType, true)!;\n const spiralDetailOffset = BGFBAccessors.TransitionSpiralDetail.createTransitionSpiralDetail(this.builder,\n placement.matrix.coffs[0], placement.matrix.coffs[1], placement.matrix.coffs[2], placement.origin.x,\n placement.matrix.coffs[3], placement.matrix.coffs[4], placement.matrix.coffs[5], placement.origin.y,\n placement.matrix.coffs[6], placement.matrix.coffs[5], placement.matrix.coffs[8], placement.origin.z,\n curvePrimitive.activeFractionInterval.x0, curvePrimitive.activeFractionInterval.x1,\n bearing0Radians, bearing1Radians,\n curvature0, curvature1,\n typeCode,\n 0);\n const transitionTableOffset = BGFBAccessors.TransitionSpiral.createTransitionSpiral(this.builder,\n spiralDetailOffset, 0, 0);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder,\n BGFBAccessors.VariantGeometryUnion.tagTransitionSpiral, transitionTableOffset, 0);\n }\n return undefined;\n }\n public writePointString3dAsFBVariantGeometry(pointString: PointString3d): number | undefined {\n if (pointString instanceof PointString3d) {\n const coordinates = extractNumberArray(pointString.points);\n const headerOffset = BGFBAccessors.PointString.createPointString(this.builder,\n BGFBAccessors.PointString.createPointsVector(this.builder, coordinates));\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagPointString, headerOffset, 0);\n\n }\n return undefined;\n }\n\n public writeSolidPrimitiveAsFBVariantGeometry(solid: SolidPrimitive): number | undefined {\n // NOTE: Box, Sphere, Cone, and TorusPipe have \"detail\" within a \"table\"\n // BUT: linear, rotational, and ruled sweeps have their contour and numerics directly within their table.\n if (solid instanceof Box) {\n const originA = solid.getBaseOrigin();\n const originB = solid.getTopOrigin();\n const vectorX = solid.getVectorX();\n const vectorY = solid.getVectorY();\n\n const baseX = solid.getBaseX();\n const baseY = solid.getBaseY();\n const topX = solid.getTopX();\n const topY = solid.getTopY();\n const detailOffset = BGFBAccessors.DgnBoxDetail.createDgnBoxDetail(this.builder,\n originA.x, originA.y, originA.z,\n originB.x, originB.y, originB.z,\n vectorX.x, vectorX.y, vectorX.z,\n vectorY.x, vectorY.y, vectorY.z,\n baseX, baseY, topX, topY, solid.capped);\n const carrierOffset = BGFBAccessors.DgnBox.createDgnBox(this.builder, detailOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnBox, carrierOffset, 0);\n } else if (solid instanceof Sphere) {\n const localToWorld = solid.cloneLocalToWorld();\n const sweep = solid.cloneLatitudeSweep();\n const detailOffset = BGFBAccessors.DgnSphereDetail.createDgnSphereDetail(this.builder,\n localToWorld.matrix.coffs[0], localToWorld.matrix.coffs[1], localToWorld.matrix.coffs[2], localToWorld.origin.x,\n localToWorld.matrix.coffs[3], localToWorld.matrix.coffs[4], localToWorld.matrix.coffs[5], localToWorld.origin.y,\n localToWorld.matrix.coffs[6], localToWorld.matrix.coffs[7], localToWorld.matrix.coffs[8], localToWorld.origin.z,\n sweep.startRadians, sweep.sweepRadians,\n solid.capped);\n const carrierOffset = BGFBAccessors.DgnSphere.createDgnSphere(this.builder, detailOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnSphere, carrierOffset, 0);\n } else if (solid instanceof Cone) {\n const centerA = solid.getCenterA();\n const centerB = solid.getCenterB();\n const vectorX = solid.getVectorX();\n const vectorY = solid.getVectorY();\n const radiusA = solid.getRadiusA();\n const radiusB = solid.getRadiusB();\n const detailOffset = BGFBAccessors.DgnConeDetail.createDgnConeDetail(this.builder,\n centerA.x, centerA.y, centerA.z,\n centerB.x, centerB.y, centerB.z,\n vectorX.x, vectorX.y, vectorX.z,\n vectorY.x, vectorY.y, vectorY.z, radiusA, radiusB, solid.capped);\n const carrierOffset = BGFBAccessors.DgnCone.createDgnCone(this.builder, detailOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnCone, carrierOffset, 0);\n } else if (solid instanceof TorusPipe) {\n const center = solid.cloneCenter();\n const vectorX = solid.cloneVectorX();\n const vectorY = solid.cloneVectorY();\n const minorRadius = solid.getMinorRadius();\n const majorRadius = solid.getMajorRadius();\n const sweepRadians = solid.getSweepAngle().radians;\n const detailOffset = BGFBAccessors.DgnTorusPipeDetail.createDgnTorusPipeDetail(this.builder,\n center.x, center.y, center.z,\n vectorX.x, vectorX.y, vectorX.z,\n vectorY.x, vectorY.y, vectorY.z, majorRadius, minorRadius, sweepRadians, solid.capped);\n const carrierOffset = BGFBAccessors.DgnTorusPipe.createDgnTorusPipe(this.builder, detailOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnTorusPipe, carrierOffset, 0);\n } else if (solid instanceof LinearSweep) {\n const baseCurveOffset = this.writeCurveCollectionAsFBCurveVector(solid.getSweepContourRef().getCurves())!;\n const sweepVector = solid.cloneSweepVector();\n // const sweepVectorOffset = BGFBAccessors.DVector3d.createDVector3d(this.builder, sweepVector.x, sweepVector.y, sweepVector.z);\n // const carrierOffset = BGFBAccessors.DgnExtrusion.createDgnExtrusion(this.builder, contourOffset, sweepVectorOffset, solid.capped);\n\n // WOW -- the machine generated createDgnExtrusion expects an offset for the sweepVector, but then\n // chokes trying to add it.\n BGFBAccessors.DgnExtrusion.startDgnExtrusion(this.builder);\n BGFBAccessors.DgnExtrusion.addBaseCurve(this.builder, baseCurveOffset);\n const extrusionVectorOffset = BGFBAccessors.DVector3d.createDVector3d(this.builder, sweepVector.x, sweepVector.y, sweepVector.z);\n BGFBAccessors.DgnExtrusion.addExtrusionVector(this.builder, extrusionVectorOffset);\n BGFBAccessors.DgnExtrusion.addCapped(this.builder, solid.capped);\n const dgnExtrusionOffset = BGFBAccessors.DgnExtrusion.endDgnExtrusion(this.builder);\n\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnExtrusion, dgnExtrusionOffset, 0);\n } else if (solid instanceof RotationalSweep) {\n const baseCurveOffset = this.writeCurveCollectionAsFBCurveVector(solid.getSweepContourRef().getCurves())!;\n const axis = solid.cloneAxisRay();\n const sweepAngle = solid.getSweep();\n // const sweepVectorOffset = BGFBAccessors.DVector3d.createDVector3d(this.builder, sweepVector.x, sweepVector.y, sweepVector.z);\n // const carrierOffset = BGFBAccessors.DgnExtrusion.createDgnExtrusion(this.builder, contourOffset, sweepVectorOffset, solid.capped);\n\n // WOW -- the machine generated createDgnExtrusion expects an offset for the sweepVector, but then\n // chokes trying to add it.\n BGFBAccessors.DgnRotationalSweep.startDgnRotationalSweep(this.builder);\n BGFBAccessors.DgnRotationalSweep.addBaseCurve(this.builder, baseCurveOffset);\n const axisRayOffset = BGFBAccessors.DRay3d.createDRay3d(this.builder,\n axis.origin.x, axis.origin.y, axis.origin.z, axis.direction.x, axis.direction.y, axis.direction.z);\n BGFBAccessors.DgnRotationalSweep.addAxis(this.builder, axisRayOffset);\n BGFBAccessors.DgnRotationalSweep.addSweepRadians(this.builder, sweepAngle.radians);\n BGFBAccessors.DgnRotationalSweep.addCapped(this.builder, solid.capped);\n const dgnRotationalSweepOffset = BGFBAccessors.DgnRotationalSweep.endDgnRotationalSweep(this.builder);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnRotationalSweep, dgnRotationalSweepOffset, 0);\n\n } else if (solid instanceof RuledSweep) {\n const contours = solid.sweepContoursRef();\n const contourOffsets: flatbuffers.Offset[] = [];\n for (const contour of contours) {\n const contourOffset = this.writeCurveCollectionAsFBCurveVector(contour.getCurves());\n if (contourOffset !== undefined)\n contourOffsets.push(contourOffset);\n }\n const contoursVectorOffset = BGFBAccessors.DgnRuledSweep.createCurvesVector(this.builder, contourOffsets);\n const ruledSweepTable = BGFBAccessors.DgnRuledSweep.createDgnRuledSweep(this.builder, contoursVectorOffset, solid.capped);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagDgnRuledSweep, ruledSweepTable, 0);\n }\n return undefined;\n }\n public writePolyfaceAuxChannelDataAsFBVariantGeometry(channelData: AuxChannelData): number | undefined {\n if (channelData instanceof AuxChannelData) {\n const valuesOffset = BGFBAccessors.PolyfaceAuxChannelData.createValuesVector(this.builder, channelData.values);\n return BGFBAccessors.PolyfaceAuxChannelData.createPolyfaceAuxChannelData(this.builder,\n channelData.input,\n valuesOffset,\n );\n }\n return undefined;\n }\n\n public writePolyfaceAuxChannelAsFBVariantGeometry(channel: AuxChannel): number | undefined {\n if (channel instanceof AuxChannel) {\n const channelDataOffsets: number[] = [];\n for (const channelData of channel.data) {\n channelDataOffsets.push(this.writePolyfaceAuxChannelDataAsFBVariantGeometry(channelData)!);\n }\n const valuesOffset = BGFBAccessors.PolyfaceAuxChannel.createDataVector(this.builder, channelDataOffsets);\n const nameOffset = channel.name ? this.builder.createString(channel.name) : 0;\n const inputNameOffset = channel.inputName ? this.builder.createString(channel.inputName) : 0;\n return BGFBAccessors.PolyfaceAuxChannel.createPolyfaceAuxChannel(this.builder,\n channel.dataType,\n nameOffset,\n inputNameOffset, valuesOffset,\n );\n }\n return undefined;\n }\n\n public writePolyfaceAuxDataAsFBVariantGeometry(mesh: IndexedPolyface, data: PolyfaceAuxData): number | undefined {\n if (data instanceof PolyfaceAuxData) {\n const channelOffsets: number[] = [];\n for (const channel of data.channels)\n channelOffsets.push(this.writePolyfaceAuxChannelAsFBVariantGeometry(channel)!);\n const channelOffsetsOffset = BGFBAccessors.PolyfaceAuxChannel.createDataVector(this.builder, channelOffsets);\n\n const indexArray: number[] = [];\n this.fillOneBasedIndexArray(mesh, data.indices, undefined, 0, indexArray);\n const indicesOffset = BGFBAccessors.PolyfaceAuxData.createIndicesVector(this.builder, indexArray);\n\n return BGFBAccessors.PolyfaceAuxData.createPolyfaceAuxData(this.builder, indicesOffset, channelOffsetsOffset);\n }\n return undefined;\n }\n public writeTaggedNumericDataArray(data: TaggedNumericData | undefined): number {\n if (data){\n const intDataOffset = this.writeIntArray(data.intData);\n const doubleDataOffset = this.writeDoubleArray(data.doubleData);\n return BGFBAccessors.TaggedNumericData.createTaggedNumericData(this.builder,\n data.tagA, data.tagB, intDataOffset, doubleDataOffset);\n }\n return 0;\n }\n\n public writePolyfaceAsFBVariantGeometry(mesh: IndexedPolyface): number | undefined {\n if (mesh instanceof IndexedPolyface) {\n // WE KNOW . . . . the polyface has blocks of zero-based indices.\n const indexArray: number[] = []; // and this will really be integers.\n const numberArray: number[] = []; // and this will really be doubles.\n\n copyToPackedNumberArray(numberArray, mesh.data.point.float64Data(), mesh.data.point.float64Length);\n const pointOffset = BGFBAccessors.Polyface.createPointVector(this.builder, numberArray);\n let paramIndexOffset = 0;\n let normalIndexOffset = 0;\n let colorIndexOffset = 0;\n let intColorOffset = 0;\n let normalOffset = 0;\n let paramOffset = 0;\n let auxDataOffset = 0;\n let taggedNumericDataOffset = 0;\n const meshStyle = 1; // That is . . . MESH_ELM_STYLE_INDEXED_FACE_LOOPS\n const numPerFace = 0; // specifically, variable size with 0 terminators\n this.fillOneBasedIndexArray(mesh, mesh.data.pointIndex, mesh.data.edgeVisible, 0, indexArray);\n\n const twoSided = mesh.twoSided;\n const pointIndexOffset = BGFBAccessors.Polyface.createPointIndexVector(this.builder, indexArray);\n if (mesh.data.paramIndex !== undefined && mesh.data.paramIndex.length > 0) {\n this.fillOneBasedIndexArray(mesh, mesh.data.paramIndex, undefined, 0, indexArray);\n paramIndexOffset = BGFBAccessors.Polyface.createParamIndexVector(this.builder, indexArray);\n }\n\n if (mesh.data.normalIndex !== undefined && mesh.data.normalIndex.length > 0) {\n this.fillOneBasedIndexArray(mesh, mesh.data.normalIndex, undefined, 0, indexArray);\n normalIndexOffset = BGFBAccessors.Polyface.createNormalIndexVector(this.builder, indexArray);\n }\n\n if (mesh.data.colorIndex !== undefined && mesh.data.colorIndex.length > 0) {\n this.fillOneBasedIndexArray(mesh, mesh.data.colorIndex, undefined, 0, indexArray);\n colorIndexOffset = BGFBAccessors.Polyface.createColorIndexVector(this.builder, indexArray);\n }\n\n if (mesh.data.color !== undefined && mesh.data.color.length > 0) {\n intColorOffset = BGFBAccessors.Polyface.createIntColorVector(this.builder, mesh.data.color);\n }\n\n if (mesh.data.normal) {\n copyToPackedNumberArray(numberArray, mesh.data.normal.float64Data(), mesh.data.normal.float64Length);\n normalOffset = BGFBAccessors.Polyface.createNormalVector(this.builder, numberArray);\n }\n\n if (mesh.data.param) {\n copyToPackedNumberArray(numberArray, mesh.data.param.float64Data(), mesh.data.param.float64Length);\n paramOffset = BGFBAccessors.Polyface.createPointVector(this.builder, numberArray);\n }\n\n if (mesh.data.auxData)\n auxDataOffset = this.writePolyfaceAuxDataAsFBVariantGeometry(mesh, mesh.data.auxData)!;\n\n if (mesh.data.taggedNumericData)\n taggedNumericDataOffset = this.writeTaggedNumericDataArray(mesh.data.taggedNumericData);\n\n const expectedClosure = mesh.expectedClosure;\n\n // NOTE: mesh.data.face is not persistent\n\n const polyfaceOffset = BGFBAccessors.Polyface.createPolyface(\n this.builder, pointOffset, paramOffset, normalOffset, 0, intColorOffset, pointIndexOffset, paramIndexOffset,\n normalIndexOffset, colorIndexOffset, 0, 0, 0, meshStyle, twoSided, numPerFace, 0, auxDataOffset,\n expectedClosure, taggedNumericDataOffset,\n );\n\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagPolyface, polyfaceOffset, 0);\n\n }\n return undefined;\n }\n\n public fillOneBasedIndexArray(mesh: IndexedPolyface, sourceIndex: number[], visible: boolean[] | undefined, facetTerminator: number | undefined, destIndex: number[]) {\n destIndex.length = 0;\n const numFacet = mesh.facetCount;\n for (let facetIndex = 0; facetIndex < numFacet; facetIndex++) {\n const k0 = mesh.facetIndex0(facetIndex);\n const k1 = mesh.facetIndex1(facetIndex);\n for (let k = k0; k < k1; k++) {\n let q = sourceIndex[k] + 1;\n if (visible !== undefined && !visible[k])\n q = -q;\n destIndex.push(q);\n }\n if (facetTerminator !== undefined)\n destIndex.push(facetTerminator);\n }\n }\n public writeGeometryQueryAsFBVariantGeometry(g: GeometryQuery): number | undefined {\n let offset: number | undefined;\n if (g instanceof CurvePrimitive && (offset = this.writeCurvePrimitiveAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof CurveCollection && (offset = this.writeCurveCollectionAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof IndexedPolyface && (offset = this.writePolyfaceAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof SolidPrimitive && (offset = this.writeSolidPrimitiveAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof BSplineSurface3d && (offset = this.writeBSplineSurfaceAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof BSplineSurface3dH && (offset = this.writeBSplineSurfaceAsFBVariantGeometry(g)) !== undefined)\n return offset;\n if (g instanceof PointString3d && (offset = this.writePointString3dAsFBVariantGeometry(g)) !== undefined)\n return offset;\n // if (g instanceof CoordinateXYZ) // TODO\n return undefined;\n }\n\n public writeGeometryQueryArrayAsFBVariantGeometry(allGeometry: GeometryQuery | GeometryQuery[] | undefined): number | undefined{\n if (Array.isArray(allGeometry)) {\n const allOffsets: number[] = [];\n for (const g of allGeometry) {\n const offset = this.writeGeometryQueryAsFBVariantGeometry(g);\n if (offset !== undefined)\n allOffsets.push(offset);\n }\n if (allOffsets.length > 0) {\n const membersOffset = BGFBAccessors.VectorOfVariantGeometry.createMembersVector(this.builder, allOffsets);\n const vectorOffset = BGFBAccessors.VectorOfVariantGeometry.createVectorOfVariantGeometry(this.builder, membersOffset);\n return BGFBAccessors.VariantGeometry.createVariantGeometry(this.builder, BGFBAccessors.VariantGeometryUnion.tagVectorOfVariantGeometry, vectorOffset, 0);\n }\n } else if (allGeometry instanceof GeometryQuery)\n return this.writeGeometryQueryAsFBVariantGeometry(allGeometry);\n return undefined;\n }\n /**\n * Serialize bytes to a flatbuffer.\n */\n public static geometryToBytes(data: GeometryQuery | GeometryQuery[], signatureBytes?: Uint8Array): Uint8Array | undefined {\n const writer = new BGFBWriter();\n const rootOffset = writer.writeGeometryQueryArrayAsFBVariantGeometry(data);\n\n if (rootOffset !== undefined) {\n const builder = writer.builder;\n builder.finish(rootOffset);\n const buffer = builder.dataBuffer();\n if (!signatureBytes) {\n return buffer.bytes().slice(buffer.position());\n } else if (buffer.position() >= signatureBytes.length) {\n // The buffer has space for the signature ahead of its position . . .\n const i0 = buffer.position() - signatureBytes.length;\n let i = i0;\n for (const k of signatureBytes)\n buffer.bytes()[i++] = k;\n return buffer.bytes().slice(i0);\n } else {\n // There is no space ahead of the position () . . .\n // coverage remark: I have never seen this happen for real.\n // It has been exercised by adding 1024 to the signatureBytes.length test to force this branch.\n const num1 = buffer.bytes().length - buffer.position();\n const num0 = signatureBytes.length;\n const newBytes = new Uint8Array(num0 + num1);\n newBytes.set(signatureBytes, 0);\n newBytes.set(buffer.bytes().slice(buffer.position()), num0);\n return newBytes;\n }\n }\n return undefined;\n }\n}\nfunction extractNumberArray(data: GrowableXYZArray | Point3d[]): number[] {\n const result = [];\n if (data instanceof GrowableXYZArray) {\n // ugh -- accessors only deal with number[] ..\n const numCoordinate = 3 * data.length;\n const source = data.float64Data();\n for (let i = 0; i < numCoordinate; i++)\n result.push(source[i]);\n return result;\n } else if (Array.isArray(data)) {\n for (const xyz of data)\n result.push(xyz.x, xyz.y, xyz.z);\n }\n return result;\n}\n/** Copy the active data to a simple number array. */\nfunction copyToPackedNumberArray(dest: number[], source: Float64Array, count: number) {\n dest.length = 0;\n for (let i = 0; i < count; i++)\n dest.push(source[i]);\n}\n\n"]}
|
|
@@ -10,24 +10,24 @@
|
|
|
10
10
|
* @public
|
|
11
11
|
*/
|
|
12
12
|
export class DeepCompare {
|
|
13
|
+
/** Statistical accumulations during searchers. */
|
|
14
|
+
typeCounts = {
|
|
15
|
+
numbers: 0,
|
|
16
|
+
arrays: 0,
|
|
17
|
+
functions: 0,
|
|
18
|
+
objects: 0,
|
|
19
|
+
strings: 0,
|
|
20
|
+
booleans: 0,
|
|
21
|
+
undefined: 0,
|
|
22
|
+
};
|
|
23
|
+
/** Counts of property names encountered during various searches. */
|
|
24
|
+
propertyCounts = {};
|
|
25
|
+
/** Array of error descriptions. */
|
|
26
|
+
errorTracker = [];
|
|
27
|
+
/** relative tolerance for declaring numeric values equal. */
|
|
28
|
+
numberRelTol;
|
|
13
29
|
/** Construct comparison object with relative tolerance. */
|
|
14
|
-
constructor(numberRelTol = 1.0e-12) {
|
|
15
|
-
/** Statistical accumulations during searchers. */
|
|
16
|
-
this.typeCounts = {
|
|
17
|
-
numbers: 0,
|
|
18
|
-
arrays: 0,
|
|
19
|
-
functions: 0,
|
|
20
|
-
objects: 0,
|
|
21
|
-
strings: 0,
|
|
22
|
-
booleans: 0,
|
|
23
|
-
undefined: 0,
|
|
24
|
-
};
|
|
25
|
-
/** Counts of property names encountered during various searches. */
|
|
26
|
-
this.propertyCounts = {};
|
|
27
|
-
/** Array of error descriptions. */
|
|
28
|
-
this.errorTracker = [];
|
|
29
|
-
this.numberRelTol = numberRelTol;
|
|
30
|
-
}
|
|
30
|
+
constructor(numberRelTol = 1.0e-12) { this.numberRelTol = numberRelTol; }
|
|
31
31
|
/** Test if a and b are within tolerance.
|
|
32
32
|
* * If not, push error message to errorTracker.
|
|
33
33
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeepCompare.js","sourceRoot":"","sources":["../../../src/serialization/DeepCompare.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 Serialization\n */\n\n/**\n * Utilities to compare json objects by searching through their properties.\n * @public\n */\nexport class DeepCompare {\n /** Statistical accumulations during searchers. */\n public typeCounts = {\n numbers: 0,\n arrays: 0,\n functions: 0,\n objects: 0,\n strings: 0,\n booleans: 0,\n undefined: 0,\n };\n /** Counts of property names encountered during various searches. */\n public propertyCounts: { [key: string]: number } = {};\n /** Array of error descriptions. */\n public errorTracker: any[] = [];\n /** relative tolerance for declaring numeric values equal. */\n public numberRelTol: number;\n /** Construct comparison object with relative tolerance. */\n public constructor(numberRelTol = 1.0e-12) { this.numberRelTol = numberRelTol; }\n\n /** Test if a and b are within tolerance.\n * * If not, push error message to errorTracker.\n */\n public compareNumber(a: number, b: number) {\n if (Math.abs(b - a) < this.numberRelTol * (1 + Math.abs(a) + Math.abs(b))) {\n return this.announce(true);\n } else {\n this.errorTracker.unshift(b);\n this.errorTracker.unshift(a);\n this.errorTracker.unshift(`In ${this.errorTracker[this.errorTracker.length - 1]} property: Mismatched values`);\n return this.announce(false);\n }\n }\n\n private compareArray(a: any[], b: any[]) {\n if (a.length !== b.length) {\n const aCounter: { [key: string]: any } = {};\n const bCounter: { [key: string]: any } = {};\n // Append object to tracker that counts the properties of each array element (which is an object) in b, ONLY AT THIS LEVEL\n for (const i of b) {\n if (typeof i === \"object\" && typeof i !== \"function\" && !Array.isArray(i)) {\n for (const property in i) {\n if (i.hasOwnProperty(property)) {\n // Add property to counter if not already there\n if (!bCounter.hasOwnProperty(property))\n bCounter[property] = 0;\n bCounter[property]++;\n }\n }\n }\n }\n this.errorTracker.unshift(bCounter);\n // Append object to tracker that counts the properties of each array element (which is an object) in a, ONLY AT THIS LEVEL\n for (const i of a) {\n if (typeof i === \"object\" && typeof i !== \"function\" && !Array.isArray(i)) {\n for (const property in i) {\n if (i.hasOwnProperty(property)) {\n // Add property to counter if not already there\n if (!aCounter.hasOwnProperty(property))\n aCounter[property] = 0;\n aCounter[property]++;\n }\n }\n }\n }\n this.errorTracker.unshift(aCounter);\n\n this.errorTracker.unshift(`Mismatched array lengths a: [${a.length}] b: [${b.length}]`);\n return this.announce(false);\n }\n // Keep track of result for each element of array\n let toReturn = true;\n for (let i = 0; i < a.length; i++) {\n if (!this.compareInternal(a[i], b[i])) {\n toReturn = false;\n this.errorTracker.unshift(`[${i.toString()}]`);\n break;\n }\n }\n return this.announce(toReturn);\n }\n\n private compareObject(a: any, b: any) {\n // Check that both objects contain the same amount of properties\n if (a == null && b == null)\n return this.announce(true);\n if ((Object.keys(a)).length !== (Object.keys(b)).length) {\n this.errorTracker.unshift(`Mismatched property lists [${Object.keys(a)}][${Object.keys(b)}`);\n return this.announce(false);\n }\n // Keep track of result for each property of object\n let toReturn = true;\n for (const property in a) {\n // Only check non-generic object properties\n if (a.hasOwnProperty(property)) {\n // If property does not exist in propertyCounter, add it\n if (!this.propertyCounts.hasOwnProperty(property)) {\n this.propertyCounts[property] = 0;\n }\n this.propertyCounts[property]++;\n\n // Check that same property exists in b\n if (!(b.hasOwnProperty(property))) {\n this.errorTracker.unshift(`Property ${property} of A not in B`);\n this.errorTracker.unshift(a);\n this.errorTracker.unshift(b);\n return this.announce(false);\n }\n if (!this.compareInternal(a[property], b[property])) {\n // If not true, push property and break the loop\n this.errorTracker.unshift(property);\n toReturn = false;\n break;\n }\n }\n }\n return this.announce(toReturn);\n }\n\n // this is a convenient place for a breakpoint on failures in areSameStructure.\n private announce(value: boolean): boolean {\n if (value)\n return true;\n return false;\n }\n\n /** Main entry for comparing deep json objects.\n * * errorTracker, typeCounts, and propertyCounts are cleared.\n */\n public compare(a: any, b: any, tolerance?: number): boolean {\n if (tolerance !== undefined)\n this.numberRelTol = tolerance;\n this.errorTracker.length = 0;\n this.typeCounts.numbers = this.typeCounts.arrays = this.typeCounts.functions = this.typeCounts.objects = this.typeCounts.strings = this.typeCounts.booleans = this.typeCounts.undefined = 0;\n this.propertyCounts = {};\n return this.compareInternal(a, b);\n }\n\n // Recursive function for comparing any two nodes in a json object \"tree\"\n private compareInternal(a: any, b: any): boolean {\n if (typeof a !== typeof b) {\n return this.announce(false);\n } else if ((typeof a === \"number\") && (typeof b === \"number\")) {\n this.typeCounts.numbers++;\n return this.compareNumber(a, b);\n } else if (Array.isArray(a) && Array.isArray(b)) {\n this.typeCounts.arrays++;\n return this.compareArray(a, b);\n } else if (typeof a === \"function\" && typeof b === \"function\") {\n // No current necessity to check functions\n this.typeCounts.functions++;\n return true;\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n // Argument is object but not array or function\n this.typeCounts.objects++;\n return (a === b) ? true : this.compareObject(a, b);\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n this.typeCounts.strings++;\n return a === b;\n } else if (typeof a === \"boolean\" && typeof b === \"boolean\") {\n this.typeCounts.booleans++;\n return a === b;\n } else if (typeof a === \"undefined\" && typeof b === \"undefined\") {\n // As long as both are undefined, return true\n this.typeCounts.undefined++;\n return true;\n } else {\n // Unsupported type\n return this.announce(false);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DeepCompare.js","sourceRoot":"","sources":["../../../src/serialization/DeepCompare.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH;;;GAGG;AACH,MAAM,OAAO,WAAW;IACtB,kDAAkD;IAC3C,UAAU,GAAG;QAClB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;KACb,CAAC;IACF,oEAAoE;IAC7D,cAAc,GAA8B,EAAE,CAAC;IACtD,mCAAmC;IAC5B,YAAY,GAAU,EAAE,CAAC;IAChC,6DAA6D;IACtD,YAAY,CAAS;IAC5B,2DAA2D;IAC3D,YAAmB,YAAY,GAAG,OAAO,IAAI,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC;IAEhF;;OAEG;IACI,aAAa,CAAC,CAAS,EAAE,CAAS;QACvC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,8BAA8B,CAAC,CAAC;YAC/G,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,CAAQ,EAAE,CAAQ;QACrC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAA2B,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAA2B,EAAE,CAAC;YAC5C,0HAA0H;YAC1H,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1E,KAAK,MAAM,QAAQ,IAAI,CAAC,EAAE,CAAC;wBACzB,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC/B,+CAA+C;4BAC/C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;gCACpC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;4BACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACvB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpC,0HAA0H;YAC1H,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1E,KAAK,MAAM,QAAQ,IAAI,CAAC,EAAE,CAAC;wBACzB,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC/B,+CAA+C;4BAC/C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;gCACpC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;4BACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACvB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAEpC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACxF,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,iDAAiD;QACjD,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,QAAQ,GAAG,KAAK,CAAC;gBACjB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAC/C,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAEO,aAAa,CAAC,CAAM,EAAE,CAAM;QAClC,gEAAgE;QAChE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;YACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACxD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,8BAA8B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7F,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,mDAAmD;QACnD,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,QAAQ,IAAI,CAAC,EAAE,CAAC;YACzB,2CAA2C;YAC3C,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,wDAAwD;gBACxD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAEhC,uCAAuC;gBACvC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBAClC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,QAAQ,gBAAgB,CAAC,CAAC;oBAChE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBACpD,gDAAgD;oBAChD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACpC,QAAQ,GAAG,KAAK,CAAC;oBACjB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,+EAA+E;IACvE,QAAQ,CAAC,KAAc;QAC7B,IAAI,KAAK;YACP,OAAO,IAAI,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,CAAM,EAAE,CAAM,EAAE,SAAkB;QAC/C,IAAI,SAAS,KAAK,SAAS;YACzB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC;QAC5L,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,yEAAyE;IACjE,eAAe,CAAC,CAAM,EAAE,CAAM;QACpC,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;YAC9D,0CAA0C;YAC1C,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1D,+CAA+C;YAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,WAAW,IAAI,OAAO,CAAC,KAAK,WAAW,EAAE,CAAC;YAChE,6CAA6C;YAC7C,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,mBAAmB;YACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF","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 Serialization\n */\n\n/**\n * Utilities to compare json objects by searching through their properties.\n * @public\n */\nexport class DeepCompare {\n /** Statistical accumulations during searchers. */\n public typeCounts = {\n numbers: 0,\n arrays: 0,\n functions: 0,\n objects: 0,\n strings: 0,\n booleans: 0,\n undefined: 0,\n };\n /** Counts of property names encountered during various searches. */\n public propertyCounts: { [key: string]: number } = {};\n /** Array of error descriptions. */\n public errorTracker: any[] = [];\n /** relative tolerance for declaring numeric values equal. */\n public numberRelTol: number;\n /** Construct comparison object with relative tolerance. */\n public constructor(numberRelTol = 1.0e-12) { this.numberRelTol = numberRelTol; }\n\n /** Test if a and b are within tolerance.\n * * If not, push error message to errorTracker.\n */\n public compareNumber(a: number, b: number) {\n if (Math.abs(b - a) < this.numberRelTol * (1 + Math.abs(a) + Math.abs(b))) {\n return this.announce(true);\n } else {\n this.errorTracker.unshift(b);\n this.errorTracker.unshift(a);\n this.errorTracker.unshift(`In ${this.errorTracker[this.errorTracker.length - 1]} property: Mismatched values`);\n return this.announce(false);\n }\n }\n\n private compareArray(a: any[], b: any[]) {\n if (a.length !== b.length) {\n const aCounter: { [key: string]: any } = {};\n const bCounter: { [key: string]: any } = {};\n // Append object to tracker that counts the properties of each array element (which is an object) in b, ONLY AT THIS LEVEL\n for (const i of b) {\n if (typeof i === \"object\" && typeof i !== \"function\" && !Array.isArray(i)) {\n for (const property in i) {\n if (i.hasOwnProperty(property)) {\n // Add property to counter if not already there\n if (!bCounter.hasOwnProperty(property))\n bCounter[property] = 0;\n bCounter[property]++;\n }\n }\n }\n }\n this.errorTracker.unshift(bCounter);\n // Append object to tracker that counts the properties of each array element (which is an object) in a, ONLY AT THIS LEVEL\n for (const i of a) {\n if (typeof i === \"object\" && typeof i !== \"function\" && !Array.isArray(i)) {\n for (const property in i) {\n if (i.hasOwnProperty(property)) {\n // Add property to counter if not already there\n if (!aCounter.hasOwnProperty(property))\n aCounter[property] = 0;\n aCounter[property]++;\n }\n }\n }\n }\n this.errorTracker.unshift(aCounter);\n\n this.errorTracker.unshift(`Mismatched array lengths a: [${a.length}] b: [${b.length}]`);\n return this.announce(false);\n }\n // Keep track of result for each element of array\n let toReturn = true;\n for (let i = 0; i < a.length; i++) {\n if (!this.compareInternal(a[i], b[i])) {\n toReturn = false;\n this.errorTracker.unshift(`[${i.toString()}]`);\n break;\n }\n }\n return this.announce(toReturn);\n }\n\n private compareObject(a: any, b: any) {\n // Check that both objects contain the same amount of properties\n if (a == null && b == null)\n return this.announce(true);\n if ((Object.keys(a)).length !== (Object.keys(b)).length) {\n this.errorTracker.unshift(`Mismatched property lists [${Object.keys(a)}][${Object.keys(b)}`);\n return this.announce(false);\n }\n // Keep track of result for each property of object\n let toReturn = true;\n for (const property in a) {\n // Only check non-generic object properties\n if (a.hasOwnProperty(property)) {\n // If property does not exist in propertyCounter, add it\n if (!this.propertyCounts.hasOwnProperty(property)) {\n this.propertyCounts[property] = 0;\n }\n this.propertyCounts[property]++;\n\n // Check that same property exists in b\n if (!(b.hasOwnProperty(property))) {\n this.errorTracker.unshift(`Property ${property} of A not in B`);\n this.errorTracker.unshift(a);\n this.errorTracker.unshift(b);\n return this.announce(false);\n }\n if (!this.compareInternal(a[property], b[property])) {\n // If not true, push property and break the loop\n this.errorTracker.unshift(property);\n toReturn = false;\n break;\n }\n }\n }\n return this.announce(toReturn);\n }\n\n // this is a convenient place for a breakpoint on failures in areSameStructure.\n private announce(value: boolean): boolean {\n if (value)\n return true;\n return false;\n }\n\n /** Main entry for comparing deep json objects.\n * * errorTracker, typeCounts, and propertyCounts are cleared.\n */\n public compare(a: any, b: any, tolerance?: number): boolean {\n if (tolerance !== undefined)\n this.numberRelTol = tolerance;\n this.errorTracker.length = 0;\n this.typeCounts.numbers = this.typeCounts.arrays = this.typeCounts.functions = this.typeCounts.objects = this.typeCounts.strings = this.typeCounts.booleans = this.typeCounts.undefined = 0;\n this.propertyCounts = {};\n return this.compareInternal(a, b);\n }\n\n // Recursive function for comparing any two nodes in a json object \"tree\"\n private compareInternal(a: any, b: any): boolean {\n if (typeof a !== typeof b) {\n return this.announce(false);\n } else if ((typeof a === \"number\") && (typeof b === \"number\")) {\n this.typeCounts.numbers++;\n return this.compareNumber(a, b);\n } else if (Array.isArray(a) && Array.isArray(b)) {\n this.typeCounts.arrays++;\n return this.compareArray(a, b);\n } else if (typeof a === \"function\" && typeof b === \"function\") {\n // No current necessity to check functions\n this.typeCounts.functions++;\n return true;\n } else if (typeof a === \"object\" && typeof b === \"object\") {\n // Argument is object but not array or function\n this.typeCounts.objects++;\n return (a === b) ? true : this.compareObject(a, b);\n } else if (typeof a === \"string\" && typeof b === \"string\") {\n this.typeCounts.strings++;\n return a === b;\n } else if (typeof a === \"boolean\" && typeof b === \"boolean\") {\n this.typeCounts.booleans++;\n return a === b;\n } else if (typeof a === \"undefined\" && typeof b === \"undefined\") {\n // As long as both are undefined, return true\n this.typeCounts.undefined++;\n return true;\n } else {\n // Unsupported type\n return this.announce(false);\n }\n }\n}\n"]}
|
|
@@ -94,6 +94,7 @@ export class SteppedIndexFunctionFactory {
|
|
|
94
94
|
* @internal
|
|
95
95
|
*/
|
|
96
96
|
class FrankeSurface {
|
|
97
|
+
scales;
|
|
97
98
|
constructor(scales) {
|
|
98
99
|
this.scales = scales;
|
|
99
100
|
}
|
|
@@ -161,14 +162,14 @@ class FrankeSurface {
|
|
|
161
162
|
*/
|
|
162
163
|
export class Sample {
|
|
163
164
|
/** Array with assorted Point2d samples */
|
|
164
|
-
static
|
|
165
|
+
static point2d = [
|
|
165
166
|
Point2d.create(0, 0),
|
|
166
167
|
Point2d.create(1, 0),
|
|
167
168
|
Point2d.create(0, 1),
|
|
168
169
|
Point2d.create(2, 3)
|
|
169
|
-
];
|
|
170
|
+
];
|
|
170
171
|
/** Array with assorted Point3d samples */
|
|
171
|
-
static
|
|
172
|
+
static point3d = [
|
|
172
173
|
Point3d.create(0, 0, 0),
|
|
173
174
|
Point3d.create(1, 0, 0),
|
|
174
175
|
Point3d.create(0, 1, 0),
|
|
@@ -178,7 +179,7 @@ export class Sample {
|
|
|
178
179
|
Point3d.create(0, 2, 5),
|
|
179
180
|
Point3d.create(-3, 0, 5),
|
|
180
181
|
Point3d.create(4, 3, -2)
|
|
181
|
-
];
|
|
182
|
+
];
|
|
182
183
|
/**
|
|
183
184
|
* Return an array of Point3d, with x,y,z all stepping through a range of values.
|
|
184
185
|
* x varies fastest, then y then z
|
|
@@ -203,7 +204,7 @@ export class Sample {
|
|
|
203
204
|
return points;
|
|
204
205
|
}
|
|
205
206
|
/** Array with assorted Point4d samples */
|
|
206
|
-
static
|
|
207
|
+
static point4d = [
|
|
207
208
|
Point4d.create(0, 0, 0, 1),
|
|
208
209
|
Point4d.create(1, 0, 0, 1),
|
|
209
210
|
Point4d.create(0, 1, 0, 1),
|
|
@@ -215,7 +216,7 @@ export class Sample {
|
|
|
215
216
|
Point4d.create(-3, 0, 5, 0.3),
|
|
216
217
|
Point4d.create(-3, 0, 5, -0.2),
|
|
217
218
|
Point4d.create(4, 3, -2, 1)
|
|
218
|
-
];
|
|
219
|
+
];
|
|
219
220
|
/** Array with assorted nonzero vector samples. */
|
|
220
221
|
static createNonZeroVectors() {
|
|
221
222
|
return [
|
|
@@ -233,7 +234,7 @@ export class Sample {
|
|
|
233
234
|
];
|
|
234
235
|
}
|
|
235
236
|
/** Array with assorted nonzero Vector2d samples */
|
|
236
|
-
static
|
|
237
|
+
static vector2d = [
|
|
237
238
|
Vector2d.create(1, 0),
|
|
238
239
|
Vector2d.create(0, 1),
|
|
239
240
|
Vector2d.create(0, 0),
|
|
@@ -243,7 +244,7 @@ export class Sample {
|
|
|
243
244
|
Vector2d.createPolar(1.0, Angle.createDegrees(20)),
|
|
244
245
|
Vector2d.createPolar(2.0, Angle.createDegrees(20)),
|
|
245
246
|
Vector2d.create(2, 3),
|
|
246
|
-
];
|
|
247
|
+
];
|
|
247
248
|
/** Return an array with assorted Range3d samples */
|
|
248
249
|
static createRange3ds() {
|
|
249
250
|
return [
|
|
@@ -502,46 +503,46 @@ export class Sample {
|
|
|
502
503
|
return Ray3d.create(Point3d.create(x, y, z), Vector3d.create(u, v, w).normalize());
|
|
503
504
|
}
|
|
504
505
|
/** Assorted Plane3dBYOriginAndUnitNormal */
|
|
505
|
-
static
|
|
506
|
+
static plane3dByOriginAndUnitNormal = [
|
|
506
507
|
Plane3dByOriginAndUnitNormal.createXYPlane(),
|
|
507
508
|
Plane3dByOriginAndUnitNormal.createYZPlane(),
|
|
508
509
|
Plane3dByOriginAndUnitNormal.createZXPlane(),
|
|
509
510
|
Sample.createPlane(0, 0, 0, 3, 0, 1),
|
|
510
511
|
Sample.createPlane(1, 2, 3, 2, 4, -1),
|
|
511
|
-
];
|
|
512
|
+
];
|
|
512
513
|
/** Assorted Ray3d, not all unit direction vectors. */
|
|
513
|
-
static
|
|
514
|
+
static ray3d = [
|
|
514
515
|
Sample.createRay(0, 0, 0, 1, 0, 0),
|
|
515
516
|
Sample.createRay(0, 0, 0, 0, 1, 0),
|
|
516
517
|
Sample.createRay(0, 0, 0, 0, 0, 1),
|
|
517
518
|
Sample.createRay(0, 0, 0, 1, 2, 0),
|
|
518
519
|
Sample.createRay(1, 2, 3, 4, 2, -1),
|
|
519
|
-
];
|
|
520
|
+
];
|
|
520
521
|
/** Assorted angles. All principal directions, some others included. */
|
|
521
|
-
static
|
|
522
|
+
static angle = [
|
|
522
523
|
Angle.createDegrees(0),
|
|
523
524
|
Angle.createDegrees(90),
|
|
524
525
|
Angle.createDegrees(180),
|
|
525
526
|
Angle.createDegrees(-90),
|
|
526
527
|
Angle.createDegrees(30),
|
|
527
528
|
Angle.createDegrees(-105),
|
|
528
|
-
];
|
|
529
|
+
];
|
|
529
530
|
/** Assorted angle sweeps */
|
|
530
|
-
static
|
|
531
|
+
static angleSweep = [
|
|
531
532
|
AngleSweep.createStartEndDegrees(0, 90),
|
|
532
533
|
AngleSweep.createStartEndDegrees(0, 180),
|
|
533
534
|
AngleSweep.createStartEndDegrees(-90, 0),
|
|
534
535
|
AngleSweep.createStartEndDegrees(0, -90),
|
|
535
536
|
AngleSweep.createStartEndDegrees(0, 30),
|
|
536
537
|
AngleSweep.createStartEndDegrees(45, 110),
|
|
537
|
-
];
|
|
538
|
+
];
|
|
538
539
|
/** Assorted line segments */
|
|
539
|
-
static
|
|
540
|
+
static lineSegment3d = [
|
|
540
541
|
LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(1, 0, 0)),
|
|
541
542
|
LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(0, 1, 0)),
|
|
542
543
|
LineSegment3d.create(Point3d.create(0, 0, 0), Point3d.create(0, 0, 1)),
|
|
543
544
|
LineSegment3d.create(Point3d.create(1, 2, 3), Point3d.create(-2, -3, 0.5)),
|
|
544
|
-
];
|
|
545
|
+
];
|
|
545
546
|
/** Assorted lines strings */
|
|
546
547
|
static createLineStrings() {
|
|
547
548
|
return [
|
|
@@ -563,26 +564,26 @@ export class Sample {
|
|
|
563
564
|
];
|
|
564
565
|
}
|
|
565
566
|
/** Assorted Range1d: single point, null, simple forward, simple reverse */
|
|
566
|
-
static
|
|
567
|
+
static range1d = [
|
|
567
568
|
Range1d.createX(1),
|
|
568
569
|
Range1d.createNull(),
|
|
569
570
|
Range1d.createXX(1, 2),
|
|
570
571
|
Range1d.createXX(2, 1),
|
|
571
|
-
];
|
|
572
|
+
];
|
|
572
573
|
/** Assorted range2d: single point, null, 2 point with various creation orders. */
|
|
573
|
-
static
|
|
574
|
+
static range2d = [
|
|
574
575
|
Range2d.createXY(1, 2),
|
|
575
576
|
Range2d.createNull(),
|
|
576
577
|
Range2d.createXYXY(1, 2, 0, 3),
|
|
577
578
|
Range2d.createXYXY(1, 2, 3, 4),
|
|
578
|
-
];
|
|
579
|
+
];
|
|
579
580
|
/** Assorted range2d: single point, null, 2 point with various creation orders. */
|
|
580
|
-
static
|
|
581
|
+
static range3d = [
|
|
581
582
|
Range3d.createXYZ(1, 2, 3),
|
|
582
583
|
Range3d.createNull(),
|
|
583
584
|
Range3d.createXYZXYZ(1, 2, 0, 3, 4, 7),
|
|
584
585
|
Range3d.createXYZXYZ(1, 2, 3, -2, -4, -1),
|
|
585
|
-
];
|
|
586
|
+
];
|
|
586
587
|
/**
|
|
587
588
|
* Assorted Matrix3d:
|
|
588
589
|
* * identity
|